diff --git a/lib/pinata-sdk.js b/lib/pinata-sdk.js index bd6c0f1..03f1ad5 100644 --- a/lib/pinata-sdk.js +++ b/lib/pinata-sdk.js @@ -2435,7 +2435,7 @@ module.exports = { /*! exports provided: _args, _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _spec, _where, author, browser, bugs, bundlesize, dependencies, description, devDependencies, homepage, keywords, license, main, name, repository, scripts, typings, version, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"_args\":[[\"axios@0.18.1\",\"/Users/henry/Projects/contribution/Pinata-SDK\"]],\"_from\":\"axios@0.18.1\",\"_id\":\"axios@0.18.1\",\"_inBundle\":false,\"_integrity\":\"sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==\",\"_location\":\"/axios\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"version\",\"registry\":true,\"raw\":\"axios@0.18.1\",\"name\":\"axios\",\"escapedName\":\"axios\",\"rawSpec\":\"0.18.1\",\"saveSpec\":null,\"fetchSpec\":\"0.18.1\"},\"_requiredBy\":[\"/\"],\"_resolved\":\"https://registry.npmjs.org/axios/-/axios-0.18.1.tgz\",\"_spec\":\"0.18.1\",\"_where\":\"/Users/henry/Projects/contribution/Pinata-SDK\",\"author\":{\"name\":\"Matt Zabriskie\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}],\"dependencies\":{\"follow-redirects\":\"1.5.10\",\"is-buffer\":\"^2.0.2\"},\"description\":\"Promise based HTTP client for the browser and node.js\",\"devDependencies\":{\"bundlesize\":\"^0.5.7\",\"coveralls\":\"^2.11.9\",\"es6-promise\":\"^4.0.5\",\"grunt\":\"^1.0.1\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.0.0\",\"grunt-contrib-nodeunit\":\"^1.0.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^19.0.0\",\"grunt-karma\":\"^2.0.0\",\"grunt-ts\":\"^6.0.0-beta.3\",\"grunt-webpack\":\"^1.0.18\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^1.3.0\",\"karma-chrome-launcher\":\"^2.0.0\",\"karma-coverage\":\"^1.0.0\",\"karma-firefox-launcher\":\"^1.0.0\",\"karma-jasmine\":\"^1.0.2\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-opera-launcher\":\"^1.0.0\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^1.1.0\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.7\",\"karma-webpack\":\"^1.7.0\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"sinon\":\"^1.17.4\",\"typescript\":\"^2.0.3\",\"url-search-params\":\"^0.6.1\",\"webpack\":\"^1.13.1\",\"webpack-dev-server\":\"^1.14.1\"},\"homepage\":\"https://github.com/axios/axios\",\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"license\":\"MIT\",\"main\":\"index.js\",\"name\":\"axios\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/axios/axios.git\"},\"scripts\":{\"build\":\"NODE_ENV=production grunt build\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"examples\":\"node ./examples/server.js\",\"postversion\":\"git push && git push --tags\",\"preversion\":\"npm test\",\"start\":\"node ./sandbox/server.js\",\"test\":\"grunt test && bundlesize\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\"},\"typings\":\"./index.d.ts\",\"version\":\"0.18.1\"}"); +module.exports = JSON.parse("{\"_args\":[[\"axios@0.18.1\",\"/Users/mattober/Repos/ipfs/pinata/open-source-tools/Pinata-SDK\"]],\"_from\":\"axios@0.18.1\",\"_id\":\"axios@0.18.1\",\"_inBundle\":false,\"_integrity\":\"sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==\",\"_location\":\"/axios\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"version\",\"registry\":true,\"raw\":\"axios@0.18.1\",\"name\":\"axios\",\"escapedName\":\"axios\",\"rawSpec\":\"0.18.1\",\"saveSpec\":null,\"fetchSpec\":\"0.18.1\"},\"_requiredBy\":[\"/\"],\"_resolved\":\"https://registry.npmjs.org/axios/-/axios-0.18.1.tgz\",\"_spec\":\"0.18.1\",\"_where\":\"/Users/mattober/Repos/ipfs/pinata/open-source-tools/Pinata-SDK\",\"author\":{\"name\":\"Matt Zabriskie\"},\"browser\":{\"./lib/adapters/http.js\":\"./lib/adapters/xhr.js\"},\"bugs\":{\"url\":\"https://github.com/axios/axios/issues\"},\"bundlesize\":[{\"path\":\"./dist/axios.min.js\",\"threshold\":\"5kB\"}],\"dependencies\":{\"follow-redirects\":\"1.5.10\",\"is-buffer\":\"^2.0.2\"},\"description\":\"Promise based HTTP client for the browser and node.js\",\"devDependencies\":{\"bundlesize\":\"^0.5.7\",\"coveralls\":\"^2.11.9\",\"es6-promise\":\"^4.0.5\",\"grunt\":\"^1.0.1\",\"grunt-banner\":\"^0.6.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-clean\":\"^1.0.0\",\"grunt-contrib-nodeunit\":\"^1.0.0\",\"grunt-contrib-watch\":\"^1.0.0\",\"grunt-eslint\":\"^19.0.0\",\"grunt-karma\":\"^2.0.0\",\"grunt-ts\":\"^6.0.0-beta.3\",\"grunt-webpack\":\"^1.0.18\",\"istanbul-instrumenter-loader\":\"^1.0.0\",\"jasmine-core\":\"^2.4.1\",\"karma\":\"^1.3.0\",\"karma-chrome-launcher\":\"^2.0.0\",\"karma-coverage\":\"^1.0.0\",\"karma-firefox-launcher\":\"^1.0.0\",\"karma-jasmine\":\"^1.0.2\",\"karma-jasmine-ajax\":\"^0.1.13\",\"karma-opera-launcher\":\"^1.0.0\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-sauce-launcher\":\"^1.1.0\",\"karma-sinon\":\"^1.0.5\",\"karma-sourcemap-loader\":\"^0.3.7\",\"karma-webpack\":\"^1.7.0\",\"load-grunt-tasks\":\"^3.5.2\",\"minimist\":\"^1.2.0\",\"sinon\":\"^1.17.4\",\"typescript\":\"^2.0.3\",\"url-search-params\":\"^0.6.1\",\"webpack\":\"^1.13.1\",\"webpack-dev-server\":\"^1.14.1\"},\"homepage\":\"https://github.com/axios/axios\",\"keywords\":[\"xhr\",\"http\",\"ajax\",\"promise\",\"node\"],\"license\":\"MIT\",\"main\":\"index.js\",\"name\":\"axios\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/axios/axios.git\"},\"scripts\":{\"build\":\"NODE_ENV=production grunt build\",\"coveralls\":\"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js\",\"examples\":\"node ./examples/server.js\",\"postversion\":\"git push && git push --tags\",\"preversion\":\"npm test\",\"start\":\"node ./sandbox/server.js\",\"test\":\"grunt test && bundlesize\",\"version\":\"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json\"},\"typings\":\"./index.d.ts\",\"version\":\"0.18.1\"}"); /***/ }), @@ -22765,21 +22765,21 @@ function validateMetadata(metadata) { function validatePinPolicyStructure(pinPolicy) { //this function takes in a pin policy and checks the JSON structure to make sure it's valid if (!pinPolicy) { - throw new Error("No pin policy provided"); + throw new Error('No pin policy provided'); } if (!pinPolicy.regions) { - throw new Error("No regions provided in pin policy"); + throw new Error('No regions provided in pin policy'); } if (pinPolicy.regions.length) { pinPolicy.regions.forEach(function (region) { - if (!region.id || !(Object.prototype.toString.call(region.id) === "[object String]")) { - throw new Error("region id must be a string"); + if (!region.id || !(Object.prototype.toString.call(region.id) === '[object String]')) { + throw new Error('region id must be a string'); } if (!(region.desiredReplicationCount || region.desiredReplicationCount === 0) || !Number.isInteger(region.desiredReplicationCount)) { - throw new Error("desiredReplicationCount must be an integer"); + throw new Error('desiredReplicationCount must be an integer'); } }); } @@ -22823,7 +22823,7 @@ function validatePinataOptions(options) { /***/ (function(module, exports, __webpack_require__) { __webpack_require__(/*! babel-polyfill */"./node_modules/babel-polyfill/lib/index.js"); -module.exports = __webpack_require__(/*! /Users/henry/Projects/contribution/Pinata-SDK/src/index.js */"./src/index.js"); +module.exports = __webpack_require__(/*! /Users/mattober/Repos/ipfs/pinata/open-source-tools/Pinata-SDK/src/index.js */"./src/index.js"); /***/ }), @@ -22962,4 +22962,4 @@ module.exports = require("zlib"); /******/ }); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Jhc2UtcGF0aC1jb252ZXJ0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXgvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYnM1OC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY2lkcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jbGFzcy1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYXR0ZW4taW50by1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgudW11bGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcuYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9zaGltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlbGF5ZWQtc3RyZWFtL2xpYi9kZWxheWVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Zvcm1fZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2hpLWJhc2UzMi9zcmMvYmFzZTMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXAtcmVnZXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC9saWIvaXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lzLWlwZnMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWFmbXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29kZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2NvbnZlcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9wcm90b2NvbHMtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2UxNi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2ludC10YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL3ByaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdXRpbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL3ZhcmludC10YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWhhc2hlcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL2NwZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvcmVhZGRpcnIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL3JtZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZGVjb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2VuY29kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvcGluTGlzdC9waW5MaXN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9oYXNoUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkZyb21GUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSlNPTlRvSVBGUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9waW5Kb2JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvdW5waW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3VzZXJQaW5Qb2xpY3kuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL3V0aWwvdmFsaWRhdG9ycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImJ1ZmZlclwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJmc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcIm9zXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInR0eVwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ1cmxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwidXRpbFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ6bGliXCIiXSwibmFtZXMiOlsicGluTGlzdCIsInBpbmF0YUFwaUtleSIsInBpbmF0YVNlY3JldEFwaUtleSIsImZpbHRlcnMiLCJiYXNlRW5kcG9pbnQiLCJiYXNlVXJsIiwiZW5kcG9pbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImF4aW9zIiwiZ2V0Iiwid2l0aENyZWRlbnRpYWxzIiwiaGVhZGVycyIsInRoZW4iLCJyZXN1bHQiLCJzdGF0dXMiLCJFcnJvciIsImRhdGEiLCJlcnJvciIsInJlc3BvbnNlIiwidmFsaWRhdGVBbmRSZXR1cm5EYXRlIiwiZGF0ZVRvVmFsaWRhdGUiLCJkYXRlUGFyc2VkIiwiRGF0ZSIsInBhcnNlIiwidG9JU09TdHJpbmciLCJlIiwicXVlcnlCdWlsZGVyIiwiZmlsdGVyUXVlcnkiLCJtZXRhZGF0YVF1ZXJ5IiwiaGFzaENvbnRhaW5zIiwicGluU3RhcnQiLCJwaW5FbmQiLCJ1bnBpblN0YXJ0IiwidW5waW5FbmQiLCJwaW5TaXplTWluIiwiaXNOYU4iLCJwaW5TaXplTWF4IiwicGFnZUxpbWl0IiwicGFyc2VJbnQiLCJwYWdlT2Zmc2V0IiwibWV0YWRhdGEiLCJuYW1lIiwia2V5dmFsdWVzIiwicHJ1bmVkS2V5VmFsdWVzIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXlWYWx1ZSIsImtleSIsInZhbHVlIiwib3AiLCJzZWNvbmRWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0QXV0aGVudGljYXRpb24iLCJhdXRoZW50aWNhdGVkIiwidXNlclBpbm5lZERhdGFUb3RhbCIsImhhc2hQaW5Qb2xpY3kiLCJpcGZzUGluSGFzaCIsIm5ld1BpblBvbGljeSIsImlzSVBGUyIsImNpZCIsImJvZHkiLCJwdXQiLCJwaW5CeUhhc2giLCJoYXNoVG9QaW4iLCJvcHRpb25zIiwicGluYXRhT3B0aW9ucyIsInBpbmF0YU1ldGFkYXRhIiwicG9zdCIsInBpbkZpbGVUb0lQRlMiLCJyZWFkU3RyZWFtIiwiTm9kZUZvcm1EYXRhIiwiYXBwZW5kIiwic3RyZWFtIiwiUmVhZGFibGUiLCJtYXhDb250ZW50TGVuZ3RoIiwiX2JvdW5kYXJ5IiwiZnMiLCJyZXF1aXJlIiwicmVjdXJzaXZlIiwicGluRnJvbUZTIiwic291cmNlUGF0aCIsInJlYWRkaXJyIiwiZXJyIiwiZGlycyIsImZpbGVzIiwiZmlsZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJmaWxlcGF0aCIsInBpbkpTT05Ub0lQRlMiLCJyZXF1ZXN0Qm9keSIsInBpbmF0YUNvbnRlbnQiLCJwaW5Kb2JzIiwibmV3VXJsIiwiZmlyc3RGaWx0ZXJBcHBsaWVkIiwiYWRkRmlsdGVyIiwibmV3RmlsdGVyIiwic29ydCIsImlwZnNfcGluX2hhc2giLCJsaW1pdCIsIk51bWJlciIsImlzSW50ZWdlciIsIm9mZnNldCIsInVucGluIiwiaGFzaFRvVW5waW4iLCJ1c2VyUGluUG9saWN5IiwicGluYXRhQ2xpZW50IiwiY2xpZW50IiwicmVhZGFibGVTdHJlYW0iLCJ2YWxpZGF0ZUFwaUtleXMiLCJ2YWxpZGF0ZUhvc3ROb2RlcyIsImhvc3ROb2RlcyIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGUiLCJwZWVyTXVsdGlhZGRyIiwidmFsaWRhdGVNZXRhZGF0YSIsIlN0cmluZyIsImkiLCJ2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSIsInBpblBvbGljeSIsInJlZ2lvbnMiLCJsZW5ndGgiLCJyZWdpb24iLCJpZCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiY2lkVmVyc2lvbiIsIndyYXBXaXRoRGlyZWN0b3J5IiwiY3VzdG9tUGluUG9saWN5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxL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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FB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QUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxD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QTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xlQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7Ozs7Ozs7Ozs7OztBQ1RhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1BBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQTRCLElBQUksZ0dBQVU7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLFdBQVc7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFELFdBQVc7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHlCQUF5QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFEQUFxRCxXQUFXO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QyxXQUFXO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLEtBQUs7QUFDMUU7Ozs7Ozs7Ozs7Ozs7QUN6Slk7O0FBRVosa0JBQWtCLG1CQUFPLENBQUMsd0RBQVc7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEtBQTRLO0FBQzVLO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sY0FBYztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsVUFBVSx5QkFBeUIsR0FBRztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsVUFBVSx5QkFBeUIsR0FBRztBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGNBQWM7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGlEQUFXOzs7Ozs7Ozs7Ozs7O0FDVnBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLG1CQUFPLENBQUMsZ0RBQVM7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLGtCQUFNOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7O0FDM0xBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsT0FBTztBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3ZKWTs7QUFFWixnQkFBZ0IsbUJBQU8sQ0FBQywwREFBVztBQUNuQyxrQkFBa0IsbUJBQU8sQ0FBQywwRUFBbUI7QUFDN0MsZUFBZSxtQkFBTyxDQUFDLDhDQUFROztBQUUvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDNU5ZOztBQUVa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O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUNsRlk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUN6Qlk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNuQlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNoRlk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUMvdEJBO0FBQ0Es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OUMsT0FBTyxDQUFDbUUsZUFBWixFQUE2QjtBQUN6QmIsOEJBQTBCLENBQUN0RCxPQUFPLENBQUNtRSxlQUFULENBQTFCO0FBQ0g7QUFDSixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoR0QsbUM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsK0I7Ozs7Ozs7Ozs7O0FDQUEsaUM7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEsK0I7Ozs7Ozs7Ozs7O0FDQUEsaUM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsZ0M7Ozs7Ozs7Ozs7O0FDQUEsZ0M7Ozs7Ozs7Ozs7O0FDQUEsaUM7Ozs7Ozs7Ozs7O0FDQUEsaUMiLCJmaWxlIjoicGluYXRhLXNkay5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwicGluYXRhLXNka1wiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaW5hdGEtc2RrXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBpbmF0YS1zZGtcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICBwYXJhbGxlbCAgICAgIDogcmVxdWlyZSgnLi9wYXJhbGxlbC5qcycpLFxuICBzZXJpYWwgICAgICAgIDogcmVxdWlyZSgnLi9zZXJpYWwuanMnKSxcbiAgc2VyaWFsT3JkZXJlZCA6IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpXG59O1xuIiwiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFib3J0O1xuXG4vKipcbiAqIEFib3J0cyBsZWZ0b3ZlciBhY3RpdmUgam9ic1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFib3J0KHN0YXRlKVxue1xuICBPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5mb3JFYWNoKGNsZWFuLmJpbmQoc3RhdGUpKTtcblxuICAvLyByZXNldCBsZWZ0b3ZlciBqb2JzXG4gIHN0YXRlLmpvYnMgPSB7fTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgbGVmdG92ZXIgam9iIGJ5IGludm9raW5nIGFib3J0IGZ1bmN0aW9uIGZvciB0aGUgcHJvdmlkZWQgam9iIGlkXG4gKlxuICogQHRoaXMgIHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGtleSAtIGpvYiBpZCB0byBhYm9ydFxuICovXG5mdW5jdGlvbiBjbGVhbihrZXkpXG57XG4gIGlmICh0eXBlb2YgdGhpcy5qb2JzW2tleV0gPT0gJ2Z1bmN0aW9uJylcbiAge1xuICAgIHRoaXMuam9ic1trZXldKCk7XG4gIH1cbn1cbiIsInZhciBkZWZlciA9IHJlcXVpcmUoJy4vZGVmZXIuanMnKTtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHlcbiAqIGV2ZW4gaWYgY2FsbGJhY2sgaXRzZWxmIGlzIG5vdFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBpbnZva2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhdWdtZW50ZWQgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYXN5bmMoY2FsbGJhY2spXG57XG4gIHZhciBpc0FzeW5jID0gZmFsc2U7XG5cbiAgLy8gY2hlY2sgaWYgYXN5bmMgaGFwcGVuZWRcbiAgZGVmZXIoZnVuY3Rpb24oKSB7IGlzQXN5bmMgPSB0cnVlOyB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYXN5bmNfY2FsbGJhY2soZXJyLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoaXNBc3luYylcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBkZWZlcihmdW5jdGlvbiBuZXh0VGlja19jYWxsYmFjaygpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZGVmZXI7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBmdW5jdGlvbiBvbiBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcFxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gcnVuXG4gKi9cbmZ1bmN0aW9uIGRlZmVyKGZuKVxue1xuICB2YXIgbmV4dFRpY2sgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09ICdmdW5jdGlvbidcbiAgICA/IHNldEltbWVkaWF0ZVxuICAgIDogKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm9jZXNzLm5leHRUaWNrXG4gICAgICA6IG51bGxcbiAgICApO1xuXG4gIGlmIChuZXh0VGljaylcbiAge1xuICAgIG5leHRUaWNrKGZuKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgfVxufVxuIiwidmFyIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gICwgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gaXRlcmF0ZTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVhY2ggam9iIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IGpvYiBzdGF0dXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGNhbGxiYWNrKVxue1xuICAvLyBzdG9yZSBjdXJyZW50IGluZGV4XG4gIHZhciBrZXkgPSBzdGF0ZVsna2V5ZWRMaXN0J10gPyBzdGF0ZVsna2V5ZWRMaXN0J11bc3RhdGUuaW5kZXhdIDogc3RhdGUuaW5kZXg7XG5cbiAgc3RhdGUuam9ic1trZXldID0gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGxpc3Rba2V5XSwgZnVuY3Rpb24oZXJyb3IsIG91dHB1dClcbiAge1xuICAgIC8vIGRvbid0IHJlcGVhdCB5b3Vyc2VsZlxuICAgIC8vIHNraXAgc2Vjb25kYXJ5IGNhbGxiYWNrc1xuICAgIGlmICghKGtleSBpbiBzdGF0ZS5qb2JzKSlcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgam9ic1xuICAgIGRlbGV0ZSBzdGF0ZS5qb2JzW2tleV07XG5cbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgLy8gZG9uJ3QgcHJvY2VzcyByZXN0IG9mIHRoZSByZXN1bHRzXG4gICAgICAvLyBzdG9wIHN0aWxsIGFjdGl2ZSBqb2JzXG4gICAgICAvLyBhbmQgcmVzZXQgdGhlIGxpc3RcbiAgICAgIGFib3J0KHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIHN0YXRlLnJlc3VsdHNba2V5XSA9IG91dHB1dDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gc2FsdmFnZWQgcmVzdWx0c1xuICAgIGNhbGxiYWNrKGVycm9yLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGpvYiBlbGVtZW50XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIGludm9rZVxuICogQHBhcmFtICAge3N0cmluZ3xudW1iZXJ9IGtleSAtIGtleS9pbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgbGlzdCBvZiBqb2JzXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGl0ZW0gLSBqb2IgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIGFmdGVyIGl0ZXJhdG9yIGlzIGRvbmUgd2l0aCB0aGUgam9iXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb258bWl4ZWR9IC0gam9iIGFib3J0IGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBlbHNlXG4gKi9cbmZ1bmN0aW9uIHJ1bkpvYihpdGVyYXRvciwga2V5LCBpdGVtLCBjYWxsYmFjaylcbntcbiAgdmFyIGFib3J0ZXI7XG5cbiAgLy8gYWxsb3cgc2hvcnRjdXQgaWYgaXRlcmF0b3IgZXhwZWN0cyBvbmx5IHR3byBhcmd1bWVudHNcbiAgaWYgKGl0ZXJhdG9yLmxlbmd0aCA9PSAyKVxuICB7XG4gICAgYWJvcnRlciA9IGl0ZXJhdG9yKGl0ZW0sIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cbiAgLy8gb3RoZXJ3aXNlIGdvIHdpdGggZnVsbCB0aHJlZSBhcmd1bWVudHNcbiAgZWxzZVxuICB7XG4gICAgYWJvcnRlciA9IGl0ZXJhdG9yKGl0ZW0sIGtleSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuXG4gIHJldHVybiBhYm9ydGVyO1xufVxuIiwiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHN0YXRlO1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqIGZvciBpdGVyYXRpb24gb3ZlciBsaXN0XG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGxpc3QgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb258bnVsbH0gc29ydE1ldGhvZCAtIGZ1bmN0aW9uIHRvIHVzZSBmb3Iga2V5cyBzb3J0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIHRvIGtlZXAgdGhlbSBhcyBpc1xuICogQHJldHVybnMge29iamVjdH0gLSBpbml0aWFsIHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBzdGF0ZShsaXN0LCBzb3J0TWV0aG9kKVxue1xuICB2YXIgaXNOYW1lZExpc3QgPSAhQXJyYXkuaXNBcnJheShsaXN0KVxuICAgICwgaW5pdFN0YXRlID1cbiAgICB7XG4gICAgICBpbmRleCAgICA6IDAsXG4gICAgICBrZXllZExpc3Q6IGlzTmFtZWRMaXN0IHx8IHNvcnRNZXRob2QgPyBPYmplY3Qua2V5cyhsaXN0KSA6IG51bGwsXG4gICAgICBqb2JzICAgICA6IHt9LFxuICAgICAgcmVzdWx0cyAgOiBpc05hbWVkTGlzdCA/IHt9IDogW10sXG4gICAgICBzaXplICAgICA6IGlzTmFtZWRMaXN0ID8gT2JqZWN0LmtleXMobGlzdCkubGVuZ3RoIDogbGlzdC5sZW5ndGhcbiAgICB9XG4gICAgO1xuXG4gIGlmIChzb3J0TWV0aG9kKVxuICB7XG4gICAgLy8gc29ydCBhcnJheSBrZXlzIGJhc2VkIG9uIGl0J3MgdmFsdWVzXG4gICAgLy8gc29ydCBvYmplY3QncyBrZXlzIGp1c3Qgb24gb3duIG1lcml0XG4gICAgaW5pdFN0YXRlLmtleWVkTGlzdC5zb3J0KGlzTmFtZWRMaXN0ID8gc29ydE1ldGhvZCA6IGZ1bmN0aW9uKGEsIGIpXG4gICAge1xuICAgICAgcmV0dXJuIHNvcnRNZXRob2QobGlzdFthXSwgbGlzdFtiXSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaW5pdFN0YXRlO1xufVxuIiwidmFyIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gICwgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gdGVybWluYXRvcjtcblxuLyoqXG4gKiBUZXJtaW5hdGVzIGpvYnMgaW4gdGhlIGF0dGFjaGVkIHN0YXRlIGNvbnRleHRcbiAqXG4gKiBAdGhpcyAgQXN5bmNLaXRTdGF0ZSNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZmluYWwgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRlcm1pbmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHRlcm1pbmF0b3IoY2FsbGJhY2spXG57XG4gIGlmICghT2JqZWN0LmtleXModGhpcy5qb2JzKS5sZW5ndGgpXG4gIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBmYXN0IGZvcndhcmQgaXRlcmF0aW9uIGluZGV4XG4gIHRoaXMuaW5kZXggPSB0aGlzLnNpemU7XG5cbiAgLy8gYWJvcnQgam9ic1xuICBhYm9ydCh0aGlzKTtcblxuICAvLyBzZW5kIGJhY2sgcmVzdWx0cyB3ZSBoYXZlIHNvIGZhclxuICBhc3luYyhjYWxsYmFjaykobnVsbCwgdGhpcy5yZXN1bHRzKTtcbn1cbiIsInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBwYXJhbGxlbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gcGFyYWxsZWxcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBwYXJhbGxlbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0KTtcblxuICB3aGlsZSAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAge1xuICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KVxuICAgIHtcbiAgICAgIGlmIChlcnJvcilcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gbG9va3MgbGlrZSBpdCdzIHRoZSBsYXN0IG9uZVxuICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmxlbmd0aCA9PT0gMClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG4iLCJ2YXIgc2VyaWFsT3JkZXJlZCA9IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgcmV0dXJuIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIG51bGwsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWxPcmRlcmVkO1xuLy8gc29ydGluZyBoZWxwZXJzXG5tb2R1bGUuZXhwb3J0cy5hc2NlbmRpbmcgID0gYXNjZW5kaW5nO1xubW9kdWxlLmV4cG9ydHMuZGVzY2VuZGluZyA9IGRlc2NlbmRpbmc7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIHNvcnRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gc29ydE1ldGhvZCAtIGN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgc29ydE1ldGhvZCwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0LCBzb3J0TWV0aG9kKTtcblxuICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24gaXRlcmF0b3JIYW5kbGVyKGVycm9yLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZXgrKztcblxuICAgIC8vIGFyZSB3ZSB0aGVyZSB5ZXQ/XG4gICAgaWYgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gICAge1xuICAgICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGl0ZXJhdG9ySGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZG9uZSBoZXJlXG4gICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cblxuLypcbiAqIC0tIFNvcnQgbWV0aG9kc1xuICovXG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIC0xICogYXNjZW5kaW5nKGEsIGIpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgZGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciBoZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG4gICAgdmFyIHRpbWVyO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCFoZWFkZXJzWydVc2VyLUFnZW50J10gJiYgIWhlYWRlcnNbJ3VzZXItYWdlbnQnXSkge1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBwa2cudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiBkYXRhIGV4aXN0c1xuICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICB2YXIgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICBhdXRoID0gdXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKGNvbmZpZy51cmwpO1xuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonO1xuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC5hdXRoKSB7XG4gICAgICB2YXIgdXJsQXV0aCA9IHBhcnNlZC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgdXJsVXNlcm5hbWUgPSB1cmxBdXRoWzBdIHx8ICcnO1xuICAgICAgdmFyIHVybFBhc3N3b3JkID0gdXJsQXV0aFsxXSB8fCAnJztcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmIChhdXRoKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIHZhciBpc0h0dHBzID0gcHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIHZhciBhZ2VudCA9IGlzSHR0cHMgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogYWdlbnQsXG4gICAgICBhdXRoOiBhdXRoXG4gICAgfTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG5cbiAgICB2YXIgcHJveHkgPSBjb25maWcucHJveHk7XG4gICAgaWYgKCFwcm94eSAmJiBwcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcm94eUVudiA9IHByb3RvY29sLnNsaWNlKDAsIC0xKSArICdfcHJveHknO1xuICAgICAgdmFyIHByb3h5VXJsID0gcHJvY2Vzcy5lbnZbcHJveHlFbnZdIHx8IHByb2Nlc3MuZW52W3Byb3h5RW52LnRvVXBwZXJDYXNlKCldO1xuICAgICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICAgIHZhciBwYXJzZWRQcm94eVVybCA9IHVybC5wYXJzZShwcm94eVVybCk7XG4gICAgICAgIHByb3h5ID0ge1xuICAgICAgICAgIGhvc3Q6IHBhcnNlZFByb3h5VXJsLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGFyc2VkUHJveHlVcmwuYXV0aCkge1xuICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgcHJveHkuYXV0aCA9IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBwcm94eVVybEF1dGhbMF0sXG4gICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHByb3h5Lmhvc3Q7XG4gICAgICBvcHRpb25zLmhvc3QgPSBwcm94eS5ob3N0O1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHByb3h5LnBvcnQ7XG4gICAgICBvcHRpb25zLnBhdGggPSBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aDtcblxuICAgICAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICAgICAgaWYgKHByb3h5LmF1dGgpIHtcbiAgICAgICAgdmFyIGJhc2U2NCA9IG5ldyBCdWZmZXIocHJveHkuYXV0aC51c2VybmFtZSArICc6JyArIHByb3h5LmF1dGgucGFzc3dvcmQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0cmFuc3BvcnQ7XG4gICAgaWYgKGNvbmZpZy50cmFuc3BvcnQpIHtcbiAgICAgIHRyYW5zcG9ydCA9IGNvbmZpZy50cmFuc3BvcnQ7XG4gICAgfSBlbHNlIGlmIChjb25maWcubWF4UmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCAmJiBjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Q29udGVudExlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICB2YXIgcmVxID0gdHJhbnNwb3J0LnJlcXVlc3Qob3B0aW9ucywgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UocmVzKSB7XG4gICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgLy8gUmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQgc28ga2lsbCB0aW1lciB0aGF0IGhhbmRsZXMgcmVxdWVzdCB0aW1lb3V0XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG4gICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgIC8qZXNsaW50IGRlZmF1bHQtY2FzZTowKi9cbiAgICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgY2FzZSAnZGVmbGF0ZSc6XG4gICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgc3RyZWFtID0gc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHJlcXVlc3QgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgIHZhciBsYXN0UmVxdWVzdCA9IHJlcy5yZXEgfHwgcmVxO1xuXG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHN0cmVhbTtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbURhdGEoY2h1bmspIHtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29udGVudCBsZW5ndGggaXMgbm90IG92ZXIgdGhlIG1heENvbnRlbnRMZW5ndGggaWYgc3BlY2lmaWVkXG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoID4gLTEgJiYgQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcikubGVuZ3RoID4gY29uZmlnLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRW5kKCkge1xuICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGVycm9yc1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0RXJyb3IoZXJyKSB7XG4gICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHJlcXVlc3QgdGltZW91dFxuICAgIGlmIChjb25maWcudGltZW91dCAmJiAhdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXEpKTtcbiAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uID0gJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZVxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhY29uZmlnLnJlc3BvbnNlVHlwZSB8fCBjb25maWcucmVzcG9uc2VUeXBlID09PSAndGV4dCcgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICB2YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG5cbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihjb25maWcudXJsKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIERPTUV4Y2VwdGlvbiB0aHJvd24gYnkgYnJvd3NlcnMgbm90IGNvbXBhdGlibGUgWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMi5cbiAgICAgICAgLy8gQnV0LCB0aGlzIGNhbiBiZSBzdXBwcmVzc2VkIGZvciAnanNvbicgdHlwZSBhcyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGRlZmF1bHQgJ3RyYW5zZm9ybVJlc3BvbnNlJyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZSh1dGlscy5tZXJnZShkZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vLi4vZGVmYXVsdHMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSB1dGlscy5tZXJnZSh7XG4gICAgICB1cmw6IGFyZ3VtZW50c1swXVxuICAgIH0sIGFyZ3VtZW50c1sxXSk7XG4gIH1cblxuICBjb25maWcgPSB1dGlscy5tZXJnZShkZWZhdWx0cywge21ldGhvZDogJ2dldCd9LCB0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIEhvb2sgdXAgaW50ZXJjZXB0b3JzIG1pZGRsZXdhcmVcbiAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmxcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCkge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBTdXBwb3J0IGJhc2VVUkwgY29uZmlnXG4gIGlmIChjb25maWcuYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChjb25maWcudXJsKSkge1xuICAgIGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gIH1cblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzIHx8IHt9XG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIC8vIE5vdGU6IHN0YXR1cyBpcyBub3QgZXhwb3NlZCBieSBYRG9tYWluUmVxdWVzdFxuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIElnbm9yZSAqLyB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lNDAvZ2ksICdAJykuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgfSxcblxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgfVxuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGRcXCtcXC1cXC5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIGlzQnVmZmVyID0gcmVxdWlyZSgnaXMtYnVmZmVyJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHRba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsImZ1bmN0aW9uIGNvbnZlcnRGaWxlUGF0aFRvQmFzZURpcmVjdG9yeVBhdGgoc291cmNlUGF0aCwgZmlsZVBhdGgpIHtcbiAgICBsZXQgbmV3U3RyaW5nID0gKHNvdXJjZVBhdGguc3RhcnRzV2l0aCgnLi8nKSA/IHNvdXJjZVBhdGguc3Vic3RyaW5nKDIpIDogc291cmNlUGF0aCk7XG4gICAgLy9tYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYSBkYW5nbGluZyAvIHRvIHRocm93IGEgZmFsc2UgcG9zaXRpdmUgaW50byB0aGUgbWl4XG4gICAgY29uc3QgbGFzdEluZGV4T2ZEaXJlY3RvcnkgPSBuZXdTdHJpbmcubGFzdEluZGV4T2YoJy8nKTtcbiAgICBpZihsYXN0SW5kZXhPZkRpcmVjdG9yeSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBsZW5ndGhPZlNvdXJjZSA9IHNvdXJjZVBhdGgubGVuZ3RoO1xuICAgIC8vb25seSB0cmltIGlmIHRoZSAvIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nXG4gICAgaWYgKGxhc3RJbmRleE9mRGlyZWN0b3J5ID09PSAobGVuZ3RoT2ZTb3VyY2UgLSAxKSkge1xuICAgICAgICBuZXdTdHJpbmcgPSBzb3VyY2VQYXRoLnNsaWNlKDAsLTEpO1xuICAgIH1cblxuICAgIC8vbm93IHRoYXQgd2UncmUgc3VyZSBvZiBubyBmYWxzZSBwb3NpdGl2ZSwgbGV0J3MgY2hlY2sgYW5kIHNlZSB3aGVyZSB0aGUgXCJyb290XCIgZGlyZWN0b3J5IGlzXG4gICAgY29uc3QgbmV3TGFzdEluZGV4ID0gbmV3U3RyaW5nLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYgKCBuZXdMYXN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGF0aEdhcmJhZ2UgPSBuZXdTdHJpbmcuc3Vic3RyaW5nKDAsIG5ld0xhc3RJbmRleCArIDEpO1xuICAgICAgICBuZXdTdHJpbmcgPSBmaWxlUGF0aC5zcGxpdChwYXRoR2FyYmFnZSlbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1N0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0RmlsZVBhdGhUb0Jhc2VEaXJlY3RvcnlQYXRoIiwiJ3VzZSBzdHJpY3QnXG4vLyBiYXNlLXggZW5jb2RpbmcgLyBkZWNvZGluZ1xuLy8gQ29weXJpZ2h0IChjKSAyMDE4IGJhc2UteCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFRoZSBCaXRjb2luIENvcmUgZGV2ZWxvcGVycyAoYmFzZTU4LmNwcClcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgc29mdHdhcmUgbGljZW5zZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmdcbi8vIGZpbGUgTElDRU5TRSBvciBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocC5cbi8vIEB0cy1pZ25vcmVcbnZhciBfQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbmZ1bmN0aW9uIGJhc2UgKEFMUEhBQkVUKSB7XG4gIGlmIChBTFBIQUJFVC5sZW5ndGggPj0gMjU1KSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscGhhYmV0IHRvbyBsb25nJykgfVxuICB2YXIgQkFTRV9NQVAgPSBuZXcgVWludDhBcnJheSgyNTYpXG4gIGZvciAodmFyIGogPSAwOyBqIDwgQkFTRV9NQVAubGVuZ3RoOyBqKyspIHtcbiAgICBCQVNFX01BUFtqXSA9IDI1NVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQUxQSEFCRVQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgeCA9IEFMUEhBQkVULmNoYXJBdChpKVxuICAgIHZhciB4YyA9IHguY2hhckNvZGVBdCgwKVxuICAgIGlmIChCQVNFX01BUFt4Y10gIT09IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIGFtYmlndW91cycpIH1cbiAgICBCQVNFX01BUFt4Y10gPSBpXG4gIH1cbiAgdmFyIEJBU0UgPSBBTFBIQUJFVC5sZW5ndGhcbiAgdmFyIExFQURFUiA9IEFMUEhBQkVULmNoYXJBdCgwKVxuICB2YXIgRkFDVE9SID0gTWF0aC5sb2coQkFTRSkgLyBNYXRoLmxvZygyNTYpIC8vIGxvZyhCQVNFKSAvIGxvZygyNTYpLCByb3VuZGVkIHVwXG4gIHZhciBpRkFDVE9SID0gTWF0aC5sb2coMjU2KSAvIE1hdGgubG9nKEJBU0UpIC8vIGxvZygyNTYpIC8gbG9nKEJBU0UpLCByb3VuZGVkIHVwXG4gIGZ1bmN0aW9uIGVuY29kZSAoc291cmNlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSB8fCBzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7IHNvdXJjZSA9IF9CdWZmZXIuZnJvbShzb3VyY2UpIH1cbiAgICBpZiAoIV9CdWZmZXIuaXNCdWZmZXIoc291cmNlKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBCdWZmZXInKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnIH1cbiAgICAgICAgLy8gU2tpcCAmIGNvdW50IGxlYWRpbmcgemVyb2VzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB2YXIgcGJlZ2luID0gMFxuICAgIHZhciBwZW5kID0gc291cmNlLmxlbmd0aFxuICAgIHdoaWxlIChwYmVnaW4gIT09IHBlbmQgJiYgc291cmNlW3BiZWdpbl0gPT09IDApIHtcbiAgICAgIHBiZWdpbisrXG4gICAgICB6ZXJvZXMrK1xuICAgIH1cbiAgICAgICAgLy8gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGluIGJpZy1lbmRpYW4gYmFzZTU4IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKChwZW5kIC0gcGJlZ2luKSAqIGlGQUNUT1IgKyAxKSA+Pj4gMFxuICAgIHZhciBiNTggPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBieXRlcy5cbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kKSB7XG4gICAgICB2YXIgY2FycnkgPSBzb3VyY2VbcGJlZ2luXVxuICAgICAgICAgICAgLy8gQXBwbHkgXCJiNTggPSBiNTggKiAyNTYgKyBjaFwiLlxuICAgICAgdmFyIGkgPSAwXG4gICAgICBmb3IgKHZhciBpdDEgPSBzaXplIC0gMTsgKGNhcnJ5ICE9PSAwIHx8IGkgPCBsZW5ndGgpICYmIChpdDEgIT09IC0xKTsgaXQxLS0sIGkrKykge1xuICAgICAgICBjYXJyeSArPSAoMjU2ICogYjU4W2l0MV0pID4+PiAwXG4gICAgICAgIGI1OFtpdDFdID0gKGNhcnJ5ICUgQkFTRSkgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSA+Pj4gMFxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7IHRocm93IG5ldyBFcnJvcignTm9uLXplcm8gY2FycnknKSB9XG4gICAgICBsZW5ndGggPSBpXG4gICAgICBwYmVnaW4rK1xuICAgIH1cbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lcyBpbiBiYXNlNTggcmVzdWx0LlxuICAgIHZhciBpdDIgPSBzaXplIC0gbGVuZ3RoXG4gICAgd2hpbGUgKGl0MiAhPT0gc2l6ZSAmJiBiNThbaXQyXSA9PT0gMCkge1xuICAgICAgaXQyKytcbiAgICB9XG4gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgcmVzdWx0IGludG8gYSBzdHJpbmcuXG4gICAgdmFyIHN0ciA9IExFQURFUi5yZXBlYXQoemVyb2VzKVxuICAgIGZvciAoOyBpdDIgPCBzaXplOyArK2l0MikgeyBzdHIgKz0gQUxQSEFCRVQuY2hhckF0KGI1OFtpdDJdKSB9XG4gICAgcmV0dXJuIHN0clxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZVVuc2FmZSAoc291cmNlKSB7XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFN0cmluZycpIH1cbiAgICBpZiAoc291cmNlLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gX0J1ZmZlci5hbGxvYygwKSB9XG4gICAgdmFyIHBzeiA9IDBcbiAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGFuZCBjb3VudCBsZWFkaW5nICcxJ3MuXG4gICAgdmFyIHplcm9lcyA9IDBcbiAgICB2YXIgbGVuZ3RoID0gMFxuICAgIHdoaWxlIChzb3VyY2VbcHN6XSA9PT0gTEVBREVSKSB7XG4gICAgICB6ZXJvZXMrK1xuICAgICAgcHN6KytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2UyNTYgcmVwcmVzZW50YXRpb24uXG4gICAgdmFyIHNpemUgPSAoKChzb3VyY2UubGVuZ3RoIC0gcHN6KSAqIEZBQ1RPUikgKyAxKSA+Pj4gMCAvLyBsb2coNTgpIC8gbG9nKDI1NiksIHJvdW5kZWQgdXAuXG4gICAgdmFyIGIyNTYgPSBuZXcgVWludDhBcnJheShzaXplKVxuICAgICAgICAvLyBQcm9jZXNzIHRoZSBjaGFyYWN0ZXJzLlxuICAgIHdoaWxlIChzb3VyY2VbcHN6XSkge1xuICAgICAgICAgICAgLy8gRGVjb2RlIGNoYXJhY3RlclxuICAgICAgdmFyIGNhcnJ5ID0gQkFTRV9NQVBbc291cmNlLmNoYXJDb2RlQXQocHN6KV1cbiAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyXG4gICAgICBpZiAoY2FycnkgPT09IDI1NSkgeyByZXR1cm4gfVxuICAgICAgdmFyIGkgPSAwXG4gICAgICBmb3IgKHZhciBpdDMgPSBzaXplIC0gMTsgKGNhcnJ5ICE9PSAwIHx8IGkgPCBsZW5ndGgpICYmIChpdDMgIT09IC0xKTsgaXQzLS0sIGkrKykge1xuICAgICAgICBjYXJyeSArPSAoQkFTRSAqIGIyNTZbaXQzXSkgPj4+IDBcbiAgICAgICAgYjI1NltpdDNdID0gKGNhcnJ5ICUgMjU2KSA+Pj4gMFxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIDI1NikgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcHN6KytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgdHJhaWxpbmcgc3BhY2VzLlxuICAgIGlmIChzb3VyY2VbcHN6XSA9PT0gJyAnKSB7IHJldHVybiB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYjI1Ni5cbiAgICB2YXIgaXQ0ID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDQgIT09IHNpemUgJiYgYjI1NltpdDRdID09PSAwKSB7XG4gICAgICBpdDQrK1xuICAgIH1cbiAgICB2YXIgdmNoID0gX0J1ZmZlci5hbGxvY1Vuc2FmZSh6ZXJvZXMgKyAoc2l6ZSAtIGl0NCkpXG4gICAgdmNoLmZpbGwoMHgwMCwgMCwgemVyb2VzKVxuICAgIHZhciBqID0gemVyb2VzXG4gICAgd2hpbGUgKGl0NCAhPT0gc2l6ZSkge1xuICAgICAgdmNoW2orK10gPSBiMjU2W2l0NCsrXVxuICAgIH1cbiAgICByZXR1cm4gdmNoXG4gIH1cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSB7IHJldHVybiBidWZmZXIgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm9uLWJhc2UnICsgQkFTRSArICcgY2hhcmFjdGVyJylcbiAgfVxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gYmFzZVxuIiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuXG52YXIgQ0lEVXRpbCA9IHtcbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGlzIG5vdC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgaXQgaXMgYSB2YWxpZCBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tDSURDb21wb25lbnRzOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsIHZhbHVlcyBhcmUgbm90IHZhbGlkIENJRHMnXG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIudmVyc2lvbiA9PT0gMCB8fCBvdGhlci52ZXJzaW9uID09PSAxKSkge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIHZlcnNpb24sIG11c3QgYmUgYSBudW1iZXIgZXF1YWwgdG8gMSBvciAwJ1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3RoZXIuY29kZWMgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ2NvZGVjIG11c3QgYmUgc3RyaW5nJ1xuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAob3RoZXIuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICAgIHJldHVybiBcImNvZGVjIG11c3QgYmUgJ2RhZy1wYicgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlci5tdWx0aWJhc2VOYW1lICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICByZXR1cm4gXCJtdWx0aWJhc2VOYW1lIG11c3QgYmUgJ2Jhc2U1OGJ0YycgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlci5tdWx0aWhhc2gpKSB7XG4gICAgICByZXR1cm4gJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBtaC52YWxpZGF0ZShvdGhlci5tdWx0aWhhc2gpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgZXJyb3JNc2cgPSBlcnIubWVzc2FnZVxuICAgICAgaWYgKCFlcnJvck1zZykgeyAvLyBKdXN0IGluIGNhc2UgbWgudmFsaWRhdGUoKSB0aHJvd3MgYW4gZXJyb3Igd2l0aCBlbXB0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGVycm9yTXNnID0gJ011bHRpaGFzaCB2YWxpZGF0aW9uIGZhaWxlZCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvck1zZ1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENJRFV0aWxcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBtaCA9IHJlcXVpcmUoJ211bHRpaGFzaGVzJylcbmNvbnN0IG11bHRpYmFzZSA9IHJlcXVpcmUoJ211bHRpYmFzZScpXG5jb25zdCBtdWx0aWNvZGVjID0gcmVxdWlyZSgnbXVsdGljb2RlYycpXG5jb25zdCBjb2RlY3MgPSByZXF1aXJlKCdtdWx0aWNvZGVjL3NyYy9iYXNlLXRhYmxlLmpzb24nKVxuY29uc3QgQ0lEVXRpbCA9IHJlcXVpcmUoJy4vY2lkLXV0aWwnKVxuY29uc3Qgd2l0aElzID0gcmVxdWlyZSgnY2xhc3MtaXMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6ZWRDSURcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlY1xuICogQHBhcmFtIHtudW1iZXJ9IHZlcnNpb25cbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqL1xuXG4vKipcbiAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgQ0lELlxuICogQGZ1bmN0aW9uIGlzQ0lEXG4gKiBAbWVtYmVyb2YgQ0lEXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAqIEByZXR1cm5zIHtib29sfVxuICovXG5cbi8qKlxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgQ0lEIGA8bWJhc2U+PHZlcnNpb24+PG1jb2RlYz48bWhhc2g+YFxuICogLCBhcyBkZWZpbmVkIGluIFtpcGxkL2NpZF0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9jaWQpLlxuICogQGNsYXNzIENJRFxuICovXG5jbGFzcyBDSUQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENJRC5cbiAgICpcbiAgICogVGhlIGFsZ29yaXRobSBmb3IgYXJndW1lbnQgaW5wdXQgaXMgcm91Z2hseTpcbiAgICogYGBgXG4gICAqIGlmIChjaWQpXG4gICAqICAgLT4gY3JlYXRlIGEgY29weVxuICAgKiBlbHNlIGlmIChzdHIpXG4gICAqICAgaWYgKDFzdCBjaGFyIGlzIG9uIG11bHRpYmFzZSB0YWJsZSkgLT4gQ0lEIFN0cmluZ1xuICAgKiAgIGVsc2UgLT4gYnM1OCBlbmNvZGVkIG11bHRpaGFzaFxuICAgKiBlbHNlIGlmIChCdWZmZXIpXG4gICAqICAgaWYgKDFzdCBieXRlIGlzIDAgb3IgMSkgLT4gQ0lEXG4gICAqICAgZWxzZSAtPiBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoTnVtYmVyKVxuICAgKiAgIC0+IGNvbnN0cnVjdCBDSUQgYnkgcGFydHNcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcnxDSUR9IHZlcnNpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlY11cbiAgICogQHBhcmFtIHtCdWZmZXJ9IFttdWx0aWhhc2hdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbXVsdGliYXNlTmFtZV1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IENJRCg8dmVyc2lvbj4sIDxjb2RlYz4sIDxtdWx0aWhhc2g+LCA8bXVsdGliYXNlTmFtZT4pXG4gICAqIG5ldyBDSUQoPGNpZFN0cj4pXG4gICAqIG5ldyBDSUQoPGNpZC5idWZmZXI+KVxuICAgKiBuZXcgQ0lEKDxtdWx0aWhhc2g+KVxuICAgKiBuZXcgQ0lEKDxiczU4IGVuY29kZWQgbXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8Y2lkPilcbiAgICovXG4gIGNvbnN0cnVjdG9yICh2ZXJzaW9uLCBjb2RlYywgbXVsdGloYXNoLCBtdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKF9DSUQuaXNDSUQodmVyc2lvbikpIHtcbiAgICAgIC8vIHZlcnNpb24gaXMgYW4gZXhpc2luZyBDSUQgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGNpZCA9IHZlcnNpb25cbiAgICAgIHRoaXMudmVyc2lvbiA9IGNpZC52ZXJzaW9uXG4gICAgICB0aGlzLmNvZGVjID0gY2lkLmNvZGVjXG4gICAgICB0aGlzLm11bHRpaGFzaCA9IEJ1ZmZlci5mcm9tKGNpZC5tdWx0aWhhc2gpXG4gICAgICAvLyBEZWZhdWx0IGd1YXJkIGZvciB3aGVuIGEgQ0lEIDwgMC43IGlzIHBhc3NlZCB3aXRoIG5vIG11bHRpYmFzZU5hbWVcbiAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IGNpZC5tdWx0aWJhc2VOYW1lIHx8IChjaWQudmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBlLmcuICdiYXNlMzInIG9yIGZhbHNlXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IG11bHRpYmFzZS5pc0VuY29kZWQodmVyc2lvbilcbiAgICAgIGlmIChiYXNlTmFtZSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIFN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlLCBzbyB2MVxuICAgICAgICBjb25zdCBjaWQgPSBtdWx0aWJhc2UuZGVjb2RlKHZlcnNpb24pXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHBhcnNlSW50KGNpZC5zbGljZSgwLCAxKS50b1N0cmluZygnaGV4JyksIDE2KVxuICAgICAgICB0aGlzLmNvZGVjID0gbXVsdGljb2RlYy5nZXRDb2RlYyhjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGljb2RlYy5ybVByZWZpeChjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9IGJhc2VOYW1lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgYmFzZTU4YnRjIHN0cmluZyBtdWx0aWhhc2gsIHNvIHYwXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDBcbiAgICAgICAgdGhpcy5jb2RlYyA9ICdkYWctcGInXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbWguZnJvbUI1OFN0cmluZyh2ZXJzaW9uKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTU4YnRjJ1xuICAgICAgfVxuICAgICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0cmluZycsIHsgdmFsdWU6IHZlcnNpb24gfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmVyc2lvbikpIHtcbiAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IHZlcnNpb24uc2xpY2UoMCwgMSlcbiAgICAgIGNvbnN0IHYgPSBwYXJzZUludChmaXJzdEJ5dGUudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgIGlmICh2ID09PSAxKSB7XG4gICAgICAgIC8vIHZlcnNpb24gaXMgYSBDSUQgYnVmZmVyXG4gICAgICAgIGNvbnN0IGNpZCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdlxuICAgICAgICB0aGlzLmNvZGVjID0gbXVsdGljb2RlYy5nZXRDb2RlYyhjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gbXVsdGljb2RlYy5ybVByZWZpeChjaWQuc2xpY2UoMSkpXG4gICAgICAgIHRoaXMubXVsdGliYXNlTmFtZSA9ICdiYXNlMzInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgcmF3IG11bHRpaGFzaCBidWZmZXIsIHNvIHYwXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDBcbiAgICAgICAgdGhpcy5jb2RlYyA9ICdkYWctcGInXG4gICAgICAgIHRoaXMubXVsdGloYXNoID0gdmVyc2lvblxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTU4YnRjJ1xuICAgICAgfVxuICAgICAgQ0lELnZhbGlkYXRlQ0lEKHRoaXMpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGFzc2VtYmxlIHRoZSBDSUQgZnJvbSB0aGUgcGFyYW1ldGVyc1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY29kZWMgPSBjb2RlY1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbiAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpaGFzaFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBtdWx0aWJhc2VOYW1lIHx8ICh2ZXJzaW9uID09PSAwID8gJ2Jhc2U1OGJ0YycgOiAnYmFzZTMyJylcblxuICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDSUQgYXMgYSBgQnVmZmVyYFxuICAgKlxuICAgKiBAcmV0dXJuIHtCdWZmZXJ9XG4gICAqIEByZWFkb25seVxuICAgKlxuICAgKiBAbWVtYmVyT2YgQ0lEXG4gICAqL1xuICBnZXQgYnVmZmVyICgpIHtcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5fYnVmZmVyXG5cbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgICBidWZmZXIgPSB0aGlzLm11bHRpaGFzaFxuICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgQnVmZmVyLmZyb20oJzAxJywgJ2hleCcpLFxuICAgICAgICAgIG11bHRpY29kZWMuZ2V0Q29kZVZhcmludCh0aGlzLmNvZGVjKSxcbiAgICAgICAgICB0aGlzLm11bHRpaGFzaFxuICAgICAgICBdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2ZXJzaW9uJylcbiAgICAgIH1cblxuICAgICAgLy8gQ2FjaGUgdGhpcyBidWZmZXIgc28gaXQgZG9lc24ndCBoYXZlIHRvIGJlIHJlY3JlYXRlZFxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfYnVmZmVyJywgeyB2YWx1ZTogYnVmZmVyIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJlZml4IG9mIHRoZSBDSUQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHByZWZpeCAoKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20oYDAke3RoaXMudmVyc2lvbn1gLCAnaGV4JyksXG4gICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICBtaC5wcmVmaXgodGhpcy5tdWx0aWhhc2gpXG4gICAgXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDBgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMCAoKSB7XG4gICAgaWYgKHRoaXMuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgbm9uIGRhZy1wYiBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgbmFtZSwgbGVuZ3RoIH0gPSBtaC5kZWNvZGUodGhpcy5tdWx0aWhhc2gpXG5cbiAgICBpZiAobmFtZSAhPT0gJ3NoYTItMjU2Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBub24gc2hhMi0yNTYgbXVsdGloYXNoIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgaWYgKGxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIDMyIGJ5dGUgbXVsdGloYXNoIENJRCB0byBDSUR2MCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQ0lEKDAsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gYSBDSUQgb2YgdmVyc2lvbiBgMWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDSUR9XG4gICAqL1xuICB0b1YxICgpIHtcbiAgICByZXR1cm4gbmV3IF9DSUQoMSwgdGhpcy5jb2RlYywgdGhpcy5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIHRoZSBDSUQgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlPXRoaXMubXVsdGliYXNlTmFtZV0gLSBCYXNlIGVuY29kaW5nIHRvIHVzZS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvQmFzZUVuY29kZWRTdHJpbmcgKGJhc2UgPSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICBpZiAodGhpcy5zdHJpbmcgJiYgYmFzZSA9PT0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmdcbiAgICB9XG4gICAgbGV0IHN0ciA9IG51bGxcbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAoYmFzZSAhPT0gJ2Jhc2U1OGJ0YycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3Qgc3VwcG9ydGVkIHdpdGggQ0lEdjAsIHRvIHN1cHBvcnQgZGlmZmVyZW50IGJhc2VzLCBwbGVhc2UgbWlncmF0ZSB0aGUgaW5zdGFuY2UgZG8gQ0lEdjEsIHlvdSBjYW4gZG8gdGhhdCB0aHJvdWdoIGNpZC50b1YxKCknKVxuICAgICAgfVxuICAgICAgc3RyID0gbWgudG9CNThTdHJpbmcodGhpcy5tdWx0aWhhc2gpXG4gICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHtcbiAgICAgIHN0ciA9IG11bHRpYmFzZS5lbmNvZGUoYmFzZSwgdGhpcy5idWZmZXIpLnRvU3RyaW5nKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCB2ZXJzaW9uJylcbiAgICB9XG4gICAgaWYgKGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgLy8gY2FjaGUgdGhlIHN0cmluZyB2YWx1ZVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiBzdHIgfSlcbiAgICB9XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgdG9TdHJpbmcgKGJhc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b0Jhc2VFbmNvZGVkU3RyaW5nKGJhc2UpXG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIGEgcGxhaW4gb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VyaWFsaXplZENJRH1cbiAgICovXG4gIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVjOiB0aGlzLmNvZGVjLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgaGFzaDogdGhpcy5tdWx0aWhhc2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBlcXVhbGl0eSB3aXRoIGFub3RoZXIgQ0lELlxuICAgKlxuICAgKiBAcGFyYW0ge0NJRH0gb3RoZXJcbiAgICogQHJldHVybnMge2Jvb2x9XG4gICAqL1xuICBlcXVhbHMgKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY29kZWMgPT09IG90aGVyLmNvZGVjICYmXG4gICAgICB0aGlzLnZlcnNpb24gPT09IG90aGVyLnZlcnNpb24gJiZcbiAgICAgIHRoaXMubXVsdGloYXNoLmVxdWFscyhvdGhlci5tdWx0aWhhc2gpXG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gaW5wdXQgaXMgYSB2YWxpZCBDSUQgb2JqZWN0LlxuICAgKiBUaHJvd3MgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVDSUQgKG90aGVyKSB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBDSURVdGlsLmNoZWNrQ0lEQ29tcG9uZW50cyhvdGhlcilcbiAgICBpZiAoZXJyb3JNc2cpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZylcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgX0NJRCA9IHdpdGhJcyhDSUQsIHtcbiAgY2xhc3NOYW1lOiAnQ0lEJyxcbiAgc3ltYm9sTmFtZTogJ0BpcGxkL2pzLWNpZC9DSUQnXG59KVxuXG5fQ0lELmNvZGVjcyA9IGNvZGVjc1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9DSURcbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gd2l0aElzKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIGNvbnN0IENsYXNzSXNXcmFwcGVyID0ge1xuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3NpZ25zIHRoZSBjbGFzcyB3cmFwcGVyIHRvIGFuIG9iamVjdCB0byB0cmlja1xuICAgICAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZXMgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgY2xhc3Mgd2hlblxuICAgICAgICAvLyBsb2dnaW5nIGFuIGluc3RhbmNlcy5cbiAgICAgICAgLy8gV2UgYXJlIGFzc2lnbmluZyBhbiBhbm9ueW1vdXMgY2xhc3MgKGNsYXNzIHdyYXBwZXIpIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gd2l0aCBrZXkgYGNsYXNzTmFtZWAgdG8ga2VlcCB0aGUgY29ycmVjdCBuYW1lLlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaXQgZmFsbHMgYmFjayB0byBsb2dnaW5nIGBDbGFzc0lzV3JhcHBlcmAuXG4gICAgICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHdpdGhJc1Byb3RvKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSwgd2l0aG91dE5ldyB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1zaG9ydGhhbmQgKi9cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAod2l0aG91dE5ldyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBDbGFzc0lzV3JhcHBlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzSXNXcmFwcGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IENsYXNzLmNhbGwodGhpcywgLi4uYXJncykgfHwgdGhpcztcblxuICAgICAgICAgICAgaWYgKF90aGlzICYmICFfdGhpc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG4gICAgLyogZXNsaW50LWVuYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG5cbiAgICBDbGFzc0lzV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSk7XG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3NJc1dyYXBwZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIENsYXNzSXNXcmFwcGVyW2BpcyR7Y2xhc3NOYW1lfWBdID0gKG9iaikgPT4gISEob2JqICYmIG9ialtzeW1ib2xdKTtcblxuICAgIHJldHVybiBDbGFzc0lzV3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoSXM7XG5tb2R1bGUuZXhwb3J0cy5wcm90byA9IHdpdGhJc1Byb3RvO1xuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCIvKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9ICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWVcbiAgICAgICAgICAgICAgICYmICd1bmRlZmluZWQnICE9IHR5cGVvZiBjaHJvbWUuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgPyBjaHJvbWUuc3RvcmFnZS5sb2NhbFxuICAgICAgICAgICAgICAgICAgOiBsb2NhbHN0b3JhZ2UoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG4gICcjMDAwMENDJywgJyMwMDAwRkYnLCAnIzAwMzNDQycsICcjMDAzM0ZGJywgJyMwMDY2Q0MnLCAnIzAwNjZGRicsICcjMDA5OUNDJyxcbiAgJyMwMDk5RkYnLCAnIzAwQ0MwMCcsICcjMDBDQzMzJywgJyMwMENDNjYnLCAnIzAwQ0M5OScsICcjMDBDQ0NDJywgJyMwMENDRkYnLFxuICAnIzMzMDBDQycsICcjMzMwMEZGJywgJyMzMzMzQ0MnLCAnIzMzMzNGRicsICcjMzM2NkNDJywgJyMzMzY2RkYnLCAnIzMzOTlDQycsXG4gICcjMzM5OUZGJywgJyMzM0NDMDAnLCAnIzMzQ0MzMycsICcjMzNDQzY2JywgJyMzM0NDOTknLCAnIzMzQ0NDQycsICcjMzNDQ0ZGJyxcbiAgJyM2NjAwQ0MnLCAnIzY2MDBGRicsICcjNjYzM0NDJywgJyM2NjMzRkYnLCAnIzY2Q0MwMCcsICcjNjZDQzMzJywgJyM5OTAwQ0MnLFxuICAnIzk5MDBGRicsICcjOTkzM0NDJywgJyM5OTMzRkYnLCAnIzk5Q0MwMCcsICcjOTlDQzMzJywgJyNDQzAwMDAnLCAnI0NDMDAzMycsXG4gICcjQ0MwMDY2JywgJyNDQzAwOTknLCAnI0NDMDBDQycsICcjQ0MwMEZGJywgJyNDQzMzMDAnLCAnI0NDMzMzMycsICcjQ0MzMzY2JyxcbiAgJyNDQzMzOTknLCAnI0NDMzNDQycsICcjQ0MzM0ZGJywgJyNDQzY2MDAnLCAnI0NDNjYzMycsICcjQ0M5OTAwJywgJyNDQzk5MzMnLFxuICAnI0NDQ0MwMCcsICcjQ0NDQzMzJywgJyNGRjAwMDAnLCAnI0ZGMDAzMycsICcjRkYwMDY2JywgJyNGRjAwOTknLCAnI0ZGMDBDQycsXG4gICcjRkYwMEZGJywgJyNGRjMzMDAnLCAnI0ZGMzMzMycsICcjRkYzMzY2JywgJyNGRjMzOTknLCAnI0ZGMzNDQycsICcjRkYzM0ZGJyxcbiAgJyNGRjY2MDAnLCAnI0ZGNjYzMycsICcjRkY5OTAwJywgJyNGRjk5MzMnLCAnI0ZGQ0MwMCcsICcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG4gIC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcbiAgLy8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2VcbiAgLy8gZXhwbGljaXRseVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBpcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuICAvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuICByZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcbiAgICAvLyBpcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcbiAgICAvLyBpcyBmaXJlZm94ID49IHYzMT9cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcbiAgICAvLyBkb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG4gICAgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbih2KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyLm1lc3NhZ2U7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGFyZ3NbMF0gPSAodXNlQ29sb3JzID8gJyVjJyA6ICcnKVxuICAgICsgdGhpcy5uYW1lc3BhY2VcbiAgICArICh1c2VDb2xvcnMgPyAnICVjJyA6ICcgJylcbiAgICArIGFyZ3NbMF1cbiAgICArICh1c2VDb2xvcnMgPyAnJWMgJyA6ICcgJylcbiAgICArICcrJyArIGV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuICBpZiAoIXVzZUNvbG9ycykgcmV0dXJuO1xuXG4gIHZhciBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcbiAgYXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0JylcblxuICAvLyB0aGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuICAvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG4gIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGFzdEMgPSAwO1xuICBhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICBpZiAoJyUlJyA9PT0gbWF0Y2gpIHJldHVybjtcbiAgICBpbmRleCsrO1xuICAgIGlmICgnJWMnID09PSBtYXRjaCkge1xuICAgICAgLy8gd2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG4gICAgICAvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuICAgICAgbGFzdEMgPSBpbmRleDtcbiAgICB9XG4gIH0pO1xuXG4gIGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmxvZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUubG9nYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBsb2coKSB7XG4gIC8vIHRoaXMgaGFja2VyeSBpcyByZXF1aXJlZCBmb3IgSUU4LzksIHdoZXJlXG4gIC8vIHRoZSBgY29uc29sZS5sb2dgIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSAnYXBwbHknXG4gIHJldHVybiAnb2JqZWN0JyA9PT0gdHlwZW9mIGNvbnNvbGVcbiAgICAmJiBjb25zb2xlLmxvZ1xuICAgICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGUubG9nLCBjb25zb2xlLCBhcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcbiAgdHJ5IHtcbiAgICBpZiAobnVsbCA9PSBuYW1lc3BhY2VzKSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLmRlYnVnID0gbmFtZXNwYWNlcztcbiAgICB9XG4gIH0gY2F0Y2goZSkge31cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuICB2YXIgcjtcbiAgdHJ5IHtcbiAgICByID0gZXhwb3J0cy5zdG9yYWdlLmRlYnVnO1xuICB9IGNhdGNoKGUpIHt9XG5cbiAgLy8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuICBpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcbiAgICByID0gcHJvY2Vzcy5lbnYuREVCVUc7XG4gIH1cblxuICByZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBFbmFibGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gYGxvY2FsU3RvcmFnZS5kZWJ1Z2AgaW5pdGlhbGx5LlxuICovXG5cbmV4cG9ydHMuZW5hYmxlKGxvYWQoKSk7XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuICB0cnkge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICB9IGNhdGNoIChlKSB7fVxufVxuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWdbJ2RlZmF1bHQnXSA9IGNyZWF0ZURlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogQWN0aXZlIGBkZWJ1Z2AgaW5zdGFuY2VzLlxuICovXG5leHBvcnRzLmluc3RhbmNlcyA9IFtdO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuICovXG5cbmV4cG9ydHMubmFtZXMgPSBbXTtcbmV4cG9ydHMuc2tpcHMgPSBbXTtcblxuLyoqXG4gKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gKlxuICogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycyA9IHt9O1xuXG4vKipcbiAqIFNlbGVjdCBhIGNvbG9yLlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG4gIHZhciBoYXNoID0gMCwgaTtcblxuICBmb3IgKGkgaW4gbmFtZXNwYWNlKSB7XG4gICAgaGFzaCAgPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBleHBvcnRzLmNvbG9ycy5sZW5ndGhdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblxuICB2YXIgcHJldlRpbWU7XG5cbiAgZnVuY3Rpb24gZGVidWcoKSB7XG4gICAgLy8gZGlzYWJsZWQ/XG4gICAgaWYgKCFkZWJ1Zy5lbmFibGVkKSByZXR1cm47XG5cbiAgICB2YXIgc2VsZiA9IGRlYnVnO1xuXG4gICAgLy8gc2V0IGBkaWZmYCB0aW1lc3RhbXBcbiAgICB2YXIgY3VyciA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgc2VsZi5kaWZmID0gbXM7XG4gICAgc2VsZi5wcmV2ID0gcHJldlRpbWU7XG4gICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICBwcmV2VGltZSA9IGN1cnI7XG5cbiAgICAvLyB0dXJuIHRoZSBgYXJndW1lbnRzYCBpbnRvIGEgcHJvcGVyIEFycmF5XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGFyZ3NbMF0gPSBleHBvcnRzLmNvZXJjZShhcmdzWzBdKTtcblxuICAgIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGFyZ3NbMF0pIHtcbiAgICAgIC8vIGFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG4gICAgICBhcmdzLnVuc2hpZnQoJyVPJyk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCBmdW5jdGlvbihtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAvLyBpZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG4gICAgICBpZiAobWF0Y2ggPT09ICclJScpIHJldHVybiBtYXRjaDtcbiAgICAgIGluZGV4Kys7XG4gICAgICB2YXIgZm9ybWF0dGVyID0gZXhwb3J0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZvcm1hdHRlcikge1xuICAgICAgICB2YXIgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuICAgICAgICAvLyBub3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG4gICAgZXhwb3J0cy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cbiAgICB2YXIgbG9nRm4gPSBkZWJ1Zy5sb2cgfHwgZXhwb3J0cy5sb2cgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICBsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgZGVidWcuZW5hYmxlZCA9IGV4cG9ydHMuZW5hYmxlZChuYW1lc3BhY2UpO1xuICBkZWJ1Zy51c2VDb2xvcnMgPSBleHBvcnRzLnVzZUNvbG9ycygpO1xuICBkZWJ1Zy5jb2xvciA9IHNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG4gIGRlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG4gIC8vIGVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5pbml0KSB7XG4gICAgZXhwb3J0cy5pbml0KGRlYnVnKTtcbiAgfVxuXG4gIGV4cG9ydHMuaW5zdGFuY2VzLnB1c2goZGVidWcpO1xuXG4gIHJldHVybiBkZWJ1Zztcbn1cblxuZnVuY3Rpb24gZGVzdHJveSAoKSB7XG4gIHZhciBpbmRleCA9IGV4cG9ydHMuaW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBleHBvcnRzLmluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcbiAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcbiAgZXhwb3J0cy5zYXZlKG5hbWVzcGFjZXMpO1xuXG4gIGV4cG9ydHMubmFtZXMgPSBbXTtcbiAgZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4gIHZhciBpO1xuICB2YXIgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuICB2YXIgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICghc3BsaXRbaV0pIGNvbnRpbnVlOyAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgIG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgIGV4cG9ydHMuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgZXhwb3J0cy5pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBleHBvcnRzLmluc3RhbmNlc1tpXTtcbiAgICBpbnN0YW5jZS5lbmFibGVkID0gZXhwb3J0cy5lbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gIGV4cG9ydHMuZW5hYmxlKCcnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuICBpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaSwgbGVuO1xuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMubmFtZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYHZhbGAuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gKiBAcmV0dXJuIHtNaXhlZH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuICByZXR1cm4gdmFsO1xufVxuIiwiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbnZhciB0dHkgPSByZXF1aXJlKCd0dHknKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbIDYsIDIsIDMsIDQsIDUsIDEgXTtcblxudHJ5IHtcbiAgdmFyIHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuICBpZiAoc3VwcG9ydHNDb2xvciAmJiBzdXBwb3J0c0NvbG9yLmxldmVsID49IDIpIHtcbiAgICBleHBvcnRzLmNvbG9ycyA9IFtcbiAgICAgIDIwLCAyMSwgMjYsIDI3LCAzMiwgMzMsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNTYsIDU3LCA2MiwgNjMsIDY4LFxuICAgICAgNjksIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgOTIsIDkzLCA5OCwgOTksIDExMiwgMTEzLCAxMjgsIDEyOSwgMTM0LFxuICAgICAgMTM1LCAxNDgsIDE0OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSxcbiAgICAgIDE3MiwgMTczLCAxNzgsIDE3OSwgMTg0LCAxODUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsXG4gICAgICAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjE0LCAyMTUsIDIyMCwgMjIxXG4gICAgXTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8vIHN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwga2V5KSB7XG4gIC8vIGNhbWVsLWNhc2VcbiAgdmFyIHByb3AgPSBrZXlcbiAgICAuc3Vic3RyaW5nKDYpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvXyhbYS16XSkvZywgZnVuY3Rpb24gKF8sIGspIHsgcmV0dXJuIGsudG9VcHBlckNhc2UoKSB9KTtcblxuICAvLyBjb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcbiAgdmFyIHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG4gIGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHZhbCA9IHRydWU7XG4gIGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB2YWwgPSBmYWxzZTtcbiAgZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHZhbCA9IG51bGw7XG4gIGVsc2UgdmFsID0gTnVtYmVyKHZhbCk7XG5cbiAgb2JqW3Byb3BdID0gdmFsO1xuICByZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG4gIHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzXG4gICAgPyBCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKVxuICAgIDogdHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24odikge1xuICB0aGlzLmluc3BlY3RPcHRzLmNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuICByZXR1cm4gdXRpbC5pbnNwZWN0KHYsIHRoaXMuaW5zcGVjdE9wdHMpXG4gICAgLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24oc3RyKSB7XG4gICAgICByZXR1cm4gc3RyLnRyaW0oKVxuICAgIH0pLmpvaW4oJyAnKTtcbn07XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbG93aW5nIG11bHRpcGxlIGxpbmVzIGlmIG5lZWRlZC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcbiAgcmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG4gIHZhciBuYW1lID0gdGhpcy5uYW1lc3BhY2U7XG4gIHZhciB1c2VDb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblxuICBpZiAodXNlQ29sb3JzKSB7XG4gICAgdmFyIGMgPSB0aGlzLmNvbG9yO1xuICAgIHZhciBjb2xvckNvZGUgPSAnXFx1MDAxYlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcbiAgICB2YXIgcHJlZml4ID0gJyAgJyArIGNvbG9yQ29kZSArICc7MW0nICsgbmFtZSArICcgJyArICdcXHUwMDFiWzBtJztcblxuICAgIGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcbiAgICBhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIGV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFiWzBtJyk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG4gIGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgcmV0dXJuIHByb2Nlc3Muc3RkZXJyLndyaXRlKHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICBpZiAobnVsbCA9PSBuYW1lc3BhY2VzKSB7XG4gICAgLy8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG4gICAgLy8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzcy5lbnYuREVCVUcgPSBuYW1lc3BhY2VzO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkRFQlVHO1xufVxuXG4vKipcbiAqIEluaXQgbG9naWMgZm9yIGBkZWJ1Z2AgaW5zdGFuY2VzLlxuICpcbiAqIENyZWF0ZSBhIG5ldyBgaW5zcGVjdE9wdHNgIG9iamVjdCBpbiBjYXNlIGB1c2VDb2xvcnNgIGlzIHNldFxuICogZGlmZmVyZW50bHkgZm9yIGEgcGFydGljdWxhciBgZGVidWdgIGluc3RhbmNlLlxuICovXG5cbmZ1bmN0aW9uIGluaXQgKGRlYnVnKSB7XG4gIGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuICB9XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBwcm9jZXNzLmVudi5ERUJVR2AgaW5pdGlhbGx5LlxuICovXG5cbmV4cG9ydHMuZW5hYmxlKGxvYWQoKSk7XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG5cbi8vIFJGQzcyMzHCpzQuMi4xOiBPZiB0aGUgcmVxdWVzdCBtZXRob2RzIGRlZmluZWQgYnkgdGhpcyBzcGVjaWZpY2F0aW9uLFxuLy8gdGhlIEdFVCwgSEVBRCwgT1BUSU9OUywgYW5kIFRSQUNFIG1ldGhvZHMgYXJlIGRlZmluZWQgdG8gYmUgc2FmZS5cbnZhciBTQUZFX01FVEhPRFMgPSB7IEdFVDogdHJ1ZSwgSEVBRDogdHJ1ZSwgT1BUSU9OUzogdHJ1ZSwgVFJBQ0U6IHRydWUgfTtcblxuLy8gQ3JlYXRlIGhhbmRsZXJzIHRoYXQgcGFzcyBldmVudHMgZnJvbSBuYXRpdmUgcmVxdWVzdHNcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbltcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB0aGlzLl9yZWRpcmVjdGFibGUuZW1pdChldmVudCwgYXJnKTtcbiAgfTtcbn0pO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChyZXNwb25zZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInJlc3BvbnNlXCIsIHJlc3BvbnNlQ2FsbGJhY2spO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gcmVzcG9uc2VzIG9mIG5hdGl2ZSByZXF1ZXN0c1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBzZWxmLl9wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9O1xuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBWYWxpZGF0ZSBpbnB1dCBhbmQgc2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKCEodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgKFwibGVuZ3RoXCIgaW4gZGF0YSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXRcIikpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGFuZCBlbmRcbiAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gIHRoaXMud3JpdGUoZGF0YSB8fCBcIlwiLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgIGN1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gIH0pO1xufTtcblxuLy8gU2V0cyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xufTtcblxuLy8gQ2xlYXJzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWxldGUgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVIZWFkZXIobmFtZSk7XG59O1xuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImFib3J0XCIsIFwiZmx1c2hIZWFkZXJzXCIsIFwiZ2V0SGVhZGVyXCIsXG4gIFwic2V0Tm9EZWxheVwiLCBcInNldFNvY2tldEtlZXBBbGl2ZVwiLCBcInNldFRpbWVvdXRcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cbi8vIEV4ZWN1dGVzIHRoZSBuZXh0IG5hdGl2ZSByZXF1ZXN0IChpbml0aWFsIG9yIHJlZGlyZWN0KVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3BlcmZvcm1SZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBMb2FkIHRoZSBuYXRpdmUgcHJvdG9jb2xcbiAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5wcm90b2NvbDtcbiAgdmFyIG5hdGl2ZVByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5uYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdO1xuICBpZiAoIW5hdGl2ZVByb3RvY29sKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHNwZWNpZmllZCwgdXNlIHRoZSBhZ2VudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90b2NvbFxuICAvLyAoSFRUUCBhbmQgSFRUUFMgdXNlIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMpXG4gIGlmICh0aGlzLl9vcHRpb25zLmFnZW50cykge1xuICAgIHZhciBzY2hlbWUgPSBwcm90b2NvbC5zdWJzdHIoMCwgcHJvdG9jb2wubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5fb3B0aW9ucy5hZ2VudCA9IHRoaXMuX29wdGlvbnMuYWdlbnRzW3NjaGVtZV07XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5hdGl2ZSByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3QgPVxuICAgICAgICBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0KHRoaXMuX29wdGlvbnMsIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UpO1xuICB0aGlzLl9jdXJyZW50VXJsID0gdXJsLmZvcm1hdCh0aGlzLl9vcHRpb25zKTtcblxuICAvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnNcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgaW4gZXZlbnRIYW5kbGVycykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICByZXF1ZXN0Lm9uKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZC5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dCgpIHtcbiAgICAgIGlmIChpIDwgYnVmZmVycy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICB9XG4gICAgfSgpKTtcbiAgfVxufTtcblxuLy8gUHJvY2Vzc2VzIGEgcmVzcG9uc2UgZnJvbSB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Byb2Nlc3NSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAvLyBTdG9yZSB0aGUgcmVkaXJlY3RlZCByZXNwb25zZVxuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAobG9jYXRpb24gJiYgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgIT09IGZhbHNlICYmXG4gICAgICByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDwgNDAwKSB7XG4gICAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgICAvLyBpbiBjeWNsaWNhbCByZWRpcmVjdGlvbnMgKGkuZS4sIFwiaW5maW5pdGVcIiByZWRpcmVjdGlvbiBsb29wcykuXG4gICAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IoXCJNYXggcmVkaXJlY3RzIGV4Y2VlZGVkLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gICAgLy8gY2FyZSBmb3IgbWV0aG9kcyBub3Qga25vd24gdG8gYmUgc2FmZSBb4oCmXSxcbiAgICAvLyBzaW5jZSB0aGUgdXNlciBtaWdodCBub3Qgd2lzaCB0byByZWRpcmVjdCBhbiB1bnNhZmUgcmVxdWVzdC5cbiAgICAvLyBSRkM3MjMxwqc2LjQuNzogVGhlIDMwNyAoVGVtcG9yYXJ5IFJlZGlyZWN0KSBzdGF0dXMgY29kZSBpbmRpY2F0ZXNcbiAgICAvLyB0aGF0IHRoZSB0YXJnZXQgcmVzb3VyY2UgcmVzaWRlcyB0ZW1wb3JhcmlseSB1bmRlciBhIGRpZmZlcmVudCBVUklcbiAgICAvLyBhbmQgdGhlIHVzZXIgYWdlbnQgTVVTVCBOT1QgY2hhbmdlIHRoZSByZXF1ZXN0IG1ldGhvZFxuICAgIC8vIGlmIGl0IHBlcmZvcm1zIGFuIGF1dG9tYXRpYyByZWRpcmVjdGlvbiB0byB0aGF0IFVSSS5cbiAgICB2YXIgaGVhZGVyO1xuICAgIHZhciBoZWFkZXJzID0gdGhpcy5fb3B0aW9ucy5oZWFkZXJzO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAzMDcgJiYgISh0aGlzLl9vcHRpb25zLm1ldGhvZCBpbiBTQUZFX01FVEhPRFMpKSB7XG4gICAgICB0aGlzLl9vcHRpb25zLm1ldGhvZCA9IFwiR0VUXCI7XG4gICAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoL15jb250ZW50LS9pLnRlc3QoaGVhZGVyKSkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wIHRoZSBIb3N0IGhlYWRlciwgYXMgdGhlIHJlZGlyZWN0IG1pZ2h0IGxlYWQgdG8gYSBkaWZmZXJlbnQgaG9zdFxuICAgIGlmICghdGhpcy5faXNSZWRpcmVjdCkge1xuICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoL15ob3N0JC9pLnRlc3QoaGVhZGVyKSkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgICB2YXIgcmVkaXJlY3RVcmwgPSB1cmwucmVzb2x2ZSh0aGlzLl9jdXJyZW50VXJsLCBsb2NhdGlvbik7XG4gICAgZGVidWcoXCJyZWRpcmVjdGluZyB0b1wiLCByZWRpcmVjdFVybCk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB1cmwucGFyc2UocmVkaXJlY3RVcmwpKTtcbiAgICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xuXG4gICAgLy8gRGlzY2FyZCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXNwb25zZSB0byBhdm9pZCB3YWl0aW5nIGZvciBkYXRhXG4gICAgcmVzcG9uc2UuZGVzdHJveSgpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIFRoZSByZXNwb25zZSBpcyBub3QgYSByZWRpcmVjdDsgcmV0dXJuIGl0IGFzLWlzXG4gICAgcmVzcG9uc2UucmVzcG9uc2VVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xuICAgIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0cztcbiAgICB0aGlzLmVtaXQoXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICB9XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG9wdGlvbnMgPSB1cmwucGFyc2Uob3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMubWF4UmVkaXJlY3RzID0gZXhwb3J0cy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICBtYXhSZWRpcmVjdHM6IGV4cG9ydHMubWF4UmVkaXJlY3RzLFxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zLm5hdGl2ZVByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scztcbiAgICAgIGFzc2VydC5lcXVhbChvcHRpb25zLnByb3RvY29sLCBwcm90b2NvbCwgXCJwcm90b2NvbCBtaXNtYXRjaFwiKTtcbiAgICAgIGRlYnVnKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICB3cmFwcGVkUHJvdG9jb2wuZ2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IHdyYXBwZWRQcm90b2NvbC5yZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJyk7XG52YXIgYXN5bmNraXQgPSByZXF1aXJlKCdhc3luY2tpdCcpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKCk7XG4gIH1cblxuICB0aGlzLl9vdmVyaGVhZExlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlID0gW107XG5cbiAgQ29tYmluZWRTdHJlYW0uY2FsbCh0aGlzKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cbn1cblxuRm9ybURhdGEuTElORV9CUkVBSyA9ICdcXHJcXG4nO1xuRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGFsbG93IGZpbGVuYW1lIGFzIHNpbmdsZSBvcHRpb25cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtmaWxlbmFtZTogb3B0aW9uc307XG4gIH1cblxuICB2YXIgYXBwZW5kID0gQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZC5iaW5kKHRoaXMpO1xuXG4gIC8vIGFsbCB0aGF0IHN0cmVhbXkgYnVzaW5lc3MgY2FuJ3QgaGFuZGxlIG51bWJlcnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtZm9ybS1kYXRhL2lzc3Vlcy8zOFxuICBpZiAodXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFBsZWFzZSBjb252ZXJ0IHlvdXIgYXJyYXkgaW50byBzdHJpbmdcbiAgICAvLyB0aGUgd2F5IHdlYiBzZXJ2ZXIgZXhwZWN0cyBpdFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGVhZGVyID0gdGhpcy5fbXVsdGlQYXJ0SGVhZGVyKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBmb290ZXIgPSB0aGlzLl9tdWx0aVBhcnRGb290ZXIoKTtcblxuICBhcHBlbmQoaGVhZGVyKTtcbiAgYXBwZW5kKHZhbHVlKTtcbiAgYXBwZW5kKGZvb3Rlcik7XG5cbiAgLy8gcGFzcyBhbG9uZyBvcHRpb25zLmtub3duTGVuZ3RoXG4gIHRoaXMuX3RyYWNrTGVuZ3RoKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl90cmFja0xlbmd0aCA9IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gMDtcblxuICAvLyB1c2VkIHcvIGdldExlbmd0aFN5bmMoKSwgd2hlbiBsZW5ndGggaXMga25vd24uXG4gIC8vIGUuZy4gZm9yIHN0cmVhbWluZyBkaXJlY3RseSBmcm9tIGEgcmVtb3RlIHNlcnZlcixcbiAgLy8gdy8gYSBrbm93biBmaWxlIGEgc2l6ZSwgYW5kIG5vdCB3YW50aW5nIHRvIHdhaXQgZm9yXG4gIC8vIGluY29taW5nIGZpbGUgdG8gZmluaXNoIHRvIGdldCBpdHMgc2l6ZS5cbiAgaWYgKG9wdGlvbnMua25vd25MZW5ndGggIT0gbnVsbCkge1xuICAgIHZhbHVlTGVuZ3RoICs9ICtvcHRpb25zLmtub3duTGVuZ3RoO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICB0aGlzLl92YWx1ZUxlbmd0aCArPSB2YWx1ZUxlbmd0aDtcblxuICAvLyBAY2hlY2sgd2h5IGFkZCBDUkxGPyBkb2VzIHRoaXMgYWNjb3VudCBmb3IgY3VzdG9tL211bHRpcGxlIENSTEZzP1xuICB0aGlzLl9vdmVyaGVhZExlbmd0aCArPVxuICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGhlYWRlcikgK1xuICAgIEZvcm1EYXRhLkxJTkVfQlJFQUsubGVuZ3RoO1xuXG4gIC8vIGVtcHR5IG9yIGVpdGhlciBkb2Vzbid0IGhhdmUgcGF0aCBvciBub3QgYW4gaHR0cCByZXNwb25zZVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vIG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGxlbmd0aFxuICBpZiAoIW9wdGlvbnMua25vd25MZW5ndGgpIHtcbiAgICB0aGlzLl92YWx1ZXNUb01lYXN1cmUucHVzaCh2YWx1ZSk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGVuZ3RoUmV0cmlldmVyID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG5cbiAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdmZCcpKSB7XG5cbiAgICAvLyB0YWtlIHJlYWQgcmFuZ2UgaW50byBhIGFjY291bnRcbiAgICAvLyBgZW5kYCA9IEluZmluaXR5IOKAkz4gcmVhZCBmaWxlIHRpbGwgdGhlIGVuZFxuICAgIC8vXG4gICAgLy8gVE9ETzogTG9va3MgbGlrZSB0aGVyZSBpcyBidWcgaW4gTm9kZSBmcy5jcmVhdGVSZWFkU3RyZWFtXG4gICAgLy8gaXQgZG9lc24ndCByZXNwZWN0IGBlbmRgIG9wdGlvbnMgd2l0aG91dCBgc3RhcnRgIG9wdGlvbnNcbiAgICAvLyBGaXggaXQgd2hlbiBub2RlIGZpeGVzIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvNzgxOVxuICAgIGlmICh2YWx1ZS5lbmQgIT0gdW5kZWZpbmVkICYmIHZhbHVlLmVuZCAhPSBJbmZpbml0eSAmJiB2YWx1ZS5zdGFydCAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgLy8gd2hlbiBlbmQgc3BlY2lmaWVkXG4gICAgICAvLyBubyBuZWVkIHRvIGNhbGN1bGF0ZSByYW5nZVxuICAgICAgLy8gaW5jbHVzaXZlLCBzdGFydHMgd2l0aCAwXG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZS5lbmQgKyAxIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKSk7XG5cbiAgICAvLyBub3QgdGhhdCBmYXN0IHNub29weVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIGZldGNoIGZpbGUgc2l6ZSBmcm9tIGZzXG4gICAgICBmcy5zdGF0KHZhbHVlLnBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuXG4gICAgICAgIHZhciBmaWxlU2l6ZTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZmluYWwgc2l6ZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugb3B0aW9uc1xuICAgICAgICBmaWxlU2l6ZSA9IHN0YXQuc2l6ZSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAvLyBvciBodHRwIHJlc3BvbnNlXG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cE1vZHVsZScpKSB7XG4gICAgLy8gd2FpdCB0aWxsIHJlc3BvbnNlIGNvbWUgYmFja1xuICAgIHZhbHVlLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB2YWx1ZS5wYXVzZSgpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgK3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuICAgIH0pO1xuICAgIHZhbHVlLnJlc3VtZSgpO1xuXG4gIC8vIHNvbWV0aGluZyBlbHNlXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soJ1Vua25vd24gc3RyZWFtJyk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIGN1c3RvbSBoZWFkZXIgc3BlY2lmaWVkIChhcyBzdHJpbmcpP1xuICAvLyBpdCBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciBib3VuZGFyeVxuICAvLyAoZS5nLiB0byBoYW5kbGUgZXh0cmEgQ1JMRnMgb24gLk5FVCBzZXJ2ZXJzKVxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuaGVhZGVyO1xuICB9XG5cbiAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHRoaXMuX2dldENvbnRlbnREaXNwb3NpdGlvbih2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBjb250ZW50VHlwZSA9IHRoaXMuX2dldENvbnRlbnRUeXBlKHZhbHVlLCBvcHRpb25zKTtcblxuICB2YXIgY29udGVudHMgPSAnJztcbiAgdmFyIGhlYWRlcnMgID0ge1xuICAgIC8vIGFkZCBjdXN0b20gZGlzcG9zaXRpb24gYXMgdGhpcmQgZWxlbWVudCBvciBrZWVwIGl0IHR3byBlbGVtZW50cyBpZiBub3RcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IFsnZm9ybS1kYXRhJywgJ25hbWU9XCInICsgZmllbGQgKyAnXCInXS5jb25jYXQoY29udGVudERpc3Bvc2l0aW9uIHx8IFtdKSxcbiAgICAvLyBpZiBubyBjb250ZW50IHR5cGUuIGFsbG93IGl0IHRvIGJlIGVtcHR5IGFycmF5XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFtdLmNvbmNhdChjb250ZW50VHlwZSB8fCBbXSlcbiAgfTtcblxuICAvLyBhbGxvdyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnb2JqZWN0Jykge1xuICAgIHBvcHVsYXRlKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVyKTtcbiAgfVxuXG4gIHZhciBoZWFkZXI7XG4gIGZvciAodmFyIHByb3AgaW4gaGVhZGVycykge1xuICAgIGlmICghaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgIC8vIHNraXAgbnVsbGlzaCBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbGwgaGVhZGVycyB0byBhcnJheXMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlciA9IFtoZWFkZXJdO1xuICAgIH1cblxuICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyLmxlbmd0aCkge1xuICAgICAgY29udGVudHMgKz0gcHJvcCArICc6ICcgKyBoZWFkZXIuam9pbignOyAnKSArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyBGb3JtRGF0YS5MSU5FX0JSRUFLICsgY29udGVudHMgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50RGlzcG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIHZhciBmaWxlbmFtZVxuICAgICwgY29udGVudERpc3Bvc2l0aW9uXG4gICAgO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5maWxlcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBjdXN0b20gZmlsZXBhdGggZm9yIHJlbGF0aXZlIHBhdGhzXG4gICAgZmlsZW5hbWUgPSBwYXRoLm5vcm1hbGl6ZShvcHRpb25zLmZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpIHtcbiAgICAvLyBjdXN0b20gZmlsZW5hbWUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gZm9ybWlkYWJsZSBhbmQgdGhlIGJyb3dzZXIgYWRkIGEgbmFtZSBwcm9wZXJ0eVxuICAgIC8vIGZzLSBhbmQgcmVxdWVzdC0gc3RyZWFtcyBoYXZlIHBhdGggcHJvcGVydHlcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpO1xuICB9IGVsc2UgaWYgKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjb250ZW50VHlwZSA9IHZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICB9XG5cbiAgLy8gb3IgZ3Vlc3MgaXQgZnJvbSB0aGUgZmlsZXBhdGggb3IgZmlsZW5hbWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBgdmFsdWVgIGlzIG5vdCBzaW1wbGUgdmFsdWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICBjb250ZW50VHlwZSA9IEZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRUeXBlO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRGb290ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5leHQpIHtcbiAgICB2YXIgZm9vdGVyID0gRm9ybURhdGEuTElORV9CUkVBSztcblxuICAgIHZhciBsYXN0UGFydCA9ICh0aGlzLl9zdHJlYW1zLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGxhc3RQYXJ0KSB7XG4gICAgICBmb290ZXIgKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgbmV4dChmb290ZXIpO1xuICB9LmJpbmQodGhpcyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xhc3RCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArICctLScgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEhlYWRlcnMgPSBmdW5jdGlvbih1c2VySGVhZGVycykge1xuICB2YXIgaGVhZGVyO1xuICB2YXIgZm9ybUhlYWRlcnMgPSB7XG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgdGhpcy5nZXRCb3VuZGFyeSgpXG4gIH07XG5cbiAgZm9yIChoZWFkZXIgaW4gdXNlckhlYWRlcnMpIHtcbiAgICBpZiAodXNlckhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgZm9ybUhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdXNlckhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybUhlYWRlcnM7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIGNvbnRlbnQgbGVuZ3RoXG4gICAgcmVxdWVzdC5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcblxuICAgIHRoaXMucGlwZShyZXF1ZXN0KTtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgY2IpO1xuICAgICAgcmVxdWVzdC5vbigncmVzcG9uc2UnLCBjYi5iaW5kKHRoaXMsIG51bGwpKTtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmICghdGhpcy5lcnJvcikge1xuICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnW29iamVjdCBGb3JtRGF0YV0nO1xufTtcbiIsIi8vIHBvcHVsYXRlcyBtaXNzaW5nIHZhbHVlc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkc3QsIHNyYykge1xuXG4gIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihwcm9wKVxuICB7XG4gICAgZHN0W3Byb3BdID0gZHN0W3Byb3BdIHx8IHNyY1twcm9wXTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRzdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2KSA9PiB7XG5cdGFyZ3YgPSBhcmd2IHx8IHByb2Nlc3MuYXJndjtcblx0Y29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKCctJykgPyAnJyA6IChmbGFnLmxlbmd0aCA9PT0gMSA/ICctJyA6ICctLScpO1xuXHRjb25zdCBwb3MgPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3MgPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3MgIT09IC0xICYmICh0ZXJtaW5hdG9yUG9zID09PSAtMSA/IHRydWUgOiBwb3MgPCB0ZXJtaW5hdG9yUG9zKTtcbn07XG4iLCIvKlxuICogW2hpLWJhc2UzMl17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VtbjE3OC9oaS1iYXNlMzJ9XG4gKlxuICogQHZlcnNpb24gMC41LjBcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXG4gKiBAY29weXJpZ2h0IENoZW4sIFlpLUN5dWFuIDIwMTUtMjAxOFxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbi8qanNsaW50IGJpdHdpc2U6IHRydWUgKi9cbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgcm9vdCA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnID8gd2luZG93IDoge307XG4gIHZhciBOT0RFX0pTID0gIXJvb3QuSElfQkFTRTMyX05PX05PREVfSlMgJiYgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xuICBpZiAoTk9ERV9KUykge1xuICAgIHJvb3QgPSBnbG9iYWw7XG4gIH1cbiAgdmFyIENPTU1PTl9KUyA9ICFyb290LkhJX0JBU0UzMl9OT19DT01NT05fSlMgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHM7XG4gIHZhciBBTUQgPSB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQ7XG4gIHZhciBCQVNFMzJfRU5DT0RFX0NIQVIgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnLnNwbGl0KCcnKTtcbiAgdmFyIEJBU0UzMl9ERUNPREVfQ0hBUiA9IHtcbiAgICAnQSc6IDAsICdCJzogMSwgJ0MnOiAyLCAnRCc6IDMsICdFJzogNCwgJ0YnOiA1LCAnRyc6IDYsICdIJzogNywgJ0knOiA4LFxuICAgICdKJzogOSwgJ0snOiAxMCwgJ0wnOiAxMSwgJ00nOiAxMiwgJ04nOiAxMywgJ08nOiAxNCwgJ1AnOiAxNSwgJ1EnOiAxNixcbiAgICAnUic6IDE3LCAnUyc6IDE4LCAnVCc6IDE5LCAnVSc6IDIwLCAnVic6IDIxLCAnVyc6IDIyLCAnWCc6IDIzLCAnWSc6IDI0LFxuICAgICdaJzogMjUsICcyJzogMjYsICczJzogMjcsICc0JzogMjgsICc1JzogMjksICc2JzogMzAsICc3JzogMzFcbiAgfTtcblxuICB2YXIgYmxvY2tzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG4gIHZhciB0aHJvd0ludmFsaWRVdGY4ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBwYXJ0aWFsKSB7XG4gICAgaWYgKHBhcnRpYWwubGVuZ3RoID4gMTApIHtcbiAgICAgIHBhcnRpYWwgPSAnLi4uJyArIHBhcnRpYWwuc3Vic3RyKC0xMCk7XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0RlY29kZWQgZGF0YSBpcyBub3QgdmFsaWQgVVRGLTguJ1xuICAgICAgKyAnIE1heWJlIHRyeSBiYXNlMzIuZGVjb2RlLmFzQnl0ZXMoKT8nXG4gICAgICArICcgUGFydGlhbCBkYXRhIGFmdGVyIHJlYWRpbmcgJyArIHBvc2l0aW9uICsgJyBieXRlczogJyArIHBhcnRpYWwgKyAnIDwtJyk7XG4gICAgZXJyLnBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuXG4gIHZhciB0b1V0ZjhTdHJpbmcgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICB2YXIgc3RyID0gJycsIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aCwgaSA9IDAsIGZvbGxvd2luZ0NoYXJzID0gMCwgYiwgYztcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgYiA9IGJ5dGVzW2krK107XG4gICAgICBpZiAoYiA8PSAweDdGKSB7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoYiA+IDB4QkYgJiYgYiA8PSAweERGKSB7XG4gICAgICAgIGMgPSBiICYgMHgxRjtcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChiIDw9IDB4RUYpIHtcbiAgICAgICAgYyA9IGIgJiAweDBGO1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDI7XG4gICAgICB9IGVsc2UgaWYgKGIgPD0gMHhGNykge1xuICAgICAgICBjID0gYiAmIDB4MDc7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb2xsb3dpbmdDaGFyczsgKytqKSB7XG4gICAgICAgIGIgPSBieXRlc1tpKytdO1xuICAgICAgICBpZiAoYiA8IDB4ODAgfHwgYiA+IDB4QkYpIHtcbiAgICAgICAgICB0aHJvd0ludmFsaWRVdGY4KGksIHN0cik7XG4gICAgICAgIH1cbiAgICAgICAgYyA8PD0gNjtcbiAgICAgICAgYyArPSBiICYgMHgzRjtcbiAgICAgIH1cbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikge1xuICAgICAgICB0aHJvd0ludmFsaWRVdGY4KGksIHN0cik7XG4gICAgICB9XG4gICAgICBpZiAoYyA+IDB4MTBGRkZGKSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPD0gMHhGRkZGKSB7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYyAtPSAweDEwMDAwO1xuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyA+PiAxMCkgKyAweEQ4MDApO1xuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYyAmIDB4M0ZGKSArIDB4REMwMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgdmFyIGRlY29kZUFzQnl0ZXMgPSBmdW5jdGlvbiAoYmFzZTMyU3RyKSB7XG4gICAgaWYgKCEvXltBLVoyLTc9XSskLy50ZXN0KGJhc2UzMlN0cikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYXNlMzIgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICBiYXNlMzJTdHIgPSBiYXNlMzJTdHIucmVwbGFjZSgvPS9nLCAnJyk7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgYnl0ZXMgPSBbXSwgaW5kZXggPSAwLCBsZW5ndGggPSBiYXNlMzJTdHIubGVuZ3RoO1xuXG4gICAgLy8gNCBjaGFyIHRvIDMgYnl0ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBsZW5ndGggPj4gMyA8PCAzOyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjggPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY3IDw8IDUgfCB2OCkgJiAyNTU7XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGJ5dGVzXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNCkge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNSkge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA3KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1O1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG4gIH07XG5cbiAgdmFyIGVuY29kZUFzY2lpID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIGJhc2UzMlN0ciA9ICcnLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IHBhcnNlSW50KGxlbmd0aCAvIDUpICogNTsgaSA8IGNvdW50Oykge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjMgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjQgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjUgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzIHwgdjUgPj4+IDUpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgIH1cblxuICAgIC8vIHJlbWFpbiBjaGFyXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDEpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMikgJiAzMV0gK1xuICAgICAgICAnPT09PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQpICYgMzFdICtcbiAgICAgICAgJz09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAzKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAnPT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNCkge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjMgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjQgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMykgJiAzMV0gK1xuICAgICAgICAnPSc7XG4gICAgfVxuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZVV0ZjggPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgY29kZSwgZW5kID0gZmFsc2UsIGJhc2UzMlN0ciA9ICcnLFxuICAgICAgaW5kZXggPSAwLCBpLCBzdGFydCA9IDAsIGJ5dGVzID0gMCwgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICBkbyB7XG4gICAgICBibG9ja3NbMF0gPSBibG9ja3NbNV07XG4gICAgICBibG9ja3NbMV0gPSBibG9ja3NbNl07XG4gICAgICBibG9ja3NbMl0gPSBibG9ja3NbN107XG4gICAgICBmb3IgKGkgPSBzdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IDU7ICsraW5kZXgpIHtcbiAgICAgICAgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKGNvZGUgPCAweDgwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSBjb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHhjMCB8IChjb2RlID4+IDYpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHhlMCB8IChjb2RlID4+IDEyKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGUgPSAweDEwMDAwICsgKCgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgfCAoc3RyLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHhmMCB8IChjb2RlID4+IDE4KTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gMTIpICYgMHgzZik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnl0ZXMgKz0gaSAtIHN0YXJ0O1xuICAgICAgc3RhcnQgPSBpIC0gNTtcbiAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPiBsZW5ndGggJiYgaSA8IDYpIHtcbiAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHYxID0gYmxvY2tzWzBdO1xuICAgICAgaWYgKGkgPiA0KSB7XG4gICAgICAgIHYyID0gYmxvY2tzWzFdO1xuICAgICAgICB2MyA9IGJsb2Nrc1syXTtcbiAgICAgICAgdjQgPSBibG9ja3NbM107XG4gICAgICAgIHY1ID0gYmxvY2tzWzRdO1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMSkge1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICAgJz09PT09PSc7XG4gICAgICB9IGVsc2UgaWYgKGkgPT09IDIpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQpICYgMzFdICtcbiAgICAgICAgICAnPT09PSc7XG4gICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgICAnPT09JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYyID0gYmxvY2tzWzFdO1xuICAgICAgICB2MyA9IGJsb2Nrc1syXTtcbiAgICAgICAgdjQgPSBibG9ja3NbM107XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMykgJiAzMV0gK1xuICAgICAgICAgICc9JztcbiAgICAgIH1cbiAgICB9IHdoaWxlICghZW5kKTtcbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGVCeXRlcyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIGJhc2UzMlN0ciA9ICcnLCBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gcGFyc2VJbnQobGVuZ3RoIC8gNSkgKiA1OyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IGJ5dGVzW2krK107XG4gICAgICB2MiA9IGJ5dGVzW2krK107XG4gICAgICB2MyA9IGJ5dGVzW2krK107XG4gICAgICB2NCA9IGJ5dGVzW2krK107XG4gICAgICB2NSA9IGJ5dGVzW2krK107XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGNoYXJcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMSkge1xuICAgICAgdjEgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICc9PT09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IGJ5dGVzW2krK107XG4gICAgICB2MiA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAnPT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDMpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICc9PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IGJ5dGVzW2krK107XG4gICAgICB2MiA9IGJ5dGVzW2krK107XG4gICAgICB2MyA9IGJ5dGVzW2krK107XG4gICAgICB2NCA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGlucHV0LCBhc2NpaU9ubHkpIHtcbiAgICB2YXIgbm90U3RyaW5nID0gdHlwZW9mKGlucHV0KSAhPT0gJ3N0cmluZyc7XG4gICAgaWYgKG5vdFN0cmluZyAmJiBpbnB1dC5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcbiAgICAgIGlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpO1xuICAgIH1cbiAgICBpZiAobm90U3RyaW5nKSB7XG4gICAgICByZXR1cm4gZW5jb2RlQnl0ZXMoaW5wdXQpO1xuICAgIH0gZWxzZSBpZiAoYXNjaWlPbmx5KSB7XG4gICAgICByZXR1cm4gZW5jb2RlQXNjaWkoaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZW5jb2RlVXRmOChpbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZWNvZGUgPSBmdW5jdGlvbiAoYmFzZTMyU3RyLCBhc2NpaU9ubHkpIHtcbiAgICBpZiAoIWFzY2lpT25seSkge1xuICAgICAgcmV0dXJuIHRvVXRmOFN0cmluZyhkZWNvZGVBc0J5dGVzKGJhc2UzMlN0cikpO1xuICAgIH1cbiAgICBpZiAoIS9eW0EtWjItNz1dKyQvLnRlc3QoYmFzZTMyU3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHN0ciA9ICcnLCBsZW5ndGggPSBiYXNlMzJTdHIuaW5kZXhPZignPScpO1xuICAgIGlmIChsZW5ndGggPT09IC0xKSB7XG4gICAgICBsZW5ndGggPSBiYXNlMzJTdHIubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIDggY2hhciB0byA1IGJ5dGVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gbGVuZ3RoID4+IDMgPDwgMzsgaSA8IGNvdW50Oykge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjcgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY4ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY3IDw8IDUgfCB2OCkgJiAyNTUpO1xuICAgIH1cblxuICAgIC8vIHJlbWFpbiBieXRlc1xuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNCkge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNSkge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1KTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNykge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjcgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIHZhciBleHBvcnRzID0ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH07XG4gIGRlY29kZS5hc0J5dGVzID0gZGVjb2RlQXNCeXRlcztcblxuICBpZiAoQ09NTU9OX0pTKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuYmFzZTMyID0gZXhwb3J0cztcbiAgICBpZiAoQU1EKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KSgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB3b3JkID0gJ1thLWZBLUZcXFxcZDpdJztcbmNvbnN0IGIgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5pbmNsdWRlQm91bmRhcmllcyA/XG5cdGAoPzooPzw9XFxcXHN8XikoPz0ke3dvcmR9KXwoPzw9JHt3b3JkfSkoPz1cXFxcc3wkKSlgIDpcblx0Jyc7XG5cbmNvbnN0IHY0ID0gJyg/OjI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV1cXFxcZHxcXFxcZCkoPzpcXFxcLig/OjI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV1cXFxcZHxcXFxcZCkpezN9JztcblxuY29uc3QgdjZzZWcgPSAnW2EtZkEtRlxcXFxkXXsxLDR9JztcbmNvbnN0IHY2ID0gYFxuKFxuKD86JHt2NnNlZ306KXs3fSg/OiR7djZzZWd9fDopfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjY6Nzo6ICAxOjI6Mzo0OjU6Njo3Ojhcbig/OiR7djZzZWd9Oil7Nn0oPzoke3Y0fXw6JHt2NnNlZ318Oil8ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE6MjozOjQ6NTo2OjogICAgMToyOjM6NDo1OjY6OjggICAxOjI6Mzo0OjU6Njo6OCAgMToyOjM6NDo1OjY6OjEuMi4zLjRcbig/OiR7djZzZWd9Oil7NX0oPzo6JHt2NH18KDoke3Y2c2VnfSl7MSwyfXw6KXwgICAgICAgICAgICAgICAgIC8vIDE6MjozOjQ6NTo6ICAgICAgMToyOjM6NDo1Ojo3OjggICAxOjI6Mzo0OjU6OjggICAgMToyOjM6NDo1Ojo3OjEuMi4zLjRcbig/OiR7djZzZWd9Oil7NH0oPzooOiR7djZzZWd9KXswLDF9OiR7djR9fCg6JHt2NnNlZ30pezEsM318Oil8IC8vIDE6MjozOjQ6OiAgICAgICAgMToyOjM6NDo6Njo3OjggICAxOjI6Mzo0Ojo4ICAgICAgMToyOjM6NDo6Njo3OjEuMi4zLjRcbig/OiR7djZzZWd9Oil7M30oPzooOiR7djZzZWd9KXswLDJ9OiR7djR9fCg6JHt2NnNlZ30pezEsNH18Oil8IC8vIDE6MjozOjogICAgICAgICAgMToyOjM6OjU6Njo3OjggICAxOjI6Mzo6OCAgICAgICAgMToyOjM6OjU6Njo3OjEuMi4zLjRcbig/OiR7djZzZWd9Oil7Mn0oPzooOiR7djZzZWd9KXswLDN9OiR7djR9fCg6JHt2NnNlZ30pezEsNX18Oil8IC8vIDE6Mjo6ICAgICAgICAgICAgMToyOjo0OjU6Njo3OjggICAxOjI6OjggICAgICAgICAgMToyOjo0OjU6Njo3OjEuMi4zLjRcbig/OiR7djZzZWd9Oil7MX0oPzooOiR7djZzZWd9KXswLDR9OiR7djR9fCg6JHt2NnNlZ30pezEsNn18Oil8IC8vIDE6OiAgICAgICAgICAgICAgMTo6Mzo0OjU6Njo3OjggICAxOjo4ICAgICAgICAgICAgMTo6Mzo0OjU6Njo3OjEuMi4zLjRcbig/OjooKD86OiR7djZzZWd9KXswLDV9OiR7djR9fCg/Ojoke3Y2c2VnfSl7MSw3fXw6KSkgICAgICAgICAgIC8vIDo6MjozOjQ6NTo2Ojc6OCAgOjoyOjM6NDo1OjY6Nzo4ICA6OjggICAgICAgICAgICAgOjoxLjIuMy40XG4pKCVbMC05YS16QS1aXXsxLH0pPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAlZXRoMCAgICAgICAgICAgICUxXG5gLnJlcGxhY2UoL1xccypcXC9cXC8uKiQvZ20sICcnKS5yZXBsYWNlKC9cXG4vZywgJycpLnRyaW0oKTtcblxuY29uc3QgaXAgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/XG5cdG5ldyBSZWdFeHAoYCg/Ol4ke3Y0fSQpfCg/Ol4ke3Y2fSQpYCkgOlxuXHRuZXcgUmVnRXhwKGAoPzoke2Iob3B0aW9ucyl9JHt2NH0ke2Iob3B0aW9ucyl9KXwoPzoke2Iob3B0aW9ucyl9JHt2Nn0ke2Iob3B0aW9ucyl9KWAsICdnJyk7XG5cbmlwLnY0ID0gb3B0aW9ucyA9PiBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3QgPyBuZXcgUmVnRXhwKGBeJHt2NH0kYCkgOiBuZXcgUmVnRXhwKGAke2Iob3B0aW9ucyl9JHt2NH0ke2Iob3B0aW9ucyl9YCwgJ2cnKTtcbmlwLnY2ID0gb3B0aW9ucyA9PiBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3QgPyBuZXcgUmVnRXhwKGBeJHt2Nn0kYCkgOiBuZXcgUmVnRXhwKGAke2Iob3B0aW9ucyl9JHt2Nn0ke2Iob3B0aW9ucyl9YCwgJ2cnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpcDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlwID0gZXhwb3J0cztcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgb3MgPSByZXF1aXJlKCdvcycpO1xuXG5pcC50b0J1ZmZlciA9IGZ1bmN0aW9uKGlwLCBidWZmLCBvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gfn5vZmZzZXQ7XG5cbiAgdmFyIHJlc3VsdDtcblxuICBpZiAodGhpcy5pc1Y0Rm9ybWF0KGlwKSkge1xuICAgIHJlc3VsdCA9IGJ1ZmYgfHwgbmV3IEJ1ZmZlcihvZmZzZXQgKyA0KTtcbiAgICBpcC5zcGxpdCgvXFwuL2cpLm1hcChmdW5jdGlvbihieXRlKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gcGFyc2VJbnQoYnl0ZSwgMTApICYgMHhmZjtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzVjZGb3JtYXQoaXApKSB7XG4gICAgdmFyIHNlY3Rpb25zID0gaXAuc3BsaXQoJzonLCA4KTtcblxuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlzdjQgPSB0aGlzLmlzVjRGb3JtYXQoc2VjdGlvbnNbaV0pO1xuICAgICAgdmFyIHY0QnVmZmVyO1xuXG4gICAgICBpZiAoaXN2NCkge1xuICAgICAgICB2NEJ1ZmZlciA9IHRoaXMudG9CdWZmZXIoc2VjdGlvbnNbaV0pO1xuICAgICAgICBzZWN0aW9uc1tpXSA9IHY0QnVmZmVyLnNsaWNlKDAsIDIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHY0QnVmZmVyICYmICsraSA8IDgpIHtcbiAgICAgICAgc2VjdGlvbnMuc3BsaWNlKGksIDAsIHY0QnVmZmVyLnNsaWNlKDIsIDQpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25zWzBdID09PSAnJykge1xuICAgICAgd2hpbGUgKHNlY3Rpb25zLmxlbmd0aCA8IDgpIHNlY3Rpb25zLnVuc2hpZnQoJzAnKTtcbiAgICB9IGVsc2UgaWYgKHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgICAgd2hpbGUgKHNlY3Rpb25zLmxlbmd0aCA8IDgpIHNlY3Rpb25zLnB1c2goJzAnKTtcbiAgICB9IGVsc2UgaWYgKHNlY3Rpb25zLmxlbmd0aCA8IDgpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGggJiYgc2VjdGlvbnNbaV0gIT09ICcnOyBpKyspO1xuICAgICAgdmFyIGFyZ3YgPSBbIGksIDEgXTtcbiAgICAgIGZvciAoaSA9IDkgLSBzZWN0aW9ucy5sZW5ndGg7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgYXJndi5wdXNoKCcwJyk7XG4gICAgICB9XG4gICAgICBzZWN0aW9ucy5zcGxpY2UuYXBwbHkoc2VjdGlvbnMsIGFyZ3YpO1xuICAgIH1cblxuICAgIHJlc3VsdCA9IGJ1ZmYgfHwgbmV3IEJ1ZmZlcihvZmZzZXQgKyAxNik7XG4gICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd29yZCA9IHBhcnNlSW50KHNlY3Rpb25zW2ldLCAxNik7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gKHdvcmQgPj4gOCkgJiAweGZmO1xuICAgICAgcmVzdWx0W29mZnNldCsrXSA9IHdvcmQgJiAweGZmO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcmVzdWx0KSB7XG4gICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgaXAgYWRkcmVzczogJyArIGlwKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5pcC50b1N0cmluZyA9IGZ1bmN0aW9uKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IH5+b2Zmc2V0O1xuICBsZW5ndGggPSBsZW5ndGggfHwgKGJ1ZmYubGVuZ3RoIC0gb2Zmc2V0KTtcblxuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChsZW5ndGggPT09IDQpIHtcbiAgICAvLyBJUHY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2goYnVmZltvZmZzZXQgKyBpXSk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5qb2luKCcuJyk7XG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSAxNikge1xuICAgIC8vIElQdjZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICByZXN1bHQucHVzaChidWZmLnJlYWRVSW50MTZCRShvZmZzZXQgKyBpKS50b1N0cmluZygxNikpO1xuICAgIH1cbiAgICByZXN1bHQgPSByZXN1bHQuam9pbignOicpO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8oXnw6KTAoOjApKjowKDp8JCkvLCAnJDE6OiQzJyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLzp7Myw0fS8sICc6OicpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBpcHY0UmVnZXggPSAvXihcXGR7MSwzfVxcLil7MywzfVxcZHsxLDN9JC87XG52YXIgaXB2NlJlZ2V4ID1cbiAgICAvXig6Oik/KCgoXFxkezEsM31cXC4pezN9KFxcZHsxLDN9KXsxfSk/KFswLTlhLWZdKXswLDR9OnswLDJ9KXsxLDh9KDo6KT8kL2k7XG5cbmlwLmlzVjRGb3JtYXQgPSBmdW5jdGlvbihpcCkge1xuICByZXR1cm4gaXB2NFJlZ2V4LnRlc3QoaXApO1xufTtcblxuaXAuaXNWNkZvcm1hdCA9IGZ1bmN0aW9uKGlwKSB7XG4gIHJldHVybiBpcHY2UmVnZXgudGVzdChpcCk7XG59O1xuZnVuY3Rpb24gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpIHtcbiAgcmV0dXJuIGZhbWlseSA/IGZhbWlseS50b0xvd2VyQ2FzZSgpIDogJ2lwdjQnO1xufVxuXG5pcC5mcm9tUHJlZml4TGVuID0gZnVuY3Rpb24ocHJlZml4bGVuLCBmYW1pbHkpIHtcbiAgaWYgKHByZWZpeGxlbiA+IDMyKSB7XG4gICAgZmFtaWx5ID0gJ2lwdjYnO1xuICB9IGVsc2Uge1xuICAgIGZhbWlseSA9IF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KTtcbiAgfVxuXG4gIHZhciBsZW4gPSA0O1xuICBpZiAoZmFtaWx5ID09PSAnaXB2NicpIHtcbiAgICBsZW4gPSAxNjtcbiAgfVxuICB2YXIgYnVmZiA9IG5ldyBCdWZmZXIobGVuKTtcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IGJ1ZmYubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgdmFyIGJpdHMgPSA4O1xuICAgIGlmIChwcmVmaXhsZW4gPCA4KSB7XG4gICAgICBiaXRzID0gcHJlZml4bGVuO1xuICAgIH1cbiAgICBwcmVmaXhsZW4gLT0gYml0cztcblxuICAgIGJ1ZmZbaV0gPSB+KDB4ZmYgPj4gYml0cykgJiAweGZmO1xuICB9XG5cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xufTtcblxuaXAubWFzayA9IGZ1bmN0aW9uKGFkZHIsIG1hc2spIHtcbiAgYWRkciA9IGlwLnRvQnVmZmVyKGFkZHIpO1xuICBtYXNrID0gaXAudG9CdWZmZXIobWFzayk7XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBCdWZmZXIoTWF0aC5tYXgoYWRkci5sZW5ndGgsIG1hc2subGVuZ3RoKSk7XG5cbiAgdmFyIGkgPSAwO1xuICAvLyBTYW1lIHByb3RvY29sIC0gZG8gYml0d2lzZSBhbmRcbiAgaWYgKGFkZHIubGVuZ3RoID09PSBtYXNrLmxlbmd0aCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZGRyLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBhZGRyW2ldICYgbWFza1tpXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWFzay5sZW5ndGggPT09IDQpIHtcbiAgICAvLyBJUHY2IGFkZHJlc3MgYW5kIElQdjQgbWFza1xuICAgIC8vIChNYXNrIGxvdyBiaXRzKVxuICAgIGZvciAoaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBhZGRyW2FkZHIubGVuZ3RoIC0gNCAgKyBpXSAmIG1hc2tbaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElQdjYgbWFzayBhbmQgSVB2NCBhZGRyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoIC0gNjsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSAwO1xuICAgIH1cblxuICAgIC8vIDo6ZmZmZjppcHY0XG4gICAgcmVzdWx0WzEwXSA9IDB4ZmY7XG4gICAgcmVzdWx0WzExXSA9IDB4ZmY7XG4gICAgZm9yIChpID0gMDsgaSA8IGFkZHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpICsgMTJdID0gYWRkcltpXSAmIG1hc2tbaSArIDEyXTtcbiAgICB9XG4gICAgaSA9IGkgKyAxMjtcbiAgfVxuICBmb3IgKDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKylcbiAgICByZXN1bHRbaV0gPSAwO1xuXG4gIHJldHVybiBpcC50b1N0cmluZyhyZXN1bHQpO1xufTtcblxuaXAuY2lkciA9IGZ1bmN0aW9uKGNpZHJTdHJpbmcpIHtcbiAgdmFyIGNpZHJQYXJ0cyA9IGNpZHJTdHJpbmcuc3BsaXQoJy8nKTtcblxuICB2YXIgYWRkciA9IGNpZHJQYXJ0c1swXTtcbiAgaWYgKGNpZHJQYXJ0cy5sZW5ndGggIT09IDIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIENJRFIgc3VibmV0OiAnICsgYWRkcik7XG5cbiAgdmFyIG1hc2sgPSBpcC5mcm9tUHJlZml4TGVuKHBhcnNlSW50KGNpZHJQYXJ0c1sxXSwgMTApKTtcblxuICByZXR1cm4gaXAubWFzayhhZGRyLCBtYXNrKTtcbn07XG5cbmlwLnN1Ym5ldCA9IGZ1bmN0aW9uKGFkZHIsIG1hc2spIHtcbiAgdmFyIG5ldHdvcmtBZGRyZXNzID0gaXAudG9Mb25nKGlwLm1hc2soYWRkciwgbWFzaykpO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgbWFzaydzIGxlbmd0aC5cbiAgdmFyIG1hc2tCdWZmZXIgPSBpcC50b0J1ZmZlcihtYXNrKTtcbiAgdmFyIG1hc2tMZW5ndGggPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWFza0J1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChtYXNrQnVmZmVyW2ldID09PSAweGZmKSB7XG4gICAgICBtYXNrTGVuZ3RoICs9IDg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvY3RldCA9IG1hc2tCdWZmZXJbaV0gJiAweGZmO1xuICAgICAgd2hpbGUgKG9jdGV0KSB7XG4gICAgICAgIG9jdGV0ID0gKG9jdGV0IDw8IDEpICYgMHhmZjtcbiAgICAgICAgbWFza0xlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBudW1iZXJPZkFkZHJlc3NlcyA9IE1hdGgucG93KDIsIDMyIC0gbWFza0xlbmd0aCk7XG5cbiAgcmV0dXJuIHtcbiAgICBuZXR3b3JrQWRkcmVzczogaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MpLFxuICAgIGZpcnN0QWRkcmVzczogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzKSA6XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgMSksXG4gICAgbGFzdEFkZHJlc3M6IG51bWJlck9mQWRkcmVzc2VzIDw9IDIgP1xuICAgICAgICAgICAgICAgICAgICBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMSkgOlxuICAgICAgICAgICAgICAgICAgICBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMiksXG4gICAgYnJvYWRjYXN0QWRkcmVzczogaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyBudW1iZXJPZkFkZHJlc3NlcyAtIDEpLFxuICAgIHN1Ym5ldE1hc2s6IG1hc2ssXG4gICAgc3VibmV0TWFza0xlbmd0aDogbWFza0xlbmd0aCxcbiAgICBudW1Ib3N0czogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZBZGRyZXNzZXMgOiBudW1iZXJPZkFkZHJlc3NlcyAtIDIsXG4gICAgbGVuZ3RoOiBudW1iZXJPZkFkZHJlc3NlcyxcbiAgICBjb250YWluczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIHJldHVybiBuZXR3b3JrQWRkcmVzcyA9PT0gaXAudG9Mb25nKGlwLm1hc2sob3RoZXIsIG1hc2spKTtcbiAgICB9XG4gIH07XG59O1xuXG5pcC5jaWRyU3VibmV0ID0gZnVuY3Rpb24oY2lkclN0cmluZykge1xuICB2YXIgY2lkclBhcnRzID0gY2lkclN0cmluZy5zcGxpdCgnLycpO1xuXG4gIHZhciBhZGRyID0gY2lkclBhcnRzWzBdO1xuICBpZiAoY2lkclBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ0lEUiBzdWJuZXQ6ICcgKyBhZGRyKTtcblxuICB2YXIgbWFzayA9IGlwLmZyb21QcmVmaXhMZW4ocGFyc2VJbnQoY2lkclBhcnRzWzFdLCAxMCkpO1xuXG4gIHJldHVybiBpcC5zdWJuZXQoYWRkciwgbWFzayk7XG59O1xuXG5pcC5ub3QgPSBmdW5jdGlvbihhZGRyKSB7XG4gIHZhciBidWZmID0gaXAudG9CdWZmZXIoYWRkcik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZi5sZW5ndGg7IGkrKykge1xuICAgIGJ1ZmZbaV0gPSAweGZmIF4gYnVmZltpXTtcbiAgfVxuICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG59O1xuXG5pcC5vciA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgYSA9IGlwLnRvQnVmZmVyKGEpO1xuICBiID0gaXAudG9CdWZmZXIoYik7XG5cbiAgLy8gc2FtZSBwcm90b2NvbFxuICBpZiAoYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICBhW2ldIHw9IGJbaV07XG4gICAgfVxuICAgIHJldHVybiBpcC50b1N0cmluZyhhKTtcblxuICAvLyBtaXhlZCBwcm90b2NvbHNcbiAgfSBlbHNlIHtcbiAgICB2YXIgYnVmZiA9IGE7XG4gICAgdmFyIG90aGVyID0gYjtcbiAgICBpZiAoYi5sZW5ndGggPiBhLmxlbmd0aCkge1xuICAgICAgYnVmZiA9IGI7XG4gICAgICBvdGhlciA9IGE7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldCA9IGJ1ZmYubGVuZ3RoIC0gb3RoZXIubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBidWZmLmxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmW2ldIHw9IG90aGVyW2kgLSBvZmZzZXRdO1xuICAgIH1cblxuICAgIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbiAgfVxufTtcblxuaXAuaXNFcXVhbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgYSA9IGlwLnRvQnVmZmVyKGEpO1xuICBiID0gaXAudG9CdWZmZXIoYik7XG5cbiAgLy8gU2FtZSBwcm90b2NvbFxuICBpZiAoYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFN3YXBcbiAgaWYgKGIubGVuZ3RoID09PSA0KSB7XG4gICAgdmFyIHQgPSBiO1xuICAgIGIgPSBhO1xuICAgIGEgPSB0O1xuICB9XG5cbiAgLy8gYSAtIElQdjQsIGIgLSBJUHY2XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmIChiW2ldICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgd29yZCA9IGIucmVhZFVJbnQxNkJFKDEwKTtcbiAgaWYgKHdvcmQgIT09IDAgJiYgd29yZCAhPT0gMHhmZmZmKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpICsgMTJdKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmlwLmlzUHJpdmF0ZSA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuIC9eKDo6Zns0fTopPzEwXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzE5MlxcLjE2OFxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTcyXFwuKDFbNi05XXwyXFxkfDMwfDMxKVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaVxuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xMjdcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2kudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzE2OVxcLjI1NFxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL15mW2NkXVswLTlhLWZdezJ9Oi9pLnRlc3QoYWRkcikgfHxcbiAgICAvXmZlODA6L2kudGVzdChhZGRyKSB8fFxuICAgIC9eOjoxJC8udGVzdChhZGRyKSB8fFxuICAgIC9eOjokLy50ZXN0KGFkZHIpO1xufTtcblxuaXAuaXNQdWJsaWMgPSBmdW5jdGlvbihhZGRyKSB7XG4gIHJldHVybiAhaXAuaXNQcml2YXRlKGFkZHIpO1xufTtcblxuaXAuaXNMb29wYmFjayA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuIC9eKDo6Zns0fTopPzEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KS9cbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL15mZTgwOjoxJC8udGVzdChhZGRyKSB8fFxuICAgIC9eOjoxJC8udGVzdChhZGRyKSB8fFxuICAgIC9eOjokLy50ZXN0KGFkZHIpO1xufTtcblxuaXAubG9vcGJhY2sgPSBmdW5jdGlvbihmYW1pbHkpIHtcbiAgLy9cbiAgLy8gRGVmYXVsdCB0byBgaXB2NGBcbiAgLy9cbiAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuXG4gIGlmIChmYW1pbHkgIT09ICdpcHY0JyAmJiBmYW1pbHkgIT09ICdpcHY2Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFtaWx5IG11c3QgYmUgaXB2NCBvciBpcHY2Jyk7XG4gIH1cblxuICByZXR1cm4gZmFtaWx5ID09PSAnaXB2NCcgPyAnMTI3LjAuMC4xJyA6ICdmZTgwOjoxJztcbn07XG5cbi8vXG4vLyAjIyMgZnVuY3Rpb24gYWRkcmVzcyAobmFtZSwgZmFtaWx5KVxuLy8gIyMjIyBAbmFtZSB7c3RyaW5nfCdwdWJsaWMnfCdwcml2YXRlJ30gKipPcHRpb25hbCoqIE5hbWUgb3Igc2VjdXJpdHlcbi8vICAgICAgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLlxuLy8gIyMjIyBAZmFtaWx5IHtpcHY0fGlwdjZ9ICoqT3B0aW9uYWwqKiBJUCBmYW1pbHkgb2YgdGhlIGFkZHJlc3MgKGRlZmF1bHRzXG4vLyAgICAgIHRvIGlwdjQpLlxuLy9cbi8vIFJldHVybnMgdGhlIGFkZHJlc3MgZm9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBvbiB0aGUgY3VycmVudCBzeXN0ZW0gd2l0aFxuLy8gdGhlIHNwZWNpZmllZCBgbmFtZWA6XG4vLyAgICogU3RyaW5nOiBGaXJzdCBgZmFtaWx5YCBhZGRyZXNzIG9mIHRoZSBpbnRlcmZhY2UuXG4vLyAgICAgICAgICAgICBJZiBub3QgZm91bmQgc2VlIGB1bmRlZmluZWRgLlxuLy8gICAqICdwdWJsaWMnOiB0aGUgZmlyc3QgcHVibGljIGlwIGFkZHJlc3Mgb2YgZmFtaWx5LlxuLy8gICAqICdwcml2YXRlJzogdGhlIGZpcnN0IHByaXZhdGUgaXAgYWRkcmVzcyBvZiBmYW1pbHkuXG4vLyAgICogdW5kZWZpbmVkOiBGaXJzdCBhZGRyZXNzIHdpdGggYGlwdjRgIG9yIGxvb3BiYWNrIGFkZHJlc3MgYDEyNy4wLjAuMWAuXG4vL1xuaXAuYWRkcmVzcyA9IGZ1bmN0aW9uKG5hbWUsIGZhbWlseSkge1xuICB2YXIgaW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7XG4gIHZhciBhbGw7XG5cbiAgLy9cbiAgLy8gRGVmYXVsdCB0byBgaXB2NGBcbiAgLy9cbiAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuXG4gIC8vXG4gIC8vIElmIGEgc3BlY2lmaWMgbmV0d29yayBpbnRlcmZhY2UgaGFzIGJlZW4gbmFtZWQsXG4gIC8vIHJldHVybiB0aGUgYWRkcmVzcy5cbiAgLy9cbiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJ3ByaXZhdGUnICYmIG5hbWUgIT09ICdwdWJsaWMnKSB7XG4gICAgdmFyIHJlcyA9IGludGVyZmFjZXNbbmFtZV0uZmlsdGVyKGZ1bmN0aW9uKGRldGFpbHMpIHtcbiAgICAgIHZhciBpdGVtRmFtaWx5ID0gZGV0YWlscy5mYW1pbHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBpdGVtRmFtaWx5ID09PSBmYW1pbHk7XG4gICAgfSk7XG4gICAgaWYgKHJlcy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXNbMF0uYWRkcmVzcztcbiAgfVxuXG4gIHZhciBhbGwgPSBPYmplY3Qua2V5cyhpbnRlcmZhY2VzKS5tYXAoZnVuY3Rpb24gKG5pYykge1xuICAgIC8vXG4gICAgLy8gTm90ZTogbmFtZSB3aWxsIG9ubHkgYmUgYHB1YmxpY2Agb3IgYHByaXZhdGVgXG4gICAgLy8gd2hlbiB0aGlzIGlzIGNhbGxlZC5cbiAgICAvL1xuICAgIHZhciBhZGRyZXNzZXMgPSBpbnRlcmZhY2VzW25pY10uZmlsdGVyKGZ1bmN0aW9uIChkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzLmZhbWlseSA9IGRldGFpbHMuZmFtaWx5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoZGV0YWlscy5mYW1pbHkgIT09IGZhbWlseSB8fCBpcC5pc0xvb3BiYWNrKGRldGFpbHMuYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5hbWUgPT09ICdwdWJsaWMnID8gaXAuaXNQcml2YXRlKGRldGFpbHMuYWRkcmVzcykgOlxuICAgICAgICAgIGlwLmlzUHVibGljKGRldGFpbHMuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWRkcmVzc2VzLmxlbmd0aCA/IGFkZHJlc3Nlc1swXS5hZGRyZXNzIDogdW5kZWZpbmVkO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgcmV0dXJuICFhbGwubGVuZ3RoID8gaXAubG9vcGJhY2soZmFtaWx5KSA6IGFsbFswXTtcbn07XG5cbmlwLnRvTG9uZyA9IGZ1bmN0aW9uKGlwKSB7XG4gIHZhciBpcGwgPSAwO1xuICBpcC5zcGxpdCgnLicpLmZvckVhY2goZnVuY3Rpb24ob2N0ZXQpIHtcbiAgICBpcGwgPDw9IDg7XG4gICAgaXBsICs9IHBhcnNlSW50KG9jdGV0KTtcbiAgfSk7XG4gIHJldHVybihpcGwgPj4+IDApO1xufTtcblxuaXAuZnJvbUxvbmcgPSBmdW5jdGlvbihpcGwpIHtcbiAgcmV0dXJuICgoaXBsID4+PiAyNCkgKyAnLicgK1xuICAgICAgKGlwbCA+PiAxNiAmIDI1NSkgKyAnLicgK1xuICAgICAgKGlwbCA+PiA4ICYgMjU1KSArICcuJyArXG4gICAgICAoaXBsICYgMjU1KSApO1xufTtcbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGlwUmVnZXggPSByZXF1aXJlKCdpcC1yZWdleCcpO1xuXG5jb25zdCBpc0lwID0gc3RyaW5nID0+IGlwUmVnZXgoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52NCA9IHN0cmluZyA9PiBpcFJlZ2V4LnY0KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudjYgPSBzdHJpbmcgPT4gaXBSZWdleC52Nih7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnZlcnNpb24gPSBzdHJpbmcgPT4gaXNJcChzdHJpbmcpID8gKGlzSXAudjQoc3RyaW5nKSA/IDQgOiA2KSA6IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0lwO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2U1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgbXVsdGloYXNoID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuY29uc3QgbXVsdGliYXNlID0gcmVxdWlyZSgnbXVsdGliYXNlJylcbmNvbnN0IE11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5jb25zdCBtYWZtdCA9IHJlcXVpcmUoJ21hZm10JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuXG5jb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvW14vXStcXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IHBhdGhQYXR0ZXJuID0gL15cXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IGRlZmF1bHRQcm90b2NvbE1hdGNoID0gMVxuY29uc3QgZGVmYXVsdEhhc2hNYXRoID0gNFxuXG5jb25zdCBmcWRuUGF0dGVybiA9IC9eaHR0cHM/OlxcL1xcLyhbXi9dKylcXC4oaXAoPzpmfG4pcylcXC5bXi9dKy9cbmNvbnN0IGZxZG5IYXNoTWF0Y2ggPSAxXG5jb25zdCBmcWRuUHJvdG9jb2xNYXRjaCA9IDJcblxuZnVuY3Rpb24gaXNNdWx0aWhhc2ggKGhhc2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGhhc2gpXG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShmb3JtYXR0ZWQpKVxuICAgIG11bHRpaGFzaC5kZWNvZGUoYnVmZmVyKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYmFzZSAoaGFzaCkge1xuICB0cnkge1xuICAgIHJldHVybiBtdWx0aWJhc2UuaXNFbmNvZGVkKGhhc2gpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NJRCAoaGFzaCkge1xuICB0cnkge1xuICAgIG5ldyBDSUQoaGFzaCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aWFkZHIgKGlucHV0KSB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZVxuICBpZiAoTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGlucHV0KSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICBuZXcgTXVsdGlhZGRyKGlucHV0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BlZXJNdWx0aWFkZHIgKGlucHV0KSB7XG4gIHJldHVybiBpc011bHRpYWRkcihpbnB1dCkgJiYgbWFmbXQuSVBGUy5tYXRjaGVzKGlucHV0KVxufVxuXG5mdW5jdGlvbiBpc0lwZnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCA9IGRlZmF1bHRIYXNoTWF0aCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGZvcm1hdHRlZC5tYXRjaChwYXR0ZXJuKVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWF0Y2hbcHJvdG9jb2xNYXRjaF0gIT09ICdpcGZzJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG5cbiAgaWYgKGhhc2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gaXNDSUQoaGFzaClcbn1cblxuZnVuY3Rpb24gaXNJcG5zIChpbnB1dCwgcGF0dGVybiwgcHJvdG9jb2xNYXRjaCA9IGRlZmF1bHRQcm90b2NvbE1hdGNoLCBoYXNoTWF0Y2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGlucHV0KVxuICBpZiAoIWZvcm1hdHRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwbnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoaGFzaE1hdGNoICYmIHBhdHRlcm4gPT09IGZxZG5QYXR0ZXJuKSB7XG4gICAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG4gICAgLy8gd2hlbiBkb2luZyBjaGVja3MgZm9yIHN1YmRvbWFpbiBjb250ZXh0XG4gICAgLy8gZW5zdXJlIGhhc2ggaXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIChicm93c2VycyBmb3JjZS1sb3dlcmNhc2UgYXV0aG9yaXR5IGNvbXBvdGVudCBhbnl3YXkpXG4gICAgaGFzaCA9IGhhc2gudG9Mb3dlckNhc2UoKVxuICAgIHJldHVybiBpc0NJRChoYXNoKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcgKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAoaW5wdXQpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpbnB1dCkpIHtcbiAgICByZXR1cm4gYmFzZTU4LmVuY29kZShpbnB1dClcbiAgfVxuXG4gIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBpcGZzU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcGZzKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuY29uc3QgaXBuc1N1YmRvbWFpbiA9ICh1cmwpID0+IGlzSXBucyh1cmwsIGZxZG5QYXR0ZXJuLCBmcWRuUHJvdG9jb2xNYXRjaCwgZnFkbkhhc2hNYXRjaClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpaGFzaDogaXNNdWx0aWhhc2gsXG4gIG11bHRpYWRkcjogaXNNdWx0aWFkZHIsXG4gIHBlZXJNdWx0aWFkZHI6IGlzUGVlck11bHRpYWRkcixcbiAgY2lkOiBpc0NJRCxcbiAgYmFzZTMyY2lkOiAoY2lkKSA9PiAoaXNNdWx0aWJhc2UoY2lkKSA9PT0gJ2Jhc2UzMicgJiYgaXNDSUQoY2lkKSksXG4gIGlwZnNTdWJkb21haW46IGlwZnNTdWJkb21haW4sXG4gIGlwbnNTdWJkb21haW46IGlwbnNTdWJkb21haW4sXG4gIHN1YmRvbWFpbjogKHVybCkgPT4gKGlwZnNTdWJkb21haW4odXJsKSB8fCBpcG5zU3ViZG9tYWluKHVybCkpLFxuICBzdWJkb21haW5QYXR0ZXJuOiBmcWRuUGF0dGVybixcbiAgaXBmc1VybDogKHVybCkgPT4gaXNJcGZzKHVybCwgdXJsUGF0dGVybiksXG4gIGlwbnNVcmw6ICh1cmwpID0+IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pLFxuICB1cmw6ICh1cmwpID0+IChpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnModXJsLCB1cmxQYXR0ZXJuKSksXG4gIHVybFBhdHRlcm46IHVybFBhdHRlcm4sXG4gIGlwZnNQYXRoOiAocGF0aCkgPT4gaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSxcbiAgaXBuc1BhdGg6IChwYXRoKSA9PiBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBwYXRoOiAocGF0aCkgPT4gKGlzSXBmcyhwYXRoLCBwYXRoUGF0dGVybikgfHwgaXNJcG5zKHBhdGgsIHBhdGhQYXR0ZXJuKSksXG4gIHBhdGhQYXR0ZXJuOiBwYXRoUGF0dGVybixcbiAgdXJsT3JQYXRoOiAoeCkgPT4gKGlzSXBmcyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgdXJsUGF0dGVybikgfHwgaXNJcGZzKHgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgcGF0aFBhdHRlcm4pKSxcbiAgY2lkUGF0aDogcGF0aCA9PiBpc1N0cmluZyhwYXRoKSAmJiAhaXNDSUQocGF0aCkgJiYgaXNJcGZzKGAvaXBmcy8ke3BhdGh9YCwgcGF0aFBhdHRlcm4pXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbXVsdGlhZGRyID0gcmVxdWlyZSgnbXVsdGlhZGRyJylcblxuLypcbiAqIFZhbGlkIGNvbWJpbmF0aW9uc1xuICovXG5jb25zdCBETlM0ID0gYmFzZSgnZG5zNCcpXG5jb25zdCBETlM2ID0gYmFzZSgnZG5zNicpXG5jb25zdCBETlMgPSBvcihcbiAgYmFzZSgnZG5zJyksXG4gIGJhc2UoJ2Ruc2FkZHInKSxcbiAgRE5TNCxcbiAgRE5TNlxuKVxuXG5jb25zdCBJUCA9IG9yKGJhc2UoJ2lwNCcpLCBiYXNlKCdpcDYnKSlcbmNvbnN0IFRDUCA9IG9yKFxuICBhbmQoSVAsIGJhc2UoJ3RjcCcpKSxcbiAgYW5kKEROUywgYmFzZSgndGNwJykpXG4pXG5jb25zdCBVRFAgPSBhbmQoSVAsIGJhc2UoJ3VkcCcpKVxuY29uc3QgVVRQID0gYW5kKFVEUCwgYmFzZSgndXRwJykpXG5cbmNvbnN0IFdlYlNvY2tldHMgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnd3MnKSksXG4gIGFuZChETlMsIGJhc2UoJ3dzJykpXG4pXG5cbmNvbnN0IFdlYlNvY2tldHNTZWN1cmUgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnd3NzJykpLFxuICBhbmQoRE5TLCBiYXNlKCd3c3MnKSlcbilcblxuY29uc3QgSFRUUCA9IG9yKFxuICBhbmQoVENQLCBiYXNlKCdodHRwJykpLFxuICBhbmQoSVAsIGJhc2UoJ2h0dHAnKSksXG4gIGFuZChETlMsIGJhc2UoJ2h0dHAnKSlcbilcblxuY29uc3QgSFRUUFMgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnaHR0cHMnKSksXG4gIGFuZChJUCwgYmFzZSgnaHR0cHMnKSksXG4gIGFuZChETlMsIGJhc2UoJ2h0dHBzJykpXG4pXG5cbmNvbnN0IFdlYlJUQ1N0YXIgPSBvcihcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJykpXG4pXG5cbmNvbnN0IFdlYlNvY2tldFN0YXIgPSBvcihcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpLCBiYXNlKCdwMnAnKSksXG4gIGFuZChXZWJTb2NrZXRzU2VjdXJlLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0cywgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJykpXG4pXG5cbmNvbnN0IFdlYlJUQ0RpcmVjdCA9IG9yKFxuICBhbmQoSFRUUCwgYmFzZSgncDJwLXdlYnJ0Yy1kaXJlY3QnKSksXG4gIGFuZChIVFRQUywgYmFzZSgncDJwLXdlYnJ0Yy1kaXJlY3QnKSlcbilcblxuY29uc3QgUmVsaWFibGUgPSBvcihcbiAgV2ViU29ja2V0cyxcbiAgV2ViU29ja2V0c1NlY3VyZSxcbiAgSFRUUCxcbiAgSFRUUFMsXG4gIFdlYlJUQ1N0YXIsXG4gIFdlYlJUQ0RpcmVjdCxcbiAgVENQLFxuICBVVFBcbilcblxuLy8gVW5saWtlIHdzLXN0YXIsIHN0YXJkdXN0IGNhbiBydW4gb3ZlciBhbnkgdHJhbnNwb3J0IHRodXMgcmVtb3ZpbmcgdGhlIHJlcXVpcmVtZW50IGZvciB3ZWJzb2NrZXRzIChidXQgZG9uJ3QgZXZlbiB0aGluayBhYm91dCBydW5uaW5nIGEgc3RhcmR1c3Qgc2VydmVyIG92ZXIgd2VicnRjLXN0YXIgOykgKVxuY29uc3QgU3RhcmR1c3QgPSBvcihcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtc3RhcmR1c3QnKSwgYmFzZSgncDJwJykpLFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycC1zdGFyZHVzdCcpKVxuKVxuXG5jb25zdCBfUDJQID0gb3IoXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwJykpLFxuICBXZWJSVENTdGFyLFxuICBiYXNlKCdwMnAnKVxuKVxuXG5jb25zdCBfQ2lyY3VpdCA9IG9yKFxuICBhbmQoX1AyUCwgYmFzZSgncDJwLWNpcmN1aXQnKSwgX1AyUCksXG4gIGFuZChfUDJQLCBiYXNlKCdwMnAtY2lyY3VpdCcpKSxcbiAgYW5kKGJhc2UoJ3AycC1jaXJjdWl0JyksIF9QMlApLFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycC1jaXJjdWl0JykpLFxuICBhbmQoYmFzZSgncDJwLWNpcmN1aXQnKSwgUmVsaWFibGUpLFxuICBiYXNlKCdwMnAtY2lyY3VpdCcpXG4pXG5cbmNvbnN0IENpcmN1aXRSZWN1cnNpdmUgPSAoKSA9PiBvcihcbiAgYW5kKF9DaXJjdWl0LCBDaXJjdWl0UmVjdXJzaXZlKSxcbiAgX0NpcmN1aXRcbilcblxuY29uc3QgQ2lyY3VpdCA9IENpcmN1aXRSZWN1cnNpdmUoKVxuXG5jb25zdCBQMlAgPSBvcihcbiAgYW5kKENpcmN1aXQsIF9QMlAsIENpcmN1aXQpLFxuICBhbmQoX1AyUCwgQ2lyY3VpdCksXG4gIGFuZChDaXJjdWl0LCBfUDJQKSxcbiAgQ2lyY3VpdCxcbiAgX1AyUFxuKVxuXG5leHBvcnRzLkROUyA9IEROU1xuZXhwb3J0cy5ETlM0ID0gRE5TNFxuZXhwb3J0cy5ETlM2ID0gRE5TNlxuZXhwb3J0cy5JUCA9IElQXG5leHBvcnRzLlRDUCA9IFRDUFxuZXhwb3J0cy5VRFAgPSBVRFBcbmV4cG9ydHMuVVRQID0gVVRQXG5leHBvcnRzLkhUVFAgPSBIVFRQXG5leHBvcnRzLkhUVFBTID0gSFRUUFNcbmV4cG9ydHMuV2ViU29ja2V0cyA9IFdlYlNvY2tldHNcbmV4cG9ydHMuV2ViU29ja2V0c1NlY3VyZSA9IFdlYlNvY2tldHNTZWN1cmVcbmV4cG9ydHMuV2ViU29ja2V0U3RhciA9IFdlYlNvY2tldFN0YXJcbmV4cG9ydHMuV2ViUlRDU3RhciA9IFdlYlJUQ1N0YXJcbmV4cG9ydHMuV2ViUlRDRGlyZWN0ID0gV2ViUlRDRGlyZWN0XG5leHBvcnRzLlJlbGlhYmxlID0gUmVsaWFibGVcbmV4cG9ydHMuU3RhcmR1c3QgPSBTdGFyZHVzdFxuZXhwb3J0cy5DaXJjdWl0ID0gQ2lyY3VpdFxuZXhwb3J0cy5QMlAgPSBQMlBcbmV4cG9ydHMuSVBGUyA9IFAyUFxuXG4vKlxuICogVmFsaWRhdGlvbiBmdW5jc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VNYXRjaGVzRnVuY3Rpb24gKHBhcnRpYWxNYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gbWF0Y2hlcyAoYSkge1xuICAgIGlmICghbXVsdGlhZGRyLmlzTXVsdGlhZGRyKGEpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gbXVsdGlhZGRyKGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHsgLy8gY2F0Y2ggZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vIGFsc28gaWYgaXQncyBpbnZhbGlkIGl0J3MgcHJvcGFibHkgbm90IG1hdGNoaW5nIGFzIHdlbGwgc28gcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG91dCA9IHBhcnRpYWxNYXRjaChhLnByb3RvTmFtZXMoKSlcbiAgICBpZiAob3V0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG91dC5sZW5ndGggPT09IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBhbmQgKCkge1xuICBjb25zdCBhcmdzID0gQXJyYXkuZnJvbShhcmd1bWVudHMpXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAoYSkge1xuICAgIGlmIChhLmxlbmd0aCA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBhcmdzLnNvbWUoKGFyZykgPT4ge1xuICAgICAgYSA9IHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBhcmcoKS5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgICAgOiBhcmcucGFydGlhbE1hdGNoKGEpXG5cbiAgICAgIGlmIChhID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBhXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAneyAnICsgYXJncy5qb2luKCcgJykgKyAnIH0nIH0sXG4gICAgaW5wdXQ6IGFyZ3MsXG4gICAgbWF0Y2hlczogbWFrZU1hdGNoZXNGdW5jdGlvbihwYXJ0aWFsTWF0Y2gpLFxuICAgIHBhcnRpYWxNYXRjaDogcGFydGlhbE1hdGNoXG4gIH1cbn1cblxuZnVuY3Rpb24gb3IgKCkge1xuICBjb25zdCBhcmdzID0gQXJyYXkuZnJvbShhcmd1bWVudHMpXG5cbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChhKSB7XG4gICAgbGV0IG91dCA9IG51bGxcbiAgICBhcmdzLnNvbWUoKGFyZykgPT4ge1xuICAgICAgY29uc3QgcmVzID0gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGFyZygpLnBhcnRpYWxNYXRjaChhKVxuICAgICAgICA6IGFyZy5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgb3V0ID0gcmVzXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ3sgJyArIGFyZ3Muam9pbignICcpICsgJyB9JyB9LFxuICAgIGlucHV0OiBhcmdzLFxuICAgIG1hdGNoZXM6IG1ha2VNYXRjaGVzRnVuY3Rpb24ocGFydGlhbE1hdGNoKSxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBiYXNlIChuKSB7XG4gIGNvbnN0IG5hbWUgPSBuXG5cbiAgZnVuY3Rpb24gbWF0Y2hlcyAoYSkge1xuICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBtdWx0aWFkZHIoYSlcbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvLyBjYXRjaCBlcnJvclxuICAgICAgICByZXR1cm4gZmFsc2UgLy8gYWxzbyBpZiBpdCdzIGludmFsaWQgaXQncyBwcm9wYWJseSBub3QgbWF0Y2hpbmcgYXMgd2VsbCBzbyByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwbmFtZXMgPSBhLnByb3RvTmFtZXMoKVxuICAgIGlmIChwbmFtZXMubGVuZ3RoID09PSAxICYmIHBuYW1lc1swXSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKHByb3Rvcykge1xuICAgIGlmIChwcm90b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChwcm90b3NbMF0gPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBwcm90b3Muc2xpY2UoMSlcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hbWUgfSxcbiAgICBtYXRjaGVzOiBtYXRjaGVzLFxuICAgIHBhcnRpYWxNYXRjaDogcGFydGlhbE1hdGNoXG4gIH1cbn1cbiIsIi8qIVxuICogbWltZS1kYlxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kYi5qc29uJylcbiIsIi8qIVxuICogbWltZS10eXBlc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRiID0gcmVxdWlyZSgnbWltZS1kYicpXG52YXIgZXh0bmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5leHRuYW1lXG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEVYVFJBQ1RfVFlQRV9SRUdFWFAgPSAvXlxccyooW147XFxzXSopKD86O3xcXHN8JCkvXG52YXIgVEVYVF9UWVBFX1JFR0VYUCA9IC9edGV4dFxcLy9pXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0cy5jaGFyc2V0ID0gY2hhcnNldFxuZXhwb3J0cy5jaGFyc2V0cyA9IHsgbG9va3VwOiBjaGFyc2V0IH1cbmV4cG9ydHMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuZXhwb3J0cy5leHRlbnNpb24gPSBleHRlbnNpb25cbmV4cG9ydHMuZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbClcbmV4cG9ydHMubG9va3VwID0gbG9va3VwXG5leHBvcnRzLnR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucy90eXBlcyBtYXBzXG5wb3B1bGF0ZU1hcHMoZXhwb3J0cy5leHRlbnNpb25zLCBleHBvcnRzLnR5cGVzKVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY2hhcnNldCAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG4gIHZhciBtaW1lID0gbWF0Y2ggJiYgZGJbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAobWltZSAmJiBtaW1lLmNoYXJzZXQpIHtcbiAgICByZXR1cm4gbWltZS5jaGFyc2V0XG4gIH1cblxuICAvLyBkZWZhdWx0IHRleHQvKiB0byB1dGYtOFxuICBpZiAobWF0Y2ggJiYgVEVYVF9UWVBFX1JFR0VYUC50ZXN0KG1hdGNoWzFdKSkge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmdWxsIENvbnRlbnQtVHlwZSBoZWFkZXIgZ2l2ZW4gYSBNSU1FIHR5cGUgb3IgZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlIChzdHIpIHtcbiAgLy8gVE9ETzogc2hvdWxkIHRoaXMgZXZlbiBiZSBpbiB0aGlzIG1vZHVsZT9cbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBtaW1lID0gc3RyLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IGV4cG9ydHMubG9va3VwKHN0cilcbiAgICA6IHN0clxuXG4gIGlmICghbWltZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIGNvbnRlbnQtdHlwZSBvciBvdGhlciBtb2R1bGVcbiAgaWYgKG1pbWUuaW5kZXhPZignY2hhcnNldCcpID09PSAtMSkge1xuICAgIHZhciBjaGFyc2V0ID0gZXhwb3J0cy5jaGFyc2V0KG1pbWUpXG4gICAgaWYgKGNoYXJzZXQpIG1pbWUgKz0gJzsgY2hhcnNldD0nICsgY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gbWltZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBleHRlbnNpb24gKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuXG4gIC8vIGdldCBleHRlbnNpb25zXG4gIHZhciBleHRzID0gbWF0Y2ggJiYgZXhwb3J0cy5leHRlbnNpb25zW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4dHNbMF1cbn1cblxuLyoqXG4gKiBMb29rdXAgdGhlIE1JTUUgdHlwZSBmb3IgYSBmaWxlIHBhdGgvZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBsb29rdXAgKHBhdGgpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gZ2V0IHRoZSBleHRlbnNpb24gKFwiZXh0XCIgb3IgXCIuZXh0XCIgb3IgZnVsbCBwYXRoKVxuICB2YXIgZXh0ZW5zaW9uID0gZXh0bmFtZSgneC4nICsgcGF0aClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zdWJzdHIoMSlcblxuICBpZiAoIWV4dGVuc2lvbikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMudHlwZXNbZXh0ZW5zaW9uXSB8fCBmYWxzZVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zIGFuZCB0eXBlcyBtYXBzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZU1hcHMgKGV4dGVuc2lvbnMsIHR5cGVzKSB7XG4gIC8vIHNvdXJjZSBwcmVmZXJlbmNlIChsZWFzdCAtPiBtb3N0KVxuICB2YXIgcHJlZmVyZW5jZSA9IFsnbmdpbngnLCAnYXBhY2hlJywgdW5kZWZpbmVkLCAnaWFuYSddXG5cbiAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaE1pbWVUeXBlICh0eXBlKSB7XG4gICAgdmFyIG1pbWUgPSBkYlt0eXBlXVxuICAgIHZhciBleHRzID0gbWltZS5leHRlbnNpb25zXG5cbiAgICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBtaW1lIC0+IGV4dGVuc2lvbnNcbiAgICBleHRlbnNpb25zW3R5cGVdID0gZXh0c1xuXG4gICAgLy8gZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBleHRzW2ldXG5cbiAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dKSB7XG4gICAgICAgIHZhciBmcm9tID0gcHJlZmVyZW5jZS5pbmRleE9mKGRiW3R5cGVzW2V4dGVuc2lvbl1dLnNvdXJjZSlcbiAgICAgICAgdmFyIHRvID0gcHJlZmVyZW5jZS5pbmRleE9mKG1pbWUuc291cmNlKVxuXG4gICAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dICE9PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyAmJlxuICAgICAgICAgIChmcm9tID4gdG8gfHwgKGZyb20gPT09IHRvICYmIHR5cGVzW2V4dGVuc2lvbl0uc3Vic3RyKDAsIDEyKSA9PT0gJ2FwcGxpY2F0aW9uLycpKSkge1xuICAgICAgICAgIC8vIHNraXAgdGhlIHJlbWFwcGluZ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHRoZSBleHRlbnNpb24gLT4gbWltZVxuICAgICAgdHlwZXNbZXh0ZW5zaW9uXSA9IHR5cGVcbiAgICB9XG4gIH0pXG59XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oKD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICBpZiAobXMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtcyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgcmV0dXJuIHBsdXJhbChtcywgZCwgJ2RheScpIHx8XG4gICAgcGx1cmFsKG1zLCBoLCAnaG91cicpIHx8XG4gICAgcGx1cmFsKG1zLCBtLCAnbWludXRlJykgfHxcbiAgICBwbHVyYWwobXMsIHMsICdzZWNvbmQnKSB8fFxuICAgIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBuLCBuYW1lKSB7XG4gIGlmIChtcyA8IG4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1zIDwgbiAqIDEuNSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICB9XG4gIHJldHVybiBNYXRoLmNlaWwobXMgLyBuKSArICcgJyArIG5hbWUgKyAncyc7XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgY29udmVydCA9IHJlcXVpcmUoJy4vY29udmVydCcpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vLyBleHBvcnQgY29kZWNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHJpbmdUb1N0cmluZ1R1cGxlczogc3RyaW5nVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvU3RyaW5nOiBzdHJpbmdUdXBsZXNUb1N0cmluZyxcblxuICB0dXBsZXNUb1N0cmluZ1R1cGxlczogdHVwbGVzVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvVHVwbGVzOiBzdHJpbmdUdXBsZXNUb1R1cGxlcyxcblxuICBidWZmZXJUb1R1cGxlczogYnVmZmVyVG9UdXBsZXMsXG4gIHR1cGxlc1RvQnVmZmVyOiB0dXBsZXNUb0J1ZmZlcixcblxuICBidWZmZXJUb1N0cmluZzogYnVmZmVyVG9TdHJpbmcsXG4gIHN0cmluZ1RvQnVmZmVyOiBzdHJpbmdUb0J1ZmZlcixcblxuICBmcm9tU3RyaW5nOiBmcm9tU3RyaW5nLFxuICBmcm9tQnVmZmVyOiBmcm9tQnVmZmVyLFxuICB2YWxpZGF0ZUJ1ZmZlcjogdmFsaWRhdGVCdWZmZXIsXG4gIGlzVmFsaWRCdWZmZXI6IGlzVmFsaWRCdWZmZXIsXG4gIGNsZWFuUGF0aDogY2xlYW5QYXRoLFxuXG4gIFBhcnNlRXJyb3I6IFBhcnNlRXJyb3IsXG4gIHByb3RvRnJvbVR1cGxlOiBwcm90b0Zyb21UdXBsZSxcblxuICBzaXplRm9yQWRkcjogc2l6ZUZvckFkZHJcbn1cblxuLy8gc3RyaW5nIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUb1N0cmluZ1R1cGxlcyAoc3RyKSB7XG4gIGNvbnN0IHR1cGxlcyA9IFtdXG4gIGNvbnN0IHBhcnRzID0gc3RyLnNwbGl0KCcvJykuc2xpY2UoMSkgLy8gc2tpcCBmaXJzdCBlbXB0eSBlbGVtXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEgJiYgcGFydHNbMF0gPT09ICcnKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBmb3IgKGxldCBwID0gMDsgcCA8IHBhcnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW3BdXG4gICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHMocGFydClcblxuICAgIGlmIChwcm90by5zaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbcGFydF0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHArKyAvLyBhZHZhbmNlIGFkZHIgcGFydFxuICAgIGlmIChwID49IHBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgUGFyc2VFcnJvcignaW52YWxpZCBhZGRyZXNzOiAnICsgc3RyKVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3MgYSBwYXRoIHByb3RvLCB0YWtlIHRoZSByZXN0XG4gICAgaWYgKHByb3RvLnBhdGgpIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtcbiAgICAgICAgcGFydCxcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIG5lZWQgdG8gY2hlY2sgZWFjaCBwYXRoIHBhcnQgdG8gc2VlIGlmIGl0J3MgYSBwcm90bz9cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBhbGxvdyBmb3Igb3RoZXIgcHJvdG9jb2xzIHRvIGJlIGFkZGVkIGFmdGVyIGEgdW5peCBwYXRoLFxuICAgICAgICAvLyBob3dldmVyIGl0IHdvdWxkIGhhdmUgaXNzdWVzIGlmIHRoZSBwYXRoIGhhZCBhIHByb3RvY29sIG5hbWUgaW4gdGhlIHBhdGhcbiAgICAgICAgY2xlYW5QYXRoKHBhcnRzLnNsaWNlKHApLmpvaW4oJy8nKSlcbiAgICAgIF0pXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIHR1cGxlcy5wdXNoKFtwYXJ0LCBwYXJ0c1twXV0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IHN0cmluZ1xuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9TdHJpbmcgKHR1cGxlcykge1xuICBjb25zdCBwYXJ0cyA9IFtdXG4gIHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBwYXJ0cy5wdXNoKHByb3RvLm5hbWUpXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICBwYXJ0cy5wdXNoKHR1cFsxXSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNsZWFuUGF0aChwYXJ0cy5qb2luKCcvJykpXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXVxuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9UdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0dXApKSB7XG4gICAgICB0dXAgPSBbdHVwXVxuICAgIH1cbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiBbcHJvdG8uY29kZSwgY29udmVydC50b0J1ZmZlcihwcm90by5jb2RlLCB0dXBbMV0pXVxuICAgIH1cbiAgICByZXR1cm4gW3Byb3RvLmNvZGVdXG4gIH0pXG59XG5cbi8vIFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXSAtPiBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXVxuZnVuY3Rpb24gdHVwbGVzVG9TdHJpbmdUdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvU3RyaW5nKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXSAtPiBCdWZmZXJcbmZ1bmN0aW9uIHR1cGxlc1RvQnVmZmVyICh0dXBsZXMpIHtcbiAgcmV0dXJuIGZyb21CdWZmZXIoQnVmZmVyLmNvbmNhdCh0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUocHJvdG8uY29kZSkpXG5cbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgdHVwWzFdXSkgLy8gYWRkIGFkZHJlc3MgYnVmZmVyXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZlxuICB9KSkpXG59XG5cbmZ1bmN0aW9uIHNpemVGb3JBZGRyIChwLCBhZGRyKSB7XG4gIGlmIChwLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIHAuc2l6ZSAvIDhcbiAgfSBlbHNlIGlmIChwLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNpemUgPSB2YXJpbnQuZGVjb2RlKGFkZHIpXG4gICAgcmV0dXJuIHNpemUgKyB2YXJpbnQuZGVjb2RlLmJ5dGVzXG4gIH1cbn1cblxuLy8gQnVmZmVyIC0+IFtbaW50IGNvZGUsIEJ1ZmZlciBdLi4uIF1cbmZ1bmN0aW9uIGJ1ZmZlclRvVHVwbGVzIChidWYpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZiwgaSlcbiAgICBjb25zdCBuID0gdmFyaW50LmRlY29kZS5ieXRlc1xuXG4gICAgY29uc3QgcCA9IHByb3RvY29scyhjb2RlKVxuXG4gICAgY29uc3Qgc2l6ZSA9IHNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgdHVwbGVzLnB1c2goW2NvZGVdKVxuICAgICAgaSArPSBuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGFkZHIgPSBidWYuc2xpY2UoaSArIG4sIGkgKyBuICsgc2l6ZSlcblxuICAgIGkgKz0gKHNpemUgKyBuKVxuXG4gICAgaWYgKGkgPiBidWYubGVuZ3RoKSB7IC8vIGRpZCBub3QgZW5kIF9leGFjdGx5XyBhdCBidWZmZXIubGVuZ3RoXG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MgYnVmZmVyOiAnICsgYnVmLnRvU3RyaW5nKCdoZXgnKSlcbiAgICB9XG5cbiAgICAvLyBvaywgdHVwbGUgc2VlbXMgZ29vZC5cbiAgICB0dXBsZXMucHVzaChbY29kZSwgYWRkcl0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIEJ1ZmZlciAtPiBTdHJpbmdcbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nIChidWYpIHtcbiAgY29uc3QgYSA9IGJ1ZmZlclRvVHVwbGVzKGJ1ZilcbiAgY29uc3QgYiA9IHR1cGxlc1RvU3RyaW5nVHVwbGVzKGEpXG4gIHJldHVybiBzdHJpbmdUdXBsZXNUb1N0cmluZyhiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlciAoc3RyKSB7XG4gIHN0ciA9IGNsZWFuUGF0aChzdHIpXG4gIGNvbnN0IGEgPSBzdHJpbmdUb1N0cmluZ1R1cGxlcyhzdHIpXG4gIGNvbnN0IGIgPSBzdHJpbmdUdXBsZXNUb1R1cGxlcyhhKVxuXG4gIHJldHVybiB0dXBsZXNUb0J1ZmZlcihiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0cmluZ1RvQnVmZmVyKHN0cilcbn1cblxuLy8gQnVmZmVyIC0+IEJ1ZmZlclxuZnVuY3Rpb24gZnJvbUJ1ZmZlciAoYnVmKSB7XG4gIGNvbnN0IGVyciA9IHZhbGlkYXRlQnVmZmVyKGJ1ZilcbiAgaWYgKGVycikgdGhyb3cgZXJyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWYpIC8vIGNvcHlcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCdWZmZXIgKGJ1Zikge1xuICB0cnkge1xuICAgIGJ1ZmZlclRvVHVwbGVzKGJ1ZikgLy8gdHJ5IHRvIHBhcnNlLiB3aWxsIHRocm93IGlmIGJyZWFrc1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZXJyXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZEJ1ZmZlciAoYnVmKSB7XG4gIHJldHVybiB2YWxpZGF0ZUJ1ZmZlcihidWYpID09PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChzdHIpIHtcbiAgcmV0dXJuICcvJyArIHN0ci50cmltKCkuc3BsaXQoJy8nKS5maWx0ZXIoYSA9PiBhKS5qb2luKCcvJylcbn1cblxuZnVuY3Rpb24gUGFyc2VFcnJvciAoc3RyKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0Vycm9yIHBhcnNpbmcgYWRkcmVzczogJyArIHN0cilcbn1cblxuZnVuY3Rpb24gcHJvdG9Gcm9tVHVwbGUgKHR1cCkge1xuICBjb25zdCBwcm90byA9IHByb3RvY29scyh0dXBbMF0pXG4gIHJldHVybiBwcm90b1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGlwID0gcmVxdWlyZSgnaXAnKVxuY29uc3QgaXNJcCA9IHJlcXVpcmUoJ2lzLWlwJylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnaGktYmFzZTMyJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0gQ29udmVydFxuXG4vLyBjb252ZXJ0cyAoc2VyaWFsaXplcykgYWRkcmVzc2VzXG5mdW5jdGlvbiBDb252ZXJ0IChwcm90bywgYSkge1xuICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBDb252ZXJ0LnRvU3RyaW5nKHByb3RvLCBhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBDb252ZXJ0LnRvQnVmZmVyKHByb3RvLCBhKVxuICB9XG59XG5cbkNvbnZlcnQudG9TdHJpbmcgPSBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcgKHByb3RvLCBidWYpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgIGNhc2UgNDE6IC8vIGlwdjZcbiAgICAgIHJldHVybiBidWYyaXAoYnVmKVxuXG4gICAgY2FzZSA2OiAvLyB0Y3BcbiAgICBjYXNlIDI3MzogLy8gdWRwXG4gICAgY2FzZSAzMzogLy8gZGNjcFxuICAgIGNhc2UgMTMyOiAvLyBzY3RwXG4gICAgICByZXR1cm4gYnVmMnBvcnQoYnVmKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBidWYyc3RyKGJ1ZilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gYnVmMm1oKGJ1ZilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IHRvIGhleFxuICB9XG59XG5cbkNvbnZlcnQudG9CdWZmZXIgPSBmdW5jdGlvbiBjb252ZXJ0VG9CdWZmZXIgKHByb3RvLCBzdHIpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBwb3J0MmJ1ZihwYXJzZUludChzdHIsIDEwKSlcblxuICAgIGNhc2UgNTM6IC8vIGRuc1xuICAgIGNhc2UgNTQ6IC8vIGRuczRcbiAgICBjYXNlIDU1OiAvLyBkbnM2XG4gICAgY2FzZSA1NjogLy8gZG5zYWRkclxuICAgIGNhc2UgNDAwOiAvLyB1bml4XG4gICAgICByZXR1cm4gc3RyMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDQyMTogLy8gaXBmc1xuICAgICAgcmV0dXJuIG1oMmJ1ZihzdHIpXG4gICAgY2FzZSA0NDQ6IC8vIG9uaW9uXG4gICAgICByZXR1cm4gb25pb24yYnVmKHN0cilcbiAgICBjYXNlIDQ0NTogLy8gb25pb24zXG4gICAgICByZXR1cm4gb25pb24zMmJ1ZihzdHIpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsICdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IGZyb20gaGV4XG4gIH1cbn1cblxuZnVuY3Rpb24gaXAyYnVmIChpcFN0cmluZykge1xuICBpZiAoIWlzSXAoaXBTdHJpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlwIGFkZHJlc3MnKVxuICB9XG4gIHJldHVybiBpcC50b0J1ZmZlcihpcFN0cmluZylcbn1cblxuZnVuY3Rpb24gYnVmMmlwIChpcEJ1ZmYpIHtcbiAgY29uc3QgaXBTdHJpbmcgPSBpcC50b1N0cmluZyhpcEJ1ZmYpXG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwU3RyaW5nXG59XG5cbmZ1bmN0aW9uIHBvcnQyYnVmIChwb3J0KSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKVxuICBidWYud3JpdGVVSW50MTZCRShwb3J0LCAwKVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGJ1ZjJwb3J0IChidWYpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoMClcbn1cblxuZnVuY3Rpb24gc3RyMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0cilcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmLmxlbmd0aCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtzaXplLCBidWZdKVxufVxuXG5mdW5jdGlvbiBidWYyc3RyIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYnVmLmxlbmd0aCAhPT0gc2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb25zaXN0ZW50IGxlbmd0aHMnKVxuICB9XG5cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIG1oMmJ1ZiAoaGFzaCkge1xuICAvLyB0aGUgYWRkcmVzcyBpcyBhIHZhcmludCBwcmVmaXhlZCBtdWx0aWhhc2ggc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gIGNvbnN0IG1oID0gbmV3IENJRChoYXNoKS5tdWx0aWhhc2hcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobWgubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIG1oXSlcbn1cblxuZnVuY3Rpb24gYnVmMm1oIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBjb25zdCBhZGRyZXNzID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoYWRkcmVzcylcbn1cblxuZnVuY3Rpb24gb25pb24yYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gMTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uIGFkZHJlc3MuJylcbiAgfVxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShiYXNlMzIuZGVjb2RlLmFzQnl0ZXMoYWRkclswXS50b1VwcGVyQ2FzZSgpKSlcblxuICAvLyBvbmlvbiBwb3J0IG51bWJlclxuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoYWRkclsxXSwgMTApXG4gIGlmIChwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgbnVtYmVyIGlzIG5vdCBpbiByYW5nZSgxLCA2NTUzNiknKVxuICB9XG4gIGNvbnN0IHBvcnRCdWYgPSBwb3J0MmJ1Zihwb3J0KVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBwb3J0QnVmXSlcbn1cblxuZnVuY3Rpb24gb25pb24zMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGFkZHIgPSBzdHIuc3BsaXQoJzonKVxuICBpZiAoYWRkci5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkciArICcgZG9lcyBub3QgY29udGFpbiBhIHBvcnQgbnVtYmVyJylcbiAgfVxuICBpZiAoYWRkclswXS5sZW5ndGggIT09IDU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHJbMF0gKyAnIG5vdCBhIFRvciBvbmlvbjMgYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBidWYyb25pb24gKGJ1Zikge1xuICBjb25zdCBhZGRyQnl0ZXMgPSBidWYuc2xpY2UoMCwgYnVmLmxlbmd0aCAtIDIpXG4gIGNvbnN0IHBvcnRCeXRlcyA9IGJ1Zi5zbGljZShidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgYWRkciA9IGJhc2UzMi5lbmNvZGUoYWRkckJ5dGVzKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHBvcnQgPSBidWYycG9ydChwb3J0Qnl0ZXMpXG4gIHJldHVybiBhZGRyICsgJzonICsgcG9ydFxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvZGVjID0gcmVxdWlyZSgnLi9jb2RlYycpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCB3aXRoSXMgPSByZXF1aXJlKCdjbGFzcy1pcycpXG5jb25zdCBpbnNwZWN0ID0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKVxuXG4vKipcbiAqIENyZWF0ZXMgYSBbbXVsdGlhZGRyXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkcikgZnJvbVxuICogYSBCdWZmZXIsIFN0cmluZyBvciBhbm90aGVyIE11bHRpYWRkciBpbnN0YW5jZVxuICogcHVibGljIGtleS5cbiAqIEBjbGFzcyBNdWx0aWFkZHJcbiAqIEBwYXJhbSB7KFN0cmluZ3xCdWZmZXJ8TXVsdGlhZGRyKX0gYWRkciAtIElmIFN0cmluZyBvciBCdWZmZXIsIG5lZWRzIHRvIGFkaGVyZVxuICogdG8gdGhlIGFkZHJlc3MgZm9ybWF0IG9mIGEgW211bHRpYWRkcl0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIjc3RyaW5nLWZvcm1hdClcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICovXG5jb25zdCBNdWx0aWFkZHIgPSB3aXRoSXMucHJvdG8oZnVuY3Rpb24gKGFkZHIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE11bHRpYWRkcikpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpYWRkcihhZGRyKVxuICB9XG5cbiAgLy8gZGVmYXVsdFxuICBpZiAoYWRkciA9PSBudWxsKSB7XG4gICAgYWRkciA9ICcnXG4gIH1cblxuICBpZiAoYWRkciBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9IC0gVGhlIHJhdyBieXRlcyByZXByZXNlbnRpbmcgdGhpcyBtdWx0aWFkZHJlc3NcbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21CdWZmZXIoYWRkcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRkciA9PT0gJ3N0cmluZycgfHwgYWRkciBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIGlmIChhZGRyLmxlbmd0aCA+IDAgJiYgYWRkci5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWFkZHIgXCIke2FkZHJ9XCIgbXVzdCBzdGFydCB3aXRoIGEgXCIvXCJgKVxuICAgIH1cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21TdHJpbmcoYWRkcilcbiAgfSBlbHNlIGlmIChhZGRyLmJ1ZmZlciAmJiBhZGRyLnByb3RvcyAmJiBhZGRyLnByb3RvQ29kZXMpIHsgLy8gTXVsdGlhZGRyXG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tQnVmZmVyKGFkZHIuYnVmZmVyKSAvLyB2YWxpZGF0ZSArIGNvcHkgYnVmZmVyXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhZGRyIG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgb3IgYW5vdGhlciBNdWx0aWFkZHInKVxuICB9XG59LCB7IGNsYXNzTmFtZTogJ011bHRpYWRkcicsIHN5bWJvbE5hbWU6ICdAbXVsdGlmb3JtYXRzL2pzLW11bHRpYWRkci9tdWx0aWFkZHInIH0pXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBTdHJpbmdcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIEpTT04gZW5jb2RlZCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIEpTT04uc3RyaW5naWZ5KE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKSlcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b0pTT04gPSBNdWx0aWFkZHIucHJvdG90eXBlLnRvU3RyaW5nXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBjb252aW5pZW50IG9wdGlvbnMgb2JqZWN0IHRvIGJlIHVzZWQgd2l0aCBuZXQuY3JlYXRlQ29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIHt7ZmFtaWx5OiBTdHJpbmcsIGhvc3Q6IFN0cmluZywgdHJhbnNwb3J0OiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnRvT3B0aW9ucygpXG4gKiAvLyB7IGZhbWlseTogJ2lwdjQnLCBob3N0OiAnMTI3LjAuMC4xJywgdHJhbnNwb3J0OiAndGNwJywgcG9ydDogNDAwMSB9XG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9PcHRpb25zID0gZnVuY3Rpb24gdG9PcHRpb25zICgpIHtcbiAgY29uc3Qgb3B0cyA9IHt9XG4gIGNvbnN0IHBhcnNlZCA9IHRoaXMudG9TdHJpbmcoKS5zcGxpdCgnLycpXG4gIG9wdHMuZmFtaWx5ID0gcGFyc2VkWzFdID09PSAnaXA0JyA/ICdpcHY0JyA6ICdpcHY2J1xuICBvcHRzLmhvc3QgPSBwYXJzZWRbMl1cbiAgb3B0cy50cmFuc3BvcnQgPSBwYXJzZWRbM11cbiAgb3B0cy5wb3J0ID0gcGFyc2VJbnQocGFyc2VkWzRdKVxuICByZXR1cm4gb3B0c1xufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogRm9yIHBvc3QgTm9kZS5qcyB2MTAuMC4wLlxuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDA3OV9jdXN0b21faW5zcGVjdGlvbl9mdW5jdGlvbl9vbl9vYmplY3RzX3ZpYV9pbnNwZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykpXG4gKiAvLyAnPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+J1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlW2luc3BlY3RdID0gZnVuY3Rpb24gaW5zcGVjdEN1c3RvbSAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBGYWxsYmFjayBmb3IgcHJlIE5vZGUuanMgdjEwLjAuMC5cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZGVwcmVjYXRpb25zLmh0bWwjZGVwcmVjYXRpb25zX2RlcDAwNzlfY3VzdG9tX2luc3BlY3Rpb25fZnVuY3Rpb25fb25fb2JqZWN0c192aWFfaW5zcGVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLmluc3BlY3QoKVxuICogLy8gJzxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPidcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJvdG9jb2xzIHRoZSBNdWx0aWFkZHIgaXMgZGVmaW5lZCB3aXRoLCBhcyBhbiBhcnJheSBvZiBvYmplY3RzLCBpblxuICogbGVmdC10by1yaWdodCBvcmRlci4gRWFjaCBvYmplY3QgY29udGFpbnMgdGhlIHByb3RvY29sIGNvZGUsIHByb3RvY29sIG5hbWUsXG4gKiBhbmQgdGhlIHNpemUgb2YgaXRzIGFkZHJlc3Mgc3BhY2UgaW4gYml0cy5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybnMge0FycmF5LjxPYmplY3Q+fSBwcm90b2NvbHMgLSBBbGwgdGhlIHByb3RvY29scyB0aGUgYWRkcmVzcyBpcyBjb21wb3NlZCBvZlxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uY29kZVxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uc2l6ZVxuICogQHJldHVybnMge1N0cmluZ30gcHJvdG9jb2xzW10ubmFtZVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b3MoKVxuICogLy8gWyB7IGNvZGU6IDQsIHNpemU6IDMyLCBuYW1lOiAnaXA0JyB9LFxuICogLy8gICB7IGNvZGU6IDYsIHNpemU6IDE2LCBuYW1lOiAndGNwJyB9IF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b3MgPSBmdW5jdGlvbiBwcm90b3MgKCkge1xuICByZXR1cm4gdGhpcy5wcm90b0NvZGVzKCkubWFwKGNvZGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgcHJvdG9jb2xzKGNvZGUpKSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2RlcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48TnVtYmVyPn0gcHJvdG9jb2wgY29kZXNcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9Db2RlcygpXG4gKiAvLyBbIDQsIDYgXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvQ29kZXMgPSBmdW5jdGlvbiBwcm90b0NvZGVzICgpIHtcbiAgY29uc3QgY29kZXMgPSBbXVxuICBjb25zdCBidWYgPSB0aGlzLmJ1ZmZlclxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG4gICAgY29uc3Qgc2l6ZSA9IGNvZGVjLnNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpICs9IChzaXplICsgbilcbiAgICBjb2Rlcy5wdXNoKGNvZGUpXG4gIH1cblxuICByZXR1cm4gY29kZXNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxTdHJpbmc+fSBwcm90b2NvbCBuYW1lc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b05hbWVzKClcbiAqIC8vIFsgJ2lwNCcsICd0Y3AnIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b05hbWVzID0gZnVuY3Rpb24gcHJvdG9OYW1lcyAoKSB7XG4gIHJldHVybiB0aGlzLnByb3RvcygpLm1hcChwcm90byA9PiBwcm90by5uYW1lKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4ge0J1ZmZlcn0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikudHVwbGVzKClcbiAqIC8vIFsgWyA0LCA8QnVmZmVyIDdmIDAwIDAwIDAxPiBdLCBbIDYsIDxCdWZmZXIgMGYgYTE+IF0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnR1cGxlcyA9IGZ1bmN0aW9uIHR1cGxlcyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1R1cGxlcyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2Ygc3RyaW5nL251bWJlciBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4geyhTdHJpbmd8TnVtYmVyKX0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikuc3RyaW5nVHVwbGVzKClcbiAqIC8vIFsgWyA0LCAnMTI3LjAuMC4xJyBdLCBbIDYsIDQwMDEgXSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuc3RyaW5nVHVwbGVzID0gZnVuY3Rpb24gc3RyaW5nVHVwbGVzICgpIHtcbiAgY29uc3QgdCA9IGNvZGVjLmJ1ZmZlclRvVHVwbGVzKHRoaXMuYnVmZmVyKVxuICByZXR1cm4gY29kZWMudHVwbGVzVG9TdHJpbmdUdXBsZXModClcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYSBNdWx0aWFkZHIgaW4gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byBhZGQgaW50byB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5lbmNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGVuY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBNdWx0aWFkZHIoYWRkcilcbiAgcmV0dXJuIE11bHRpYWRkcih0aGlzLnRvU3RyaW5nKCkgKyBhZGRyLnRvU3RyaW5nKCkpXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGVzIGEgTXVsdGlhZGRyIGZyb20gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byByZW1vdmUgZnJvbSB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLmRlY2Fwc3VsYXRlKG1oMikudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvOC44LjguOC90Y3AvMTA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGRlY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBhZGRyLnRvU3RyaW5nKClcbiAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKVxuICBjb25zdCBpID0gcy5sYXN0SW5kZXhPZihhZGRyKVxuICBpZiAoaSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgJyArIHRoaXMgKyAnIGRvZXMgbm90IGNvbnRhaW4gc3ViYWRkcmVzczogJyArIGFkZHIpXG4gIH1cbiAgcmV0dXJuIE11bHRpYWRkcihzLnNsaWNlKDAsIGkpKVxufVxuXG4vKipcbiAqIEEgbW9yZSByZWxpYWJsZSB2ZXJzaW9uIG9mIGBkZWNhcHN1bGF0ZWAgaWYgeW91IGFyZSB0YXJnZXRpbmcgYVxuICogc3BlY2lmaWMgY29kZSwgc3VjaCBhcyA0MjEgKHRoZSBgcDJwYCBwcm90b2NvbCBjb2RlKS4gVGhlIGxhc3QgaW5kZXggb2YgdGhlIGNvZGVcbiAqIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBgTXVsdGlhZGRyYCwgYW5kIGEgbmV3IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgY29kZSBpcyBub3QgcHJlc2VudCwgdGhlIG9yaWdpbmFsIGBNdWx0aWFkZHJgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBwcm90b2NvbCB0byBkZWNhcHN1bGF0ZSBmcm9tIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgYWRkciA9IE11bHRpYWRkcignL2lwNC8wLjAuMC4wL3RjcC84MDgwL3AycC9RbWNncHN5V2dIOFk4YWpKejFDdTcyS25TNXVvMkFhMkxwelU3a2luU3VwTktDJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwMC4uLiAtIC9pcDQvMC4wLjAuMC90Y3AvODA4MC9wMnAvUW1jZ3BzeVdnSDhZOGFqSnoxQ3U3MktuUzV1bzJBYTJMcHpVN2tpblN1cE5LQz5cbiAqXG4gKiBhZGRyLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzAuMC4wLjAvdGNwLzgwODAnXG4gKlxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCcpLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZUNvZGUgPSBmdW5jdGlvbiBkZWNhcHN1bGF0ZUNvZGUgKGNvZGUpIHtcbiAgY29uc3QgdHVwbGVzID0gdGhpcy50dXBsZXMoKVxuICBmb3IgKGxldCBpID0gdHVwbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHR1cGxlc1tpXVswXSA9PT0gY29kZSkge1xuICAgICAgcmV0dXJuIE11bHRpYWRkcihjb2RlYy50dXBsZXNUb0J1ZmZlcih0dXBsZXMuc2xpY2UoMCwgaSkpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBlZXJJZCBpZiB0aGUgbXVsdGlhZGRyIGNvbnRhaW5zIG9uZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSBwZWVySWQgLSBUaGUgaWQgb2YgdGhlIHBlZXIgb3IgbnVsbCBpZiBpbnZhbGlkIG9yIG1pc3NpbmcgZnJvbSB0aGUgbWFcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MC9pcGZzL1FtVmFsaWRCYXNlNThzdHJpbmcnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwZnMvUW1WYWxpZEJhc2U1OHN0cmluZz5cbiAqXG4gKiAvLyBzaG91bGQgcmV0dXJuIFFtVmFsaWRCYXNlNThzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwZWVySWQgPSBtaDEuZ2V0UGVlcklkKClcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5nZXRQZWVySWQgPSBmdW5jdGlvbiBnZXRQZWVySWQgKCkge1xuICBsZXQgYjU4c3RyID0gbnVsbFxuICB0cnkge1xuICAgIGNvbnN0IHR1cGxlcyA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgaWYgKHR1cGxlWzBdID09PSBwcm90b2NvbHMubmFtZXMuaXBmcy5jb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEdldCB0aGUgbGFzdCBpZFxuICAgIGI1OHN0ciA9IHR1cGxlcy5wb3AoKVsxXVxuICAgIC8vIEdldCBtdWx0aWhhc2gsIHVud3JhcCBmcm9tIENJRCBpZiBuZWVkZWRcbiAgICBiNThzdHIgPSBiczU4LmVuY29kZShuZXcgQ0lEKGI1OHN0cikubXVsdGloYXNoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgYjU4c3RyID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGI1OHN0clxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBhdGggaWYgdGhlIG11bHRpYWRkciBjb250YWlucyBvbmVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd8bnVsbH0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBtdWx0aWFkZHIsIG9yIG51bGwgaWYgbm8gcGF0aCBwcm90b2NvbCBpcyBwcmVzZW50XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAvdW5peC90bXAvcDJwLnNvY2snKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL3VuaXgvdG1wL3AycC5zb2NrPlxuICpcbiAqIC8vIHNob3VsZCByZXR1cm4gdXRmOCBzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwYXRoID0gbWgxLmdldFBhdGgoKVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoICgpIHtcbiAgbGV0IHBhdGggPSBudWxsXG4gIHRyeSB7XG4gICAgcGF0aCA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHModHVwbGVbMF0pXG4gICAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pWzBdWzFdXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXRoID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHBhdGhcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdHdvIE11bHRpYWRkcnMgYXJlIHRoZSBzYW1lXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge0Jvb2x9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgxLmVxdWFscyhtaDEpXG4gKiAvLyB0cnVlXG4gKlxuICogbWgxLmVxdWFscyhtaDIpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYWRkcikge1xuICByZXR1cm4gdGhpcy5idWZmZXIuZXF1YWxzKGFkZHIuYnVmZmVyKVxufVxuXG4vKipcbiAqIEdldHMgYSBNdWx0aWFkZHJzIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3QuIE5vdGUgdGhhdCBwcm90b2NvbCBpbmZvcm1hdGlvblxuICogaXMgbGVmdCBvdXQ6IGluIE5vZGUgKGFuZCBtb3N0IG5ldHdvcmsgc3lzdGVtcykgdGhlIHByb3RvY29sIGlzIHVua25vd2FibGVcbiAqIGdpdmVuIG9ubHkgdGhlIGFkZHJlc3MuXG4gKlxuICogSGFzIHRvIGJlIGEgVGhpbldhaXN0IEFkZHJlc3MsIG90aGVyd2lzZSB0aHJvd3MgZXJyb3JcbiAqXG4gKiBAcmV0dXJucyB7e2ZhbWlseTogU3RyaW5nLCBhZGRyZXNzOiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIE11bHRpYWRkciBpcyBub3QgYSBUaGluIFdhaXN0IGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykubm9kZUFkZHJlc3MoKVxuICogLy8ge2ZhbWlseTogJ0lQdjQnLCBhZGRyZXNzOiAnMTI3LjAuMC4xJywgcG9ydDogJzQwMDEnfVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLm5vZGVBZGRyZXNzID0gZnVuY3Rpb24gbm9kZUFkZHJlc3MgKCkge1xuICBjb25zdCBjb2RlcyA9IHRoaXMucHJvdG9Db2RlcygpXG4gIGNvbnN0IG5hbWVzID0gdGhpcy5wcm90b05hbWVzKClcbiAgY29uc3QgcGFydHMgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJy8nKS5zbGljZSgxKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWFkZHIgbXVzdCBoYXZlIGEgdmFsaWQgZm9ybWF0OiBcIi97aXA0LCBpcDYsIGRuczQsIGRuczZ9L3thZGRyZXNzfS97dGNwLCB1ZHB9L3twb3J0fVwiLicpXG4gIH0gZWxzZSBpZiAoY29kZXNbMF0gIT09IDQgJiYgY29kZXNbMF0gIT09IDQxICYmIGNvZGVzWzBdICE9PSA1NCAmJiBjb2Rlc1swXSAhPT0gNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1swXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIGZhbWlseSBuYW1lOiBcIntpcDQsIGlwNiwgZG5zNCwgZG5zNn1cIi5gKVxuICB9IGVsc2UgaWYgKHBhcnRzWzJdICE9PSAndGNwJyAmJiBwYXJ0c1syXSAhPT0gJ3VkcCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1sxXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIHRyYW5zcG9ydCBwcm90b2NvbDogXCJ7dGNwLCB1ZHB9XCIuYClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmFtaWx5OiAoY29kZXNbMF0gPT09IDQxIHx8IGNvZGVzWzBdID09PSA1NSkgPyA2IDogNCxcbiAgICBhZGRyZXNzOiBwYXJ0c1sxXSwgLy8gaXAgYWRkclxuICAgIHBvcnQ6IHBhcnNlSW50KHBhcnRzWzNdKSAvLyB0Y3Agb3IgdWRwIHBvcnRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBNdWx0aWFkZHIgZnJvbSBhIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3tmYW1pbHk6IFN0cmluZywgYWRkcmVzczogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fSBhZGRyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHJhbnNwb3J0XG4gKiBAcmV0dXJucyB7TXVsdGlhZGRyfSBtdWx0aWFkZHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgYWRkciBpcyBub3QgdHJ1dGh5XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIHRyYW5zcG9ydCBpcyBub3QgdHJ1dGh5XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyLmZyb21Ob2RlQWRkcmVzcyh7YWRkcmVzczogJzEyNy4wLjAuMScsIHBvcnQ6ICc0MDAxJ30sICd0Y3AnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKi9cbk11bHRpYWRkci5mcm9tTm9kZUFkZHJlc3MgPSBmdW5jdGlvbiBmcm9tTm9kZUFkZHJlc3MgKGFkZHIsIHRyYW5zcG9ydCkge1xuICBpZiAoIWFkZHIpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgbm9kZSBhZGRyZXNzIG9iamVjdCcpXG4gIGlmICghdHJhbnNwb3J0KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIHRyYW5zcG9ydCBwcm90b2NvbCcpXG4gIGNvbnN0IGlwID0gKGFkZHIuZmFtaWx5ID09PSAnSVB2NicpID8gJ2lwNicgOiAnaXA0J1xuICByZXR1cm4gTXVsdGlhZGRyKCcvJyArIFtpcCwgYWRkci5hZGRyZXNzLCB0cmFuc3BvcnQsIGFkZHIucG9ydF0uam9pbignLycpKVxufVxuXG4vLyBUT0RPIGZpbmQgYSBiZXR0ZXIgZXhhbXBsZSwgbm90IHN1cmUgYWJvdXQgaXQncyBnb29kIGVub3VnaFxuLyoqXG4gKiBSZXR1cm5zIGlmIGEgTXVsdGlhZGRyIGlzIGEgVGhpbiBXYWlzdCBhZGRyZXNzIG9yIG5vdC5cbiAqXG4gKiBUaGluIFdhaXN0IGlzIGlmIGEgTXVsdGlhZGRyIGFkaGVyZXMgdG8gdGhlIHN0YW5kYXJkIGNvbWJpbmF0aW9uIG9mOlxuICpcbiAqIGB7SVB2NCwgSVB2Nn0ve1RDUCwgVURQfWBcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gW2FkZHJdIC0gRGVmYXVsdHMgdG8gdXNpbmcgYHRoaXNgIGluc3RhbmNlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNUaGluV2Fpc3RBZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxPlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMTA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMS9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDE+XG4gKiBtaDEuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIHRydWVcbiAqIG1oMi5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gdHJ1ZVxuICogbWgzLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmlzVGhpbldhaXN0QWRkcmVzcyA9IGZ1bmN0aW9uIGlzVGhpbldhaXN0QWRkcmVzcyAoYWRkcikge1xuICBjb25zdCBwcm90b3MgPSAoYWRkciB8fCB0aGlzKS5wcm90b3MoKVxuXG4gIGlmIChwcm90b3MubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocHJvdG9zWzBdLmNvZGUgIT09IDQgJiYgcHJvdG9zWzBdLmNvZGUgIT09IDQxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKHByb3Rvc1sxXS5jb2RlICE9PSA2ICYmIHByb3Rvc1sxXS5jb2RlICE9PSAyNzMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIE9iamVjdCBjb250YWluaW5nIHRhYmxlLCBuYW1lcyBhbmQgY29kZXMgb2YgYWxsIHN1cHBvcnRlZCBwcm90b2NvbHMuXG4gKiBUbyBnZXQgdGhlIHByb3RvY29sIHZhbHVlcyBmcm9tIGEgTXVsdGlhZGRyLCB5b3UgY2FuIHVzZVxuICogW2AucHJvdG9zKClgXSgjbXVsdGlhZGRycHJvdG9zKSxcbiAqIFtgLnByb3RvQ29kZXMoKWBdKCNtdWx0aWFkZHJwcm90b2NvZGVzKSBvclxuICogW2AucHJvdG9OYW1lcygpYF0oI211bHRpYWRkcnByb3RvbmFtZXMpXG4gKlxuICogQGluc3RhbmNlXG4gKiBAcmV0dXJucyB7e3RhYmxlOiBBcnJheSwgbmFtZXM6IE9iamVjdCwgY29kZXM6IE9iamVjdH19XG4gKlxuICovXG5NdWx0aWFkZHIucHJvdG9jb2xzID0gcHJvdG9jb2xzXG5cbi8qKlxuICogUmV0dXJucyBpZiBzb21ldGhpbmcgaXMgYSBNdWx0aWFkZHIgdGhhdCBpcyBhIG5hbWVcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7Qm9vbH0gaXNOYW1lXG4gKi9cbk11bHRpYWRkci5pc05hbWUgPSBmdW5jdGlvbiBpc05hbWUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGlmIGEgcGFydCBvZiB0aGUgbXVsdGlhZGRyIGlzIHJlc29sdmFibGUsIHRoZW4gcmV0dXJuIHRydWVcbiAgcmV0dXJuIGFkZHIucHJvdG9zKCkuc29tZSgocHJvdG8pID0+IHByb3RvLnJlc29sdmFibGUpXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtdWx0aWFkZHJzLCBieSByZXNvbHZpbmcgdGhlIG11bHRpYWRkciB0aGF0IGlzIGEgbmFtZVxuICpcbiAqIEBhc3luY1xuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcltdfVxuICovXG5NdWx0aWFkZHIucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikgfHwgIU11bHRpYWRkci5pc05hbWUoYWRkcikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoJ25vdCBhIHZhbGlkIG5hbWUnKSlcbiAgfVxuXG4gIC8qXG4gICAqIE5lZWRzIG1vcmUgY29uc2lkZXJhdGlvbiBmcm9tIHNwZWMgZGVzaWduOlxuICAgKiAgIC0gd2hhdCB0byByZXR1cm5cbiAgICogICAtIGhvdyB0byBhY2hpZXZlIGl0IGluIHRoZSBicm93c2VyP1xuICAgKi9cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkIHlldCcpKVxufVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBNdWx0aWFkZHJcbiIsIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBQcm90b2NvbHMgKHByb3RvKSB7XG4gIGlmICh0eXBlb2YgKHByb3RvKSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoUHJvdG9jb2xzLmNvZGVzW3Byb3RvXSkge1xuICAgICAgcmV0dXJuIFByb3RvY29scy5jb2Rlc1twcm90b11cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByb3RvY29sIHdpdGggY29kZTogJyArIHByb3RvKVxuICB9IGVsc2UgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnc3RyaW5nJyB8fCBwcm90byBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIGlmIChQcm90b2NvbHMubmFtZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLm5hbWVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBuYW1lOiAnICsgcHJvdG8pXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJvdG9jb2wgaWQgdHlwZTogJyArIHByb3RvKVxufVxuXG5jb25zdCBWID0gLTFcblByb3RvY29scy5sZW5ndGhQcmVmaXhlZFZhclNpemUgPSBWXG5Qcm90b2NvbHMuViA9IFZcblxuUHJvdG9jb2xzLnRhYmxlID0gW1xuICBbNCwgMzIsICdpcDQnXSxcbiAgWzYsIDE2LCAndGNwJ10sXG4gIFszMywgMTYsICdkY2NwJ10sXG4gIFs0MSwgMTI4LCAnaXA2J10sXG4gIFs0MiwgViwgJ2lwNnpvbmUnXSxcbiAgWzUzLCBWLCAnZG5zJywgJ3Jlc29sdmFibGUnXSxcbiAgWzU0LCBWLCAnZG5zNCcsICdyZXNvbHZhYmxlJ10sXG4gIFs1NSwgViwgJ2RuczYnLCAncmVzb2x2YWJsZSddLFxuICBbNTYsIFYsICdkbnNhZGRyJywgJ3Jlc29sdmFibGUnXSxcbiAgWzEzMiwgMTYsICdzY3RwJ10sXG4gIFsyNzMsIDE2LCAndWRwJ10sXG4gIFsyNzUsIDAsICdwMnAtd2VicnRjLXN0YXInXSxcbiAgWzI3NiwgMCwgJ3AycC13ZWJydGMtZGlyZWN0J10sXG4gIFsyNzcsIDAsICdwMnAtc3RhcmR1c3QnXSxcbiAgWzI5MCwgMCwgJ3AycC1jaXJjdWl0J10sXG4gIFszMDEsIDAsICd1ZHQnXSxcbiAgWzMwMiwgMCwgJ3V0cCddLFxuICBbNDAwLCBWLCAndW5peCcsIGZhbHNlLCAncGF0aCddLFxuICAvLyBgaXBmc2AgaXMgYWRkZWQgYmVmb3JlIGBwMnBgIGZvciBsZWdhY3kgc3VwcG9ydC5cbiAgLy8gQWxsIHRleHQgcmVwcmVzZW50YXRpb25zIHdpbGwgZGVmYXVsdCB0byBgcDJwYCwgYnV0IGBpcGZzYCB3aWxsXG4gIC8vIHN0aWxsIGJlIHN1cHBvcnRlZFxuICBbNDIxLCBWLCAnaXBmcyddLFxuICAvLyBgcDJwYCBpcyB0aGUgcHJlZmVycmVkIG5hbWUgZm9yIDQyMSwgYW5kIGlzIG5vdyB0aGUgZGVmYXVsdFxuICBbNDIxLCBWLCAncDJwJ10sXG4gIFs0NDMsIDAsICdodHRwcyddLFxuICBbNDQ0LCA5NiwgJ29uaW9uJ10sXG4gIFs0NDUsIDI5NiwgJ29uaW9uMyddLFxuICBbNDQ2LCBWLCAnZ2FybGljNjQnXSxcbiAgWzQ2MCwgMCwgJ3F1aWMnXSxcbiAgWzQ3NywgMCwgJ3dzJ10sXG4gIFs0NzgsIDAsICd3c3MnXSxcbiAgWzQ3OSwgMCwgJ3AycC13ZWJzb2NrZXQtc3RhciddLFxuICBbNDgwLCAwLCAnaHR0cCddXG5dXG5cblByb3RvY29scy5uYW1lcyA9IHt9XG5Qcm90b2NvbHMuY29kZXMgPSB7fVxuXG4vLyBwb3B1bGF0ZSB0YWJsZXNcblByb3RvY29scy50YWJsZS5tYXAocm93ID0+IHtcbiAgY29uc3QgcHJvdG8gPSBwLmFwcGx5KG51bGwsIHJvdylcbiAgUHJvdG9jb2xzLmNvZGVzW3Byb3RvLmNvZGVdID0gcHJvdG9cbiAgUHJvdG9jb2xzLm5hbWVzW3Byb3RvLm5hbWVdID0gcHJvdG9cbn0pXG5cblByb3RvY29scy5vYmplY3QgPSBwXG5cbmZ1bmN0aW9uIHAgKGNvZGUsIHNpemUsIG5hbWUsIHJlc29sdmFibGUsIHBhdGgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBjb2RlLFxuICAgIHNpemU6IHNpemUsXG4gICAgbmFtZTogbmFtZSxcbiAgICByZXNvbHZhYmxlOiBCb29sZWFuKHJlc29sdmFibGUpLFxuICAgIHBhdGg6IEJvb2xlYW4ocGF0aClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3RvY29sc1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNsYXNzIEJhc2Uge1xuICBjb25zdHJ1Y3RvciAobmFtZSwgY29kZSwgaW1wbGVtZW50YXRpb24sIGFscGhhYmV0KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuY29kZSA9IGNvZGVcbiAgICB0aGlzLmFscGhhYmV0ID0gYWxwaGFiZXRcbiAgICBpZiAoaW1wbGVtZW50YXRpb24gJiYgYWxwaGFiZXQpIHtcbiAgICAgIHRoaXMuZW5naW5lID0gaW1wbGVtZW50YXRpb24oYWxwaGFiZXQpXG4gICAgfVxuICB9XG5cbiAgZW5jb2RlIChzdHJpbmdPckJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5lbmNvZGUoc3RyaW5nT3JCdWZmZXIpXG4gIH1cblxuICBkZWNvZGUgKHN0cmluZ09yQnVmZmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLmRlY29kZShzdHJpbmdPckJ1ZmZlcilcbiAgfVxuXG4gIGlzSW1wbGVtZW50ZWQgKCkge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFzZVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTE2IChhbHBoYWJldCkge1xuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCkudG9TdHJpbmcoJ2hleCcpXG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXQudG9TdHJpbmcoJ2hleCcpXG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlMTYgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0LCAnaGV4JylcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBkZWNvZGUgKGlucHV0LCBhbHBoYWJldCkge1xuICBpbnB1dCA9IGlucHV0LnJlcGxhY2UobmV3IFJlZ0V4cCgnPScsICdnJyksICcnKVxuICBsZXQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG5cbiAgbGV0IGJpdHMgPSAwXG4gIGxldCB2YWx1ZSA9IDBcblxuICBsZXQgaW5kZXggPSAwXG4gIGxldCBvdXRwdXQgPSBuZXcgVWludDhBcnJheSgobGVuZ3RoICogNSAvIDgpIHwgMClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgNSkgfCBhbHBoYWJldC5pbmRleE9mKGlucHV0W2ldKVxuICAgIGJpdHMgKz0gNVxuXG4gICAgaWYgKGJpdHMgPj0gOCkge1xuICAgICAgb3V0cHV0W2luZGV4KytdID0gKHZhbHVlID4+PiAoYml0cyAtIDgpKSAmIDI1NVxuICAgICAgYml0cyAtPSA4XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dC5idWZmZXJcbn1cblxuZnVuY3Rpb24gZW5jb2RlIChidWZmZXIsIGFscGhhYmV0KSB7XG4gIGxldCBsZW5ndGggPSBidWZmZXIuYnl0ZUxlbmd0aFxuICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcilcbiAgbGV0IHBhZGRpbmcgPSBhbHBoYWJldC5pbmRleE9mKCc9JykgPT09IGFscGhhYmV0Lmxlbmd0aCAtIDFcblxuICBpZiAocGFkZGluZykge1xuICAgIGFscGhhYmV0ID0gYWxwaGFiZXQuc3Vic3RyaW5nKDAsIGFscGhhYmV0Lmxlbmd0aCAtIDIpXG4gIH1cblxuICBsZXQgYml0cyA9IDBcbiAgbGV0IHZhbHVlID0gMFxuICBsZXQgb3V0cHV0ID0gJydcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCB2aWV3W2ldXG4gICAgYml0cyArPSA4XG5cbiAgICB3aGlsZSAoYml0cyA+PSA1KSB7XG4gICAgICBvdXRwdXQgKz0gYWxwaGFiZXRbKHZhbHVlID4+PiAoYml0cyAtIDUpKSAmIDMxXVxuICAgICAgYml0cyAtPSA1XG4gICAgfVxuICB9XG5cbiAgaWYgKGJpdHMgPiAwKSB7XG4gICAgb3V0cHV0ICs9IGFscGhhYmV0Wyh2YWx1ZSA8PCAoNSAtIGJpdHMpKSAmIDMxXVxuICB9XG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICB3aGlsZSAoKG91dHB1dC5sZW5ndGggJSA4KSAhPT0gMCkge1xuICAgICAgb3V0cHV0ICs9ICc9J1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlMzIgKGFscGhhYmV0KSB7XG4gIHJldHVybiB7XG4gICAgZW5jb2RlIChpbnB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZShCdWZmZXIuZnJvbShpbnB1dCksIGFscGhhYmV0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW5jb2RlKGlucHV0LCBhbHBoYWJldClcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWNvZGUoaW5wdXQsIGFscGhhYmV0KVxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTY0IChhbHBoYWJldCkge1xuICAvLyBUaGUgYWxwaGFiZXQgaXMgb25seSB1c2VkIHRvIGtub3c6XG4gIC8vICAgMS4gSWYgcGFkZGluZyBpcyBlbmFibGVkIChtdXN0IGNvbnRhaW4gJz0nKVxuICAvLyAgIDIuIElmIHRoZSBvdXRwdXQgbXVzdCBiZSB1cmwtc2FmZSAobXVzdCBjb250YWluICctJyBhbmQgJ18nKVxuICAvLyAgIDMuIElmIHRoZSBpbnB1dCBvZiB0aGUgb3V0cHV0IGZ1bmN0aW9uIGlzIHZhbGlkXG4gIC8vIFRoZSBhbHBoYWJldHMgZnJvbSBSRkMgNDY0OCBhcmUgYWx3YXlzIHVzZWQuXG4gIGNvbnN0IHBhZGRpbmcgPSBhbHBoYWJldC5pbmRleE9mKCc9JykgPiAtMVxuICBjb25zdCB1cmwgPSBhbHBoYWJldC5pbmRleE9mKCctJykgPiAtMSAmJiBhbHBoYWJldC5pbmRleE9mKCdfJykgPiAtMVxuXG4gIHJldHVybiB7XG4gICAgZW5jb2RlIChpbnB1dCkge1xuICAgICAgbGV0IG91dHB1dCA9ICcnXG5cbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG91dHB1dCA9IEJ1ZmZlci5mcm9tKGlucHV0KS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dCA9IGlucHV0LnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWQgPSBvdXRwdXQuaW5kZXhPZignPScpXG4gICAgICBpZiAocGFkID4gMCAmJiAhcGFkZGluZykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3Vic3RyaW5nKDAsIHBhZClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTY0IGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlucHV0LCAnYmFzZTY0JylcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBCYXNlID0gcmVxdWlyZSgnLi9iYXNlLmpzJylcbmNvbnN0IGJhc2VYID0gcmVxdWlyZSgnYmFzZS14JylcbmNvbnN0IGJhc2UxNiA9IHJlcXVpcmUoJy4vYmFzZTE2JylcbmNvbnN0IGJhc2UzMiA9IHJlcXVpcmUoJy4vYmFzZTMyJylcbmNvbnN0IGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0JylcblxuLy8gbmFtZSwgY29kZSwgaW1wbGVtZW50YXRpb24sIGFscGhhYmV0XG5jb25zdCBjb25zdGFudHMgPSBbXG4gIFsnYmFzZTEnLCAnMScsICcnLCAnMSddLFxuICBbJ2Jhc2UyJywgJzAnLCBiYXNlWCwgJzAxJ10sXG4gIFsnYmFzZTgnLCAnNycsIGJhc2VYLCAnMDEyMzQ1NjcnXSxcbiAgWydiYXNlMTAnLCAnOScsIGJhc2VYLCAnMDEyMzQ1Njc4OSddLFxuICBbJ2Jhc2UxNicsICdmJywgYmFzZTE2LCAnMDEyMzQ1Njc4OWFiY2RlZiddLFxuICBbJ2Jhc2UzMicsICdiJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjcnXSxcbiAgWydiYXNlMzJwYWQnLCAnYycsIGJhc2UzMiwgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3PSddLFxuICBbJ2Jhc2UzMmhleCcsICd2JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXYnXSxcbiAgWydiYXNlMzJoZXhwYWQnLCAndCcsIGJhc2UzMiwgJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2PSddLFxuICBbJ2Jhc2UzMnonLCAnaCcsIGJhc2UzMiwgJ3libmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5J10sXG4gIFsnYmFzZTU4ZmxpY2tyJywgJ1onLCBiYXNlWCwgJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonXSxcbiAgWydiYXNlNThidGMnLCAneicsIGJhc2VYLCAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eiddLFxuICBbJ2Jhc2U2NCcsICdtJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyddLFxuICBbJ2Jhc2U2NHBhZCcsICdNJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXSxcbiAgWydiYXNlNjR1cmwnLCAndScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nXSxcbiAgWydiYXNlNjR1cmxwYWQnLCAnVScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89J11cbl1cblxuY29uc3QgbmFtZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMF1dID0gbmV3IEJhc2UodHVwcGxlWzBdLCB0dXBwbGVbMV0sIHR1cHBsZVsyXSwgdHVwcGxlWzNdKVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbmNvbnN0IGNvZGVzID0gY29uc3RhbnRzLnJlZHVjZSgocHJldiwgdHVwcGxlKSA9PiB7XG4gIHByZXZbdHVwcGxlWzFdXSA9IG5hbWVzW3R1cHBsZVswXV1cbiAgcmV0dXJuIHByZXZcbn0sIHt9KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmFtZXM6IG5hbWVzLFxuICBjb2RlczogY29kZXNcbn1cbiIsIi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFttdWx0aWJhc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGliYXNlKSBzcGVjaWZpY2F0aW9uLlxuICogQG1vZHVsZSBNdWx0aWJhc2VcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gbXVsdGliYXNlXG5leHBvcnRzLmVuY29kZSA9IGVuY29kZVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGVcbmV4cG9ydHMuaXNFbmNvZGVkID0gaXNFbmNvZGVkXG5leHBvcnRzLm5hbWVzID0gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhjb25zdGFudHMubmFtZXMpKVxuZXhwb3J0cy5jb2RlcyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoY29uc3RhbnRzLmNvZGVzKSlcblxuY29uc3QgZXJyTm90U3VwcG9ydGVkID0gbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBlbmNvZGluZycpXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGJ1ZmZlciB3aXRoIHRoZSBtdWx0aWJhc2UgdmFyaW50K2NvZGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBuYW1lT3JDb2RlIC0gVGhlIG11bHRpYmFzZSBuYW1lIG9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZiAtIFRoZSBkYXRhIHRvIGJlIHByZWZpeGVkIHdpdGggbXVsdGliYXNlLlxuICogQG1lbWJlcm9mIE11bHRpYmFzZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gbXVsdGliYXNlIChuYW1lT3JDb2RlLCBidWYpIHtcbiAgaWYgKCFidWYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIGFuIGVuY29kZWQgYnVmZmVyJylcbiAgfVxuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lT3JDb2RlKVxuICBjb25zdCBjb2RlQnVmID0gQnVmZmVyLmZyb20oYmFzZS5jb2RlKVxuXG4gIGNvbnN0IG5hbWUgPSBiYXNlLm5hbWVcbiAgdmFsaWRFbmNvZGUobmFtZSwgYnVmKVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbY29kZUJ1ZiwgYnVmXSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgZGF0YSB3aXRoIHRoZSBzcGVjaWZpZWQgYmFzZSBhbmQgYWRkIHRoZSBtdWx0aWJhc2UgcHJlZml4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZU9yQ29kZSAtIFRoZSBtdWx0aWJhc2UgbmFtZSBvciBjb2RlIG51bWJlci5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWYgLSBUaGUgZGF0YSB0byBiZSBlbmNvZGVkLlxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqL1xuZnVuY3Rpb24gZW5jb2RlIChuYW1lT3JDb2RlLCBidWYpIHtcbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZU9yQ29kZSlcbiAgY29uc3QgbmFtZSA9IGJhc2UubmFtZVxuXG4gIHJldHVybiBtdWx0aWJhc2UobmFtZSwgQnVmZmVyLmZyb20oYmFzZS5lbmNvZGUoYnVmKSkpXG59XG5cbi8qKlxuICogVGFrZXMgYSBidWZmZXIgb3Igc3RyaW5nIGVuY29kZWQgd2l0aCBtdWx0aWJhc2UgaGVhZGVyLCBkZWNvZGVzIGl0IGFuZFxuICogcmV0dXJucyB0aGUgZGVjb2RlZCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGJ1Zk9yU3RyaW5nXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICogQG1lbWJlcm9mIE11bHRpYmFzZVxuICpcbiAqL1xuZnVuY3Rpb24gZGVjb2RlIChidWZPclN0cmluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1Zk9yU3RyaW5nKSkge1xuICAgIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcudG9TdHJpbmcoKVxuICB9XG5cbiAgY29uc3QgY29kZSA9IGJ1Zk9yU3RyaW5nLnN1YnN0cmluZygwLCAxKVxuICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnN1YnN0cmluZygxLCBidWZPclN0cmluZy5sZW5ndGgpXG5cbiAgaWYgKHR5cGVvZiBidWZPclN0cmluZyA9PT0gJ3N0cmluZycpIHtcbiAgICBidWZPclN0cmluZyA9IEJ1ZmZlci5mcm9tKGJ1Zk9yU3RyaW5nKVxuICB9XG5cbiAgY29uc3QgYmFzZSA9IGdldEJhc2UoY29kZSlcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2UuZGVjb2RlKGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKCkpKVxufVxuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBkYXRhIG11bHRpYmFzZSBlbmNvZGVkP1xuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gYnVmT3JTdHJpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQG1lbWJlcm9mIE11bHRpYmFzZVxuICovXG5mdW5jdGlvbiBpc0VuY29kZWQgKGJ1Zk9yU3RyaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmT3JTdHJpbmcpKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy50b1N0cmluZygpXG4gIH1cblxuICAvLyBFbnN1cmUgYnVmT3JTdHJpbmcgaXMgYSBzdHJpbmdcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChidWZPclN0cmluZykgIT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBjb2RlID0gYnVmT3JTdHJpbmcuc3Vic3RyaW5nKDAsIDEpXG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZSA9IGdldEJhc2UoY29kZSlcbiAgICByZXR1cm4gYmFzZS5uYW1lXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiB2YWxpZEVuY29kZSAobmFtZSwgYnVmKSB7XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWUpXG4gIGJhc2UuZGVjb2RlKGJ1Zi50b1N0cmluZygpKVxufVxuXG5mdW5jdGlvbiBnZXRCYXNlIChuYW1lT3JDb2RlKSB7XG4gIGxldCBiYXNlXG5cbiAgaWYgKGNvbnN0YW50cy5uYW1lc1tuYW1lT3JDb2RlXSkge1xuICAgIGJhc2UgPSBjb25zdGFudHMubmFtZXNbbmFtZU9yQ29kZV1cbiAgfSBlbHNlIGlmIChjb25zdGFudHMuY29kZXNbbmFtZU9yQ29kZV0pIHtcbiAgICBiYXNlID0gY29uc3RhbnRzLmNvZGVzW25hbWVPckNvZGVdXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyTm90U3VwcG9ydGVkXG4gIH1cblxuICBpZiAoIWJhc2UuaXNJbXBsZW1lbnRlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlICcgKyBuYW1lT3JDb2RlICsgJyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0JylcbiAgfVxuXG4gIHJldHVybiBiYXNlXG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgdGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5cbi8vIG1hcCBmb3IgY29kZWNDb25zdGFudCAtPiBjb2RlXG5jb25zdCBjb25zdGFudHMgPSB7fVxuXG5mb3IgKGNvbnN0IFtuYW1lLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyh0YWJsZSkpIHtcbiAgY29uc3RhbnRzW25hbWUudG9VcHBlckNhc2UoKS5yZXBsYWNlKC8tL2csICdfJyldID0gY29kZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoY29uc3RhbnRzKVxuIiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXVsdGljb2RlYyBzcGVjaWZpY2F0aW9uLlxuICpcbiAqIEBtb2R1bGUgbXVsdGljb2RlY1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG11bHRpY29kZWMgPSByZXF1aXJlKCdtdWx0aWNvZGVjJylcbiAqXG4gKiBjb25zdCBwcmVmaXhlZFByb3RvYnVmID0gbXVsdGljb2RlYy5hZGRQcmVmaXgoJ3Byb3RvYnVmJywgcHJvdG9idWZCdWZmZXIpXG4gKiAvLyBwcmVmaXhlZFByb3RvYnVmIDB4NTAuLi5cbiAqXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgaW50VGFibGUgPSByZXF1aXJlKCcuL2ludC10YWJsZScpXG5jb25zdCBjb2RlY05hbWVUb0NvZGVWYXJpbnQgPSByZXF1aXJlKCcuL3ZhcmludC10YWJsZScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzXG5cbi8qKlxuICogUHJlZml4IGEgYnVmZmVyIHdpdGggYSBtdWx0aWNvZGVjLXBhY2tlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG11bHRpY29kZWNTdHJPckNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmFkZFByZWZpeCA9IChtdWx0aWNvZGVjU3RyT3JDb2RlLCBkYXRhKSA9PiB7XG4gIGxldCBwcmVmaXhcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG11bHRpY29kZWNTdHJPckNvZGUpKSB7XG4gICAgcHJlZml4ID0gdXRpbC52YXJpbnRCdWZmZXJFbmNvZGUobXVsdGljb2RlY1N0ck9yQ29kZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29kZWNOYW1lVG9Db2RlVmFyaW50W211bHRpY29kZWNTdHJPckNvZGVdKSB7XG4gICAgICBwcmVmaXggPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWNvZGVjIG5vdCByZWNvZ25pemVkJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3ByZWZpeCwgZGF0YV0pXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGUgdGhlIG11bHRpY29kZWMtcGFja2VkIHByZWZpeCBmcm9tIHRoZSBkYXRhLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLnJtUHJlZml4ID0gKGRhdGEpID0+IHtcbiAgdmFyaW50LmRlY29kZShkYXRhKVxuICByZXR1cm4gZGF0YS5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZWMgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldENvZGVjID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG4gIGNvbnN0IGNvZGVjTmFtZSA9IGludFRhYmxlLmdldChjb2RlKVxuICBpZiAoY29kZWNOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGUgJHtjb2RlfSBub3QgZm91bmRgKVxuICB9XG4gIHJldHVybiBjb2RlY05hbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGNvZGVjLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVjXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldE5hbWUgPSAoY29kZWMpID0+IHtcbiAgcmV0dXJuIGludFRhYmxlLmdldChjb2RlYylcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIGNvZGVjXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXROdW1iZXIgPSAobmFtZSkgPT4ge1xuICBjb25zdCBjb2RlID0gY29kZWNOYW1lVG9Db2RlVmFyaW50W25hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgbmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIHV0aWwudmFyaW50QnVmZmVyRGVjb2RlKGNvZGUpWzBdXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIG9mIHRoZSBwcmVmaXhlZCBkYXRhLlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeGVkRGF0YVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXRDb2RlID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICByZXR1cm4gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIGFzIHZhcmludCBvZiBhIGNvZGVjIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNOYW1lXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmdldENvZGVWYXJpbnQgPSAoY29kZWNOYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbY29kZWNOYW1lXVxuICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlYyBgJyArIGNvZGVjTmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIGNvZGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhcmludCBvZiBhIGNvZGUuXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICovXG5leHBvcnRzLmdldFZhcmludCA9IChjb2RlKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZW5jb2RlKGNvZGUpXG59XG5cbi8vIE1ha2UgdGhlIGNvbnN0YW50cyB0b3AtbGV2ZWwgY29uc3RhbnRzXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIGNvbnN0YW50cylcblxuLy8gSHVtYW4gZnJpZW5kbHkgbmFtZXMgZm9yIHByaW50aW5nLCBlLmcuIGluIGVycm9yIG1lc3NhZ2VzXG5leHBvcnRzLnByaW50ID0gcmVxdWlyZSgnLi9wcmludCcpXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IGJhc2VUYWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBoZXhTdHJpbmcgLT4gY29kZWNOYW1lXG5jb25zdCBuYW1lVGFibGUgPSBuZXcgTWFwKClcblxuZm9yIChjb25zdCBlbmNvZGluZ05hbWUgaW4gYmFzZVRhYmxlKSB7XG4gIGNvbnN0IGNvZGUgPSBiYXNlVGFibGVbZW5jb2RpbmdOYW1lXVxuICBuYW1lVGFibGUuc2V0KGNvZGUsIGVuY29kaW5nTmFtZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKG5hbWVUYWJsZSlcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB0YWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBjb2RlIC0+IHByaW50IGZyaWVuZGx5IG5hbWVcbmNvbnN0IHRhYmxlQnlDb2RlID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGlmICh0YWJsZUJ5Q29kZVtjb2RlXSA9PT0gdW5kZWZpbmVkKSB0YWJsZUJ5Q29kZVtjb2RlXSA9IG5hbWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHRhYmxlQnlDb2RlKVxuIiwiJ3VzZSBzdHJpY3QnXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbnVtYmVyVG9CdWZmZXIsXG4gIGJ1ZmZlclRvTnVtYmVyLFxuICB2YXJpbnRCdWZmZXJFbmNvZGUsXG4gIHZhcmludEJ1ZmZlckRlY29kZSxcbiAgdmFyaW50RW5jb2RlXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlclRvTnVtYmVyIChidWYpIHtcbiAgcmV0dXJuIHBhcnNlSW50KGJ1Zi50b1N0cmluZygnaGV4JyksIDE2KVxufVxuXG5mdW5jdGlvbiBudW1iZXJUb0J1ZmZlciAobnVtKSB7XG4gIGxldCBoZXhTdHJpbmcgPSBudW0udG9TdHJpbmcoMTYpXG4gIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMiA9PT0gMSkge1xuICAgIGhleFN0cmluZyA9ICcwJyArIGhleFN0cmluZ1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShoZXhTdHJpbmcsICdoZXgnKVxufVxuXG5mdW5jdGlvbiB2YXJpbnRCdWZmZXJFbmNvZGUgKGlucHV0KSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKGJ1ZmZlclRvTnVtYmVyKGlucHV0KSkpXG59XG5cbmZ1bmN0aW9uIHZhcmludEJ1ZmZlckRlY29kZSAoaW5wdXQpIHtcbiAgcmV0dXJuIG51bWJlclRvQnVmZmVyKHZhcmludC5kZWNvZGUoaW5wdXQpKVxufVxuXG5mdW5jdGlvbiB2YXJpbnRFbmNvZGUgKG51bSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShudW0pKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2VUYWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcbmNvbnN0IHZhcmludEVuY29kZSA9IHJlcXVpcmUoJy4vdXRpbCcpLnZhcmludEVuY29kZVxuXG4vLyBtYXAgZm9yIGNvZGVjTmFtZSAtPiBjb2RlVmFyaW50QnVmZmVyXG5jb25zdCB2YXJpbnRUYWJsZSA9IHt9XG5cbmZvciAoY29uc3QgZW5jb2RpbmdOYW1lIGluIGJhc2VUYWJsZSkge1xuICBjb25zdCBjb2RlID0gYmFzZVRhYmxlW2VuY29kaW5nTmFtZV1cbiAgdmFyaW50VGFibGVbZW5jb2RpbmdOYW1lXSA9IHZhcmludEVuY29kZShjb2RlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUodmFyaW50VGFibGUpXG4iLCIvKiBlc2xpbnQgcXVvdGUtcHJvcHM6IG9mZiAqL1xuLyogZXNsaW50IGtleS1zcGFjaW5nOiBvZmYgKi9cbid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLm5hbWVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICdpZGVudGl0eSc6ICAgMHgwLFxuICAnc2hhMSc6ICAgICAgIDB4MTEsXG4gICdzaGEyLTI1Nic6ICAgMHgxMixcbiAgJ3NoYTItNTEyJzogICAweDEzLFxuICAnZGJsLXNoYTItMjU2JzogMHg1NixcbiAgJ3NoYTMtMjI0JzogICAweDE3LFxuICAnc2hhMy0yNTYnOiAgIDB4MTYsXG4gICdzaGEzLTM4NCc6ICAgMHgxNSxcbiAgJ3NoYTMtNTEyJzogICAweDE0LFxuICAnc2hha2UtMTI4JzogIDB4MTgsXG4gICdzaGFrZS0yNTYnOiAgMHgxOSxcbiAgJ2tlY2Nhay0yMjQnOiAweDFBLFxuICAna2VjY2FrLTI1Nic6IDB4MUIsXG4gICdrZWNjYWstMzg0JzogMHgxQyxcbiAgJ2tlY2Nhay01MTInOiAweDFELFxuICAnbXVybXVyMy0xMjgnOiAweDIyLFxuICAnbXVybXVyMy0zMic6ICAweDIzLFxuICAnYmxha2UyYi04JzogICAweGIyMDEsXG4gICdibGFrZTJiLTE2JzogIDB4YjIwMixcbiAgJ2JsYWtlMmItMjQnOiAgMHhiMjAzLFxuICAnYmxha2UyYi0zMic6ICAweGIyMDQsXG4gICdibGFrZTJiLTQwJzogIDB4YjIwNSxcbiAgJ2JsYWtlMmItNDgnOiAgMHhiMjA2LFxuICAnYmxha2UyYi01Nic6ICAweGIyMDcsXG4gICdibGFrZTJiLTY0JzogIDB4YjIwOCxcbiAgJ2JsYWtlMmItNzInOiAgMHhiMjA5LFxuICAnYmxha2UyYi04MCc6ICAweGIyMGEsXG4gICdibGFrZTJiLTg4JzogIDB4YjIwYixcbiAgJ2JsYWtlMmItOTYnOiAgMHhiMjBjLFxuICAnYmxha2UyYi0xMDQnOiAweGIyMGQsXG4gICdibGFrZTJiLTExMic6IDB4YjIwZSxcbiAgJ2JsYWtlMmItMTIwJzogMHhiMjBmLFxuICAnYmxha2UyYi0xMjgnOiAweGIyMTAsXG4gICdibGFrZTJiLTEzNic6IDB4YjIxMSxcbiAgJ2JsYWtlMmItMTQ0JzogMHhiMjEyLFxuICAnYmxha2UyYi0xNTInOiAweGIyMTMsXG4gICdibGFrZTJiLTE2MCc6IDB4YjIxNCxcbiAgJ2JsYWtlMmItMTY4JzogMHhiMjE1LFxuICAnYmxha2UyYi0xNzYnOiAweGIyMTYsXG4gICdibGFrZTJiLTE4NCc6IDB4YjIxNyxcbiAgJ2JsYWtlMmItMTkyJzogMHhiMjE4LFxuICAnYmxha2UyYi0yMDAnOiAweGIyMTksXG4gICdibGFrZTJiLTIwOCc6IDB4YjIxYSxcbiAgJ2JsYWtlMmItMjE2JzogMHhiMjFiLFxuICAnYmxha2UyYi0yMjQnOiAweGIyMWMsXG4gICdibGFrZTJiLTIzMic6IDB4YjIxZCxcbiAgJ2JsYWtlMmItMjQwJzogMHhiMjFlLFxuICAnYmxha2UyYi0yNDgnOiAweGIyMWYsXG4gICdibGFrZTJiLTI1Nic6IDB4YjIyMCxcbiAgJ2JsYWtlMmItMjY0JzogMHhiMjIxLFxuICAnYmxha2UyYi0yNzInOiAweGIyMjIsXG4gICdibGFrZTJiLTI4MCc6IDB4YjIyMyxcbiAgJ2JsYWtlMmItMjg4JzogMHhiMjI0LFxuICAnYmxha2UyYi0yOTYnOiAweGIyMjUsXG4gICdibGFrZTJiLTMwNCc6IDB4YjIyNixcbiAgJ2JsYWtlMmItMzEyJzogMHhiMjI3LFxuICAnYmxha2UyYi0zMjAnOiAweGIyMjgsXG4gICdibGFrZTJiLTMyOCc6IDB4YjIyOSxcbiAgJ2JsYWtlMmItMzM2JzogMHhiMjJhLFxuICAnYmxha2UyYi0zNDQnOiAweGIyMmIsXG4gICdibGFrZTJiLTM1Mic6IDB4YjIyYyxcbiAgJ2JsYWtlMmItMzYwJzogMHhiMjJkLFxuICAnYmxha2UyYi0zNjgnOiAweGIyMmUsXG4gICdibGFrZTJiLTM3Nic6IDB4YjIyZixcbiAgJ2JsYWtlMmItMzg0JzogMHhiMjMwLFxuICAnYmxha2UyYi0zOTInOiAweGIyMzEsXG4gICdibGFrZTJiLTQwMCc6IDB4YjIzMixcbiAgJ2JsYWtlMmItNDA4JzogMHhiMjMzLFxuICAnYmxha2UyYi00MTYnOiAweGIyMzQsXG4gICdibGFrZTJiLTQyNCc6IDB4YjIzNSxcbiAgJ2JsYWtlMmItNDMyJzogMHhiMjM2LFxuICAnYmxha2UyYi00NDAnOiAweGIyMzcsXG4gICdibGFrZTJiLTQ0OCc6IDB4YjIzOCxcbiAgJ2JsYWtlMmItNDU2JzogMHhiMjM5LFxuICAnYmxha2UyYi00NjQnOiAweGIyM2EsXG4gICdibGFrZTJiLTQ3Mic6IDB4YjIzYixcbiAgJ2JsYWtlMmItNDgwJzogMHhiMjNjLFxuICAnYmxha2UyYi00ODgnOiAweGIyM2QsXG4gICdibGFrZTJiLTQ5Nic6IDB4YjIzZSxcbiAgJ2JsYWtlMmItNTA0JzogMHhiMjNmLFxuICAnYmxha2UyYi01MTInOiAweGIyNDAsXG4gICdibGFrZTJzLTgnOiAgIDB4YjI0MSxcbiAgJ2JsYWtlMnMtMTYnOiAgMHhiMjQyLFxuICAnYmxha2Uycy0yNCc6ICAweGIyNDMsXG4gICdibGFrZTJzLTMyJzogIDB4YjI0NCxcbiAgJ2JsYWtlMnMtNDAnOiAgMHhiMjQ1LFxuICAnYmxha2Uycy00OCc6ICAweGIyNDYsXG4gICdibGFrZTJzLTU2JzogIDB4YjI0NyxcbiAgJ2JsYWtlMnMtNjQnOiAgMHhiMjQ4LFxuICAnYmxha2Uycy03Mic6ICAweGIyNDksXG4gICdibGFrZTJzLTgwJzogIDB4YjI0YSxcbiAgJ2JsYWtlMnMtODgnOiAgMHhiMjRiLFxuICAnYmxha2Uycy05Nic6ICAweGIyNGMsXG4gICdibGFrZTJzLTEwNCc6IDB4YjI0ZCxcbiAgJ2JsYWtlMnMtMTEyJzogMHhiMjRlLFxuICAnYmxha2Uycy0xMjAnOiAweGIyNGYsXG4gICdibGFrZTJzLTEyOCc6IDB4YjI1MCxcbiAgJ2JsYWtlMnMtMTM2JzogMHhiMjUxLFxuICAnYmxha2Uycy0xNDQnOiAweGIyNTIsXG4gICdibGFrZTJzLTE1Mic6IDB4YjI1MyxcbiAgJ2JsYWtlMnMtMTYwJzogMHhiMjU0LFxuICAnYmxha2Uycy0xNjgnOiAweGIyNTUsXG4gICdibGFrZTJzLTE3Nic6IDB4YjI1NixcbiAgJ2JsYWtlMnMtMTg0JzogMHhiMjU3LFxuICAnYmxha2Uycy0xOTInOiAweGIyNTgsXG4gICdibGFrZTJzLTIwMCc6IDB4YjI1OSxcbiAgJ2JsYWtlMnMtMjA4JzogMHhiMjVhLFxuICAnYmxha2Uycy0yMTYnOiAweGIyNWIsXG4gICdibGFrZTJzLTIyNCc6IDB4YjI1YyxcbiAgJ2JsYWtlMnMtMjMyJzogMHhiMjVkLFxuICAnYmxha2Uycy0yNDAnOiAweGIyNWUsXG4gICdibGFrZTJzLTI0OCc6IDB4YjI1ZixcbiAgJ2JsYWtlMnMtMjU2JzogMHhiMjYwLFxuICAnU2tlaW4yNTYtOCc6IDB4YjMwMSxcbiAgJ1NrZWluMjU2LTE2JzogMHhiMzAyLFxuICAnU2tlaW4yNTYtMjQnOiAweGIzMDMsXG4gICdTa2VpbjI1Ni0zMic6IDB4YjMwNCxcbiAgJ1NrZWluMjU2LTQwJzogMHhiMzA1LFxuICAnU2tlaW4yNTYtNDgnOiAweGIzMDYsXG4gICdTa2VpbjI1Ni01Nic6IDB4YjMwNyxcbiAgJ1NrZWluMjU2LTY0JzogMHhiMzA4LFxuICAnU2tlaW4yNTYtNzInOiAweGIzMDksXG4gICdTa2VpbjI1Ni04MCc6IDB4YjMwYSxcbiAgJ1NrZWluMjU2LTg4JzogMHhiMzBiLFxuICAnU2tlaW4yNTYtOTYnOiAweGIzMGMsXG4gICdTa2VpbjI1Ni0xMDQnOiAweGIzMGQsXG4gICdTa2VpbjI1Ni0xMTInOiAweGIzMGUsXG4gICdTa2VpbjI1Ni0xMjAnOiAweGIzMGYsXG4gICdTa2VpbjI1Ni0xMjgnOiAweGIzMTAsXG4gICdTa2VpbjI1Ni0xMzYnOiAweGIzMTEsXG4gICdTa2VpbjI1Ni0xNDQnOiAweGIzMTIsXG4gICdTa2VpbjI1Ni0xNTInOiAweGIzMTMsXG4gICdTa2VpbjI1Ni0xNjAnOiAweGIzMTQsXG4gICdTa2VpbjI1Ni0xNjgnOiAweGIzMTUsXG4gICdTa2VpbjI1Ni0xNzYnOiAweGIzMTYsXG4gICdTa2VpbjI1Ni0xODQnOiAweGIzMTcsXG4gICdTa2VpbjI1Ni0xOTInOiAweGIzMTgsXG4gICdTa2VpbjI1Ni0yMDAnOiAweGIzMTksXG4gICdTa2VpbjI1Ni0yMDgnOiAweGIzMWEsXG4gICdTa2VpbjI1Ni0yMTYnOiAweGIzMWIsXG4gICdTa2VpbjI1Ni0yMjQnOiAweGIzMWMsXG4gICdTa2VpbjI1Ni0yMzInOiAweGIzMWQsXG4gICdTa2VpbjI1Ni0yNDAnOiAweGIzMWUsXG4gICdTa2VpbjI1Ni0yNDgnOiAweGIzMWYsXG4gICdTa2VpbjI1Ni0yNTYnOiAweGIzMjAsXG4gICdTa2VpbjUxMi04JzogMHhiMzIxLFxuICAnU2tlaW41MTItMTYnOiAweGIzMjIsXG4gICdTa2VpbjUxMi0yNCc6IDB4YjMyMyxcbiAgJ1NrZWluNTEyLTMyJzogMHhiMzI0LFxuICAnU2tlaW41MTItNDAnOiAweGIzMjUsXG4gICdTa2VpbjUxMi00OCc6IDB4YjMyNixcbiAgJ1NrZWluNTEyLTU2JzogMHhiMzI3LFxuICAnU2tlaW41MTItNjQnOiAweGIzMjgsXG4gICdTa2VpbjUxMi03Mic6IDB4YjMyOSxcbiAgJ1NrZWluNTEyLTgwJzogMHhiMzJhLFxuICAnU2tlaW41MTItODgnOiAweGIzMmIsXG4gICdTa2VpbjUxMi05Nic6IDB4YjMyYyxcbiAgJ1NrZWluNTEyLTEwNCc6IDB4YjMyZCxcbiAgJ1NrZWluNTEyLTExMic6IDB4YjMyZSxcbiAgJ1NrZWluNTEyLTEyMCc6IDB4YjMyZixcbiAgJ1NrZWluNTEyLTEyOCc6IDB4YjMzMCxcbiAgJ1NrZWluNTEyLTEzNic6IDB4YjMzMSxcbiAgJ1NrZWluNTEyLTE0NCc6IDB4YjMzMixcbiAgJ1NrZWluNTEyLTE1Mic6IDB4YjMzMyxcbiAgJ1NrZWluNTEyLTE2MCc6IDB4YjMzNCxcbiAgJ1NrZWluNTEyLTE2OCc6IDB4YjMzNSxcbiAgJ1NrZWluNTEyLTE3Nic6IDB4YjMzNixcbiAgJ1NrZWluNTEyLTE4NCc6IDB4YjMzNyxcbiAgJ1NrZWluNTEyLTE5Mic6IDB4YjMzOCxcbiAgJ1NrZWluNTEyLTIwMCc6IDB4YjMzOSxcbiAgJ1NrZWluNTEyLTIwOCc6IDB4YjMzYSxcbiAgJ1NrZWluNTEyLTIxNic6IDB4YjMzYixcbiAgJ1NrZWluNTEyLTIyNCc6IDB4YjMzYyxcbiAgJ1NrZWluNTEyLTIzMic6IDB4YjMzZCxcbiAgJ1NrZWluNTEyLTI0MCc6IDB4YjMzZSxcbiAgJ1NrZWluNTEyLTI0OCc6IDB4YjMzZixcbiAgJ1NrZWluNTEyLTI1Nic6IDB4YjM0MCxcbiAgJ1NrZWluNTEyLTI2NCc6IDB4YjM0MSxcbiAgJ1NrZWluNTEyLTI3Mic6IDB4YjM0MixcbiAgJ1NrZWluNTEyLTI4MCc6IDB4YjM0MyxcbiAgJ1NrZWluNTEyLTI4OCc6IDB4YjM0NCxcbiAgJ1NrZWluNTEyLTI5Nic6IDB4YjM0NSxcbiAgJ1NrZWluNTEyLTMwNCc6IDB4YjM0NixcbiAgJ1NrZWluNTEyLTMxMic6IDB4YjM0NyxcbiAgJ1NrZWluNTEyLTMyMCc6IDB4YjM0OCxcbiAgJ1NrZWluNTEyLTMyOCc6IDB4YjM0OSxcbiAgJ1NrZWluNTEyLTMzNic6IDB4YjM0YSxcbiAgJ1NrZWluNTEyLTM0NCc6IDB4YjM0YixcbiAgJ1NrZWluNTEyLTM1Mic6IDB4YjM0YyxcbiAgJ1NrZWluNTEyLTM2MCc6IDB4YjM0ZCxcbiAgJ1NrZWluNTEyLTM2OCc6IDB4YjM0ZSxcbiAgJ1NrZWluNTEyLTM3Nic6IDB4YjM0ZixcbiAgJ1NrZWluNTEyLTM4NCc6IDB4YjM1MCxcbiAgJ1NrZWluNTEyLTM5Mic6IDB4YjM1MSxcbiAgJ1NrZWluNTEyLTQwMCc6IDB4YjM1MixcbiAgJ1NrZWluNTEyLTQwOCc6IDB4YjM1MyxcbiAgJ1NrZWluNTEyLTQxNic6IDB4YjM1NCxcbiAgJ1NrZWluNTEyLTQyNCc6IDB4YjM1NSxcbiAgJ1NrZWluNTEyLTQzMic6IDB4YjM1NixcbiAgJ1NrZWluNTEyLTQ0MCc6IDB4YjM1NyxcbiAgJ1NrZWluNTEyLTQ0OCc6IDB4YjM1OCxcbiAgJ1NrZWluNTEyLTQ1Nic6IDB4YjM1OSxcbiAgJ1NrZWluNTEyLTQ2NCc6IDB4YjM1YSxcbiAgJ1NrZWluNTEyLTQ3Mic6IDB4YjM1YixcbiAgJ1NrZWluNTEyLTQ4MCc6IDB4YjM1YyxcbiAgJ1NrZWluNTEyLTQ4OCc6IDB4YjM1ZCxcbiAgJ1NrZWluNTEyLTQ5Nic6IDB4YjM1ZSxcbiAgJ1NrZWluNTEyLTUwNCc6IDB4YjM1ZixcbiAgJ1NrZWluNTEyLTUxMic6IDB4YjM2MCxcbiAgJ1NrZWluMTAyNC04JzogMHhiMzYxLFxuICAnU2tlaW4xMDI0LTE2JzogMHhiMzYyLFxuICAnU2tlaW4xMDI0LTI0JzogMHhiMzYzLFxuICAnU2tlaW4xMDI0LTMyJzogMHhiMzY0LFxuICAnU2tlaW4xMDI0LTQwJzogMHhiMzY1LFxuICAnU2tlaW4xMDI0LTQ4JzogMHhiMzY2LFxuICAnU2tlaW4xMDI0LTU2JzogMHhiMzY3LFxuICAnU2tlaW4xMDI0LTY0JzogMHhiMzY4LFxuICAnU2tlaW4xMDI0LTcyJzogMHhiMzY5LFxuICAnU2tlaW4xMDI0LTgwJzogMHhiMzZhLFxuICAnU2tlaW4xMDI0LTg4JzogMHhiMzZiLFxuICAnU2tlaW4xMDI0LTk2JzogMHhiMzZjLFxuICAnU2tlaW4xMDI0LTEwNCc6IDB4YjM2ZCxcbiAgJ1NrZWluMTAyNC0xMTInOiAweGIzNmUsXG4gICdTa2VpbjEwMjQtMTIwJzogMHhiMzZmLFxuICAnU2tlaW4xMDI0LTEyOCc6IDB4YjM3MCxcbiAgJ1NrZWluMTAyNC0xMzYnOiAweGIzNzEsXG4gICdTa2VpbjEwMjQtMTQ0JzogMHhiMzcyLFxuICAnU2tlaW4xMDI0LTE1Mic6IDB4YjM3MyxcbiAgJ1NrZWluMTAyNC0xNjAnOiAweGIzNzQsXG4gICdTa2VpbjEwMjQtMTY4JzogMHhiMzc1LFxuICAnU2tlaW4xMDI0LTE3Nic6IDB4YjM3NixcbiAgJ1NrZWluMTAyNC0xODQnOiAweGIzNzcsXG4gICdTa2VpbjEwMjQtMTkyJzogMHhiMzc4LFxuICAnU2tlaW4xMDI0LTIwMCc6IDB4YjM3OSxcbiAgJ1NrZWluMTAyNC0yMDgnOiAweGIzN2EsXG4gICdTa2VpbjEwMjQtMjE2JzogMHhiMzdiLFxuICAnU2tlaW4xMDI0LTIyNCc6IDB4YjM3YyxcbiAgJ1NrZWluMTAyNC0yMzInOiAweGIzN2QsXG4gICdTa2VpbjEwMjQtMjQwJzogMHhiMzdlLFxuICAnU2tlaW4xMDI0LTI0OCc6IDB4YjM3ZixcbiAgJ1NrZWluMTAyNC0yNTYnOiAweGIzODAsXG4gICdTa2VpbjEwMjQtMjY0JzogMHhiMzgxLFxuICAnU2tlaW4xMDI0LTI3Mic6IDB4YjM4MixcbiAgJ1NrZWluMTAyNC0yODAnOiAweGIzODMsXG4gICdTa2VpbjEwMjQtMjg4JzogMHhiMzg0LFxuICAnU2tlaW4xMDI0LTI5Nic6IDB4YjM4NSxcbiAgJ1NrZWluMTAyNC0zMDQnOiAweGIzODYsXG4gICdTa2VpbjEwMjQtMzEyJzogMHhiMzg3LFxuICAnU2tlaW4xMDI0LTMyMCc6IDB4YjM4OCxcbiAgJ1NrZWluMTAyNC0zMjgnOiAweGIzODksXG4gICdTa2VpbjEwMjQtMzM2JzogMHhiMzhhLFxuICAnU2tlaW4xMDI0LTM0NCc6IDB4YjM4YixcbiAgJ1NrZWluMTAyNC0zNTInOiAweGIzOGMsXG4gICdTa2VpbjEwMjQtMzYwJzogMHhiMzhkLFxuICAnU2tlaW4xMDI0LTM2OCc6IDB4YjM4ZSxcbiAgJ1NrZWluMTAyNC0zNzYnOiAweGIzOGYsXG4gICdTa2VpbjEwMjQtMzg0JzogMHhiMzkwLFxuICAnU2tlaW4xMDI0LTM5Mic6IDB4YjM5MSxcbiAgJ1NrZWluMTAyNC00MDAnOiAweGIzOTIsXG4gICdTa2VpbjEwMjQtNDA4JzogMHhiMzkzLFxuICAnU2tlaW4xMDI0LTQxNic6IDB4YjM5NCxcbiAgJ1NrZWluMTAyNC00MjQnOiAweGIzOTUsXG4gICdTa2VpbjEwMjQtNDMyJzogMHhiMzk2LFxuICAnU2tlaW4xMDI0LTQ0MCc6IDB4YjM5NyxcbiAgJ1NrZWluMTAyNC00NDgnOiAweGIzOTgsXG4gICdTa2VpbjEwMjQtNDU2JzogMHhiMzk5LFxuICAnU2tlaW4xMDI0LTQ2NCc6IDB4YjM5YSxcbiAgJ1NrZWluMTAyNC00NzInOiAweGIzOWIsXG4gICdTa2VpbjEwMjQtNDgwJzogMHhiMzljLFxuICAnU2tlaW4xMDI0LTQ4OCc6IDB4YjM5ZCxcbiAgJ1NrZWluMTAyNC00OTYnOiAweGIzOWUsXG4gICdTa2VpbjEwMjQtNTA0JzogMHhiMzlmLFxuICAnU2tlaW4xMDI0LTUxMic6IDB4YjNhMCxcbiAgJ1NrZWluMTAyNC01MjAnOiAweGIzYTEsXG4gICdTa2VpbjEwMjQtNTI4JzogMHhiM2EyLFxuICAnU2tlaW4xMDI0LTUzNic6IDB4YjNhMyxcbiAgJ1NrZWluMTAyNC01NDQnOiAweGIzYTQsXG4gICdTa2VpbjEwMjQtNTUyJzogMHhiM2E1LFxuICAnU2tlaW4xMDI0LTU2MCc6IDB4YjNhNixcbiAgJ1NrZWluMTAyNC01NjgnOiAweGIzYTcsXG4gICdTa2VpbjEwMjQtNTc2JzogMHhiM2E4LFxuICAnU2tlaW4xMDI0LTU4NCc6IDB4YjNhOSxcbiAgJ1NrZWluMTAyNC01OTInOiAweGIzYWEsXG4gICdTa2VpbjEwMjQtNjAwJzogMHhiM2FiLFxuICAnU2tlaW4xMDI0LTYwOCc6IDB4YjNhYyxcbiAgJ1NrZWluMTAyNC02MTYnOiAweGIzYWQsXG4gICdTa2VpbjEwMjQtNjI0JzogMHhiM2FlLFxuICAnU2tlaW4xMDI0LTYzMic6IDB4YjNhZixcbiAgJ1NrZWluMTAyNC02NDAnOiAweGIzYjAsXG4gICdTa2VpbjEwMjQtNjQ4JzogMHhiM2IxLFxuICAnU2tlaW4xMDI0LTY1Nic6IDB4YjNiMixcbiAgJ1NrZWluMTAyNC02NjQnOiAweGIzYjMsXG4gICdTa2VpbjEwMjQtNjcyJzogMHhiM2I0LFxuICAnU2tlaW4xMDI0LTY4MCc6IDB4YjNiNSxcbiAgJ1NrZWluMTAyNC02ODgnOiAweGIzYjYsXG4gICdTa2VpbjEwMjQtNjk2JzogMHhiM2I3LFxuICAnU2tlaW4xMDI0LTcwNCc6IDB4YjNiOCxcbiAgJ1NrZWluMTAyNC03MTInOiAweGIzYjksXG4gICdTa2VpbjEwMjQtNzIwJzogMHhiM2JhLFxuICAnU2tlaW4xMDI0LTcyOCc6IDB4YjNiYixcbiAgJ1NrZWluMTAyNC03MzYnOiAweGIzYmMsXG4gICdTa2VpbjEwMjQtNzQ0JzogMHhiM2JkLFxuICAnU2tlaW4xMDI0LTc1Mic6IDB4YjNiZSxcbiAgJ1NrZWluMTAyNC03NjAnOiAweGIzYmYsXG4gICdTa2VpbjEwMjQtNzY4JzogMHhiM2MwLFxuICAnU2tlaW4xMDI0LTc3Nic6IDB4YjNjMSxcbiAgJ1NrZWluMTAyNC03ODQnOiAweGIzYzIsXG4gICdTa2VpbjEwMjQtNzkyJzogMHhiM2MzLFxuICAnU2tlaW4xMDI0LTgwMCc6IDB4YjNjNCxcbiAgJ1NrZWluMTAyNC04MDgnOiAweGIzYzUsXG4gICdTa2VpbjEwMjQtODE2JzogMHhiM2M2LFxuICAnU2tlaW4xMDI0LTgyNCc6IDB4YjNjNyxcbiAgJ1NrZWluMTAyNC04MzInOiAweGIzYzgsXG4gICdTa2VpbjEwMjQtODQwJzogMHhiM2M5LFxuICAnU2tlaW4xMDI0LTg0OCc6IDB4YjNjYSxcbiAgJ1NrZWluMTAyNC04NTYnOiAweGIzY2IsXG4gICdTa2VpbjEwMjQtODY0JzogMHhiM2NjLFxuICAnU2tlaW4xMDI0LTg3Mic6IDB4YjNjZCxcbiAgJ1NrZWluMTAyNC04ODAnOiAweGIzY2UsXG4gICdTa2VpbjEwMjQtODg4JzogMHhiM2NmLFxuICAnU2tlaW4xMDI0LTg5Nic6IDB4YjNkMCxcbiAgJ1NrZWluMTAyNC05MDQnOiAweGIzZDEsXG4gICdTa2VpbjEwMjQtOTEyJzogMHhiM2QyLFxuICAnU2tlaW4xMDI0LTkyMCc6IDB4YjNkMyxcbiAgJ1NrZWluMTAyNC05MjgnOiAweGIzZDQsXG4gICdTa2VpbjEwMjQtOTM2JzogMHhiM2Q1LFxuICAnU2tlaW4xMDI0LTk0NCc6IDB4YjNkNixcbiAgJ1NrZWluMTAyNC05NTInOiAweGIzZDcsXG4gICdTa2VpbjEwMjQtOTYwJzogMHhiM2Q4LFxuICAnU2tlaW4xMDI0LTk2OCc6IDB4YjNkOSxcbiAgJ1NrZWluMTAyNC05NzYnOiAweGIzZGEsXG4gICdTa2VpbjEwMjQtOTg0JzogMHhiM2RiLFxuICAnU2tlaW4xMDI0LTk5Mic6IDB4YjNkYyxcbiAgJ1NrZWluMTAyNC0xMDAwJzogMHhiM2RkLFxuICAnU2tlaW4xMDI0LTEwMDgnOiAweGIzZGUsXG4gICdTa2VpbjEwMjQtMTAxNic6IDB4YjNkZixcbiAgJ1NrZWluMTAyNC0xMDI0JzogMHhiM2UwXG59KVxuXG5leHBvcnRzLmNvZGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIDB4MDogJ2lkZW50aXR5JyxcblxuICAvLyBzaGEgZmFtaWx5XG4gIDB4MTE6ICdzaGExJyxcbiAgMHgxMjogJ3NoYTItMjU2JyxcbiAgMHgxMzogJ3NoYTItNTEyJyxcbiAgMHg1NjogJ2RibC1zaGEyLTI1NicsXG4gIDB4MTc6ICdzaGEzLTIyNCcsXG4gIDB4MTY6ICdzaGEzLTI1NicsXG4gIDB4MTU6ICdzaGEzLTM4NCcsXG4gIDB4MTQ6ICdzaGEzLTUxMicsXG4gIDB4MTg6ICdzaGFrZS0xMjgnLFxuICAweDE5OiAnc2hha2UtMjU2JyxcbiAgMHgxQTogJ2tlY2Nhay0yMjQnLFxuICAweDFCOiAna2VjY2FrLTI1NicsXG4gIDB4MUM6ICdrZWNjYWstMzg0JyxcbiAgMHgxRDogJ2tlY2Nhay01MTInLFxuXG4gIDB4MjI6ICdtdXJtdXIzLTEyOCcsXG4gIDB4MjM6ICdtdXJtdXIzLTMyJyxcblxuICAvLyBibGFrZTJcbiAgMHhiMjAxOiAnYmxha2UyYi04JyxcbiAgMHhiMjAyOiAnYmxha2UyYi0xNicsXG4gIDB4YjIwMzogJ2JsYWtlMmItMjQnLFxuICAweGIyMDQ6ICdibGFrZTJiLTMyJyxcbiAgMHhiMjA1OiAnYmxha2UyYi00MCcsXG4gIDB4YjIwNjogJ2JsYWtlMmItNDgnLFxuICAweGIyMDc6ICdibGFrZTJiLTU2JyxcbiAgMHhiMjA4OiAnYmxha2UyYi02NCcsXG4gIDB4YjIwOTogJ2JsYWtlMmItNzInLFxuICAweGIyMGE6ICdibGFrZTJiLTgwJyxcbiAgMHhiMjBiOiAnYmxha2UyYi04OCcsXG4gIDB4YjIwYzogJ2JsYWtlMmItOTYnLFxuICAweGIyMGQ6ICdibGFrZTJiLTEwNCcsXG4gIDB4YjIwZTogJ2JsYWtlMmItMTEyJyxcbiAgMHhiMjBmOiAnYmxha2UyYi0xMjAnLFxuICAweGIyMTA6ICdibGFrZTJiLTEyOCcsXG4gIDB4YjIxMTogJ2JsYWtlMmItMTM2JyxcbiAgMHhiMjEyOiAnYmxha2UyYi0xNDQnLFxuICAweGIyMTM6ICdibGFrZTJiLTE1MicsXG4gIDB4YjIxNDogJ2JsYWtlMmItMTYwJyxcbiAgMHhiMjE1OiAnYmxha2UyYi0xNjgnLFxuICAweGIyMTY6ICdibGFrZTJiLTE3NicsXG4gIDB4YjIxNzogJ2JsYWtlMmItMTg0JyxcbiAgMHhiMjE4OiAnYmxha2UyYi0xOTInLFxuICAweGIyMTk6ICdibGFrZTJiLTIwMCcsXG4gIDB4YjIxYTogJ2JsYWtlMmItMjA4JyxcbiAgMHhiMjFiOiAnYmxha2UyYi0yMTYnLFxuICAweGIyMWM6ICdibGFrZTJiLTIyNCcsXG4gIDB4YjIxZDogJ2JsYWtlMmItMjMyJyxcbiAgMHhiMjFlOiAnYmxha2UyYi0yNDAnLFxuICAweGIyMWY6ICdibGFrZTJiLTI0OCcsXG4gIDB4YjIyMDogJ2JsYWtlMmItMjU2JyxcbiAgMHhiMjIxOiAnYmxha2UyYi0yNjQnLFxuICAweGIyMjI6ICdibGFrZTJiLTI3MicsXG4gIDB4YjIyMzogJ2JsYWtlMmItMjgwJyxcbiAgMHhiMjI0OiAnYmxha2UyYi0yODgnLFxuICAweGIyMjU6ICdibGFrZTJiLTI5NicsXG4gIDB4YjIyNjogJ2JsYWtlMmItMzA0JyxcbiAgMHhiMjI3OiAnYmxha2UyYi0zMTInLFxuICAweGIyMjg6ICdibGFrZTJiLTMyMCcsXG4gIDB4YjIyOTogJ2JsYWtlMmItMzI4JyxcbiAgMHhiMjJhOiAnYmxha2UyYi0zMzYnLFxuICAweGIyMmI6ICdibGFrZTJiLTM0NCcsXG4gIDB4YjIyYzogJ2JsYWtlMmItMzUyJyxcbiAgMHhiMjJkOiAnYmxha2UyYi0zNjAnLFxuICAweGIyMmU6ICdibGFrZTJiLTM2OCcsXG4gIDB4YjIyZjogJ2JsYWtlMmItMzc2JyxcbiAgMHhiMjMwOiAnYmxha2UyYi0zODQnLFxuICAweGIyMzE6ICdibGFrZTJiLTM5MicsXG4gIDB4YjIzMjogJ2JsYWtlMmItNDAwJyxcbiAgMHhiMjMzOiAnYmxha2UyYi00MDgnLFxuICAweGIyMzQ6ICdibGFrZTJiLTQxNicsXG4gIDB4YjIzNTogJ2JsYWtlMmItNDI0JyxcbiAgMHhiMjM2OiAnYmxha2UyYi00MzInLFxuICAweGIyMzc6ICdibGFrZTJiLTQ0MCcsXG4gIDB4YjIzODogJ2JsYWtlMmItNDQ4JyxcbiAgMHhiMjM5OiAnYmxha2UyYi00NTYnLFxuICAweGIyM2E6ICdibGFrZTJiLTQ2NCcsXG4gIDB4YjIzYjogJ2JsYWtlMmItNDcyJyxcbiAgMHhiMjNjOiAnYmxha2UyYi00ODAnLFxuICAweGIyM2Q6ICdibGFrZTJiLTQ4OCcsXG4gIDB4YjIzZTogJ2JsYWtlMmItNDk2JyxcbiAgMHhiMjNmOiAnYmxha2UyYi01MDQnLFxuICAweGIyNDA6ICdibGFrZTJiLTUxMicsXG4gIDB4YjI0MTogJ2JsYWtlMnMtOCcsXG4gIDB4YjI0MjogJ2JsYWtlMnMtMTYnLFxuICAweGIyNDM6ICdibGFrZTJzLTI0JyxcbiAgMHhiMjQ0OiAnYmxha2Uycy0zMicsXG4gIDB4YjI0NTogJ2JsYWtlMnMtNDAnLFxuICAweGIyNDY6ICdibGFrZTJzLTQ4JyxcbiAgMHhiMjQ3OiAnYmxha2Uycy01NicsXG4gIDB4YjI0ODogJ2JsYWtlMnMtNjQnLFxuICAweGIyNDk6ICdibGFrZTJzLTcyJyxcbiAgMHhiMjRhOiAnYmxha2Uycy04MCcsXG4gIDB4YjI0YjogJ2JsYWtlMnMtODgnLFxuICAweGIyNGM6ICdibGFrZTJzLTk2JyxcbiAgMHhiMjRkOiAnYmxha2Uycy0xMDQnLFxuICAweGIyNGU6ICdibGFrZTJzLTExMicsXG4gIDB4YjI0ZjogJ2JsYWtlMnMtMTIwJyxcbiAgMHhiMjUwOiAnYmxha2Uycy0xMjgnLFxuICAweGIyNTE6ICdibGFrZTJzLTEzNicsXG4gIDB4YjI1MjogJ2JsYWtlMnMtMTQ0JyxcbiAgMHhiMjUzOiAnYmxha2Uycy0xNTInLFxuICAweGIyNTQ6ICdibGFrZTJzLTE2MCcsXG4gIDB4YjI1NTogJ2JsYWtlMnMtMTY4JyxcbiAgMHhiMjU2OiAnYmxha2Uycy0xNzYnLFxuICAweGIyNTc6ICdibGFrZTJzLTE4NCcsXG4gIDB4YjI1ODogJ2JsYWtlMnMtMTkyJyxcbiAgMHhiMjU5OiAnYmxha2Uycy0yMDAnLFxuICAweGIyNWE6ICdibGFrZTJzLTIwOCcsXG4gIDB4YjI1YjogJ2JsYWtlMnMtMjE2JyxcbiAgMHhiMjVjOiAnYmxha2Uycy0yMjQnLFxuICAweGIyNWQ6ICdibGFrZTJzLTIzMicsXG4gIDB4YjI1ZTogJ2JsYWtlMnMtMjQwJyxcbiAgMHhiMjVmOiAnYmxha2Uycy0yNDgnLFxuICAweGIyNjA6ICdibGFrZTJzLTI1NicsXG5cbiAgLy8gc2tlaW5cbiAgMHhiMzAxOiAnU2tlaW4yNTYtOCcsXG4gIDB4YjMwMjogJ1NrZWluMjU2LTE2JyxcbiAgMHhiMzAzOiAnU2tlaW4yNTYtMjQnLFxuICAweGIzMDQ6ICdTa2VpbjI1Ni0zMicsXG4gIDB4YjMwNTogJ1NrZWluMjU2LTQwJyxcbiAgMHhiMzA2OiAnU2tlaW4yNTYtNDgnLFxuICAweGIzMDc6ICdTa2VpbjI1Ni01NicsXG4gIDB4YjMwODogJ1NrZWluMjU2LTY0JyxcbiAgMHhiMzA5OiAnU2tlaW4yNTYtNzInLFxuICAweGIzMGE6ICdTa2VpbjI1Ni04MCcsXG4gIDB4YjMwYjogJ1NrZWluMjU2LTg4JyxcbiAgMHhiMzBjOiAnU2tlaW4yNTYtOTYnLFxuICAweGIzMGQ6ICdTa2VpbjI1Ni0xMDQnLFxuICAweGIzMGU6ICdTa2VpbjI1Ni0xMTInLFxuICAweGIzMGY6ICdTa2VpbjI1Ni0xMjAnLFxuICAweGIzMTA6ICdTa2VpbjI1Ni0xMjgnLFxuICAweGIzMTE6ICdTa2VpbjI1Ni0xMzYnLFxuICAweGIzMTI6ICdTa2VpbjI1Ni0xNDQnLFxuICAweGIzMTM6ICdTa2VpbjI1Ni0xNTInLFxuICAweGIzMTQ6ICdTa2VpbjI1Ni0xNjAnLFxuICAweGIzMTU6ICdTa2VpbjI1Ni0xNjgnLFxuICAweGIzMTY6ICdTa2VpbjI1Ni0xNzYnLFxuICAweGIzMTc6ICdTa2VpbjI1Ni0xODQnLFxuICAweGIzMTg6ICdTa2VpbjI1Ni0xOTInLFxuICAweGIzMTk6ICdTa2VpbjI1Ni0yMDAnLFxuICAweGIzMWE6ICdTa2VpbjI1Ni0yMDgnLFxuICAweGIzMWI6ICdTa2VpbjI1Ni0yMTYnLFxuICAweGIzMWM6ICdTa2VpbjI1Ni0yMjQnLFxuICAweGIzMWQ6ICdTa2VpbjI1Ni0yMzInLFxuICAweGIzMWU6ICdTa2VpbjI1Ni0yNDAnLFxuICAweGIzMWY6ICdTa2VpbjI1Ni0yNDgnLFxuICAweGIzMjA6ICdTa2VpbjI1Ni0yNTYnLFxuICAweGIzMjE6ICdTa2VpbjUxMi04JyxcbiAgMHhiMzIyOiAnU2tlaW41MTItMTYnLFxuICAweGIzMjM6ICdTa2VpbjUxMi0yNCcsXG4gIDB4YjMyNDogJ1NrZWluNTEyLTMyJyxcbiAgMHhiMzI1OiAnU2tlaW41MTItNDAnLFxuICAweGIzMjY6ICdTa2VpbjUxMi00OCcsXG4gIDB4YjMyNzogJ1NrZWluNTEyLTU2JyxcbiAgMHhiMzI4OiAnU2tlaW41MTItNjQnLFxuICAweGIzMjk6ICdTa2VpbjUxMi03MicsXG4gIDB4YjMyYTogJ1NrZWluNTEyLTgwJyxcbiAgMHhiMzJiOiAnU2tlaW41MTItODgnLFxuICAweGIzMmM6ICdTa2VpbjUxMi05NicsXG4gIDB4YjMyZDogJ1NrZWluNTEyLTEwNCcsXG4gIDB4YjMyZTogJ1NrZWluNTEyLTExMicsXG4gIDB4YjMyZjogJ1NrZWluNTEyLTEyMCcsXG4gIDB4YjMzMDogJ1NrZWluNTEyLTEyOCcsXG4gIDB4YjMzMTogJ1NrZWluNTEyLTEzNicsXG4gIDB4YjMzMjogJ1NrZWluNTEyLTE0NCcsXG4gIDB4YjMzMzogJ1NrZWluNTEyLTE1MicsXG4gIDB4YjMzNDogJ1NrZWluNTEyLTE2MCcsXG4gIDB4YjMzNTogJ1NrZWluNTEyLTE2OCcsXG4gIDB4YjMzNjogJ1NrZWluNTEyLTE3NicsXG4gIDB4YjMzNzogJ1NrZWluNTEyLTE4NCcsXG4gIDB4YjMzODogJ1NrZWluNTEyLTE5MicsXG4gIDB4YjMzOTogJ1NrZWluNTEyLTIwMCcsXG4gIDB4YjMzYTogJ1NrZWluNTEyLTIwOCcsXG4gIDB4YjMzYjogJ1NrZWluNTEyLTIxNicsXG4gIDB4YjMzYzogJ1NrZWluNTEyLTIyNCcsXG4gIDB4YjMzZDogJ1NrZWluNTEyLTIzMicsXG4gIDB4YjMzZTogJ1NrZWluNTEyLTI0MCcsXG4gIDB4YjMzZjogJ1NrZWluNTEyLTI0OCcsXG4gIDB4YjM0MDogJ1NrZWluNTEyLTI1NicsXG4gIDB4YjM0MTogJ1NrZWluNTEyLTI2NCcsXG4gIDB4YjM0MjogJ1NrZWluNTEyLTI3MicsXG4gIDB4YjM0MzogJ1NrZWluNTEyLTI4MCcsXG4gIDB4YjM0NDogJ1NrZWluNTEyLTI4OCcsXG4gIDB4YjM0NTogJ1NrZWluNTEyLTI5NicsXG4gIDB4YjM0NjogJ1NrZWluNTEyLTMwNCcsXG4gIDB4YjM0NzogJ1NrZWluNTEyLTMxMicsXG4gIDB4YjM0ODogJ1NrZWluNTEyLTMyMCcsXG4gIDB4YjM0OTogJ1NrZWluNTEyLTMyOCcsXG4gIDB4YjM0YTogJ1NrZWluNTEyLTMzNicsXG4gIDB4YjM0YjogJ1NrZWluNTEyLTM0NCcsXG4gIDB4YjM0YzogJ1NrZWluNTEyLTM1MicsXG4gIDB4YjM0ZDogJ1NrZWluNTEyLTM2MCcsXG4gIDB4YjM0ZTogJ1NrZWluNTEyLTM2OCcsXG4gIDB4YjM0ZjogJ1NrZWluNTEyLTM3NicsXG4gIDB4YjM1MDogJ1NrZWluNTEyLTM4NCcsXG4gIDB4YjM1MTogJ1NrZWluNTEyLTM5MicsXG4gIDB4YjM1MjogJ1NrZWluNTEyLTQwMCcsXG4gIDB4YjM1MzogJ1NrZWluNTEyLTQwOCcsXG4gIDB4YjM1NDogJ1NrZWluNTEyLTQxNicsXG4gIDB4YjM1NTogJ1NrZWluNTEyLTQyNCcsXG4gIDB4YjM1NjogJ1NrZWluNTEyLTQzMicsXG4gIDB4YjM1NzogJ1NrZWluNTEyLTQ0MCcsXG4gIDB4YjM1ODogJ1NrZWluNTEyLTQ0OCcsXG4gIDB4YjM1OTogJ1NrZWluNTEyLTQ1NicsXG4gIDB4YjM1YTogJ1NrZWluNTEyLTQ2NCcsXG4gIDB4YjM1YjogJ1NrZWluNTEyLTQ3MicsXG4gIDB4YjM1YzogJ1NrZWluNTEyLTQ4MCcsXG4gIDB4YjM1ZDogJ1NrZWluNTEyLTQ4OCcsXG4gIDB4YjM1ZTogJ1NrZWluNTEyLTQ5NicsXG4gIDB4YjM1ZjogJ1NrZWluNTEyLTUwNCcsXG4gIDB4YjM2MDogJ1NrZWluNTEyLTUxMicsXG4gIDB4YjM2MTogJ1NrZWluMTAyNC04JyxcbiAgMHhiMzYyOiAnU2tlaW4xMDI0LTE2JyxcbiAgMHhiMzYzOiAnU2tlaW4xMDI0LTI0JyxcbiAgMHhiMzY0OiAnU2tlaW4xMDI0LTMyJyxcbiAgMHhiMzY1OiAnU2tlaW4xMDI0LTQwJyxcbiAgMHhiMzY2OiAnU2tlaW4xMDI0LTQ4JyxcbiAgMHhiMzY3OiAnU2tlaW4xMDI0LTU2JyxcbiAgMHhiMzY4OiAnU2tlaW4xMDI0LTY0JyxcbiAgMHhiMzY5OiAnU2tlaW4xMDI0LTcyJyxcbiAgMHhiMzZhOiAnU2tlaW4xMDI0LTgwJyxcbiAgMHhiMzZiOiAnU2tlaW4xMDI0LTg4JyxcbiAgMHhiMzZjOiAnU2tlaW4xMDI0LTk2JyxcbiAgMHhiMzZkOiAnU2tlaW4xMDI0LTEwNCcsXG4gIDB4YjM2ZTogJ1NrZWluMTAyNC0xMTInLFxuICAweGIzNmY6ICdTa2VpbjEwMjQtMTIwJyxcbiAgMHhiMzcwOiAnU2tlaW4xMDI0LTEyOCcsXG4gIDB4YjM3MTogJ1NrZWluMTAyNC0xMzYnLFxuICAweGIzNzI6ICdTa2VpbjEwMjQtMTQ0JyxcbiAgMHhiMzczOiAnU2tlaW4xMDI0LTE1MicsXG4gIDB4YjM3NDogJ1NrZWluMTAyNC0xNjAnLFxuICAweGIzNzU6ICdTa2VpbjEwMjQtMTY4JyxcbiAgMHhiMzc2OiAnU2tlaW4xMDI0LTE3NicsXG4gIDB4YjM3NzogJ1NrZWluMTAyNC0xODQnLFxuICAweGIzNzg6ICdTa2VpbjEwMjQtMTkyJyxcbiAgMHhiMzc5OiAnU2tlaW4xMDI0LTIwMCcsXG4gIDB4YjM3YTogJ1NrZWluMTAyNC0yMDgnLFxuICAweGIzN2I6ICdTa2VpbjEwMjQtMjE2JyxcbiAgMHhiMzdjOiAnU2tlaW4xMDI0LTIyNCcsXG4gIDB4YjM3ZDogJ1NrZWluMTAyNC0yMzInLFxuICAweGIzN2U6ICdTa2VpbjEwMjQtMjQwJyxcbiAgMHhiMzdmOiAnU2tlaW4xMDI0LTI0OCcsXG4gIDB4YjM4MDogJ1NrZWluMTAyNC0yNTYnLFxuICAweGIzODE6ICdTa2VpbjEwMjQtMjY0JyxcbiAgMHhiMzgyOiAnU2tlaW4xMDI0LTI3MicsXG4gIDB4YjM4MzogJ1NrZWluMTAyNC0yODAnLFxuICAweGIzODQ6ICdTa2VpbjEwMjQtMjg4JyxcbiAgMHhiMzg1OiAnU2tlaW4xMDI0LTI5NicsXG4gIDB4YjM4NjogJ1NrZWluMTAyNC0zMDQnLFxuICAweGIzODc6ICdTa2VpbjEwMjQtMzEyJyxcbiAgMHhiMzg4OiAnU2tlaW4xMDI0LTMyMCcsXG4gIDB4YjM4OTogJ1NrZWluMTAyNC0zMjgnLFxuICAweGIzOGE6ICdTa2VpbjEwMjQtMzM2JyxcbiAgMHhiMzhiOiAnU2tlaW4xMDI0LTM0NCcsXG4gIDB4YjM4YzogJ1NrZWluMTAyNC0zNTInLFxuICAweGIzOGQ6ICdTa2VpbjEwMjQtMzYwJyxcbiAgMHhiMzhlOiAnU2tlaW4xMDI0LTM2OCcsXG4gIDB4YjM4ZjogJ1NrZWluMTAyNC0zNzYnLFxuICAweGIzOTA6ICdTa2VpbjEwMjQtMzg0JyxcbiAgMHhiMzkxOiAnU2tlaW4xMDI0LTM5MicsXG4gIDB4YjM5MjogJ1NrZWluMTAyNC00MDAnLFxuICAweGIzOTM6ICdTa2VpbjEwMjQtNDA4JyxcbiAgMHhiMzk0OiAnU2tlaW4xMDI0LTQxNicsXG4gIDB4YjM5NTogJ1NrZWluMTAyNC00MjQnLFxuICAweGIzOTY6ICdTa2VpbjEwMjQtNDMyJyxcbiAgMHhiMzk3OiAnU2tlaW4xMDI0LTQ0MCcsXG4gIDB4YjM5ODogJ1NrZWluMTAyNC00NDgnLFxuICAweGIzOTk6ICdTa2VpbjEwMjQtNDU2JyxcbiAgMHhiMzlhOiAnU2tlaW4xMDI0LTQ2NCcsXG4gIDB4YjM5YjogJ1NrZWluMTAyNC00NzInLFxuICAweGIzOWM6ICdTa2VpbjEwMjQtNDgwJyxcbiAgMHhiMzlkOiAnU2tlaW4xMDI0LTQ4OCcsXG4gIDB4YjM5ZTogJ1NrZWluMTAyNC00OTYnLFxuICAweGIzOWY6ICdTa2VpbjEwMjQtNTA0JyxcbiAgMHhiM2EwOiAnU2tlaW4xMDI0LTUxMicsXG4gIDB4YjNhMTogJ1NrZWluMTAyNC01MjAnLFxuICAweGIzYTI6ICdTa2VpbjEwMjQtNTI4JyxcbiAgMHhiM2EzOiAnU2tlaW4xMDI0LTUzNicsXG4gIDB4YjNhNDogJ1NrZWluMTAyNC01NDQnLFxuICAweGIzYTU6ICdTa2VpbjEwMjQtNTUyJyxcbiAgMHhiM2E2OiAnU2tlaW4xMDI0LTU2MCcsXG4gIDB4YjNhNzogJ1NrZWluMTAyNC01NjgnLFxuICAweGIzYTg6ICdTa2VpbjEwMjQtNTc2JyxcbiAgMHhiM2E5OiAnU2tlaW4xMDI0LTU4NCcsXG4gIDB4YjNhYTogJ1NrZWluMTAyNC01OTInLFxuICAweGIzYWI6ICdTa2VpbjEwMjQtNjAwJyxcbiAgMHhiM2FjOiAnU2tlaW4xMDI0LTYwOCcsXG4gIDB4YjNhZDogJ1NrZWluMTAyNC02MTYnLFxuICAweGIzYWU6ICdTa2VpbjEwMjQtNjI0JyxcbiAgMHhiM2FmOiAnU2tlaW4xMDI0LTYzMicsXG4gIDB4YjNiMDogJ1NrZWluMTAyNC02NDAnLFxuICAweGIzYjE6ICdTa2VpbjEwMjQtNjQ4JyxcbiAgMHhiM2IyOiAnU2tlaW4xMDI0LTY1NicsXG4gIDB4YjNiMzogJ1NrZWluMTAyNC02NjQnLFxuICAweGIzYjQ6ICdTa2VpbjEwMjQtNjcyJyxcbiAgMHhiM2I1OiAnU2tlaW4xMDI0LTY4MCcsXG4gIDB4YjNiNjogJ1NrZWluMTAyNC02ODgnLFxuICAweGIzYjc6ICdTa2VpbjEwMjQtNjk2JyxcbiAgMHhiM2I4OiAnU2tlaW4xMDI0LTcwNCcsXG4gIDB4YjNiOTogJ1NrZWluMTAyNC03MTInLFxuICAweGIzYmE6ICdTa2VpbjEwMjQtNzIwJyxcbiAgMHhiM2JiOiAnU2tlaW4xMDI0LTcyOCcsXG4gIDB4YjNiYzogJ1NrZWluMTAyNC03MzYnLFxuICAweGIzYmQ6ICdTa2VpbjEwMjQtNzQ0JyxcbiAgMHhiM2JlOiAnU2tlaW4xMDI0LTc1MicsXG4gIDB4YjNiZjogJ1NrZWluMTAyNC03NjAnLFxuICAweGIzYzA6ICdTa2VpbjEwMjQtNzY4JyxcbiAgMHhiM2MxOiAnU2tlaW4xMDI0LTc3NicsXG4gIDB4YjNjMjogJ1NrZWluMTAyNC03ODQnLFxuICAweGIzYzM6ICdTa2VpbjEwMjQtNzkyJyxcbiAgMHhiM2M0OiAnU2tlaW4xMDI0LTgwMCcsXG4gIDB4YjNjNTogJ1NrZWluMTAyNC04MDgnLFxuICAweGIzYzY6ICdTa2VpbjEwMjQtODE2JyxcbiAgMHhiM2M3OiAnU2tlaW4xMDI0LTgyNCcsXG4gIDB4YjNjODogJ1NrZWluMTAyNC04MzInLFxuICAweGIzYzk6ICdTa2VpbjEwMjQtODQwJyxcbiAgMHhiM2NhOiAnU2tlaW4xMDI0LTg0OCcsXG4gIDB4YjNjYjogJ1NrZWluMTAyNC04NTYnLFxuICAweGIzY2M6ICdTa2VpbjEwMjQtODY0JyxcbiAgMHhiM2NkOiAnU2tlaW4xMDI0LTg3MicsXG4gIDB4YjNjZTogJ1NrZWluMTAyNC04ODAnLFxuICAweGIzY2Y6ICdTa2VpbjEwMjQtODg4JyxcbiAgMHhiM2QwOiAnU2tlaW4xMDI0LTg5NicsXG4gIDB4YjNkMTogJ1NrZWluMTAyNC05MDQnLFxuICAweGIzZDI6ICdTa2VpbjEwMjQtOTEyJyxcbiAgMHhiM2QzOiAnU2tlaW4xMDI0LTkyMCcsXG4gIDB4YjNkNDogJ1NrZWluMTAyNC05MjgnLFxuICAweGIzZDU6ICdTa2VpbjEwMjQtOTM2JyxcbiAgMHhiM2Q2OiAnU2tlaW4xMDI0LTk0NCcsXG4gIDB4YjNkNzogJ1NrZWluMTAyNC05NTInLFxuICAweGIzZDg6ICdTa2VpbjEwMjQtOTYwJyxcbiAgMHhiM2Q5OiAnU2tlaW4xMDI0LTk2OCcsXG4gIDB4YjNkYTogJ1NrZWluMTAyNC05NzYnLFxuICAweGIzZGI6ICdTa2VpbjEwMjQtOTg0JyxcbiAgMHhiM2RjOiAnU2tlaW4xMDI0LTk5MicsXG4gIDB4YjNkZDogJ1NrZWluMTAyNC0xMDAwJyxcbiAgMHhiM2RlOiAnU2tlaW4xMDI0LTEwMDgnLFxuICAweGIzZGY6ICdTa2VpbjEwMjQtMTAxNicsXG4gIDB4YjNlMDogJ1NrZWluMTAyNC0xMDI0J1xufSlcblxuZXhwb3J0cy5kZWZhdWx0TGVuZ3RocyA9IE9iamVjdC5mcmVlemUoe1xuICAweDExOiAyMCxcbiAgMHgxMjogMzIsXG4gIDB4MTM6IDY0LFxuICAweDU2OiAzMixcbiAgMHgxNzogMjgsXG4gIDB4MTY6IDMyLFxuICAweDE1OiA0OCxcbiAgMHgxNDogNjQsXG4gIDB4MTg6IDMyLFxuICAweDE5OiA2NCxcbiAgMHgxQTogMjgsXG4gIDB4MUI6IDMyLFxuICAweDFDOiA0OCxcbiAgMHgxRDogNjQsXG4gIDB4MjI6IDMyLFxuXG4gIDB4YjIwMTogMHgwMSxcbiAgMHhiMjAyOiAweDAyLFxuICAweGIyMDM6IDB4MDMsXG4gIDB4YjIwNDogMHgwNCxcbiAgMHhiMjA1OiAweDA1LFxuICAweGIyMDY6IDB4MDYsXG4gIDB4YjIwNzogMHgwNyxcbiAgMHhiMjA4OiAweDA4LFxuICAweGIyMDk6IDB4MDksXG4gIDB4YjIwYTogMHgwYSxcbiAgMHhiMjBiOiAweDBiLFxuICAweGIyMGM6IDB4MGMsXG4gIDB4YjIwZDogMHgwZCxcbiAgMHhiMjBlOiAweDBlLFxuICAweGIyMGY6IDB4MGYsXG4gIDB4YjIxMDogMHgxMCxcbiAgMHhiMjExOiAweDExLFxuICAweGIyMTI6IDB4MTIsXG4gIDB4YjIxMzogMHgxMyxcbiAgMHhiMjE0OiAweDE0LFxuICAweGIyMTU6IDB4MTUsXG4gIDB4YjIxNjogMHgxNixcbiAgMHhiMjE3OiAweDE3LFxuICAweGIyMTg6IDB4MTgsXG4gIDB4YjIxOTogMHgxOSxcbiAgMHhiMjFhOiAweDFhLFxuICAweGIyMWI6IDB4MWIsXG4gIDB4YjIxYzogMHgxYyxcbiAgMHhiMjFkOiAweDFkLFxuICAweGIyMWU6IDB4MWUsXG4gIDB4YjIxZjogMHgxZixcbiAgMHhiMjIwOiAweDIwLFxuICAweGIyMjE6IDB4MjEsXG4gIDB4YjIyMjogMHgyMixcbiAgMHhiMjIzOiAweDIzLFxuICAweGIyMjQ6IDB4MjQsXG4gIDB4YjIyNTogMHgyNSxcbiAgMHhiMjI2OiAweDI2LFxuICAweGIyMjc6IDB4MjcsXG4gIDB4YjIyODogMHgyOCxcbiAgMHhiMjI5OiAweDI5LFxuICAweGIyMmE6IDB4MmEsXG4gIDB4YjIyYjogMHgyYixcbiAgMHhiMjJjOiAweDJjLFxuICAweGIyMmQ6IDB4MmQsXG4gIDB4YjIyZTogMHgyZSxcbiAgMHhiMjJmOiAweDJmLFxuICAweGIyMzA6IDB4MzAsXG4gIDB4YjIzMTogMHgzMSxcbiAgMHhiMjMyOiAweDMyLFxuICAweGIyMzM6IDB4MzMsXG4gIDB4YjIzNDogMHgzNCxcbiAgMHhiMjM1OiAweDM1LFxuICAweGIyMzY6IDB4MzYsXG4gIDB4YjIzNzogMHgzNyxcbiAgMHhiMjM4OiAweDM4LFxuICAweGIyMzk6IDB4MzksXG4gIDB4YjIzYTogMHgzYSxcbiAgMHhiMjNiOiAweDNiLFxuICAweGIyM2M6IDB4M2MsXG4gIDB4YjIzZDogMHgzZCxcbiAgMHhiMjNlOiAweDNlLFxuICAweGIyM2Y6IDB4M2YsXG4gIDB4YjI0MDogMHg0MCxcbiAgMHhiMjQxOiAweDAxLFxuICAweGIyNDI6IDB4MDIsXG4gIDB4YjI0MzogMHgwMyxcbiAgMHhiMjQ0OiAweDA0LFxuICAweGIyNDU6IDB4MDUsXG4gIDB4YjI0NjogMHgwNixcbiAgMHhiMjQ3OiAweDA3LFxuICAweGIyNDg6IDB4MDgsXG4gIDB4YjI0OTogMHgwOSxcbiAgMHhiMjRhOiAweDBhLFxuICAweGIyNGI6IDB4MGIsXG4gIDB4YjI0YzogMHgwYyxcbiAgMHhiMjRkOiAweDBkLFxuICAweGIyNGU6IDB4MGUsXG4gIDB4YjI0ZjogMHgwZixcbiAgMHhiMjUwOiAweDEwLFxuICAweGIyNTE6IDB4MTEsXG4gIDB4YjI1MjogMHgxMixcbiAgMHhiMjUzOiAweDEzLFxuICAweGIyNTQ6IDB4MTQsXG4gIDB4YjI1NTogMHgxNSxcbiAgMHhiMjU2OiAweDE2LFxuICAweGIyNTc6IDB4MTcsXG4gIDB4YjI1ODogMHgxOCxcbiAgMHhiMjU5OiAweDE5LFxuICAweGIyNWE6IDB4MWEsXG4gIDB4YjI1YjogMHgxYixcbiAgMHhiMjVjOiAweDFjLFxuICAweGIyNWQ6IDB4MWQsXG4gIDB4YjI1ZTogMHgxZSxcbiAgMHhiMjVmOiAweDFmLFxuICAweGIyNjA6IDB4MjAsXG4gIDB4YjMwMTogMHgwMSxcbiAgMHhiMzAyOiAweDAyLFxuICAweGIzMDM6IDB4MDMsXG4gIDB4YjMwNDogMHgwNCxcbiAgMHhiMzA1OiAweDA1LFxuICAweGIzMDY6IDB4MDYsXG4gIDB4YjMwNzogMHgwNyxcbiAgMHhiMzA4OiAweDA4LFxuICAweGIzMDk6IDB4MDksXG4gIDB4YjMwYTogMHgwYSxcbiAgMHhiMzBiOiAweDBiLFxuICAweGIzMGM6IDB4MGMsXG4gIDB4YjMwZDogMHgwZCxcbiAgMHhiMzBlOiAweDBlLFxuICAweGIzMGY6IDB4MGYsXG4gIDB4YjMxMDogMHgxMCxcbiAgMHhiMzExOiAweDExLFxuICAweGIzMTI6IDB4MTIsXG4gIDB4YjMxMzogMHgxMyxcbiAgMHhiMzE0OiAweDE0LFxuICAweGIzMTU6IDB4MTUsXG4gIDB4YjMxNjogMHgxNixcbiAgMHhiMzE3OiAweDE3LFxuICAweGIzMTg6IDB4MTgsXG4gIDB4YjMxOTogMHgxOSxcbiAgMHhiMzFhOiAweDFhLFxuICAweGIzMWI6IDB4MWIsXG4gIDB4YjMxYzogMHgxYyxcbiAgMHhiMzFkOiAweDFkLFxuICAweGIzMWU6IDB4MWUsXG4gIDB4YjMxZjogMHgxZixcbiAgMHhiMzIwOiAweDIwLFxuICAweGIzMjE6IDB4MDEsXG4gIDB4YjMyMjogMHgwMixcbiAgMHhiMzIzOiAweDAzLFxuICAweGIzMjQ6IDB4MDQsXG4gIDB4YjMyNTogMHgwNSxcbiAgMHhiMzI2OiAweDA2LFxuICAweGIzMjc6IDB4MDcsXG4gIDB4YjMyODogMHgwOCxcbiAgMHhiMzI5OiAweDA5LFxuICAweGIzMmE6IDB4MGEsXG4gIDB4YjMyYjogMHgwYixcbiAgMHhiMzJjOiAweDBjLFxuICAweGIzMmQ6IDB4MGQsXG4gIDB4YjMyZTogMHgwZSxcbiAgMHhiMzJmOiAweDBmLFxuICAweGIzMzA6IDB4MTAsXG4gIDB4YjMzMTogMHgxMSxcbiAgMHhiMzMyOiAweDEyLFxuICAweGIzMzM6IDB4MTMsXG4gIDB4YjMzNDogMHgxNCxcbiAgMHhiMzM1OiAweDE1LFxuICAweGIzMzY6IDB4MTYsXG4gIDB4YjMzNzogMHgxNyxcbiAgMHhiMzM4OiAweDE4LFxuICAweGIzMzk6IDB4MTksXG4gIDB4YjMzYTogMHgxYSxcbiAgMHhiMzNiOiAweDFiLFxuICAweGIzM2M6IDB4MWMsXG4gIDB4YjMzZDogMHgxZCxcbiAgMHhiMzNlOiAweDFlLFxuICAweGIzM2Y6IDB4MWYsXG4gIDB4YjM0MDogMHgyMCxcbiAgMHhiMzQxOiAweDIxLFxuICAweGIzNDI6IDB4MjIsXG4gIDB4YjM0MzogMHgyMyxcbiAgMHhiMzQ0OiAweDI0LFxuICAweGIzNDU6IDB4MjUsXG4gIDB4YjM0NjogMHgyNixcbiAgMHhiMzQ3OiAweDI3LFxuICAweGIzNDg6IDB4MjgsXG4gIDB4YjM0OTogMHgyOSxcbiAgMHhiMzRhOiAweDJhLFxuICAweGIzNGI6IDB4MmIsXG4gIDB4YjM0YzogMHgyYyxcbiAgMHhiMzRkOiAweDJkLFxuICAweGIzNGU6IDB4MmUsXG4gIDB4YjM0ZjogMHgyZixcbiAgMHhiMzUwOiAweDMwLFxuICAweGIzNTE6IDB4MzEsXG4gIDB4YjM1MjogMHgzMixcbiAgMHhiMzUzOiAweDMzLFxuICAweGIzNTQ6IDB4MzQsXG4gIDB4YjM1NTogMHgzNSxcbiAgMHhiMzU2OiAweDM2LFxuICAweGIzNTc6IDB4MzcsXG4gIDB4YjM1ODogMHgzOCxcbiAgMHhiMzU5OiAweDM5LFxuICAweGIzNWE6IDB4M2EsXG4gIDB4YjM1YjogMHgzYixcbiAgMHhiMzVjOiAweDNjLFxuICAweGIzNWQ6IDB4M2QsXG4gIDB4YjM1ZTogMHgzZSxcbiAgMHhiMzVmOiAweDNmLFxuICAweGIzNjA6IDB4NDAsXG4gIDB4YjM2MTogMHgwMSxcbiAgMHhiMzYyOiAweDAyLFxuICAweGIzNjM6IDB4MDMsXG4gIDB4YjM2NDogMHgwNCxcbiAgMHhiMzY1OiAweDA1LFxuICAweGIzNjY6IDB4MDYsXG4gIDB4YjM2NzogMHgwNyxcbiAgMHhiMzY4OiAweDA4LFxuICAweGIzNjk6IDB4MDksXG4gIDB4YjM2YTogMHgwYSxcbiAgMHhiMzZiOiAweDBiLFxuICAweGIzNmM6IDB4MGMsXG4gIDB4YjM2ZDogMHgwZCxcbiAgMHhiMzZlOiAweDBlLFxuICAweGIzNmY6IDB4MGYsXG4gIDB4YjM3MDogMHgxMCxcbiAgMHhiMzcxOiAweDExLFxuICAweGIzNzI6IDB4MTIsXG4gIDB4YjM3MzogMHgxMyxcbiAgMHhiMzc0OiAweDE0LFxuICAweGIzNzU6IDB4MTUsXG4gIDB4YjM3NjogMHgxNixcbiAgMHhiMzc3OiAweDE3LFxuICAweGIzNzg6IDB4MTgsXG4gIDB4YjM3OTogMHgxOSxcbiAgMHhiMzdhOiAweDFhLFxuICAweGIzN2I6IDB4MWIsXG4gIDB4YjM3YzogMHgxYyxcbiAgMHhiMzdkOiAweDFkLFxuICAweGIzN2U6IDB4MWUsXG4gIDB4YjM3ZjogMHgxZixcbiAgMHhiMzgwOiAweDIwLFxuICAweGIzODE6IDB4MjEsXG4gIDB4YjM4MjogMHgyMixcbiAgMHhiMzgzOiAweDIzLFxuICAweGIzODQ6IDB4MjQsXG4gIDB4YjM4NTogMHgyNSxcbiAgMHhiMzg2OiAweDI2LFxuICAweGIzODc6IDB4MjcsXG4gIDB4YjM4ODogMHgyOCxcbiAgMHhiMzg5OiAweDI5LFxuICAweGIzOGE6IDB4MmEsXG4gIDB4YjM4YjogMHgyYixcbiAgMHhiMzhjOiAweDJjLFxuICAweGIzOGQ6IDB4MmQsXG4gIDB4YjM4ZTogMHgyZSxcbiAgMHhiMzhmOiAweDJmLFxuICAweGIzOTA6IDB4MzAsXG4gIDB4YjM5MTogMHgzMSxcbiAgMHhiMzkyOiAweDMyLFxuICAweGIzOTM6IDB4MzMsXG4gIDB4YjM5NDogMHgzNCxcbiAgMHhiMzk1OiAweDM1LFxuICAweGIzOTY6IDB4MzYsXG4gIDB4YjM5NzogMHgzNyxcbiAgMHhiMzk4OiAweDM4LFxuICAweGIzOTk6IDB4MzksXG4gIDB4YjM5YTogMHgzYSxcbiAgMHhiMzliOiAweDNiLFxuICAweGIzOWM6IDB4M2MsXG4gIDB4YjM5ZDogMHgzZCxcbiAgMHhiMzllOiAweDNlLFxuICAweGIzOWY6IDB4M2YsXG4gIDB4YjNhMDogMHg0MCxcbiAgMHhiM2ExOiAweDQxLFxuICAweGIzYTI6IDB4NDIsXG4gIDB4YjNhMzogMHg0MyxcbiAgMHhiM2E0OiAweDQ0LFxuICAweGIzYTU6IDB4NDUsXG4gIDB4YjNhNjogMHg0NixcbiAgMHhiM2E3OiAweDQ3LFxuICAweGIzYTg6IDB4NDgsXG4gIDB4YjNhOTogMHg0OSxcbiAgMHhiM2FhOiAweDRhLFxuICAweGIzYWI6IDB4NGIsXG4gIDB4YjNhYzogMHg0YyxcbiAgMHhiM2FkOiAweDRkLFxuICAweGIzYWU6IDB4NGUsXG4gIDB4YjNhZjogMHg0ZixcbiAgMHhiM2IwOiAweDUwLFxuICAweGIzYjE6IDB4NTEsXG4gIDB4YjNiMjogMHg1MixcbiAgMHhiM2IzOiAweDUzLFxuICAweGIzYjQ6IDB4NTQsXG4gIDB4YjNiNTogMHg1NSxcbiAgMHhiM2I2OiAweDU2LFxuICAweGIzYjc6IDB4NTcsXG4gIDB4YjNiODogMHg1OCxcbiAgMHhiM2I5OiAweDU5LFxuICAweGIzYmE6IDB4NWEsXG4gIDB4YjNiYjogMHg1YixcbiAgMHhiM2JjOiAweDVjLFxuICAweGIzYmQ6IDB4NWQsXG4gIDB4YjNiZTogMHg1ZSxcbiAgMHhiM2JmOiAweDVmLFxuICAweGIzYzA6IDB4NjAsXG4gIDB4YjNjMTogMHg2MSxcbiAgMHhiM2MyOiAweDYyLFxuICAweGIzYzM6IDB4NjMsXG4gIDB4YjNjNDogMHg2NCxcbiAgMHhiM2M1OiAweDY1LFxuICAweGIzYzY6IDB4NjYsXG4gIDB4YjNjNzogMHg2NyxcbiAgMHhiM2M4OiAweDY4LFxuICAweGIzYzk6IDB4NjksXG4gIDB4YjNjYTogMHg2YSxcbiAgMHhiM2NiOiAweDZiLFxuICAweGIzY2M6IDB4NmMsXG4gIDB4YjNjZDogMHg2ZCxcbiAgMHhiM2NlOiAweDZlLFxuICAweGIzY2Y6IDB4NmYsXG4gIDB4YjNkMDogMHg3MCxcbiAgMHhiM2QxOiAweDcxLFxuICAweGIzZDI6IDB4NzIsXG4gIDB4YjNkMzogMHg3MyxcbiAgMHhiM2Q0OiAweDc0LFxuICAweGIzZDU6IDB4NzUsXG4gIDB4YjNkNjogMHg3NixcbiAgMHhiM2Q3OiAweDc3LFxuICAweGIzZDg6IDB4NzgsXG4gIDB4YjNkOTogMHg3OSxcbiAgMHhiM2RhOiAweDdhLFxuICAweGIzZGI6IDB4N2IsXG4gIDB4YjNkYzogMHg3YyxcbiAgMHhiM2RkOiAweDdkLFxuICAweGIzZGU6IDB4N2UsXG4gIDB4YjNkZjogMHg3ZixcbiAgMHhiM2UwOiAweDgwXG59KVxuIiwiLyoqXG4gKiBNdWx0aWhhc2ggaW1wbGVtZW50YXRpb24gaW4gSmF2YVNjcmlwdC5cbiAqXG4gKiBAbW9kdWxlIG11bHRpaGFzaFxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuXG5jb25zdCBjcyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuZXhwb3J0cy5uYW1lcyA9IGNzLm5hbWVzXG5leHBvcnRzLmNvZGVzID0gY3MuY29kZXNcbmV4cG9ydHMuZGVmYXVsdExlbmd0aHMgPSBjcy5kZWZhdWx0TGVuZ3Roc1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGhleCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0hleFN0cmluZyA9IGZ1bmN0aW9uIHRvSGV4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gaGFzaC50b1N0cmluZygnaGV4Jylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBoZXggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uIGZyb21IZXhTdHJpbmcgKGhhc2gpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2gsICdoZXgnKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGJhc2U1OCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0I1OFN0cmluZyA9IGZ1bmN0aW9uIHRvQjU4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoaGFzaClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBiYXNlNTggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmZyb21CNThTdHJpbmcgPSBmdW5jdGlvbiBmcm9tQjU4U3RyaW5nIChoYXNoKSB7XG4gIGxldCBlbmNvZGVkID0gaGFzaFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgZW5jb2RlZCA9IGhhc2gudG9TdHJpbmcoKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJzNTguZGVjb2RlKGVuY29kZWQpKVxufVxuXG4vKipcbiAqIERlY29kZSBhIGhhc2ggZnJvbSB0aGUgZ2l2ZW4gbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm5zIHt7Y29kZTogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyLCBkaWdlc3Q6IEJ1ZmZlcn19IHJlc3VsdFxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmKSB7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihidWYpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKGJ1Zi5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggdG9vIHNob3J0LiBtdXN0IGJlID4gMyBieXRlcy4nKVxuICB9XG5cbiAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAoIWV4cG9ydHMuaXNWYWxpZENvZGUoY29kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCB1bmtub3duIGZ1bmN0aW9uIGNvZGU6IDB4JHtjb2RlLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGNvbnN0IGxlbiA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAobGVuIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIGludmFsaWQgbGVuZ3RoOiAweCR7bGVuLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBsZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCBsZW5ndGggaW5jb25zaXN0ZW50OiAweCR7YnVmLnRvU3RyaW5nKCdoZXgnKX1gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBjb2RlLFxuICAgIG5hbWU6IGNzLmNvZGVzW2NvZGVdLFxuICAgIGxlbmd0aDogbGVuLFxuICAgIGRpZ2VzdDogYnVmXG4gIH1cbn1cblxuLyoqXG4gKiAgRW5jb2RlIGEgaGFzaCBkaWdlc3QgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGNvZGUuXG4gKlxuICogPiAqKk5vdGU6KiogdGhlIGxlbmd0aCBpcyBkZXJpdmVkIGZyb20gdGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGlnZXN0XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKGRpZ2VzdCwgY29kZSwgbGVuZ3RoKSB7XG4gIGlmICghZGlnZXN0IHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIGVuY29kZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gYXJnczogZGlnZXN0LCBjb2RlJylcbiAgfVxuXG4gIC8vIGVuc3VyZSBpdCdzIGEgaGFzaGZ1bmN0aW9uIGNvZGUuXG4gIGNvbnN0IGhhc2hmbiA9IGV4cG9ydHMuY29lcmNlQ29kZShjb2RlKVxuXG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihkaWdlc3QpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAobGVuZ3RoID09IG51bGwpIHtcbiAgICBsZW5ndGggPSBkaWdlc3QubGVuZ3RoXG4gIH1cblxuICBpZiAobGVuZ3RoICYmIGRpZ2VzdC5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IGxlbmd0aCBzaG91bGQgYmUgZXF1YWwgdG8gc3BlY2lmaWVkIGxlbmd0aC4nKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoaGFzaGZuKSksXG4gICAgQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShsZW5ndGgpKSxcbiAgICBkaWdlc3RcbiAgXSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGhhc2ggZnVuY3Rpb24gbmFtZSBpbnRvIHRoZSBtYXRjaGluZyBjb2RlLlxuICogSWYgcGFzc2VkIGEgbnVtYmVyIGl0IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgaWYgaXQncyBhIHZhbGlkIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuY29lcmNlQ29kZSA9IGZ1bmN0aW9uIGNvZXJjZUNvZGUgKG5hbWUpIHtcbiAgbGV0IGNvZGUgPSBuYW1lXG5cbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGlmIChjcy5uYW1lc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZ1bmN0aW9uIG5hbWVkOiAke25hbWV9YClcbiAgICB9XG4gICAgY29kZSA9IGNzLm5hbWVzW25hbWVdXG4gIH1cblxuICBpZiAodHlwZW9mIGNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIYXNoIGZ1bmN0aW9uIGNvZGUgc2hvdWxkIGJlIGEgbnVtYmVyLiBHb3Q6ICR7Y29kZX1gKVxuICB9XG5cbiAgaWYgKGNzLmNvZGVzW2NvZGVdID09PSB1bmRlZmluZWQgJiYgIWV4cG9ydHMuaXNBcHBDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZnVuY3Rpb24gY29kZTogJHtjb2RlfWApXG4gIH1cblxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIENoZWNrcyB3ZXRoZXIgYSBjb2RlIGlzIHBhcnQgb2YgdGhlIGFwcCByYW5nZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc0FwcENvZGUgPSBmdW5jdGlvbiBhcHBDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID4gMCAmJiBjb2RlIDwgMHgxMFxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbXVsdGloYXNoIGNvZGUgaXMgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRDb2RlID0gZnVuY3Rpb24gdmFsaWRDb2RlIChjb2RlKSB7XG4gIGlmIChleHBvcnRzLmlzQXBwQ29kZShjb2RlKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoY3MuY29kZXNbY29kZV0pIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBpcyBhIHZhbGlkIG11bHRpaGFzaC4gVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlIChtdWx0aWhhc2gpIHtcbiAgZXhwb3J0cy5kZWNvZGUobXVsdGloYXNoKSAvLyB0aHJvd3MgaWYgYmFkLlxufVxuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlXG5cbi8qKlxuICogUmV0dXJucyBhIHByZWZpeCBmcm9tIGEgdmFsaWQgbXVsdGloYXNoLiBUaHJvd3MgYW4gZXJyb3IgaWYgaXQgaXMgbm90IHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZXhwb3J0cy5wcmVmaXggPSBmdW5jdGlvbiBwcmVmaXggKG11bHRpaGFzaCkge1xuICB2YWxpZGF0ZShtdWx0aWhhc2gpXG5cbiAgcmV0dXJuIG11bHRpaGFzaC5zbGljZSgwLCAyKVxufVxuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVhZGRpcnI6IHJlcXVpcmUoJy4vbGliL3JlYWRkaXJyJykucmVhZGRpcnIsXG5cbiAgcm1kaXJyOiByZXF1aXJlKCcuL2xpYi9ybWRpcnInKS5ybWRpcnIsXG4gIHJtZGlyczogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1kaXJzLFxuICBybWZpbGVzOiByZXF1aXJlKCcuL2xpYi9ybWRpcnInKS5ybWZpbGVzLFxuXG4gIGNwZGlycjogcmVxdWlyZSgnLi9saWIvY3BkaXJyJykuY3BkaXJyLFxuICBjcGRpcnM6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZGlycyxcbiAgY3BmaWxlczogcmVxdWlyZSgnLi9saWIvY3BkaXJyJykuY3BmaWxlc1xufVxuIiwiXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxudmFyIHJlYWRkaXJyID0gcmVxdWlyZSgnLi9yZWFkZGlycicpLnJlYWRkaXJyXG5cblxuLyoqXG4gKiBDb3B5IGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2UgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldCBwYXRoXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNwZGlyciA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGNiKSB7XG4gIHJlYWRkaXJyKHNwYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgZXhwb3J0cy5jcGRpcnMoc3BhdGgsIHRwYXRoLCBkaXJzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZXhwb3J0cy5jcGZpbGVzKHNwYXRoLCB0cGF0aCwgZmlsZXMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgY2IoKVxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIENvcHkgYSBsaXN0IG9mIGRpcmVjdG9yaWVzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGRpcnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJzID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgZGlycywgY2IpIHtcbiAgZGlycy5zb3J0KClcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBkaXJzW2luZGV4XSlcbiAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgZnMuZXhpc3RzKHJwYXRoLCBmdW5jdGlvbiAoZXhpc3RzKSB7XG4gICAgICBpZiAoZXhpc3RzKSByZXR1cm4gbG9vcCgrK2luZGV4KVxuICAgICAgZnMubWtkaXIocnBhdGgsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIENvcHkgYSBsaXN0IG9mIGZpbGVzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNwZmlsZXMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBmaWxlcywgY2IpIHtcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBmaWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMucmVhZEZpbGUoZmlsZXNbaW5kZXhdLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgdmFyIHJwYXRoID0gcGF0aC5yZWxhdGl2ZShzcGF0aCwgZmlsZXNbaW5kZXhdKVxuICAgICAgcnBhdGggPSBwYXRoLmpvaW4odHBhdGgsIHJwYXRoKVxuICAgICAgZnMud3JpdGVGaWxlKHJwYXRoLCBkYXRhLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcbn1cbiIsIlxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuXG4vKipcbiAqIFJlYWQgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdG9yeSBwYXRoXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXlzfSBkaXJzICYgZmlsZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5yZWFkZGlyciA9IGZ1bmN0aW9uIChkcGF0aCwgY2IpIHtcbiAgdmFyIGRpcnMgPSBbXSwgZmlsZXMgPSBbXVxuICBkaXJzLnB1c2goZHBhdGgpXG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZGlycy5sZW5ndGgpIHJldHVybiBjYihudWxsLCBkaXJzLCBmaWxlcylcbiAgICBmcy5yZWFkZGlyKGRpcnNbaW5kZXhdLCBmdW5jdGlvbiAoZXJyLCBfZmlsZXMpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBnZXRzdGF0KGRpcnNbaW5kZXhdLCBfZmlsZXMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGhcbiAgICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRzdGF0IChkcGF0aCwgX2ZpbGVzLCBjYikge1xuICAgIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PSBfZmlsZXMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgICAgdmFyIGZwYXRoID0gcGF0aC5qb2luKGRwYXRoLCBfZmlsZXNbaW5kZXhdKVxuICAgICAgZnMuc3RhdChmcGF0aCwgZnVuY3Rpb24gKGVyciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICBkaXJzLnB1c2goZnBhdGgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZXMucHVzaChmcGF0aClcbiAgICAgICAgfVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0oMCkpXG4gIH1cbn1cbiIsIlxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHJlYWRkaXJyID0gcmVxdWlyZSgnLi9yZWFkZGlycicpLnJlYWRkaXJyXG5cblxuLyoqXG4gKiBSZW1vdmUgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdG9yeSBwYXRoXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZGlyciA9IGZ1bmN0aW9uIChkcGF0aCwgY2IpIHtcbiAgcmVhZGRpcnIoZHBhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBleHBvcnRzLnJtZmlsZXMoZmlsZXMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBleHBvcnRzLnJtZGlycyhkaXJzLCBjYilcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIFJlbW92ZSBhIGxpc3Qgb2YgZmlsZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBmaWxlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWZpbGVzID0gZnVuY3Rpb24gKGZpbGVzLCBjYikge1xuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy51bmxpbmsoZmlsZXNbaW5kZXhdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgbG9vcCgrK2luZGV4KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogUmVtb3ZlIGEgbGlzdCBvZiBkaXJlY3Rvcmllc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRpcnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1kaXJzID0gZnVuY3Rpb24gKGRpcnMsIGNiKSB7XG4gIGRpcnMuc29ydChkZXNjKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIGZzLnJtZGlyKGRpcnNbaW5kZXhdLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgbG9vcCgrK2luZGV4KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogU29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFcbiAqIEBwYXJhbSB7U3RyaW5nfSBiXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBkZXNjKGEsIGIpIHtcbiAgaWYgKGEgPiBiKSByZXR1cm4gLTFcbiAgaWYgKGEgPCBiKSByZXR1cm4gIDFcbiAgcmV0dXJuIDBcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyLnByb3RvdHlwZSlcblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSkge1xuXHRmb3JjZUNvbG9yID0gZmFsc2U7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSB0cnVlO1xufVxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwIHx8IHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApICE9PSAwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihzdHJlYW0pIHtcblx0aWYgKGZvcmNlQ29sb3IgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoc3RyZWFtICYmICFzdHJlYW0uaXNUVFkgJiYgZm9yY2VDb2xvciAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciA/IDEgOiAwO1xuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gTm9kZS5qcyA3LjUuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiBvZiBOb2RlLmpzIHRvIGluY2x1ZGUgYSBwYXRjaCB0b1xuXHRcdC8vIGxpYnV2IHRoYXQgZW5hYmxlcyAyNTYgY29sb3Igb3V0cHV0IG9uIFdpbmRvd3MuIEFueXRoaW5nIGVhcmxpZXIgYW5kIGl0XG5cdFx0Ly8gd29uJ3Qgd29yay4gSG93ZXZlciwgaGVyZSB3ZSB0YXJnZXQgTm9kZS5qcyA4IGF0IG1pbmltdW0gYXMgaXQgaXMgYW4gTFRTXG5cdFx0Ly8gcmVsZWFzZSwgYW5kIE5vZGUuanMgNyBpcyBub3QuIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3Ncblx0XHQvLyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy4gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZVxuXHRcdC8vIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJylbMF0pID49IDggJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IHBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzpcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0pIHtcblx0Y29uc3QgbGV2ZWwgPSBzdXBwb3J0c0NvbG9yKHN0cmVhbSk7XG5cdHJldHVybiB0cmFuc2xhdGVMZXZlbChsZXZlbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdXBwb3J0c0NvbG9yOiBnZXRTdXBwb3J0TGV2ZWwsXG5cdHN0ZG91dDogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3Rkb3V0KSxcblx0c3RkZXJyOiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRlcnIpXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZWFkXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcblxuZnVuY3Rpb24gcmVhZChidWYsIG9mZnNldCkge1xuICB2YXIgcmVzICAgID0gMFxuICAgICwgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgICAsIHNoaWZ0ICA9IDBcbiAgICAsIGNvdW50ZXIgPSBvZmZzZXRcbiAgICAsIGJcbiAgICAsIGwgPSBidWYubGVuZ3RoXG5cbiAgZG8ge1xuICAgIGlmIChjb3VudGVyID49IGwpIHtcbiAgICAgIHJlYWQuYnl0ZXMgPSAwXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ291bGQgbm90IGRlY29kZSB2YXJpbnQnKVxuICAgIH1cbiAgICBiID0gYnVmW2NvdW50ZXIrK11cbiAgICByZXMgKz0gc2hpZnQgPCAyOFxuICAgICAgPyAoYiAmIFJFU1QpIDw8IHNoaWZ0XG4gICAgICA6IChiICYgUkVTVCkgKiBNYXRoLnBvdygyLCBzaGlmdClcbiAgICBzaGlmdCArPSA3XG4gIH0gd2hpbGUgKGIgPj0gTVNCKVxuXG4gIHJlYWQuYnl0ZXMgPSBjb3VudGVyIC0gb2Zmc2V0XG5cbiAgcmV0dXJuIHJlc1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBlbmNvZGVcblxudmFyIE1TQiA9IDB4ODBcbiAgLCBSRVNUID0gMHg3RlxuICAsIE1TQkFMTCA9IH5SRVNUXG4gICwgSU5UID0gTWF0aC5wb3coMiwgMzEpXG5cbmZ1bmN0aW9uIGVuY29kZShudW0sIG91dCwgb2Zmc2V0KSB7XG4gIG91dCA9IG91dCB8fCBbXVxuICBvZmZzZXQgPSBvZmZzZXQgfHwgMFxuICB2YXIgb2xkT2Zmc2V0ID0gb2Zmc2V0XG5cbiAgd2hpbGUobnVtID49IElOVCkge1xuICAgIG91dFtvZmZzZXQrK10gPSAobnVtICYgMHhGRikgfCBNU0JcbiAgICBudW0gLz0gMTI4XG4gIH1cbiAgd2hpbGUobnVtICYgTVNCQUxMKSB7XG4gICAgb3V0W29mZnNldCsrXSA9IChudW0gJiAweEZGKSB8IE1TQlxuICAgIG51bSA+Pj49IDdcbiAgfVxuICBvdXRbb2Zmc2V0XSA9IG51bSB8IDBcbiAgXG4gIGVuY29kZS5ieXRlcyA9IG9mZnNldCAtIG9sZE9mZnNldCArIDFcbiAgXG4gIHJldHVybiBvdXRcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGVuY29kZTogcmVxdWlyZSgnLi9lbmNvZGUuanMnKVxuICAsIGRlY29kZTogcmVxdWlyZSgnLi9kZWNvZGUuanMnKVxuICAsIGVuY29kaW5nTGVuZ3RoOiByZXF1aXJlKCcuL2xlbmd0aC5qcycpXG59XG4iLCJcbnZhciBOMSA9IE1hdGgucG93KDIsICA3KVxudmFyIE4yID0gTWF0aC5wb3coMiwgMTQpXG52YXIgTjMgPSBNYXRoLnBvdygyLCAyMSlcbnZhciBONCA9IE1hdGgucG93KDIsIDI4KVxudmFyIE41ID0gTWF0aC5wb3coMiwgMzUpXG52YXIgTjYgPSBNYXRoLnBvdygyLCA0MilcbnZhciBONyA9IE1hdGgucG93KDIsIDQ5KVxudmFyIE44ID0gTWF0aC5wb3coMiwgNTYpXG52YXIgTjkgPSBNYXRoLnBvdygyLCA2MylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA8IE4xID8gMVxuICA6IHZhbHVlIDwgTjIgPyAyXG4gIDogdmFsdWUgPCBOMyA/IDNcbiAgOiB2YWx1ZSA8IE40ID8gNFxuICA6IHZhbHVlIDwgTjUgPyA1XG4gIDogdmFsdWUgPCBONiA/IDZcbiAgOiB2YWx1ZSA8IE43ID8gN1xuICA6IHZhbHVlIDwgTjggPyA4XG4gIDogdmFsdWUgPCBOOSA/IDlcbiAgOiAgICAgICAgICAgICAgMTBcbiAgKVxufVxuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBxdWVyeUJ1aWxkZXIgZnJvbSAnLi9xdWVyeUJ1aWxkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5MaXN0KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGNvbnN0IGJhc2VFbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvcGluTGlzdGA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBxdWVyeUJ1aWxkZXIoYmFzZUVuZHBvaW50LCBmaWx0ZXJzKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgdXNlciBwaW4gbGlzdDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZnVuY3Rpb24gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGRhdGVUb1ZhbGlkYXRlKSB7XG4gICAgbGV0IGRhdGVQYXJzZWQgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGRhdGVUb1ZhbGlkYXRlKSk7XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoZGF0ZVBhcnNlZC50b0lTT1N0cmluZygpID09PSBkYXRlVG9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVUb1ZhbGlkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0ZXMgbXVzdCBiZSBpbiB2YWxpZCBJU09fODYwMSBmb3JtYXQnKTtcblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRlcyBtdXN0IGJlIGluIHZhbGlkIElTT184NjAxIGZvcm1hdCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gIHByZXNldCBmaWx0ZXIgdmFsdWVzXG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gJz8nO1xuXG4gICAgbGV0IG1ldGFkYXRhUXVlcnkgPSAnJztcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuaGFzaENvbnRhaW5zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMuaGFzaENvbnRhaW5zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaENvbnRhaW5zIHZhbHVlIGlzIG5vdCBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBoYXNoQ29udGFpbnM9JHtmaWx0ZXJzLmhhc2hDb250YWluc30mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TdGFydD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluRW5kPSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpblN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHVucGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpbkVuZCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnVucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWluKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWluKSB8fCBmaWx0ZXJzLnBpblNpemVNaW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWluIGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWluPSR7ZmlsdGVycy5waW5TaXplTWlufSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNYXgpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNYXgpIHx8IGZpbHRlcnMucGluU2l6ZU1heCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNYXggaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpblNpemVNYXg9JHtmaWx0ZXJzLnBpblNpemVNYXh9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgIT09ICdhbGwnICYmIGZpbHRlcnMuc3RhdHVzICE9PSAncGlubmVkJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3VucGlubmVkJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdHVzIHZhbHVlIG11c3QgYmUgZWl0aGVyOiBhbGwsIHBpbm5lZCwgb3IgdW5waW5uZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZUxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5wYWdlTGltaXQpIHx8IGZpbHRlcnMucGFnZUxpbWl0IDw9IDAgfHwgZmlsdGVycy5wYWdlTGltaXQgPiAxMDAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlTGltaXQgaXMgYSB2YWxpZCBpbnRlZ2VyIGJldHdlZW4gMS0xMDAwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VMaW1pdD0ke3BhcnNlSW50KGZpbHRlcnMucGFnZUxpbWl0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZU9mZnNldCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZU9mZnNldCkgfHwgZmlsdGVycy5wYWdlT2Zmc2V0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VPZmZzZXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VPZmZzZXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VPZmZzZXQpfSZgOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGRlY2ltYWxzIGdldCByb3VuZGVkIHRvIGludGVnZXJzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IGBtZXRhZGF0YVtuYW1lXT0ke2ZpbHRlcnMubWV0YWRhdGEubmFtZX0mYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHBydW5lZEtleVZhbHVlcyA9IHt9OyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSdyZSBvbmx5IGdyYWJiaW5nIHRoZSB2YWx1ZXMgd2Ugd2FudCBmb3IgdGhlIHF1ZXJ5LCBhbmQgbm90aGluZyBleHRyYVxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmlsdGVycy5tZXRhZGF0YS5rZXl2YWx1ZXMpLmZvckVhY2goKGtleVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleVZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGtleVZhbHVlWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlOiAke2tleX0gaXMgbm90IGFuIG9iamVjdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLnZhbHVlIHx8ICF2YWx1ZS5vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZTogJHtrZXl9IG11c3QgaGF2ZSBib3RoIHZhbHVlIGFuZCBvcCBhdHRyaWJ1dGVzYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBib29sZWFucywgb3IgbnVtYmVycycpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGNoZWNrcyB0byBtYWtlIHN1cmUgYWxsIG9mIHRoZSBrZXl2YWx1ZXMgYXJlIHZhbGlkXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9ncmVhdGVyIHRoYW4gb3IgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gb3IgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBlcXVhbCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlcXVhbCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZXEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZXR3ZWVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnNlY29uZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmVjYXVzZSBiZXR3ZWVuIG9wIGNvZGUgd2FzIHBhc3NlZCBpbiwga2V5VmFsdWU6ICR7a2V5VmFsdWVbMF19IG11c3QgaGF2ZSBib3RoIGFsc28gaW5jbHVkZSBhIHNlY29uZFZhbHVlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSBzZWNvbmRWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nLCBib29sZWFuLCBvciBudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdEJldHdlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWNhdXNlIG5vdEJldHdlZW4gb3AgY29kZSB3YXMgcGFzc2VkIGluLCBrZXlWYWx1ZTogJHtrZXlWYWx1ZVswXX0gbXVzdCBoYXZlIGJvdGggYWxzbyBpbmNsdWRlIGEgc2Vjb25kVmFsdWVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHNlY29uZFZhbHVlIG11c3QgYmUgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIG51bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlOiB2YWx1ZS5zZWNvbmRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdExpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBub3QgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90SUxpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaVJlZ2V4cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZSBvcDogJHt2YWx1ZS5vcH0gaXMgbm90IGEgdmFsaWQgb3AgY29kZWApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IG1ldGFkYXRhUXVlcnkgKyBgbWV0YWRhdGFba2V5dmFsdWVzXT0ke0pTT04uc3RyaW5naWZ5KHBydW5lZEtleVZhbHVlcyl9YDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYCR7YmFzZVVybH0ke2ZpbHRlclF1ZXJ5fSR7bWV0YWRhdGFRdWVyeX1gO1xufVxuXG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZXN0QXV0aGVudGljYXRpb24ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgLy8gIHRlc3QgYXV0aGVudGljYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVzZXIncyBwcm92aWRlZCBrZXlzIGFyZSBsZWdpdFxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vZGF0YS90ZXN0QXV0aGVudGljYXRpb25gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXV0aGVudGljYXRpbmc6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VyUGlubmVkRGF0YVRvdGFsKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGxldCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdXNlclBpbm5lZERhdGFUb3RhbGA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHBpbm5lZCBkYXRhIHRvdGFsOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNoUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBpcGZzUGluSGFzaCwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFpcGZzUGluSGFzaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGlmICghaXNJUEZTLmNpZChpcGZzUGluSGFzaCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL2hhc2hQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGlwZnNQaW5IYXNoOiBpcGZzUGluSGFzaCxcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIGhhc2g6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZUhvc3ROb2RlcywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9QaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgcmVxdWlyZWQgZm9yIHBpbm5pbmcgYnkgaGFzaCcpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvUGluKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1BpbiB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkJ5SGFzaGA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaGFzaFRvUGluOiBoYXNoVG9QaW4sXG4gICAgICAgIHBpbmF0YU9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhZGRpbmcgdG8gcGluIHF1ZXVlOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IE5vZGVGb3JtRGF0YSgpO1xuXG4gICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgcmVhZFN0cmVhbSk7XG5cbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkZpbGVUb0lQRlNgO1xuXG4gICAgICAgIGlmICghKHJlYWRTdHJlYW0gaW5zdGFuY2VvZiBzdHJlYW0uUmVhZGFibGUpKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdyZWFkU3RyZWFtIGlzIG5vdCBhIHJlYWRhYmxlIHN0cmVhbScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBmaWxlc1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGJhc2VQYXRoQ29udmVydGVyIGZyb20gJ2Jhc2UtcGF0aC1jb252ZXJ0ZXInO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcmVjdXJzaXZlID0gcmVxdWlyZSgncmVjdXJzaXZlLWZzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZyb21GUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluRmlsZVRvSVBGU2A7XG5cbiAgICAgICAgcmVjdXJzaXZlLnJlYWRkaXJyKHNvdXJjZVBhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAvL2ZvciBlYWNoIGZpbGUgc3RyZWFtLCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGNvcnJlY3QgcmVsYXRpdmUgZmlsZSBwYXRoXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGUpLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVwYXRoOiBiYXNlUGF0aENvbnZlcnRlcihzb3VyY2VQYXRoLCBmaWxlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhT3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSAke2RhdGEuX2JvdW5kYXJ5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgRmlsZSB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5KU09OVG9JUEZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBib2R5LCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGxldCByZXF1ZXN0Qm9keSA9IGJvZHk7XG5cbiAgICBpZiAodHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm9keSBtdXN0IGJlIGEgdmFsaWQgSlNPTiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHBpbmF0YUNvbnRlbnQ6IGJvZHlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5waW5hdGFNZXRhZGF0YSA9IG9wdGlvbnMucGluYXRhTWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5waW5hdGFPcHRpb25zID0gb3B0aW9ucy5waW5hdGFPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkpTT05Ub0lQRlNgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBKU09OIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBxdWVyeUJ1aWxkZXIgZnJvbSAnLi9xdWVyeUJ1aWxkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5Kb2JzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGxldCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluSm9ic2A7XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICBlbmRwb2ludCA9IHF1ZXJ5QnVpbGRlcihlbmRwb2ludCwgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW4gam9iczogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xuICAgIH1cblxuICAgIGxldCBuZXdVcmwgPSBiYXNlVXJsO1xuXG4gICAgbGV0IGZpcnN0RmlsdGVyQXBwbGllZCA9IGZhbHNlOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBcIj9cIiBjaGFyYWN0ZXIgaXMgb25seSBhcHBsaWVkIG9uY2VcblxuICAgIGZ1bmN0aW9uIGFkZEZpbHRlcihuZXdGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGZpcnN0RmlsdGVyQXBwbGllZCkge1xuICAgICAgICAgICAgbmV3VXJsID0gYCR7bmV3VXJsfSYke25ld0ZpbHRlcn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RGaWx0ZXJBcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0/JHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuc29ydCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc29ydCA9PT0gJ0FTQycgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnNvcnQgPT09ICdERVNDJykge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc29ydD0ke2ZpbHRlcnMuc29ydH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvcnQgdmFsdWU6ICR7ZmlsdGVycy5zb3J0fSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgPT09ICdzZWFyY2hpbmcnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdleHBpcmVkJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9mcmVlX2xpbWl0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9tYXhfc2l6ZScgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2ludmFsaWRfb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnYmFkX2hvc3Rfbm9kZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0dXMgdmFsdWU6ICR7ZmlsdGVycy5zdGF0dXN9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSB7XG4gICAgICAgICAgICBpZiAoaXNJUEZTLmNpZChmaWx0ZXJzLmlwZnNfcGluX2hhc2gpKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBpcGZzX3Bpbl9oYXNoPSR7ZmlsdGVycy5pcGZzX3Bpbl9oYXNofWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSVBGUyBoYXNoOiAke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJzLmxpbWl0KSAmJiAoZmlsdGVycy5saW1pdCA+IDApICYmIChmaWx0ZXJzLmxpbWl0IDwgMTAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgbGltaXQ9JHtmaWx0ZXJzLmxpbWl0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7ZmlsdGVycy5saW1pdH0uIFZhbGlkIGxpbWl0cyBhcmUgMS0xMDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLm9mZnNldCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5vZmZzZXQpICYmIChmaWx0ZXJzLm9mZnNldCA+IDApKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBvZmZzZXQ9JHtmaWx0ZXJzLm9mZnNldH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9mZnNldDogJHtmaWx0ZXJzLm9mZnNldH0uIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgaW50ZWdlciBmb3IgdGhlIG9mZnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnBpbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvVW5waW4pIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9VbnBpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1VucGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciByZW1vdmluZyBhIHBpbiBmcm9tIFBpbmF0YScpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvVW5waW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtoYXNoVG9VbnBpbn0gaXMgYW4gaW52YWxpZCBJUEZTIENJRGApO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy91bnBpbi8ke2hhc2hUb1VucGlufWA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5kZWxldGUoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSByZW1vdmluZyBwaW4gZnJvbSBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VyUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBuZXdQaW5Qb2xpY3kpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG5ld1BpblBvbGljeSk7XG5cbiAgICBpZiAoIW5ld1BpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1BpblBvbGljeSBpcyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlIHBpbiBwb2xpY3kgb2YgYSBwaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvdXNlclBpblBvbGljeWA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIHVzZXI6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImV4cG9ydCBjb25zdCBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLnBpbmF0YS5jbG91ZCc7XG4iLCJpbXBvcnQgcGluQnlIYXNoIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2gnO1xuaW1wb3J0IGhhc2hQaW5Qb2xpY3kgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL2hhc2hQaW5Qb2xpY3knO1xuaW1wb3J0IHBpbkZpbGVUb0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMnO1xuaW1wb3J0IHBpbkZyb21GUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRnJvbUZTJztcbmltcG9ydCBwaW5KU09OVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTJztcbmltcG9ydCBwaW5Kb2JzIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMnO1xuaW1wb3J0IHVucGluIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy91bnBpbic7XG5pbXBvcnQgdXNlclBpblBvbGljeSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvdXNlclBpblBvbGljeSc7XG5pbXBvcnQgdGVzdEF1dGhlbnRpY2F0aW9uIGZyb20gJy4vY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHBpbkxpc3QgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcGluTGlzdCc7XG5pbXBvcnQgdXNlclBpbm5lZERhdGFUb3RhbCBmcm9tICcuL2NvbW1hbmRzL2RhdGEvdXNlclBpbm5lZERhdGFUb3RhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbmF0YUNsaWVudChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIGxldCBjbGllbnQgPSB7fTtcblxuICAgIC8vICBzZXR0aW5nIHVwIHRoZSBhY3R1YWwgY2FsbHMgeW91IGNhbiBtYWtlIHVzaW5nIHRoaXMgcGFja2FnZVxuICAgIGNsaWVudC5waW5CeUhhc2ggPSBmdW5jdGlvbiAoaGFzaFRvUGluLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5CeUhhc2gocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1Bpbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQuaGFzaFBpblBvbGljeSA9IGZ1bmN0aW9uIChoYXNoVG9QaW4sIG9wdGlvbnMsIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZpbGVUb0lQRlMgPSBmdW5jdGlvbiAocmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5Gcm9tRlMgPSBmdW5jdGlvbiAoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5KU09OVG9JUEZTID0gZnVuY3Rpb24gKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkpTT05Ub0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGJvZHksIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpvYnMgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudW5waW4gPSBmdW5jdGlvbiAoaGFzaFRvVW5waW4pIHtcbiAgICAgICAgcmV0dXJuIHVucGluKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9VbnBpbik7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpblBvbGljeSA9IGZ1bmN0aW9uIChuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIHVzZXJQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIG5ld1BpblBvbGljeSk7XG4gICAgfTtcbiAgICBjbGllbnQudGVzdEF1dGhlbnRpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5MaXN0ID0gZnVuY3Rpb24gKGZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpO1xuICAgIH07XG4gICAgY2xpZW50LnVzZXJQaW5uZWREYXRhVG90YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1c2VyUGlubmVkRGF0YVRvdGFsKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIHJldHVybiBjbGllbnQ7XG59XG4iLCJpbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgaWYgKCFwaW5hdGFBcGlLZXkgfHwgcGluYXRhQXBpS2V5ID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbmF0YUFwaUtleSBwcm92aWRlZCEgUGxlYXNlIHByb3ZpZGUgeW91ciBwaW5hdGEgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbiAgICBpZiAoIXBpbmF0YVNlY3JldEFwaUtleSB8fCBwaW5hdGFTZWNyZXRBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhU2VjcmV0QXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBzZWNyZXQgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSG9zdE5vZGVzKGhvc3ROb2Rlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShob3N0Tm9kZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaG9zdF9ub2RlcyB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGhvc3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGlmICghaXNJUEZTLnBlZXJNdWx0aWFkZHIobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9zdF9ub2RlIGFycmF5IGVudHJ5OiAke25vZGV9IGlzIG5vdCBhIHZhbGlkIHBlZXIgbXVsdGlhZGRyYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICBpZiAobWV0YWRhdGEubmFtZSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbWV0YWRhdGEubmFtZSA9PT0gJ3N0cmluZycgfHwgbWV0YWRhdGEubmFtZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgbmFtZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5rZXl2YWx1ZXMgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhdGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpID4gOSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9yZSB0aGFuIDEwIGtleXZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgZm9yIG1ldGFkYXRhIGVudHJpZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhIHN0cmluZywgYSBib29sZWFuLCBvciBhIG51bWJlciwgc28gd2UgZG9uJ3QgZ2V0IGFuIG9iamVjdCBwYXNzZWQgaW4gYnkgYWNjaWRlbnRcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiBrZXlWYWx1ZVsxXSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleVZhbHVlWzFdID09PSAnYm9vbGVhbicgfHwgIWlzTmFOKGtleVZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKHBpblBvbGljeSkge1xuICAgIC8vdGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIHBpbiBwb2xpY3kgYW5kIGNoZWNrcyB0aGUgSlNPTiBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWRcbiAgICBpZighcGluUG9saWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBpbiBwb2xpY3kgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgaWYoIXBpblBvbGljeS5yZWdpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZ2lvbnMgcHJvdmlkZWQgaW4gcGluIHBvbGljeVwiKTtcbiAgICB9XG4gICAgaWYocGluUG9saWN5LnJlZ2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIHBpblBvbGljeS5yZWdpb25zLmZvckVhY2goKHJlZ2lvbikgPT4ge1xuICAgICAgICAgICAgaWYoIXJlZ2lvbi5pZCB8fCAhKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZWdpb24uaWQpID09PSBcIltvYmplY3QgU3RyaW5nXVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZ2lvbiBpZCBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIShyZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgfHwgcmVnaW9uLmRlc2lyZWRSZXBsaWNhdGlvbkNvdW50ID09PSAwKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2lkVmVyc2lvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24gIT0gMCAmJiBvcHRpb25zLmNpZFZlcnNpb24gIT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIGNpZFZlcnNpb24nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSB0cnVlICYmIG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyYXBXaXRoRGlyZWN0b3J5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhvc3ROb2Rlcykge1xuICAgICAgICB2YWxpZGF0ZUhvc3ROb2RlcyhvcHRpb25zLmhvc3ROb2RlcylcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jdXN0b21QaW5Qb2xpY3kpIHtcbiAgICAgICAgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUob3B0aW9ucy5jdXN0b21QaW5Qb2xpY3kpO1xuICAgIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJidWZmZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0dHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV0aWxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Jhc2UtcGF0aC1jb252ZXJ0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXgvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYnM1OC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY2lkcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jbGFzcy1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYXR0ZW4taW50by1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19odG1sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNvc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmh5cG90LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLXNldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgudW11bGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcuYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9zaGltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlbGF5ZWQtc3RyZWFtL2xpYi9kZWxheWVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Zvcm1fZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2hpLWJhc2UzMi9zcmMvYmFzZTMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXAtcmVnZXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC9saWIvaXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lzLWlwZnMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWFmbXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29kZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2NvbnZlcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9wcm90b2NvbHMtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2UxNi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2ludC10YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL3ByaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdXRpbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL3ZhcmludC10YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWhhc2hlcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL2NwZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9saWIvcmVhZGRpcnIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL3JtZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3NhZmUtYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZGVjb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2VuY29kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvcGluTGlzdC9waW5MaXN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9oYXNoUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkZyb21GUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSlNPTlRvSVBGUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9waW5Kb2JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvdW5waW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3VzZXJQaW5Qb2xpY3kuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL3V0aWwvdmFsaWRhdG9ycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImJ1ZmZlclwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJmc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImh0dHBzXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcIm9zXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInR0eVwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ1cmxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwidXRpbFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ6bGliXCIiXSwibmFtZXMiOlsicGluTGlzdCIsInBpbmF0YUFwaUtleSIsInBpbmF0YVNlY3JldEFwaUtleSIsImZpbHRlcnMiLCJiYXNlRW5kcG9pbnQiLCJiYXNlVXJsIiwiZW5kcG9pbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImF4aW9zIiwiZ2V0Iiwid2l0aENyZWRlbnRpYWxzIiwiaGVhZGVycyIsInRoZW4iLCJyZXN1bHQiLCJzdGF0dXMiLCJFcnJvciIsImRhdGEiLCJlcnJvciIsInJlc3BvbnNlIiwidmFsaWRhdGVBbmRSZXR1cm5EYXRlIiwiZGF0ZVRvVmFsaWRhdGUiLCJkYXRlUGFyc2VkIiwiRGF0ZSIsInBhcnNlIiwidG9JU09TdHJpbmciLCJlIiwicXVlcnlCdWlsZGVyIiwiZmlsdGVyUXVlcnkiLCJtZXRhZGF0YVF1ZXJ5IiwiaGFzaENvbnRhaW5zIiwicGluU3RhcnQiLCJwaW5FbmQiLCJ1bnBpblN0YXJ0IiwidW5waW5FbmQiLCJwaW5TaXplTWluIiwiaXNOYU4iLCJwaW5TaXplTWF4IiwicGFnZUxpbWl0IiwicGFyc2VJbnQiLCJwYWdlT2Zmc2V0IiwibWV0YWRhdGEiLCJuYW1lIiwia2V5dmFsdWVzIiwicHJ1bmVkS2V5VmFsdWVzIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXlWYWx1ZSIsImtleSIsInZhbHVlIiwib3AiLCJzZWNvbmRWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0QXV0aGVudGljYXRpb24iLCJhdXRoZW50aWNhdGVkIiwidXNlclBpbm5lZERhdGFUb3RhbCIsImhhc2hQaW5Qb2xpY3kiLCJpcGZzUGluSGFzaCIsIm5ld1BpblBvbGljeSIsImlzSVBGUyIsImNpZCIsImJvZHkiLCJwdXQiLCJwaW5CeUhhc2giLCJoYXNoVG9QaW4iLCJvcHRpb25zIiwicGluYXRhT3B0aW9ucyIsInBpbmF0YU1ldGFkYXRhIiwicG9zdCIsInBpbkZpbGVUb0lQRlMiLCJyZWFkU3RyZWFtIiwiTm9kZUZvcm1EYXRhIiwiYXBwZW5kIiwic3RyZWFtIiwiUmVhZGFibGUiLCJtYXhDb250ZW50TGVuZ3RoIiwiX2JvdW5kYXJ5IiwiZnMiLCJyZXF1aXJlIiwicmVjdXJzaXZlIiwicGluRnJvbUZTIiwic291cmNlUGF0aCIsInJlYWRkaXJyIiwiZXJyIiwiZGlycyIsImZpbGVzIiwiZmlsZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJmaWxlcGF0aCIsInBpbkpTT05Ub0lQRlMiLCJyZXF1ZXN0Qm9keSIsInBpbmF0YUNvbnRlbnQiLCJwaW5Kb2JzIiwibmV3VXJsIiwiZmlyc3RGaWx0ZXJBcHBsaWVkIiwiYWRkRmlsdGVyIiwibmV3RmlsdGVyIiwic29ydCIsImlwZnNfcGluX2hhc2giLCJsaW1pdCIsIk51bWJlciIsImlzSW50ZWdlciIsIm9mZnNldCIsInVucGluIiwiaGFzaFRvVW5waW4iLCJ1c2VyUGluUG9saWN5IiwicGluYXRhQ2xpZW50IiwiY2xpZW50IiwicmVhZGFibGVTdHJlYW0iLCJ2YWxpZGF0ZUFwaUtleXMiLCJ2YWxpZGF0ZUhvc3ROb2RlcyIsImhvc3ROb2RlcyIsIkFycmF5IiwiaXNBcnJheSIsIm5vZGUiLCJwZWVyTXVsdGlhZGRyIiwidmFsaWRhdGVNZXRhZGF0YSIsIlN0cmluZyIsImkiLCJ2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSIsInBpblBvbGljeSIsInJlZ2lvbnMiLCJsZW5ndGgiLCJyZWdpb24iLCJpZCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiY2lkVmVyc2lvbiIsIndyYXBXaXRoRGlyZWN0b3J5IiwiY3VzdG9tUGluUG9saWN5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxL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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FB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QUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxD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QTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xlQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7Ozs7Ozs7Ozs7OztBQ1RhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1BBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQTRCLElBQUksZ0dBQVU7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLFdBQVc7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFELFdBQVc7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHlCQUF5QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFEQUFxRCxXQUFXO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QyxXQUFXO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLEtBQUs7QUFDMUU7Ozs7Ozs7Ozs7Ozs7QUN6Slk7O0FBRVosa0JBQWtCLG1CQUFPLENBQUMsd0RBQVc7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEtBQTRLO0FBQzVLO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sY0FBYztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsVUFBVSx5QkFBeUIsR0FBRztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsVUFBVSx5QkFBeUIsR0FBRztBQUNqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGNBQWM7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLGNBQWM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLGlEQUFXOzs7Ozs7Ozs7Ozs7O0FDVnBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLG1CQUFPLENBQUMsZ0RBQVM7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLGtCQUFNOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7O0FDM0xBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsT0FBTztBQUNsQixZQUFZLE1BQU07QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3ZKWTs7QUFFWixnQkFBZ0IsbUJBQU8sQ0FBQywwREFBVztBQUNuQyxrQkFBa0IsbUJBQU8sQ0FBQywwRUFBbUI7QUFDN0MsZUFBZSxtQkFBTyxDQUFDLDhDQUFROztBQUUvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDNU5ZOztBQUVa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O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUNsRlk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUN6Qlk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNuQlk7O0FBRVo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNoRlk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUMvdEJBO0FBQ0Es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STlDLE9BQU8sQ0FBQ21FLGVBQVosRUFBNkI7QUFDekJiLDhCQUEwQixDQUFDdEQsT0FBTyxDQUFDbUUsZUFBVCxDQUExQjtBQUNIO0FBQ0osQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEdELG1DOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLGtDOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLGdDOzs7Ozs7Ozs7OztBQ0FBLGdDOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLGlDIiwiZmlsZSI6InBpbmF0YS1zZGsuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInBpbmF0YS1zZGtcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGluYXRhLXNka1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaW5hdGEtc2RrXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgcGFyYWxsZWwgICAgICA6IHJlcXVpcmUoJy4vcGFyYWxsZWwuanMnKSxcbiAgc2VyaWFsICAgICAgICA6IHJlcXVpcmUoJy4vc2VyaWFsLmpzJyksXG4gIHNlcmlhbE9yZGVyZWQgOiByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKVxufTtcbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCJ2YXIgZGVmZXIgPSByZXF1aXJlKCcuL2RlZmVyLmpzJyk7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhc3luYztcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5XG4gKiBldmVuIGlmIGNhbGxiYWNrIGl0c2VsZiBpcyBub3RcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gY2FsbGJhY2sgdG8gaW52b2tlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYXVnbWVudGVkIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGFzeW5jKGNhbGxiYWNrKVxue1xuICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuXG4gIC8vIGNoZWNrIGlmIGFzeW5jIGhhcHBlbmVkXG4gIGRlZmVyKGZ1bmN0aW9uKCkgeyBpc0FzeW5jID0gdHJ1ZTsgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFzeW5jX2NhbGxiYWNrKGVyciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGlzQXN5bmMpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgZGVmZXIoZnVuY3Rpb24gbmV4dFRpY2tfY2FsbGJhY2soKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGRlZmVyO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgZnVuY3Rpb24gb24gbmV4dCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3BcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIGZ1bmN0aW9uIHRvIHJ1blxuICovXG5mdW5jdGlvbiBkZWZlcihmbilcbntcbiAgdmFyIG5leHRUaWNrID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PSAnZnVuY3Rpb24nXG4gICAgPyBzZXRJbW1lZGlhdGVcbiAgICA6IChcbiAgICAgIHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvY2Vzcy5uZXh0VGlja1xuICAgICAgOiBudWxsXG4gICAgKTtcblxuICBpZiAobmV4dFRpY2spXG4gIHtcbiAgICBuZXh0VGljayhmbik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgc2V0VGltZW91dChmbiwgMCk7XG4gIH1cbn1cbiIsInZhciBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICAsIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdGU7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlYWNoIGpvYiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBqb2Igc3RhdHVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBjYWxsYmFjaylcbntcbiAgLy8gc3RvcmUgY3VycmVudCBpbmRleFxuICB2YXIga2V5ID0gc3RhdGVbJ2tleWVkTGlzdCddID8gc3RhdGVbJ2tleWVkTGlzdCddW3N0YXRlLmluZGV4XSA6IHN0YXRlLmluZGV4O1xuXG4gIHN0YXRlLmpvYnNba2V5XSA9IHJ1bkpvYihpdGVyYXRvciwga2V5LCBsaXN0W2tleV0sIGZ1bmN0aW9uKGVycm9yLCBvdXRwdXQpXG4gIHtcbiAgICAvLyBkb24ndCByZXBlYXQgeW91cnNlbGZcbiAgICAvLyBza2lwIHNlY29uZGFyeSBjYWxsYmFja3NcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuam9icykpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIGpvYnNcbiAgICBkZWxldGUgc3RhdGUuam9ic1trZXldO1xuXG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIC8vIGRvbid0IHByb2Nlc3MgcmVzdCBvZiB0aGUgcmVzdWx0c1xuICAgICAgLy8gc3RvcCBzdGlsbCBhY3RpdmUgam9ic1xuICAgICAgLy8gYW5kIHJlc2V0IHRoZSBsaXN0XG4gICAgICBhYm9ydChzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBzdGF0ZS5yZXN1bHRzW2tleV0gPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHNhbHZhZ2VkIHJlc3VsdHNcbiAgICBjYWxsYmFjayhlcnJvciwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBqb2IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBpbnZva2VcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBrZXkvaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2Ygam9ic1xuICogQHBhcmFtICAge21peGVkfSBpdGVtIC0gam9iIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCBhZnRlciBpdGVyYXRvciBpcyBkb25lIHdpdGggdGhlIGpvYlxuICogQHJldHVybnMge2Z1bmN0aW9ufG1peGVkfSAtIGpvYiBhYm9ydCBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZVxuICovXG5mdW5jdGlvbiBydW5Kb2IoaXRlcmF0b3IsIGtleSwgaXRlbSwgY2FsbGJhY2spXG57XG4gIHZhciBhYm9ydGVyO1xuXG4gIC8vIGFsbG93IHNob3J0Y3V0IGlmIGl0ZXJhdG9yIGV4cGVjdHMgb25seSB0d28gYXJndW1lbnRzXG4gIGlmIChpdGVyYXRvci5sZW5ndGggPT0gMilcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG4gIC8vIG90aGVyd2lzZSBnbyB3aXRoIGZ1bGwgdGhyZWUgYXJndW1lbnRzXG4gIGVsc2VcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBrZXksIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXR1cm4gYWJvcnRlcjtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzdGF0ZTtcblxuLyoqXG4gKiBDcmVhdGVzIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKiBmb3IgaXRlcmF0aW9uIG92ZXIgbGlzdFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBsaXN0IHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufG51bGx9IHNvcnRNZXRob2QgLSBmdW5jdGlvbiB0byB1c2UgZm9yIGtleXMgc29ydCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCB0byBrZWVwIHRoZW0gYXMgaXNcbiAqIEByZXR1cm5zIHtvYmplY3R9IC0gaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc3RhdGUobGlzdCwgc29ydE1ldGhvZClcbntcbiAgdmFyIGlzTmFtZWRMaXN0ID0gIUFycmF5LmlzQXJyYXkobGlzdClcbiAgICAsIGluaXRTdGF0ZSA9XG4gICAge1xuICAgICAgaW5kZXggICAgOiAwLFxuICAgICAga2V5ZWRMaXN0OiBpc05hbWVkTGlzdCB8fCBzb3J0TWV0aG9kID8gT2JqZWN0LmtleXMobGlzdCkgOiBudWxsLFxuICAgICAgam9icyAgICAgOiB7fSxcbiAgICAgIHJlc3VsdHMgIDogaXNOYW1lZExpc3QgPyB7fSA6IFtdLFxuICAgICAgc2l6ZSAgICAgOiBpc05hbWVkTGlzdCA/IE9iamVjdC5rZXlzKGxpc3QpLmxlbmd0aCA6IGxpc3QubGVuZ3RoXG4gICAgfVxuICAgIDtcblxuICBpZiAoc29ydE1ldGhvZClcbiAge1xuICAgIC8vIHNvcnQgYXJyYXkga2V5cyBiYXNlZCBvbiBpdCdzIHZhbHVlc1xuICAgIC8vIHNvcnQgb2JqZWN0J3Mga2V5cyBqdXN0IG9uIG93biBtZXJpdFxuICAgIGluaXRTdGF0ZS5rZXllZExpc3Quc29ydChpc05hbWVkTGlzdCA/IHNvcnRNZXRob2QgOiBmdW5jdGlvbihhLCBiKVxuICAgIHtcbiAgICAgIHJldHVybiBzb3J0TWV0aG9kKGxpc3RbYV0sIGxpc3RbYl0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGluaXRTdGF0ZTtcbn1cbiIsInZhciBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICAsIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHRlcm1pbmF0b3I7XG5cbi8qKlxuICogVGVybWluYXRlcyBqb2JzIGluIHRoZSBhdHRhY2hlZCBzdGF0ZSBjb250ZXh0XG4gKlxuICogQHRoaXMgIEFzeW5jS2l0U3RhdGUjXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZpbmFsIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0ZXJtaW5hdGlvblxuICovXG5mdW5jdGlvbiB0ZXJtaW5hdG9yKGNhbGxiYWNrKVxue1xuICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuam9icykubGVuZ3RoKVxuICB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZmFzdCBmb3J3YXJkIGl0ZXJhdGlvbiBpbmRleFxuICB0aGlzLmluZGV4ID0gdGhpcy5zaXplO1xuXG4gIC8vIGFib3J0IGpvYnNcbiAgYWJvcnQodGhpcyk7XG5cbiAgLy8gc2VuZCBiYWNrIHJlc3VsdHMgd2UgaGF2ZSBzbyBmYXJcbiAgYXN5bmMoY2FsbGJhY2spKG51bGwsIHRoaXMucmVzdWx0cyk7XG59XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gcGFyYWxsZWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHBhcmFsbGVsXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gcGFyYWxsZWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCk7XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gIHtcbiAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdClcbiAgICB7XG4gICAgICBpZiAoZXJyb3IpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGxvb2tzIGxpa2UgaXQncyB0aGUgbGFzdCBvbmVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5sZW5ndGggPT09IDApXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuIiwidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsT3JkZXJlZDtcbi8vIHNvcnRpbmcgaGVscGVyc1xubW9kdWxlLmV4cG9ydHMuYXNjZW5kaW5nICA9IGFzY2VuZGluZztcbm1vZHVsZS5leHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBzb3J0ZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IHNvcnRNZXRob2QgLSBjdXN0b20gc29ydCBmdW5jdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIHNvcnRNZXRob2QsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCwgc29ydE1ldGhvZCk7XG5cbiAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uIGl0ZXJhdG9ySGFuZGxlcihlcnJvciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXRlLmluZGV4Kys7XG5cbiAgICAvLyBhcmUgd2UgdGhlcmUgeWV0P1xuICAgIGlmIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICAgIHtcbiAgICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBpdGVyYXRvckhhbmRsZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvbmUgaGVyZVxuICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG5cbi8qXG4gKiAtLSBTb3J0IG1ldGhvZHNcbiAqL1xuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBodHRwRm9sbG93ID0gcmVxdWlyZSgnZm9sbG93LXJlZGlyZWN0cycpLmh0dHA7XG52YXIgaHR0cHNGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cHM7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG52YXIgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcbnZhciBwa2cgPSByZXF1aXJlKCcuLy4uLy4uL3BhY2thZ2UuanNvbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvZW5oYW5jZUVycm9yJyk7XG5cbi8qZXNsaW50IGNvbnNpc3RlbnQtcmV0dXJuOjAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGRhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciB0aW1lcjtcblxuICAgIC8vIFNldCBVc2VyLUFnZW50IChyZXF1aXJlZCBieSBzb21lIHNlcnZlcnMpXG4gICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3Vlcy82OVxuICAgIGlmICghaGVhZGVyc1snVXNlci1BZ2VudCddICYmICFoZWFkZXJzWyd1c2VyLWFnZW50J10pIHtcbiAgICAgIGhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9ICdheGlvcy8nICsgcGtnLnZlcnNpb247XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgIXV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uLi5cbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICBkYXRhID0gbmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICAgICAnRGF0YSBhZnRlciB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheUJ1ZmZlciwgYSBCdWZmZXIsIG9yIGEgU3RyZWFtJyxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgZGF0YSBleGlzdHNcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgdmFyIGF1dGggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZShjb25maWcudXJsKTtcbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZWQucHJvdG9jb2wgfHwgJ2h0dHA6JztcblxuICAgIGlmICghYXV0aCAmJiBwYXJzZWQuYXV0aCkge1xuICAgICAgdmFyIHVybEF1dGggPSBwYXJzZWQuYXV0aC5zcGxpdCgnOicpO1xuICAgICAgdmFyIHVybFVzZXJuYW1lID0gdXJsQXV0aFswXSB8fCAnJztcbiAgICAgIHZhciB1cmxQYXNzd29yZCA9IHVybEF1dGhbMV0gfHwgJyc7XG4gICAgICBhdXRoID0gdXJsVXNlcm5hbWUgKyAnOicgKyB1cmxQYXNzd29yZDtcbiAgICB9XG5cbiAgICBpZiAoYXV0aCkge1xuICAgICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvbjtcbiAgICB9XG5cbiAgICB2YXIgaXNIdHRwcyA9IHByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICB2YXIgYWdlbnQgPSBpc0h0dHBzID8gY29uZmlnLmh0dHBzQWdlbnQgOiBjb25maWcuaHR0cEFnZW50O1xuXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBidWlsZFVSTChwYXJzZWQucGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyksXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYWdlbnQ6IGFnZW50LFxuICAgICAgYXV0aDogYXV0aFxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnNvY2tldFBhdGgpIHtcbiAgICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IGNvbmZpZy5zb2NrZXRQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gcGFyc2VkLmhvc3RuYW1lO1xuICAgICAgb3B0aW9ucy5wb3J0ID0gcGFyc2VkLnBvcnQ7XG4gICAgfVxuXG4gICAgdmFyIHByb3h5ID0gY29uZmlnLnByb3h5O1xuICAgIGlmICghcHJveHkgJiYgcHJveHkgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgcHJveHlFbnYgPSBwcm90b2NvbC5zbGljZSgwLCAtMSkgKyAnX3Byb3h5JztcbiAgICAgIHZhciBwcm94eVVybCA9IHByb2Nlc3MuZW52W3Byb3h5RW52XSB8fCBwcm9jZXNzLmVudltwcm94eUVudi50b1VwcGVyQ2FzZSgpXTtcbiAgICAgIGlmIChwcm94eVVybCkge1xuICAgICAgICB2YXIgcGFyc2VkUHJveHlVcmwgPSB1cmwucGFyc2UocHJveHlVcmwpO1xuICAgICAgICBwcm94eSA9IHtcbiAgICAgICAgICBob3N0OiBwYXJzZWRQcm94eVVybC5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiBwYXJzZWRQcm94eVVybC5wb3J0XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBhcnNlZFByb3h5VXJsLmF1dGgpIHtcbiAgICAgICAgICB2YXIgcHJveHlVcmxBdXRoID0gcGFyc2VkUHJveHlVcmwuYXV0aC5zcGxpdCgnOicpO1xuICAgICAgICAgIHByb3h5LmF1dGggPSB7XG4gICAgICAgICAgICB1c2VybmFtZTogcHJveHlVcmxBdXRoWzBdLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHByb3h5VXJsQXV0aFsxXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJveHkpIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwcm94eS5ob3N0O1xuICAgICAgb3B0aW9ucy5ob3N0ID0gcHJveHkuaG9zdDtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJyk7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwcm94eS5wb3J0O1xuICAgICAgb3B0aW9ucy5wYXRoID0gcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGg7XG5cbiAgICAgIC8vIEJhc2ljIHByb3h5IGF1dGhvcml6YXRpb25cbiAgICAgIGlmIChwcm94eS5hdXRoKSB7XG4gICAgICAgIHZhciBiYXNlNjQgPSBuZXcgQnVmZmVyKHByb3h5LmF1dGgudXNlcm5hbWUgKyAnOicgKyBwcm94eS5hdXRoLnBhc3N3b3JkLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdHJhbnNwb3J0O1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwcyA/IGh0dHBzRm9sbG93IDogaHR0cEZvbGxvdztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1heENvbnRlbnRMZW5ndGggJiYgY29uZmlnLm1heENvbnRlbnRMZW5ndGggPiAtMSkge1xuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gY29uZmlnLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0XG4gICAgdmFyIHJlcSA9IHRyYW5zcG9ydC5yZXF1ZXN0KG9wdGlvbnMsIGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlcykge1xuICAgICAgaWYgKHJlcS5hYm9ydGVkKSByZXR1cm47XG5cbiAgICAgIC8vIFJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkIHNvIGtpbGwgdGltZXIgdGhhdCBoYW5kbGVzIHJlcXVlc3QgdGltZW91dFxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcblxuICAgICAgLy8gdW5jb21wcmVzcyB0aGUgcmVzcG9uc2UgYm9keSB0cmFuc3BhcmVudGx5IGlmIHJlcXVpcmVkXG4gICAgICB2YXIgc3RyZWFtID0gcmVzO1xuICAgICAgc3dpdGNoIChyZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddKSB7XG4gICAgICAvKmVzbGludCBkZWZhdWx0LWNhc2U6MCovXG4gICAgICBjYXNlICdnemlwJzpcbiAgICAgIGNhc2UgJ2NvbXByZXNzJzpcbiAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgIHN0cmVhbSA9IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICB2YXIgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiBsYXN0UmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSBzdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1EYXRhKGNodW5rKSB7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpLmxlbmd0aCA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIGNvbmZpZywgbnVsbCwgbGFzdFJlcXVlc3QpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YS50b1N0cmluZygndXRmOCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgaWYgKHJlcS5hYm9ydGVkKSByZXR1cm47XG4gICAgICByZWplY3QoZW5oYW5jZUVycm9yKGVyciwgY29uZmlnLCBudWxsLCByZXEpKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSByZXF1ZXN0IHRpbWVvdXRcbiAgICBpZiAoY29uZmlnLnRpbWVvdXQgJiYgIXRpbWVyKSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxKSk7XG4gICAgICB9LCBjb25maWcudGltZW91dCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkge1xuICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgaWYgKHV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLmVuZChkYXRhKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgdmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xuXG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oY29uZmlnLnVybCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLndpdGhDcmVkZW50aWFscykge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBFeHBlY3RlZCBET01FeGNlcHRpb24gdGhyb3duIGJ5IGJyb3dzZXJzIG5vdCBjb21wYXRpYmxlIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIuXG4gICAgICAgIC8vIEJ1dCwgdGhpcyBjYW4gYmUgc3VwcHJlc3NlZCBmb3IgJ2pzb24nIHR5cGUgYXMgaXQgY2FuIGJlIHBhcnNlZCBieSBkZWZhdWx0ICd0cmFuc2Zvcm1SZXNwb25zZScgZnVuY3Rpb24uXG4gICAgICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnByb21pc2UudGhlbihmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjYW5jZWwpO1xuICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UodXRpbHMubWVyZ2UoZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gdXRpbHMubWVyZ2Uoe1xuICAgICAgdXJsOiBhcmd1bWVudHNbMF1cbiAgICB9LCBhcmd1bWVudHNbMV0pO1xuICB9XG5cbiAgY29uZmlnID0gdXRpbHMubWVyZ2UoZGVmYXVsdHMsIHttZXRob2Q6ICdnZXQnfSwgdGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gU3VwcG9ydCBiYXNlVVJMIGNvbmZpZ1xuICBpZiAoY29uZmlnLmJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcbiAgICBjb25maWcudXJsID0gY29tYmluZVVSTHMoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICB9XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVycyB8fCB7fVxuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuL2NyZWF0ZUVycm9yJyk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgdmFyIHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICAvLyBOb3RlOiBzdGF0dXMgaXMgbm90IGV4cG9zZWQgYnkgWERvbWFpblJlcXVlc3RcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbihkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBJZ25vcmUgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiLCJmdW5jdGlvbiBjb252ZXJ0RmlsZVBhdGhUb0Jhc2VEaXJlY3RvcnlQYXRoKHNvdXJjZVBhdGgsIGZpbGVQYXRoKSB7XG4gICAgbGV0IG5ld1N0cmluZyA9IChzb3VyY2VQYXRoLnN0YXJ0c1dpdGgoJy4vJykgPyBzb3VyY2VQYXRoLnN1YnN0cmluZygyKSA6IHNvdXJjZVBhdGgpO1xuICAgIC8vbWFrZSBzdXJlIHRoZXJlIGlzbid0IGEgZGFuZ2xpbmcgLyB0byB0aHJvdyBhIGZhbHNlIHBvc2l0aXZlIGludG8gdGhlIG1peFxuICAgIGNvbnN0IGxhc3RJbmRleE9mRGlyZWN0b3J5ID0gbmV3U3RyaW5nLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYobGFzdEluZGV4T2ZEaXJlY3RvcnkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoT2ZTb3VyY2UgPSBzb3VyY2VQYXRoLmxlbmd0aDtcbiAgICAvL29ubHkgdHJpbSBpZiB0aGUgLyBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZ1xuICAgIGlmIChsYXN0SW5kZXhPZkRpcmVjdG9yeSA9PT0gKGxlbmd0aE9mU291cmNlIC0gMSkpIHtcbiAgICAgICAgbmV3U3RyaW5nID0gc291cmNlUGF0aC5zbGljZSgwLC0xKTtcbiAgICB9XG5cbiAgICAvL25vdyB0aGF0IHdlJ3JlIHN1cmUgb2Ygbm8gZmFsc2UgcG9zaXRpdmUsIGxldCdzIGNoZWNrIGFuZCBzZWUgd2hlcmUgdGhlIFwicm9vdFwiIGRpcmVjdG9yeSBpc1xuICAgIGNvbnN0IG5ld0xhc3RJbmRleCA9IG5ld1N0cmluZy5sYXN0SW5kZXhPZignLycpO1xuICAgIGlmICggbmV3TGFzdEluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhdGhHYXJiYWdlID0gbmV3U3RyaW5nLnN1YnN0cmluZygwLCBuZXdMYXN0SW5kZXggKyAxKTtcbiAgICAgICAgbmV3U3RyaW5nID0gZmlsZVBhdGguc3BsaXQocGF0aEdhcmJhZ2UpWzFdO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydEZpbGVQYXRoVG9CYXNlRGlyZWN0b3J5UGF0aCIsIid1c2Ugc3RyaWN0J1xuLy8gYmFzZS14IGVuY29kaW5nIC8gZGVjb2Rpbmdcbi8vIENvcHlyaWdodCAoYykgMjAxOCBiYXNlLXggY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBUaGUgQml0Y29pbiBDb3JlIGRldmVsb3BlcnMgKGJhc2U1OC5jcHApXG4vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSB0aGUgYWNjb21wYW55aW5nXG4vLyBmaWxlIExJQ0VOU0Ugb3IgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAuXG4vLyBAdHMtaWdub3JlXG52YXIgX0J1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5mdW5jdGlvbiBiYXNlIChBTFBIQUJFVCkge1xuICBpZiAoQUxQSEFCRVQubGVuZ3RoID49IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHBoYWJldCB0b28gbG9uZycpIH1cbiAgdmFyIEJBU0VfTUFQID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfTUFQLmxlbmd0aDsgaisrKSB7XG4gICAgQkFTRV9NQVBbal0gPSAyNTVcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IEFMUEhBQkVULmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHggPSBBTFBIQUJFVC5jaGFyQXQoaSlcbiAgICB2YXIgeGMgPSB4LmNoYXJDb2RlQXQoMClcbiAgICBpZiAoQkFTRV9NQVBbeGNdICE9PSAyNTUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBhbWJpZ3VvdXMnKSB9XG4gICAgQkFTRV9NQVBbeGNdID0gaVxuICB9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcbiAgdmFyIEZBQ1RPUiA9IE1hdGgubG9nKEJBU0UpIC8gTWF0aC5sb2coMjU2KSAvLyBsb2coQkFTRSkgLyBsb2coMjU2KSwgcm91bmRlZCB1cFxuICB2YXIgaUZBQ1RPUiA9IE1hdGgubG9nKDI1NikgLyBNYXRoLmxvZyhCQVNFKSAvLyBsb2coMjU2KSAvIGxvZyhCQVNFKSwgcm91bmRlZCB1cFxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkgeyBzb3VyY2UgPSBfQnVmZmVyLmZyb20oc291cmNlKSB9XG4gICAgaWYgKCFfQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQnVmZmVyJykgfVxuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJyB9XG4gICAgICAgIC8vIFNraXAgJiBjb3VudCBsZWFkaW5nIHplcm9lcy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgdmFyIHBiZWdpbiA9IDBcbiAgICB2YXIgcGVuZCA9IHNvdXJjZS5sZW5ndGhcbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kICYmIHNvdXJjZVtwYmVnaW5dID09PSAwKSB7XG4gICAgICBwYmVnaW4rK1xuICAgICAgemVyb2VzKytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2U1OCByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgocGVuZCAtIHBiZWdpbikgKiBpRkFDVE9SICsgMSkgPj4+IDBcbiAgICB2YXIgYjU4ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnl0ZXMuXG4gICAgd2hpbGUgKHBiZWdpbiAhPT0gcGVuZCkge1xuICAgICAgdmFyIGNhcnJ5ID0gc291cmNlW3BiZWdpbl1cbiAgICAgICAgICAgIC8vIEFwcGx5IFwiYjU4ID0gYjU4ICogMjU2ICsgY2hcIi5cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQxID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQxICE9PSAtMSk7IGl0MS0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKDI1NiAqIGI1OFtpdDFdKSA+Pj4gMFxuICAgICAgICBiNThbaXQxXSA9IChjYXJyeSAlIEJBU0UpID4+PiAwXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gQkFTRSkgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcGJlZ2luKytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYmFzZTU4IHJlc3VsdC5cbiAgICB2YXIgaXQyID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDIgIT09IHNpemUgJiYgYjU4W2l0Ml0gPT09IDApIHtcbiAgICAgIGl0MisrXG4gICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHJlc3VsdCBpbnRvIGEgc3RyaW5nLlxuICAgIHZhciBzdHIgPSBMRUFERVIucmVwZWF0KHplcm9lcylcbiAgICBmb3IgKDsgaXQyIDwgc2l6ZTsgKytpdDIpIHsgc3RyICs9IEFMUEhBQkVULmNoYXJBdChiNThbaXQyXSkgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuICBmdW5jdGlvbiBkZWNvZGVVbnNhZmUgKHNvdXJjZSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBTdHJpbmcnKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuIF9CdWZmZXIuYWxsb2MoMCkgfVxuICAgIHZhciBwc3ogPSAwXG4gICAgICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMuXG4gICAgaWYgKHNvdXJjZVtwc3pdID09PSAnICcpIHsgcmV0dXJuIH1cbiAgICAgICAgLy8gU2tpcCBhbmQgY291bnQgbGVhZGluZyAnMSdzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB3aGlsZSAoc291cmNlW3Bzel0gPT09IExFQURFUikge1xuICAgICAgemVyb2VzKytcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW4gYmlnLWVuZGlhbiBiYXNlMjU2IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKCgoc291cmNlLmxlbmd0aCAtIHBzeikgKiBGQUNUT1IpICsgMSkgPj4+IDAgLy8gbG9nKDU4KSAvIGxvZygyNTYpLCByb3VuZGVkIHVwLlxuICAgIHZhciBiMjU2ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgY2hhcmFjdGVycy5cbiAgICB3aGlsZSAoc291cmNlW3Bzel0pIHtcbiAgICAgICAgICAgIC8vIERlY29kZSBjaGFyYWN0ZXJcbiAgICAgIHZhciBjYXJyeSA9IEJBU0VfTUFQW3NvdXJjZS5jaGFyQ29kZUF0KHBzeildXG4gICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlclxuICAgICAgaWYgKGNhcnJ5ID09PSAyNTUpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQzID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQzICE9PSAtMSk7IGl0My0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKEJBU0UgKiBiMjU2W2l0M10pID4+PiAwXG4gICAgICAgIGIyNTZbaXQzXSA9IChjYXJyeSAlIDI1NikgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyAyNTYpID4+PiAwXG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdOb24temVybyBjYXJyeScpIH1cbiAgICAgIGxlbmd0aCA9IGlcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBTa2lwIHRyYWlsaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzIGluIGIyNTYuXG4gICAgdmFyIGl0NCA9IHNpemUgLSBsZW5ndGhcbiAgICB3aGlsZSAoaXQ0ICE9PSBzaXplICYmIGIyNTZbaXQ0XSA9PT0gMCkge1xuICAgICAgaXQ0KytcbiAgICB9XG4gICAgdmFyIHZjaCA9IF9CdWZmZXIuYWxsb2NVbnNhZmUoemVyb2VzICsgKHNpemUgLSBpdDQpKVxuICAgIHZjaC5maWxsKDB4MDAsIDAsIHplcm9lcylcbiAgICB2YXIgaiA9IHplcm9lc1xuICAgIHdoaWxlIChpdDQgIT09IHNpemUpIHtcbiAgICAgIHZjaFtqKytdID0gYjI1NltpdDQrK11cbiAgICB9XG4gICAgcmV0dXJuIHZjaFxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGRlY29kZVVuc2FmZShzdHJpbmcpXG4gICAgaWYgKGJ1ZmZlcikgeyByZXR1cm4gYnVmZmVyIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGVVbnNhZmU6IGRlY29kZVVuc2FmZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VcbiIsInZhciBiYXNleCA9IHJlcXVpcmUoJ2Jhc2UteCcpXG52YXIgQUxQSEFCRVQgPSAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eidcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNleChBTFBIQUJFVClcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBtaCA9IHJlcXVpcmUoJ211bHRpaGFzaGVzJylcblxudmFyIENJRFV0aWwgPSB7XG4gIC8qKlxuICAgKiBUZXN0IGlmIHRoZSBnaXZlbiBpbnB1dCBpcyBhIHZhbGlkIENJRCBvYmplY3QuXG4gICAqIFJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCBpcyBub3QuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIGl0IGlzIGEgdmFsaWQgQ0lELlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb3RoZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGNoZWNrQ0lEQ29tcG9uZW50czogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKG90aGVyID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnbnVsbCB2YWx1ZXMgYXJlIG5vdCB2YWxpZCBDSURzJ1xuICAgIH1cblxuICAgIGlmICghKG90aGVyLnZlcnNpb24gPT09IDAgfHwgb3RoZXIudmVyc2lvbiA9PT0gMSkpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCB2ZXJzaW9uLCBtdXN0IGJlIGEgbnVtYmVyIGVxdWFsIHRvIDEgb3IgMCdcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG90aGVyLmNvZGVjICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICdjb2RlYyBtdXN0IGJlIHN0cmluZydcbiAgICB9XG5cbiAgICBpZiAob3RoZXIudmVyc2lvbiA9PT0gMCkge1xuICAgICAgaWYgKG90aGVyLmNvZGVjICE9PSAnZGFnLXBiJykge1xuICAgICAgICByZXR1cm4gXCJjb2RlYyBtdXN0IGJlICdkYWctcGInIGZvciBDSUR2MFwiXG4gICAgICB9XG4gICAgICBpZiAob3RoZXIubXVsdGliYXNlTmFtZSAhPT0gJ2Jhc2U1OGJ0YycpIHtcbiAgICAgICAgcmV0dXJuIFwibXVsdGliYXNlTmFtZSBtdXN0IGJlICdiYXNlNThidGMnIGZvciBDSUR2MFwiXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIob3RoZXIubXVsdGloYXNoKSkge1xuICAgICAgcmV0dXJuICdtdWx0aWhhc2ggbXVzdCBiZSBhIEJ1ZmZlcidcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbWgudmFsaWRhdGUob3RoZXIubXVsdGloYXNoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGV0IGVycm9yTXNnID0gZXJyLm1lc3NhZ2VcbiAgICAgIGlmICghZXJyb3JNc2cpIHsgLy8gSnVzdCBpbiBjYXNlIG1oLnZhbGlkYXRlKCkgdGhyb3dzIGFuIGVycm9yIHdpdGggZW1wdHkgZXJyb3IgbWVzc2FnZVxuICAgICAgICBlcnJvck1zZyA9ICdNdWx0aWhhc2ggdmFsaWRhdGlvbiBmYWlsZWQnXG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3JNc2dcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDSURVdGlsXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbWggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuY29uc3QgY29kZWNzID0gcmVxdWlyZSgnbXVsdGljb2RlYy9zcmMvYmFzZS10YWJsZS5qc29uJylcbmNvbnN0IENJRFV0aWwgPSByZXF1aXJlKCcuL2NpZC11dGlsJylcbmNvbnN0IHdpdGhJcyA9IHJlcXVpcmUoJ2NsYXNzLWlzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJpYWxpemVkQ0lEXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNcbiAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKi9cblxuLyoqXG4gKiBUZXN0IGlmIHRoZSBnaXZlbiBpbnB1dCBpcyBhIENJRC5cbiAqIEBmdW5jdGlvbiBpc0NJRFxuICogQG1lbWJlcm9mIENJRFxuICogQHN0YXRpY1xuICogQHBhcmFtIHthbnl9IG90aGVyXG4gKiBAcmV0dXJucyB7Ym9vbH1cbiAqL1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIENJRCBgPG1iYXNlPjx2ZXJzaW9uPjxtY29kZWM+PG1oYXNoPmBcbiAqICwgYXMgZGVmaW5lZCBpbiBbaXBsZC9jaWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvY2lkKS5cbiAqIEBjbGFzcyBDSURcbiAqL1xuY2xhc3MgQ0lEIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDSUQuXG4gICAqXG4gICAqIFRoZSBhbGdvcml0aG0gZm9yIGFyZ3VtZW50IGlucHV0IGlzIHJvdWdobHk6XG4gICAqIGBgYFxuICAgKiBpZiAoY2lkKVxuICAgKiAgIC0+IGNyZWF0ZSBhIGNvcHlcbiAgICogZWxzZSBpZiAoc3RyKVxuICAgKiAgIGlmICgxc3QgY2hhciBpcyBvbiBtdWx0aWJhc2UgdGFibGUpIC0+IENJRCBTdHJpbmdcbiAgICogICBlbHNlIC0+IGJzNTggZW5jb2RlZCBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoQnVmZmVyKVxuICAgKiAgIGlmICgxc3QgYnl0ZSBpcyAwIG9yIDEpIC0+IENJRFxuICAgKiAgIGVsc2UgLT4gbXVsdGloYXNoXG4gICAqIGVsc2UgaWYgKE51bWJlcilcbiAgICogICAtPiBjb25zdHJ1Y3QgQ0lEIGJ5IHBhcnRzXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8Q0lEfSB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZWNdXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBbbXVsdGloYXNoXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW211bHRpYmFzZU5hbWVdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBDSUQoPHZlcnNpb24+LCA8Y29kZWM+LCA8bXVsdGloYXNoPiwgPG11bHRpYmFzZU5hbWU+KVxuICAgKiBuZXcgQ0lEKDxjaWRTdHI+KVxuICAgKiBuZXcgQ0lEKDxjaWQuYnVmZmVyPilcbiAgICogbmV3IENJRCg8bXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8YnM1OCBlbmNvZGVkIG11bHRpaGFzaD4pXG4gICAqIG5ldyBDSUQoPGNpZD4pXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgY29kZWMsIG11bHRpaGFzaCwgbXVsdGliYXNlTmFtZSkge1xuICAgIGlmIChfQ0lELmlzQ0lEKHZlcnNpb24pKSB7XG4gICAgICAvLyB2ZXJzaW9uIGlzIGFuIGV4aXNpbmcgQ0lEIGluc3RhbmNlXG4gICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICB0aGlzLnZlcnNpb24gPSBjaWQudmVyc2lvblxuICAgICAgdGhpcy5jb2RlYyA9IGNpZC5jb2RlY1xuICAgICAgdGhpcy5tdWx0aWhhc2ggPSBCdWZmZXIuZnJvbShjaWQubXVsdGloYXNoKVxuICAgICAgLy8gRGVmYXVsdCBndWFyZCBmb3Igd2hlbiBhIENJRCA8IDAuNyBpcyBwYXNzZWQgd2l0aCBubyBtdWx0aWJhc2VOYW1lXG4gICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBjaWQubXVsdGliYXNlTmFtZSB8fCAoY2lkLnZlcnNpb24gPT09IDAgPyAnYmFzZTU4YnRjJyA6ICdiYXNlMzInKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZS5nLiAnYmFzZTMyJyBvciBmYWxzZVxuICAgICAgY29uc3QgYmFzZU5hbWUgPSBtdWx0aWJhc2UuaXNFbmNvZGVkKHZlcnNpb24pXG4gICAgICBpZiAoYmFzZU5hbWUpIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIENJRCBTdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSwgc28gdjFcbiAgICAgICAgY29uc3QgY2lkID0gbXVsdGliYXNlLmRlY29kZSh2ZXJzaW9uKVxuICAgICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZUludChjaWQuc2xpY2UoMCwgMSkudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBiYXNlTmFtZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIGJhc2U1OGJ0YyBzdHJpbmcgbXVsdGloYXNoLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG1oLmZyb21CNThTdHJpbmcodmVyc2lvbilcbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiB2ZXJzaW9uIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZlcnNpb24pKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGUgPSB2ZXJzaW9uLnNsaWNlKDAsIDEpXG4gICAgICBjb25zdCB2ID0gcGFyc2VJbnQoZmlyc3RCeXRlLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG4gICAgICBpZiAodiA9PT0gMSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIGJ1ZmZlclxuICAgICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTMyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIHJhdyBtdWx0aWhhc2ggYnVmZmVyLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBhc3NlbWJsZSB0aGUgQ0lEIGZyb20gdGhlIHBhcmFtZXRlcnNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvblxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmNvZGVjID0gY29kZWNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWhhc2ggPSBtdWx0aWhhc2hcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gbXVsdGliYXNlTmFtZSB8fCAodmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG5cbiAgICBDSUQudmFsaWRhdGVDSUQodGhpcylcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQ0lEIGFzIGEgYEJ1ZmZlcmBcbiAgICpcbiAgICogQHJldHVybiB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICpcbiAgICogQG1lbWJlck9mIENJRFxuICAgKi9cbiAgZ2V0IGJ1ZmZlciAoKSB7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuX2J1ZmZlclxuXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDApIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5tdWx0aWhhc2hcbiAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKCcwMScsICdoZXgnKSxcbiAgICAgICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICAgICAgdGhpcy5tdWx0aWhhc2hcbiAgICAgICAgXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgICB9XG5cbiAgICAgIC8vIENhY2hlIHRoaXMgYnVmZmVyIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSByZWNyZWF0ZWRcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2J1ZmZlcicsIHsgdmFsdWU6IGJ1ZmZlciB9KVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZWZpeCBvZiB0aGUgQ0lELlxuICAgKlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGdldCBwcmVmaXggKCkge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKGAwJHt0aGlzLnZlcnNpb259YCwgJ2hleCcpLFxuICAgICAgbXVsdGljb2RlYy5nZXRDb2RlVmFyaW50KHRoaXMuY29kZWMpLFxuICAgICAgbWgucHJlZml4KHRoaXMubXVsdGloYXNoKVxuICAgIF0pXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBhIENJRCBvZiB2ZXJzaW9uIGAwYC5cbiAgICpcbiAgICogQHJldHVybnMge0NJRH1cbiAgICovXG4gIHRvVjAgKCkge1xuICAgIGlmICh0aGlzLmNvZGVjICE9PSAnZGFnLXBiJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBhIG5vbiBkYWctcGIgQ0lEIHRvIENJRHYwJylcbiAgICB9XG5cbiAgICBjb25zdCB7IG5hbWUsIGxlbmd0aCB9ID0gbWguZGVjb2RlKHRoaXMubXVsdGloYXNoKVxuXG4gICAgaWYgKG5hbWUgIT09ICdzaGEyLTI1NicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIHNoYTItMjU2IG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGlmIChsZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IG5vbiAzMiBieXRlIG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgX0NJRCgwLCB0aGlzLmNvZGVjLCB0aGlzLm11bHRpaGFzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDFgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMSAoKSB7XG4gICAgcmV0dXJuIG5ldyBfQ0lEKDEsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSB0aGUgQ0lEIGludG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZT10aGlzLm11bHRpYmFzZU5hbWVdIC0gQmFzZSBlbmNvZGluZyB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0b0Jhc2VFbmNvZGVkU3RyaW5nIChiYXNlID0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKHRoaXMuc3RyaW5nICYmIGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nXG4gICAgfVxuICAgIGxldCBzdHIgPSBudWxsXG4gICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgaWYgKGJhc2UgIT09ICdiYXNlNThidGMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHN1cHBvcnRlZCB3aXRoIENJRHYwLCB0byBzdXBwb3J0IGRpZmZlcmVudCBiYXNlcywgcGxlYXNlIG1pZ3JhdGUgdGhlIGluc3RhbmNlIGRvIENJRHYxLCB5b3UgY2FuIGRvIHRoYXQgdGhyb3VnaCBjaWQudG9WMSgpJylcbiAgICAgIH1cbiAgICAgIHN0ciA9IG1oLnRvQjU4U3RyaW5nKHRoaXMubXVsdGloYXNoKVxuICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICBzdHIgPSBtdWx0aWJhc2UuZW5jb2RlKGJhc2UsIHRoaXMuYnVmZmVyKS50b1N0cmluZygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgfVxuICAgIGlmIChiYXNlID09PSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICAgIC8vIGNhY2hlIHRoZSBzdHJpbmcgdmFsdWVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RyaW5nJywgeyB2YWx1ZTogc3RyIH0pXG4gICAgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIHRvU3RyaW5nIChiYXNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9CYXNlRW5jb2RlZFN0cmluZyhiYXNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBhIHBsYWluIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge1NlcmlhbGl6ZWRDSUR9XG4gICAqL1xuICB0b0pTT04gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlYzogdGhpcy5jb2RlYyxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIGhhc2g6IHRoaXMubXVsdGloYXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZXF1YWxpdHkgd2l0aCBhbm90aGVyIENJRC5cbiAgICpcbiAgICogQHBhcmFtIHtDSUR9IG90aGVyXG4gICAqIEByZXR1cm5zIHtib29sfVxuICAgKi9cbiAgZXF1YWxzIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmNvZGVjID09PSBvdGhlci5jb2RlYyAmJlxuICAgICAgdGhpcy52ZXJzaW9uID09PSBvdGhlci52ZXJzaW9uICYmXG4gICAgICB0aGlzLm11bHRpaGFzaC5lcXVhbHMob3RoZXIubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogVGhyb3dzIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG90aGVyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQ0lEIChvdGhlcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gQ0lEVXRpbC5jaGVja0NJRENvbXBvbmVudHMob3RoZXIpXG4gICAgaWYgKGVycm9yTXNnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IF9DSUQgPSB3aXRoSXMoQ0lELCB7XG4gIGNsYXNzTmFtZTogJ0NJRCcsXG4gIHN5bWJvbE5hbWU6ICdAaXBsZC9qcy1jaWQvQ0lEJ1xufSlcblxuX0NJRC5jb2RlY3MgPSBjb2RlY3NcblxubW9kdWxlLmV4cG9ydHMgPSBfQ0lEXG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHdpdGhJcyhDbGFzcywgeyBjbGFzc05hbWUsIHN5bWJvbE5hbWUgfSkge1xuICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3Ioc3ltYm9sTmFtZSk7XG5cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgLy8gVGhlIGNvZGUgYmVsb3cgYXNzaWducyB0aGUgY2xhc3Mgd3JhcHBlciB0byBhbiBvYmplY3QgdG8gdHJpY2tcbiAgICAgICAgLy8gSmF2YVNjcmlwdCBlbmdpbmVzIHRvIHNob3cgdGhlIG5hbWUgb2YgdGhlIGV4dGVuZGVkIGNsYXNzIHdoZW5cbiAgICAgICAgLy8gbG9nZ2luZyBhbiBpbnN0YW5jZXMuXG4gICAgICAgIC8vIFdlIGFyZSBhc3NpZ25pbmcgYW4gYW5vbnltb3VzIGNsYXNzIChjbGFzcyB3cmFwcGVyKSB0byB0aGUgb2JqZWN0XG4gICAgICAgIC8vIHdpdGgga2V5IGBjbGFzc05hbWVgIHRvIGtlZXAgdGhlIGNvcnJlY3QgbmFtZS5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGl0IGZhbGxzIGJhY2sgdG8gbG9nZ2luZyBgQ2xhc3NJc1dyYXBwZXJgLlxuICAgICAgICBbY2xhc3NOYW1lXTogY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHN5bWJvbCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfVtjbGFzc05hbWVdO1xuXG4gICAgQ2xhc3NJc1dyYXBwZXJbYGlzJHtjbGFzc05hbWV9YF0gPSAob2JqKSA9PiAhIShvYmogJiYgb2JqW3N5bWJvbF0pO1xuXG4gICAgcmV0dXJuIENsYXNzSXNXcmFwcGVyO1xufVxuXG5mdW5jdGlvbiB3aXRoSXNQcm90byhDbGFzcywgeyBjbGFzc05hbWUsIHN5bWJvbE5hbWUsIHdpdGhvdXROZXcgfSkge1xuICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbC5mb3Ioc3ltYm9sTmFtZSk7XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG4gICAgY29uc3QgQ2xhc3NJc1dyYXBwZXIgPSB7XG4gICAgICAgIFtjbGFzc05hbWVdOiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgaWYgKHdpdGhvdXROZXcgJiYgISh0aGlzIGluc3RhbmNlb2YgQ2xhc3NJc1dyYXBwZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGFzc0lzV3JhcHBlciguLi5hcmdzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgX3RoaXMgPSBDbGFzcy5jYWxsKHRoaXMsIC4uLmFyZ3MpIHx8IHRoaXM7XG5cbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiAhX3RoaXNbc3ltYm9sXSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgIH0sXG4gICAgfVtjbGFzc05hbWVdO1xuICAgIC8qIGVzbGludC1lbmFibGUgb2JqZWN0LXNob3J0aGFuZCAqL1xuXG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUpO1xuICAgIENsYXNzSXNXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzSXNXcmFwcGVyO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENsYXNzSXNXcmFwcGVyLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2l0aElzO1xubW9kdWxlLmV4cG9ydHMucHJvdG8gPSB3aXRoSXNQcm90bztcbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG4gIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ29tYmluZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkNvbWJpbmVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNvbWJpbmVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBjb21iaW5lZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkU3RyZWFtO1xufTtcblxuQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHJldHVybiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ3N0cmluZycpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdib29sZWFuJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ251bWJlcicpXG4gICAgJiYgKCFCdWZmZXIuaXNCdWZmZXIoc3RyZWFtKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcblxuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgRGVsYXllZFN0cmVhbSkpIHtcbiAgICAgIHZhciBuZXdTdHJlYW0gPSBEZWxheWVkU3RyZWFtLmNyZWF0ZShzdHJlYW0sIHtcbiAgICAgICAgbWF4RGF0YVNpemU6IEluZmluaXR5LFxuICAgICAgICBwYXVzZVN0cmVhbTogdGhpcy5wYXVzZVN0cmVhbXMsXG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICBzdHJlYW0gPSBuZXdTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG5cbiAgICBpZiAodGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0cmVhbXMucHVzaChzdHJlYW0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2dldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2luc2lkZUxvb3ApIHtcbiAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IHRydWU7XG4gICAgcmV0dXJuOyAvLyBkZWZlciBjYWxsXG4gIH1cblxuICB0aGlzLl9pbnNpZGVMb29wID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBkbyB7XG4gICAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhbEdldE5leHQoKTtcbiAgICB9IHdoaWxlICh0aGlzLl9wZW5kaW5nTmV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3JlYWxHZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zdHJlYW1zLnNoaWZ0KCk7XG5cblxuICBpZiAodHlwZW9mIHN0cmVhbSA9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXRTdHJlYW0gPSBzdHJlYW07XG4gIGdldFN0cmVhbShmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gICAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3BpcGVOZXh0ID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBzdHJlYW07XG5cbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCB0aGlzLl9nZXROZXh0LmJpbmQodGhpcykpO1xuICAgIHN0cmVhbS5waXBlKHRoaXMsIHtlbmQ6IGZhbHNlfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gc3RyZWFtO1xuICB0aGlzLndyaXRlKHZhbHVlKTtcbiAgdGhpcy5fZ2V0TmV4dCgpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFcnJvcnMgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5fZW1pdEVycm9yKGVycik7XG4gIH0pO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSgpO1xuICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5fZ2V0TmV4dCgpO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKCk7XG4gIHRoaXMuZW1pdCgncmVzdW1lJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl91cGRhdGVEYXRhU2l6ZSgpO1xuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nO1xuICB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fdXBkYXRlRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9zdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgaWYgKCFzdHJlYW0uZGF0YVNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmRhdGFTaXplICs9IHN0cmVhbS5kYXRhU2l6ZTtcbiAgfSk7XG5cbiAgaWYgKHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZSkge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9lbWl0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lXG4gICAgICAgICAgICAgICAmJiAndW5kZWZpbmVkJyAhPSB0eXBlb2YgY2hyb21lLnN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgID8gY2hyb21lLnN0b3JhZ2UubG9jYWxcbiAgICAgICAgICAgICAgICAgIDogbG9jYWxzdG9yYWdlKCk7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gW1xuICAnIzAwMDBDQycsICcjMDAwMEZGJywgJyMwMDMzQ0MnLCAnIzAwMzNGRicsICcjMDA2NkNDJywgJyMwMDY2RkYnLCAnIzAwOTlDQycsXG4gICcjMDA5OUZGJywgJyMwMENDMDAnLCAnIzAwQ0MzMycsICcjMDBDQzY2JywgJyMwMENDOTknLCAnIzAwQ0NDQycsICcjMDBDQ0ZGJyxcbiAgJyMzMzAwQ0MnLCAnIzMzMDBGRicsICcjMzMzM0NDJywgJyMzMzMzRkYnLCAnIzMzNjZDQycsICcjMzM2NkZGJywgJyMzMzk5Q0MnLFxuICAnIzMzOTlGRicsICcjMzNDQzAwJywgJyMzM0NDMzMnLCAnIzMzQ0M2NicsICcjMzNDQzk5JywgJyMzM0NDQ0MnLCAnIzMzQ0NGRicsXG4gICcjNjYwMENDJywgJyM2NjAwRkYnLCAnIzY2MzNDQycsICcjNjYzM0ZGJywgJyM2NkNDMDAnLCAnIzY2Q0MzMycsICcjOTkwMENDJyxcbiAgJyM5OTAwRkYnLCAnIzk5MzNDQycsICcjOTkzM0ZGJywgJyM5OUNDMDAnLCAnIzk5Q0MzMycsICcjQ0MwMDAwJywgJyNDQzAwMzMnLFxuICAnI0NDMDA2NicsICcjQ0MwMDk5JywgJyNDQzAwQ0MnLCAnI0NDMDBGRicsICcjQ0MzMzAwJywgJyNDQzMzMzMnLCAnI0NDMzM2NicsXG4gICcjQ0MzMzk5JywgJyNDQzMzQ0MnLCAnI0NDMzNGRicsICcjQ0M2NjAwJywgJyNDQzY2MzMnLCAnI0NDOTkwMCcsICcjQ0M5OTMzJyxcbiAgJyNDQ0NDMDAnLCAnI0NDQ0MzMycsICcjRkYwMDAwJywgJyNGRjAwMzMnLCAnI0ZGMDA2NicsICcjRkYwMDk5JywgJyNGRjAwQ0MnLFxuICAnI0ZGMDBGRicsICcjRkYzMzAwJywgJyNGRjMzMzMnLCAnI0ZGMzM2NicsICcjRkYzMzk5JywgJyNGRjMzQ0MnLCAnI0ZGMzNGRicsXG4gICcjRkY2NjAwJywgJyNGRjY2MzMnLCAnI0ZGOTkwMCcsICcjRkY5OTMzJywgJyNGRkNDMDAnLCAnI0ZGQ0MzMydcbl07XG5cbi8qKlxuICogQ3VycmVudGx5IG9ubHkgV2ViS2l0LWJhc2VkIFdlYiBJbnNwZWN0b3JzLCBGaXJlZm94ID49IHYzMSxcbiAqIGFuZCB0aGUgRmlyZWJ1ZyBleHRlbnNpb24gKGFueSBGaXJlZm94IHZlcnNpb24pIGFyZSBrbm93blxuICogdG8gc3VwcG9ydCBcIiVjXCIgQ1NTIGN1c3RvbWl6YXRpb25zLlxuICpcbiAqIFRPRE86IGFkZCBhIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIHRvIGV4cGxpY2l0bHkgZW5hYmxlL2Rpc2FibGUgY29sb3JzXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gIC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG4gIC8vIGV4cGxpY2l0bHlcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcbiAgLy8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcbiAgcmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG4gICAgLy8gaXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG4gICAgLy8gaXMgZmlyZWZveCA+PSB2MzE/XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG4gICAgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG4gICAgLy8gZG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24odikge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVyci5tZXNzYWdlO1xuICB9XG59O1xuXG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG4gIHZhciB1c2VDb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblxuICBhcmdzWzBdID0gKHVzZUNvbG9ycyA/ICclYycgOiAnJylcbiAgICArIHRoaXMubmFtZXNwYWNlXG4gICAgKyAodXNlQ29sb3JzID8gJyAlYycgOiAnICcpXG4gICAgKyBhcmdzWzBdXG4gICAgKyAodXNlQ29sb3JzID8gJyVjICcgOiAnICcpXG4gICAgKyAnKycgKyBleHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cbiAgaWYgKCF1c2VDb2xvcnMpIHJldHVybjtcblxuICB2YXIgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG4gIGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpXG5cbiAgLy8gdGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcbiAgLy8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgaWYgKCclJScgPT09IG1hdGNoKSByZXR1cm47XG4gICAgaW5kZXgrKztcbiAgICBpZiAoJyVjJyA9PT0gbWF0Y2gpIHtcbiAgICAgIC8vIHdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcblxuICBhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5sb2coKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmxvZ2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICAvLyB0aGlzIGhhY2tlcnkgaXMgcmVxdWlyZWQgZm9yIElFOC85LCB3aGVyZVxuICAvLyB0aGUgYGNvbnNvbGUubG9nYCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgJ2FwcGx5J1xuICByZXR1cm4gJ29iamVjdCcgPT09IHR5cGVvZiBjb25zb2xlXG4gICAgJiYgY29uc29sZS5sb2dcbiAgICAmJiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZywgY29uc29sZSwgYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIHRyeSB7XG4gICAgaWYgKG51bGwgPT0gbmFtZXNwYWNlcykge1xuICAgICAgZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZyA9IG5hbWVzcGFjZXM7XG4gICAgfVxuICB9IGNhdGNoKGUpIHt9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgdmFyIHI7XG4gIHRyeSB7XG4gICAgciA9IGV4cG9ydHMuc3RvcmFnZS5kZWJ1ZztcbiAgfSBjYXRjaChlKSB7fVxuXG4gIC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcbiAgaWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG4gICAgciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuICB9XG5cbiAgcmV0dXJuIHI7XG59XG5cbi8qKlxuICogRW5hYmxlIG5hbWVzcGFjZXMgbGlzdGVkIGluIGBsb2NhbFN0b3JhZ2UuZGVidWdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgfSBjYXRjaCAoZSkge31cbn1cbiIsIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnWydkZWZhdWx0J10gPSBjcmVhdGVEZWJ1ZztcbmV4cG9ydHMuY29lcmNlID0gY29lcmNlO1xuZXhwb3J0cy5kaXNhYmxlID0gZGlzYWJsZTtcbmV4cG9ydHMuZW5hYmxlID0gZW5hYmxlO1xuZXhwb3J0cy5lbmFibGVkID0gZW5hYmxlZDtcbmV4cG9ydHMuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXG4vKipcbiAqIEFjdGl2ZSBgZGVidWdgIGluc3RhbmNlcy5cbiAqL1xuZXhwb3J0cy5pbnN0YW5jZXMgPSBbXTtcblxuLyoqXG4gKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cbiAqL1xuXG5leHBvcnRzLm5hbWVzID0gW107XG5leHBvcnRzLnNraXBzID0gW107XG5cbi8qKlxuICogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuICpcbiAqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMgPSB7fTtcblxuLyoqXG4gKiBTZWxlY3QgYSBjb2xvci5cbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuICB2YXIgaGFzaCA9IDAsIGk7XG5cbiAgZm9yIChpIGluIG5hbWVzcGFjZSkge1xuICAgIGhhc2ggID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcbiAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMuY29sb3JzW01hdGguYWJzKGhhc2gpICUgZXhwb3J0cy5jb2xvcnMubGVuZ3RoXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBkZWJ1Z2dlciB3aXRoIHRoZSBnaXZlbiBgbmFtZXNwYWNlYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cbiAgdmFyIHByZXZUaW1lO1xuXG4gIGZ1bmN0aW9uIGRlYnVnKCkge1xuICAgIC8vIGRpc2FibGVkP1xuICAgIGlmICghZGVidWcuZW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgdmFyIHNlbGYgPSBkZWJ1ZztcblxuICAgIC8vIHNldCBgZGlmZmAgdGltZXN0YW1wXG4gICAgdmFyIGN1cnIgPSArbmV3IERhdGUoKTtcbiAgICB2YXIgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuICAgIHNlbGYuZGlmZiA9IG1zO1xuICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgIHNlbGYuY3VyciA9IGN1cnI7XG4gICAgcHJldlRpbWUgPSBjdXJyO1xuXG4gICAgLy8gdHVybiB0aGUgYGFyZ3VtZW50c2AgaW50byBhIHByb3BlciBBcnJheVxuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBhcmdzWzBdID0gZXhwb3J0cy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBhcmdzWzBdKSB7XG4gICAgICAvLyBhbnl0aGluZyBlbHNlIGxldCdzIGluc3BlY3Qgd2l0aCAlT1xuICAgICAgYXJncy51bnNoaWZ0KCclTycpO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IGFueSBgZm9ybWF0dGVyc2AgdHJhbnNmb3JtYXRpb25zXG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgZnVuY3Rpb24obWF0Y2gsIGZvcm1hdCkge1xuICAgICAgLy8gaWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgaWYgKG1hdGNoID09PSAnJSUnKSByZXR1cm4gbWF0Y2g7XG4gICAgICBpbmRleCsrO1xuICAgICAgdmFyIGZvcm1hdHRlciA9IGV4cG9ydHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBmb3JtYXR0ZXIpIHtcbiAgICAgICAgdmFyIHZhbCA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICBtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cbiAgICAgICAgLy8gbm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuICAgICAgICBhcmdzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGluZGV4LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSBlbnYtc3BlY2lmaWMgZm9ybWF0dGluZyAoY29sb3JzLCBldGMuKVxuICAgIGV4cG9ydHMuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuXG4gICAgdmFyIGxvZ0ZuID0gZGVidWcubG9nIHx8IGV4cG9ydHMubG9nIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG4gICAgbG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gIH1cblxuICBkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG4gIGRlYnVnLmVuYWJsZWQgPSBleHBvcnRzLmVuYWJsZWQobmFtZXNwYWNlKTtcbiAgZGVidWcudXNlQ29sb3JzID0gZXhwb3J0cy51c2VDb2xvcnMoKTtcbiAgZGVidWcuY29sb3IgPSBzZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuICBkZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuICAvLyBlbnYtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGRlYnVnIGluc3RhbmNlc1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGV4cG9ydHMuaW5pdCkge1xuICAgIGV4cG9ydHMuaW5pdChkZWJ1Zyk7XG4gIH1cblxuICBleHBvcnRzLmluc3RhbmNlcy5wdXNoKGRlYnVnKTtcblxuICByZXR1cm4gZGVidWc7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICB2YXIgaW5kZXggPSBleHBvcnRzLmluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgZXhwb3J0cy5pbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gKiBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgd2lsZGNhcmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gIGV4cG9ydHMuc2F2ZShuYW1lc3BhY2VzKTtcblxuICBleHBvcnRzLm5hbWVzID0gW107XG4gIGV4cG9ydHMuc2tpcHMgPSBbXTtcblxuICB2YXIgaTtcbiAgdmFyIHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcbiAgdmFyIGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoIXNwbGl0W2ldKSBjb250aW51ZTsgLy8gaWdub3JlIGVtcHR5IHN0cmluZ3NcbiAgICBuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcbiAgICBpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG4gICAgICBleHBvcnRzLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnN1YnN0cigxKSArICckJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IGV4cG9ydHMuaW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZXhwb3J0cy5pbnN0YW5jZXNbaV07XG4gICAgaW5zdGFuY2UuZW5hYmxlZCA9IGV4cG9ydHMuZW5hYmxlZChpbnN0YW5jZS5uYW1lc3BhY2UpO1xuICB9XG59XG5cbi8qKlxuICogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkaXNhYmxlKCkge1xuICBleHBvcnRzLmVuYWJsZSgnJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlbmFibGVkKG5hbWUpIHtcbiAgaWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGksIGxlbjtcbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5za2lwcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLnNraXBzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZm9yIChpID0gMCwgbGVuID0gZXhwb3J0cy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChleHBvcnRzLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29lcmNlIGB2YWxgLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICogQHJldHVybiB7TWl4ZWR9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjb2VyY2UodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcbiAgcmV0dXJuIHZhbDtcbn1cbiIsIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqXG4gKiBFeHBvc2UgYGRlYnVnKClgIGFzIHRoZSBtb2R1bGUuXG4gKi9cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kZWJ1ZycpO1xuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWyA2LCAyLCAzLCA0LCA1LCAxIF07XG5cbnRyeSB7XG4gIHZhciBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcbiAgaWYgKHN1cHBvcnRzQ29sb3IgJiYgc3VwcG9ydHNDb2xvci5sZXZlbCA+PSAyKSB7XG4gICAgZXhwb3J0cy5jb2xvcnMgPSBbXG4gICAgICAyMCwgMjEsIDI2LCAyNywgMzIsIDMzLCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDU2LCA1NywgNjIsIDYzLCA2OCxcbiAgICAgIDY5LCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDkyLCA5MywgOTgsIDk5LCAxMTIsIDExMywgMTI4LCAxMjksIDEzNCxcbiAgICAgIDEzNSwgMTQ4LCAxNDksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsXG4gICAgICAxNzIsIDE3MywgMTc4LCAxNzksIDE4NCwgMTg1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LFxuICAgICAgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxNCwgMjE1LCAyMjAsIDIyMVxuICAgIF07XG4gIH1cbn0gY2F0Y2ggKGVycikge1xuICAvLyBzd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKGZ1bmN0aW9uIChvYmosIGtleSkge1xuICAvLyBjYW1lbC1jYXNlXG4gIHZhciBwcm9wID0ga2V5XG4gICAgLnN1YnN0cmluZyg2KVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL18oW2Etel0pL2csIGZ1bmN0aW9uIChfLCBrKSB7IHJldHVybiBrLnRvVXBwZXJDYXNlKCkgfSk7XG5cbiAgLy8gY29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG4gIHZhciB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuICBpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB2YWwgPSB0cnVlO1xuICBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkgdmFsID0gZmFsc2U7XG4gIGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB2YWwgPSBudWxsO1xuICBlbHNlIHZhbCA9IE51bWJlcih2YWwpO1xuXG4gIG9ialtwcm9wXSA9IHZhbDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICByZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0c1xuICAgID8gQm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycylcbiAgICA6IHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIE1hcCAlbyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGwgb24gYSBzaW5nbGUgbGluZS5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcbiAgcmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuICAgIC5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50cmltKClcbiAgICB9KS5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlbyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLk8gPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG4gIHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgbmFtZSA9IHRoaXMubmFtZXNwYWNlO1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgaWYgKHVzZUNvbG9ycykge1xuICAgIHZhciBjID0gdGhpcy5jb2xvcjtcbiAgICB2YXIgY29sb3JDb2RlID0gJ1xcdTAwMWJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG4gICAgdmFyIHByZWZpeCA9ICcgICcgKyBjb2xvckNvZGUgKyAnOzFtJyArIG5hbWUgKyAnICcgKyAnXFx1MDAxYlswbSc7XG5cbiAgICBhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG4gICAgYXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBleHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxYlswbScpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuICBpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuICAgIHJldHVybiAnJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xuICB9XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXQoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coKSB7XG4gIHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpICsgJ1xcbicpO1xufVxuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcbiAgaWYgKG51bGwgPT0gbmFtZXNwYWNlcykge1xuICAgIC8vIElmIHlvdSBzZXQgYSBwcm9jZXNzLmVudiBmaWVsZCB0byBudWxsIG9yIHVuZGVmaW5lZCwgaXQgZ2V0cyBjYXN0IHRvIHRoZVxuICAgIC8vIHN0cmluZyAnbnVsbCcgb3IgJ3VuZGVmaW5lZCcuIEp1c3QgZGVsZXRlIGluc3RlYWQuXG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkRFQlVHO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0IChkZWJ1Zykge1xuICBkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXhwb3J0cy5pbnNwZWN0T3B0cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlYnVnLmluc3BlY3RPcHRzW2tleXNbaV1dID0gZXhwb3J0cy5pbnNwZWN0T3B0c1trZXlzW2ldXTtcbiAgfVxufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgcHJvY2Vzcy5lbnYuREVCVUdgIGluaXRpYWxseS5cbiAqL1xuXG5leHBvcnRzLmVuYWJsZShsb2FkKCkpO1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBodHRwID0gcmVxdWlyZShcImh0dHBcIik7XG52YXIgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgZGVidWcgPSByZXF1aXJlKFwiZGVidWdcIikoXCJmb2xsb3ctcmVkaXJlY3RzXCIpO1xuXG4vLyBSRkM3MjMxwqc0LjIuMTogT2YgdGhlIHJlcXVlc3QgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoaXMgc3BlY2lmaWNhdGlvbixcbi8vIHRoZSBHRVQsIEhFQUQsIE9QVElPTlMsIGFuZCBUUkFDRSBtZXRob2RzIGFyZSBkZWZpbmVkIHRvIGJlIHNhZmUuXG52YXIgU0FGRV9NRVRIT0RTID0geyBHRVQ6IHRydWUsIEhFQUQ6IHRydWUsIE9QVElPTlM6IHRydWUsIFRSQUNFOiB0cnVlIH07XG5cbi8vIENyZWF0ZSBoYW5kbGVycyB0aGF0IHBhc3MgZXZlbnRzIGZyb20gbmF0aXZlIHJlcXVlc3RzXG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5bXCJhYm9ydFwiLCBcImFib3J0ZWRcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgdGhpcy5fcmVkaXJlY3RhYmxlLmVtaXQoZXZlbnQsIGFyZyk7XG4gIH07XG59KTtcblxuLy8gQW4gSFRUUChTKSByZXF1ZXN0IHRoYXQgY2FuIGJlIHJlZGlyZWN0ZWRcbmZ1bmN0aW9uIFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgcmVzcG9uc2VDYWxsYmFjaykge1xuICAvLyBJbml0aWFsaXplIHRoZSByZXF1ZXN0XG4gIFdyaXRhYmxlLmNhbGwodGhpcyk7XG4gIG9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuX3JlZGlyZWN0Q291bnQgPSAwO1xuICB0aGlzLl9yZWRpcmVjdHMgPSBbXTtcbiAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggPSAwO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgc2VsZi5fcHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfTtcblxuICAvLyBDb21wbGV0ZSB0aGUgVVJMIG9iamVjdCB3aGVuIG5lY2Vzc2FyeVxuICBpZiAoIW9wdGlvbnMucGF0aG5hbWUgJiYgb3B0aW9ucy5wYXRoKSB7XG4gICAgdmFyIHNlYXJjaFBvcyA9IG9wdGlvbnMucGF0aC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoUG9zIDwgMCkge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZygwLCBzZWFyY2hQb3MpO1xuICAgICAgb3B0aW9ucy5zZWFyY2ggPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKHNlYXJjaFBvcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgZmlyc3QgcmVxdWVzdFxuICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xufVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRhYmxlLnByb3RvdHlwZSk7XG5cbi8vIFdyaXRlcyBidWZmZXJlZCBkYXRhIHRvIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIChcImxlbmd0aFwiIGluIGRhdGEpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCIpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBhbmQgZW5kXG4gIHZhciBjdXJyZW50UmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0O1xuICB0aGlzLndyaXRlKGRhdGEgfHwgXCJcIiwgZW5jb2RpbmcsIGZ1bmN0aW9uICgpIHtcbiAgICBjdXJyZW50UmVxdWVzdC5lbmQobnVsbCwgbnVsbCwgY2FsbGJhY2spO1xuICB9KTtcbn07XG5cbi8vIFNldHMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3Quc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbn07XG5cbi8vIENsZWFycyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUucmVtb3ZlSGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3QucmVtb3ZlSGVhZGVyKG5hbWUpO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJhYm9ydFwiLCBcImZsdXNoSGVhZGVyc1wiLCBcImdldEhlYWRlclwiLFxuICBcInNldE5vRGVsYXlcIiwgXCJzZXRTb2NrZXRLZWVwQWxpdmVcIiwgXCJzZXRUaW1lb3V0XCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG4vLyBFeGVjdXRlcyB0aGUgbmV4dCBuYXRpdmUgcmVxdWVzdCAoaW5pdGlhbCBvciByZWRpcmVjdClcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wZXJmb3JtUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gTG9hZCB0aGUgbmF0aXZlIHByb3RvY29sXG4gIHZhciBwcm90b2NvbCA9IHRoaXMuX29wdGlvbnMucHJvdG9jb2w7XG4gIHZhciBuYXRpdmVQcm90b2NvbCA9IHRoaXMuX29wdGlvbnMubmF0aXZlUHJvdG9jb2xzW3Byb3RvY29sXTtcbiAgaWYgKCFuYXRpdmVQcm90b2NvbCkge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHByb3RvY29sIFwiICsgcHJvdG9jb2wpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc3Vic3RyKDAsIHByb3RvY29sLmxlbmd0aCAtIDEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdFxuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgdGhpcy5fY3VycmVudFVybCA9IHVybC5mb3JtYXQodGhpcy5fb3B0aW9ucyk7XG5cbiAgLy8gU2V0IHVwIGV2ZW50IGhhbmRsZXJzXG4gIHJlcXVlc3QuX3JlZGlyZWN0YWJsZSA9IHRoaXM7XG4gIGZvciAodmFyIGV2ZW50IGluIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudCkge1xuICAgICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuZCBhIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICAvLyAoVGhlIGZpcnN0IHJlcXVlc3QgbXVzdCBiZSBlbmRlZCBleHBsaWNpdGx5IHdpdGggUmVkaXJlY3RhYmxlUmVxdWVzdCNlbmQpXG4gIGlmICh0aGlzLl9pc1JlZGlyZWN0KSB7XG4gICAgLy8gV3JpdGUgdGhlIHJlcXVlc3QgZW50aXR5IGFuZCBlbmQuXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBidWZmZXJzID0gdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzO1xuICAgIChmdW5jdGlvbiB3cml0ZU5leHQoKSB7XG4gICAgICBpZiAoaSA8IGJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXF1ZXN0LmVuZCgpO1xuICAgICAgfVxuICAgIH0oKSk7XG4gIH1cbn07XG5cbi8vIFByb2Nlc3NlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wcm9jZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgLy8gU3RvcmUgdGhlIHJlZGlyZWN0ZWQgcmVzcG9uc2VcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cbiAgdmFyIGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVycy5sb2NhdGlvbjtcbiAgaWYgKGxvY2F0aW9uICYmIHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzICE9PSBmYWxzZSAmJlxuICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDQwMCkge1xuICAgIC8vIFJGQzcyMzHCpzYuNDogQSBjbGllbnQgU0hPVUxEIGRldGVjdCBhbmQgaW50ZXJ2ZW5lXG4gICAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICAgIGlmICgrK3RoaXMuX3JlZGlyZWN0Q291bnQgPiB0aGlzLl9vcHRpb25zLm1heFJlZGlyZWN0cykge1xuICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiTWF4IHJlZGlyZWN0cyBleGNlZWRlZC5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAgIC8vIGNhcmUgZm9yIG1ldGhvZHMgbm90IGtub3duIHRvIGJlIHNhZmUgW+KApl0sXG4gICAgLy8gc2luY2UgdGhlIHVzZXIgbWlnaHQgbm90IHdpc2ggdG8gcmVkaXJlY3QgYW4gdW5zYWZlIHJlcXVlc3QuXG4gICAgLy8gUkZDNzIzMcKnNi40Ljc6IFRoZSAzMDcgKFRlbXBvcmFyeSBSZWRpcmVjdCkgc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gICAgLy8gdGhhdCB0aGUgdGFyZ2V0IHJlc291cmNlIHJlc2lkZXMgdGVtcG9yYXJpbHkgdW5kZXIgYSBkaWZmZXJlbnQgVVJJXG4gICAgLy8gYW5kIHRoZSB1c2VyIGFnZW50IE1VU1QgTk9UIGNoYW5nZSB0aGUgcmVxdWVzdCBtZXRob2RcbiAgICAvLyBpZiBpdCBwZXJmb3JtcyBhbiBhdXRvbWF0aWMgcmVkaXJlY3Rpb24gdG8gdGhhdCBVUkkuXG4gICAgdmFyIGhlYWRlcjtcbiAgICB2YXIgaGVhZGVycyA9IHRoaXMuX29wdGlvbnMuaGVhZGVycztcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMzA3ICYmICEodGhpcy5fb3B0aW9ucy5tZXRob2QgaW4gU0FGRV9NRVRIT0RTKSkge1xuICAgICAgdGhpcy5fb3B0aW9ucy5tZXRob2QgPSBcIkdFVFwiO1xuICAgICAgLy8gRHJvcCBhIHBvc3NpYmxlIGVudGl0eSBhbmQgaGVhZGVycyByZWxhdGVkIHRvIGl0XG4gICAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICAgIGZvciAoaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKC9eY29udGVudC0vaS50ZXN0KGhlYWRlcikpIHtcbiAgICAgICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgICBpZiAoIXRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAgIGZvciAoaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKC9eaG9zdCQvaS50ZXN0KGhlYWRlcikpIHtcbiAgICAgICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gICAgdmFyIHJlZGlyZWN0VXJsID0gdXJsLnJlc29sdmUodGhpcy5fY3VycmVudFVybCwgbG9jYXRpb24pO1xuICAgIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdXJsLnBhcnNlKHJlZGlyZWN0VXJsKSk7XG4gICAgdGhpcy5faXNSZWRpcmVjdCA9IHRydWU7XG4gICAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcblxuICAgIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICAgIHJlc3BvbnNlLmRlc3Ryb3koKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBUaGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgfVxufTtcblxuLy8gV3JhcHMgdGhlIGtleS92YWx1ZSBvYmplY3Qgb2YgcHJvdG9jb2xzIHdpdGggcmVkaXJlY3QgZnVuY3Rpb25hbGl0eVxuZnVuY3Rpb24gd3JhcChwcm90b2NvbHMpIHtcbiAgLy8gRGVmYXVsdCBzZXR0aW5nc1xuICB2YXIgZXhwb3J0cyA9IHtcbiAgICBtYXhSZWRpcmVjdHM6IDIxLFxuICAgIG1heEJvZHlMZW5ndGg6IDEwICogMTAyNCAqIDEwMjQsXG4gIH07XG5cbiAgLy8gV3JhcCBlYWNoIHByb3RvY29sXG4gIHZhciBuYXRpdmVQcm90b2NvbHMgPSB7fTtcbiAgT2JqZWN0LmtleXMocHJvdG9jb2xzKS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWUpIHtcbiAgICB2YXIgcHJvdG9jb2wgPSBzY2hlbWUgKyBcIjpcIjtcbiAgICB2YXIgbmF0aXZlUHJvdG9jb2wgPSBuYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdID0gcHJvdG9jb2xzW3NjaGVtZV07XG4gICAgdmFyIHdyYXBwZWRQcm90b2NvbCA9IGV4cG9ydHNbc2NoZW1lXSA9IE9iamVjdC5jcmVhdGUobmF0aXZlUHJvdG9jb2wpO1xuXG4gICAgLy8gRXhlY3V0ZXMgYSByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgd3JhcHBlZFByb3RvY29sLnJlcXVlc3QgPSBmdW5jdGlvbiAob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvcHRpb25zID0gdXJsLnBhcnNlKG9wdGlvbnMpO1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGV4cG9ydHMubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiBleHBvcnRzLm1heEJvZHlMZW5ndGgsXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICAvLyBFeGVjdXRlcyBhIEdFVCByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgd3JhcHBlZFByb3RvY29sLmdldCA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICByZXF1ZXN0LmVuZCgpO1xuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBleHBvcnRzO1xufVxuXG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXAoeyBodHRwOiBodHRwLCBodHRwczogaHR0cHMgfSk7XG5tb2R1bGUuZXhwb3J0cy53cmFwID0gd3JhcDtcbiIsInZhciBDb21iaW5lZFN0cmVhbSA9IHJlcXVpcmUoJ2NvbWJpbmVkLXN0cmVhbScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBwYXJzZVVybCA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YSgpO1xuICB9XG5cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZUxlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSA9IFtdO1xuXG4gIENvbWJpbmVkU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG59XG5cbkZvcm1EYXRhLkxJTkVfQlJFQUsgPSAnXFxyXFxuJztcbkZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBhbGxvdyBmaWxlbmFtZSBhcyBzaW5nbGUgb3B0aW9uXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7ZmlsZW5hbWU6IG9wdGlvbnN9O1xuICB9XG5cbiAgdmFyIGFwcGVuZCA9IENvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQuYmluZCh0aGlzKTtcblxuICAvLyBhbGwgdGhhdCBzdHJlYW15IGJ1c2luZXNzIGNhbid0IGhhbmRsZSBudW1iZXJzXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmVsaXhnZS9ub2RlLWZvcm0tZGF0YS9pc3N1ZXMvMzhcbiAgaWYgKHV0aWwuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBQbGVhc2UgY29udmVydCB5b3VyIGFycmF5IGludG8gc3RyaW5nXG4gICAgLy8gdGhlIHdheSB3ZWIgc2VydmVyIGV4cGVjdHMgaXRcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0FycmF5cyBhcmUgbm90IHN1cHBvcnRlZC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGhlYWRlciA9IHRoaXMuX211bHRpUGFydEhlYWRlcihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpO1xuICB2YXIgZm9vdGVyID0gdGhpcy5fbXVsdGlQYXJ0Rm9vdGVyKCk7XG5cbiAgYXBwZW5kKGhlYWRlcik7XG4gIGFwcGVuZCh2YWx1ZSk7XG4gIGFwcGVuZChmb290ZXIpO1xuXG4gIC8vIHBhc3MgYWxvbmcgb3B0aW9ucy5rbm93bkxlbmd0aFxuICB0aGlzLl90cmFja0xlbmd0aChoZWFkZXIsIHZhbHVlLCBvcHRpb25zKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fdHJhY2tMZW5ndGggPSBmdW5jdGlvbihoZWFkZXIsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB2YWx1ZUxlbmd0aCA9IDA7XG5cbiAgLy8gdXNlZCB3LyBnZXRMZW5ndGhTeW5jKCksIHdoZW4gbGVuZ3RoIGlzIGtub3duLlxuICAvLyBlLmcuIGZvciBzdHJlYW1pbmcgZGlyZWN0bHkgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIsXG4gIC8vIHcvIGEga25vd24gZmlsZSBhIHNpemUsIGFuZCBub3Qgd2FudGluZyB0byB3YWl0IGZvclxuICAvLyBpbmNvbWluZyBmaWxlIHRvIGZpbmlzaCB0byBnZXQgaXRzIHNpemUuXG4gIGlmIChvcHRpb25zLmtub3duTGVuZ3RoICE9IG51bGwpIHtcbiAgICB2YWx1ZUxlbmd0aCArPSArb3B0aW9ucy5rbm93bkxlbmd0aDtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgdGhpcy5fdmFsdWVMZW5ndGggKz0gdmFsdWVMZW5ndGg7XG5cbiAgLy8gQGNoZWNrIHdoeSBhZGQgQ1JMRj8gZG9lcyB0aGlzIGFjY291bnQgZm9yIGN1c3RvbS9tdWx0aXBsZSBDUkxGcz9cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggKz1cbiAgICBCdWZmZXIuYnl0ZUxlbmd0aChoZWFkZXIpICtcbiAgICBGb3JtRGF0YS5MSU5FX0JSRUFLLmxlbmd0aDtcblxuICAvLyBlbXB0eSBvciBlaXRoZXIgZG9lc24ndCBoYXZlIHBhdGggb3Igbm90IGFuIGh0dHAgcmVzcG9uc2VcbiAgaWYgKCF2YWx1ZSB8fCAoICF2YWx1ZS5wYXRoICYmICEodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpICkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBubyBuZWVkIHRvIGJvdGhlciB3aXRoIHRoZSBsZW5ndGhcbiAgaWYgKCFvcHRpb25zLmtub3duTGVuZ3RoKSB7XG4gICAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlLnB1c2godmFsdWUpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xlbmd0aFJldHJpZXZlciA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuXG4gIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZmQnKSkge1xuXG4gICAgLy8gdGFrZSByZWFkIHJhbmdlIGludG8gYSBhY2NvdW50XG4gICAgLy8gYGVuZGAgPSBJbmZpbml0eSDigJM+IHJlYWQgZmlsZSB0aWxsIHRoZSBlbmRcbiAgICAvL1xuICAgIC8vIFRPRE86IExvb2tzIGxpa2UgdGhlcmUgaXMgYnVnIGluIE5vZGUgZnMuY3JlYXRlUmVhZFN0cmVhbVxuICAgIC8vIGl0IGRvZXNuJ3QgcmVzcGVjdCBgZW5kYCBvcHRpb25zIHdpdGhvdXQgYHN0YXJ0YCBvcHRpb25zXG4gICAgLy8gRml4IGl0IHdoZW4gbm9kZSBmaXhlcyBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzc4MTlcbiAgICBpZiAodmFsdWUuZW5kICE9IHVuZGVmaW5lZCAmJiB2YWx1ZS5lbmQgIT0gSW5maW5pdHkgJiYgdmFsdWUuc3RhcnQgIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIC8vIHdoZW4gZW5kIHNwZWNpZmllZFxuICAgICAgLy8gbm8gbmVlZCB0byBjYWxjdWxhdGUgcmFuZ2VcbiAgICAgIC8vIGluY2x1c2l2ZSwgc3RhcnRzIHdpdGggMFxuICAgICAgY2FsbGJhY2sobnVsbCwgdmFsdWUuZW5kICsgMSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCkpO1xuXG4gICAgLy8gbm90IHRoYXQgZmFzdCBzbm9vcHlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RpbGwgbmVlZCB0byBmZXRjaCBmaWxlIHNpemUgZnJvbSBmc1xuICAgICAgZnMuc3RhdCh2YWx1ZS5wYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcblxuICAgICAgICB2YXIgZmlsZVNpemU7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGZpbmFsIHNpemUgYmFzZWQgb24gdGhlIHJhbmdlIG9wdGlvbnNcbiAgICAgICAgZmlsZVNpemUgPSBzdGF0LnNpemUgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApO1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgLy8gb3IgaHR0cCByZXNwb25zZVxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgK3ZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuXG4gIC8vIG9yIHJlcXVlc3Qgc3RyZWFtIGh0dHA6Ly9naXRodWIuY29tL21pa2VhbC9yZXF1ZXN0XG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBNb2R1bGUnKSkge1xuICAgIC8vIHdhaXQgdGlsbCByZXNwb25zZSBjb21lIGJhY2tcbiAgICB2YWx1ZS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgdmFsdWUucGF1c2UoKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsICtyZXNwb25zZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcbiAgICB9KTtcbiAgICB2YWx1ZS5yZXN1bWUoKTtcblxuICAvLyBzb21ldGhpbmcgZWxzZVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKCdVbmtub3duIHN0cmVhbScpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEhlYWRlciA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBjdXN0b20gaGVhZGVyIHNwZWNpZmllZCAoYXMgc3RyaW5nKT9cbiAgLy8gaXQgYmVjb21lcyByZXNwb25zaWJsZSBmb3IgYm91bmRhcnlcbiAgLy8gKGUuZy4gdG8gaGFuZGxlIGV4dHJhIENSTEZzIG9uIC5ORVQgc2VydmVycylcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBvcHRpb25zLmhlYWRlcjtcbiAgfVxuXG4gIHZhciBjb250ZW50RGlzcG9zaXRpb24gPSB0aGlzLl9nZXRDb250ZW50RGlzcG9zaXRpb24odmFsdWUsIG9wdGlvbnMpO1xuICB2YXIgY29udGVudFR5cGUgPSB0aGlzLl9nZXRDb250ZW50VHlwZSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgdmFyIGNvbnRlbnRzID0gJyc7XG4gIHZhciBoZWFkZXJzICA9IHtcbiAgICAvLyBhZGQgY3VzdG9tIGRpc3Bvc2l0aW9uIGFzIHRoaXJkIGVsZW1lbnQgb3Iga2VlcCBpdCB0d28gZWxlbWVudHMgaWYgbm90XG4gICAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nOiBbJ2Zvcm0tZGF0YScsICduYW1lPVwiJyArIGZpZWxkICsgJ1wiJ10uY29uY2F0KGNvbnRlbnREaXNwb3NpdGlvbiB8fCBbXSksXG4gICAgLy8gaWYgbm8gY29udGVudCB0eXBlLiBhbGxvdyBpdCB0byBiZSBlbXB0eSBhcnJheVxuICAgICdDb250ZW50LVR5cGUnOiBbXS5jb25jYXQoY29udGVudFR5cGUgfHwgW10pXG4gIH07XG5cbiAgLy8gYWxsb3cgY3VzdG9tIGhlYWRlcnMuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ29iamVjdCcpIHtcbiAgICBwb3B1bGF0ZShoZWFkZXJzLCBvcHRpb25zLmhlYWRlcik7XG4gIH1cblxuICB2YXIgaGVhZGVyO1xuICBmb3IgKHZhciBwcm9wIGluIGhlYWRlcnMpIHtcbiAgICBpZiAoIWhlYWRlcnMuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgIGhlYWRlciA9IGhlYWRlcnNbcHJvcF07XG5cbiAgICAvLyBza2lwIG51bGxpc2ggaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYWxsIGhlYWRlcnMgdG8gYXJyYXlzLlxuICAgIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIgPSBbaGVhZGVyXTtcbiAgICB9XG5cbiAgICAvLyBhZGQgbm9uLWVtcHR5IGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlci5sZW5ndGgpIHtcbiAgICAgIGNvbnRlbnRzICs9IHByb3AgKyAnOiAnICsgaGVhZGVyLmpvaW4oJzsgJykgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgRm9ybURhdGEuTElORV9CUkVBSyArIGNvbnRlbnRzICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudERpc3Bvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICB2YXIgZmlsZW5hbWVcbiAgICAsIGNvbnRlbnREaXNwb3NpdGlvblxuICAgIDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsZXBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVwYXRoIGZvciByZWxhdGl2ZSBwYXRoc1xuICAgIGZpbGVuYW1lID0gcGF0aC5ub3JtYWxpemUob3B0aW9ucy5maWxlcGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVuYW1lIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIGZvcm1pZGFibGUgYW5kIHRoZSBicm93c2VyIGFkZCBhIG5hbWUgcHJvcGVydHlcbiAgICAvLyBmcy0gYW5kIHJlcXVlc3QtIHN0cmVhbXMgaGF2ZSBwYXRoIHByb3BlcnR5XG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIC8vIG9yIHRyeSBodHRwIHJlc3BvbnNlXG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKHZhbHVlLmNsaWVudC5faHR0cE1lc3NhZ2UucGF0aCB8fCAnJyk7XG4gIH1cblxuICBpZiAoZmlsZW5hbWUpIHtcbiAgICBjb250ZW50RGlzcG9zaXRpb24gPSAnZmlsZW5hbWU9XCInICsgZmlsZW5hbWUgKyAnXCInO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnREaXNwb3NpdGlvbjtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudFR5cGUgPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIC8vIHVzZSBjdXN0b20gY29udGVudC10eXBlIGFib3ZlIGFsbFxuICB2YXIgY29udGVudFR5cGUgPSBvcHRpb25zLmNvbnRlbnRUeXBlO1xuXG4gIC8vIG9yIHRyeSBgbmFtZWAgZnJvbSBmb3JtaWRhYmxlLCBicm93c2VyXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUubmFtZSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAodmFsdWUubmFtZSk7XG4gIH1cblxuICAvLyBvciB0cnkgYHBhdGhgIGZyb20gZnMtLCByZXF1ZXN0LSBzdHJlYW1zXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucGF0aCkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAodmFsdWUucGF0aCk7XG4gIH1cblxuICAvLyBvciBpZiBpdCdzIGh0dHAtcmVwb25zZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgY29udGVudFR5cGUgPSB2YWx1ZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXTtcbiAgfVxuXG4gIC8vIG9yIGd1ZXNzIGl0IGZyb20gdGhlIGZpbGVwYXRoIG9yIGZpbGVuYW1lXG4gIGlmICghY29udGVudFR5cGUgJiYgKG9wdGlvbnMuZmlsZXBhdGggfHwgb3B0aW9ucy5maWxlbmFtZSkpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKG9wdGlvbnMuZmlsZXBhdGggfHwgb3B0aW9ucy5maWxlbmFtZSk7XG4gIH1cblxuICAvLyBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBjb250ZW50IHR5cGUgaWYgYHZhbHVlYCBpcyBub3Qgc2ltcGxlIHZhbHVlXG4gIGlmICghY29udGVudFR5cGUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgY29udGVudFR5cGUgPSBGb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50VHlwZTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0Rm9vdGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBmdW5jdGlvbihuZXh0KSB7XG4gICAgdmFyIGZvb3RlciA9IEZvcm1EYXRhLkxJTkVfQlJFQUs7XG5cbiAgICB2YXIgbGFzdFBhcnQgPSAodGhpcy5fc3RyZWFtcy5sZW5ndGggPT09IDApO1xuICAgIGlmIChsYXN0UGFydCkge1xuICAgICAgZm9vdGVyICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpO1xuICAgIH1cblxuICAgIG5leHQoZm9vdGVyKTtcbiAgfS5iaW5kKHRoaXMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sYXN0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyAnLS0nICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRIZWFkZXJzID0gZnVuY3Rpb24odXNlckhlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcjtcbiAgdmFyIGZvcm1IZWFkZXJzID0ge1xuICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JyArIHRoaXMuZ2V0Qm91bmRhcnkoKVxuICB9O1xuXG4gIGZvciAoaGVhZGVyIGluIHVzZXJIZWFkZXJzKSB7XG4gICAgaWYgKHVzZXJIZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHtcbiAgICAgIGZvcm1IZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXSA9IHVzZXJIZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1IZWFkZXJzO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fYm91bmRhcnkpIHtcbiAgICB0aGlzLl9nZW5lcmF0ZUJvdW5kYXJ5KCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhQnVmZmVyID0gbmV3IEJ1ZmZlci5hbGxvYyggMCApO1xuICB2YXIgYm91bmRhcnkgPSB0aGlzLmdldEJvdW5kYXJ5KCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBmb3JtIGNvbnRlbnQuIEFkZCBMaW5lIGJyZWFrcyB0byB0aGUgZW5kIG9mIGRhdGEuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9zdHJlYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdHJlYW1zW2ldICE9PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAgIC8vIEFkZCBjb250ZW50IHRvIHRoZSBidWZmZXIuXG4gICAgICBpZihCdWZmZXIuaXNCdWZmZXIodGhpcy5fc3RyZWFtc1tpXSkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCB0aGlzLl9zdHJlYW1zW2ldXSk7XG4gICAgICB9ZWxzZSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20odGhpcy5fc3RyZWFtc1tpXSldKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGJyZWFrIGFmdGVyIGNvbnRlbnQuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdzdHJpbmcnIHx8IHRoaXMuX3N0cmVhbXNbaV0uc3Vic3RyaW5nKCAyLCBib3VuZGFyeS5sZW5ndGggKyAyICkgIT09IGJvdW5kYXJ5KSB7XG4gICAgICAgIGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KCBbZGF0YUJ1ZmZlciwgQnVmZmVyLmZyb20oRm9ybURhdGEuTElORV9CUkVBSyldICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHRoZSBmb290ZXIgYW5kIHJldHVybiB0aGUgQnVmZmVyIG9iamVjdC5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9sYXN0Qm91bmRhcnkoKSldICk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dlbmVyYXRlQm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgLy8gVGhpcyBnZW5lcmF0ZXMgYSA1MCBjaGFyYWN0ZXIgYm91bmRhcnkgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5IEZpcmVmb3guXG4gIC8vIFRoZXkgYXJlIG9wdGltaXplZCBmb3IgYm95ZXItbW9vcmUgcGFyc2luZy5cbiAgdmFyIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgYm91bmRhcnkgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG4vLyBOb3RlOiBnZXRMZW5ndGhTeW5jIERPRVNOJ1QgY2FsY3VsYXRlIHN0cmVhbXMgbGVuZ3RoXG4vLyBBcyB3b3JrYXJvdW5kIG9uZSBjYW4gY2FsY3VsYXRlIGZpbGUgc2l6ZSBtYW51YWxseVxuLy8gYW5kIGFkZCBpdCBhcyBrbm93bkxlbmd0aCBvcHRpb25cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGhTeW5jID0gZnVuY3Rpb24oKSB7XG4gIHZhciBrbm93bkxlbmd0aCA9IHRoaXMuX292ZXJoZWFkTGVuZ3RoICsgdGhpcy5fdmFsdWVMZW5ndGg7XG5cbiAgLy8gRG9uJ3QgZ2V0IGNvbmZ1c2VkLCB0aGVyZSBhcmUgMyBcImludGVybmFsXCIgc3RyZWFtcyBmb3IgZWFjaCBrZXl2YWwgcGFpclxuICAvLyBzbyBpdCBiYXNpY2FsbHkgY2hlY2tzIGlmIHRoZXJlIGlzIGFueSB2YWx1ZSBhZGRlZCB0byB0aGUgZm9ybVxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvNDBcbiAgaWYgKCF0aGlzLmhhc0tub3duTGVuZ3RoKCkpIHtcbiAgICAvLyBTb21lIGFzeW5jIGxlbmd0aCByZXRyaWV2ZXJzIGFyZSBwcmVzZW50XG4gICAgLy8gdGhlcmVmb3JlIHN5bmNocm9ub3VzIGxlbmd0aCBjYWxjdWxhdGlvbiBpcyBmYWxzZS5cbiAgICAvLyBQbGVhc2UgdXNlIGdldExlbmd0aChjYWxsYmFjaykgdG8gZ2V0IHByb3BlciBsZW5ndGhcbiAgICB0aGlzLl9lcnJvcihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgcHJvcGVyIGxlbmd0aCBpbiBzeW5jaHJvbm91cyB3YXkuJykpO1xuICB9XG5cbiAgcmV0dXJuIGtub3duTGVuZ3RoO1xufTtcblxuLy8gUHVibGljIEFQSSB0byBjaGVjayBpZiBsZW5ndGggb2YgYWRkZWQgdmFsdWVzIGlzIGtub3duXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMTk2XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZm9ybS1kYXRhL2Zvcm0tZGF0YS9pc3N1ZXMvMjYyXG5Gb3JtRGF0YS5wcm90b3R5cGUuaGFzS25vd25MZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhhc0tub3duTGVuZ3RoID0gdHJ1ZTtcblxuICBpZiAodGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIGhhc0tub3duTGVuZ3RoID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaGFzS25vd25MZW5ndGg7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oY2IpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICBpZiAodGhpcy5fc3RyZWFtcy5sZW5ndGgpIHtcbiAgICBrbm93bkxlbmd0aCArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKS5sZW5ndGg7XG4gIH1cblxuICBpZiAoIXRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5sZW5ndGgpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLmJpbmQodGhpcywgbnVsbCwga25vd25MZW5ndGgpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhc3luY2tpdC5wYXJhbGxlbCh0aGlzLl92YWx1ZXNUb01lYXN1cmUsIHRoaXMuX2xlbmd0aFJldHJpZXZlciwgZnVuY3Rpb24oZXJyLCB2YWx1ZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgICAga25vd25MZW5ndGggKz0gbGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY2IobnVsbCwga25vd25MZW5ndGgpO1xuICB9KTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zdWJtaXQgPSBmdW5jdGlvbihwYXJhbXMsIGNiKSB7XG4gIHZhciByZXF1ZXN0XG4gICAgLCBvcHRpb25zXG4gICAgLCBkZWZhdWx0cyA9IHttZXRob2Q6ICdwb3N0J31cbiAgICA7XG5cbiAgLy8gcGFyc2UgcHJvdmlkZWQgdXJsIGlmIGl0J3Mgc3RyaW5nXG4gIC8vIG9yIHRyZWF0IGl0IGFzIG9wdGlvbnMgb2JqZWN0XG4gIGlmICh0eXBlb2YgcGFyYW1zID09ICdzdHJpbmcnKSB7XG5cbiAgICBwYXJhbXMgPSBwYXJzZVVybChwYXJhbXMpO1xuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZSh7XG4gICAgICBwb3J0OiBwYXJhbXMucG9ydCxcbiAgICAgIHBhdGg6IHBhcmFtcy5wYXRobmFtZSxcbiAgICAgIGhvc3Q6IHBhcmFtcy5ob3N0bmFtZSxcbiAgICAgIHByb3RvY29sOiBwYXJhbXMucHJvdG9jb2xcbiAgICB9LCBkZWZhdWx0cyk7XG5cbiAgLy8gdXNlIGN1c3RvbSBwYXJhbXNcbiAgfSBlbHNlIHtcblxuICAgIG9wdGlvbnMgPSBwb3B1bGF0ZShwYXJhbXMsIGRlZmF1bHRzKTtcbiAgICAvLyBpZiBubyBwb3J0IHByb3ZpZGVkIHVzZSBkZWZhdWx0IG9uZVxuICAgIGlmICghb3B0aW9ucy5wb3J0KSB7XG4gICAgICBvcHRpb25zLnBvcnQgPSBvcHRpb25zLnByb3RvY29sID09ICdodHRwczonID8gNDQzIDogODA7XG4gICAgfVxuICB9XG5cbiAgLy8gcHV0IHRoYXQgZ29vZCBjb2RlIGluIGdldEhlYWRlcnMgdG8gc29tZSB1c2VcbiAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKHBhcmFtcy5oZWFkZXJzKTtcblxuICAvLyBodHRwcyBpZiBzcGVjaWZpZWQsIGZhbGxiYWNrIHRvIGh0dHAgaW4gYW55IG90aGVyIGNhc2VcbiAgaWYgKG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicpIHtcbiAgICByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gZ2V0IGNvbnRlbnQgbGVuZ3RoIGFuZCBmaXJlIGF3YXlcbiAgdGhpcy5nZXRMZW5ndGgoZnVuY3Rpb24oZXJyLCBsZW5ndGgpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG5cbiAgICB0aGlzLnBpcGUocmVxdWVzdCk7XG4gICAgaWYgKGNiKSB7XG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNiKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgY2IuYmluZCh0aGlzLCBudWxsKSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwiLypcbiAqIFtoaS1iYXNlMzJde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvaGktYmFzZTMyfVxuICpcbiAqIEB2ZXJzaW9uIDAuNS4wXG4gKiBAYXV0aG9yIENoZW4sIFlpLUN5dWFuIFtlbW4xNzhAZ21haWwuY29tXVxuICogQGNvcHlyaWdodCBDaGVuLCBZaS1DeXVhbiAyMDE1LTIwMThcbiAqIEBsaWNlbnNlIE1JVFxuICovXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4oZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHJvb3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHt9O1xuICB2YXIgTk9ERV9KUyA9ICFyb290LkhJX0JBU0UzMl9OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbiAgaWYgKE5PREVfSlMpIHtcbiAgICByb290ID0gZ2xvYmFsO1xuICB9XG4gIHZhciBDT01NT05fSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fQ09NTU9OX0pTICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzO1xuICB2YXIgQU1EID0gdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kO1xuICB2YXIgQkFTRTMyX0VOQ09ERV9DSEFSID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3Jy5zcGxpdCgnJyk7XG4gIHZhciBCQVNFMzJfREVDT0RFX0NIQVIgPSB7XG4gICAgJ0EnOiAwLCAnQic6IDEsICdDJzogMiwgJ0QnOiAzLCAnRSc6IDQsICdGJzogNSwgJ0cnOiA2LCAnSCc6IDcsICdJJzogOCxcbiAgICAnSic6IDksICdLJzogMTAsICdMJzogMTEsICdNJzogMTIsICdOJzogMTMsICdPJzogMTQsICdQJzogMTUsICdRJzogMTYsXG4gICAgJ1InOiAxNywgJ1MnOiAxOCwgJ1QnOiAxOSwgJ1UnOiAyMCwgJ1YnOiAyMSwgJ1cnOiAyMiwgJ1gnOiAyMywgJ1knOiAyNCxcbiAgICAnWic6IDI1LCAnMic6IDI2LCAnMyc6IDI3LCAnNCc6IDI4LCAnNSc6IDI5LCAnNic6IDMwLCAnNyc6IDMxXG4gIH07XG5cbiAgdmFyIGJsb2NrcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcblxuICB2YXIgdGhyb3dJbnZhbGlkVXRmOCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgcGFydGlhbCkge1xuICAgIGlmIChwYXJ0aWFsLmxlbmd0aCA+IDEwKSB7XG4gICAgICBwYXJ0aWFsID0gJy4uLicgKyBwYXJ0aWFsLnN1YnN0cigtMTApO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdEZWNvZGVkIGRhdGEgaXMgbm90IHZhbGlkIFVURi04LidcbiAgICAgICsgJyBNYXliZSB0cnkgYmFzZTMyLmRlY29kZS5hc0J5dGVzKCk/J1xuICAgICAgKyAnIFBhcnRpYWwgZGF0YSBhZnRlciByZWFkaW5nICcgKyBwb3NpdGlvbiArICcgYnl0ZXM6ICcgKyBwYXJ0aWFsICsgJyA8LScpO1xuICAgIGVyci5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIHRocm93IGVycjtcbiAgfTtcblxuICB2YXIgdG9VdGY4U3RyaW5nID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHN0ciA9ICcnLCBsZW5ndGggPSBieXRlcy5sZW5ndGgsIGkgPSAwLCBmb2xsb3dpbmdDaGFycyA9IDAsIGIsIGM7XG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgIGIgPSBieXRlc1tpKytdO1xuICAgICAgaWYgKGIgPD0gMHg3Rikge1xuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKGIgPiAweEJGICYmIGIgPD0gMHhERikge1xuICAgICAgICBjID0gYiAmIDB4MUY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEVGKSB7XG4gICAgICAgIGMgPSBiICYgMHgwRjtcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAyO1xuICAgICAgfSBlbHNlIGlmIChiIDw9IDB4RjcpIHtcbiAgICAgICAgYyA9IGIgJiAweDA3O1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvd0ludmFsaWRVdGY4KGksIHN0cik7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9sbG93aW5nQ2hhcnM7ICsraikge1xuICAgICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgICAgaWYgKGIgPCAweDgwIHx8IGIgPiAweEJGKSB7XG4gICAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgICB9XG4gICAgICAgIGMgPDw9IDY7XG4gICAgICAgIGMgKz0gYiAmIDB4M0Y7XG4gICAgICB9XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuICAgICAgaWYgKGMgPiAweDEwRkZGRikge1xuICAgICAgICB0aHJvd0ludmFsaWRVdGY4KGksIHN0cik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjIDw9IDB4RkZGRikge1xuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGMgLT0gMHgxMDAwMDtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgPj4gMTApICsgMHhEODAwKTtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGMgJiAweDNGRikgKyAweERDMDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIHZhciBkZWNvZGVBc0J5dGVzID0gZnVuY3Rpb24gKGJhc2UzMlN0cikge1xuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgYmFzZTMyU3RyID0gYmFzZTMyU3RyLnJlcGxhY2UoLz0vZywgJycpO1xuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIGJ5dGVzID0gW10sIGluZGV4ID0gMCwgbGVuZ3RoID0gYmFzZTMyU3RyLmxlbmd0aDtcblxuICAgIC8vIDQgY2hhciB0byAzIGJ5dGVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gbGVuZ3RoID4+IDMgPDwgMzsgaSA8IGNvdW50Oykge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjcgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY4ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NyA8PCA1IHwgdjgpICYgMjU1O1xuICAgIH1cblxuICAgIC8vIHJlbWFpbiBieXRlc1xuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDUpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNykge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjQgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY1ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjcgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9O1xuXG4gIHZhciBlbmNvZGVBc2NpaSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBiYXNlMzJTdHIgPSAnJywgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHY0ID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHY1ID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgdjMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHY0ID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGVVdGY4ID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHZhciB2MSwgdjIsIHYzLCB2NCwgdjUsIGNvZGUsIGVuZCA9IGZhbHNlLCBiYXNlMzJTdHIgPSAnJyxcbiAgICAgIGluZGV4ID0gMCwgaSwgc3RhcnQgPSAwLCBieXRlcyA9IDAsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZG8ge1xuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzWzVdO1xuICAgICAgYmxvY2tzWzFdID0gYmxvY2tzWzZdO1xuICAgICAgYmxvY2tzWzJdID0gYmxvY2tzWzddO1xuICAgICAgZm9yIChpID0gc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCA1OyArK2luZGV4KSB7XG4gICAgICAgIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gY29kZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4YzAgfCAoY29kZSA+PiA2KTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ZTAgfCAoY29kZSA+PiAxMik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlID0gMHgxMDAwMCArICgoKGNvZGUgJiAweDNmZikgPDwgMTApIHwgKHN0ci5jaGFyQ29kZUF0KCsraW5kZXgpICYgMHgzZmYpKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ZjAgfCAoY29kZSA+PiAxOCk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKChjb2RlID4+IDEyKSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJ5dGVzICs9IGkgLSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gaSAtIDU7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICArK2luZGV4O1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID4gbGVuZ3RoICYmIGkgPCA2KSB7XG4gICAgICAgIGVuZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB2MSA9IGJsb2Nrc1swXTtcbiAgICAgIGlmIChpID4gNCkge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIHY0ID0gYmxvY2tzWzNdO1xuICAgICAgICB2NSA9IGJsb2Nrc1s0XTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzIHwgdjUgPj4+IDUpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMikgJiAzMV0gK1xuICAgICAgICAgICc9PT09PT0nO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgIHYyID0gYmxvY2tzWzFdO1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICAgJz09PT0nO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgIHYyID0gYmxvY2tzWzFdO1xuICAgICAgICB2MyA9IGJsb2Nrc1syXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICAgJz09PSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIHY0ID0gYmxvY2tzWzNdO1xuICAgICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgICAnPSc7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoIWVuZCk7XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlQnl0ZXMgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBiYXNlMzJTdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IHBhcnNlSW50KGxlbmd0aCAvIDUpICogNTsgaSA8IGNvdW50Oykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpKytdO1xuICAgICAgdjQgPSBieXRlc1tpKytdO1xuICAgICAgdjUgPSBieXRlc1tpKytdO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzIHwgdjUgPj4+IDUpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgIH1cblxuICAgIC8vIHJlbWFpbiBjaGFyXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDEpIHtcbiAgICAgIHYxID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMikgJiAzMV0gK1xuICAgICAgICAnPT09PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQpICYgMzFdICtcbiAgICAgICAgJz09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAzKSB7XG4gICAgICB2MSA9IGJ5dGVzW2krK107XG4gICAgICB2MiA9IGJ5dGVzW2krK107XG4gICAgICB2MyA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAnPT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gNCkge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpKytdO1xuICAgICAgdjQgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMykgJiAzMV0gK1xuICAgICAgICAnPSc7XG4gICAgfVxuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZSA9IGZ1bmN0aW9uIChpbnB1dCwgYXNjaWlPbmx5KSB7XG4gICAgdmFyIG5vdFN0cmluZyA9IHR5cGVvZihpbnB1dCkgIT09ICdzdHJpbmcnO1xuICAgIGlmIChub3RTdHJpbmcgJiYgaW5wdXQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XG4gICAgICBpbnB1dCA9IG5ldyBVaW50OEFycmF5KGlucHV0KTtcbiAgICB9XG4gICAgaWYgKG5vdFN0cmluZykge1xuICAgICAgcmV0dXJuIGVuY29kZUJ5dGVzKGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKGFzY2lpT25seSkge1xuICAgICAgcmV0dXJuIGVuY29kZUFzY2lpKGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVuY29kZVV0ZjgoaW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZGVjb2RlID0gZnVuY3Rpb24gKGJhc2UzMlN0ciwgYXNjaWlPbmx5KSB7XG4gICAgaWYgKCFhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiB0b1V0ZjhTdHJpbmcoZGVjb2RlQXNCeXRlcyhiYXNlMzJTdHIpKTtcbiAgICB9XG4gICAgaWYgKCEvXltBLVoyLTc9XSskLy50ZXN0KGJhc2UzMlN0cikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYXNlMzIgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBzdHIgPSAnJywgbGVuZ3RoID0gYmFzZTMyU3RyLmluZGV4T2YoJz0nKTtcbiAgICBpZiAobGVuZ3RoID09PSAtMSkge1xuICAgICAgbGVuZ3RoID0gYmFzZTMyU3RyLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyA4IGNoYXIgdG8gNSBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NyA8PCA1IHwgdjgpICYgMjU1KTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSk7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NSk7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDUpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSk7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1KTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZXhwb3J0cyA9IHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9O1xuICBkZWNvZGUuYXNCeXRlcyA9IGRlY29kZUFzQnl0ZXM7XG5cbiAgaWYgKENPTU1PTl9KUykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cztcbiAgfSBlbHNlIHtcbiAgICByb290LmJhc2UzMiA9IGV4cG9ydHM7XG4gICAgaWYgKEFNRCkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgd29yZCA9ICdbYS1mQS1GXFxcXGQ6XSc7XG5jb25zdCBiID0gb3B0aW9ucyA9PiBvcHRpb25zICYmIG9wdGlvbnMuaW5jbHVkZUJvdW5kYXJpZXMgP1xuXHRgKD86KD88PVxcXFxzfF4pKD89JHt3b3JkfSl8KD88PSR7d29yZH0pKD89XFxcXHN8JCkpYCA6XG5cdCcnO1xuXG5jb25zdCB2NCA9ICcoPzoyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldXFxcXGR8XFxcXGQpKD86XFxcXC4oPzoyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldXFxcXGR8XFxcXGQpKXszfSc7XG5cbmNvbnN0IHY2c2VnID0gJ1thLWZBLUZcXFxcZF17MSw0fSc7XG5jb25zdCB2NiA9IGBcbihcbig/OiR7djZzZWd9Oil7N30oPzoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE6MjozOjQ6NTo2Ojc6OiAgMToyOjM6NDo1OjY6Nzo4XG4oPzoke3Y2c2VnfTopezZ9KD86JHt2NH18OiR7djZzZWd9fDopfCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo6ICAgIDE6MjozOjQ6NTo2Ojo4ICAgMToyOjM6NDo1OjY6OjggIDE6MjozOjQ6NTo2OjoxLjIuMy40XG4oPzoke3Y2c2VnfTopezV9KD86OiR7djR9fCg6JHt2NnNlZ30pezEsMn18Oil8ICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6OiAgICAgIDE6MjozOjQ6NTo6Nzo4ICAgMToyOjM6NDo1Ojo4ICAgIDE6MjozOjQ6NTo6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezR9KD86KDoke3Y2c2VnfSl7MCwxfToke3Y0fXwoOiR7djZzZWd9KXsxLDN9fDopfCAvLyAxOjI6Mzo0OjogICAgICAgIDE6MjozOjQ6OjY6Nzo4ICAgMToyOjM6NDo6OCAgICAgIDE6MjozOjQ6OjY6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezN9KD86KDoke3Y2c2VnfSl7MCwyfToke3Y0fXwoOiR7djZzZWd9KXsxLDR9fDopfCAvLyAxOjI6Mzo6ICAgICAgICAgIDE6MjozOjo1OjY6Nzo4ICAgMToyOjM6OjggICAgICAgIDE6MjozOjo1OjY6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezJ9KD86KDoke3Y2c2VnfSl7MCwzfToke3Y0fXwoOiR7djZzZWd9KXsxLDV9fDopfCAvLyAxOjI6OiAgICAgICAgICAgIDE6Mjo6NDo1OjY6Nzo4ICAgMToyOjo4ICAgICAgICAgIDE6Mjo6NDo1OjY6NzoxLjIuMy40XG4oPzoke3Y2c2VnfTopezF9KD86KDoke3Y2c2VnfSl7MCw0fToke3Y0fXwoOiR7djZzZWd9KXsxLDZ9fDopfCAvLyAxOjogICAgICAgICAgICAgIDE6OjM6NDo1OjY6Nzo4ICAgMTo6OCAgICAgICAgICAgIDE6OjM6NDo1OjY6NzoxLjIuMy40XG4oPzo6KCg/Ojoke3Y2c2VnfSl7MCw1fToke3Y0fXwoPzo6JHt2NnNlZ30pezEsN318OikpICAgICAgICAgICAvLyA6OjI6Mzo0OjU6Njo3OjggIDo6MjozOjQ6NTo2Ojc6OCAgOjo4ICAgICAgICAgICAgIDo6MS4yLjMuNFxuKSglWzAtOWEtekEtWl17MSx9KT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJWV0aDAgICAgICAgICAgICAlMVxuYC5yZXBsYWNlKC9cXHMqXFwvXFwvLiokL2dtLCAnJykucmVwbGFjZSgvXFxuL2csICcnKS50cmltKCk7XG5cbmNvbnN0IGlwID0gb3B0aW9ucyA9PiBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3QgP1xuXHRuZXcgUmVnRXhwKGAoPzpeJHt2NH0kKXwoPzpeJHt2Nn0kKWApIDpcblx0bmV3IFJlZ0V4cChgKD86JHtiKG9wdGlvbnMpfSR7djR9JHtiKG9wdGlvbnMpfSl8KD86JHtiKG9wdGlvbnMpfSR7djZ9JHtiKG9wdGlvbnMpfSlgLCAnZycpO1xuXG5pcC52NCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID8gbmV3IFJlZ0V4cChgXiR7djR9JGApIDogbmV3IFJlZ0V4cChgJHtiKG9wdGlvbnMpfSR7djR9JHtiKG9wdGlvbnMpfWAsICdnJyk7XG5pcC52NiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID8gbmV3IFJlZ0V4cChgXiR7djZ9JGApIDogbmV3IFJlZ0V4cChgJHtiKG9wdGlvbnMpfSR7djZ9JHtiKG9wdGlvbnMpfWAsICdnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXA7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpcCA9IGV4cG9ydHM7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIG9zID0gcmVxdWlyZSgnb3MnKTtcblxuaXAudG9CdWZmZXIgPSBmdW5jdGlvbihpcCwgYnVmZiwgb2Zmc2V0KSB7XG4gIG9mZnNldCA9IH5+b2Zmc2V0O1xuXG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKHRoaXMuaXNWNEZvcm1hdChpcCkpIHtcbiAgICByZXN1bHQgPSBidWZmIHx8IG5ldyBCdWZmZXIob2Zmc2V0ICsgNCk7XG4gICAgaXAuc3BsaXQoL1xcLi9nKS5tYXAoZnVuY3Rpb24oYnl0ZSkge1xuICAgICAgcmVzdWx0W29mZnNldCsrXSA9IHBhcnNlSW50KGJ5dGUsIDEwKSAmIDB4ZmY7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1Y2Rm9ybWF0KGlwKSkge1xuICAgIHZhciBzZWN0aW9ucyA9IGlwLnNwbGl0KCc6JywgOCk7XG5cbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc3Y0ID0gdGhpcy5pc1Y0Rm9ybWF0KHNlY3Rpb25zW2ldKTtcbiAgICAgIHZhciB2NEJ1ZmZlcjtcblxuICAgICAgaWYgKGlzdjQpIHtcbiAgICAgICAgdjRCdWZmZXIgPSB0aGlzLnRvQnVmZmVyKHNlY3Rpb25zW2ldKTtcbiAgICAgICAgc2VjdGlvbnNbaV0gPSB2NEJ1ZmZlci5zbGljZSgwLCAyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2NEJ1ZmZlciAmJiArK2kgPCA4KSB7XG4gICAgICAgIHNlY3Rpb25zLnNwbGljZShpLCAwLCB2NEJ1ZmZlci5zbGljZSgyLCA0KS50b1N0cmluZygnaGV4JykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWN0aW9uc1swXSA9PT0gJycpIHtcbiAgICAgIHdoaWxlIChzZWN0aW9ucy5sZW5ndGggPCA4KSBzZWN0aW9ucy51bnNoaWZ0KCcwJyk7XG4gICAgfSBlbHNlIGlmIChzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICAgIHdoaWxlIChzZWN0aW9ucy5sZW5ndGggPCA4KSBzZWN0aW9ucy5wdXNoKCcwJyk7XG4gICAgfSBlbHNlIGlmIChzZWN0aW9ucy5sZW5ndGggPCA4KSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoICYmIHNlY3Rpb25zW2ldICE9PSAnJzsgaSsrKTtcbiAgICAgIHZhciBhcmd2ID0gWyBpLCAxIF07XG4gICAgICBmb3IgKGkgPSA5IC0gc2VjdGlvbnMubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGFyZ3YucHVzaCgnMCcpO1xuICAgICAgfVxuICAgICAgc2VjdGlvbnMuc3BsaWNlLmFwcGx5KHNlY3Rpb25zLCBhcmd2KTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBidWZmIHx8IG5ldyBCdWZmZXIob2Zmc2V0ICsgMTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdvcmQgPSBwYXJzZUludChzZWN0aW9uc1tpXSwgMTYpO1xuICAgICAgcmVzdWx0W29mZnNldCsrXSA9ICh3b3JkID4+IDgpICYgMHhmZjtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSB3b3JkICYgMHhmZjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGlwIGFkZHJlc3M6ICcgKyBpcCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuaXAudG9TdHJpbmcgPSBmdW5jdGlvbihidWZmLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcbiAgbGVuZ3RoID0gbGVuZ3RoIHx8IChidWZmLmxlbmd0aCAtIG9mZnNldCk7XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAobGVuZ3RoID09PSA0KSB7XG4gICAgLy8gSVB2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmZbb2Zmc2V0ICsgaV0pO1xuICAgIH1cbiAgICByZXN1bHQgPSByZXN1bHQuam9pbignLicpO1xuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMTYpIHtcbiAgICAvLyBJUHY2XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgcmVzdWx0LnB1c2goYnVmZi5yZWFkVUludDE2QkUob2Zmc2V0ICsgaSkudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJzonKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvKF58OikwKDowKSo6MCg6fCQpLywgJyQxOjokMycpO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC86ezMsNH0vLCAnOjonKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaXB2NFJlZ2V4ID0gL14oXFxkezEsM31cXC4pezMsM31cXGR7MSwzfSQvO1xudmFyIGlwdjZSZWdleCA9XG4gICAgL14oOjopPygoKFxcZHsxLDN9XFwuKXszfShcXGR7MSwzfSl7MX0pPyhbMC05YS1mXSl7MCw0fTp7MCwyfSl7MSw4fSg6Oik/JC9pO1xuXG5pcC5pc1Y0Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjRSZWdleC50ZXN0KGlwKTtcbn07XG5cbmlwLmlzVjZGb3JtYXQgPSBmdW5jdGlvbihpcCkge1xuICByZXR1cm4gaXB2NlJlZ2V4LnRlc3QoaXApO1xufTtcbmZ1bmN0aW9uIF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KSB7XG4gIHJldHVybiBmYW1pbHkgPyBmYW1pbHkudG9Mb3dlckNhc2UoKSA6ICdpcHY0Jztcbn1cblxuaXAuZnJvbVByZWZpeExlbiA9IGZ1bmN0aW9uKHByZWZpeGxlbiwgZmFtaWx5KSB7XG4gIGlmIChwcmVmaXhsZW4gPiAzMikge1xuICAgIGZhbWlseSA9ICdpcHY2JztcbiAgfSBlbHNlIHtcbiAgICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG4gIH1cblxuICB2YXIgbGVuID0gNDtcbiAgaWYgKGZhbWlseSA9PT0gJ2lwdjYnKSB7XG4gICAgbGVuID0gMTY7XG4gIH1cbiAgdmFyIGJ1ZmYgPSBuZXcgQnVmZmVyKGxlbik7XG5cbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBidWZmLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHZhciBiaXRzID0gODtcbiAgICBpZiAocHJlZml4bGVuIDwgOCkge1xuICAgICAgYml0cyA9IHByZWZpeGxlbjtcbiAgICB9XG4gICAgcHJlZml4bGVuIC09IGJpdHM7XG5cbiAgICBidWZmW2ldID0gfigweGZmID4+IGJpdHMpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm1hc2sgPSBmdW5jdGlvbihhZGRyLCBtYXNrKSB7XG4gIGFkZHIgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgbWFzayA9IGlwLnRvQnVmZmVyKG1hc2spO1xuXG4gIHZhciByZXN1bHQgPSBuZXcgQnVmZmVyKE1hdGgubWF4KGFkZHIubGVuZ3RoLCBtYXNrLmxlbmd0aCkpO1xuXG4gIHZhciBpID0gMDtcbiAgLy8gU2FtZSBwcm90b2NvbCAtIGRvIGJpdHdpc2UgYW5kXG4gIGlmIChhZGRyLmxlbmd0aCA9PT0gbWFzay5sZW5ndGgpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYWRkcltpXSAmIG1hc2tbaV07XG4gICAgfVxuICB9IGVsc2UgaWYgKG1hc2subGVuZ3RoID09PSA0KSB7XG4gICAgLy8gSVB2NiBhZGRyZXNzIGFuZCBJUHY0IG1hc2tcbiAgICAvLyAoTWFzayBsb3cgYml0cylcbiAgICBmb3IgKGkgPSAwOyBpIDwgbWFzay5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYWRkclthZGRyLmxlbmd0aCAtIDQgICsgaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJUHY2IG1hc2sgYW5kIElQdjQgYWRkclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aCAtIDY7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gMDtcbiAgICB9XG5cbiAgICAvLyA6OmZmZmY6aXB2NFxuICAgIHJlc3VsdFsxMF0gPSAweGZmO1xuICAgIHJlc3VsdFsxMV0gPSAweGZmO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZGRyLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaSArIDEyXSA9IGFkZHJbaV0gJiBtYXNrW2kgKyAxMl07XG4gICAgfVxuICAgIGkgPSBpICsgMTI7XG4gIH1cbiAgZm9yICg7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspXG4gICAgcmVzdWx0W2ldID0gMDtcblxuICByZXR1cm4gaXAudG9TdHJpbmcocmVzdWx0KTtcbn07XG5cbmlwLmNpZHIgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLm1hc2soYWRkciwgbWFzayk7XG59O1xuXG5pcC5zdWJuZXQgPSBmdW5jdGlvbihhZGRyLCBtYXNrKSB7XG4gIHZhciBuZXR3b3JrQWRkcmVzcyA9IGlwLnRvTG9uZyhpcC5tYXNrKGFkZHIsIG1hc2spKTtcblxuICAvLyBDYWxjdWxhdGUgdGhlIG1hc2sncyBsZW5ndGguXG4gIHZhciBtYXNrQnVmZmVyID0gaXAudG9CdWZmZXIobWFzayk7XG4gIHZhciBtYXNrTGVuZ3RoID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1hc2tCdWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobWFza0J1ZmZlcltpXSA9PT0gMHhmZikge1xuICAgICAgbWFza0xlbmd0aCArPSA4O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb2N0ZXQgPSBtYXNrQnVmZmVyW2ldICYgMHhmZjtcbiAgICAgIHdoaWxlIChvY3RldCkge1xuICAgICAgICBvY3RldCA9IChvY3RldCA8PCAxKSAmIDB4ZmY7XG4gICAgICAgIG1hc2tMZW5ndGgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbnVtYmVyT2ZBZGRyZXNzZXMgPSBNYXRoLnBvdygyLCAzMiAtIG1hc2tMZW5ndGgpO1xuXG4gIHJldHVybiB7XG4gICAgbmV0d29ya0FkZHJlc3M6IGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzKSxcbiAgICBmaXJzdEFkZHJlc3M6IG51bWJlck9mQWRkcmVzc2VzIDw9IDIgP1xuICAgICAgICAgICAgICAgICAgICBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcykgOlxuICAgICAgICAgICAgICAgICAgICBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIDEpLFxuICAgIGxhc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyBudW1iZXJPZkFkZHJlc3NlcyAtIDEpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyBudW1iZXJPZkFkZHJlc3NlcyAtIDIpLFxuICAgIGJyb2FkY2FzdEFkZHJlc3M6IGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSxcbiAgICBzdWJuZXRNYXNrOiBtYXNrLFxuICAgIHN1Ym5ldE1hc2tMZW5ndGg6IG1hc2tMZW5ndGgsXG4gICAgbnVtSG9zdHM6IG51bWJlck9mQWRkcmVzc2VzIDw9IDIgP1xuICAgICAgICAgICAgICAgIG51bWJlck9mQWRkcmVzc2VzIDogbnVtYmVyT2ZBZGRyZXNzZXMgLSAyLFxuICAgIGxlbmd0aDogbnVtYmVyT2ZBZGRyZXNzZXMsXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICByZXR1cm4gbmV0d29ya0FkZHJlc3MgPT09IGlwLnRvTG9uZyhpcC5tYXNrKG90aGVyLCBtYXNrKSk7XG4gICAgfVxuICB9O1xufTtcblxuaXAuY2lkclN1Ym5ldCA9IGZ1bmN0aW9uKGNpZHJTdHJpbmcpIHtcbiAgdmFyIGNpZHJQYXJ0cyA9IGNpZHJTdHJpbmcuc3BsaXQoJy8nKTtcblxuICB2YXIgYWRkciA9IGNpZHJQYXJ0c1swXTtcbiAgaWYgKGNpZHJQYXJ0cy5sZW5ndGggIT09IDIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIENJRFIgc3VibmV0OiAnICsgYWRkcik7XG5cbiAgdmFyIG1hc2sgPSBpcC5mcm9tUHJlZml4TGVuKHBhcnNlSW50KGNpZHJQYXJ0c1sxXSwgMTApKTtcblxuICByZXR1cm4gaXAuc3VibmV0KGFkZHIsIG1hc2spO1xufTtcblxuaXAubm90ID0gZnVuY3Rpb24oYWRkcikge1xuICB2YXIgYnVmZiA9IGlwLnRvQnVmZmVyKGFkZHIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmYubGVuZ3RoOyBpKyspIHtcbiAgICBidWZmW2ldID0gMHhmZiBeIGJ1ZmZbaV07XG4gIH1cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xufTtcblxuaXAub3IgPSBmdW5jdGlvbihhLCBiKSB7XG4gIGEgPSBpcC50b0J1ZmZlcihhKTtcbiAgYiA9IGlwLnRvQnVmZmVyKGIpO1xuXG4gIC8vIHNhbWUgcHJvdG9jb2xcbiAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgYVtpXSB8PSBiW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaXAudG9TdHJpbmcoYSk7XG5cbiAgLy8gbWl4ZWQgcHJvdG9jb2xzXG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ1ZmYgPSBhO1xuICAgIHZhciBvdGhlciA9IGI7XG4gICAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHtcbiAgICAgIGJ1ZmYgPSBiO1xuICAgICAgb3RoZXIgPSBhO1xuICAgIH1cblxuICAgIHZhciBvZmZzZXQgPSBidWZmLmxlbmd0aCAtIG90aGVyLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgYnVmZi5sZW5ndGg7ICsraSkge1xuICAgICAgYnVmZltpXSB8PSBvdGhlcltpIC0gb2Zmc2V0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG4gIH1cbn07XG5cbmlwLmlzRXF1YWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gIGEgPSBpcC50b0J1ZmZlcihhKTtcbiAgYiA9IGlwLnRvQnVmZmVyKGIpO1xuXG4gIC8vIFNhbWUgcHJvdG9jb2xcbiAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBTd2FwXG4gIGlmIChiLmxlbmd0aCA9PT0gNCkge1xuICAgIHZhciB0ID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIC8vIGEgLSBJUHY0LCBiIC0gSVB2NlxuICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoYltpXSAhPT0gMCkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHdvcmQgPSBiLnJlYWRVSW50MTZCRSgxMCk7XG4gIGlmICh3b3JkICE9PSAwICYmIHdvcmQgIT09IDB4ZmZmZikgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaSArIDEyXSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5pcC5pc1ByaXZhdGUgPSBmdW5jdGlvbihhZGRyKSB7XG4gIHJldHVybiAvXig6OmZ7NH06KT8xMFxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaVxuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xOTJcXC4xNjhcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2kudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzE3MlxcLigxWzYtOV18MlxcZHwzMHwzMSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNjlcXC4yNTRcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2kudGVzdChhZGRyKSB8fFxuICAgIC9eZltjZF1bMC05YS1mXXsyfTovaS50ZXN0KGFkZHIpIHx8XG4gICAgL15mZTgwOi9pLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6MSQvLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6JC8udGVzdChhZGRyKTtcbn07XG5cbmlwLmlzUHVibGljID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gIWlwLmlzUHJpdmF0ZShhZGRyKTtcbn07XG5cbmlwLmlzTG9vcGJhY2sgPSBmdW5jdGlvbihhZGRyKSB7XG4gIHJldHVybiAvXig6OmZ7NH06KT8xMjdcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkvXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDo6MSQvLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6MSQvLnRlc3QoYWRkcikgfHxcbiAgICAvXjo6JC8udGVzdChhZGRyKTtcbn07XG5cbmlwLmxvb3BiYWNrID0gZnVuY3Rpb24oZmFtaWx5KSB7XG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYGlwdjRgXG4gIC8vXG4gIGZhbWlseSA9IF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KTtcblxuICBpZiAoZmFtaWx5ICE9PSAnaXB2NCcgJiYgZmFtaWx5ICE9PSAnaXB2NicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhbWlseSBtdXN0IGJlIGlwdjQgb3IgaXB2NicpO1xuICB9XG5cbiAgcmV0dXJuIGZhbWlseSA9PT0gJ2lwdjQnID8gJzEyNy4wLjAuMScgOiAnZmU4MDo6MSc7XG59O1xuXG4vL1xuLy8gIyMjIGZ1bmN0aW9uIGFkZHJlc3MgKG5hbWUsIGZhbWlseSlcbi8vICMjIyMgQG5hbWUge3N0cmluZ3wncHVibGljJ3wncHJpdmF0ZSd9ICoqT3B0aW9uYWwqKiBOYW1lIG9yIHNlY3VyaXR5XG4vLyAgICAgIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZS5cbi8vICMjIyMgQGZhbWlseSB7aXB2NHxpcHY2fSAqKk9wdGlvbmFsKiogSVAgZmFtaWx5IG9mIHRoZSBhZGRyZXNzIChkZWZhdWx0c1xuLy8gICAgICB0byBpcHY0KS5cbi8vXG4vLyBSZXR1cm5zIHRoZSBhZGRyZXNzIGZvciB0aGUgbmV0d29yayBpbnRlcmZhY2Ugb24gdGhlIGN1cnJlbnQgc3lzdGVtIHdpdGhcbi8vIHRoZSBzcGVjaWZpZWQgYG5hbWVgOlxuLy8gICAqIFN0cmluZzogRmlyc3QgYGZhbWlseWAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlLlxuLy8gICAgICAgICAgICAgSWYgbm90IGZvdW5kIHNlZSBgdW5kZWZpbmVkYC5cbi8vICAgKiAncHVibGljJzogdGhlIGZpcnN0IHB1YmxpYyBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiAncHJpdmF0ZSc6IHRoZSBmaXJzdCBwcml2YXRlIGlwIGFkZHJlc3Mgb2YgZmFtaWx5LlxuLy8gICAqIHVuZGVmaW5lZDogRmlyc3QgYWRkcmVzcyB3aXRoIGBpcHY0YCBvciBsb29wYmFjayBhZGRyZXNzIGAxMjcuMC4wLjFgLlxuLy9cbmlwLmFkZHJlc3MgPSBmdW5jdGlvbihuYW1lLCBmYW1pbHkpIHtcbiAgdmFyIGludGVyZmFjZXMgPSBvcy5uZXR3b3JrSW50ZXJmYWNlcygpO1xuICB2YXIgYWxsO1xuXG4gIC8vXG4gIC8vIERlZmF1bHQgdG8gYGlwdjRgXG4gIC8vXG4gIGZhbWlseSA9IF9ub3JtYWxpemVGYW1pbHkoZmFtaWx5KTtcblxuICAvL1xuICAvLyBJZiBhIHNwZWNpZmljIG5ldHdvcmsgaW50ZXJmYWNlIGhhcyBiZWVuIG5hbWVkLFxuICAvLyByZXR1cm4gdGhlIGFkZHJlc3MuXG4gIC8vXG4gIGlmIChuYW1lICYmIG5hbWUgIT09ICdwcml2YXRlJyAmJiBuYW1lICE9PSAncHVibGljJykge1xuICAgIHZhciByZXMgPSBpbnRlcmZhY2VzW25hbWVdLmZpbHRlcihmdW5jdGlvbihkZXRhaWxzKSB7XG4gICAgICB2YXIgaXRlbUZhbWlseSA9IGRldGFpbHMuZmFtaWx5LnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gaXRlbUZhbWlseSA9PT0gZmFtaWx5O1xuICAgIH0pO1xuICAgIGlmIChyZXMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzWzBdLmFkZHJlc3M7XG4gIH1cblxuICB2YXIgYWxsID0gT2JqZWN0LmtleXMoaW50ZXJmYWNlcykubWFwKGZ1bmN0aW9uIChuaWMpIHtcbiAgICAvL1xuICAgIC8vIE5vdGU6IG5hbWUgd2lsbCBvbmx5IGJlIGBwdWJsaWNgIG9yIGBwcml2YXRlYFxuICAgIC8vIHdoZW4gdGhpcyBpcyBjYWxsZWQuXG4gICAgLy9cbiAgICB2YXIgYWRkcmVzc2VzID0gaW50ZXJmYWNlc1tuaWNdLmZpbHRlcihmdW5jdGlvbiAoZGV0YWlscykge1xuICAgICAgZGV0YWlscy5mYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGRldGFpbHMuZmFtaWx5ICE9PSBmYW1pbHkgfHwgaXAuaXNMb29wYmFjayhkZXRhaWxzLmFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lID09PSAncHVibGljJyA/IGlwLmlzUHJpdmF0ZShkZXRhaWxzLmFkZHJlc3MpIDpcbiAgICAgICAgICBpcC5pc1B1YmxpYyhkZXRhaWxzLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFkZHJlc3Nlcy5sZW5ndGggPyBhZGRyZXNzZXNbMF0uYWRkcmVzcyA6IHVuZGVmaW5lZDtcbiAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIHJldHVybiAhYWxsLmxlbmd0aCA/IGlwLmxvb3BiYWNrKGZhbWlseSkgOiBhbGxbMF07XG59O1xuXG5pcC50b0xvbmcgPSBmdW5jdGlvbihpcCkge1xuICB2YXIgaXBsID0gMDtcbiAgaXAuc3BsaXQoJy4nKS5mb3JFYWNoKGZ1bmN0aW9uKG9jdGV0KSB7XG4gICAgaXBsIDw8PSA4O1xuICAgIGlwbCArPSBwYXJzZUludChvY3RldCk7XG4gIH0pO1xuICByZXR1cm4oaXBsID4+PiAwKTtcbn07XG5cbmlwLmZyb21Mb25nID0gZnVuY3Rpb24oaXBsKSB7XG4gIHJldHVybiAoKGlwbCA+Pj4gMjQpICsgJy4nICtcbiAgICAgIChpcGwgPj4gMTYgJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgPj4gOCAmIDI1NSkgKyAnLicgK1xuICAgICAgKGlwbCAmIDI1NSkgKTtcbn07XG4iLCIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBpcFJlZ2V4ID0gcmVxdWlyZSgnaXAtcmVnZXgnKTtcblxuY29uc3QgaXNJcCA9IHN0cmluZyA9PiBpcFJlZ2V4KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudjQgPSBzdHJpbmcgPT4gaXBSZWdleC52NCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY2ID0gc3RyaW5nID0+IGlwUmVnZXgudjYoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52ZXJzaW9uID0gc3RyaW5nID0+IGlzSXAoc3RyaW5nKSA/IChpc0lwLnY0KHN0cmluZykgPyA0IDogNikgOiB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJcDtcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IG11bHRpaGFzaCA9IHJlcXVpcmUoJ211bHRpaGFzaGVzJylcbmNvbnN0IG11bHRpYmFzZSA9IHJlcXVpcmUoJ211bHRpYmFzZScpXG5jb25zdCBNdWx0aWFkZHIgPSByZXF1aXJlKCdtdWx0aWFkZHInKVxuY29uc3QgbWFmbXQgPSByZXF1aXJlKCdtYWZtdCcpXG5jb25zdCBDSUQgPSByZXF1aXJlKCdjaWRzJylcblxuY29uc3QgdXJsUGF0dGVybiA9IC9eaHR0cHM/OlxcL1xcL1teL10rXFwvKGlwKGZ8bilzKVxcLygoXFx3KykuKikvXG5jb25zdCBwYXRoUGF0dGVybiA9IC9eXFwvKGlwKGZ8bilzKVxcLygoXFx3KykuKikvXG5jb25zdCBkZWZhdWx0UHJvdG9jb2xNYXRjaCA9IDFcbmNvbnN0IGRlZmF1bHRIYXNoTWF0aCA9IDRcblxuY29uc3QgZnFkblBhdHRlcm4gPSAvXmh0dHBzPzpcXC9cXC8oW14vXSspXFwuKGlwKD86ZnxuKXMpXFwuW14vXSsvXG5jb25zdCBmcWRuSGFzaE1hdGNoID0gMVxuY29uc3QgZnFkblByb3RvY29sTWF0Y2ggPSAyXG5cbmZ1bmN0aW9uIGlzTXVsdGloYXNoIChoYXNoKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGNvbnZlcnRUb1N0cmluZyhoYXNoKVxuICB0cnkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U1OC5kZWNvZGUoZm9ybWF0dGVkKSlcbiAgICBtdWx0aWhhc2guZGVjb2RlKGJ1ZmZlcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aWJhc2UgKGhhc2gpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbXVsdGliYXNlLmlzRW5jb2RlZChoYXNoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDSUQgKGhhc2gpIHtcbiAgdHJ5IHtcbiAgICBuZXcgQ0lEKGhhc2gpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTXVsdGlhZGRyIChpbnB1dCkge1xuICBpZiAoIWlucHV0KSByZXR1cm4gZmFsc2VcbiAgaWYgKE11bHRpYWRkci5pc011bHRpYWRkcihpbnB1dCkpIHJldHVybiB0cnVlXG4gIHRyeSB7XG4gICAgbmV3IE11bHRpYWRkcihpbnB1dCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQZWVyTXVsdGlhZGRyIChpbnB1dCkge1xuICByZXR1cm4gaXNNdWx0aWFkZHIoaW5wdXQpICYmIG1hZm10LklQRlMubWF0Y2hlcyhpbnB1dClcbn1cblxuZnVuY3Rpb24gaXNJcGZzIChpbnB1dCwgcGF0dGVybiwgcHJvdG9jb2xNYXRjaCA9IGRlZmF1bHRQcm90b2NvbE1hdGNoLCBoYXNoTWF0Y2ggPSBkZWZhdWx0SGFzaE1hdGgpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGlucHV0KVxuICBpZiAoIWZvcm1hdHRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBmb3JtYXR0ZWQubWF0Y2gocGF0dGVybilcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1hdGNoW3Byb3RvY29sTWF0Y2hdICE9PSAnaXBmcycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGxldCBoYXNoID0gbWF0Y2hbaGFzaE1hdGNoXVxuXG4gIGlmIChoYXNoICYmIHBhdHRlcm4gPT09IGZxZG5QYXR0ZXJuKSB7XG4gICAgLy8gd2hlbiBkb2luZyBjaGVja3MgZm9yIHN1YmRvbWFpbiBjb250ZXh0XG4gICAgLy8gZW5zdXJlIGhhc2ggaXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIChicm93c2VycyBmb3JjZS1sb3dlcmNhc2UgYXV0aG9yaXR5IGNvbXBvdGVudCBhbnl3YXkpXG4gICAgaGFzaCA9IGhhc2gudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIGlzQ0lEKGhhc2gpXG59XG5cbmZ1bmN0aW9uIGlzSXBucyAoaW5wdXQsIHBhdHRlcm4sIHByb3RvY29sTWF0Y2ggPSBkZWZhdWx0UHJvdG9jb2xNYXRjaCwgaGFzaE1hdGNoKSB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGNvbnZlcnRUb1N0cmluZyhpbnB1dClcbiAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBtYXRjaCA9IGZvcm1hdHRlZC5tYXRjaChwYXR0ZXJuKVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWF0Y2hbcHJvdG9jb2xNYXRjaF0gIT09ICdpcG5zJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGhhc2hNYXRjaCAmJiBwYXR0ZXJuID09PSBmcWRuUGF0dGVybikge1xuICAgIGxldCBoYXNoID0gbWF0Y2hbaGFzaE1hdGNoXVxuICAgIC8vIHdoZW4gZG9pbmcgY2hlY2tzIGZvciBzdWJkb21haW4gY29udGV4dFxuICAgIC8vIGVuc3VyZSBoYXNoIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyAoYnJvd3NlcnMgZm9yY2UtbG93ZXJjYXNlIGF1dGhvcml0eSBjb21wb3RlbnQgYW55d2F5KVxuICAgIGhhc2ggPSBoYXNoLnRvTG93ZXJDYXNlKClcbiAgICByZXR1cm4gaXNDSUQoaGFzaClcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nIChpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJ1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcgKGlucHV0KSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGJhc2U1OC5lbmNvZGUoaW5wdXQpXG4gIH1cblxuICBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuY29uc3QgaXBmc1N1YmRvbWFpbiA9ICh1cmwpID0+IGlzSXBmcyh1cmwsIGZxZG5QYXR0ZXJuLCBmcWRuUHJvdG9jb2xNYXRjaCwgZnFkbkhhc2hNYXRjaClcbmNvbnN0IGlwbnNTdWJkb21haW4gPSAodXJsKSA9PiBpc0lwbnModXJsLCBmcWRuUGF0dGVybiwgZnFkblByb3RvY29sTWF0Y2gsIGZxZG5IYXNoTWF0Y2gpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtdWx0aWhhc2g6IGlzTXVsdGloYXNoLFxuICBtdWx0aWFkZHI6IGlzTXVsdGlhZGRyLFxuICBwZWVyTXVsdGlhZGRyOiBpc1BlZXJNdWx0aWFkZHIsXG4gIGNpZDogaXNDSUQsXG4gIGJhc2UzMmNpZDogKGNpZCkgPT4gKGlzTXVsdGliYXNlKGNpZCkgPT09ICdiYXNlMzInICYmIGlzQ0lEKGNpZCkpLFxuICBpcGZzU3ViZG9tYWluOiBpcGZzU3ViZG9tYWluLFxuICBpcG5zU3ViZG9tYWluOiBpcG5zU3ViZG9tYWluLFxuICBzdWJkb21haW46ICh1cmwpID0+IChpcGZzU3ViZG9tYWluKHVybCkgfHwgaXBuc1N1YmRvbWFpbih1cmwpKSxcbiAgc3ViZG9tYWluUGF0dGVybjogZnFkblBhdHRlcm4sXG4gIGlwZnNVcmw6ICh1cmwpID0+IGlzSXBmcyh1cmwsIHVybFBhdHRlcm4pLFxuICBpcG5zVXJsOiAodXJsKSA9PiBpc0lwbnModXJsLCB1cmxQYXR0ZXJuKSxcbiAgdXJsOiAodXJsKSA9PiAoaXNJcGZzKHVybCwgdXJsUGF0dGVybikgfHwgaXNJcG5zKHVybCwgdXJsUGF0dGVybikpLFxuICB1cmxQYXR0ZXJuOiB1cmxQYXR0ZXJuLFxuICBpcGZzUGF0aDogKHBhdGgpID0+IGlzSXBmcyhwYXRoLCBwYXRoUGF0dGVybiksXG4gIGlwbnNQYXRoOiAocGF0aCkgPT4gaXNJcG5zKHBhdGgsIHBhdGhQYXR0ZXJuKSxcbiAgcGF0aDogKHBhdGgpID0+IChpc0lwZnMocGF0aCwgcGF0aFBhdHRlcm4pIHx8IGlzSXBucyhwYXRoLCBwYXRoUGF0dGVybikpLFxuICBwYXRoUGF0dGVybjogcGF0aFBhdHRlcm4sXG4gIHVybE9yUGF0aDogKHgpID0+IChpc0lwZnMoeCwgdXJsUGF0dGVybikgfHwgaXNJcG5zKHgsIHVybFBhdHRlcm4pIHx8IGlzSXBmcyh4LCBwYXRoUGF0dGVybikgfHwgaXNJcG5zKHgsIHBhdGhQYXR0ZXJuKSksXG4gIGNpZFBhdGg6IHBhdGggPT4gaXNTdHJpbmcocGF0aCkgJiYgIWlzQ0lEKHBhdGgpICYmIGlzSXBmcyhgL2lwZnMvJHtwYXRofWAsIHBhdGhQYXR0ZXJuKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5cbi8qXG4gKiBWYWxpZCBjb21iaW5hdGlvbnNcbiAqL1xuY29uc3QgRE5TNCA9IGJhc2UoJ2RuczQnKVxuY29uc3QgRE5TNiA9IGJhc2UoJ2RuczYnKVxuY29uc3QgRE5TID0gb3IoXG4gIGJhc2UoJ2RucycpLFxuICBiYXNlKCdkbnNhZGRyJyksXG4gIEROUzQsXG4gIEROUzZcbilcblxuY29uc3QgSVAgPSBvcihiYXNlKCdpcDQnKSwgYmFzZSgnaXA2JykpXG5jb25zdCBUQ1AgPSBvcihcbiAgYW5kKElQLCBiYXNlKCd0Y3AnKSksXG4gIGFuZChETlMsIGJhc2UoJ3RjcCcpKVxuKVxuY29uc3QgVURQID0gYW5kKElQLCBiYXNlKCd1ZHAnKSlcbmNvbnN0IFVUUCA9IGFuZChVRFAsIGJhc2UoJ3V0cCcpKVxuXG5jb25zdCBXZWJTb2NrZXRzID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzJykpLFxuICBhbmQoRE5TLCBiYXNlKCd3cycpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRzU2VjdXJlID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzcycpKSxcbiAgYW5kKEROUywgYmFzZSgnd3NzJykpXG4pXG5cbmNvbnN0IEhUVFAgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnaHR0cCcpKSxcbiAgYW5kKElQLCBiYXNlKCdodHRwJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwJykpXG4pXG5cbmNvbnN0IEhUVFBTID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoSVAsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwcycpKVxuKVxuXG5jb25zdCBXZWJSVENTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJSVENEaXJlY3QgPSBvcihcbiAgYW5kKEhUVFAsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpLFxuICBhbmQoSFRUUFMsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpXG4pXG5cbmNvbnN0IFJlbGlhYmxlID0gb3IoXG4gIFdlYlNvY2tldHMsXG4gIFdlYlNvY2tldHNTZWN1cmUsXG4gIEhUVFAsXG4gIEhUVFBTLFxuICBXZWJSVENTdGFyLFxuICBXZWJSVENEaXJlY3QsXG4gIFRDUCxcbiAgVVRQXG4pXG5cbi8vIFVubGlrZSB3cy1zdGFyLCBzdGFyZHVzdCBjYW4gcnVuIG92ZXIgYW55IHRyYW5zcG9ydCB0aHVzIHJlbW92aW5nIHRoZSByZXF1aXJlbWVudCBmb3Igd2Vic29ja2V0cyAoYnV0IGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQgcnVubmluZyBhIHN0YXJkdXN0IHNlcnZlciBvdmVyIHdlYnJ0Yy1zdGFyIDspIClcbmNvbnN0IFN0YXJkdXN0ID0gb3IoXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLXN0YXJkdXN0JyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtc3RhcmR1c3QnKSlcbilcblxuY29uc3QgX1AyUCA9IG9yKFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycCcpKSxcbiAgV2ViUlRDU3RhcixcbiAgYmFzZSgncDJwJylcbilcblxuY29uc3QgX0NpcmN1aXQgPSBvcihcbiAgYW5kKF9QMlAsIGJhc2UoJ3AycC1jaXJjdWl0JyksIF9QMlApLFxuICBhbmQoX1AyUCwgYmFzZSgncDJwLWNpcmN1aXQnKSksXG4gIGFuZChiYXNlKCdwMnAtY2lyY3VpdCcpLCBfUDJQKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtY2lyY3VpdCcpKSxcbiAgYW5kKGJhc2UoJ3AycC1jaXJjdWl0JyksIFJlbGlhYmxlKSxcbiAgYmFzZSgncDJwLWNpcmN1aXQnKVxuKVxuXG5jb25zdCBDaXJjdWl0UmVjdXJzaXZlID0gKCkgPT4gb3IoXG4gIGFuZChfQ2lyY3VpdCwgQ2lyY3VpdFJlY3Vyc2l2ZSksXG4gIF9DaXJjdWl0XG4pXG5cbmNvbnN0IENpcmN1aXQgPSBDaXJjdWl0UmVjdXJzaXZlKClcblxuY29uc3QgUDJQID0gb3IoXG4gIGFuZChDaXJjdWl0LCBfUDJQLCBDaXJjdWl0KSxcbiAgYW5kKF9QMlAsIENpcmN1aXQpLFxuICBhbmQoQ2lyY3VpdCwgX1AyUCksXG4gIENpcmN1aXQsXG4gIF9QMlBcbilcblxuZXhwb3J0cy5ETlMgPSBETlNcbmV4cG9ydHMuRE5TNCA9IEROUzRcbmV4cG9ydHMuRE5TNiA9IEROUzZcbmV4cG9ydHMuSVAgPSBJUFxuZXhwb3J0cy5UQ1AgPSBUQ1BcbmV4cG9ydHMuVURQID0gVURQXG5leHBvcnRzLlVUUCA9IFVUUFxuZXhwb3J0cy5IVFRQID0gSFRUUFxuZXhwb3J0cy5IVFRQUyA9IEhUVFBTXG5leHBvcnRzLldlYlNvY2tldHMgPSBXZWJTb2NrZXRzXG5leHBvcnRzLldlYlNvY2tldHNTZWN1cmUgPSBXZWJTb2NrZXRzU2VjdXJlXG5leHBvcnRzLldlYlNvY2tldFN0YXIgPSBXZWJTb2NrZXRTdGFyXG5leHBvcnRzLldlYlJUQ1N0YXIgPSBXZWJSVENTdGFyXG5leHBvcnRzLldlYlJUQ0RpcmVjdCA9IFdlYlJUQ0RpcmVjdFxuZXhwb3J0cy5SZWxpYWJsZSA9IFJlbGlhYmxlXG5leHBvcnRzLlN0YXJkdXN0ID0gU3RhcmR1c3RcbmV4cG9ydHMuQ2lyY3VpdCA9IENpcmN1aXRcbmV4cG9ydHMuUDJQID0gUDJQXG5leHBvcnRzLklQRlMgPSBQMlBcblxuLypcbiAqIFZhbGlkYXRpb24gZnVuY3NcbiAqL1xuXG5mdW5jdGlvbiBtYWtlTWF0Y2hlc0Z1bmN0aW9uIChwYXJ0aWFsTWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAoIW11bHRpYWRkci5pc011bHRpYWRkcihhKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IG11bHRpYWRkcihhKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7IC8vIGNhdGNoIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZSAvLyBhbHNvIGlmIGl0J3MgaW52YWxpZCBpdCdzIHByb3BhYmx5IG5vdCBtYXRjaGluZyBhcyB3ZWxsIHNvIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvdXQgPSBwYXJ0aWFsTWF0Y2goYS5wcm90b05hbWVzKCkpXG4gICAgaWYgKG91dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBvdXQubGVuZ3RoID09PSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gYW5kICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKGEpIHtcbiAgICBpZiAoYS5sZW5ndGggPCBhcmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGEgPSB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYXJnKCkucGFydGlhbE1hdGNoKGEpXG4gICAgICAgIDogYXJnLnBhcnRpYWxNYXRjaChhKVxuXG4gICAgICBpZiAoYSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gYVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ3sgJyArIGFyZ3Muam9pbignICcpICsgJyB9JyB9LFxuICAgIGlucHV0OiBhcmdzLFxuICAgIG1hdGNoZXM6IG1ha2VNYXRjaGVzRnVuY3Rpb24ocGFydGlhbE1hdGNoKSxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG5cbmZ1bmN0aW9uIG9yICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAoYSkge1xuICAgIGxldCBvdXQgPSBudWxsXG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBhcmcoKS5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgICAgOiBhcmcucGFydGlhbE1hdGNoKGEpXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIG91dCA9IHJlc1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd7ICcgKyBhcmdzLmpvaW4oJyAnKSArICcgfScgfSxcbiAgICBpbnB1dDogYXJncyxcbiAgICBtYXRjaGVzOiBtYWtlTWF0Y2hlc0Z1bmN0aW9uKHBhcnRpYWxNYXRjaCksXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYmFzZSAobikge1xuICBjb25zdCBuYW1lID0gblxuXG4gIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gbXVsdGlhZGRyKGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHsgLy8gY2F0Y2ggZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vIGFsc28gaWYgaXQncyBpbnZhbGlkIGl0J3MgcHJvcGFibHkgbm90IG1hdGNoaW5nIGFzIHdlbGwgc28gcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG5hbWVzID0gYS5wcm90b05hbWVzKClcbiAgICBpZiAocG5hbWVzLmxlbmd0aCA9PT0gMSAmJiBwbmFtZXNbMF0gPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChwcm90b3MpIHtcbiAgICBpZiAocHJvdG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocHJvdG9zWzBdID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gcHJvdG9zLnNsaWNlKDEpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYW1lIH0sXG4gICAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG4iLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlKHZhbCk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKCg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgaWYgKG1zID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtcyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHJldHVybiBwbHVyYWwobXMsIGQsICdkYXknKSB8fFxuICAgIHBsdXJhbChtcywgaCwgJ2hvdXInKSB8fFxuICAgIHBsdXJhbChtcywgbSwgJ21pbnV0ZScpIHx8XG4gICAgcGx1cmFsKG1zLCBzLCAnc2Vjb25kJykgfHxcbiAgICBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbiwgbmFtZSkge1xuICBpZiAobXMgPCBuKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChtcyA8IG4gKiAxLjUpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihtcyAvIG4pICsgJyAnICsgbmFtZTtcbiAgfVxuICByZXR1cm4gTWF0aC5jZWlsKG1zIC8gbikgKyAnICcgKyBuYW1lICsgJ3MnO1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvbnZlcnQgPSByZXF1aXJlKCcuL2NvbnZlcnQnKVxuY29uc3QgcHJvdG9jb2xzID0gcmVxdWlyZSgnLi9wcm90b2NvbHMtdGFibGUnKVxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxuLy8gZXhwb3J0IGNvZGVjXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RyaW5nVG9TdHJpbmdUdXBsZXM6IHN0cmluZ1RvU3RyaW5nVHVwbGVzLFxuICBzdHJpbmdUdXBsZXNUb1N0cmluZzogc3RyaW5nVHVwbGVzVG9TdHJpbmcsXG5cbiAgdHVwbGVzVG9TdHJpbmdUdXBsZXM6IHR1cGxlc1RvU3RyaW5nVHVwbGVzLFxuICBzdHJpbmdUdXBsZXNUb1R1cGxlczogc3RyaW5nVHVwbGVzVG9UdXBsZXMsXG5cbiAgYnVmZmVyVG9UdXBsZXM6IGJ1ZmZlclRvVHVwbGVzLFxuICB0dXBsZXNUb0J1ZmZlcjogdHVwbGVzVG9CdWZmZXIsXG5cbiAgYnVmZmVyVG9TdHJpbmc6IGJ1ZmZlclRvU3RyaW5nLFxuICBzdHJpbmdUb0J1ZmZlcjogc3RyaW5nVG9CdWZmZXIsXG5cbiAgZnJvbVN0cmluZzogZnJvbVN0cmluZyxcbiAgZnJvbUJ1ZmZlcjogZnJvbUJ1ZmZlcixcbiAgdmFsaWRhdGVCdWZmZXI6IHZhbGlkYXRlQnVmZmVyLFxuICBpc1ZhbGlkQnVmZmVyOiBpc1ZhbGlkQnVmZmVyLFxuICBjbGVhblBhdGg6IGNsZWFuUGF0aCxcblxuICBQYXJzZUVycm9yOiBQYXJzZUVycm9yLFxuICBwcm90b0Zyb21UdXBsZTogcHJvdG9Gcm9tVHVwbGUsXG5cbiAgc2l6ZUZvckFkZHI6IHNpemVGb3JBZGRyXG59XG5cbi8vIHN0cmluZyAtPiBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXVxuZnVuY3Rpb24gc3RyaW5nVG9TdHJpbmdUdXBsZXMgKHN0cikge1xuICBjb25zdCB0dXBsZXMgPSBbXVxuICBjb25zdCBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLnNsaWNlKDEpIC8vIHNraXAgZmlyc3QgZW1wdHkgZWxlbVxuICBpZiAocGFydHMubGVuZ3RoID09PSAxICYmIHBhcnRzWzBdID09PSAnJykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgZm9yIChsZXQgcCA9IDA7IHAgPCBwYXJ0cy5sZW5ndGg7IHArKykge1xuICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1twXVxuICAgIGNvbnN0IHByb3RvID0gcHJvdG9jb2xzKHBhcnQpXG5cbiAgICBpZiAocHJvdG8uc2l6ZSA9PT0gMCkge1xuICAgICAgdHVwbGVzLnB1c2goW3BhcnRdKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBwKysgLy8gYWR2YW5jZSBhZGRyIHBhcnRcbiAgICBpZiAocCA+PSBwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IFBhcnNlRXJyb3IoJ2ludmFsaWQgYWRkcmVzczogJyArIHN0cilcbiAgICB9XG5cbiAgICAvLyBpZiBpdCdzIGEgcGF0aCBwcm90bywgdGFrZSB0aGUgcmVzdFxuICAgIGlmIChwcm90by5wYXRoKSB7XG4gICAgICB0dXBsZXMucHVzaChbXG4gICAgICAgIHBhcnQsXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSBuZWVkIHRvIGNoZWNrIGVhY2ggcGF0aCBwYXJ0IHRvIHNlZSBpZiBpdCdzIGEgcHJvdG8/XG4gICAgICAgIC8vIFRoaXMgd291bGQgYWxsb3cgZm9yIG90aGVyIHByb3RvY29scyB0byBiZSBhZGRlZCBhZnRlciBhIHVuaXggcGF0aCxcbiAgICAgICAgLy8gaG93ZXZlciBpdCB3b3VsZCBoYXZlIGlzc3VlcyBpZiB0aGUgcGF0aCBoYWQgYSBwcm90b2NvbCBuYW1lIGluIHRoZSBwYXRoXG4gICAgICAgIGNsZWFuUGF0aChwYXJ0cy5zbGljZShwKS5qb2luKCcvJykpXG4gICAgICBdKVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICB0dXBsZXMucHVzaChbcGFydCwgcGFydHNbcF1dKVxuICB9XG5cbiAgcmV0dXJuIHR1cGxlc1xufVxuXG4vLyBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXSAtPiBzdHJpbmdcbmZ1bmN0aW9uIHN0cmluZ1R1cGxlc1RvU3RyaW5nICh0dXBsZXMpIHtcbiAgY29uc3QgcGFydHMgPSBbXVxuICB0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgcGFydHMucHVzaChwcm90by5uYW1lKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcGFydHMucHVzaCh0dXBbMV0pXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBjbGVhblBhdGgocGFydHMuam9pbignLycpKVxufVxuXG4vLyBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXSAtPiBbW2ludCBjb2RlLCBCdWZmZXJdLi4uIF1cbmZ1bmN0aW9uIHN0cmluZ1R1cGxlc1RvVHVwbGVzICh0dXBsZXMpIHtcbiAgcmV0dXJuIHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHVwKSkge1xuICAgICAgdHVwID0gW3R1cF1cbiAgICB9XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gW3Byb3RvLmNvZGUsIGNvbnZlcnQudG9CdWZmZXIocHJvdG8uY29kZSwgdHVwWzFdKV1cbiAgICB9XG4gICAgcmV0dXJuIFtwcm90by5jb2RlXVxuICB9KVxufVxuXG4vLyBbW2ludCBjb2RlLCBCdWZmZXJdLi4uIF0gLT4gW1tzdHIgbmFtZSwgc3RyIGFkZHJdLi4uIF1cbmZ1bmN0aW9uIHR1cGxlc1RvU3RyaW5nVHVwbGVzICh0dXBsZXMpIHtcbiAgcmV0dXJuIHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiBbcHJvdG8uY29kZSwgY29udmVydC50b1N0cmluZyhwcm90by5jb2RlLCB0dXBbMV0pXVxuICAgIH1cbiAgICByZXR1cm4gW3Byb3RvLmNvZGVdXG4gIH0pXG59XG5cbi8vIFtbaW50IGNvZGUsIEJ1ZmZlciBdLi4uIF0gLT4gQnVmZmVyXG5mdW5jdGlvbiB0dXBsZXNUb0J1ZmZlciAodHVwbGVzKSB7XG4gIHJldHVybiBmcm9tQnVmZmVyKEJ1ZmZlci5jb25jYXQodHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGxldCBidWYgPSBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKHByb3RvLmNvZGUpKVxuXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICBidWYgPSBCdWZmZXIuY29uY2F0KFtidWYsIHR1cFsxXV0pIC8vIGFkZCBhZGRyZXNzIGJ1ZmZlclxuICAgIH1cblxuICAgIHJldHVybiBidWZcbiAgfSkpKVxufVxuXG5mdW5jdGlvbiBzaXplRm9yQWRkciAocCwgYWRkcikge1xuICBpZiAocC5zaXplID4gMCkge1xuICAgIHJldHVybiBwLnNpemUgLyA4XG4gIH0gZWxzZSBpZiAocC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIDBcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzaXplID0gdmFyaW50LmRlY29kZShhZGRyKVxuICAgIHJldHVybiBzaXplICsgdmFyaW50LmRlY29kZS5ieXRlc1xuICB9XG59XG5cbi8vIEJ1ZmZlciAtPiBbW2ludCBjb2RlLCBCdWZmZXIgXS4uLiBdXG5mdW5jdGlvbiBidWZmZXJUb1R1cGxlcyAoYnVmKSB7XG4gIGNvbnN0IHR1cGxlcyA9IFtdXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGJ1Zi5sZW5ndGgpIHtcbiAgICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShidWYsIGkpXG4gICAgY29uc3QgbiA9IHZhcmludC5kZWNvZGUuYnl0ZXNcblxuICAgIGNvbnN0IHAgPSBwcm90b2NvbHMoY29kZSlcblxuICAgIGNvbnN0IHNpemUgPSBzaXplRm9yQWRkcihwLCBidWYuc2xpY2UoaSArIG4pKVxuXG4gICAgaWYgKHNpemUgPT09IDApIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtjb2RlXSlcbiAgICAgIGkgKz0gblxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBhZGRyID0gYnVmLnNsaWNlKGkgKyBuLCBpICsgbiArIHNpemUpXG5cbiAgICBpICs9IChzaXplICsgbilcblxuICAgIGlmIChpID4gYnVmLmxlbmd0aCkgeyAvLyBkaWQgbm90IGVuZCBfZXhhY3RseV8gYXQgYnVmZmVyLmxlbmd0aFxuICAgICAgdGhyb3cgUGFyc2VFcnJvcignSW52YWxpZCBhZGRyZXNzIGJ1ZmZlcjogJyArIGJ1Zi50b1N0cmluZygnaGV4JykpXG4gICAgfVxuXG4gICAgLy8gb2ssIHR1cGxlIHNlZW1zIGdvb2QuXG4gICAgdHVwbGVzLnB1c2goW2NvZGUsIGFkZHJdKVxuICB9XG5cbiAgcmV0dXJuIHR1cGxlc1xufVxuXG4vLyBCdWZmZXIgLT4gU3RyaW5nXG5mdW5jdGlvbiBidWZmZXJUb1N0cmluZyAoYnVmKSB7XG4gIGNvbnN0IGEgPSBidWZmZXJUb1R1cGxlcyhidWYpXG4gIGNvbnN0IGIgPSB0dXBsZXNUb1N0cmluZ1R1cGxlcyhhKVxuICByZXR1cm4gc3RyaW5nVHVwbGVzVG9TdHJpbmcoYilcbn1cblxuLy8gU3RyaW5nIC0+IEJ1ZmZlclxuZnVuY3Rpb24gc3RyaW5nVG9CdWZmZXIgKHN0cikge1xuICBzdHIgPSBjbGVhblBhdGgoc3RyKVxuICBjb25zdCBhID0gc3RyaW5nVG9TdHJpbmdUdXBsZXMoc3RyKVxuICBjb25zdCBiID0gc3RyaW5nVHVwbGVzVG9UdXBsZXMoYSlcblxuICByZXR1cm4gdHVwbGVzVG9CdWZmZXIoYilcbn1cblxuLy8gU3RyaW5nIC0+IEJ1ZmZlclxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHJpbmdUb0J1ZmZlcihzdHIpXG59XG5cbi8vIEJ1ZmZlciAtPiBCdWZmZXJcbmZ1bmN0aW9uIGZyb21CdWZmZXIgKGJ1Zikge1xuICBjb25zdCBlcnIgPSB2YWxpZGF0ZUJ1ZmZlcihidWYpXG4gIGlmIChlcnIpIHRocm93IGVyclxuICByZXR1cm4gQnVmZmVyLmZyb20oYnVmKSAvLyBjb3B5XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQnVmZmVyIChidWYpIHtcbiAgdHJ5IHtcbiAgICBidWZmZXJUb1R1cGxlcyhidWYpIC8vIHRyeSB0byBwYXJzZS4gd2lsbCB0aHJvdyBpZiBicmVha3NcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGVyclxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRCdWZmZXIgKGJ1Zikge1xuICByZXR1cm4gdmFsaWRhdGVCdWZmZXIoYnVmKSA9PT0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNsZWFuUGF0aCAoc3RyKSB7XG4gIHJldHVybiAnLycgKyBzdHIudHJpbSgpLnNwbGl0KCcvJykuZmlsdGVyKGEgPT4gYSkuam9pbignLycpXG59XG5cbmZ1bmN0aW9uIFBhcnNlRXJyb3IgKHN0cikge1xuICByZXR1cm4gbmV3IEVycm9yKCdFcnJvciBwYXJzaW5nIGFkZHJlc3M6ICcgKyBzdHIpXG59XG5cbmZ1bmN0aW9uIHByb3RvRnJvbVR1cGxlICh0dXApIHtcbiAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHModHVwWzBdKVxuICByZXR1cm4gcHJvdG9cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBpcCA9IHJlcXVpcmUoJ2lwJylcbmNvbnN0IGlzSXAgPSByZXF1aXJlKCdpcy1pcCcpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCBiczU4ID0gcmVxdWlyZSgnYnM1OCcpXG5jb25zdCBDSUQgPSByZXF1aXJlKCdjaWRzJylcbmNvbnN0IGJhc2UzMiA9IHJlcXVpcmUoJ2hpLWJhc2UzMicpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbnZlcnRcblxuLy8gY29udmVydHMgKHNlcmlhbGl6ZXMpIGFkZHJlc3Nlc1xuZnVuY3Rpb24gQ29udmVydCAocHJvdG8sIGEpIHtcbiAgaWYgKGEgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gQ29udmVydC50b1N0cmluZyhwcm90bywgYSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQ29udmVydC50b0J1ZmZlcihwcm90bywgYSlcbiAgfVxufVxuXG5Db252ZXJ0LnRvU3RyaW5nID0gZnVuY3Rpb24gY29udmVydFRvU3RyaW5nIChwcm90bywgYnVmKSB7XG4gIHByb3RvID0gcHJvdG9jb2xzKHByb3RvKVxuICBzd2l0Y2ggKHByb3RvLmNvZGUpIHtcbiAgICBjYXNlIDQ6IC8vIGlwdjRcbiAgICBjYXNlIDQxOiAvLyBpcHY2XG4gICAgICByZXR1cm4gYnVmMmlwKGJ1ZilcblxuICAgIGNhc2UgNjogLy8gdGNwXG4gICAgY2FzZSAyNzM6IC8vIHVkcFxuICAgIGNhc2UgMzM6IC8vIGRjY3BcbiAgICBjYXNlIDEzMjogLy8gc2N0cFxuICAgICAgcmV0dXJuIGJ1ZjJwb3J0KGJ1ZilcblxuICAgIGNhc2UgNTM6IC8vIGRuc1xuICAgIGNhc2UgNTQ6IC8vIGRuczRcbiAgICBjYXNlIDU1OiAvLyBkbnM2XG4gICAgY2FzZSA1NjogLy8gZG5zYWRkclxuICAgIGNhc2UgNDAwOiAvLyB1bml4XG4gICAgICByZXR1cm4gYnVmMnN0cihidWYpXG5cbiAgICBjYXNlIDQyMTogLy8gaXBmc1xuICAgICAgcmV0dXJuIGJ1ZjJtaChidWYpXG4gICAgY2FzZSA0NDQ6IC8vIG9uaW9uXG4gICAgICByZXR1cm4gYnVmMm9uaW9uKGJ1ZilcbiAgICBjYXNlIDQ0NTogLy8gb25pb24zXG4gICAgICByZXR1cm4gYnVmMm9uaW9uKGJ1ZilcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygnaGV4JykgLy8gbm8gY2x1ZS4gY29udmVydCB0byBoZXhcbiAgfVxufVxuXG5Db252ZXJ0LnRvQnVmZmVyID0gZnVuY3Rpb24gY29udmVydFRvQnVmZmVyIChwcm90bywgc3RyKSB7XG4gIHByb3RvID0gcHJvdG9jb2xzKHByb3RvKVxuICBzd2l0Y2ggKHByb3RvLmNvZGUpIHtcbiAgICBjYXNlIDQ6IC8vIGlwdjRcbiAgICAgIHJldHVybiBpcDJidWYoc3RyKVxuICAgIGNhc2UgNDE6IC8vIGlwdjZcbiAgICAgIHJldHVybiBpcDJidWYoc3RyKVxuXG4gICAgY2FzZSA2OiAvLyB0Y3BcbiAgICBjYXNlIDI3MzogLy8gdWRwXG4gICAgY2FzZSAzMzogLy8gZGNjcFxuICAgIGNhc2UgMTMyOiAvLyBzY3RwXG4gICAgICByZXR1cm4gcG9ydDJidWYocGFyc2VJbnQoc3RyLCAxMCkpXG5cbiAgICBjYXNlIDUzOiAvLyBkbnNcbiAgICBjYXNlIDU0OiAvLyBkbnM0XG4gICAgY2FzZSA1NTogLy8gZG5zNlxuICAgIGNhc2UgNTY6IC8vIGRuc2FkZHJcbiAgICBjYXNlIDQwMDogLy8gdW5peFxuICAgICAgcmV0dXJuIHN0cjJidWYoc3RyKVxuXG4gICAgY2FzZSA0MjE6IC8vIGlwZnNcbiAgICAgIHJldHVybiBtaDJidWYoc3RyKVxuICAgIGNhc2UgNDQ0OiAvLyBvbmlvblxuICAgICAgcmV0dXJuIG9uaW9uMmJ1ZihzdHIpXG4gICAgY2FzZSA0NDU6IC8vIG9uaW9uM1xuICAgICAgcmV0dXJuIG9uaW9uMzJidWYoc3RyKVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnaGV4JykgLy8gbm8gY2x1ZS4gY29udmVydCBmcm9tIGhleFxuICB9XG59XG5cbmZ1bmN0aW9uIGlwMmJ1ZiAoaXBTdHJpbmcpIHtcbiAgaWYgKCFpc0lwKGlwU3RyaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpcCBhZGRyZXNzJylcbiAgfVxuICByZXR1cm4gaXAudG9CdWZmZXIoaXBTdHJpbmcpXG59XG5cbmZ1bmN0aW9uIGJ1ZjJpcCAoaXBCdWZmKSB7XG4gIGNvbnN0IGlwU3RyaW5nID0gaXAudG9TdHJpbmcoaXBCdWZmKVxuICBpZiAoIWlzSXAoaXBTdHJpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlwIGFkZHJlc3MnKVxuICB9XG4gIHJldHVybiBpcFN0cmluZ1xufVxuXG5mdW5jdGlvbiBwb3J0MmJ1ZiAocG9ydCkge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMilcbiAgYnVmLndyaXRlVUludDE2QkUocG9ydCwgMClcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBidWYycG9ydCAoYnVmKSB7XG4gIHJldHVybiBidWYucmVhZFVJbnQxNkJFKDApXG59XG5cbmZ1bmN0aW9uIHN0cjJidWYgKHN0cikge1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShzdHIpXG4gIGNvbnN0IHNpemUgPSBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKGJ1Zi5sZW5ndGgpKVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbc2l6ZSwgYnVmXSlcbn1cblxuZnVuY3Rpb24gYnVmMnN0ciAoYnVmKSB7XG4gIGNvbnN0IHNpemUgPSB2YXJpbnQuZGVjb2RlKGJ1ZilcbiAgYnVmID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGJ1Zi5sZW5ndGggIT09IHNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29uc2lzdGVudCBsZW5ndGhzJylcbiAgfVxuXG4gIHJldHVybiBidWYudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBtaDJidWYgKGhhc2gpIHtcbiAgLy8gdGhlIGFkZHJlc3MgaXMgYSB2YXJpbnQgcHJlZml4ZWQgbXVsdGloYXNoIHN0cmluZyByZXByZXNlbnRhdGlvblxuICBjb25zdCBtaCA9IG5ldyBDSUQoaGFzaCkubXVsdGloYXNoXG4gIGNvbnN0IHNpemUgPSBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKG1oLmxlbmd0aCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtzaXplLCBtaF0pXG59XG5cbmZ1bmN0aW9uIGJ1ZjJtaCAoYnVmKSB7XG4gIGNvbnN0IHNpemUgPSB2YXJpbnQuZGVjb2RlKGJ1ZilcbiAgY29uc3QgYWRkcmVzcyA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChhZGRyZXNzLmxlbmd0aCAhPT0gc2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb25zaXN0ZW50IGxlbmd0aHMnKVxuICB9XG5cbiAgcmV0dXJuIGJzNTguZW5jb2RlKGFkZHJlc3MpXG59XG5cbmZ1bmN0aW9uIG9uaW9uMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGFkZHIgPSBzdHIuc3BsaXQoJzonKVxuICBpZiAoYWRkci5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkciArICcgZG9lcyBub3QgY29udGFpbiBhIHBvcnQgbnVtYmVyJylcbiAgfVxuICBpZiAoYWRkclswXS5sZW5ndGggIT09IDE2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHJbMF0gKyAnIG5vdCBhIFRvciBvbmlvbiBhZGRyZXNzLicpXG4gIH1cbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oYmFzZTMyLmRlY29kZS5hc0J5dGVzKGFkZHJbMF0udG9VcHBlckNhc2UoKSkpXG5cbiAgLy8gb25pb24gcG9ydCBudW1iZXJcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGFkZHJbMV0sIDEwKVxuICBpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQb3J0IG51bWJlciBpcyBub3QgaW4gcmFuZ2UoMSwgNjU1MzYpJylcbiAgfVxuICBjb25zdCBwb3J0QnVmID0gcG9ydDJidWYocG9ydClcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgcG9ydEJ1Zl0pXG59XG5cbmZ1bmN0aW9uIG9uaW9uMzJidWYgKHN0cikge1xuICBjb25zdCBhZGRyID0gc3RyLnNwbGl0KCc6JylcbiAgaWYgKGFkZHIubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHIgKyAnIGRvZXMgbm90IGNvbnRhaW4gYSBwb3J0IG51bWJlcicpXG4gIH1cbiAgaWYgKGFkZHJbMF0ubGVuZ3RoICE9PSA1Nikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyWzBdICsgJyBub3QgYSBUb3Igb25pb24zIGFkZHJlc3MuJylcbiAgfVxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShiYXNlMzIuZGVjb2RlLmFzQnl0ZXMoYWRkclswXS50b1VwcGVyQ2FzZSgpKSlcblxuICAvLyBvbmlvbiBwb3J0IG51bWJlclxuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoYWRkclsxXSwgMTApXG4gIGlmIChwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgbnVtYmVyIGlzIG5vdCBpbiByYW5nZSgxLCA2NTUzNiknKVxuICB9XG4gIGNvbnN0IHBvcnRCdWYgPSBwb3J0MmJ1Zihwb3J0KVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBwb3J0QnVmXSlcbn1cblxuZnVuY3Rpb24gYnVmMm9uaW9uIChidWYpIHtcbiAgY29uc3QgYWRkckJ5dGVzID0gYnVmLnNsaWNlKDAsIGJ1Zi5sZW5ndGggLSAyKVxuICBjb25zdCBwb3J0Qnl0ZXMgPSBidWYuc2xpY2UoYnVmLmxlbmd0aCAtIDIpXG4gIGNvbnN0IGFkZHIgPSBiYXNlMzIuZW5jb2RlKGFkZHJCeXRlcykudG9Mb3dlckNhc2UoKVxuICBjb25zdCBwb3J0ID0gYnVmMnBvcnQocG9ydEJ5dGVzKVxuICByZXR1cm4gYWRkciArICc6JyArIHBvcnRcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb2RlYyA9IHJlcXVpcmUoJy4vY29kZWMnKVxuY29uc3QgcHJvdG9jb2xzID0gcmVxdWlyZSgnLi9wcm90b2NvbHMtdGFibGUnKVxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuY29uc3Qgd2l0aElzID0gcmVxdWlyZSgnY2xhc3MtaXMnKVxuY29uc3QgaW5zcGVjdCA9IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJylcblxuLyoqXG4gKiBDcmVhdGVzIGEgW211bHRpYWRkcl0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIpIGZyb21cbiAqIGEgQnVmZmVyLCBTdHJpbmcgb3IgYW5vdGhlciBNdWx0aWFkZHIgaW5zdGFuY2VcbiAqIHB1YmxpYyBrZXkuXG4gKiBAY2xhc3MgTXVsdGlhZGRyXG4gKiBAcGFyYW0geyhTdHJpbmd8QnVmZmVyfE11bHRpYWRkcil9IGFkZHIgLSBJZiBTdHJpbmcgb3IgQnVmZmVyLCBuZWVkcyB0byBhZGhlcmVcbiAqIHRvIHRoZSBhZGRyZXNzIGZvcm1hdCBvZiBhIFttdWx0aWFkZHJdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyI3N0cmluZy1mb3JtYXQpXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqL1xuY29uc3QgTXVsdGlhZGRyID0gd2l0aElzLnByb3RvKGZ1bmN0aW9uIChhZGRyKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBNdWx0aWFkZHIpKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aWFkZHIoYWRkcilcbiAgfVxuXG4gIC8vIGRlZmF1bHRcbiAgaWYgKGFkZHIgPT0gbnVsbCkge1xuICAgIGFkZHIgPSAnJ1xuICB9XG5cbiAgaWYgKGFkZHIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QnVmZmVyfSAtIFRoZSByYXcgYnl0ZXMgcmVwcmVzZW50aW5nIHRoaXMgbXVsdGlhZGRyZXNzXG4gICAgICovXG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tQnVmZmVyKGFkZHIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIGFkZHIgPT09ICdzdHJpbmcnIHx8IGFkZHIgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICBpZiAoYWRkci5sZW5ndGggPiAwICYmIGFkZHIuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGlhZGRyIFwiJHthZGRyfVwiIG11c3Qgc3RhcnQgd2l0aCBhIFwiL1wiYClcbiAgICB9XG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tU3RyaW5nKGFkZHIpXG4gIH0gZWxzZSBpZiAoYWRkci5idWZmZXIgJiYgYWRkci5wcm90b3MgJiYgYWRkci5wcm90b0NvZGVzKSB7IC8vIE11bHRpYWRkclxuICAgIHRoaXMuYnVmZmVyID0gY29kZWMuZnJvbUJ1ZmZlcihhZGRyLmJ1ZmZlcikgLy8gdmFsaWRhdGUgKyBjb3B5IGJ1ZmZlclxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignYWRkciBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIG9yIGFub3RoZXIgTXVsdGlhZGRyJylcbiAgfVxufSwgeyBjbGFzc05hbWU6ICdNdWx0aWFkZHInLCBzeW1ib2xOYW1lOiAnQG11bHRpZm9ybWF0cy9qcy1tdWx0aWFkZHIvbXVsdGlhZGRyJyB9KVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgU3RyaW5nXG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJ1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICByZXR1cm4gY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBKU09OIGVuY29kZWQgb2JqZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBKU09OLnN0cmluZ2lmeShNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9KU09OID0gTXVsdGlhZGRyLnByb3RvdHlwZS50b1N0cmluZ1xuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgY29udmluaWVudCBvcHRpb25zIG9iamVjdCB0byBiZSB1c2VkIHdpdGggbmV0LmNyZWF0ZUNvbm5lY3Rpb25cbiAqXG4gKiBAcmV0dXJucyB7e2ZhbWlseTogU3RyaW5nLCBob3N0OiBTdHJpbmcsIHRyYW5zcG9ydDogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS50b09wdGlvbnMoKVxuICogLy8geyBmYW1pbHk6ICdpcHY0JywgaG9zdDogJzEyNy4wLjAuMScsIHRyYW5zcG9ydDogJ3RjcCcsIHBvcnQ6IDQwMDEgfVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnRvT3B0aW9ucyA9IGZ1bmN0aW9uIHRvT3B0aW9ucyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7fVxuICBjb25zdCBwYXJzZWQgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJy8nKVxuICBvcHRzLmZhbWlseSA9IHBhcnNlZFsxXSA9PT0gJ2lwNCcgPyAnaXB2NCcgOiAnaXB2NidcbiAgb3B0cy5ob3N0ID0gcGFyc2VkWzJdXG4gIG9wdHMudHJhbnNwb3J0ID0gcGFyc2VkWzNdXG4gIG9wdHMucG9ydCA9IHBhcnNlSW50KHBhcnNlZFs0XSlcbiAgcmV0dXJuIG9wdHNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqIEZvciBwb3N0IE5vZGUuanMgdjEwLjAuMC5cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZGVwcmVjYXRpb25zLmh0bWwjZGVwcmVjYXRpb25zX2RlcDAwNzlfY3VzdG9tX2luc3BlY3Rpb25fZnVuY3Rpb25fb25fb2JqZWN0c192aWFfaW5zcGVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogY29uc29sZS5sb2coTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpKVxuICogLy8gJzxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPidcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZVtpbnNwZWN0XSA9IGZ1bmN0aW9uIGluc3BlY3RDdXN0b20gKCkge1xuICByZXR1cm4gJzxNdWx0aWFkZHIgJyArXG4gICAgdGhpcy5idWZmZXIudG9TdHJpbmcoJ2hleCcpICsgJyAtICcgK1xuICAgIGNvZGVjLmJ1ZmZlclRvU3RyaW5nKHRoaXMuYnVmZmVyKSArICc+J1xufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogRmFsbGJhY2sgZm9yIHByZSBOb2RlLmpzIHYxMC4wLjAuXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL2RlcHJlY2F0aW9ucy5odG1sI2RlcHJlY2F0aW9uc19kZXAwMDc5X2N1c3RvbV9pbnNwZWN0aW9uX2Z1bmN0aW9uX29uX29iamVjdHNfdmlhX2luc3BlY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5pbnNwZWN0KClcbiAqIC8vICc8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT4nXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICByZXR1cm4gJzxNdWx0aWFkZHIgJyArXG4gICAgdGhpcy5idWZmZXIudG9TdHJpbmcoJ2hleCcpICsgJyAtICcgK1xuICAgIGNvZGVjLmJ1ZmZlclRvU3RyaW5nKHRoaXMuYnVmZmVyKSArICc+J1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHByb3RvY29scyB0aGUgTXVsdGlhZGRyIGlzIGRlZmluZWQgd2l0aCwgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cywgaW5cbiAqIGxlZnQtdG8tcmlnaHQgb3JkZXIuIEVhY2ggb2JqZWN0IGNvbnRhaW5zIHRoZSBwcm90b2NvbCBjb2RlLCBwcm90b2NvbCBuYW1lLFxuICogYW5kIHRoZSBzaXplIG9mIGl0cyBhZGRyZXNzIHNwYWNlIGluIGJpdHMuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48T2JqZWN0Pn0gcHJvdG9jb2xzIC0gQWxsIHRoZSBwcm90b2NvbHMgdGhlIGFkZHJlc3MgaXMgY29tcG9zZWQgb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHByb3RvY29sc1tdLmNvZGVcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHByb3RvY29sc1tdLnNpemVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHByb3RvY29sc1tdLm5hbWVcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9zKClcbiAqIC8vIFsgeyBjb2RlOiA0LCBzaXplOiAzMiwgbmFtZTogJ2lwNCcgfSxcbiAqIC8vICAgeyBjb2RlOiA2LCBzaXplOiAxNiwgbmFtZTogJ3RjcCcgfSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUucHJvdG9zID0gZnVuY3Rpb24gcHJvdG9zICgpIHtcbiAgcmV0dXJuIHRoaXMucHJvdG9Db2RlcygpLm1hcChjb2RlID0+IE9iamVjdC5hc3NpZ24oe30sIHByb3RvY29scyhjb2RlKSkpXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29kZXMgb2YgdGhlIHByb3RvY29scyBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICogW1NlZSBsaXN0IG9mIHByb3RvY29sc10oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdilcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPE51bWJlcj59IHByb3RvY29sIGNvZGVzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnByb3RvQ29kZXMoKVxuICogLy8gWyA0LCA2IF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b0NvZGVzID0gZnVuY3Rpb24gcHJvdG9Db2RlcyAoKSB7XG4gIGNvbnN0IGNvZGVzID0gW11cbiAgY29uc3QgYnVmID0gdGhpcy5idWZmZXJcbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZiwgaSlcbiAgICBjb25zdCBuID0gdmFyaW50LmRlY29kZS5ieXRlc1xuXG4gICAgY29uc3QgcCA9IHByb3RvY29scyhjb2RlKVxuICAgIGNvbnN0IHNpemUgPSBjb2RlYy5zaXplRm9yQWRkcihwLCBidWYuc2xpY2UoaSArIG4pKVxuXG4gICAgaSArPSAoc2l6ZSArIG4pXG4gICAgY29kZXMucHVzaChjb2RlKVxuICB9XG5cbiAgcmV0dXJuIGNvZGVzXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHByb3RvY29scyBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICogW1NlZSBsaXN0IG9mIHByb3RvY29sc10oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIvYmxvYi9tYXN0ZXIvcHJvdG9jb2xzLmNzdilcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48U3RyaW5nPn0gcHJvdG9jb2wgbmFtZXNcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9OYW1lcygpXG4gKiAvLyBbICdpcDQnLCAndGNwJyBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUucHJvdG9OYW1lcyA9IGZ1bmN0aW9uIHByb3RvTmFtZXMgKCkge1xuICByZXR1cm4gdGhpcy5wcm90b3MoKS5tYXAocHJvdG8gPT4gcHJvdG8ubmFtZSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2YgcGFydHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48QXJyYXk+fSB0dXBsZXNcbiAqIEByZXR1cm4ge051bWJlcn0gdHVwbGVzW10uMCBjb2RlIG9mIHByb3RvY29sXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHR1cGxlc1tdLjEgY29udGVudHMgb2YgYWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcihcIi9pcDQvMTI3LjAuMC4xL3RjcC80MDAxXCIpLnR1cGxlcygpXG4gKiAvLyBbIFsgNCwgPEJ1ZmZlciA3ZiAwMCAwMCAwMT4gXSwgWyA2LCA8QnVmZmVyIDBmIGExPiBdIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50dXBsZXMgPSBmdW5jdGlvbiB0dXBsZXMgKCkge1xuICByZXR1cm4gY29kZWMuYnVmZmVyVG9UdXBsZXModGhpcy5idWZmZXIpXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHR1cGxlIG9mIHN0cmluZy9udW1iZXIgcGFydHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48QXJyYXk+fSB0dXBsZXNcbiAqIEByZXR1cm4ge051bWJlcn0gdHVwbGVzW10uMCBjb2RlIG9mIHByb3RvY29sXG4gKiBAcmV0dXJuIHsoU3RyaW5nfE51bWJlcil9IHR1cGxlc1tdLjEgY29udGVudHMgb2YgYWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcihcIi9pcDQvMTI3LjAuMC4xL3RjcC80MDAxXCIpLnN0cmluZ1R1cGxlcygpXG4gKiAvLyBbIFsgNCwgJzEyNy4wLjAuMScgXSwgWyA2LCA0MDAxIF0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnN0cmluZ1R1cGxlcyA9IGZ1bmN0aW9uIHN0cmluZ1R1cGxlcyAoKSB7XG4gIGNvbnN0IHQgPSBjb2RlYy5idWZmZXJUb1R1cGxlcyh0aGlzLmJ1ZmZlcilcbiAgcmV0dXJuIGNvZGVjLnR1cGxlc1RvU3RyaW5nVHVwbGVzKHQpXG59XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGEgTXVsdGlhZGRyIGluIGFub3RoZXIgTXVsdGlhZGRyXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHIgLSBNdWx0aWFkZHIgdG8gYWRkIGludG8gdGhpcyBNdWx0aWFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODA+XG4gKlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBjb25zdCBtaDMgPSBtaDEuZW5jYXBzdWxhdGUobWgyKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4MDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIG1oMy50b1N0cmluZygpXG4gKiAvLyAnL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZW5jYXBzdWxhdGUgPSBmdW5jdGlvbiBlbmNhcHN1bGF0ZSAoYWRkcikge1xuICBhZGRyID0gTXVsdGlhZGRyKGFkZHIpXG4gIHJldHVybiBNdWx0aWFkZHIodGhpcy50b1N0cmluZygpICsgYWRkci50b1N0cmluZygpKVxufVxuXG4vKipcbiAqIERlY2Fwc3VsYXRlcyBhIE11bHRpYWRkciBmcm9tIGFub3RoZXIgTXVsdGlhZGRyXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHIgLSBNdWx0aWFkZHIgdG8gcmVtb3ZlIGZyb20gdGhpcyBNdWx0aWFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MCcpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzggLSAvaXA0LzguOC44LjgvdGNwLzEwODA+XG4gKlxuICogY29uc3QgbWgyID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqXG4gKiBjb25zdCBtaDMgPSBtaDEuZW5jYXBzdWxhdGUobWgyKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4MDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIG1oMy5kZWNhcHN1bGF0ZShtaDIpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzguOC44LjgvdGNwLzEwODAnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZGVjYXBzdWxhdGUgPSBmdW5jdGlvbiBkZWNhcHN1bGF0ZSAoYWRkcikge1xuICBhZGRyID0gYWRkci50b1N0cmluZygpXG4gIGNvbnN0IHMgPSB0aGlzLnRvU3RyaW5nKClcbiAgY29uc3QgaSA9IHMubGFzdEluZGV4T2YoYWRkcilcbiAgaWYgKGkgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBZGRyZXNzICcgKyB0aGlzICsgJyBkb2VzIG5vdCBjb250YWluIHN1YmFkZHJlc3M6ICcgKyBhZGRyKVxuICB9XG4gIHJldHVybiBNdWx0aWFkZHIocy5zbGljZSgwLCBpKSlcbn1cblxuLyoqXG4gKiBBIG1vcmUgcmVsaWFibGUgdmVyc2lvbiBvZiBgZGVjYXBzdWxhdGVgIGlmIHlvdSBhcmUgdGFyZ2V0aW5nIGFcbiAqIHNwZWNpZmljIGNvZGUsIHN1Y2ggYXMgNDIxICh0aGUgYHAycGAgcHJvdG9jb2wgY29kZSkuIFRoZSBsYXN0IGluZGV4IG9mIHRoZSBjb2RlXG4gKiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgYE11bHRpYWRkcmAsIGFuZCBhIG5ldyBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGNvZGUgaXMgbm90IHByZXNlbnQsIHRoZSBvcmlnaW5hbCBgTXVsdGlhZGRyYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZSBUaGUgY29kZSBvZiB0aGUgcHJvdG9jb2wgdG8gZGVjYXBzdWxhdGUgZnJvbSB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFkZHIgPSBNdWx0aWFkZHIoJy9pcDQvMC4wLjAuMC90Y3AvODA4MC9wMnAvUW1jZ3BzeVdnSDhZOGFqSnoxQ3U3MktuUzV1bzJBYTJMcHpVN2tpblN1cE5LQycpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDAuLi4gLSAvaXA0LzAuMC4wLjAvdGNwLzgwODAvcDJwL1FtY2dwc3lXZ0g4WThhakp6MUN1NzJLblM1dW8yQWEyTHB6VTdraW5TdXBOS0M+XG4gKlxuICogYWRkci5kZWNhcHN1bGF0ZUNvZGUoNDIxKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8wLjAuMC4wL3RjcC84MDgwJ1xuICpcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzgwODAnKS5kZWNhcHN1bGF0ZUNvZGUoNDIxKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzgwODAnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZGVjYXBzdWxhdGVDb2RlID0gZnVuY3Rpb24gZGVjYXBzdWxhdGVDb2RlIChjb2RlKSB7XG4gIGNvbnN0IHR1cGxlcyA9IHRoaXMudHVwbGVzKClcbiAgZm9yIChsZXQgaSA9IHR1cGxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmICh0dXBsZXNbaV1bMF0gPT09IGNvZGUpIHtcbiAgICAgIHJldHVybiBNdWx0aWFkZHIoY29kZWMudHVwbGVzVG9CdWZmZXIodHVwbGVzLnNsaWNlKDAsIGkpKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwZWVySWQgaWYgdGhlIG11bHRpYWRkciBjb250YWlucyBvbmVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd8bnVsbH0gcGVlcklkIC0gVGhlIGlkIG9mIHRoZSBwZWVyIG9yIG51bGwgaWYgaW52YWxpZCBvciBtaXNzaW5nIGZyb20gdGhlIG1hXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAvaXBmcy9RbVZhbGlkQmFzZTU4c3RyaW5nJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC9pcGZzL1FtVmFsaWRCYXNlNThzdHJpbmc+XG4gKlxuICogLy8gc2hvdWxkIHJldHVybiBRbVZhbGlkQmFzZTU4c3RyaW5nIG9yIG51bGwgaWYgdGhlIGlkIGlzIG1pc3Npbmcgb3IgaW52YWxpZFxuICogY29uc3QgcGVlcklkID0gbWgxLmdldFBlZXJJZCgpXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuZ2V0UGVlcklkID0gZnVuY3Rpb24gZ2V0UGVlcklkICgpIHtcbiAgbGV0IGI1OHN0ciA9IG51bGxcbiAgdHJ5IHtcbiAgICBjb25zdCB0dXBsZXMgPSB0aGlzLnN0cmluZ1R1cGxlcygpLmZpbHRlcigodHVwbGUpID0+IHtcbiAgICAgIGlmICh0dXBsZVswXSA9PT0gcHJvdG9jb2xzLm5hbWVzLmlwZnMuY29kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBHZXQgdGhlIGxhc3QgaWRcbiAgICBiNThzdHIgPSB0dXBsZXMucG9wKClbMV1cbiAgICAvLyBHZXQgbXVsdGloYXNoLCB1bndyYXAgZnJvbSBDSUQgaWYgbmVlZGVkXG4gICAgYjU4c3RyID0gYnM1OC5lbmNvZGUobmV3IENJRChiNThzdHIpLm11bHRpaGFzaClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGI1OHN0ciA9IG51bGxcbiAgfVxuXG4gIHJldHVybiBiNThzdHJcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwYXRoIGlmIHRoZSBtdWx0aWFkZHIgY29udGFpbnMgb25lXG4gKlxuICogQHJldHVybiB7U3RyaW5nfG51bGx9IHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgbXVsdGlhZGRyLCBvciBudWxsIGlmIG5vIHBhdGggcHJvdG9jb2wgaXMgcHJlc2VudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwL3VuaXgvdG1wL3AycC5zb2NrJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MC91bml4L3RtcC9wMnAuc29jaz5cbiAqXG4gKiAvLyBzaG91bGQgcmV0dXJuIHV0Zjggc3RyaW5nIG9yIG51bGwgaWYgdGhlIGlkIGlzIG1pc3Npbmcgb3IgaW52YWxpZFxuICogY29uc3QgcGF0aCA9IG1oMS5nZXRQYXRoKClcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gZ2V0UGF0aCAoKSB7XG4gIGxldCBwYXRoID0gbnVsbFxuICB0cnkge1xuICAgIHBhdGggPSB0aGlzLnN0cmluZ1R1cGxlcygpLmZpbHRlcigodHVwbGUpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gcHJvdG9jb2xzKHR1cGxlWzBdKVxuICAgICAgaWYgKHByb3RvLnBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVswXVsxXVxuICB9IGNhdGNoIChlKSB7XG4gICAgcGF0aCA9IG51bGxcbiAgfVxuXG4gIHJldHVybiBwYXRoXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHR3byBNdWx0aWFkZHJzIGFyZSB0aGUgc2FtZVxuICpcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyXG4gKiBAcmV0dXJuIHtCb29sfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIG1oMS5lcXVhbHMobWgxKVxuICogLy8gdHJ1ZVxuICpcbiAqIG1oMS5lcXVhbHMobWgyKVxuICogLy8gZmFsc2VcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGFkZHIpIHtcbiAgcmV0dXJuIHRoaXMuYnVmZmVyLmVxdWFscyhhZGRyLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBHZXRzIGEgTXVsdGlhZGRycyBub2RlLWZyaWVuZGx5IGFkZHJlc3Mgb2JqZWN0LiBOb3RlIHRoYXQgcHJvdG9jb2wgaW5mb3JtYXRpb25cbiAqIGlzIGxlZnQgb3V0OiBpbiBOb2RlIChhbmQgbW9zdCBuZXR3b3JrIHN5c3RlbXMpIHRoZSBwcm90b2NvbCBpcyB1bmtub3dhYmxlXG4gKiBnaXZlbiBvbmx5IHRoZSBhZGRyZXNzLlxuICpcbiAqIEhhcyB0byBiZSBhIFRoaW5XYWlzdCBBZGRyZXNzLCBvdGhlcndpc2UgdGhyb3dzIGVycm9yXG4gKlxuICogQHJldHVybnMge3tmYW1pbHk6IFN0cmluZywgYWRkcmVzczogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fVxuICogQHRocm93cyB7RXJyb3J9IFRocm93cyBlcnJvciBpZiBNdWx0aWFkZHIgaXMgbm90IGEgVGhpbiBXYWlzdCBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLm5vZGVBZGRyZXNzKClcbiAqIC8vIHtmYW1pbHk6ICdJUHY0JywgYWRkcmVzczogJzEyNy4wLjAuMScsIHBvcnQ6ICc0MDAxJ31cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5ub2RlQWRkcmVzcyA9IGZ1bmN0aW9uIG5vZGVBZGRyZXNzICgpIHtcbiAgY29uc3QgY29kZXMgPSB0aGlzLnByb3RvQ29kZXMoKVxuICBjb25zdCBuYW1lcyA9IHRoaXMucHJvdG9OYW1lcygpXG4gIGNvbnN0IHBhcnRzID0gdGhpcy50b1N0cmluZygpLnNwbGl0KCcvJykuc2xpY2UoMSlcblxuICBpZiAocGFydHMubGVuZ3RoIDwgNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGlhZGRyIG11c3QgaGF2ZSBhIHZhbGlkIGZvcm1hdDogXCIve2lwNCwgaXA2LCBkbnM0LCBkbnM2fS97YWRkcmVzc30ve3RjcCwgdWRwfS97cG9ydH1cIi4nKVxuICB9IGVsc2UgaWYgKGNvZGVzWzBdICE9PSA0ICYmIGNvZGVzWzBdICE9PSA0MSAmJiBjb2Rlc1swXSAhPT0gNTQgJiYgY29kZXNbMF0gIT09IDU1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBwcm90b2NvbCB3aXRoIG5hbWU6IFwiJyR7bmFtZXNbMF19J1wiLiBNdXN0IGhhdmUgYSB2YWxpZCBmYW1pbHkgbmFtZTogXCJ7aXA0LCBpcDYsIGRuczQsIGRuczZ9XCIuYClcbiAgfSBlbHNlIGlmIChwYXJ0c1syXSAhPT0gJ3RjcCcgJiYgcGFydHNbMl0gIT09ICd1ZHAnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBwcm90b2NvbCB3aXRoIG5hbWU6IFwiJyR7bmFtZXNbMV19J1wiLiBNdXN0IGhhdmUgYSB2YWxpZCB0cmFuc3BvcnQgcHJvdG9jb2w6IFwie3RjcCwgdWRwfVwiLmApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZhbWlseTogKGNvZGVzWzBdID09PSA0MSB8fCBjb2Rlc1swXSA9PT0gNTUpID8gNiA6IDQsXG4gICAgYWRkcmVzczogcGFydHNbMV0sIC8vIGlwIGFkZHJcbiAgICBwb3J0OiBwYXJzZUludChwYXJ0c1szXSkgLy8gdGNwIG9yIHVkcCBwb3J0XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgTXVsdGlhZGRyIGZyb20gYSBub2RlLWZyaWVuZGx5IGFkZHJlc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHt7ZmFtaWx5OiBTdHJpbmcsIGFkZHJlc3M6IFN0cmluZywgcG9ydDogTnVtYmVyfX0gYWRkclxuICogQHBhcmFtIHtTdHJpbmd9IHRyYW5zcG9ydFxuICogQHJldHVybnMge011bHRpYWRkcn0gbXVsdGlhZGRyXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIGFkZHIgaXMgbm90IHRydXRoeVxuICogQHRocm93cyB7RXJyb3J9IFRocm93cyBlcnJvciBpZiB0cmFuc3BvcnQgaXMgbm90IHRydXRoeVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkci5mcm9tTm9kZUFkZHJlc3Moe2FkZHJlc3M6ICcxMjcuMC4wLjEnLCBwb3J0OiAnNDAwMSd9LCAndGNwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICovXG5NdWx0aWFkZHIuZnJvbU5vZGVBZGRyZXNzID0gZnVuY3Rpb24gZnJvbU5vZGVBZGRyZXNzIChhZGRyLCB0cmFuc3BvcnQpIHtcbiAgaWYgKCFhZGRyKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIG5vZGUgYWRkcmVzcyBvYmplY3QnKVxuICBpZiAoIXRyYW5zcG9ydCkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyB0cmFuc3BvcnQgcHJvdG9jb2wnKVxuICBjb25zdCBpcCA9IChhZGRyLmZhbWlseSA9PT0gJ0lQdjYnKSA/ICdpcDYnIDogJ2lwNCdcbiAgcmV0dXJuIE11bHRpYWRkcignLycgKyBbaXAsIGFkZHIuYWRkcmVzcywgdHJhbnNwb3J0LCBhZGRyLnBvcnRdLmpvaW4oJy8nKSlcbn1cblxuLy8gVE9ETyBmaW5kIGEgYmV0dGVyIGV4YW1wbGUsIG5vdCBzdXJlIGFib3V0IGl0J3MgZ29vZCBlbm91Z2hcbi8qKlxuICogUmV0dXJucyBpZiBhIE11bHRpYWRkciBpcyBhIFRoaW4gV2Fpc3QgYWRkcmVzcyBvciBub3QuXG4gKlxuICogVGhpbiBXYWlzdCBpcyBpZiBhIE11bHRpYWRkciBhZGhlcmVzIHRvIHRoZSBzdGFuZGFyZCBjb21iaW5hdGlvbiBvZjpcbiAqXG4gKiBge0lQdjQsIElQdjZ9L3tUQ1AsIFVEUH1gXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IFthZGRyXSAtIERlZmF1bHRzIHRvIHVzaW5nIGB0aGlzYCBpbnN0YW5jZVxuICogQHJldHVybnMge0Jvb2xlYW59IGlzVGhpbldhaXN0QWRkcmVzc1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNGMwYTgwMjAxMDYxMzg5IC0gL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMT5cbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEwNGMwYTgwMjAxMDYxMzg5IC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxPlxuICogbWgxLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyB0cnVlXG4gKiBtaDIuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIHRydWVcbiAqIG1oMy5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gZmFsc2VcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5pc1RoaW5XYWlzdEFkZHJlc3MgPSBmdW5jdGlvbiBpc1RoaW5XYWlzdEFkZHJlc3MgKGFkZHIpIHtcbiAgY29uc3QgcHJvdG9zID0gKGFkZHIgfHwgdGhpcykucHJvdG9zKClcblxuICBpZiAocHJvdG9zLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHByb3Rvc1swXS5jb2RlICE9PSA0ICYmIHByb3Rvc1swXS5jb2RlICE9PSA0MSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChwcm90b3NbMV0uY29kZSAhPT0gNiAmJiBwcm90b3NbMV0uY29kZSAhPT0gMjczKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBPYmplY3QgY29udGFpbmluZyB0YWJsZSwgbmFtZXMgYW5kIGNvZGVzIG9mIGFsbCBzdXBwb3J0ZWQgcHJvdG9jb2xzLlxuICogVG8gZ2V0IHRoZSBwcm90b2NvbCB2YWx1ZXMgZnJvbSBhIE11bHRpYWRkciwgeW91IGNhbiB1c2VcbiAqIFtgLnByb3RvcygpYF0oI211bHRpYWRkcnByb3RvcyksXG4gKiBbYC5wcm90b0NvZGVzKClgXSgjbXVsdGlhZGRycHJvdG9jb2Rlcykgb3JcbiAqIFtgLnByb3RvTmFtZXMoKWBdKCNtdWx0aWFkZHJwcm90b25hbWVzKVxuICpcbiAqIEBpbnN0YW5jZVxuICogQHJldHVybnMge3t0YWJsZTogQXJyYXksIG5hbWVzOiBPYmplY3QsIGNvZGVzOiBPYmplY3R9fVxuICpcbiAqL1xuTXVsdGlhZGRyLnByb3RvY29scyA9IHByb3RvY29sc1xuXG4vKipcbiAqIFJldHVybnMgaWYgc29tZXRoaW5nIGlzIGEgTXVsdGlhZGRyIHRoYXQgaXMgYSBuYW1lXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge0Jvb2x9IGlzTmFtZVxuICovXG5NdWx0aWFkZHIuaXNOYW1lID0gZnVuY3Rpb24gaXNOYW1lIChhZGRyKSB7XG4gIGlmICghTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGFkZHIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBpZiBhIHBhcnQgb2YgdGhlIG11bHRpYWRkciBpcyByZXNvbHZhYmxlLCB0aGVuIHJldHVybiB0cnVlXG4gIHJldHVybiBhZGRyLnByb3RvcygpLnNvbWUoKHByb3RvKSA9PiBwcm90by5yZXNvbHZhYmxlKVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbXVsdGlhZGRycywgYnkgcmVzb2x2aW5nIHRoZSBtdWx0aWFkZHIgdGhhdCBpcyBhIG5hbWVcbiAqXG4gKiBAYXN5bmNcbiAqIEBwYXJhbSB7TXVsdGlhZGRyfSBhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJbXX1cbiAqL1xuTXVsdGlhZGRyLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlIChhZGRyKSB7XG4gIGlmICghTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGFkZHIpIHx8ICFNdWx0aWFkZHIuaXNOYW1lKGFkZHIpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KEVycm9yKCdub3QgYSB2YWxpZCBuYW1lJykpXG4gIH1cblxuICAvKlxuICAgKiBOZWVkcyBtb3JlIGNvbnNpZGVyYXRpb24gZnJvbSBzcGVjIGRlc2lnbjpcbiAgICogICAtIHdoYXQgdG8gcmV0dXJuXG4gICAqICAgLSBob3cgdG8gYWNoaWV2ZSBpdCBpbiB0aGUgYnJvd3Nlcj9cbiAgICovXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCB5ZXQnKSlcbn1cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gTXVsdGlhZGRyXG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gUHJvdG9jb2xzIChwcm90bykge1xuICBpZiAodHlwZW9mIChwcm90bykgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKFByb3RvY29scy5jb2Rlc1twcm90b10pIHtcbiAgICAgIHJldHVybiBQcm90b2NvbHMuY29kZXNbcHJvdG9dXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm90b2NvbCB3aXRoIGNvZGU6ICcgKyBwcm90bylcbiAgfSBlbHNlIGlmICh0eXBlb2YgKHByb3RvKSA9PT0gJ3N0cmluZycgfHwgcHJvdG8gaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICBpZiAoUHJvdG9jb2xzLm5hbWVzW3Byb3RvXSkge1xuICAgICAgcmV0dXJuIFByb3RvY29scy5uYW1lc1twcm90b11cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByb3RvY29sIHdpdGggbmFtZTogJyArIHByb3RvKVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByb3RvY29sIGlkIHR5cGU6ICcgKyBwcm90bylcbn1cblxuY29uc3QgViA9IC0xXG5Qcm90b2NvbHMubGVuZ3RoUHJlZml4ZWRWYXJTaXplID0gVlxuUHJvdG9jb2xzLlYgPSBWXG5cblByb3RvY29scy50YWJsZSA9IFtcbiAgWzQsIDMyLCAnaXA0J10sXG4gIFs2LCAxNiwgJ3RjcCddLFxuICBbMzMsIDE2LCAnZGNjcCddLFxuICBbNDEsIDEyOCwgJ2lwNiddLFxuICBbNDIsIFYsICdpcDZ6b25lJ10sXG4gIFs1MywgViwgJ2RucycsICdyZXNvbHZhYmxlJ10sXG4gIFs1NCwgViwgJ2RuczQnLCAncmVzb2x2YWJsZSddLFxuICBbNTUsIFYsICdkbnM2JywgJ3Jlc29sdmFibGUnXSxcbiAgWzU2LCBWLCAnZG5zYWRkcicsICdyZXNvbHZhYmxlJ10sXG4gIFsxMzIsIDE2LCAnc2N0cCddLFxuICBbMjczLCAxNiwgJ3VkcCddLFxuICBbMjc1LCAwLCAncDJwLXdlYnJ0Yy1zdGFyJ10sXG4gIFsyNzYsIDAsICdwMnAtd2VicnRjLWRpcmVjdCddLFxuICBbMjc3LCAwLCAncDJwLXN0YXJkdXN0J10sXG4gIFsyOTAsIDAsICdwMnAtY2lyY3VpdCddLFxuICBbMzAxLCAwLCAndWR0J10sXG4gIFszMDIsIDAsICd1dHAnXSxcbiAgWzQwMCwgViwgJ3VuaXgnLCBmYWxzZSwgJ3BhdGgnXSxcbiAgLy8gYGlwZnNgIGlzIGFkZGVkIGJlZm9yZSBgcDJwYCBmb3IgbGVnYWN5IHN1cHBvcnQuXG4gIC8vIEFsbCB0ZXh0IHJlcHJlc2VudGF0aW9ucyB3aWxsIGRlZmF1bHQgdG8gYHAycGAsIGJ1dCBgaXBmc2Agd2lsbFxuICAvLyBzdGlsbCBiZSBzdXBwb3J0ZWRcbiAgWzQyMSwgViwgJ2lwZnMnXSxcbiAgLy8gYHAycGAgaXMgdGhlIHByZWZlcnJlZCBuYW1lIGZvciA0MjEsIGFuZCBpcyBub3cgdGhlIGRlZmF1bHRcbiAgWzQyMSwgViwgJ3AycCddLFxuICBbNDQzLCAwLCAnaHR0cHMnXSxcbiAgWzQ0NCwgOTYsICdvbmlvbiddLFxuICBbNDQ1LCAyOTYsICdvbmlvbjMnXSxcbiAgWzQ0NiwgViwgJ2dhcmxpYzY0J10sXG4gIFs0NjAsIDAsICdxdWljJ10sXG4gIFs0NzcsIDAsICd3cyddLFxuICBbNDc4LCAwLCAnd3NzJ10sXG4gIFs0NzksIDAsICdwMnAtd2Vic29ja2V0LXN0YXInXSxcbiAgWzQ4MCwgMCwgJ2h0dHAnXVxuXVxuXG5Qcm90b2NvbHMubmFtZXMgPSB7fVxuUHJvdG9jb2xzLmNvZGVzID0ge31cblxuLy8gcG9wdWxhdGUgdGFibGVzXG5Qcm90b2NvbHMudGFibGUubWFwKHJvdyA9PiB7XG4gIGNvbnN0IHByb3RvID0gcC5hcHBseShudWxsLCByb3cpXG4gIFByb3RvY29scy5jb2Rlc1twcm90by5jb2RlXSA9IHByb3RvXG4gIFByb3RvY29scy5uYW1lc1twcm90by5uYW1lXSA9IHByb3RvXG59KVxuXG5Qcm90b2NvbHMub2JqZWN0ID0gcFxuXG5mdW5jdGlvbiBwIChjb2RlLCBzaXplLCBuYW1lLCByZXNvbHZhYmxlLCBwYXRoKSB7XG4gIHJldHVybiB7XG4gICAgY29kZTogY29kZSxcbiAgICBzaXplOiBzaXplLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcmVzb2x2YWJsZTogQm9vbGVhbihyZXNvbHZhYmxlKSxcbiAgICBwYXRoOiBCb29sZWFuKHBhdGgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm90b2NvbHNcbiIsIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBCYXNlIHtcbiAgY29uc3RydWN0b3IgKG5hbWUsIGNvZGUsIGltcGxlbWVudGF0aW9uLCBhbHBoYWJldCkge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmNvZGUgPSBjb2RlXG4gICAgdGhpcy5hbHBoYWJldCA9IGFscGhhYmV0XG4gICAgaWYgKGltcGxlbWVudGF0aW9uICYmIGFscGhhYmV0KSB7XG4gICAgICB0aGlzLmVuZ2luZSA9IGltcGxlbWVudGF0aW9uKGFscGhhYmV0KVxuICAgIH1cbiAgfVxuXG4gIGVuY29kZSAoc3RyaW5nT3JCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuZW5jb2RlKHN0cmluZ09yQnVmZmVyKVxuICB9XG5cbiAgZGVjb2RlIChzdHJpbmdPckJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5kZWNvZGUoc3RyaW5nT3JCdWZmZXIpXG4gIH1cblxuICBpc0ltcGxlbWVudGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VcbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UxNiAoYWxwaGFiZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCdoZXgnKVxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTE2IGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2hleCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gZGVjb2RlIChpbnB1dCwgYWxwaGFiZXQpIHtcbiAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKG5ldyBSZWdFeHAoJz0nLCAnZycpLCAnJylcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aFxuXG4gIGxldCBiaXRzID0gMFxuICBsZXQgdmFsdWUgPSAwXG5cbiAgbGV0IGluZGV4ID0gMFxuICBsZXQgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbmd0aCAqIDUgLyA4KSB8IDApXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDUpIHwgYWxwaGFiZXQuaW5kZXhPZihpbnB1dFtpXSlcbiAgICBiaXRzICs9IDVcblxuICAgIGlmIChiaXRzID49IDgpIHtcbiAgICAgIG91dHB1dFtpbmRleCsrXSA9ICh2YWx1ZSA+Pj4gKGJpdHMgLSA4KSkgJiAyNTVcbiAgICAgIGJpdHMgLT0gOFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGVuY29kZSAoYnVmZmVyLCBhbHBoYWJldCkge1xuICBsZXQgbGVuZ3RoID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG4gIGxldCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID09PSBhbHBoYWJldC5sZW5ndGggLSAxXG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICBhbHBoYWJldCA9IGFscGhhYmV0LnN1YnN0cmluZygwLCBhbHBoYWJldC5sZW5ndGggLSAyKVxuICB9XG5cbiAgbGV0IGJpdHMgPSAwXG4gIGxldCB2YWx1ZSA9IDBcbiAgbGV0IG91dHB1dCA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpIHwgdmlld1tpXVxuICAgIGJpdHMgKz0gOFxuXG4gICAgd2hpbGUgKGJpdHMgPj0gNSkge1xuICAgICAgb3V0cHV0ICs9IGFscGhhYmV0Wyh2YWx1ZSA+Pj4gKGJpdHMgLSA1KSkgJiAzMV1cbiAgICAgIGJpdHMgLT0gNVxuICAgIH1cbiAgfVxuXG4gIGlmIChiaXRzID4gMCkge1xuICAgIG91dHB1dCArPSBhbHBoYWJldFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAzMV1cbiAgfVxuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgd2hpbGUgKChvdXRwdXQubGVuZ3RoICUgOCkgIT09IDApIHtcbiAgICAgIG91dHB1dCArPSAnPSdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTMyIChhbHBoYWJldCkge1xuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQpLCBhbHBoYWJldClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVuY29kZShpbnB1dCwgYWxwaGFiZXQpXG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlMzIgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVjb2RlKGlucHV0LCBhbHBoYWJldClcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2U2NCAoYWxwaGFiZXQpIHtcbiAgLy8gVGhlIGFscGhhYmV0IGlzIG9ubHkgdXNlZCB0byBrbm93OlxuICAvLyAgIDEuIElmIHBhZGRpbmcgaXMgZW5hYmxlZCAobXVzdCBjb250YWluICc9JylcbiAgLy8gICAyLiBJZiB0aGUgb3V0cHV0IG11c3QgYmUgdXJsLXNhZmUgKG11c3QgY29udGFpbiAnLScgYW5kICdfJylcbiAgLy8gICAzLiBJZiB0aGUgaW5wdXQgb2YgdGhlIG91dHB1dCBmdW5jdGlvbiBpcyB2YWxpZFxuICAvLyBUaGUgYWxwaGFiZXRzIGZyb20gUkZDIDQ2NDggYXJlIGFsd2F5cyB1c2VkLlxuICBjb25zdCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID4gLTFcbiAgY29uc3QgdXJsID0gYWxwaGFiZXQuaW5kZXhPZignLScpID4gLTEgJiYgYWxwaGFiZXQuaW5kZXhPZignXycpID4gLTFcblxuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGxldCBvdXRwdXQgPSAnJ1xuXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdXRwdXQgPSBCdWZmZXIuZnJvbShpbnB1dCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQgPSBpbnB1dC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkID0gb3V0cHV0LmluZGV4T2YoJz0nKVxuICAgICAgaWYgKHBhZCA+IDAgJiYgIXBhZGRpbmcpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnN1YnN0cmluZygwLCBwYWQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2U2NCBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgQmFzZSA9IHJlcXVpcmUoJy4vYmFzZS5qcycpXG5jb25zdCBiYXNlWCA9IHJlcXVpcmUoJ2Jhc2UteCcpXG5jb25zdCBiYXNlMTYgPSByZXF1aXJlKCcuL2Jhc2UxNicpXG5jb25zdCBiYXNlMzIgPSByZXF1aXJlKCcuL2Jhc2UzMicpXG5jb25zdCBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpXG5cbi8vIG5hbWUsIGNvZGUsIGltcGxlbWVudGF0aW9uLCBhbHBoYWJldFxuY29uc3QgY29uc3RhbnRzID0gW1xuICBbJ2Jhc2UxJywgJzEnLCAnJywgJzEnXSxcbiAgWydiYXNlMicsICcwJywgYmFzZVgsICcwMSddLFxuICBbJ2Jhc2U4JywgJzcnLCBiYXNlWCwgJzAxMjM0NTY3J10sXG4gIFsnYmFzZTEwJywgJzknLCBiYXNlWCwgJzAxMjM0NTY3ODknXSxcbiAgWydiYXNlMTYnLCAnZicsIGJhc2UxNiwgJzAxMjM0NTY3ODlhYmNkZWYnXSxcbiAgWydiYXNlMzInLCAnYicsIGJhc2UzMiwgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3J10sXG4gIFsnYmFzZTMycGFkJywgJ2MnLCBiYXNlMzIsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2Nz0nXSxcbiAgWydiYXNlMzJoZXgnLCAndicsIGJhc2UzMiwgJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2J10sXG4gIFsnYmFzZTMyaGV4cGFkJywgJ3QnLCBiYXNlMzIsICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dj0nXSxcbiAgWydiYXNlMzJ6JywgJ2gnLCBiYXNlMzIsICd5Ym5kcmZnOGVqa21jcHF4b3QxdXdpc3phMzQ1aDc2OSddLFxuICBbJ2Jhc2U1OGZsaWNrcicsICdaJywgYmFzZVgsICcxMjM0NTY3ODlhYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaJ10sXG4gIFsnYmFzZTU4YnRjJywgJ3onLCBiYXNlWCwgJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonXSxcbiAgWydiYXNlNjQnLCAnbScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXSxcbiAgWydiYXNlNjRwYWQnLCAnTScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89J10sXG4gIFsnYmFzZTY0dXJsJywgJ3UnLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJ10sXG4gIFsnYmFzZTY0dXJscGFkJywgJ1UnLCBiYXNlNjQsICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fPSddXG5dXG5cbmNvbnN0IG5hbWVzID0gY29uc3RhbnRzLnJlZHVjZSgocHJldiwgdHVwcGxlKSA9PiB7XG4gIHByZXZbdHVwcGxlWzBdXSA9IG5ldyBCYXNlKHR1cHBsZVswXSwgdHVwcGxlWzFdLCB0dXBwbGVbMl0sIHR1cHBsZVszXSlcbiAgcmV0dXJuIHByZXZcbn0sIHt9KVxuXG5jb25zdCBjb2RlcyA9IGNvbnN0YW50cy5yZWR1Y2UoKHByZXYsIHR1cHBsZSkgPT4ge1xuICBwcmV2W3R1cHBsZVsxXV0gPSBuYW1lc1t0dXBwbGVbMF1dXG4gIHJldHVybiBwcmV2XG59LCB7fSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5hbWVzOiBuYW1lcyxcbiAgY29kZXM6IGNvZGVzXG59XG4iLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbbXVsdGliYXNlXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYmFzZSkgc3BlY2lmaWNhdGlvbi5cbiAqIEBtb2R1bGUgTXVsdGliYXNlXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IG11bHRpYmFzZVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGVcbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlXG5leHBvcnRzLmlzRW5jb2RlZCA9IGlzRW5jb2RlZFxuZXhwb3J0cy5uYW1lcyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoY29uc3RhbnRzLm5hbWVzKSlcbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5jb2RlcykpXG5cbmNvbnN0IGVyck5vdFN1cHBvcnRlZCA9IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2RpbmcnKVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBidWZmZXIgd2l0aCB0aGUgbXVsdGliYXNlIHZhcmludCtjb2RlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZU9yQ29kZSAtIFRoZSBtdWx0aWJhc2UgbmFtZSBvciBjb2RlIG51bWJlci5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWYgLSBUaGUgZGF0YSB0byBiZSBwcmVmaXhlZCB3aXRoIG11bHRpYmFzZS5cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIG11bHRpYmFzZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGlmICghYnVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyBhbiBlbmNvZGVkIGJ1ZmZlcicpXG4gIH1cbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZU9yQ29kZSlcbiAgY29uc3QgY29kZUJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UuY29kZSlcblxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG4gIHZhbGlkRW5jb2RlKG5hbWUsIGJ1ZilcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2NvZGVCdWYsIGJ1Zl0pXG59XG5cbi8qKlxuICogRW5jb2RlIGRhdGEgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2UgYW5kIGFkZCB0aGUgbXVsdGliYXNlIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IG5hbWUgPSBiYXNlLm5hbWVcblxuICByZXR1cm4gbXVsdGliYXNlKG5hbWUsIEJ1ZmZlci5mcm9tKGJhc2UuZW5jb2RlKGJ1ZikpKVxufVxuXG4vKipcbiAqIFRha2VzIGEgYnVmZmVyIG9yIHN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlIGhlYWRlciwgZGVjb2RlcyBpdCBhbmRcbiAqIHJldHVybnMgdGhlIGRlY29kZWQgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge0J1ZmZlcn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMSwgYnVmT3JTdHJpbmcubGVuZ3RoKVxuXG4gIGlmICh0eXBlb2YgYnVmT3JTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBCdWZmZXIuZnJvbShidWZPclN0cmluZylcbiAgfVxuXG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gIHJldHVybiBCdWZmZXIuZnJvbShiYXNlLmRlY29kZShidWZPclN0cmluZy50b1N0cmluZygpKSlcbn1cblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0YSBtdWx0aWJhc2UgZW5jb2RlZD9cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGJ1Zk9yU3RyaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqL1xuZnVuY3Rpb24gaXNFbmNvZGVkIChidWZPclN0cmluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1Zk9yU3RyaW5nKSkge1xuICAgIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gRW5zdXJlIGJ1Zk9yU3RyaW5nIGlzIGEgc3RyaW5nXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYnVmT3JTdHJpbmcpICE9PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29kZSA9IGJ1Zk9yU3RyaW5nLnN1YnN0cmluZygwLCAxKVxuICB0cnkge1xuICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gICAgcmV0dXJuIGJhc2UubmFtZVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRFbmNvZGUgKG5hbWUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lKVxuICBiYXNlLmRlY29kZShidWYudG9TdHJpbmcoKSlcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZSAobmFtZU9yQ29kZSkge1xuICBsZXQgYmFzZVxuXG4gIGlmIChjb25zdGFudHMubmFtZXNbbmFtZU9yQ29kZV0pIHtcbiAgICBiYXNlID0gY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdXG4gIH0gZWxzZSBpZiAoY29uc3RhbnRzLmNvZGVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXVxuICB9IGVsc2Uge1xuICAgIHRocm93IGVyck5vdFN1cHBvcnRlZFxuICB9XG5cbiAgaWYgKCFiYXNlLmlzSW1wbGVtZW50ZWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmFzZSAnICsgbmFtZU9yQ29kZSArICcgaXMgbm90IGltcGxlbWVudGVkIHlldCcpXG4gIH1cblxuICByZXR1cm4gYmFzZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGVjQ29uc3RhbnQgLT4gY29kZVxuY29uc3QgY29uc3RhbnRzID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGNvbnN0YW50c1tuYW1lLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLS9nLCAnXycpXSA9IGNvZGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKGNvbnN0YW50cylcbiIsIi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIG11bHRpY29kZWMgc3BlY2lmaWNhdGlvbi5cbiAqXG4gKiBAbW9kdWxlIG11bHRpY29kZWNcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtdWx0aWNvZGVjID0gcmVxdWlyZSgnbXVsdGljb2RlYycpXG4gKlxuICogY29uc3QgcHJlZml4ZWRQcm90b2J1ZiA9IG11bHRpY29kZWMuYWRkUHJlZml4KCdwcm90b2J1ZicsIHByb3RvYnVmQnVmZmVyKVxuICogLy8gcHJlZml4ZWRQcm90b2J1ZiAweDUwLi4uXG4gKlxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcbmNvbnN0IGludFRhYmxlID0gcmVxdWlyZSgnLi9pbnQtdGFibGUnKVxuY29uc3QgY29kZWNOYW1lVG9Db2RlVmFyaW50ID0gcmVxdWlyZSgnLi92YXJpbnQtdGFibGUnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0c1xuXG4vKipcbiAqIFByZWZpeCBhIGJ1ZmZlciB3aXRoIGEgbXVsdGljb2RlYy1wYWNrZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBtdWx0aWNvZGVjU3RyT3JDb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5hZGRQcmVmaXggPSAobXVsdGljb2RlY1N0ck9yQ29kZSwgZGF0YSkgPT4ge1xuICBsZXQgcHJlZml4XG5cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihtdWx0aWNvZGVjU3RyT3JDb2RlKSkge1xuICAgIHByZWZpeCA9IHV0aWwudmFyaW50QnVmZmVyRW5jb2RlKG11bHRpY29kZWNTdHJPckNvZGUpXG4gIH0gZWxzZSB7XG4gICAgaWYgKGNvZGVjTmFtZVRvQ29kZVZhcmludFttdWx0aWNvZGVjU3RyT3JDb2RlXSkge1xuICAgICAgcHJlZml4ID0gY29kZWNOYW1lVG9Db2RlVmFyaW50W211bHRpY29kZWNTdHJPckNvZGVdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbXVsdGljb2RlYyBub3QgcmVjb2duaXplZCcpXG4gICAgfVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtwcmVmaXgsIGRhdGFdKVxufVxuXG4vKipcbiAqIERlY2Fwc3VsYXRlIHRoZSBtdWx0aWNvZGVjLXBhY2tlZCBwcmVmaXggZnJvbSB0aGUgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5ybVByZWZpeCA9IChkYXRhKSA9PiB7XG4gIHZhcmludC5kZWNvZGUoZGF0YSlcbiAgcmV0dXJuIGRhdGEuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGVjIG9mIHRoZSBwcmVmaXhlZCBkYXRhLlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeGVkRGF0YVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy5nZXRDb2RlYyA9IChwcmVmaXhlZERhdGEpID0+IHtcbiAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUocHJlZml4ZWREYXRhKVxuICBjb25zdCBjb2RlY05hbWUgPSBpbnRUYWJsZS5nZXQoY29kZSlcbiAgaWYgKGNvZGVjTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb2RlICR7Y29kZX0gbm90IGZvdW5kYClcbiAgfVxuICByZXR1cm4gY29kZWNOYW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBuYW1lIG9mIHRoZSBjb2RlYy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlY1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy5nZXROYW1lID0gKGNvZGVjKSA9PiB7XG4gIHJldHVybiBpbnRUYWJsZS5nZXQoY29kZWMpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIG9mIHRoZSBjb2RlY1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuZ2V0TnVtYmVyID0gKG5hbWUpID0+IHtcbiAgY29uc3QgY29kZSA9IGNvZGVjTmFtZVRvQ29kZVZhcmludFtuYW1lXVxuICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlYyBgJyArIG5hbWUgKyAnYCBub3QgZm91bmQnKVxuICB9XG4gIHJldHVybiB1dGlsLnZhcmludEJ1ZmZlckRlY29kZShjb2RlKVswXVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZSBvZiB0aGUgcHJlZml4ZWQgZGF0YS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBwcmVmaXhlZERhdGFcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuZ2V0Q29kZSA9IChwcmVmaXhlZERhdGEpID0+IHtcbiAgcmV0dXJuIHZhcmludC5kZWNvZGUocHJlZml4ZWREYXRhKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZSBhcyB2YXJpbnQgb2YgYSBjb2RlYyBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGVjTmFtZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5nZXRDb2RlVmFyaW50ID0gKGNvZGVjTmFtZSkgPT4ge1xuICBjb25zdCBjb2RlID0gY29kZWNOYW1lVG9Db2RlVmFyaW50W2NvZGVjTmFtZV1cbiAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29kZWMgYCcgKyBjb2RlY05hbWUgKyAnYCBub3QgZm91bmQnKVxuICB9XG4gIHJldHVybiBjb2RlXG59XG5cbi8qKlxuICogR2V0IHRoZSB2YXJpbnQgb2YgYSBjb2RlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAqL1xuZXhwb3J0cy5nZXRWYXJpbnQgPSAoY29kZSkgPT4ge1xuICByZXR1cm4gdmFyaW50LmVuY29kZShjb2RlKVxufVxuXG4vLyBNYWtlIHRoZSBjb25zdGFudHMgdG9wLWxldmVsIGNvbnN0YW50c1xuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuT2JqZWN0LmFzc2lnbihleHBvcnRzLCBjb25zdGFudHMpXG5cbi8vIEh1bWFuIGZyaWVuZGx5IG5hbWVzIGZvciBwcmludGluZywgZS5nLiBpbiBlcnJvciBtZXNzYWdlc1xuZXhwb3J0cy5wcmludCA9IHJlcXVpcmUoJy4vcHJpbnQnKVxuIiwiJ3VzZSBzdHJpY3QnXG5jb25zdCBiYXNlVGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5cbi8vIG1hcCBmb3IgaGV4U3RyaW5nIC0+IGNvZGVjTmFtZVxuY29uc3QgbmFtZVRhYmxlID0gbmV3IE1hcCgpXG5cbmZvciAoY29uc3QgZW5jb2RpbmdOYW1lIGluIGJhc2VUYWJsZSkge1xuICBjb25zdCBjb2RlID0gYmFzZVRhYmxlW2VuY29kaW5nTmFtZV1cbiAgbmFtZVRhYmxlLnNldChjb2RlLCBlbmNvZGluZ05hbWUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZShuYW1lVGFibGUpXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgdGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5cbi8vIG1hcCBmb3IgY29kZSAtPiBwcmludCBmcmllbmRseSBuYW1lXG5jb25zdCB0YWJsZUJ5Q29kZSA9IHt9XG5cbmZvciAoY29uc3QgW25hbWUsIGNvZGVdIG9mIE9iamVjdC5lbnRyaWVzKHRhYmxlKSkge1xuICBpZiAodGFibGVCeUNvZGVbY29kZV0gPT09IHVuZGVmaW5lZCkgdGFibGVCeUNvZGVbY29kZV0gPSBuYW1lXG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh0YWJsZUJ5Q29kZSlcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG51bWJlclRvQnVmZmVyLFxuICBidWZmZXJUb051bWJlcixcbiAgdmFyaW50QnVmZmVyRW5jb2RlLFxuICB2YXJpbnRCdWZmZXJEZWNvZGUsXG4gIHZhcmludEVuY29kZVxufVxuXG5mdW5jdGlvbiBidWZmZXJUb051bWJlciAoYnVmKSB7XG4gIHJldHVybiBwYXJzZUludChidWYudG9TdHJpbmcoJ2hleCcpLCAxNilcbn1cblxuZnVuY3Rpb24gbnVtYmVyVG9CdWZmZXIgKG51bSkge1xuICBsZXQgaGV4U3RyaW5nID0gbnVtLnRvU3RyaW5nKDE2KVxuICBpZiAoaGV4U3RyaW5nLmxlbmd0aCAlIDIgPT09IDEpIHtcbiAgICBoZXhTdHJpbmcgPSAnMCcgKyBoZXhTdHJpbmdcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jylcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRW5jb2RlIChpbnB1dCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWZmZXJUb051bWJlcihpbnB1dCkpKVxufVxuXG5mdW5jdGlvbiB2YXJpbnRCdWZmZXJEZWNvZGUgKGlucHV0KSB7XG4gIHJldHVybiBudW1iZXJUb0J1ZmZlcih2YXJpbnQuZGVjb2RlKGlucHV0KSlcbn1cblxuZnVuY3Rpb24gdmFyaW50RW5jb2RlIChudW0pIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobnVtKSlcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlVGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5jb25zdCB2YXJpbnRFbmNvZGUgPSByZXF1aXJlKCcuL3V0aWwnKS52YXJpbnRFbmNvZGVcblxuLy8gbWFwIGZvciBjb2RlY05hbWUgLT4gY29kZVZhcmludEJ1ZmZlclxuY29uc3QgdmFyaW50VGFibGUgPSB7fVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIHZhcmludFRhYmxlW2VuY29kaW5nTmFtZV0gPSB2YXJpbnRFbmNvZGUoY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHZhcmludFRhYmxlKVxuIiwiLyogZXNsaW50IHF1b3RlLXByb3BzOiBvZmYgKi9cbi8qIGVzbGludCBrZXktc3BhY2luZzogb2ZmICovXG4ndXNlIHN0cmljdCdcblxuZXhwb3J0cy5uYW1lcyA9IE9iamVjdC5mcmVlemUoe1xuICAnaWRlbnRpdHknOiAgIDB4MCxcbiAgJ3NoYTEnOiAgICAgICAweDExLFxuICAnc2hhMi0yNTYnOiAgIDB4MTIsXG4gICdzaGEyLTUxMic6ICAgMHgxMyxcbiAgJ2RibC1zaGEyLTI1Nic6IDB4NTYsXG4gICdzaGEzLTIyNCc6ICAgMHgxNyxcbiAgJ3NoYTMtMjU2JzogICAweDE2LFxuICAnc2hhMy0zODQnOiAgIDB4MTUsXG4gICdzaGEzLTUxMic6ICAgMHgxNCxcbiAgJ3NoYWtlLTEyOCc6ICAweDE4LFxuICAnc2hha2UtMjU2JzogIDB4MTksXG4gICdrZWNjYWstMjI0JzogMHgxQSxcbiAgJ2tlY2Nhay0yNTYnOiAweDFCLFxuICAna2VjY2FrLTM4NCc6IDB4MUMsXG4gICdrZWNjYWstNTEyJzogMHgxRCxcbiAgJ211cm11cjMtMTI4JzogMHgyMixcbiAgJ211cm11cjMtMzInOiAgMHgyMyxcbiAgJ2JsYWtlMmItOCc6ICAgMHhiMjAxLFxuICAnYmxha2UyYi0xNic6ICAweGIyMDIsXG4gICdibGFrZTJiLTI0JzogIDB4YjIwMyxcbiAgJ2JsYWtlMmItMzInOiAgMHhiMjA0LFxuICAnYmxha2UyYi00MCc6ICAweGIyMDUsXG4gICdibGFrZTJiLTQ4JzogIDB4YjIwNixcbiAgJ2JsYWtlMmItNTYnOiAgMHhiMjA3LFxuICAnYmxha2UyYi02NCc6ICAweGIyMDgsXG4gICdibGFrZTJiLTcyJzogIDB4YjIwOSxcbiAgJ2JsYWtlMmItODAnOiAgMHhiMjBhLFxuICAnYmxha2UyYi04OCc6ICAweGIyMGIsXG4gICdibGFrZTJiLTk2JzogIDB4YjIwYyxcbiAgJ2JsYWtlMmItMTA0JzogMHhiMjBkLFxuICAnYmxha2UyYi0xMTInOiAweGIyMGUsXG4gICdibGFrZTJiLTEyMCc6IDB4YjIwZixcbiAgJ2JsYWtlMmItMTI4JzogMHhiMjEwLFxuICAnYmxha2UyYi0xMzYnOiAweGIyMTEsXG4gICdibGFrZTJiLTE0NCc6IDB4YjIxMixcbiAgJ2JsYWtlMmItMTUyJzogMHhiMjEzLFxuICAnYmxha2UyYi0xNjAnOiAweGIyMTQsXG4gICdibGFrZTJiLTE2OCc6IDB4YjIxNSxcbiAgJ2JsYWtlMmItMTc2JzogMHhiMjE2LFxuICAnYmxha2UyYi0xODQnOiAweGIyMTcsXG4gICdibGFrZTJiLTE5Mic6IDB4YjIxOCxcbiAgJ2JsYWtlMmItMjAwJzogMHhiMjE5LFxuICAnYmxha2UyYi0yMDgnOiAweGIyMWEsXG4gICdibGFrZTJiLTIxNic6IDB4YjIxYixcbiAgJ2JsYWtlMmItMjI0JzogMHhiMjFjLFxuICAnYmxha2UyYi0yMzInOiAweGIyMWQsXG4gICdibGFrZTJiLTI0MCc6IDB4YjIxZSxcbiAgJ2JsYWtlMmItMjQ4JzogMHhiMjFmLFxuICAnYmxha2UyYi0yNTYnOiAweGIyMjAsXG4gICdibGFrZTJiLTI2NCc6IDB4YjIyMSxcbiAgJ2JsYWtlMmItMjcyJzogMHhiMjIyLFxuICAnYmxha2UyYi0yODAnOiAweGIyMjMsXG4gICdibGFrZTJiLTI4OCc6IDB4YjIyNCxcbiAgJ2JsYWtlMmItMjk2JzogMHhiMjI1LFxuICAnYmxha2UyYi0zMDQnOiAweGIyMjYsXG4gICdibGFrZTJiLTMxMic6IDB4YjIyNyxcbiAgJ2JsYWtlMmItMzIwJzogMHhiMjI4LFxuICAnYmxha2UyYi0zMjgnOiAweGIyMjksXG4gICdibGFrZTJiLTMzNic6IDB4YjIyYSxcbiAgJ2JsYWtlMmItMzQ0JzogMHhiMjJiLFxuICAnYmxha2UyYi0zNTInOiAweGIyMmMsXG4gICdibGFrZTJiLTM2MCc6IDB4YjIyZCxcbiAgJ2JsYWtlMmItMzY4JzogMHhiMjJlLFxuICAnYmxha2UyYi0zNzYnOiAweGIyMmYsXG4gICdibGFrZTJiLTM4NCc6IDB4YjIzMCxcbiAgJ2JsYWtlMmItMzkyJzogMHhiMjMxLFxuICAnYmxha2UyYi00MDAnOiAweGIyMzIsXG4gICdibGFrZTJiLTQwOCc6IDB4YjIzMyxcbiAgJ2JsYWtlMmItNDE2JzogMHhiMjM0LFxuICAnYmxha2UyYi00MjQnOiAweGIyMzUsXG4gICdibGFrZTJiLTQzMic6IDB4YjIzNixcbiAgJ2JsYWtlMmItNDQwJzogMHhiMjM3LFxuICAnYmxha2UyYi00NDgnOiAweGIyMzgsXG4gICdibGFrZTJiLTQ1Nic6IDB4YjIzOSxcbiAgJ2JsYWtlMmItNDY0JzogMHhiMjNhLFxuICAnYmxha2UyYi00NzInOiAweGIyM2IsXG4gICdibGFrZTJiLTQ4MCc6IDB4YjIzYyxcbiAgJ2JsYWtlMmItNDg4JzogMHhiMjNkLFxuICAnYmxha2UyYi00OTYnOiAweGIyM2UsXG4gICdibGFrZTJiLTUwNCc6IDB4YjIzZixcbiAgJ2JsYWtlMmItNTEyJzogMHhiMjQwLFxuICAnYmxha2Uycy04JzogICAweGIyNDEsXG4gICdibGFrZTJzLTE2JzogIDB4YjI0MixcbiAgJ2JsYWtlMnMtMjQnOiAgMHhiMjQzLFxuICAnYmxha2Uycy0zMic6ICAweGIyNDQsXG4gICdibGFrZTJzLTQwJzogIDB4YjI0NSxcbiAgJ2JsYWtlMnMtNDgnOiAgMHhiMjQ2LFxuICAnYmxha2Uycy01Nic6ICAweGIyNDcsXG4gICdibGFrZTJzLTY0JzogIDB4YjI0OCxcbiAgJ2JsYWtlMnMtNzInOiAgMHhiMjQ5LFxuICAnYmxha2Uycy04MCc6ICAweGIyNGEsXG4gICdibGFrZTJzLTg4JzogIDB4YjI0YixcbiAgJ2JsYWtlMnMtOTYnOiAgMHhiMjRjLFxuICAnYmxha2Uycy0xMDQnOiAweGIyNGQsXG4gICdibGFrZTJzLTExMic6IDB4YjI0ZSxcbiAgJ2JsYWtlMnMtMTIwJzogMHhiMjRmLFxuICAnYmxha2Uycy0xMjgnOiAweGIyNTAsXG4gICdibGFrZTJzLTEzNic6IDB4YjI1MSxcbiAgJ2JsYWtlMnMtMTQ0JzogMHhiMjUyLFxuICAnYmxha2Uycy0xNTInOiAweGIyNTMsXG4gICdibGFrZTJzLTE2MCc6IDB4YjI1NCxcbiAgJ2JsYWtlMnMtMTY4JzogMHhiMjU1LFxuICAnYmxha2Uycy0xNzYnOiAweGIyNTYsXG4gICdibGFrZTJzLTE4NCc6IDB4YjI1NyxcbiAgJ2JsYWtlMnMtMTkyJzogMHhiMjU4LFxuICAnYmxha2Uycy0yMDAnOiAweGIyNTksXG4gICdibGFrZTJzLTIwOCc6IDB4YjI1YSxcbiAgJ2JsYWtlMnMtMjE2JzogMHhiMjViLFxuICAnYmxha2Uycy0yMjQnOiAweGIyNWMsXG4gICdibGFrZTJzLTIzMic6IDB4YjI1ZCxcbiAgJ2JsYWtlMnMtMjQwJzogMHhiMjVlLFxuICAnYmxha2Uycy0yNDgnOiAweGIyNWYsXG4gICdibGFrZTJzLTI1Nic6IDB4YjI2MCxcbiAgJ1NrZWluMjU2LTgnOiAweGIzMDEsXG4gICdTa2VpbjI1Ni0xNic6IDB4YjMwMixcbiAgJ1NrZWluMjU2LTI0JzogMHhiMzAzLFxuICAnU2tlaW4yNTYtMzInOiAweGIzMDQsXG4gICdTa2VpbjI1Ni00MCc6IDB4YjMwNSxcbiAgJ1NrZWluMjU2LTQ4JzogMHhiMzA2LFxuICAnU2tlaW4yNTYtNTYnOiAweGIzMDcsXG4gICdTa2VpbjI1Ni02NCc6IDB4YjMwOCxcbiAgJ1NrZWluMjU2LTcyJzogMHhiMzA5LFxuICAnU2tlaW4yNTYtODAnOiAweGIzMGEsXG4gICdTa2VpbjI1Ni04OCc6IDB4YjMwYixcbiAgJ1NrZWluMjU2LTk2JzogMHhiMzBjLFxuICAnU2tlaW4yNTYtMTA0JzogMHhiMzBkLFxuICAnU2tlaW4yNTYtMTEyJzogMHhiMzBlLFxuICAnU2tlaW4yNTYtMTIwJzogMHhiMzBmLFxuICAnU2tlaW4yNTYtMTI4JzogMHhiMzEwLFxuICAnU2tlaW4yNTYtMTM2JzogMHhiMzExLFxuICAnU2tlaW4yNTYtMTQ0JzogMHhiMzEyLFxuICAnU2tlaW4yNTYtMTUyJzogMHhiMzEzLFxuICAnU2tlaW4yNTYtMTYwJzogMHhiMzE0LFxuICAnU2tlaW4yNTYtMTY4JzogMHhiMzE1LFxuICAnU2tlaW4yNTYtMTc2JzogMHhiMzE2LFxuICAnU2tlaW4yNTYtMTg0JzogMHhiMzE3LFxuICAnU2tlaW4yNTYtMTkyJzogMHhiMzE4LFxuICAnU2tlaW4yNTYtMjAwJzogMHhiMzE5LFxuICAnU2tlaW4yNTYtMjA4JzogMHhiMzFhLFxuICAnU2tlaW4yNTYtMjE2JzogMHhiMzFiLFxuICAnU2tlaW4yNTYtMjI0JzogMHhiMzFjLFxuICAnU2tlaW4yNTYtMjMyJzogMHhiMzFkLFxuICAnU2tlaW4yNTYtMjQwJzogMHhiMzFlLFxuICAnU2tlaW4yNTYtMjQ4JzogMHhiMzFmLFxuICAnU2tlaW4yNTYtMjU2JzogMHhiMzIwLFxuICAnU2tlaW41MTItOCc6IDB4YjMyMSxcbiAgJ1NrZWluNTEyLTE2JzogMHhiMzIyLFxuICAnU2tlaW41MTItMjQnOiAweGIzMjMsXG4gICdTa2VpbjUxMi0zMic6IDB4YjMyNCxcbiAgJ1NrZWluNTEyLTQwJzogMHhiMzI1LFxuICAnU2tlaW41MTItNDgnOiAweGIzMjYsXG4gICdTa2VpbjUxMi01Nic6IDB4YjMyNyxcbiAgJ1NrZWluNTEyLTY0JzogMHhiMzI4LFxuICAnU2tlaW41MTItNzInOiAweGIzMjksXG4gICdTa2VpbjUxMi04MCc6IDB4YjMyYSxcbiAgJ1NrZWluNTEyLTg4JzogMHhiMzJiLFxuICAnU2tlaW41MTItOTYnOiAweGIzMmMsXG4gICdTa2VpbjUxMi0xMDQnOiAweGIzMmQsXG4gICdTa2VpbjUxMi0xMTInOiAweGIzMmUsXG4gICdTa2VpbjUxMi0xMjAnOiAweGIzMmYsXG4gICdTa2VpbjUxMi0xMjgnOiAweGIzMzAsXG4gICdTa2VpbjUxMi0xMzYnOiAweGIzMzEsXG4gICdTa2VpbjUxMi0xNDQnOiAweGIzMzIsXG4gICdTa2VpbjUxMi0xNTInOiAweGIzMzMsXG4gICdTa2VpbjUxMi0xNjAnOiAweGIzMzQsXG4gICdTa2VpbjUxMi0xNjgnOiAweGIzMzUsXG4gICdTa2VpbjUxMi0xNzYnOiAweGIzMzYsXG4gICdTa2VpbjUxMi0xODQnOiAweGIzMzcsXG4gICdTa2VpbjUxMi0xOTInOiAweGIzMzgsXG4gICdTa2VpbjUxMi0yMDAnOiAweGIzMzksXG4gICdTa2VpbjUxMi0yMDgnOiAweGIzM2EsXG4gICdTa2VpbjUxMi0yMTYnOiAweGIzM2IsXG4gICdTa2VpbjUxMi0yMjQnOiAweGIzM2MsXG4gICdTa2VpbjUxMi0yMzInOiAweGIzM2QsXG4gICdTa2VpbjUxMi0yNDAnOiAweGIzM2UsXG4gICdTa2VpbjUxMi0yNDgnOiAweGIzM2YsXG4gICdTa2VpbjUxMi0yNTYnOiAweGIzNDAsXG4gICdTa2VpbjUxMi0yNjQnOiAweGIzNDEsXG4gICdTa2VpbjUxMi0yNzInOiAweGIzNDIsXG4gICdTa2VpbjUxMi0yODAnOiAweGIzNDMsXG4gICdTa2VpbjUxMi0yODgnOiAweGIzNDQsXG4gICdTa2VpbjUxMi0yOTYnOiAweGIzNDUsXG4gICdTa2VpbjUxMi0zMDQnOiAweGIzNDYsXG4gICdTa2VpbjUxMi0zMTInOiAweGIzNDcsXG4gICdTa2VpbjUxMi0zMjAnOiAweGIzNDgsXG4gICdTa2VpbjUxMi0zMjgnOiAweGIzNDksXG4gICdTa2VpbjUxMi0zMzYnOiAweGIzNGEsXG4gICdTa2VpbjUxMi0zNDQnOiAweGIzNGIsXG4gICdTa2VpbjUxMi0zNTInOiAweGIzNGMsXG4gICdTa2VpbjUxMi0zNjAnOiAweGIzNGQsXG4gICdTa2VpbjUxMi0zNjgnOiAweGIzNGUsXG4gICdTa2VpbjUxMi0zNzYnOiAweGIzNGYsXG4gICdTa2VpbjUxMi0zODQnOiAweGIzNTAsXG4gICdTa2VpbjUxMi0zOTInOiAweGIzNTEsXG4gICdTa2VpbjUxMi00MDAnOiAweGIzNTIsXG4gICdTa2VpbjUxMi00MDgnOiAweGIzNTMsXG4gICdTa2VpbjUxMi00MTYnOiAweGIzNTQsXG4gICdTa2VpbjUxMi00MjQnOiAweGIzNTUsXG4gICdTa2VpbjUxMi00MzInOiAweGIzNTYsXG4gICdTa2VpbjUxMi00NDAnOiAweGIzNTcsXG4gICdTa2VpbjUxMi00NDgnOiAweGIzNTgsXG4gICdTa2VpbjUxMi00NTYnOiAweGIzNTksXG4gICdTa2VpbjUxMi00NjQnOiAweGIzNWEsXG4gICdTa2VpbjUxMi00NzInOiAweGIzNWIsXG4gICdTa2VpbjUxMi00ODAnOiAweGIzNWMsXG4gICdTa2VpbjUxMi00ODgnOiAweGIzNWQsXG4gICdTa2VpbjUxMi00OTYnOiAweGIzNWUsXG4gICdTa2VpbjUxMi01MDQnOiAweGIzNWYsXG4gICdTa2VpbjUxMi01MTInOiAweGIzNjAsXG4gICdTa2VpbjEwMjQtOCc6IDB4YjM2MSxcbiAgJ1NrZWluMTAyNC0xNic6IDB4YjM2MixcbiAgJ1NrZWluMTAyNC0yNCc6IDB4YjM2MyxcbiAgJ1NrZWluMTAyNC0zMic6IDB4YjM2NCxcbiAgJ1NrZWluMTAyNC00MCc6IDB4YjM2NSxcbiAgJ1NrZWluMTAyNC00OCc6IDB4YjM2NixcbiAgJ1NrZWluMTAyNC01Nic6IDB4YjM2NyxcbiAgJ1NrZWluMTAyNC02NCc6IDB4YjM2OCxcbiAgJ1NrZWluMTAyNC03Mic6IDB4YjM2OSxcbiAgJ1NrZWluMTAyNC04MCc6IDB4YjM2YSxcbiAgJ1NrZWluMTAyNC04OCc6IDB4YjM2YixcbiAgJ1NrZWluMTAyNC05Nic6IDB4YjM2YyxcbiAgJ1NrZWluMTAyNC0xMDQnOiAweGIzNmQsXG4gICdTa2VpbjEwMjQtMTEyJzogMHhiMzZlLFxuICAnU2tlaW4xMDI0LTEyMCc6IDB4YjM2ZixcbiAgJ1NrZWluMTAyNC0xMjgnOiAweGIzNzAsXG4gICdTa2VpbjEwMjQtMTM2JzogMHhiMzcxLFxuICAnU2tlaW4xMDI0LTE0NCc6IDB4YjM3MixcbiAgJ1NrZWluMTAyNC0xNTInOiAweGIzNzMsXG4gICdTa2VpbjEwMjQtMTYwJzogMHhiMzc0LFxuICAnU2tlaW4xMDI0LTE2OCc6IDB4YjM3NSxcbiAgJ1NrZWluMTAyNC0xNzYnOiAweGIzNzYsXG4gICdTa2VpbjEwMjQtMTg0JzogMHhiMzc3LFxuICAnU2tlaW4xMDI0LTE5Mic6IDB4YjM3OCxcbiAgJ1NrZWluMTAyNC0yMDAnOiAweGIzNzksXG4gICdTa2VpbjEwMjQtMjA4JzogMHhiMzdhLFxuICAnU2tlaW4xMDI0LTIxNic6IDB4YjM3YixcbiAgJ1NrZWluMTAyNC0yMjQnOiAweGIzN2MsXG4gICdTa2VpbjEwMjQtMjMyJzogMHhiMzdkLFxuICAnU2tlaW4xMDI0LTI0MCc6IDB4YjM3ZSxcbiAgJ1NrZWluMTAyNC0yNDgnOiAweGIzN2YsXG4gICdTa2VpbjEwMjQtMjU2JzogMHhiMzgwLFxuICAnU2tlaW4xMDI0LTI2NCc6IDB4YjM4MSxcbiAgJ1NrZWluMTAyNC0yNzInOiAweGIzODIsXG4gICdTa2VpbjEwMjQtMjgwJzogMHhiMzgzLFxuICAnU2tlaW4xMDI0LTI4OCc6IDB4YjM4NCxcbiAgJ1NrZWluMTAyNC0yOTYnOiAweGIzODUsXG4gICdTa2VpbjEwMjQtMzA0JzogMHhiMzg2LFxuICAnU2tlaW4xMDI0LTMxMic6IDB4YjM4NyxcbiAgJ1NrZWluMTAyNC0zMjAnOiAweGIzODgsXG4gICdTa2VpbjEwMjQtMzI4JzogMHhiMzg5LFxuICAnU2tlaW4xMDI0LTMzNic6IDB4YjM4YSxcbiAgJ1NrZWluMTAyNC0zNDQnOiAweGIzOGIsXG4gICdTa2VpbjEwMjQtMzUyJzogMHhiMzhjLFxuICAnU2tlaW4xMDI0LTM2MCc6IDB4YjM4ZCxcbiAgJ1NrZWluMTAyNC0zNjgnOiAweGIzOGUsXG4gICdTa2VpbjEwMjQtMzc2JzogMHhiMzhmLFxuICAnU2tlaW4xMDI0LTM4NCc6IDB4YjM5MCxcbiAgJ1NrZWluMTAyNC0zOTInOiAweGIzOTEsXG4gICdTa2VpbjEwMjQtNDAwJzogMHhiMzkyLFxuICAnU2tlaW4xMDI0LTQwOCc6IDB4YjM5MyxcbiAgJ1NrZWluMTAyNC00MTYnOiAweGIzOTQsXG4gICdTa2VpbjEwMjQtNDI0JzogMHhiMzk1LFxuICAnU2tlaW4xMDI0LTQzMic6IDB4YjM5NixcbiAgJ1NrZWluMTAyNC00NDAnOiAweGIzOTcsXG4gICdTa2VpbjEwMjQtNDQ4JzogMHhiMzk4LFxuICAnU2tlaW4xMDI0LTQ1Nic6IDB4YjM5OSxcbiAgJ1NrZWluMTAyNC00NjQnOiAweGIzOWEsXG4gICdTa2VpbjEwMjQtNDcyJzogMHhiMzliLFxuICAnU2tlaW4xMDI0LTQ4MCc6IDB4YjM5YyxcbiAgJ1NrZWluMTAyNC00ODgnOiAweGIzOWQsXG4gICdTa2VpbjEwMjQtNDk2JzogMHhiMzllLFxuICAnU2tlaW4xMDI0LTUwNCc6IDB4YjM5ZixcbiAgJ1NrZWluMTAyNC01MTInOiAweGIzYTAsXG4gICdTa2VpbjEwMjQtNTIwJzogMHhiM2ExLFxuICAnU2tlaW4xMDI0LTUyOCc6IDB4YjNhMixcbiAgJ1NrZWluMTAyNC01MzYnOiAweGIzYTMsXG4gICdTa2VpbjEwMjQtNTQ0JzogMHhiM2E0LFxuICAnU2tlaW4xMDI0LTU1Mic6IDB4YjNhNSxcbiAgJ1NrZWluMTAyNC01NjAnOiAweGIzYTYsXG4gICdTa2VpbjEwMjQtNTY4JzogMHhiM2E3LFxuICAnU2tlaW4xMDI0LTU3Nic6IDB4YjNhOCxcbiAgJ1NrZWluMTAyNC01ODQnOiAweGIzYTksXG4gICdTa2VpbjEwMjQtNTkyJzogMHhiM2FhLFxuICAnU2tlaW4xMDI0LTYwMCc6IDB4YjNhYixcbiAgJ1NrZWluMTAyNC02MDgnOiAweGIzYWMsXG4gICdTa2VpbjEwMjQtNjE2JzogMHhiM2FkLFxuICAnU2tlaW4xMDI0LTYyNCc6IDB4YjNhZSxcbiAgJ1NrZWluMTAyNC02MzInOiAweGIzYWYsXG4gICdTa2VpbjEwMjQtNjQwJzogMHhiM2IwLFxuICAnU2tlaW4xMDI0LTY0OCc6IDB4YjNiMSxcbiAgJ1NrZWluMTAyNC02NTYnOiAweGIzYjIsXG4gICdTa2VpbjEwMjQtNjY0JzogMHhiM2IzLFxuICAnU2tlaW4xMDI0LTY3Mic6IDB4YjNiNCxcbiAgJ1NrZWluMTAyNC02ODAnOiAweGIzYjUsXG4gICdTa2VpbjEwMjQtNjg4JzogMHhiM2I2LFxuICAnU2tlaW4xMDI0LTY5Nic6IDB4YjNiNyxcbiAgJ1NrZWluMTAyNC03MDQnOiAweGIzYjgsXG4gICdTa2VpbjEwMjQtNzEyJzogMHhiM2I5LFxuICAnU2tlaW4xMDI0LTcyMCc6IDB4YjNiYSxcbiAgJ1NrZWluMTAyNC03MjgnOiAweGIzYmIsXG4gICdTa2VpbjEwMjQtNzM2JzogMHhiM2JjLFxuICAnU2tlaW4xMDI0LTc0NCc6IDB4YjNiZCxcbiAgJ1NrZWluMTAyNC03NTInOiAweGIzYmUsXG4gICdTa2VpbjEwMjQtNzYwJzogMHhiM2JmLFxuICAnU2tlaW4xMDI0LTc2OCc6IDB4YjNjMCxcbiAgJ1NrZWluMTAyNC03NzYnOiAweGIzYzEsXG4gICdTa2VpbjEwMjQtNzg0JzogMHhiM2MyLFxuICAnU2tlaW4xMDI0LTc5Mic6IDB4YjNjMyxcbiAgJ1NrZWluMTAyNC04MDAnOiAweGIzYzQsXG4gICdTa2VpbjEwMjQtODA4JzogMHhiM2M1LFxuICAnU2tlaW4xMDI0LTgxNic6IDB4YjNjNixcbiAgJ1NrZWluMTAyNC04MjQnOiAweGIzYzcsXG4gICdTa2VpbjEwMjQtODMyJzogMHhiM2M4LFxuICAnU2tlaW4xMDI0LTg0MCc6IDB4YjNjOSxcbiAgJ1NrZWluMTAyNC04NDgnOiAweGIzY2EsXG4gICdTa2VpbjEwMjQtODU2JzogMHhiM2NiLFxuICAnU2tlaW4xMDI0LTg2NCc6IDB4YjNjYyxcbiAgJ1NrZWluMTAyNC04NzInOiAweGIzY2QsXG4gICdTa2VpbjEwMjQtODgwJzogMHhiM2NlLFxuICAnU2tlaW4xMDI0LTg4OCc6IDB4YjNjZixcbiAgJ1NrZWluMTAyNC04OTYnOiAweGIzZDAsXG4gICdTa2VpbjEwMjQtOTA0JzogMHhiM2QxLFxuICAnU2tlaW4xMDI0LTkxMic6IDB4YjNkMixcbiAgJ1NrZWluMTAyNC05MjAnOiAweGIzZDMsXG4gICdTa2VpbjEwMjQtOTI4JzogMHhiM2Q0LFxuICAnU2tlaW4xMDI0LTkzNic6IDB4YjNkNSxcbiAgJ1NrZWluMTAyNC05NDQnOiAweGIzZDYsXG4gICdTa2VpbjEwMjQtOTUyJzogMHhiM2Q3LFxuICAnU2tlaW4xMDI0LTk2MCc6IDB4YjNkOCxcbiAgJ1NrZWluMTAyNC05NjgnOiAweGIzZDksXG4gICdTa2VpbjEwMjQtOTc2JzogMHhiM2RhLFxuICAnU2tlaW4xMDI0LTk4NCc6IDB4YjNkYixcbiAgJ1NrZWluMTAyNC05OTInOiAweGIzZGMsXG4gICdTa2VpbjEwMjQtMTAwMCc6IDB4YjNkZCxcbiAgJ1NrZWluMTAyNC0xMDA4JzogMHhiM2RlLFxuICAnU2tlaW4xMDI0LTEwMTYnOiAweGIzZGYsXG4gICdTa2VpbjEwMjQtMTAyNCc6IDB4YjNlMFxufSlcblxuZXhwb3J0cy5jb2RlcyA9IE9iamVjdC5mcmVlemUoe1xuICAweDA6ICdpZGVudGl0eScsXG5cbiAgLy8gc2hhIGZhbWlseVxuICAweDExOiAnc2hhMScsXG4gIDB4MTI6ICdzaGEyLTI1NicsXG4gIDB4MTM6ICdzaGEyLTUxMicsXG4gIDB4NTY6ICdkYmwtc2hhMi0yNTYnLFxuICAweDE3OiAnc2hhMy0yMjQnLFxuICAweDE2OiAnc2hhMy0yNTYnLFxuICAweDE1OiAnc2hhMy0zODQnLFxuICAweDE0OiAnc2hhMy01MTInLFxuICAweDE4OiAnc2hha2UtMTI4JyxcbiAgMHgxOTogJ3NoYWtlLTI1NicsXG4gIDB4MUE6ICdrZWNjYWstMjI0JyxcbiAgMHgxQjogJ2tlY2Nhay0yNTYnLFxuICAweDFDOiAna2VjY2FrLTM4NCcsXG4gIDB4MUQ6ICdrZWNjYWstNTEyJyxcblxuICAweDIyOiAnbXVybXVyMy0xMjgnLFxuICAweDIzOiAnbXVybXVyMy0zMicsXG5cbiAgLy8gYmxha2UyXG4gIDB4YjIwMTogJ2JsYWtlMmItOCcsXG4gIDB4YjIwMjogJ2JsYWtlMmItMTYnLFxuICAweGIyMDM6ICdibGFrZTJiLTI0JyxcbiAgMHhiMjA0OiAnYmxha2UyYi0zMicsXG4gIDB4YjIwNTogJ2JsYWtlMmItNDAnLFxuICAweGIyMDY6ICdibGFrZTJiLTQ4JyxcbiAgMHhiMjA3OiAnYmxha2UyYi01NicsXG4gIDB4YjIwODogJ2JsYWtlMmItNjQnLFxuICAweGIyMDk6ICdibGFrZTJiLTcyJyxcbiAgMHhiMjBhOiAnYmxha2UyYi04MCcsXG4gIDB4YjIwYjogJ2JsYWtlMmItODgnLFxuICAweGIyMGM6ICdibGFrZTJiLTk2JyxcbiAgMHhiMjBkOiAnYmxha2UyYi0xMDQnLFxuICAweGIyMGU6ICdibGFrZTJiLTExMicsXG4gIDB4YjIwZjogJ2JsYWtlMmItMTIwJyxcbiAgMHhiMjEwOiAnYmxha2UyYi0xMjgnLFxuICAweGIyMTE6ICdibGFrZTJiLTEzNicsXG4gIDB4YjIxMjogJ2JsYWtlMmItMTQ0JyxcbiAgMHhiMjEzOiAnYmxha2UyYi0xNTInLFxuICAweGIyMTQ6ICdibGFrZTJiLTE2MCcsXG4gIDB4YjIxNTogJ2JsYWtlMmItMTY4JyxcbiAgMHhiMjE2OiAnYmxha2UyYi0xNzYnLFxuICAweGIyMTc6ICdibGFrZTJiLTE4NCcsXG4gIDB4YjIxODogJ2JsYWtlMmItMTkyJyxcbiAgMHhiMjE5OiAnYmxha2UyYi0yMDAnLFxuICAweGIyMWE6ICdibGFrZTJiLTIwOCcsXG4gIDB4YjIxYjogJ2JsYWtlMmItMjE2JyxcbiAgMHhiMjFjOiAnYmxha2UyYi0yMjQnLFxuICAweGIyMWQ6ICdibGFrZTJiLTIzMicsXG4gIDB4YjIxZTogJ2JsYWtlMmItMjQwJyxcbiAgMHhiMjFmOiAnYmxha2UyYi0yNDgnLFxuICAweGIyMjA6ICdibGFrZTJiLTI1NicsXG4gIDB4YjIyMTogJ2JsYWtlMmItMjY0JyxcbiAgMHhiMjIyOiAnYmxha2UyYi0yNzInLFxuICAweGIyMjM6ICdibGFrZTJiLTI4MCcsXG4gIDB4YjIyNDogJ2JsYWtlMmItMjg4JyxcbiAgMHhiMjI1OiAnYmxha2UyYi0yOTYnLFxuICAweGIyMjY6ICdibGFrZTJiLTMwNCcsXG4gIDB4YjIyNzogJ2JsYWtlMmItMzEyJyxcbiAgMHhiMjI4OiAnYmxha2UyYi0zMjAnLFxuICAweGIyMjk6ICdibGFrZTJiLTMyOCcsXG4gIDB4YjIyYTogJ2JsYWtlMmItMzM2JyxcbiAgMHhiMjJiOiAnYmxha2UyYi0zNDQnLFxuICAweGIyMmM6ICdibGFrZTJiLTM1MicsXG4gIDB4YjIyZDogJ2JsYWtlMmItMzYwJyxcbiAgMHhiMjJlOiAnYmxha2UyYi0zNjgnLFxuICAweGIyMmY6ICdibGFrZTJiLTM3NicsXG4gIDB4YjIzMDogJ2JsYWtlMmItMzg0JyxcbiAgMHhiMjMxOiAnYmxha2UyYi0zOTInLFxuICAweGIyMzI6ICdibGFrZTJiLTQwMCcsXG4gIDB4YjIzMzogJ2JsYWtlMmItNDA4JyxcbiAgMHhiMjM0OiAnYmxha2UyYi00MTYnLFxuICAweGIyMzU6ICdibGFrZTJiLTQyNCcsXG4gIDB4YjIzNjogJ2JsYWtlMmItNDMyJyxcbiAgMHhiMjM3OiAnYmxha2UyYi00NDAnLFxuICAweGIyMzg6ICdibGFrZTJiLTQ0OCcsXG4gIDB4YjIzOTogJ2JsYWtlMmItNDU2JyxcbiAgMHhiMjNhOiAnYmxha2UyYi00NjQnLFxuICAweGIyM2I6ICdibGFrZTJiLTQ3MicsXG4gIDB4YjIzYzogJ2JsYWtlMmItNDgwJyxcbiAgMHhiMjNkOiAnYmxha2UyYi00ODgnLFxuICAweGIyM2U6ICdibGFrZTJiLTQ5NicsXG4gIDB4YjIzZjogJ2JsYWtlMmItNTA0JyxcbiAgMHhiMjQwOiAnYmxha2UyYi01MTInLFxuICAweGIyNDE6ICdibGFrZTJzLTgnLFxuICAweGIyNDI6ICdibGFrZTJzLTE2JyxcbiAgMHhiMjQzOiAnYmxha2Uycy0yNCcsXG4gIDB4YjI0NDogJ2JsYWtlMnMtMzInLFxuICAweGIyNDU6ICdibGFrZTJzLTQwJyxcbiAgMHhiMjQ2OiAnYmxha2Uycy00OCcsXG4gIDB4YjI0NzogJ2JsYWtlMnMtNTYnLFxuICAweGIyNDg6ICdibGFrZTJzLTY0JyxcbiAgMHhiMjQ5OiAnYmxha2Uycy03MicsXG4gIDB4YjI0YTogJ2JsYWtlMnMtODAnLFxuICAweGIyNGI6ICdibGFrZTJzLTg4JyxcbiAgMHhiMjRjOiAnYmxha2Uycy05NicsXG4gIDB4YjI0ZDogJ2JsYWtlMnMtMTA0JyxcbiAgMHhiMjRlOiAnYmxha2Uycy0xMTInLFxuICAweGIyNGY6ICdibGFrZTJzLTEyMCcsXG4gIDB4YjI1MDogJ2JsYWtlMnMtMTI4JyxcbiAgMHhiMjUxOiAnYmxha2Uycy0xMzYnLFxuICAweGIyNTI6ICdibGFrZTJzLTE0NCcsXG4gIDB4YjI1MzogJ2JsYWtlMnMtMTUyJyxcbiAgMHhiMjU0OiAnYmxha2Uycy0xNjAnLFxuICAweGIyNTU6ICdibGFrZTJzLTE2OCcsXG4gIDB4YjI1NjogJ2JsYWtlMnMtMTc2JyxcbiAgMHhiMjU3OiAnYmxha2Uycy0xODQnLFxuICAweGIyNTg6ICdibGFrZTJzLTE5MicsXG4gIDB4YjI1OTogJ2JsYWtlMnMtMjAwJyxcbiAgMHhiMjVhOiAnYmxha2Uycy0yMDgnLFxuICAweGIyNWI6ICdibGFrZTJzLTIxNicsXG4gIDB4YjI1YzogJ2JsYWtlMnMtMjI0JyxcbiAgMHhiMjVkOiAnYmxha2Uycy0yMzInLFxuICAweGIyNWU6ICdibGFrZTJzLTI0MCcsXG4gIDB4YjI1ZjogJ2JsYWtlMnMtMjQ4JyxcbiAgMHhiMjYwOiAnYmxha2Uycy0yNTYnLFxuXG4gIC8vIHNrZWluXG4gIDB4YjMwMTogJ1NrZWluMjU2LTgnLFxuICAweGIzMDI6ICdTa2VpbjI1Ni0xNicsXG4gIDB4YjMwMzogJ1NrZWluMjU2LTI0JyxcbiAgMHhiMzA0OiAnU2tlaW4yNTYtMzInLFxuICAweGIzMDU6ICdTa2VpbjI1Ni00MCcsXG4gIDB4YjMwNjogJ1NrZWluMjU2LTQ4JyxcbiAgMHhiMzA3OiAnU2tlaW4yNTYtNTYnLFxuICAweGIzMDg6ICdTa2VpbjI1Ni02NCcsXG4gIDB4YjMwOTogJ1NrZWluMjU2LTcyJyxcbiAgMHhiMzBhOiAnU2tlaW4yNTYtODAnLFxuICAweGIzMGI6ICdTa2VpbjI1Ni04OCcsXG4gIDB4YjMwYzogJ1NrZWluMjU2LTk2JyxcbiAgMHhiMzBkOiAnU2tlaW4yNTYtMTA0JyxcbiAgMHhiMzBlOiAnU2tlaW4yNTYtMTEyJyxcbiAgMHhiMzBmOiAnU2tlaW4yNTYtMTIwJyxcbiAgMHhiMzEwOiAnU2tlaW4yNTYtMTI4JyxcbiAgMHhiMzExOiAnU2tlaW4yNTYtMTM2JyxcbiAgMHhiMzEyOiAnU2tlaW4yNTYtMTQ0JyxcbiAgMHhiMzEzOiAnU2tlaW4yNTYtMTUyJyxcbiAgMHhiMzE0OiAnU2tlaW4yNTYtMTYwJyxcbiAgMHhiMzE1OiAnU2tlaW4yNTYtMTY4JyxcbiAgMHhiMzE2OiAnU2tlaW4yNTYtMTc2JyxcbiAgMHhiMzE3OiAnU2tlaW4yNTYtMTg0JyxcbiAgMHhiMzE4OiAnU2tlaW4yNTYtMTkyJyxcbiAgMHhiMzE5OiAnU2tlaW4yNTYtMjAwJyxcbiAgMHhiMzFhOiAnU2tlaW4yNTYtMjA4JyxcbiAgMHhiMzFiOiAnU2tlaW4yNTYtMjE2JyxcbiAgMHhiMzFjOiAnU2tlaW4yNTYtMjI0JyxcbiAgMHhiMzFkOiAnU2tlaW4yNTYtMjMyJyxcbiAgMHhiMzFlOiAnU2tlaW4yNTYtMjQwJyxcbiAgMHhiMzFmOiAnU2tlaW4yNTYtMjQ4JyxcbiAgMHhiMzIwOiAnU2tlaW4yNTYtMjU2JyxcbiAgMHhiMzIxOiAnU2tlaW41MTItOCcsXG4gIDB4YjMyMjogJ1NrZWluNTEyLTE2JyxcbiAgMHhiMzIzOiAnU2tlaW41MTItMjQnLFxuICAweGIzMjQ6ICdTa2VpbjUxMi0zMicsXG4gIDB4YjMyNTogJ1NrZWluNTEyLTQwJyxcbiAgMHhiMzI2OiAnU2tlaW41MTItNDgnLFxuICAweGIzMjc6ICdTa2VpbjUxMi01NicsXG4gIDB4YjMyODogJ1NrZWluNTEyLTY0JyxcbiAgMHhiMzI5OiAnU2tlaW41MTItNzInLFxuICAweGIzMmE6ICdTa2VpbjUxMi04MCcsXG4gIDB4YjMyYjogJ1NrZWluNTEyLTg4JyxcbiAgMHhiMzJjOiAnU2tlaW41MTItOTYnLFxuICAweGIzMmQ6ICdTa2VpbjUxMi0xMDQnLFxuICAweGIzMmU6ICdTa2VpbjUxMi0xMTInLFxuICAweGIzMmY6ICdTa2VpbjUxMi0xMjAnLFxuICAweGIzMzA6ICdTa2VpbjUxMi0xMjgnLFxuICAweGIzMzE6ICdTa2VpbjUxMi0xMzYnLFxuICAweGIzMzI6ICdTa2VpbjUxMi0xNDQnLFxuICAweGIzMzM6ICdTa2VpbjUxMi0xNTInLFxuICAweGIzMzQ6ICdTa2VpbjUxMi0xNjAnLFxuICAweGIzMzU6ICdTa2VpbjUxMi0xNjgnLFxuICAweGIzMzY6ICdTa2VpbjUxMi0xNzYnLFxuICAweGIzMzc6ICdTa2VpbjUxMi0xODQnLFxuICAweGIzMzg6ICdTa2VpbjUxMi0xOTInLFxuICAweGIzMzk6ICdTa2VpbjUxMi0yMDAnLFxuICAweGIzM2E6ICdTa2VpbjUxMi0yMDgnLFxuICAweGIzM2I6ICdTa2VpbjUxMi0yMTYnLFxuICAweGIzM2M6ICdTa2VpbjUxMi0yMjQnLFxuICAweGIzM2Q6ICdTa2VpbjUxMi0yMzInLFxuICAweGIzM2U6ICdTa2VpbjUxMi0yNDAnLFxuICAweGIzM2Y6ICdTa2VpbjUxMi0yNDgnLFxuICAweGIzNDA6ICdTa2VpbjUxMi0yNTYnLFxuICAweGIzNDE6ICdTa2VpbjUxMi0yNjQnLFxuICAweGIzNDI6ICdTa2VpbjUxMi0yNzInLFxuICAweGIzNDM6ICdTa2VpbjUxMi0yODAnLFxuICAweGIzNDQ6ICdTa2VpbjUxMi0yODgnLFxuICAweGIzNDU6ICdTa2VpbjUxMi0yOTYnLFxuICAweGIzNDY6ICdTa2VpbjUxMi0zMDQnLFxuICAweGIzNDc6ICdTa2VpbjUxMi0zMTInLFxuICAweGIzNDg6ICdTa2VpbjUxMi0zMjAnLFxuICAweGIzNDk6ICdTa2VpbjUxMi0zMjgnLFxuICAweGIzNGE6ICdTa2VpbjUxMi0zMzYnLFxuICAweGIzNGI6ICdTa2VpbjUxMi0zNDQnLFxuICAweGIzNGM6ICdTa2VpbjUxMi0zNTInLFxuICAweGIzNGQ6ICdTa2VpbjUxMi0zNjAnLFxuICAweGIzNGU6ICdTa2VpbjUxMi0zNjgnLFxuICAweGIzNGY6ICdTa2VpbjUxMi0zNzYnLFxuICAweGIzNTA6ICdTa2VpbjUxMi0zODQnLFxuICAweGIzNTE6ICdTa2VpbjUxMi0zOTInLFxuICAweGIzNTI6ICdTa2VpbjUxMi00MDAnLFxuICAweGIzNTM6ICdTa2VpbjUxMi00MDgnLFxuICAweGIzNTQ6ICdTa2VpbjUxMi00MTYnLFxuICAweGIzNTU6ICdTa2VpbjUxMi00MjQnLFxuICAweGIzNTY6ICdTa2VpbjUxMi00MzInLFxuICAweGIzNTc6ICdTa2VpbjUxMi00NDAnLFxuICAweGIzNTg6ICdTa2VpbjUxMi00NDgnLFxuICAweGIzNTk6ICdTa2VpbjUxMi00NTYnLFxuICAweGIzNWE6ICdTa2VpbjUxMi00NjQnLFxuICAweGIzNWI6ICdTa2VpbjUxMi00NzInLFxuICAweGIzNWM6ICdTa2VpbjUxMi00ODAnLFxuICAweGIzNWQ6ICdTa2VpbjUxMi00ODgnLFxuICAweGIzNWU6ICdTa2VpbjUxMi00OTYnLFxuICAweGIzNWY6ICdTa2VpbjUxMi01MDQnLFxuICAweGIzNjA6ICdTa2VpbjUxMi01MTInLFxuICAweGIzNjE6ICdTa2VpbjEwMjQtOCcsXG4gIDB4YjM2MjogJ1NrZWluMTAyNC0xNicsXG4gIDB4YjM2MzogJ1NrZWluMTAyNC0yNCcsXG4gIDB4YjM2NDogJ1NrZWluMTAyNC0zMicsXG4gIDB4YjM2NTogJ1NrZWluMTAyNC00MCcsXG4gIDB4YjM2NjogJ1NrZWluMTAyNC00OCcsXG4gIDB4YjM2NzogJ1NrZWluMTAyNC01NicsXG4gIDB4YjM2ODogJ1NrZWluMTAyNC02NCcsXG4gIDB4YjM2OTogJ1NrZWluMTAyNC03MicsXG4gIDB4YjM2YTogJ1NrZWluMTAyNC04MCcsXG4gIDB4YjM2YjogJ1NrZWluMTAyNC04OCcsXG4gIDB4YjM2YzogJ1NrZWluMTAyNC05NicsXG4gIDB4YjM2ZDogJ1NrZWluMTAyNC0xMDQnLFxuICAweGIzNmU6ICdTa2VpbjEwMjQtMTEyJyxcbiAgMHhiMzZmOiAnU2tlaW4xMDI0LTEyMCcsXG4gIDB4YjM3MDogJ1NrZWluMTAyNC0xMjgnLFxuICAweGIzNzE6ICdTa2VpbjEwMjQtMTM2JyxcbiAgMHhiMzcyOiAnU2tlaW4xMDI0LTE0NCcsXG4gIDB4YjM3MzogJ1NrZWluMTAyNC0xNTInLFxuICAweGIzNzQ6ICdTa2VpbjEwMjQtMTYwJyxcbiAgMHhiMzc1OiAnU2tlaW4xMDI0LTE2OCcsXG4gIDB4YjM3NjogJ1NrZWluMTAyNC0xNzYnLFxuICAweGIzNzc6ICdTa2VpbjEwMjQtMTg0JyxcbiAgMHhiMzc4OiAnU2tlaW4xMDI0LTE5MicsXG4gIDB4YjM3OTogJ1NrZWluMTAyNC0yMDAnLFxuICAweGIzN2E6ICdTa2VpbjEwMjQtMjA4JyxcbiAgMHhiMzdiOiAnU2tlaW4xMDI0LTIxNicsXG4gIDB4YjM3YzogJ1NrZWluMTAyNC0yMjQnLFxuICAweGIzN2Q6ICdTa2VpbjEwMjQtMjMyJyxcbiAgMHhiMzdlOiAnU2tlaW4xMDI0LTI0MCcsXG4gIDB4YjM3ZjogJ1NrZWluMTAyNC0yNDgnLFxuICAweGIzODA6ICdTa2VpbjEwMjQtMjU2JyxcbiAgMHhiMzgxOiAnU2tlaW4xMDI0LTI2NCcsXG4gIDB4YjM4MjogJ1NrZWluMTAyNC0yNzInLFxuICAweGIzODM6ICdTa2VpbjEwMjQtMjgwJyxcbiAgMHhiMzg0OiAnU2tlaW4xMDI0LTI4OCcsXG4gIDB4YjM4NTogJ1NrZWluMTAyNC0yOTYnLFxuICAweGIzODY6ICdTa2VpbjEwMjQtMzA0JyxcbiAgMHhiMzg3OiAnU2tlaW4xMDI0LTMxMicsXG4gIDB4YjM4ODogJ1NrZWluMTAyNC0zMjAnLFxuICAweGIzODk6ICdTa2VpbjEwMjQtMzI4JyxcbiAgMHhiMzhhOiAnU2tlaW4xMDI0LTMzNicsXG4gIDB4YjM4YjogJ1NrZWluMTAyNC0zNDQnLFxuICAweGIzOGM6ICdTa2VpbjEwMjQtMzUyJyxcbiAgMHhiMzhkOiAnU2tlaW4xMDI0LTM2MCcsXG4gIDB4YjM4ZTogJ1NrZWluMTAyNC0zNjgnLFxuICAweGIzOGY6ICdTa2VpbjEwMjQtMzc2JyxcbiAgMHhiMzkwOiAnU2tlaW4xMDI0LTM4NCcsXG4gIDB4YjM5MTogJ1NrZWluMTAyNC0zOTInLFxuICAweGIzOTI6ICdTa2VpbjEwMjQtNDAwJyxcbiAgMHhiMzkzOiAnU2tlaW4xMDI0LTQwOCcsXG4gIDB4YjM5NDogJ1NrZWluMTAyNC00MTYnLFxuICAweGIzOTU6ICdTa2VpbjEwMjQtNDI0JyxcbiAgMHhiMzk2OiAnU2tlaW4xMDI0LTQzMicsXG4gIDB4YjM5NzogJ1NrZWluMTAyNC00NDAnLFxuICAweGIzOTg6ICdTa2VpbjEwMjQtNDQ4JyxcbiAgMHhiMzk5OiAnU2tlaW4xMDI0LTQ1NicsXG4gIDB4YjM5YTogJ1NrZWluMTAyNC00NjQnLFxuICAweGIzOWI6ICdTa2VpbjEwMjQtNDcyJyxcbiAgMHhiMzljOiAnU2tlaW4xMDI0LTQ4MCcsXG4gIDB4YjM5ZDogJ1NrZWluMTAyNC00ODgnLFxuICAweGIzOWU6ICdTa2VpbjEwMjQtNDk2JyxcbiAgMHhiMzlmOiAnU2tlaW4xMDI0LTUwNCcsXG4gIDB4YjNhMDogJ1NrZWluMTAyNC01MTInLFxuICAweGIzYTE6ICdTa2VpbjEwMjQtNTIwJyxcbiAgMHhiM2EyOiAnU2tlaW4xMDI0LTUyOCcsXG4gIDB4YjNhMzogJ1NrZWluMTAyNC01MzYnLFxuICAweGIzYTQ6ICdTa2VpbjEwMjQtNTQ0JyxcbiAgMHhiM2E1OiAnU2tlaW4xMDI0LTU1MicsXG4gIDB4YjNhNjogJ1NrZWluMTAyNC01NjAnLFxuICAweGIzYTc6ICdTa2VpbjEwMjQtNTY4JyxcbiAgMHhiM2E4OiAnU2tlaW4xMDI0LTU3NicsXG4gIDB4YjNhOTogJ1NrZWluMTAyNC01ODQnLFxuICAweGIzYWE6ICdTa2VpbjEwMjQtNTkyJyxcbiAgMHhiM2FiOiAnU2tlaW4xMDI0LTYwMCcsXG4gIDB4YjNhYzogJ1NrZWluMTAyNC02MDgnLFxuICAweGIzYWQ6ICdTa2VpbjEwMjQtNjE2JyxcbiAgMHhiM2FlOiAnU2tlaW4xMDI0LTYyNCcsXG4gIDB4YjNhZjogJ1NrZWluMTAyNC02MzInLFxuICAweGIzYjA6ICdTa2VpbjEwMjQtNjQwJyxcbiAgMHhiM2IxOiAnU2tlaW4xMDI0LTY0OCcsXG4gIDB4YjNiMjogJ1NrZWluMTAyNC02NTYnLFxuICAweGIzYjM6ICdTa2VpbjEwMjQtNjY0JyxcbiAgMHhiM2I0OiAnU2tlaW4xMDI0LTY3MicsXG4gIDB4YjNiNTogJ1NrZWluMTAyNC02ODAnLFxuICAweGIzYjY6ICdTa2VpbjEwMjQtNjg4JyxcbiAgMHhiM2I3OiAnU2tlaW4xMDI0LTY5NicsXG4gIDB4YjNiODogJ1NrZWluMTAyNC03MDQnLFxuICAweGIzYjk6ICdTa2VpbjEwMjQtNzEyJyxcbiAgMHhiM2JhOiAnU2tlaW4xMDI0LTcyMCcsXG4gIDB4YjNiYjogJ1NrZWluMTAyNC03MjgnLFxuICAweGIzYmM6ICdTa2VpbjEwMjQtNzM2JyxcbiAgMHhiM2JkOiAnU2tlaW4xMDI0LTc0NCcsXG4gIDB4YjNiZTogJ1NrZWluMTAyNC03NTInLFxuICAweGIzYmY6ICdTa2VpbjEwMjQtNzYwJyxcbiAgMHhiM2MwOiAnU2tlaW4xMDI0LTc2OCcsXG4gIDB4YjNjMTogJ1NrZWluMTAyNC03NzYnLFxuICAweGIzYzI6ICdTa2VpbjEwMjQtNzg0JyxcbiAgMHhiM2MzOiAnU2tlaW4xMDI0LTc5MicsXG4gIDB4YjNjNDogJ1NrZWluMTAyNC04MDAnLFxuICAweGIzYzU6ICdTa2VpbjEwMjQtODA4JyxcbiAgMHhiM2M2OiAnU2tlaW4xMDI0LTgxNicsXG4gIDB4YjNjNzogJ1NrZWluMTAyNC04MjQnLFxuICAweGIzYzg6ICdTa2VpbjEwMjQtODMyJyxcbiAgMHhiM2M5OiAnU2tlaW4xMDI0LTg0MCcsXG4gIDB4YjNjYTogJ1NrZWluMTAyNC04NDgnLFxuICAweGIzY2I6ICdTa2VpbjEwMjQtODU2JyxcbiAgMHhiM2NjOiAnU2tlaW4xMDI0LTg2NCcsXG4gIDB4YjNjZDogJ1NrZWluMTAyNC04NzInLFxuICAweGIzY2U6ICdTa2VpbjEwMjQtODgwJyxcbiAgMHhiM2NmOiAnU2tlaW4xMDI0LTg4OCcsXG4gIDB4YjNkMDogJ1NrZWluMTAyNC04OTYnLFxuICAweGIzZDE6ICdTa2VpbjEwMjQtOTA0JyxcbiAgMHhiM2QyOiAnU2tlaW4xMDI0LTkxMicsXG4gIDB4YjNkMzogJ1NrZWluMTAyNC05MjAnLFxuICAweGIzZDQ6ICdTa2VpbjEwMjQtOTI4JyxcbiAgMHhiM2Q1OiAnU2tlaW4xMDI0LTkzNicsXG4gIDB4YjNkNjogJ1NrZWluMTAyNC05NDQnLFxuICAweGIzZDc6ICdTa2VpbjEwMjQtOTUyJyxcbiAgMHhiM2Q4OiAnU2tlaW4xMDI0LTk2MCcsXG4gIDB4YjNkOTogJ1NrZWluMTAyNC05NjgnLFxuICAweGIzZGE6ICdTa2VpbjEwMjQtOTc2JyxcbiAgMHhiM2RiOiAnU2tlaW4xMDI0LTk4NCcsXG4gIDB4YjNkYzogJ1NrZWluMTAyNC05OTInLFxuICAweGIzZGQ6ICdTa2VpbjEwMjQtMTAwMCcsXG4gIDB4YjNkZTogJ1NrZWluMTAyNC0xMDA4JyxcbiAgMHhiM2RmOiAnU2tlaW4xMDI0LTEwMTYnLFxuICAweGIzZTA6ICdTa2VpbjEwMjQtMTAyNCdcbn0pXG5cbmV4cG9ydHMuZGVmYXVsdExlbmd0aHMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgxMTogMjAsXG4gIDB4MTI6IDMyLFxuICAweDEzOiA2NCxcbiAgMHg1NjogMzIsXG4gIDB4MTc6IDI4LFxuICAweDE2OiAzMixcbiAgMHgxNTogNDgsXG4gIDB4MTQ6IDY0LFxuICAweDE4OiAzMixcbiAgMHgxOTogNjQsXG4gIDB4MUE6IDI4LFxuICAweDFCOiAzMixcbiAgMHgxQzogNDgsXG4gIDB4MUQ6IDY0LFxuICAweDIyOiAzMixcblxuICAweGIyMDE6IDB4MDEsXG4gIDB4YjIwMjogMHgwMixcbiAgMHhiMjAzOiAweDAzLFxuICAweGIyMDQ6IDB4MDQsXG4gIDB4YjIwNTogMHgwNSxcbiAgMHhiMjA2OiAweDA2LFxuICAweGIyMDc6IDB4MDcsXG4gIDB4YjIwODogMHgwOCxcbiAgMHhiMjA5OiAweDA5LFxuICAweGIyMGE6IDB4MGEsXG4gIDB4YjIwYjogMHgwYixcbiAgMHhiMjBjOiAweDBjLFxuICAweGIyMGQ6IDB4MGQsXG4gIDB4YjIwZTogMHgwZSxcbiAgMHhiMjBmOiAweDBmLFxuICAweGIyMTA6IDB4MTAsXG4gIDB4YjIxMTogMHgxMSxcbiAgMHhiMjEyOiAweDEyLFxuICAweGIyMTM6IDB4MTMsXG4gIDB4YjIxNDogMHgxNCxcbiAgMHhiMjE1OiAweDE1LFxuICAweGIyMTY6IDB4MTYsXG4gIDB4YjIxNzogMHgxNyxcbiAgMHhiMjE4OiAweDE4LFxuICAweGIyMTk6IDB4MTksXG4gIDB4YjIxYTogMHgxYSxcbiAgMHhiMjFiOiAweDFiLFxuICAweGIyMWM6IDB4MWMsXG4gIDB4YjIxZDogMHgxZCxcbiAgMHhiMjFlOiAweDFlLFxuICAweGIyMWY6IDB4MWYsXG4gIDB4YjIyMDogMHgyMCxcbiAgMHhiMjIxOiAweDIxLFxuICAweGIyMjI6IDB4MjIsXG4gIDB4YjIyMzogMHgyMyxcbiAgMHhiMjI0OiAweDI0LFxuICAweGIyMjU6IDB4MjUsXG4gIDB4YjIyNjogMHgyNixcbiAgMHhiMjI3OiAweDI3LFxuICAweGIyMjg6IDB4MjgsXG4gIDB4YjIyOTogMHgyOSxcbiAgMHhiMjJhOiAweDJhLFxuICAweGIyMmI6IDB4MmIsXG4gIDB4YjIyYzogMHgyYyxcbiAgMHhiMjJkOiAweDJkLFxuICAweGIyMmU6IDB4MmUsXG4gIDB4YjIyZjogMHgyZixcbiAgMHhiMjMwOiAweDMwLFxuICAweGIyMzE6IDB4MzEsXG4gIDB4YjIzMjogMHgzMixcbiAgMHhiMjMzOiAweDMzLFxuICAweGIyMzQ6IDB4MzQsXG4gIDB4YjIzNTogMHgzNSxcbiAgMHhiMjM2OiAweDM2LFxuICAweGIyMzc6IDB4MzcsXG4gIDB4YjIzODogMHgzOCxcbiAgMHhiMjM5OiAweDM5LFxuICAweGIyM2E6IDB4M2EsXG4gIDB4YjIzYjogMHgzYixcbiAgMHhiMjNjOiAweDNjLFxuICAweGIyM2Q6IDB4M2QsXG4gIDB4YjIzZTogMHgzZSxcbiAgMHhiMjNmOiAweDNmLFxuICAweGIyNDA6IDB4NDAsXG4gIDB4YjI0MTogMHgwMSxcbiAgMHhiMjQyOiAweDAyLFxuICAweGIyNDM6IDB4MDMsXG4gIDB4YjI0NDogMHgwNCxcbiAgMHhiMjQ1OiAweDA1LFxuICAweGIyNDY6IDB4MDYsXG4gIDB4YjI0NzogMHgwNyxcbiAgMHhiMjQ4OiAweDA4LFxuICAweGIyNDk6IDB4MDksXG4gIDB4YjI0YTogMHgwYSxcbiAgMHhiMjRiOiAweDBiLFxuICAweGIyNGM6IDB4MGMsXG4gIDB4YjI0ZDogMHgwZCxcbiAgMHhiMjRlOiAweDBlLFxuICAweGIyNGY6IDB4MGYsXG4gIDB4YjI1MDogMHgxMCxcbiAgMHhiMjUxOiAweDExLFxuICAweGIyNTI6IDB4MTIsXG4gIDB4YjI1MzogMHgxMyxcbiAgMHhiMjU0OiAweDE0LFxuICAweGIyNTU6IDB4MTUsXG4gIDB4YjI1NjogMHgxNixcbiAgMHhiMjU3OiAweDE3LFxuICAweGIyNTg6IDB4MTgsXG4gIDB4YjI1OTogMHgxOSxcbiAgMHhiMjVhOiAweDFhLFxuICAweGIyNWI6IDB4MWIsXG4gIDB4YjI1YzogMHgxYyxcbiAgMHhiMjVkOiAweDFkLFxuICAweGIyNWU6IDB4MWUsXG4gIDB4YjI1ZjogMHgxZixcbiAgMHhiMjYwOiAweDIwLFxuICAweGIzMDE6IDB4MDEsXG4gIDB4YjMwMjogMHgwMixcbiAgMHhiMzAzOiAweDAzLFxuICAweGIzMDQ6IDB4MDQsXG4gIDB4YjMwNTogMHgwNSxcbiAgMHhiMzA2OiAweDA2LFxuICAweGIzMDc6IDB4MDcsXG4gIDB4YjMwODogMHgwOCxcbiAgMHhiMzA5OiAweDA5LFxuICAweGIzMGE6IDB4MGEsXG4gIDB4YjMwYjogMHgwYixcbiAgMHhiMzBjOiAweDBjLFxuICAweGIzMGQ6IDB4MGQsXG4gIDB4YjMwZTogMHgwZSxcbiAgMHhiMzBmOiAweDBmLFxuICAweGIzMTA6IDB4MTAsXG4gIDB4YjMxMTogMHgxMSxcbiAgMHhiMzEyOiAweDEyLFxuICAweGIzMTM6IDB4MTMsXG4gIDB4YjMxNDogMHgxNCxcbiAgMHhiMzE1OiAweDE1LFxuICAweGIzMTY6IDB4MTYsXG4gIDB4YjMxNzogMHgxNyxcbiAgMHhiMzE4OiAweDE4LFxuICAweGIzMTk6IDB4MTksXG4gIDB4YjMxYTogMHgxYSxcbiAgMHhiMzFiOiAweDFiLFxuICAweGIzMWM6IDB4MWMsXG4gIDB4YjMxZDogMHgxZCxcbiAgMHhiMzFlOiAweDFlLFxuICAweGIzMWY6IDB4MWYsXG4gIDB4YjMyMDogMHgyMCxcbiAgMHhiMzIxOiAweDAxLFxuICAweGIzMjI6IDB4MDIsXG4gIDB4YjMyMzogMHgwMyxcbiAgMHhiMzI0OiAweDA0LFxuICAweGIzMjU6IDB4MDUsXG4gIDB4YjMyNjogMHgwNixcbiAgMHhiMzI3OiAweDA3LFxuICAweGIzMjg6IDB4MDgsXG4gIDB4YjMyOTogMHgwOSxcbiAgMHhiMzJhOiAweDBhLFxuICAweGIzMmI6IDB4MGIsXG4gIDB4YjMyYzogMHgwYyxcbiAgMHhiMzJkOiAweDBkLFxuICAweGIzMmU6IDB4MGUsXG4gIDB4YjMyZjogMHgwZixcbiAgMHhiMzMwOiAweDEwLFxuICAweGIzMzE6IDB4MTEsXG4gIDB4YjMzMjogMHgxMixcbiAgMHhiMzMzOiAweDEzLFxuICAweGIzMzQ6IDB4MTQsXG4gIDB4YjMzNTogMHgxNSxcbiAgMHhiMzM2OiAweDE2LFxuICAweGIzMzc6IDB4MTcsXG4gIDB4YjMzODogMHgxOCxcbiAgMHhiMzM5OiAweDE5LFxuICAweGIzM2E6IDB4MWEsXG4gIDB4YjMzYjogMHgxYixcbiAgMHhiMzNjOiAweDFjLFxuICAweGIzM2Q6IDB4MWQsXG4gIDB4YjMzZTogMHgxZSxcbiAgMHhiMzNmOiAweDFmLFxuICAweGIzNDA6IDB4MjAsXG4gIDB4YjM0MTogMHgyMSxcbiAgMHhiMzQyOiAweDIyLFxuICAweGIzNDM6IDB4MjMsXG4gIDB4YjM0NDogMHgyNCxcbiAgMHhiMzQ1OiAweDI1LFxuICAweGIzNDY6IDB4MjYsXG4gIDB4YjM0NzogMHgyNyxcbiAgMHhiMzQ4OiAweDI4LFxuICAweGIzNDk6IDB4MjksXG4gIDB4YjM0YTogMHgyYSxcbiAgMHhiMzRiOiAweDJiLFxuICAweGIzNGM6IDB4MmMsXG4gIDB4YjM0ZDogMHgyZCxcbiAgMHhiMzRlOiAweDJlLFxuICAweGIzNGY6IDB4MmYsXG4gIDB4YjM1MDogMHgzMCxcbiAgMHhiMzUxOiAweDMxLFxuICAweGIzNTI6IDB4MzIsXG4gIDB4YjM1MzogMHgzMyxcbiAgMHhiMzU0OiAweDM0LFxuICAweGIzNTU6IDB4MzUsXG4gIDB4YjM1NjogMHgzNixcbiAgMHhiMzU3OiAweDM3LFxuICAweGIzNTg6IDB4MzgsXG4gIDB4YjM1OTogMHgzOSxcbiAgMHhiMzVhOiAweDNhLFxuICAweGIzNWI6IDB4M2IsXG4gIDB4YjM1YzogMHgzYyxcbiAgMHhiMzVkOiAweDNkLFxuICAweGIzNWU6IDB4M2UsXG4gIDB4YjM1ZjogMHgzZixcbiAgMHhiMzYwOiAweDQwLFxuICAweGIzNjE6IDB4MDEsXG4gIDB4YjM2MjogMHgwMixcbiAgMHhiMzYzOiAweDAzLFxuICAweGIzNjQ6IDB4MDQsXG4gIDB4YjM2NTogMHgwNSxcbiAgMHhiMzY2OiAweDA2LFxuICAweGIzNjc6IDB4MDcsXG4gIDB4YjM2ODogMHgwOCxcbiAgMHhiMzY5OiAweDA5LFxuICAweGIzNmE6IDB4MGEsXG4gIDB4YjM2YjogMHgwYixcbiAgMHhiMzZjOiAweDBjLFxuICAweGIzNmQ6IDB4MGQsXG4gIDB4YjM2ZTogMHgwZSxcbiAgMHhiMzZmOiAweDBmLFxuICAweGIzNzA6IDB4MTAsXG4gIDB4YjM3MTogMHgxMSxcbiAgMHhiMzcyOiAweDEyLFxuICAweGIzNzM6IDB4MTMsXG4gIDB4YjM3NDogMHgxNCxcbiAgMHhiMzc1OiAweDE1LFxuICAweGIzNzY6IDB4MTYsXG4gIDB4YjM3NzogMHgxNyxcbiAgMHhiMzc4OiAweDE4LFxuICAweGIzNzk6IDB4MTksXG4gIDB4YjM3YTogMHgxYSxcbiAgMHhiMzdiOiAweDFiLFxuICAweGIzN2M6IDB4MWMsXG4gIDB4YjM3ZDogMHgxZCxcbiAgMHhiMzdlOiAweDFlLFxuICAweGIzN2Y6IDB4MWYsXG4gIDB4YjM4MDogMHgyMCxcbiAgMHhiMzgxOiAweDIxLFxuICAweGIzODI6IDB4MjIsXG4gIDB4YjM4MzogMHgyMyxcbiAgMHhiMzg0OiAweDI0LFxuICAweGIzODU6IDB4MjUsXG4gIDB4YjM4NjogMHgyNixcbiAgMHhiMzg3OiAweDI3LFxuICAweGIzODg6IDB4MjgsXG4gIDB4YjM4OTogMHgyOSxcbiAgMHhiMzhhOiAweDJhLFxuICAweGIzOGI6IDB4MmIsXG4gIDB4YjM4YzogMHgyYyxcbiAgMHhiMzhkOiAweDJkLFxuICAweGIzOGU6IDB4MmUsXG4gIDB4YjM4ZjogMHgyZixcbiAgMHhiMzkwOiAweDMwLFxuICAweGIzOTE6IDB4MzEsXG4gIDB4YjM5MjogMHgzMixcbiAgMHhiMzkzOiAweDMzLFxuICAweGIzOTQ6IDB4MzQsXG4gIDB4YjM5NTogMHgzNSxcbiAgMHhiMzk2OiAweDM2LFxuICAweGIzOTc6IDB4MzcsXG4gIDB4YjM5ODogMHgzOCxcbiAgMHhiMzk5OiAweDM5LFxuICAweGIzOWE6IDB4M2EsXG4gIDB4YjM5YjogMHgzYixcbiAgMHhiMzljOiAweDNjLFxuICAweGIzOWQ6IDB4M2QsXG4gIDB4YjM5ZTogMHgzZSxcbiAgMHhiMzlmOiAweDNmLFxuICAweGIzYTA6IDB4NDAsXG4gIDB4YjNhMTogMHg0MSxcbiAgMHhiM2EyOiAweDQyLFxuICAweGIzYTM6IDB4NDMsXG4gIDB4YjNhNDogMHg0NCxcbiAgMHhiM2E1OiAweDQ1LFxuICAweGIzYTY6IDB4NDYsXG4gIDB4YjNhNzogMHg0NyxcbiAgMHhiM2E4OiAweDQ4LFxuICAweGIzYTk6IDB4NDksXG4gIDB4YjNhYTogMHg0YSxcbiAgMHhiM2FiOiAweDRiLFxuICAweGIzYWM6IDB4NGMsXG4gIDB4YjNhZDogMHg0ZCxcbiAgMHhiM2FlOiAweDRlLFxuICAweGIzYWY6IDB4NGYsXG4gIDB4YjNiMDogMHg1MCxcbiAgMHhiM2IxOiAweDUxLFxuICAweGIzYjI6IDB4NTIsXG4gIDB4YjNiMzogMHg1MyxcbiAgMHhiM2I0OiAweDU0LFxuICAweGIzYjU6IDB4NTUsXG4gIDB4YjNiNjogMHg1NixcbiAgMHhiM2I3OiAweDU3LFxuICAweGIzYjg6IDB4NTgsXG4gIDB4YjNiOTogMHg1OSxcbiAgMHhiM2JhOiAweDVhLFxuICAweGIzYmI6IDB4NWIsXG4gIDB4YjNiYzogMHg1YyxcbiAgMHhiM2JkOiAweDVkLFxuICAweGIzYmU6IDB4NWUsXG4gIDB4YjNiZjogMHg1ZixcbiAgMHhiM2MwOiAweDYwLFxuICAweGIzYzE6IDB4NjEsXG4gIDB4YjNjMjogMHg2MixcbiAgMHhiM2MzOiAweDYzLFxuICAweGIzYzQ6IDB4NjQsXG4gIDB4YjNjNTogMHg2NSxcbiAgMHhiM2M2OiAweDY2LFxuICAweGIzYzc6IDB4NjcsXG4gIDB4YjNjODogMHg2OCxcbiAgMHhiM2M5OiAweDY5LFxuICAweGIzY2E6IDB4NmEsXG4gIDB4YjNjYjogMHg2YixcbiAgMHhiM2NjOiAweDZjLFxuICAweGIzY2Q6IDB4NmQsXG4gIDB4YjNjZTogMHg2ZSxcbiAgMHhiM2NmOiAweDZmLFxuICAweGIzZDA6IDB4NzAsXG4gIDB4YjNkMTogMHg3MSxcbiAgMHhiM2QyOiAweDcyLFxuICAweGIzZDM6IDB4NzMsXG4gIDB4YjNkNDogMHg3NCxcbiAgMHhiM2Q1OiAweDc1LFxuICAweGIzZDY6IDB4NzYsXG4gIDB4YjNkNzogMHg3NyxcbiAgMHhiM2Q4OiAweDc4LFxuICAweGIzZDk6IDB4NzksXG4gIDB4YjNkYTogMHg3YSxcbiAgMHhiM2RiOiAweDdiLFxuICAweGIzZGM6IDB4N2MsXG4gIDB4YjNkZDogMHg3ZCxcbiAgMHhiM2RlOiAweDdlLFxuICAweGIzZGY6IDB4N2YsXG4gIDB4YjNlMDogMHg4MFxufSlcbiIsIi8qKlxuICogTXVsdGloYXNoIGltcGxlbWVudGF0aW9uIGluIEphdmFTY3JpcHQuXG4gKlxuICogQG1vZHVsZSBtdWx0aWhhc2hcbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcblxuY29uc3QgY3MgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmV4cG9ydHMubmFtZXMgPSBjcy5uYW1lc1xuZXhwb3J0cy5jb2RlcyA9IGNzLmNvZGVzXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gY3MuZGVmYXVsdExlbmd0aHNcblxuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBtdWx0aWhhc2ggdG8gYSBoZXggZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMudG9IZXhTdHJpbmcgPSBmdW5jdGlvbiB0b0hleFN0cmluZyAoaGFzaCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYXNoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBiZSBwYXNzZWQgYSBidWZmZXInKVxuICB9XG5cbiAgcmV0dXJuIGhhc2gudG9TdHJpbmcoJ2hleCcpXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gaGV4IGVuY29kZWQgc3RyaW5nIHRvIGEgbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmZyb21IZXhTdHJpbmcgPSBmdW5jdGlvbiBmcm9tSGV4U3RyaW5nIChoYXNoKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShoYXNoLCAnaGV4Jylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBtdWx0aWhhc2ggdG8gYSBiYXNlNTggZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydHMudG9CNThTdHJpbmcgPSBmdW5jdGlvbiB0b0I1OFN0cmluZyAoaGFzaCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihoYXNoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBiZSBwYXNzZWQgYSBidWZmZXInKVxuICB9XG5cbiAgcmV0dXJuIGJzNTguZW5jb2RlKGhhc2gpXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgZ2l2ZW4gYmFzZTU4IGVuY29kZWQgc3RyaW5nIHRvIGEgbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5mcm9tQjU4U3RyaW5nID0gZnVuY3Rpb24gZnJvbUI1OFN0cmluZyAoaGFzaCkge1xuICBsZXQgZW5jb2RlZCA9IGhhc2hcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihoYXNoKSkge1xuICAgIGVuY29kZWQgPSBoYXNoLnRvU3RyaW5nKClcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShiczU4LmRlY29kZShlbmNvZGVkKSlcbn1cblxuLyoqXG4gKiBEZWNvZGUgYSBoYXNoIGZyb20gdGhlIGdpdmVuIG11bHRpaGFzaC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcmV0dXJucyB7e2NvZGU6IG51bWJlciwgbmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciwgZGlnZXN0OiBCdWZmZXJ9fSByZXN1bHRcbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUgKGJ1Zikge1xuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoYnVmKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChidWYubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIHRvbyBzaG9ydC4gbXVzdCBiZSA+IDMgYnl0ZXMuJylcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZilcbiAgaWYgKCFleHBvcnRzLmlzVmFsaWRDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWhhc2ggdW5rbm93biBmdW5jdGlvbiBjb2RlOiAweCR7Y29kZS50b1N0cmluZygxNil9YClcbiAgfVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBjb25zdCBsZW4gPSB2YXJpbnQuZGVjb2RlKGJ1ZilcbiAgaWYgKGxlbiA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCBpbnZhbGlkIGxlbmd0aDogMHgke2xlbi50b1N0cmluZygxNil9YClcbiAgfVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYnVmLmxlbmd0aCAhPT0gbGVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWhhc2ggbGVuZ3RoIGluY29uc2lzdGVudDogMHgke2J1Zi50b1N0cmluZygnaGV4Jyl9YClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29kZTogY29kZSxcbiAgICBuYW1lOiBjcy5jb2Rlc1tjb2RlXSxcbiAgICBsZW5ndGg6IGxlbixcbiAgICBkaWdlc3Q6IGJ1ZlxuICB9XG59XG5cbi8qKlxuICogIEVuY29kZSBhIGhhc2ggZGlnZXN0IGFsb25nIHdpdGggdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBjb2RlLlxuICpcbiAqID4gKipOb3RlOioqIHRoZSBsZW5ndGggaXMgZGVyaXZlZCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdCBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRpZ2VzdFxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF1cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlIChkaWdlc3QsIGNvZGUsIGxlbmd0aCkge1xuICBpZiAoIWRpZ2VzdCB8fCBjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpaGFzaCBlbmNvZGUgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGFyZ3M6IGRpZ2VzdCwgY29kZScpXG4gIH1cblxuICAvLyBlbnN1cmUgaXQncyBhIGhhc2hmdW5jdGlvbiBjb2RlLlxuICBjb25zdCBoYXNoZm4gPSBleHBvcnRzLmNvZXJjZUNvZGUoY29kZSlcblxuICBpZiAoIShCdWZmZXIuaXNCdWZmZXIoZGlnZXN0KSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA9PSBudWxsKSB7XG4gICAgbGVuZ3RoID0gZGlnZXN0Lmxlbmd0aFxuICB9XG5cbiAgaWYgKGxlbmd0aCAmJiBkaWdlc3QubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpZ2VzdCBsZW5ndGggc2hvdWxkIGJlIGVxdWFsIHRvIHNwZWNpZmllZCBsZW5ndGguJylcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbSh2YXJpbnQuZW5jb2RlKGhhc2hmbikpLFxuICAgIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobGVuZ3RoKSksXG4gICAgZGlnZXN0XG4gIF0pXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBoYXNoIGZ1bmN0aW9uIG5hbWUgaW50byB0aGUgbWF0Y2hpbmcgY29kZS5cbiAqIElmIHBhc3NlZCBhIG51bWJlciBpdCB3aWxsIHJldHVybiB0aGUgbnVtYmVyIGlmIGl0J3MgYSB2YWxpZCBjb2RlLlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBuYW1lXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnRzLmNvZXJjZUNvZGUgPSBmdW5jdGlvbiBjb2VyY2VDb2RlIChuYW1lKSB7XG4gIGxldCBjb2RlID0gbmFtZVxuXG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoY3MubmFtZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmdW5jdGlvbiBuYW1lZDogJHtuYW1lfWApXG4gICAgfVxuICAgIGNvZGUgPSBjcy5uYW1lc1tuYW1lXVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb2RlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSGFzaCBmdW5jdGlvbiBjb2RlIHNob3VsZCBiZSBhIG51bWJlci4gR290OiAke2NvZGV9YClcbiAgfVxuXG4gIGlmIChjcy5jb2Rlc1tjb2RlXSA9PT0gdW5kZWZpbmVkICYmICFleHBvcnRzLmlzQXBwQ29kZShjb2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGZ1bmN0aW9uIGNvZGU6ICR7Y29kZX1gKVxuICB9XG5cbiAgcmV0dXJuIGNvZGVcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2V0aGVyIGEgY29kZSBpcyBwYXJ0IG9mIHRoZSBhcHAgcmFuZ2VcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuaXNBcHBDb2RlID0gZnVuY3Rpb24gYXBwQ29kZSAoY29kZSkge1xuICByZXR1cm4gY29kZSA+IDAgJiYgY29kZSA8IDB4MTBcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG11bHRpaGFzaCBjb2RlIGlzIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc1ZhbGlkQ29kZSA9IGZ1bmN0aW9uIHZhbGlkQ29kZSAoY29kZSkge1xuICBpZiAoZXhwb3J0cy5pc0FwcENvZGUoY29kZSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKGNzLmNvZGVzW2NvZGVdKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBidWZmZXIgaXMgYSB2YWxpZCBtdWx0aWhhc2guIFRocm93cyBhbiBlcnJvciBpZiBpdCBpcyBub3QgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IG11bHRpaGFzaFxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZSAobXVsdGloYXNoKSB7XG4gIGV4cG9ydHMuZGVjb2RlKG11bHRpaGFzaCkgLy8gdGhyb3dzIGlmIGJhZC5cbn1cbmV4cG9ydHMudmFsaWRhdGUgPSB2YWxpZGF0ZVxuXG4vKipcbiAqIFJldHVybnMgYSBwcmVmaXggZnJvbSBhIHZhbGlkIG11bHRpaGFzaC4gVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydHMucHJlZml4ID0gZnVuY3Rpb24gcHJlZml4IChtdWx0aWhhc2gpIHtcbiAgdmFsaWRhdGUobXVsdGloYXNoKVxuXG4gIHJldHVybiBtdWx0aWhhc2guc2xpY2UoMCwgMilcbn1cbiIsIlxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRkaXJyOiByZXF1aXJlKCcuL2xpYi9yZWFkZGlycicpLnJlYWRkaXJyLFxuXG4gIHJtZGlycjogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1kaXJyLFxuICBybWRpcnM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycyxcbiAgcm1maWxlczogcmVxdWlyZSgnLi9saWIvcm1kaXJyJykucm1maWxlcyxcblxuICBjcGRpcnI6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZGlycixcbiAgY3BkaXJzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnMsXG4gIGNwZmlsZXM6IHJlcXVpcmUoJy4vbGliL2NwZGlycicpLmNwZmlsZXNcbn1cbiIsIlxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJylcbnZhciByZWFkZGlyciA9IHJlcXVpcmUoJy4vcmVhZGRpcnInKS5yZWFkZGlyclxuXG5cbi8qKlxuICogQ29weSBkaXJlY3RvcnkgcmVjdXJzaXZlbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGRpcnIgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBjYikge1xuICByZWFkZGlycihzcGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgIGV4cG9ydHMuY3BkaXJzKHNwYXRoLCB0cGF0aCwgZGlycywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGV4cG9ydHMuY3BmaWxlcyhzcGF0aCwgdHBhdGgsIGZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGNiKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDb3B5IGEgbGlzdCBvZiBkaXJlY3Rvcmllc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2UgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldCBwYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBkaXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNwZGlycyA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGRpcnMsIGNiKSB7XG4gIGRpcnMuc29ydCgpXG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZGlycy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgdmFyIHJwYXRoID0gcGF0aC5yZWxhdGl2ZShzcGF0aCwgZGlyc1tpbmRleF0pXG4gICAgcnBhdGggPSBwYXRoLmpvaW4odHBhdGgsIHJwYXRoKVxuICAgIGZzLmV4aXN0cyhycGF0aCwgZnVuY3Rpb24gKGV4aXN0cykge1xuICAgICAgaWYgKGV4aXN0cykgcmV0dXJuIGxvb3AoKytpbmRleClcbiAgICAgIGZzLm1rZGlyKHJwYXRoLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcbn1cblxuLyoqXG4gKiBDb3B5IGEgbGlzdCBvZiBmaWxlc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2UgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldCBwYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBmaWxlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGZpbGVzID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgZmlsZXMsIGNiKSB7XG4gIDsoZnVuY3Rpb24gbG9vcCAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT0gZmlsZXMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIGZzLnJlYWRGaWxlKGZpbGVzW2luZGV4XSwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIHZhciBycGF0aCA9IHBhdGgucmVsYXRpdmUoc3BhdGgsIGZpbGVzW2luZGV4XSlcbiAgICAgIHJwYXRoID0gcGF0aC5qb2luKHRwYXRoLCBycGF0aClcbiAgICAgIGZzLndyaXRlRmlsZShycGF0aCwgZGF0YSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cblxuLyoqXG4gKiBSZWFkIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5c30gZGlycyAmIGZpbGVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucmVhZGRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHZhciBkaXJzID0gW10sIGZpbGVzID0gW11cbiAgZGlycy5wdXNoKGRwYXRoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IobnVsbCwgZGlycywgZmlsZXMpXG4gICAgZnMucmVhZGRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVyciwgX2ZpbGVzKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZ2V0c3RhdChkaXJzW2luZGV4XSwgX2ZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcblxuICAvKipcbiAgICogR2V0IHN0YXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdG9yeSBwYXRoXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0c3RhdCAoZHBhdGgsIF9maWxlcywgY2IpIHtcbiAgICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT0gX2ZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICAgIHZhciBmcGF0aCA9IHBhdGguam9pbihkcGF0aCwgX2ZpbGVzW2luZGV4XSlcbiAgICAgIGZzLnN0YXQoZnBhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgZGlycy5wdXNoKGZwYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVzLnB1c2goZnBhdGgpXG4gICAgICAgIH1cbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KDApKVxuICB9XG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciByZWFkZGlyciA9IHJlcXVpcmUoJy4vcmVhZGRpcnInKS5yZWFkZGlyclxuXG5cbi8qKlxuICogUmVtb3ZlIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHJlYWRkaXJyKGRwYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgZXhwb3J0cy5ybWZpbGVzKGZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZXhwb3J0cy5ybWRpcnMoZGlycywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGZpbGVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1maWxlcyA9IGZ1bmN0aW9uIChmaWxlcywgY2IpIHtcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBmaWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMudW5saW5rKGZpbGVzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFJlbW92ZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkaXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZGlycyA9IGZ1bmN0aW9uIChkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoZGVzYylcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5ybWRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhXG4gKiBAcGFyYW0ge1N0cmluZ30gYlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gIGlmIChhID4gYikgcmV0dXJuIC0xXG4gIGlmIChhIDwgYikgcmV0dXJuICAxXG4gIHJldHVybiAwXG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJ1ZmZlci5wcm90b3R5cGUpXG5cbi8vIENvcHkgc3RhdGljIG1ldGhvZHMgZnJvbSBCdWZmZXJcbmNvcHlQcm9wcyhCdWZmZXIsIFNhZmVCdWZmZXIpXG5cblNhZmVCdWZmZXIuZnJvbSA9IGZ1bmN0aW9uIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuU2FmZUJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgdmFyIGJ1ZiA9IEJ1ZmZlcihzaXplKVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuZmlsbChmaWxsKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBidWYuZmlsbCgwKVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKHNpemUpXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBidWZmZXIuU2xvd0J1ZmZlcihzaXplKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVhZFxuXG52YXIgTVNCID0gMHg4MFxuICAsIFJFU1QgPSAweDdGXG5cbmZ1bmN0aW9uIHJlYWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIHJlcyAgICA9IDBcbiAgICAsIG9mZnNldCA9IG9mZnNldCB8fCAwXG4gICAgLCBzaGlmdCAgPSAwXG4gICAgLCBjb3VudGVyID0gb2Zmc2V0XG4gICAgLCBiXG4gICAgLCBsID0gYnVmLmxlbmd0aFxuXG4gIGRvIHtcbiAgICBpZiAoY291bnRlciA+PSBsKSB7XG4gICAgICByZWFkLmJ5dGVzID0gMFxuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvdWxkIG5vdCBkZWNvZGUgdmFyaW50JylcbiAgICB9XG4gICAgYiA9IGJ1Zltjb3VudGVyKytdXG4gICAgcmVzICs9IHNoaWZ0IDwgMjhcbiAgICAgID8gKGIgJiBSRVNUKSA8PCBzaGlmdFxuICAgICAgOiAoYiAmIFJFU1QpICogTWF0aC5wb3coMiwgc2hpZnQpXG4gICAgc2hpZnQgKz0gN1xuICB9IHdoaWxlIChiID49IE1TQilcblxuICByZWFkLmJ5dGVzID0gY291bnRlciAtIG9mZnNldFxuXG4gIHJldHVybiByZXNcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZW5jb2RlXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcbiAgLCBNU0JBTEwgPSB+UkVTVFxuICAsIElOVCA9IE1hdGgucG93KDIsIDMxKVxuXG5mdW5jdGlvbiBlbmNvZGUobnVtLCBvdXQsIG9mZnNldCkge1xuICBvdXQgPSBvdXQgfHwgW11cbiAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgdmFyIG9sZE9mZnNldCA9IG9mZnNldFxuXG4gIHdoaWxlKG51bSA+PSBJTlQpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtIC89IDEyOFxuICB9XG4gIHdoaWxlKG51bSAmIE1TQkFMTCkge1xuICAgIG91dFtvZmZzZXQrK10gPSAobnVtICYgMHhGRikgfCBNU0JcbiAgICBudW0gPj4+PSA3XG4gIH1cbiAgb3V0W29mZnNldF0gPSBudW0gfCAwXG4gIFxuICBlbmNvZGUuYnl0ZXMgPSBvZmZzZXQgLSBvbGRPZmZzZXQgKyAxXG4gIFxuICByZXR1cm4gb3V0XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBlbmNvZGU6IHJlcXVpcmUoJy4vZW5jb2RlLmpzJylcbiAgLCBkZWNvZGU6IHJlcXVpcmUoJy4vZGVjb2RlLmpzJylcbiAgLCBlbmNvZGluZ0xlbmd0aDogcmVxdWlyZSgnLi9sZW5ndGguanMnKVxufVxuIiwiXG52YXIgTjEgPSBNYXRoLnBvdygyLCAgNylcbnZhciBOMiA9IE1hdGgucG93KDIsIDE0KVxudmFyIE4zID0gTWF0aC5wb3coMiwgMjEpXG52YXIgTjQgPSBNYXRoLnBvdygyLCAyOClcbnZhciBONSA9IE1hdGgucG93KDIsIDM1KVxudmFyIE42ID0gTWF0aC5wb3coMiwgNDIpXG52YXIgTjcgPSBNYXRoLnBvdygyLCA0OSlcbnZhciBOOCA9IE1hdGgucG93KDIsIDU2KVxudmFyIE45ID0gTWF0aC5wb3coMiwgNjMpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPCBOMSA/IDFcbiAgOiB2YWx1ZSA8IE4yID8gMlxuICA6IHZhbHVlIDwgTjMgPyAzXG4gIDogdmFsdWUgPCBONCA/IDRcbiAgOiB2YWx1ZSA8IE41ID8gNVxuICA6IHZhbHVlIDwgTjYgPyA2XG4gIDogdmFsdWUgPCBONyA/IDdcbiAgOiB2YWx1ZSA8IE44ID8gOFxuICA6IHZhbHVlIDwgTjkgPyA5XG4gIDogICAgICAgICAgICAgIDEwXG4gIClcbn1cbiIsIi8qIGdsb2JhbHMgX193ZWJwYWNrX2FtZF9vcHRpb25zX18gKi9cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgcXVlcnlCdWlsZGVyIGZyb20gJy4vcXVlcnlCdWlsZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluTGlzdChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBjb25zdCBiYXNlRW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3Bpbkxpc3RgO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcXVlcnlCdWlsZGVyKGJhc2VFbmRwb2ludCwgZmlsdGVycyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHVzZXIgcGluIGxpc3Q6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImZ1bmN0aW9uIHZhbGlkYXRlQW5kUmV0dXJuRGF0ZShkYXRlVG9WYWxpZGF0ZSkge1xuICAgIGxldCBkYXRlUGFyc2VkID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlVG9WYWxpZGF0ZSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKGRhdGVQYXJzZWQudG9JU09TdHJpbmcoKSA9PT0gZGF0ZVRvVmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlVG9WYWxpZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGVzIG11c3QgYmUgaW4gdmFsaWQgSVNPXzg2MDEgZm9ybWF0Jyk7XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0ZXMgbXVzdCBiZSBpbiB2YWxpZCBJU09fODYwMSBmb3JtYXQnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1ZXJ5QnVpbGRlcihiYXNlVXJsLCBmaWx0ZXJzKSB7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gYmFzZVVybCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vICBwcmVzZXQgZmlsdGVyIHZhbHVlc1xuICAgIGxldCBmaWx0ZXJRdWVyeSA9ICc/JztcblxuICAgIGxldCBtZXRhZGF0YVF1ZXJ5ID0gJyc7XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAvLyAgbm93IHdlIG5lZWQgdG8gY29uc3RydWN0IHRoZSBhY3R1YWwgVVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBmaWx0ZXJzIHByb3ZpZGVkXG4gICAgICAgIGlmIChmaWx0ZXJzLmhhc2hDb250YWlucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmhhc2hDb250YWlucyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hDb250YWlucyB2YWx1ZSBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgaGFzaENvbnRhaW5zPSR7ZmlsdGVycy5oYXNoQ29udGFpbnN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU3RhcnQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy5waW5TdGFydCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluRW5kKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpbkVuZCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpblN0YXJ0PSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMudW5waW5TdGFydCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgdW5waW5FbmQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpbkVuZCl9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU2l6ZU1pbikge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGluU2l6ZU1pbikgfHwgZmlsdGVycy5waW5TaXplTWluIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGluU2l6ZU1pbiBpcyBhIHZhbGlkIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU2l6ZU1pbj0ke2ZpbHRlcnMucGluU2l6ZU1pbn0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWF4KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWF4KSB8fCBmaWx0ZXJzLnBpblNpemVNYXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWF4IGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWF4PSR7ZmlsdGVycy5waW5TaXplTWF4fSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzICE9PSAnYWxsJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3Bpbm5lZCcgJiYgZmlsdGVycy5zdGF0dXMgIT09ICd1bnBpbm5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXR1cyB2YWx1ZSBtdXN0IGJlIGVpdGhlcjogYWxsLCBwaW5uZWQsIG9yIHVucGlubmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHN0YXR1cz0ke2ZpbHRlcnMuc3RhdHVzfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBhZ2VMaW1pdCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZUxpbWl0KSB8fCBmaWx0ZXJzLnBhZ2VMaW1pdCA8PSAwIHx8IGZpbHRlcnMucGFnZUxpbWl0ID4gMTAwMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFnZUxpbWl0IGlzIGEgdmFsaWQgaW50ZWdlciBiZXR3ZWVuIDEtMTAwMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwYWdlTGltaXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VMaW1pdCl9JmA7IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgZGVjaW1hbHMgZ2V0IHJvdW5kZWQgdG8gaW50ZWdlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLnBhZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBhZ2VPZmZzZXQpIHx8IGZpbHRlcnMucGFnZU9mZnNldCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlT2Zmc2V0IGlzIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwYWdlT2Zmc2V0PSR7cGFyc2VJbnQoZmlsdGVycy5wYWdlT2Zmc2V0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBgbWV0YWRhdGFbbmFtZV09JHtmaWx0ZXJzLm1ldGFkYXRhLm5hbWV9JmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykge1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSBrZXl2YWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcnVuZWRLZXlWYWx1ZXMgPSB7fTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UncmUgb25seSBncmFiYmluZyB0aGUgdmFsdWVzIHdlIHdhbnQgZm9yIHRoZSBxdWVyeSwgYW5kIG5vdGhpbmcgZXh0cmFcblxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKS5mb3JFYWNoKChrZXlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBrZXlWYWx1ZVsxXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZTogJHtrZXl9IGlzIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS52YWx1ZSB8fCAhdmFsdWUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBtdXN0IGhhdmUgYm90aCB2YWx1ZSBhbmQgb3AgYXR0cmlidXRlc2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncywgYm9vbGVhbnMsIG9yIG51bWJlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBjaGVja3MgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aGUga2V5dmFsdWVzIGFyZSB2YWxpZFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3JlYXRlciB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2UgYmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RCZXR3ZWVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnNlY29uZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmVjYXVzZSBub3RCZXR3ZWVuIG9wIGNvZGUgd2FzIHBhc3NlZCBpbiwga2V5VmFsdWU6ICR7a2V5VmFsdWVbMF19IG11c3QgaGF2ZSBib3RoIGFsc28gaW5jbHVkZSBhIHNlY29uZFZhbHVlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSBzZWNvbmRWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nLCBib29sZWFuLCBvciBudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbm90IGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdElMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lSZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWUgb3A6ICR7dmFsdWUub3B9IGlzIG5vdCBhIHZhbGlkIG9wIGNvZGVgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBtZXRhZGF0YVF1ZXJ5ICsgYG1ldGFkYXRhW2tleXZhbHVlc109JHtKU09OLnN0cmluZ2lmeShwcnVuZWRLZXlWYWx1ZXMpfWA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHtmaWx0ZXJRdWVyeX0ke21ldGFkYXRhUXVlcnl9YDtcbn1cblxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5c30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIC8vICB0ZXN0IGF1dGhlbnRpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyJ3MgcHJvdmlkZWQga2V5cyBhcmUgbGVnaXRcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc2hQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG5ld1BpblBvbGljeSk7XG5cbiAgICBpZiAoIWlwZnNQaW5IYXNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXBmc1Bpbkhhc2ggdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0lQRlMuY2lkKGlwZnNQaW5IYXNoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwZnNQaW5IYXNoIHZhbHVlIGlzIGFuIGludmFsaWQgSVBGUyBDSUQnKTtcbiAgICB9XG5cbiAgICBpZiAoIW5ld1BpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1BpblBvbGljeSBpcyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlIHBpbiBwb2xpY3kgb2YgYSBwaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvaGFzaFBpblBvbGljeWA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaXBmc1Bpbkhhc2g6IGlwZnNQaW5IYXNoLFxuICAgICAgICBuZXdQaW5Qb2xpY3k6IG5ld1BpblBvbGljeVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5wdXQoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgY2hhbmdpbmcgcGluIHBvbGljeSBmb3IgaGFzaDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluQnlIYXNoKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9QaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgcmVxdWlyZWQgZm9yIHBpbm5pbmcgYnkgaGFzaCcpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvUGluKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1BpbiB2YWx1ZSBpcyBhbiBpbnZhbGlkIElQRlMgQ0lEJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkJ5SGFzaGA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgaGFzaFRvUGluOiBoYXNoVG9QaW4sXG4gICAgICAgIHBpbmF0YU9wdGlvbnM6IHt9XG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIGJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBhZGRpbmcgdG8gcGluIHF1ZXVlOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IE5vZGVGb3JtRGF0YSgpO1xuXG4gICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgcmVhZFN0cmVhbSk7XG5cbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkZpbGVUb0lQRlNgO1xuXG4gICAgICAgIGlmICghKHJlYWRTdHJlYW0gaW5zdGFuY2VvZiBzdHJlYW0uUmVhZGFibGUpKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdyZWFkU3RyZWFtIGlzIG5vdCBhIHJlYWRhYmxlIHN0cmVhbScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBmaWxlc1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGJhc2VQYXRoQ29udmVydGVyIGZyb20gJ2Jhc2UtcGF0aC1jb252ZXJ0ZXInO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcmVjdXJzaXZlID0gcmVxdWlyZSgncmVjdXJzaXZlLWZzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZyb21GUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluRmlsZVRvSVBGU2A7XG5cbiAgICAgICAgcmVjdXJzaXZlLnJlYWRkaXJyKHNvdXJjZVBhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGEgPSBuZXcgTm9kZUZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAvL2ZvciBlYWNoIGZpbGUgc3RyZWFtLCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGNvcnJlY3QgcmVsYXRpdmUgZmlsZSBwYXRoXG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGUpLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVwYXRoOiBiYXNlUGF0aENvbnZlcnRlcihzb3VyY2VQYXRoLCBmaWxlKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVNZXRhZGF0YShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhT3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGluYXRhT3B0aW9ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSAke2RhdGEuX2JvdW5kYXJ5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgRmlsZSB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5KU09OVG9JUEZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBib2R5LCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGxldCByZXF1ZXN0Qm9keSA9IGJvZHk7XG5cbiAgICBpZiAodHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYm9keSBtdXN0IGJlIGEgdmFsaWQgSlNPTiBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHBpbmF0YUNvbnRlbnQ6IGJvZHlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5waW5hdGFNZXRhZGF0YSA9IG9wdGlvbnMucGluYXRhTWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICByZXF1ZXN0Qm9keS5waW5hdGFPcHRpb25zID0gb3B0aW9ucy5waW5hdGFPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkpTT05Ub0lQRlNgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucG9zdChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBKU09OIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBxdWVyeUJ1aWxkZXIgZnJvbSAnLi9xdWVyeUJ1aWxkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5Kb2JzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGxldCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcGluSm9ic2A7XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICBlbmRwb2ludCA9IHF1ZXJ5QnVpbGRlcihlbmRwb2ludCwgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW4gam9iczogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xuICAgIH1cblxuICAgIGxldCBuZXdVcmwgPSBiYXNlVXJsO1xuXG4gICAgbGV0IGZpcnN0RmlsdGVyQXBwbGllZCA9IGZhbHNlOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBcIj9cIiBjaGFyYWN0ZXIgaXMgb25seSBhcHBsaWVkIG9uY2VcblxuICAgIGZ1bmN0aW9uIGFkZEZpbHRlcihuZXdGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGZpcnN0RmlsdGVyQXBwbGllZCkge1xuICAgICAgICAgICAgbmV3VXJsID0gYCR7bmV3VXJsfSYke25ld0ZpbHRlcn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlyc3RGaWx0ZXJBcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0/JHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuc29ydCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc29ydCA9PT0gJ0FTQycgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnNvcnQgPT09ICdERVNDJykge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc29ydD0ke2ZpbHRlcnMuc29ydH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvcnQgdmFsdWU6ICR7ZmlsdGVycy5zb3J0fSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgPT09ICdzZWFyY2hpbmcnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdleHBpcmVkJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9mcmVlX2xpbWl0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnb3Zlcl9tYXhfc2l6ZScgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2ludmFsaWRfb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnYmFkX2hvc3Rfbm9kZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0dXMgdmFsdWU6ICR7ZmlsdGVycy5zdGF0dXN9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSB7XG4gICAgICAgICAgICBpZiAoaXNJUEZTLmNpZChmaWx0ZXJzLmlwZnNfcGluX2hhc2gpKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBpcGZzX3Bpbl9oYXNoPSR7ZmlsdGVycy5pcGZzX3Bpbl9oYXNofWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSVBGUyBoYXNoOiAke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLmxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihmaWx0ZXJzLmxpbWl0KSAmJiAoZmlsdGVycy5saW1pdCA+IDApICYmIChmaWx0ZXJzLmxpbWl0IDwgMTAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgbGltaXQ9JHtmaWx0ZXJzLmxpbWl0fWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGltaXQ6ICR7ZmlsdGVycy5saW1pdH0uIFZhbGlkIGxpbWl0cyBhcmUgMS0xMDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLm9mZnNldCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5vZmZzZXQpICYmIChmaWx0ZXJzLm9mZnNldCA+IDApKSB7XG4gICAgICAgICAgICAgICAgYWRkRmlsdGVyKGBvZmZzZXQ9JHtmaWx0ZXJzLm9mZnNldH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9mZnNldDogJHtmaWx0ZXJzLm9mZnNldH0uIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgaW50ZWdlciBmb3IgdGhlIG9mZnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnBpbihwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvVW5waW4pIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgaWYgKCFoYXNoVG9VbnBpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1VucGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciByZW1vdmluZyBhIHBpbiBmcm9tIFBpbmF0YScpO1xuICAgIH1cbiAgICBpZiAoIWlzSVBGUy5jaWQoaGFzaFRvVW5waW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtoYXNoVG9VbnBpbn0gaXMgYW4gaW52YWxpZCBJUEZTIENJRGApO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy91bnBpbi8ke2hhc2hUb1VucGlufWA7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5kZWxldGUoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSByZW1vdmluZyBwaW4gZnJvbSBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VyUGluUG9saWN5KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBuZXdQaW5Qb2xpY3kpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG5ld1BpblBvbGljeSk7XG5cbiAgICBpZiAoIW5ld1BpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25ld1BpblBvbGljeSBpcyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlIHBpbiBwb2xpY3kgb2YgYSBwaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvdXNlclBpblBvbGljeWA7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgbmV3UGluUG9saWN5OiBuZXdQaW5Qb2xpY3lcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MucHV0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGNoYW5naW5nIHBpbiBwb2xpY3kgZm9yIHVzZXI6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImV4cG9ydCBjb25zdCBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLnBpbmF0YS5jbG91ZCc7XG4iLCJpbXBvcnQgcGluQnlIYXNoIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5CeUhhc2gnO1xuaW1wb3J0IGhhc2hQaW5Qb2xpY3kgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL2hhc2hQaW5Qb2xpY3knO1xuaW1wb3J0IHBpbkZpbGVUb0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMnO1xuaW1wb3J0IHBpbkZyb21GUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRnJvbUZTJztcbmltcG9ydCBwaW5KU09OVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTJztcbmltcG9ydCBwaW5Kb2JzIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMnO1xuaW1wb3J0IHVucGluIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy91bnBpbic7XG5pbXBvcnQgdXNlclBpblBvbGljeSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvdXNlclBpblBvbGljeSc7XG5pbXBvcnQgdGVzdEF1dGhlbnRpY2F0aW9uIGZyb20gJy4vY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHBpbkxpc3QgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcGluTGlzdCc7XG5pbXBvcnQgdXNlclBpbm5lZERhdGFUb3RhbCBmcm9tICcuL2NvbW1hbmRzL2RhdGEvdXNlclBpbm5lZERhdGFUb3RhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbmF0YUNsaWVudChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIGxldCBjbGllbnQgPSB7fTtcblxuICAgIC8vICBzZXR0aW5nIHVwIHRoZSBhY3R1YWwgY2FsbHMgeW91IGNhbiBtYWtlIHVzaW5nIHRoaXMgcGFja2FnZVxuICAgIGNsaWVudC5waW5CeUhhc2ggPSBmdW5jdGlvbiAoaGFzaFRvUGluLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5CeUhhc2gocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1Bpbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQuaGFzaFBpblBvbGljeSA9IGZ1bmN0aW9uIChoYXNoVG9QaW4sIG9wdGlvbnMsIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIGhhc2hQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoLCBuZXdQaW5Qb2xpY3kpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZpbGVUb0lQRlMgPSBmdW5jdGlvbiAocmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRhYmxlU3RyZWFtLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5Gcm9tRlMgPSBmdW5jdGlvbiAoc291cmNlUGF0aCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5KU09OVG9JUEZTID0gZnVuY3Rpb24gKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkpTT05Ub0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGJvZHksIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpvYnMgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudW5waW4gPSBmdW5jdGlvbiAoaGFzaFRvVW5waW4pIHtcbiAgICAgICAgcmV0dXJuIHVucGluKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBoYXNoVG9VbnBpbik7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpblBvbGljeSA9IGZ1bmN0aW9uIChuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgcmV0dXJuIHVzZXJQaW5Qb2xpY3kocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIG5ld1BpblBvbGljeSk7XG4gICAgfTtcbiAgICBjbGllbnQudGVzdEF1dGhlbnRpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIGNsaWVudC5waW5MaXN0ID0gZnVuY3Rpb24gKGZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpO1xuICAgIH07XG4gICAgY2xpZW50LnVzZXJQaW5uZWREYXRhVG90YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1c2VyUGlubmVkRGF0YVRvdGFsKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIHJldHVybiBjbGllbnQ7XG59XG4iLCJpbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgaWYgKCFwaW5hdGFBcGlLZXkgfHwgcGluYXRhQXBpS2V5ID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbmF0YUFwaUtleSBwcm92aWRlZCEgUGxlYXNlIHByb3ZpZGUgeW91ciBwaW5hdGEgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbiAgICBpZiAoIXBpbmF0YVNlY3JldEFwaUtleSB8fCBwaW5hdGFTZWNyZXRBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhU2VjcmV0QXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBzZWNyZXQgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSG9zdE5vZGVzKGhvc3ROb2Rlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShob3N0Tm9kZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaG9zdF9ub2RlcyB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGhvc3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGlmICghaXNJUEZTLnBlZXJNdWx0aWFkZHIobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9zdF9ub2RlIGFycmF5IGVudHJ5OiAke25vZGV9IGlzIG5vdCBhIHZhbGlkIHBlZXIgbXVsdGlhZGRyYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICBpZiAobWV0YWRhdGEubmFtZSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbWV0YWRhdGEubmFtZSA9PT0gJ3N0cmluZycgfHwgbWV0YWRhdGEubmFtZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgbmFtZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5rZXl2YWx1ZXMgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhdGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpID4gOSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9yZSB0aGFuIDEwIGtleXZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgZm9yIG1ldGFkYXRhIGVudHJpZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhIHN0cmluZywgYSBib29sZWFuLCBvciBhIG51bWJlciwgc28gd2UgZG9uJ3QgZ2V0IGFuIG9iamVjdCBwYXNzZWQgaW4gYnkgYWNjaWRlbnRcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiBrZXlWYWx1ZVsxXSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleVZhbHVlWzFdID09PSAnYm9vbGVhbicgfHwgIWlzTmFOKGtleVZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKHBpblBvbGljeSkge1xuICAgIC8vdGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIHBpbiBwb2xpY3kgYW5kIGNoZWNrcyB0aGUgSlNPTiBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWRcbiAgICBpZiAoIXBpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbiBwb2xpY3kgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXBpblBvbGljeS5yZWdpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaW9ucyBwcm92aWRlZCBpbiBwaW4gcG9saWN5Jyk7XG4gICAgfVxuICAgIGlmIChwaW5Qb2xpY3kucmVnaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcGluUG9saWN5LnJlZ2lvbnMuZm9yRWFjaCgocmVnaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlZ2lvbi5pZCB8fCAhKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZWdpb24uaWQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lvbiBpZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCB8fCByZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgPT09IDApIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc2lyZWRSZXBsaWNhdGlvbkNvdW50IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2lkVmVyc2lvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24gIT0gMCAmJiBvcHRpb25zLmNpZFZlcnNpb24gIT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIGNpZFZlcnNpb24nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSB0cnVlICYmIG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyYXBXaXRoRGlyZWN0b3J5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhvc3ROb2Rlcykge1xuICAgICAgICB2YWxpZGF0ZUhvc3ROb2RlcyhvcHRpb25zLmhvc3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tUGluUG9saWN5KSB7XG4gICAgICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG9wdGlvbnMuY3VzdG9tUGluUG9saWN5KTtcbiAgICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhc3NlcnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYnVmZmVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImh0dHBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdHJlYW1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidHR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVybFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dGlsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInpsaWJcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/lib/pinata-sdk.min.js b/lib/pinata-sdk.min.js index 643b417..8b50d13 100644 --- a/lib/pinata-sdk.min.js +++ b/lib/pinata-sdk.min.js @@ -1,11 +1,11 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("pinata-sdk",[],n):"object"==typeof exports?exports["pinata-sdk"]=n():e["pinata-sdk"]=n()}("undefined"!=typeof self?self:this,(function(){return function(e){var n={};function t(i){if(n[i])return n[i].exports;var a=n[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:i})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(i,a,function(n){return e[n]}.bind(null,a));return i},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=174)}([function(e,n,t){var i=t(2),a=t(19),o=t(11),r=t(12),s=t(20),c=function(e,n,t){var p,u,l,f,d=e&c.F,m=e&c.G,v=e&c.S,h=e&c.P,x=e&c.B,b=m?i:v?i[n]||(i[n]={}):(i[n]||{}).prototype,g=m?a:a[n]||(a[n]={}),k=g.prototype||(g.prototype={});for(p in m&&(t=n),t)l=((u=!d&&b&&void 0!==b[p])?b:t)[p],f=x&&u?s(l,i):h&&"function"==typeof l?s(Function.call,l):l,b&&r(b,p,l,e&c.U),g[p]!=l&&o(g,p,f),h&&k[p]!=l&&(k[p]=l)};i.core=a,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,n,t){var i=t(4);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n,t){var i=t(52)("wks"),a=t(37),o=t(2).Symbol,r="function"==typeof o;(e.exports=function(e){return i[e]||(i[e]=r&&o[e]||(r?o:a)("Symbol."+e))}).store=i},function(e,n,t){var i=t(22),a=Math.min;e.exports=function(e){return e>0?a(i(e),9007199254740991):0}},function(e,n,t){e.exports=!t(3)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,n,t){var i=t(1),a=t(116),o=t(27),r=Object.defineProperty;n.f=t(7)?Object.defineProperty:function(e,n,t){if(i(e),n=o(n,!0),i(t),a)try{return r(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var i=t(28);e.exports=function(e){return Object(i(e))}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var i=t(8),a=t(36);e.exports=t(7)?function(e,n,t){return i.f(e,n,a(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n,t){var i=t(2),a=t(11),o=t(15),r=t(37)("src"),s=t(178),c=(""+s).split("toString");t(19).inspectSource=function(e){return s.call(e)},(e.exports=function(e,n,t,s){var p="function"==typeof t;p&&(o(t,"name")||a(t,"name",n)),e[n]!==t&&(p&&(o(t,r)||a(t,r,e[n]?""+e[n]:c.join(String(n)))),e===i?e[n]=t:s?e[n]?e[n]=t:a(e,n,t):(delete e[n],a(e,n,t)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[r]||s.call(this)}))},function(e,n,t){var i=t(0),a=t(3),o=t(28),r=/"/g,s=function(e,n,t,i){var a=String(o(e)),s="<"+n;return""!==t&&(s+=" "+t+'="'+String(i).replace(r,""")+'"'),s+">"+a+""};e.exports=function(e,n){var t={};t[e]=n(s),i(i.P+i.F*a((function(){var n=""[e]('"');return n!==n.toLowerCase()||n.split('"').length>3})),"String",t)}},function(e,n,t){"use strict";var i=t(152),a=t(380),o=Object.prototype.toString;function r(e){return"[object Array]"===o.call(e)}function s(e){return null!==e&&"object"==typeof e}function c(e){return"[object Function]"===o.call(e)}function p(e,n){if(null!=e)if("object"!=typeof e&&(e=[e]),r(e))for(var t=0,i=e.length;t0?i:t)(e)}},function(e,n,t){"use strict";var i=t(3);e.exports=function(e,n){return!!e&&i((function(){n?e.call(null,(function(){}),1):e.call(null)}))}},function(e,n,t){e.exports=t(379)},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.baseUrl=void 0;n.baseUrl="https://api.pinata.cloud"},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.validateApiKeys=function(e,n){if(!e||""===e)throw new Error("No pinataApiKey provided! Please provide your pinata api key as an argument when you start this script");if(!n||""===n)throw new Error("No pinataSecretApiKey provided! Please provide your pinata secret api key as an argument when you start this script")},n.validateHostNodes=function(e){if(!Array.isArray(e))throw new Error("host_nodes value must be an array");e.forEach((function(e){if(!a.default.peerMultiaddr(e))throw new Error("host_node array entry: ".concat(e," is not a valid peer multiaddr"))}))},n.validateMetadata=function(e){if(e.name&&!("string"==typeof e.name||e.name instanceof String))throw new Error("metadata name must be of type string");if(e.keyvalues){if("object"!==o(e.keyvalues))throw new Error("metatadata keyvalues must be an object");var n=0;Object.entries(e.keyvalues).forEach((function(e){if(n>9)throw new Error("No more than 10 keyvalues can be provided for metadata entries");if("string"!=typeof e[1]&&"boolean"!=typeof e[1]&&isNaN(e[1]))throw new Error("Metadata keyvalue values must be strings, booleans, or numbers");n++}))}},n.validatePinataOptions=function(e){if("object"!==o(e))throw new Error("options must be an object");if(e.cidVersion&&0!=e.cidVersion&&1!=e.cidVersion)throw new Error("unsupported or invalid cidVersion");if(e.wrapWithDirectory&&!0!==e.wrapWithDirectory&&!1!==e.wrapWithDirectory)throw new Error("wrapWithDirectory must be a boolean value of true or false")};var i,a=(i=t(57))&&i.__esModule?i:{default:i};function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}},function(e,n,t){var i=t(4);e.exports=function(e,n){if(!i(e))return e;var t,a;if(n&&"function"==typeof(t=e.toString)&&!i(a=t.call(e)))return a;if("function"==typeof(t=e.valueOf)&&!i(a=t.call(e)))return a;if(!n&&"function"==typeof(t=e.toString)&&!i(a=t.call(e)))return a;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var i=t(0),a=t(19),o=t(3);e.exports=function(e,n){var t=(a.Object||{})[e]||Object[e],r={};r[e]=n(t),i(i.S+i.F*o((function(){t(1)})),"Object",r)}},function(e,n,t){var i=t(20),a=t(53),o=t(9),r=t(6),s=t(96);e.exports=function(e,n){var t=1==e,c=2==e,p=3==e,u=4==e,l=6==e,f=5==e||l,d=n||s;return function(n,s,m){for(var v,h,x=o(n),b=a(x),g=i(s,m,3),k=r(b.length),y=0,w=t?d(n,k):c?d(n,0):void 0;k>y;y++)if((f||y in b)&&(h=g(v=b[y],y,x),e))if(t)w[y]=h;else if(h)switch(e){case 3:return!0;case 5:return v;case 6:return y;case 2:w.push(v)}else if(u)return!1;return l?-1:p||u?u:w}}},function(e,n,t){"use strict";if(t(7)){var i=t(33),a=t(2),o=t(3),r=t(0),s=t(70),c=t(104),p=t(20),u=t(43),l=t(36),f=t(11),d=t(45),m=t(22),v=t(6),h=t(144),x=t(39),b=t(27),g=t(15),k=t(48),y=t(4),w=t(9),S=t(93),_=t(40),j=t(18),E=t(41).f,C=t(95),O=t(37),A=t(5),M=t(30),P=t(60),F=t(56),B=t(98),z=t(50),I=t(65),N=t(42),T=t(97),L=t(133),R=t(8),q=t(17),D=R.f,U=q.f,V=a.RangeError,$=a.TypeError,W=a.Uint8Array,G=Array.prototype,H=c.ArrayBuffer,K=c.DataView,J=M(0),Y=M(2),X=M(3),Z=M(4),Q=M(5),ee=M(6),ne=P(!0),te=P(!1),ie=B.values,ae=B.keys,oe=B.entries,re=G.lastIndexOf,se=G.reduce,ce=G.reduceRight,pe=G.join,ue=G.sort,le=G.slice,fe=G.toString,de=G.toLocaleString,me=A("iterator"),ve=A("toStringTag"),he=O("typed_constructor"),xe=O("def_constructor"),be=s.CONSTR,ge=s.TYPED,ke=s.VIEW,ye=M(1,(function(e,n){return Ee(F(e,e[xe]),n)})),we=o((function(){return 1===new W(new Uint16Array([1]).buffer)[0]})),Se=!!W&&!!W.prototype.set&&o((function(){new W(1).set({})})),_e=function(e,n){var t=m(e);if(t<0||t%n)throw V("Wrong offset!");return t},je=function(e){if(y(e)&&ge in e)return e;throw $(e+" is not a typed array!")},Ee=function(e,n){if(!(y(e)&&he in e))throw $("It is not a typed array constructor!");return new e(n)},Ce=function(e,n){return Oe(F(e,e[xe]),n)},Oe=function(e,n){for(var t=0,i=n.length,a=Ee(e,i);i>t;)a[t]=n[t++];return a},Ae=function(e,n,t){D(e,n,{get:function(){return this._d[t]}})},Me=function(e){var n,t,i,a,o,r,s=w(e),c=arguments.length,u=c>1?arguments[1]:void 0,l=void 0!==u,f=C(s);if(null!=f&&!S(f)){for(r=f.call(s),i=[],n=0;!(o=r.next()).done;n++)i.push(o.value);s=i}for(l&&c>2&&(u=p(u,arguments[2],2)),n=0,t=v(s.length),a=Ee(this,t);t>n;n++)a[n]=l?u(s[n],n):s[n];return a},Pe=function(){for(var e=0,n=arguments.length,t=Ee(this,n);n>e;)t[e]=arguments[e++];return t},Fe=!!W&&o((function(){de.call(new W(1))})),Be=function(){return de.apply(Fe?le.call(je(this)):je(this),arguments)},ze={copyWithin:function(e,n){return L.call(je(this),e,n,arguments.length>2?arguments[2]:void 0)},every:function(e){return Z(je(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return T.apply(je(this),arguments)},filter:function(e){return Ce(this,Y(je(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Q(je(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(je(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){J(je(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return te(je(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ne(je(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return pe.apply(je(this),arguments)},lastIndexOf:function(e){return re.apply(je(this),arguments)},map:function(e){return ye(je(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return se.apply(je(this),arguments)},reduceRight:function(e){return ce.apply(je(this),arguments)},reverse:function(){for(var e,n=je(this).length,t=Math.floor(n/2),i=0;i1?arguments[1]:void 0)},sort:function(e){return ue.call(je(this),e)},subarray:function(e,n){var t=je(this),i=t.length,a=x(e,i);return new(F(t,t[xe]))(t.buffer,t.byteOffset+a*t.BYTES_PER_ELEMENT,v((void 0===n?i:x(n,i))-a))}},Ie=function(e,n){return Ce(this,le.call(je(this),e,n))},Ne=function(e){je(this);var n=_e(arguments[1],1),t=this.length,i=w(e),a=v(i.length),o=0;if(a+n>t)throw V("Wrong length!");for(;o255?255:255&i),a.v[d](t*n+a.o,i,we)}(this,t,e)},enumerable:!0})};g?(m=t((function(e,t,i,a){u(e,m,p,"_d");var o,r,s,c,l=0,d=0;if(y(t)){if(!(t instanceof H||"ArrayBuffer"==(c=k(t))||"SharedArrayBuffer"==c))return ge in t?Oe(m,t):Me.call(m,t);o=t,d=_e(i,n);var x=t.byteLength;if(void 0===a){if(x%n)throw V("Wrong length!");if((r=x-d)<0)throw V("Wrong length!")}else if((r=v(a)*n)+d>x)throw V("Wrong length!");s=r/n}else s=h(t),o=new H(r=s*n);for(f(e,"_d",{b:o,o:d,l:r,e:s,v:new K(o)});ldocument.F=Object<\/script>"),e.close(),c=e.F;i--;)delete c.prototype[o[i]];return c()};e.exports=Object.create||function(e,n){var t;return null!==e?(s.prototype=i(e),t=new s,s.prototype=null,t[r]=e):t=c(),void 0===n?t:a(t,n)}},function(e,n,t){var i=t(118),a=t(81).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return i(e,a)}},function(e,n,t){"use strict";var i=t(2),a=t(8),o=t(7),r=t(5)("species");e.exports=function(e){var n=i[e];o&&n&&!n[r]&&a.f(n,r,{configurable:!0,get:function(){return this}})}},function(e,n){e.exports=function(e,n,t,i){if(!(e instanceof n)||void 0!==i&&i in e)throw TypeError(t+": incorrect invocation!");return e}},function(e,n,t){var i=t(20),a=t(131),o=t(93),r=t(1),s=t(6),c=t(95),p={},u={};(n=e.exports=function(e,n,t,l,f){var d,m,v,h,x=f?function(){return e}:c(e),b=i(t,l,n?2:1),g=0;if("function"!=typeof x)throw TypeError(e+" is not iterable!");if(o(x)){for(d=s(e.length);d>g;g++)if((h=n?b(r(m=e[g])[0],m[1]):b(e[g]))===p||h===u)return h}else for(v=x.call(e);!(m=v.next()).done;)if((h=a(v,b,m.value,n))===p||h===u)return h}).BREAK=p,n.RETURN=u},function(e,n,t){var i=t(12);e.exports=function(e,n,t){for(var a in n)i(e,a,n[a],t);return e}},function(e,n,t){var i=t(4);e.exports=function(e,n){if(!i(e)||e._t!==n)throw TypeError("Incompatible receiver, "+n+" required!");return e}},function(e,n,t){var i=t(8).f,a=t(15),o=t(5)("toStringTag");e.exports=function(e,n,t){e&&!a(e=t?e:e.prototype,o)&&i(e,o,{configurable:!0,value:n})}},function(e,n,t){var i=t(21),a=t(5)("toStringTag"),o="Arguments"==i(function(){return arguments}());e.exports=function(e){var n,t,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(t=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),a))?t:o?i(n):"Object"==(r=i(n))&&"function"==typeof n.callee?"Arguments":r}},function(e,n,t){var i=t(0),a=t(28),o=t(3),r=t(84),s="["+r+"]",c=RegExp("^"+s+s+"*"),p=RegExp(s+s+"*$"),u=function(e,n,t){var a={},s=o((function(){return!!r[e]()||"​…"!="​…"[e]()})),c=a[e]=s?n(l):r[e];t&&(a[t]=c),i(i.P+i.F*s,"String",a)},l=u.trim=function(e,n){return e=String(a(e)),1&n&&(e=e.replace(c,"")),2&n&&(e=e.replace(p,"")),e};e.exports=u},function(e,n){e.exports={}},function(e,n,t){e.exports={encode:t(407),decode:t(408),encodingLength:t(409)}},function(e,n,t){var i=t(19),a=t(2),o=a["__core-js_shared__"]||(a["__core-js_shared__"]={});(e.exports=function(e,n){return o[e]||(o[e]=void 0!==n?n:{})})("versions",[]).push({version:i.version,mode:t(33)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,n,t){var i=t(21);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e,n){n.f={}.propertyIsEnumerable},function(e,n,t){"use strict";var i=t(1);e.exports=function(){var e=i(this),n="";return e.global&&(n+="g"),e.ignoreCase&&(n+="i"),e.multiline&&(n+="m"),e.unicode&&(n+="u"),e.sticky&&(n+="y"),n}},function(e,n,t){var i=t(1),a=t(10),o=t(5)("species");e.exports=function(e,n){var t,r=i(e).constructor;return void 0===r||null==(t=i(r)[o])?n:a(t)}},function(e,n,t){"use strict";const i=t(76),a=t(110),o=t(163),r=t(164),s=t(428),c=t(112),p=/^https?:\/\/[^/]+\/(ip(f|n)s)\/((\w+).*)/,u=/^\/(ip(f|n)s)\/((\w+).*)/,l=/^https?:\/\/([^/]+)\.(ip(?:f|n)s)\.[^/]+/;function f(e){try{return new c(e),!0}catch(e){return!1}}function d(e){if(!e)return!1;if(r.isMultiaddr(e))return!0;try{return new r(e),!0}catch(e){return!1}}function m(e,n,t=1,i=4){const a=x(e);if(!a)return!1;const o=a.match(n);if(!o)return!1;if("ipfs"!==o[t])return!1;let r=o[i];return r&&n===l&&(r=r.toLowerCase()),f(r)}function v(e,n,t=1,i){const a=x(e);if(!a)return!1;const o=a.match(n);if(!o)return!1;if("ipns"!==o[t])return!1;if(i&&n===l){let e=o[i];return e=e.toLowerCase(),f(e)}return!0}function h(e){return"string"==typeof e}function x(e){return Buffer.isBuffer(e)?i.encode(e):!!h(e)&&e}const b=e=>m(e,l,2,1),g=e=>v(e,l,2,1);e.exports={multihash:function(e){const n=x(e);try{const e=Buffer.from(i.decode(n));return a.decode(e),!0}catch(e){return!1}},multiaddr:d,peerMultiaddr:function(e){return d(e)&&s.IPFS.matches(e)},cid:f,base32cid:e=>"base32"===function(e){try{return o.isEncoded(e)}catch(e){return!1}}(e)&&f(e),ipfsSubdomain:b,ipnsSubdomain:g,subdomain:e=>b(e)||g(e),subdomainPattern:l,ipfsUrl:e=>m(e,p),ipnsUrl:e=>v(e,p),url:e=>m(e,p)||v(e,p),urlPattern:p,ipfsPath:e=>m(e,u),ipnsPath:e=>v(e,u),path:e=>m(e,u)||v(e,u),pathPattern:u,urlOrPath:e=>m(e,p)||v(e,p)||m(e,u)||v(e,u),cidPath:e=>h(e)&&!f(e)&&m(`/ipfs/${e}`,u)}},function(e){e.exports=JSON.parse('{"identity":0,"ip4":4,"tcp":6,"sha1":17,"sha2-256":18,"sha2-512":19,"sha3-512":20,"sha3-384":21,"sha3-256":22,"sha3-224":23,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,"dccp":33,"murmur3-128":34,"murmur3-32":35,"ip6":41,"ip6zone":42,"path":47,"multicodec":48,"multihash":49,"multiaddr":50,"multibase":51,"dns":53,"dns4":54,"dns6":55,"dnsaddr":56,"protobuf":80,"cbor":81,"raw":85,"dbl-sha2-256":86,"rlp":96,"bencode":99,"dag-pb":112,"dag-cbor":113,"libp2p-key":114,"git-raw":120,"torrent-info":123,"torrent-file":124,"leofcoin-block":129,"leofcoin-tx":130,"leofcoin-pr":131,"sctp":132,"eth-block":144,"eth-block-list":145,"eth-tx-trie":146,"eth-tx":147,"eth-tx-receipt-trie":148,"eth-tx-receipt":149,"eth-state-trie":150,"eth-account-snapshot":151,"eth-storage-trie":152,"bitcoin-block":176,"bitcoin-tx":177,"zcash-block":192,"zcash-tx":193,"stellar-block":208,"stellar-tx":209,"md4":212,"md5":213,"bmt":214,"decred-block":224,"decred-tx":225,"ipld-ns":226,"ipfs-ns":227,"swarm-ns":228,"ipns-ns":229,"zeronet":230,"ed25519-pub":237,"dash-block":240,"dash-tx":241,"swarm-manifest":250,"swarm-feed":251,"udp":273,"p2p-webrtc-star":275,"p2p-webrtc-direct":276,"p2p-stardust":277,"p2p-circuit":290,"dag-json":297,"udt":301,"utp":302,"unix":400,"p2p":421,"ipfs":421,"https":443,"onion":444,"onion3":445,"garlic64":446,"garlic32":447,"tls":448,"quic":460,"ws":477,"wss":478,"p2p-websocket-star":479,"http":480,"json":512,"messagepack":513,"x11":4352,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"skein256-8":45825,"skein256-16":45826,"skein256-24":45827,"skein256-32":45828,"skein256-40":45829,"skein256-48":45830,"skein256-56":45831,"skein256-64":45832,"skein256-72":45833,"skein256-80":45834,"skein256-88":45835,"skein256-96":45836,"skein256-104":45837,"skein256-112":45838,"skein256-120":45839,"skein256-128":45840,"skein256-136":45841,"skein256-144":45842,"skein256-152":45843,"skein256-160":45844,"skein256-168":45845,"skein256-176":45846,"skein256-184":45847,"skein256-192":45848,"skein256-200":45849,"skein256-208":45850,"skein256-216":45851,"skein256-224":45852,"skein256-232":45853,"skein256-240":45854,"skein256-248":45855,"skein256-256":45856,"skein512-8":45857,"skein512-16":45858,"skein512-24":45859,"skein512-32":45860,"skein512-40":45861,"skein512-48":45862,"skein512-56":45863,"skein512-64":45864,"skein512-72":45865,"skein512-80":45866,"skein512-88":45867,"skein512-96":45868,"skein512-104":45869,"skein512-112":45870,"skein512-120":45871,"skein512-128":45872,"skein512-136":45873,"skein512-144":45874,"skein512-152":45875,"skein512-160":45876,"skein512-168":45877,"skein512-176":45878,"skein512-184":45879,"skein512-192":45880,"skein512-200":45881,"skein512-208":45882,"skein512-216":45883,"skein512-224":45884,"skein512-232":45885,"skein512-240":45886,"skein512-248":45887,"skein512-256":45888,"skein512-264":45889,"skein512-272":45890,"skein512-280":45891,"skein512-288":45892,"skein512-296":45893,"skein512-304":45894,"skein512-312":45895,"skein512-320":45896,"skein512-328":45897,"skein512-336":45898,"skein512-344":45899,"skein512-352":45900,"skein512-360":45901,"skein512-368":45902,"skein512-376":45903,"skein512-384":45904,"skein512-392":45905,"skein512-400":45906,"skein512-408":45907,"skein512-416":45908,"skein512-424":45909,"skein512-432":45910,"skein512-440":45911,"skein512-448":45912,"skein512-456":45913,"skein512-464":45914,"skein512-472":45915,"skein512-480":45916,"skein512-488":45917,"skein512-496":45918,"skein512-504":45919,"skein512-512":45920,"skein1024-8":45921,"skein1024-16":45922,"skein1024-24":45923,"skein1024-32":45924,"skein1024-40":45925,"skein1024-48":45926,"skein1024-56":45927,"skein1024-64":45928,"skein1024-72":45929,"skein1024-80":45930,"skein1024-88":45931,"skein1024-96":45932,"skein1024-104":45933,"skein1024-112":45934,"skein1024-120":45935,"skein1024-128":45936,"skein1024-136":45937,"skein1024-144":45938,"skein1024-152":45939,"skein1024-160":45940,"skein1024-168":45941,"skein1024-176":45942,"skein1024-184":45943,"skein1024-192":45944,"skein1024-200":45945,"skein1024-208":45946,"skein1024-216":45947,"skein1024-224":45948,"skein1024-232":45949,"skein1024-240":45950,"skein1024-248":45951,"skein1024-256":45952,"skein1024-264":45953,"skein1024-272":45954,"skein1024-280":45955,"skein1024-288":45956,"skein1024-296":45957,"skein1024-304":45958,"skein1024-312":45959,"skein1024-320":45960,"skein1024-328":45961,"skein1024-336":45962,"skein1024-344":45963,"skein1024-352":45964,"skein1024-360":45965,"skein1024-368":45966,"skein1024-376":45967,"skein1024-384":45968,"skein1024-392":45969,"skein1024-400":45970,"skein1024-408":45971,"skein1024-416":45972,"skein1024-424":45973,"skein1024-432":45974,"skein1024-440":45975,"skein1024-448":45976,"skein1024-456":45977,"skein1024-464":45978,"skein1024-472":45979,"skein1024-480":45980,"skein1024-488":45981,"skein1024-496":45982,"skein1024-504":45983,"skein1024-512":45984,"skein1024-520":45985,"skein1024-528":45986,"skein1024-536":45987,"skein1024-544":45988,"skein1024-552":45989,"skein1024-560":45990,"skein1024-568":45991,"skein1024-576":45992,"skein1024-584":45993,"skein1024-592":45994,"skein1024-600":45995,"skein1024-608":45996,"skein1024-616":45997,"skein1024-624":45998,"skein1024-632":45999,"skein1024-640":46000,"skein1024-648":46001,"skein1024-656":46002,"skein1024-664":46003,"skein1024-672":46004,"skein1024-680":46005,"skein1024-688":46006,"skein1024-696":46007,"skein1024-704":46008,"skein1024-712":46009,"skein1024-720":46010,"skein1024-728":46011,"skein1024-736":46012,"skein1024-744":46013,"skein1024-752":46014,"skein1024-760":46015,"skein1024-768":46016,"skein1024-776":46017,"skein1024-784":46018,"skein1024-792":46019,"skein1024-800":46020,"skein1024-808":46021,"skein1024-816":46022,"skein1024-824":46023,"skein1024-832":46024,"skein1024-840":46025,"skein1024-848":46026,"skein1024-856":46027,"skein1024-864":46028,"skein1024-872":46029,"skein1024-880":46030,"skein1024-888":46031,"skein1024-896":46032,"skein1024-904":46033,"skein1024-912":46034,"skein1024-920":46035,"skein1024-928":46036,"skein1024-936":46037,"skein1024-944":46038,"skein1024-952":46039,"skein1024-960":46040,"skein1024-968":46041,"skein1024-976":46042,"skein1024-984":46043,"skein1024-992":46044,"skein1024-1000":46045,"skein1024-1008":46046,"skein1024-1016":46047,"skein1024-1024":46048,"holochain-adr-v0":8417572,"holochain-adr-v1":8483108,"holochain-key-v0":9728292,"holochain-key-v1":9793828,"holochain-sig-v0":10645796,"holochain-sig-v1":10711332}')},function(e,n){e.exports=require("fs")},function(e,n,t){var i=t(16),a=t(6),o=t(39);e.exports=function(e){return function(n,t,r){var s,c=i(n),p=a(c.length),u=o(r,p);if(e&&t!=t){for(;p>u;)if((s=c[u++])!=s)return!0}else for(;p>u;u++)if((e||u in c)&&c[u]===t)return e||u||0;return!e&&-1}}},function(e,n){n.f=Object.getOwnPropertySymbols},function(e,n,t){var i=t(21);e.exports=Array.isArray||function(e){return"Array"==i(e)}},function(e,n,t){var i=t(22),a=t(28);e.exports=function(e){return function(n,t){var o,r,s=String(a(n)),c=i(t),p=s.length;return c<0||c>=p?e?"":void 0:(o=s.charCodeAt(c))<55296||o>56319||c+1===p||(r=s.charCodeAt(c+1))<56320||r>57343?e?s.charAt(c):o:e?s.slice(c,c+2):r-56320+(o-55296<<10)+65536}}},function(e,n,t){var i=t(4),a=t(21),o=t(5)("match");e.exports=function(e){var n;return i(e)&&(void 0!==(n=e[o])?!!n:"RegExp"==a(e))}},function(e,n,t){var i=t(5)("iterator"),a=!1;try{var o=[7][i]();o.return=function(){a=!0},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,n){if(!n&&!a)return!1;var t=!1;try{var o=[7],r=o[i]();r.next=function(){return{done:t=!0}},o[i]=function(){return r},e(o)}catch(e){}return t}},function(e,n,t){"use strict";var i=t(48),a=RegExp.prototype.exec;e.exports=function(e,n){var t=e.exec;if("function"==typeof t){var o=t.call(e,n);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==i(e))throw new TypeError("RegExp#exec called on incompatible receiver");return a.call(e,n)}},function(e,n,t){"use strict";t(135);var i=t(12),a=t(11),o=t(3),r=t(28),s=t(5),c=t(99),p=s("species"),u=!o((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),l=function(){var e=/(?:)/,n=e.exec;e.exec=function(){return n.apply(this,arguments)};var t="ab".split(e);return 2===t.length&&"a"===t[0]&&"b"===t[1]}();e.exports=function(e,n,t){var f=s(e),d=!o((function(){var n={};return n[f]=function(){return 7},7!=""[e](n)})),m=d?!o((function(){var n=!1,t=/a/;return t.exec=function(){return n=!0,null},"split"===e&&(t.constructor={},t.constructor[p]=function(){return t}),t[f](""),!n})):void 0;if(!d||!m||"replace"===e&&!u||"split"===e&&!l){var v=/./[f],h=t(r,f,""[e],(function(e,n,t,i,a){return n.exec===c?d&&!a?{done:!0,value:v.call(n,t,i)}:{done:!0,value:e.call(t,n,i)}:{done:!1}})),x=h[0],b=h[1];i(String.prototype,e,x),a(RegExp.prototype,f,2==n?function(e,n){return b.call(e,this,n)}:function(e){return b.call(e,this)})}}},function(e,n,t){var i=t(2).navigator;e.exports=i&&i.userAgent||""},function(e,n,t){"use strict";var i=t(2),a=t(0),o=t(12),r=t(45),s=t(34),c=t(44),p=t(43),u=t(4),l=t(3),f=t(65),d=t(47),m=t(85);e.exports=function(e,n,t,v,h,x){var b=i[e],g=b,k=h?"set":"add",y=g&&g.prototype,w={},S=function(e){var n=y[e];o(y,e,"delete"==e||"has"==e?function(e){return!(x&&!u(e))&&n.call(this,0===e?0:e)}:"get"==e?function(e){return x&&!u(e)?void 0:n.call(this,0===e?0:e)}:"add"==e?function(e){return n.call(this,0===e?0:e),this}:function(e,t){return n.call(this,0===e?0:e,t),this})};if("function"==typeof g&&(x||y.forEach&&!l((function(){(new g).entries().next()})))){var _=new g,j=_[k](x?{}:-0,1)!=_,E=l((function(){_.has(1)})),C=f((function(e){new g(e)})),O=!x&&l((function(){for(var e=new g,n=5;n--;)e[k](n,n);return!e.has(-0)}));C||((g=n((function(n,t){p(n,g,e);var i=m(new b,n,g);return null!=t&&c(t,h,i[k],i),i}))).prototype=y,y.constructor=g),(E||O)&&(S("delete"),S("has"),h&&S("get")),(O||j)&&S(k),x&&y.clear&&delete y.clear}else g=v.getConstructor(n,e,h,k),r(g.prototype,t),s.NEED=!0;return d(g,e),w[e]=g,a(a.G+a.W+a.F*(g!=b),w),x||v.setStrong(g,e,h),g}},function(e,n,t){for(var i,a=t(2),o=t(11),r=t(37),s=r("typed_array"),c=r("view"),p=!(!a.ArrayBuffer||!a.DataView),u=p,l=0,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(i=a[f[l++]])?(o(i.prototype,s,!0),o(i.prototype,c,!0)):u=!1;e.exports={ABV:p,CONSTR:u,TYPED:s,VIEW:c}},function(e,n,t){"use strict";e.exports=t(33)||!t(3)((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete t(2)[e]}))},function(e,n,t){"use strict";var i=t(0);e.exports=function(e){i(i.S,e,{of:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return new this(n)}})}},function(e,n,t){"use strict";var i=t(0),a=t(10),o=t(20),r=t(44);e.exports=function(e){i(i.S,e,{from:function(e){var n,t,i,s,c=arguments[1];return a(this),(n=void 0!==c)&&a(c),null==e?new this:(t=[],n?(i=0,s=o(c,arguments[2],2),r(e,!1,(function(e){t.push(s(e,i++))}))):r(e,!1,t.push,t),new this(t))}})}},function(e,n){e.exports=require("stream")},function(e,n){e.exports=require("util")},function(e,n,t){var i=t(161);e.exports=i("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},function(e,n){e.exports=require("path")},function(e,n,t){var i=t(4),a=t(2).document,o=i(a)&&i(a.createElement);e.exports=function(e){return o?a.createElement(e):{}}},function(e,n,t){var i=t(2),a=t(19),o=t(33),r=t(117),s=t(8).f;e.exports=function(e){var n=a.Symbol||(a.Symbol=o?{}:i.Symbol||{});"_"==e.charAt(0)||e in n||s(n,e,{value:r.f(e)})}},function(e,n,t){var i=t(52)("keys"),a=t(37);e.exports=function(e){return i[e]||(i[e]=a(e))}},function(e,n){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,n,t){var i=t(2).document;e.exports=i&&i.documentElement},function(e,n,t){var i=t(4),a=t(1),o=function(e,n){if(a(e),!i(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,i){try{(i=t(20)(Function.call,t(17).f(Object.prototype,"__proto__").set,2))(e,[]),n=!(e instanceof Array)}catch(e){n=!0}return function(e,t){return o(e,t),n?e.__proto__=t:i(e,t),e}}({},!1):void 0),check:o}},function(e,n){e.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(e,n,t){var i=t(4),a=t(83).set;e.exports=function(e,n,t){var o,r=n.constructor;return r!==t&&"function"==typeof r&&(o=r.prototype)!==t.prototype&&i(o)&&a&&a(e,o),e}},function(e,n,t){"use strict";var i=t(22),a=t(28);e.exports=function(e){var n=String(a(this)),t="",o=i(e);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(n+=n))1&o&&(t+=n);return t}},function(e,n){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,n){var t=Math.expm1;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:t},function(e,n,t){"use strict";var i=t(33),a=t(0),o=t(12),r=t(11),s=t(50),c=t(90),p=t(47),u=t(18),l=t(5)("iterator"),f=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,n,t,m,v,h,x){c(t,n,m);var b,g,k,y=function(e){if(!f&&e in j)return j[e];switch(e){case"keys":case"values":return function(){return new t(this,e)}}return function(){return new t(this,e)}},w=n+" Iterator",S="values"==v,_=!1,j=e.prototype,E=j[l]||j["@@iterator"]||v&&j[v],C=E||y(v),O=v?S?y("entries"):C:void 0,A="Array"==n&&j.entries||E;if(A&&(k=u(A.call(new e)))!==Object.prototype&&k.next&&(p(k,w,!0),i||"function"==typeof k[l]||r(k,l,d)),S&&E&&"values"!==E.name&&(_=!0,C=function(){return E.call(this)}),i&&!x||!f&&!_&&j[l]||r(j,l,C),s[n]=C,s[w]=d,v)if(b={values:S?C:y("values"),keys:h?C:y("keys"),entries:O},x)for(g in b)g in j||o(j,g,b[g]);else a(a.P+a.F*(f||_),n,b);return b}},function(e,n,t){"use strict";var i=t(40),a=t(36),o=t(47),r={};t(11)(r,t(5)("iterator"),(function(){return this})),e.exports=function(e,n,t){e.prototype=i(r,{next:a(1,t)}),o(e,n+" Iterator")}},function(e,n,t){var i=t(64),a=t(28);e.exports=function(e,n,t){if(i(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(a(e))}},function(e,n,t){var i=t(5)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[i]=!1,!"/./"[e](n)}catch(e){}}return!0}},function(e,n,t){var i=t(50),a=t(5)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||o[a]===e)}},function(e,n,t){"use strict";var i=t(8),a=t(36);e.exports=function(e,n,t){n in e?i.f(e,n,a(0,t)):e[n]=t}},function(e,n,t){var i=t(48),a=t(5)("iterator"),o=t(50);e.exports=t(19).getIteratorMethod=function(e){if(null!=e)return e[a]||e["@@iterator"]||o[i(e)]}},function(e,n,t){var i=t(267);e.exports=function(e,n){return new(i(e))(n)}},function(e,n,t){"use strict";var i=t(9),a=t(39),o=t(6);e.exports=function(e){for(var n=i(this),t=o(n.length),r=arguments.length,s=a(r>1?arguments[1]:void 0,t),c=r>2?arguments[2]:void 0,p=void 0===c?t:a(c,t);p>s;)n[s++]=e;return n}},function(e,n,t){"use strict";var i=t(35),a=t(134),o=t(50),r=t(16);e.exports=t(89)(Array,"Array",(function(e,n){this._t=r(e),this._i=0,this._k=n}),(function(){var e=this._t,n=this._k,t=this._i++;return!e||t>=e.length?(this._t=void 0,a(1)):a(0,"keys"==n?t:"values"==n?e[t]:[t,e[t]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(e,n,t){"use strict";var i,a,o=t(55),r=RegExp.prototype.exec,s=String.prototype.replace,c=r,p=(i=/a/,a=/b*/g,r.call(i,"a"),r.call(a,"a"),0!==i.lastIndex||0!==a.lastIndex),u=void 0!==/()??/.exec("")[1];(p||u)&&(c=function(e){var n,t,i,a,c=this;return u&&(t=new RegExp("^"+c.source+"$(?!\\s)",o.call(c))),p&&(n=c.lastIndex),i=r.call(c,e),p&&i&&(c.lastIndex=c.global?i.index+i[0].length:n),u&&i&&i.length>1&&s.call(i[0],t,(function(){for(a=1;at;)n.push(arguments[t++]);return x[++h]=function(){s("function"==typeof e?e:Function(e),n)},i(h),h},d=function(e){delete x[e]},"process"==t(21)(l)?i=function(e){l.nextTick(r(b,e,1))}:v&&v.now?i=function(e){v.now(r(b,e,1))}:m?(o=(a=new m).port2,a.port1.onmessage=g,i=r(o.postMessage,o,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(i=function(e){u.postMessage(e+"","*")},u.addEventListener("message",g,!1)):i="onreadystatechange"in p("script")?function(e){c.appendChild(p("script")).onreadystatechange=function(){c.removeChild(this),b.call(e)}}:function(e){setTimeout(r(b,e,1),0)}),e.exports={set:f,clear:d}},function(e,n,t){var i=t(2),a=t(101).set,o=i.MutationObserver||i.WebKitMutationObserver,r=i.process,s=i.Promise,c="process"==t(21)(r);e.exports=function(){var e,n,t,p=function(){var i,a;for(c&&(i=r.domain)&&i.exit();e;){a=e.fn,e=e.next;try{a()}catch(i){throw e?t():n=void 0,i}}n=void 0,i&&i.enter()};if(c)t=function(){r.nextTick(p)};else if(!o||i.navigator&&i.navigator.standalone)if(s&&s.resolve){var u=s.resolve(void 0);t=function(){u.then(p)}}else t=function(){a.call(i,p)};else{var l=!0,f=document.createTextNode("");new o(p).observe(f,{characterData:!0}),t=function(){f.data=l=!l}}return function(i){var a={fn:i,next:void 0};n&&(n.next=a),e||(e=a,t()),n=a}}},function(e,n,t){"use strict";var i=t(10);function a(e){var n,t;this.promise=new e((function(e,i){if(void 0!==n||void 0!==t)throw TypeError("Bad Promise constructor");n=e,t=i})),this.resolve=i(n),this.reject=i(t)}e.exports.f=function(e){return new a(e)}},function(e,n,t){"use strict";var i=t(2),a=t(7),o=t(33),r=t(70),s=t(11),c=t(45),p=t(3),u=t(43),l=t(22),f=t(6),d=t(144),m=t(41).f,v=t(8).f,h=t(97),x=t(47),b=i.ArrayBuffer,g=i.DataView,k=i.Math,y=i.RangeError,w=i.Infinity,S=b,_=k.abs,j=k.pow,E=k.floor,C=k.log,O=k.LN2,A=a?"_b":"buffer",M=a?"_l":"byteLength",P=a?"_o":"byteOffset";function F(e,n,t){var i,a,o,r=new Array(t),s=8*t-n-1,c=(1<>1,u=23===n?j(2,-24)-j(2,-77):0,l=0,f=e<0||0===e&&1/e<0?1:0;for((e=_(e))!=e||e===w?(a=e!=e?1:0,i=c):(i=E(C(e)/O),e*(o=j(2,-i))<1&&(i--,o*=2),(e+=i+p>=1?u/o:u*j(2,1-p))*o>=2&&(i++,o/=2),i+p>=c?(a=0,i=c):i+p>=1?(a=(e*o-1)*j(2,n),i+=p):(a=e*j(2,p-1)*j(2,n),i=0));n>=8;r[l++]=255&a,a/=256,n-=8);for(i=i<0;r[l++]=255&i,i/=256,s-=8);return r[--l]|=128*f,r}function B(e,n,t){var i,a=8*t-n-1,o=(1<>1,s=a-7,c=t-1,p=e[c--],u=127&p;for(p>>=7;s>0;u=256*u+e[c],c--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=n;s>0;i=256*i+e[c],c--,s-=8);if(0===u)u=1-r;else{if(u===o)return i?NaN:p?-w:w;i+=j(2,n),u-=r}return(p?-1:1)*i*j(2,u-n)}function z(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function I(e){return[255&e]}function N(e){return[255&e,e>>8&255]}function T(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return F(e,52,8)}function R(e){return F(e,23,4)}function q(e,n,t){v(e.prototype,n,{get:function(){return this[t]}})}function D(e,n,t,i){var a=d(+t);if(a+n>e[M])throw y("Wrong index!");var o=e[A]._b,r=a+e[P],s=o.slice(r,r+n);return i?s:s.reverse()}function U(e,n,t,i,a,o){var r=d(+t);if(r+n>e[M])throw y("Wrong index!");for(var s=e[A]._b,c=r+e[P],p=i(+a),u=0;uG;)(V=W[G++])in b||s(b,V,S[V]);o||($.constructor=b)}var H=new g(new b(2)),K=g.prototype.setInt8;H.setInt8(0,2147483648),H.setInt8(1,2147483649),!H.getInt8(0)&&H.getInt8(1)||c(g.prototype,{setInt8:function(e,n){K.call(this,e,n<<24>>24)},setUint8:function(e,n){K.call(this,e,n<<24>>24)}},!0)}else b=function(e){u(this,b,"ArrayBuffer");var n=d(e);this._b=h.call(new Array(n),0),this[M]=n},g=function(e,n,t){u(this,g,"DataView"),u(e,b,"DataView");var i=e[M],a=l(n);if(a<0||a>i)throw y("Wrong offset!");if(a+(t=void 0===t?i-a:f(t))>i)throw y("Wrong length!");this[A]=e,this[P]=a,this[M]=t},a&&(q(b,"byteLength","_l"),q(g,"buffer","_b"),q(g,"byteLength","_l"),q(g,"byteOffset","_o")),c(g.prototype,{getInt8:function(e){return D(this,1,e)[0]<<24>>24},getUint8:function(e){return D(this,1,e)[0]},getInt16:function(e){var n=D(this,2,e,arguments[1]);return(n[1]<<8|n[0])<<16>>16},getUint16:function(e){var n=D(this,2,e,arguments[1]);return n[1]<<8|n[0]},getInt32:function(e){return z(D(this,4,e,arguments[1]))},getUint32:function(e){return z(D(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return B(D(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return B(D(this,8,e,arguments[1]),52,8)},setInt8:function(e,n){U(this,1,e,I,n)},setUint8:function(e,n){U(this,1,e,I,n)},setInt16:function(e,n){U(this,2,e,N,n,arguments[2])},setUint16:function(e,n){U(this,2,e,N,n,arguments[2])},setInt32:function(e,n){U(this,4,e,T,n,arguments[2])},setUint32:function(e,n){U(this,4,e,T,n,arguments[2])},setFloat32:function(e,n){U(this,4,e,R,n,arguments[2])},setFloat64:function(e,n){U(this,8,e,L,n,arguments[2])}});x(b,"ArrayBuffer"),x(g,"DataView"),s(g.prototype,r.VIEW,!0),n.ArrayBuffer=b,n.DataView=g},function(e,n,t){"use strict";var i=t(14),a=t(382),o={"Content-Type":"application/x-www-form-urlencoded"};function r(e,n){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=n)}var s,c={adapter:("undefined"!=typeof XMLHttpRequest?s=t(383):"undefined"!=typeof process&&(s=t(387)),s),transformRequest:[function(e,n){return a(n,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(r(n,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(r(n,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){c.headers[e]=i.merge(o)})),e.exports=c},function(e,n,t){"use strict";var i=t(154);e.exports=function(e,n,t,a,o){var r=new Error(e);return i(r,n,t,a,o)}},function(e,n){e.exports=require("http")},function(e,n){e.exports=require("https")},function(e,n){e.exports=require("url")},function(e,n,t){"use strict";const i=t(76),a=t(406);n.names=a.names,n.codes=a.codes,n.defaultLengths=a.defaultLengths;const o=t(51);function r(e){n.decode(e)}n.toHexString=function(e){if(!Buffer.isBuffer(e))throw new Error("must be passed a buffer");return e.toString("hex")},n.fromHexString=function(e){return Buffer.from(e,"hex")},n.toB58String=function(e){if(!Buffer.isBuffer(e))throw new Error("must be passed a buffer");return i.encode(e)},n.fromB58String=function(e){let n=e;return Buffer.isBuffer(e)&&(n=e.toString()),Buffer.from(i.decode(n))},n.decode=function(e){if(!Buffer.isBuffer(e))throw new Error("multihash must be a Buffer");if(e.length<3)throw new Error("multihash too short. must be > 3 bytes.");const t=o.decode(e);if(!n.isValidCode(t))throw new Error(`multihash unknown function code: 0x${t.toString(16)}`);e=e.slice(o.decode.bytes);const i=o.decode(e);if(i<1)throw new Error(`multihash invalid length: 0x${i.toString(16)}`);if((e=e.slice(o.decode.bytes)).length!==i)throw new Error(`multihash length inconsistent: 0x${e.toString("hex")}`);return{code:t,name:a.codes[t],length:i,digest:e}},n.encode=function(e,t,i){if(!e||void 0===t)throw new Error("multihash encode requires at least two args: digest, code");const a=n.coerceCode(t);if(!Buffer.isBuffer(e))throw new Error("digest should be a Buffer");if(null==i&&(i=e.length),i&&e.length!==i)throw new Error("digest length should be equal to specified length.");return Buffer.concat([Buffer.from(o.encode(a)),Buffer.from(o.encode(i)),e])},n.coerceCode=function(e){let t=e;if("string"==typeof e){if(void 0===a.names[e])throw new Error(`Unrecognized hash function named: ${e}`);t=a.names[e]}if("number"!=typeof t)throw new Error(`Hash function code should be a number. Got: ${t}`);if(void 0===a.codes[t]&&!n.isAppCode(t))throw new Error(`Unrecognized function code: ${t}`);return t},n.isAppCode=function(e){return e>0&&e<16},n.isValidCode=function(e){return!!n.isAppCode(e)||!!a.codes[e]},n.validate=r,n.prefix=function(e){return r(e),e.slice(0,2)}},function(e,n,t){"use strict";function i(e){if("number"==typeof e){if(i.codes[e])return i.codes[e];throw new Error("no protocol with code: "+e)}if("string"==typeof e||e instanceof String){if(i.names[e])return i.names[e];throw new Error("no protocol with name: "+e)}throw new Error("invalid protocol id type: "+e)}const a=-1;function o(e,n,t,i,a){return{code:e,size:n,name:t,resolvable:Boolean(i),path:Boolean(a)}}i.lengthPrefixedVarSize=a,i.V=a,i.table=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,a,"ip6zone"],[53,a,"dns","resolvable"],[54,a,"dns4","resolvable"],[55,a,"dns6","resolvable"],[56,a,"dnsaddr","resolvable"],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,a,"unix",!1,"path"],[421,a,"ipfs"],[421,a,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,a,"garlic64"],[460,0,"quic"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"]],i.names={},i.codes={},i.table.map(e=>{const n=o.apply(null,e);i.codes[n.code]=n,i.names[n.name]=n}),i.object=o,e.exports=i},function(e,n,t){"use strict";const i=t(110),a=t(163),o=t(420),r=t(58),s=t(425);class c{constructor(e,n,t,r){if(p.isCID(e)){const n=e;return this.version=n.version,this.codec=n.codec,this.multihash=Buffer.from(n.multihash),void(this.multibaseName=n.multibaseName||(0===n.version?"base58btc":"base32"))}if("string"==typeof e){const n=a.isEncoded(e);if(n){const t=a.decode(e);this.version=parseInt(t.slice(0,1).toString("hex"),16),this.codec=o.getCodec(t.slice(1)),this.multihash=o.rmPrefix(t.slice(1)),this.multibaseName=n}else this.version=0,this.codec="dag-pb",this.multihash=i.fromB58String(e),this.multibaseName="base58btc";return c.validateCID(this),void Object.defineProperty(this,"string",{value:e})}if(Buffer.isBuffer(e)){const n=e.slice(0,1),t=parseInt(n.toString("hex"),16);if(1===t){const n=e;this.version=t,this.codec=o.getCodec(n.slice(1)),this.multihash=o.rmPrefix(n.slice(1)),this.multibaseName="base32"}else this.version=0,this.codec="dag-pb",this.multihash=e,this.multibaseName="base58btc";c.validateCID(this)}else this.version=e,this.codec=n,this.multihash=t,this.multibaseName=r||(0===e?"base58btc":"base32"),c.validateCID(this)}get buffer(){let e=this._buffer;if(!e){if(0===this.version)e=this.multihash;else{if(1!==this.version)throw new Error("unsupported version");e=Buffer.concat([Buffer.from("01","hex"),o.getCodeVarint(this.codec),this.multihash])}Object.defineProperty(this,"_buffer",{value:e})}return e}get prefix(){return Buffer.concat([Buffer.from(`0${this.version}`,"hex"),o.getCodeVarint(this.codec),i.prefix(this.multihash)])}toV0(){if("dag-pb"!==this.codec)throw new Error("Cannot convert a non dag-pb CID to CIDv0");const{name:e,length:n}=i.decode(this.multihash);if("sha2-256"!==e)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");if(32!==n)throw new Error("Cannot convert non 32 byte multihash CID to CIDv0");return new p(0,this.codec,this.multihash)}toV1(){return new p(1,this.codec,this.multihash)}toBaseEncodedString(e=this.multibaseName){if(this.string&&e===this.multibaseName)return this.string;let n=null;if(0===this.version){if("base58btc"!==e)throw new Error("not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()");n=i.toB58String(this.multihash)}else{if(1!==this.version)throw new Error("unsupported version");n=a.encode(e,this.buffer).toString()}return e===this.multibaseName&&Object.defineProperty(this,"string",{value:n}),n}toString(e){return this.toBaseEncodedString(e)}toJSON(){return{codec:this.codec,version:this.version,hash:this.multihash}}equals(e){return this.codec===e.codec&&this.version===e.version&&this.multihash.equals(e.multihash)}static validateCID(e){const n=s.checkCIDComponents(e);if(n)throw new Error(n)}}const p=t(166)(c,{className:"CID",symbolName:"@ipld/js-cid/CID"});p.codecs=r,e.exports=p},function(e,n,t){var i=t(59),a=t(77);n.readdirr=function(e,n){var t=[],o=[];t.push(e),function e(r){if(r==t.length)return n(null,t,o);i.readdir(t[r],(function(s,c){if(s)return n(s);!function(e,n,r){!function s(c){if(c==n.length)return r();var p=a.join(e,n[c]);i.stat(p,(function(e,n){if(e)return r(e);n.isDirectory()?t.push(p):o.push(p),s(++c)}))}(0)}(t[r],c,(function(t){if(t)return n(t);e(++r)}))}))}(0)}},function(e,n,t){var i=t(59),a=t(113).readdirr;function o(e,n){return e>n?-1:ec;)i(s,t=n[c++])&&(~o(p,t)||p.push(t));return p}},function(e,n,t){var i=t(8),a=t(1),o=t(38);e.exports=t(7)?Object.defineProperties:function(e,n){a(e);for(var t,r=o(n),s=r.length,c=0;s>c;)i.f(e,t=r[c++],n[t]);return e}},function(e,n,t){var i=t(16),a=t(41).f,o={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return r&&"[object Window]"==o.call(e)?function(e){try{return a(e)}catch(e){return r.slice()}}(e):a(i(e))}},function(e,n,t){"use strict";var i=t(7),a=t(38),o=t(61),r=t(54),s=t(9),c=t(53),p=Object.assign;e.exports=!p||t(3)((function(){var e={},n={},t=Symbol(),i="abcdefghijklmnopqrst";return e[t]=7,i.split("").forEach((function(e){n[e]=e})),7!=p({},e)[t]||Object.keys(p({},n)).join("")!=i}))?function(e,n){for(var t=s(e),p=arguments.length,u=1,l=o.f,f=r.f;p>u;)for(var d,m=c(arguments[u++]),v=l?a(m).concat(l(m)):a(m),h=v.length,x=0;h>x;)d=v[x++],i&&!f.call(m,d)||(t[d]=m[d]);return t}:p},function(e,n){e.exports=Object.is||function(e,n){return e===n?0!==e||1/e==1/n:e!=e&&n!=n}},function(e,n,t){"use strict";var i=t(10),a=t(4),o=t(124),r=[].slice,s={},c=function(e,n,t){if(!(n in s)){for(var i=[],a=0;a>>0||(r.test(t)?16:10))}:i},function(e,n,t){var i=t(2).parseFloat,a=t(49).trim;e.exports=1/i(t(84)+"-0")!=-1/0?function(e){var n=a(String(e),3),t=i(n);return 0===t&&"-"==n.charAt(0)?-0:t}:i},function(e,n,t){var i=t(21);e.exports=function(e,n){if("number"!=typeof e&&"Number"!=i(e))throw TypeError(n);return+e}},function(e,n,t){var i=t(4),a=Math.floor;e.exports=function(e){return!i(e)&&isFinite(e)&&a(e)===e}},function(e,n){e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(e,n,t){var i=t(87),a=Math.pow,o=a(2,-52),r=a(2,-23),s=a(2,127)*(2-r),c=a(2,-126);e.exports=Math.fround||function(e){var n,t,a=Math.abs(e),p=i(e);return as||t!=t?p*(1/0):p*t}},function(e,n,t){var i=t(1);e.exports=function(e,n,t,a){try{return a?n(i(t)[0],t[1]):n(t)}catch(n){var o=e.return;throw void 0!==o&&i(o.call(e)),n}}},function(e,n,t){var i=t(10),a=t(9),o=t(53),r=t(6);e.exports=function(e,n,t,s,c){i(n);var p=a(e),u=o(p),l=r(p.length),f=c?l-1:0,d=c?-1:1;if(t<2)for(;;){if(f in u){s=u[f],f+=d;break}if(f+=d,c?f<0:l<=f)throw TypeError("Reduce of empty array with no initial value")}for(;c?f>=0:l>f;f+=d)f in u&&(s=n(s,u[f],f,p));return s}},function(e,n,t){"use strict";var i=t(9),a=t(39),o=t(6);e.exports=[].copyWithin||function(e,n){var t=i(this),r=o(t.length),s=a(e,r),c=a(n,r),p=arguments.length>2?arguments[2]:void 0,u=Math.min((void 0===p?r:a(p,r))-c,r-s),l=1;for(c0;)c in t?t[s]=t[c]:delete t[s],s+=l,c+=l;return t}},function(e,n){e.exports=function(e,n){return{value:n,done:!!e}}},function(e,n,t){"use strict";var i=t(99);t(0)({target:"RegExp",proto:!0,forced:i!==/./.exec},{exec:i})},function(e,n,t){t(7)&&"g"!=/./g.flags&&t(8).f(RegExp.prototype,"flags",{configurable:!0,get:t(55)})},function(e,n){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,n,t){var i=t(1),a=t(4),o=t(103);e.exports=function(e,n){if(i(e),a(n)&&n.constructor===e)return n;var t=o.f(e);return(0,t.resolve)(n),t.promise}},function(e,n,t){"use strict";var i=t(140),a=t(46);e.exports=t(69)("Map",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(e){var n=i.getEntry(a(this,"Map"),e);return n&&n.v},set:function(e,n){return i.def(a(this,"Map"),0===e?0:e,n)}},i,!0)},function(e,n,t){"use strict";var i=t(8).f,a=t(40),o=t(45),r=t(20),s=t(43),c=t(44),p=t(89),u=t(134),l=t(42),f=t(7),d=t(34).fastKey,m=t(46),v=f?"_s":"size",h=function(e,n){var t,i=d(n);if("F"!==i)return e._i[i];for(t=e._f;t;t=t.n)if(t.k==n)return t};e.exports={getConstructor:function(e,n,t,p){var u=e((function(e,i){s(e,u,n,"_i"),e._t=n,e._i=a(null),e._f=void 0,e._l=void 0,e[v]=0,null!=i&&c(i,t,e[p],e)}));return o(u.prototype,{clear:function(){for(var e=m(this,n),t=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete t[i.i];e._f=e._l=void 0,e[v]=0},delete:function(e){var t=m(this,n),i=h(t,e);if(i){var a=i.n,o=i.p;delete t._i[i.i],i.r=!0,o&&(o.n=a),a&&(a.p=o),t._f==i&&(t._f=a),t._l==i&&(t._l=o),t[v]--}return!!i},forEach:function(e){m(this,n);for(var t,i=r(e,arguments.length>1?arguments[1]:void 0,3);t=t?t.n:this._f;)for(i(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!h(m(this,n),e)}}),f&&i(u.prototype,"size",{get:function(){return m(this,n)[v]}}),u},def:function(e,n,t){var i,a,o=h(e,n);return o?o.v=t:(e._l=o={i:a=d(n,!0),k:n,v:t,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[v]++,"F"!==a&&(e._i[a]=o)),e},getEntry:h,setStrong:function(e,n,t){p(e,n,(function(e,t){this._t=m(e,n),this._k=t,this._l=void 0}),(function(){for(var e=this._k,n=this._l;n&&n.r;)n=n.p;return this._t&&(this._l=n=n?n.n:this._t._f)?u(0,"keys"==e?n.k:"values"==e?n.v:[n.k,n.v]):(this._t=void 0,u(1))}),t?"entries":"values",!t,!0),l(n)}}},function(e,n,t){"use strict";var i=t(140),a=t(46);e.exports=t(69)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return i.def(a(this,"Set"),e=0===e?0:e,e)}},i)},function(e,n,t){"use strict";var i,a=t(2),o=t(30)(0),r=t(12),s=t(34),c=t(121),p=t(143),u=t(4),l=t(46),f=t(46),d=!a.ActiveXObject&&"ActiveXObject"in a,m=s.getWeak,v=Object.isExtensible,h=p.ufstore,x=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(e){if(u(e)){var n=m(e);return!0===n?h(l(this,"WeakMap")).get(e):n?n[this._i]:void 0}},set:function(e,n){return p.def(l(this,"WeakMap"),e,n)}},g=e.exports=t(69)("WeakMap",x,b,p,!0,!0);f&&d&&(c((i=p.getConstructor(x,"WeakMap")).prototype,b),s.NEED=!0,o(["delete","has","get","set"],(function(e){var n=g.prototype,t=n[e];r(n,e,(function(n,a){if(u(n)&&!v(n)){this._f||(this._f=new i);var o=this._f[e](n,a);return"set"==e?this:o}return t.call(this,n,a)}))})))},function(e,n,t){"use strict";var i=t(45),a=t(34).getWeak,o=t(1),r=t(4),s=t(43),c=t(44),p=t(30),u=t(15),l=t(46),f=p(5),d=p(6),m=0,v=function(e){return e._l||(e._l=new h)},h=function(){this.a=[]},x=function(e,n){return f(e.a,(function(e){return e[0]===n}))};h.prototype={get:function(e){var n=x(this,e);if(n)return n[1]},has:function(e){return!!x(this,e)},set:function(e,n){var t=x(this,e);t?t[1]=n:this.a.push([e,n])},delete:function(e){var n=d(this.a,(function(n){return n[0]===e}));return~n&&this.a.splice(n,1),!!~n}},e.exports={getConstructor:function(e,n,t,o){var p=e((function(e,i){s(e,p,n,"_i"),e._t=n,e._i=m++,e._l=void 0,null!=i&&c(i,t,e[o],e)}));return i(p.prototype,{delete:function(e){if(!r(e))return!1;var t=a(e);return!0===t?v(l(this,n)).delete(e):t&&u(t,this._i)&&delete t[this._i]},has:function(e){if(!r(e))return!1;var t=a(e);return!0===t?v(l(this,n)).has(e):t&&u(t,this._i)}}),p},def:function(e,n,t){var i=a(o(n),!0);return!0===i?v(e).set(n,t):i[e._i]=t,e},ufstore:v}},function(e,n,t){var i=t(22),a=t(6);e.exports=function(e){if(void 0===e)return 0;var n=i(e),t=a(n);if(n!==t)throw RangeError("Wrong length!");return t}},function(e,n,t){var i=t(41),a=t(61),o=t(1),r=t(2).Reflect;e.exports=r&&r.ownKeys||function(e){var n=i.f(o(e)),t=a.f;return t?n.concat(t(e)):n}},function(e,n,t){"use strict";var i=t(62),a=t(4),o=t(6),r=t(20),s=t(5)("isConcatSpreadable");e.exports=function e(n,t,c,p,u,l,f,d){for(var m,v,h=u,x=0,b=!!f&&r(f,d,3);x0)h=e(n,t,m,o(m.length),h,l-1)-1;else{if(h>=9007199254740991)throw TypeError();n[h]=m}h++}x++}return h}},function(e,n,t){var i=t(6),a=t(86),o=t(28);e.exports=function(e,n,t,r){var s=String(o(e)),c=s.length,p=void 0===t?" ":String(t),u=i(n);if(u<=c||""==p)return s;var l=u-c,f=a.call(p,Math.ceil(l/p.length));return f.length>l&&(f=f.slice(0,l)),r?f+s:s+f}},function(e,n,t){var i=t(7),a=t(38),o=t(16),r=t(54).f;e.exports=function(e){return function(n){for(var t,s=o(n),c=a(s),p=c.length,u=0,l=[];p>u;)t=c[u++],i&&!r.call(s,t)||l.push(e?[t,s[t]]:s[t]);return l}}},function(e,n,t){var i=t(48),a=t(150);e.exports=function(e){return function(){if(i(this)!=e)throw TypeError(e+"#toJSON isn't generic");return a(this)}}},function(e,n,t){var i=t(44);e.exports=function(e,n){var t=[];return i(e,!1,t.push,t,n),t}},function(e,n){e.exports=Math.scale||function(e,n,t,i,a){return 0===arguments.length||e!=e||n!=n||t!=t||i!=i||a!=a?NaN:e===1/0||e===-1/0?e:(e-n)*(a-i)/(t-n)+i}},function(e,n,t){"use strict";e.exports=function(e,n){return function(){for(var t=new Array(arguments.length),i=0;i=300&&e.statusCode<400){if(++this._redirectCount>this._options.maxRedirects)return void this.emit("error",new Error("Max redirects exceeded."));var t,a=this._options.headers;if(307!==e.statusCode&&!(this._options.method in p))for(t in this._options.method="GET",this._requestBodyBuffers=[],a)/^content-/i.test(t)&&delete a[t];if(!this._isRedirect)for(t in a)/^host$/i.test(t)&&delete a[t];var o=i.resolve(this._currentUrl,n);c("redirecting to",o),Object.assign(this._options,i.parse(o)),this._isRedirect=!0,this._performRequest(),e.destroy()}else e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),this._requestBodyBuffers=[]},e.exports=f({http:a,https:o}),e.exports.wrap=f},function(e,n,t){function i(e){var t;function i(){if(i.enabled){var e=i,a=+new Date,o=a-(t||a);e.diff=o,e.prev=t,e.curr=a,t=a;for(var r=new Array(arguments.length),s=0;s=255)throw new TypeError("Alphabet too long");for(var n=new Uint8Array(256),t=0;t>>0,u=new Uint8Array(r);e[t];){var l=n[e.charCodeAt(t)];if(255===l)return;for(var f=0,d=r-1;(0!==l||f>>0,u[d]=l%256>>>0,l=l/256>>>0;if(0!==l)throw new Error("Non-zero carry");o=f,t++}if(" "!==e[t]){for(var m=r-o;m!==r&&0===u[m];)m++;var v=i.allocUnsafe(a+(r-m));v.fill(0,0,a);for(var h=a;m!==r;)v[h++]=u[m++];return v}}}return{encode:function(n){if((Array.isArray(n)||n instanceof Uint8Array)&&(n=i.from(n)),!i.isBuffer(n))throw new TypeError("Expected Buffer");if(0===n.length)return"";for(var t=0,a=0,o=0,r=n.length;o!==r&&0===n[o];)o++,t++;for(var p=(r-o)*u+1>>>0,l=new Uint8Array(p);o!==r;){for(var f=n[o],d=0,m=p-1;(0!==f||d>>0,l[m]=f%s>>>0,f=f/s>>>0;if(0!==f)throw new Error("Non-zero carry");a=d,o++}for(var v=p-a;v!==p&&0===l[v];)v++;for(var h=c.repeat(t);v0&&"/"!==e.charAt(0))throw new Error(`multiaddr "${e}" must start with a "/"`);this.buffer=i.fromString(e)}else{if(!(e.buffer&&e.protos&&e.protoCodes))throw new Error("addr must be a string, Buffer, or another Multiaddr");this.buffer=i.fromBuffer(e.buffer)}}),{className:"Multiaddr",symbolName:"@multiformats/js-multiaddr/multiaddr"});u.prototype.toString=function(){return i.bufferToString(this.buffer)},u.prototype.toJSON=u.prototype.toString,u.prototype.toOptions=function(){const e={},n=this.toString().split("/");return e.family="ip4"===n[1]?"ipv4":"ipv6",e.host=n[2],e.transport=n[3],e.port=parseInt(n[4]),e},u.prototype[p]=function(){return""},u.prototype.inspect=function(){return""},u.prototype.protos=function(){return this.protoCodes().map(e=>Object.assign({},a(e)))},u.prototype.protoCodes=function(){const e=[],n=this.buffer;let t=0;for(;te.name)},u.prototype.tuples=function(){return i.bufferToTuples(this.buffer)},u.prototype.stringTuples=function(){const e=i.bufferToTuples(this.buffer);return i.tuplesToStringTuples(e)},u.prototype.encapsulate=function(e){return e=u(e),u(this.toString()+e.toString())},u.prototype.decapsulate=function(e){e=e.toString();const n=this.toString(),t=n.lastIndexOf(e);if(t<0)throw new Error("Address "+this+" does not contain subaddress: "+e);return u(n.slice(0,t))},u.prototype.decapsulateCode=function(e){const n=this.tuples();for(let t=n.length-1;t>=0;t--)if(n[t][0]===e)return u(i.tuplesToBuffer(n.slice(0,t)));return this},u.prototype.getPeerId=function(){let e=null;try{e=this.stringTuples().filter(e=>{if(e[0]===a.names.ipfs.code)return!0}).pop()[1],e=r.encode(new s(e).multihash)}catch(n){e=null}return e},u.prototype.getPath=function(){let e=null;try{e=this.stringTuples().filter(e=>{if(a(e[0]).path)return!0})[0][1]}catch(n){e=null}return e},u.prototype.equals=function(e){return this.buffer.equals(e.buffer)},u.prototype.nodeAddress=function(){const e=this.protoCodes(),n=this.protoNames(),t=this.toString().split("/").slice(1);if(t.length<4)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6}/{address}/{tcp, udp}/{port}".');if(4!==e[0]&&41!==e[0]&&54!==e[0]&&55!==e[0])throw new Error(`no protocol with name: "'${n[0]}'". Must have a valid family name: "{ip4, ip6, dns4, dns6}".`);if("tcp"!==t[2]&&"udp"!==t[2])throw new Error(`no protocol with name: "'${n[1]}'". Must have a valid transport protocol: "{tcp, udp}".`);return{family:41===e[0]||55===e[0]?6:4,address:t[1],port:parseInt(t[3])}},u.fromNodeAddress=function(e,n){if(!e)throw new Error("requires node address object");if(!n)throw new Error("requires transport protocol");const t="IPv6"===e.family?"ip6":"ip4";return u("/"+[t,e.address,n,e.port].join("/"))},u.prototype.isThinWaistAddress=function(e){const n=(e||this).protos();return 2===n.length&&((4===n[0].code||41===n[0].code)&&(6===n[1].code||273===n[1].code))},u.protocols=a,u.isName=function(e){return!!u.isMultiaddr(e)&&e.protos().some(e=>e.resolvable)},u.resolve=function(e){return u.isMultiaddr(e)&&u.isName(e)?Promise.reject(new Error("not implemented yet")):Promise.reject(Error("not a valid name"))},e.exports=u},function(e,n,t){"use strict";const i=t(51);function a(e){return parseInt(e.toString("hex"),16)}function o(e){let n=e.toString(16);return n.length%2==1&&(n="0"+n),Buffer.from(n,"hex")}e.exports={numberToBuffer:o,bufferToNumber:a,varintBufferEncode:function(e){return Buffer.from(i.encode(a(e)))},varintBufferDecode:function(e){return o(i.decode(e))},varintEncode:function(e){return Buffer.from(i.encode(e))}}},function(e,n,t){"use strict";e.exports=function(e,{className:n,symbolName:t}){const i=Symbol.for(t),a={[n]:class extends e{constructor(...e){super(...e),Object.defineProperty(this,i,{value:!0})}get[Symbol.toStringTag](){return n}}}[n];return a[`is${n}`]=e=>!(!e||!e[i]),a},e.exports.proto=function(e,{className:n,symbolName:t,withoutNew:i}){const a=Symbol.for(t),o={[n]:function(...n){if(i&&!(this instanceof o))return new o(...n);const t=e.call(this,...n)||this;return t&&!t[a]&&Object.defineProperty(t,a,{value:!0}),t}}[n];return o.prototype=Object.create(e.prototype),o.prototype.constructor=o,Object.defineProperty(o.prototype,Symbol.toStringTag,{get:()=>n}),o[`is${n}`]=e=>!(!e||!e[a]),o}},function(e,n,t){var i=t(430),a=t(75),o=t(77),r=t(107),s=t(108),c=t(109).parse,p=t(59),u=t(432),l=t(435),f=t(439);function d(e){if(!(this instanceof d))return new d;for(var n in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],i.call(this),e=e||{})this[n]=e[n]}e.exports=d,a.inherits(d,i),d.LINE_BREAK="\r\n",d.DEFAULT_CONTENT_TYPE="application/octet-stream",d.prototype.append=function(e,n,t){"string"==typeof(t=t||{})&&(t={filename:t});var o=i.prototype.append.bind(this);if("number"==typeof n&&(n=""+n),a.isArray(n))this._error(new Error("Arrays are not supported."));else{var r=this._multiPartHeader(e,n,t),s=this._multiPartFooter();o(r),o(n),o(s),this._trackLength(r,n,t)}},d.prototype._trackLength=function(e,n,t){var i=0;null!=t.knownLength?i+=+t.knownLength:Buffer.isBuffer(n)?i=n.length:"string"==typeof n&&(i=Buffer.byteLength(n)),this._valueLength+=i,this._overheadLength+=Buffer.byteLength(e)+d.LINE_BREAK.length,n&&(n.path||n.readable&&n.hasOwnProperty("httpVersion"))&&(t.knownLength||this._valuesToMeasure.push(n))},d.prototype._lengthRetriever=function(e,n){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?n(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(t,i){var a;t?n(t):(a=i.size-(e.start?e.start:0),n(null,a))})):e.hasOwnProperty("httpVersion")?n(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(t){e.pause(),n(null,+t.headers["content-length"])})),e.resume()):n("Unknown stream")},d.prototype._multiPartHeader=function(e,n,t){if("string"==typeof t.header)return t.header;var i,a=this._getContentDisposition(n,t),o=this._getContentType(n,t),r="",s={"Content-Disposition":["form-data",'name="'+e+'"'].concat(a||[]),"Content-Type":[].concat(o||[])};for(var c in"object"==typeof t.header&&f(s,t.header),s)s.hasOwnProperty(c)&&null!=(i=s[c])&&(Array.isArray(i)||(i=[i]),i.length&&(r+=c+": "+i.join("; ")+d.LINE_BREAK));return"--"+this.getBoundary()+d.LINE_BREAK+r+d.LINE_BREAK},d.prototype._getContentDisposition=function(e,n){var t,i;return"string"==typeof n.filepath?t=o.normalize(n.filepath).replace(/\\/g,"/"):n.filename||e.name||e.path?t=o.basename(n.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(t=o.basename(e.client._httpMessage.path||"")),t&&(i='filename="'+t+'"'),i},d.prototype._getContentType=function(e,n){var t=n.contentType;return!t&&e.name&&(t=u.lookup(e.name)),!t&&e.path&&(t=u.lookup(e.path)),!t&&e.readable&&e.hasOwnProperty("httpVersion")&&(t=e.headers["content-type"]),t||!n.filepath&&!n.filename||(t=u.lookup(n.filepath||n.filename)),t||"object"!=typeof e||(t=d.DEFAULT_CONTENT_TYPE),t},d.prototype._multiPartFooter=function(){return function(e){var n=d.LINE_BREAK;0===this._streams.length&&(n+=this._lastBoundary()),e(n)}.bind(this)},d.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+d.LINE_BREAK},d.prototype.getHeaders=function(e){var n,t={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t},d.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},d.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),n=this.getBoundary(),t=0,i=this._streams.length;tn?1:0}e.exports=function(e,n,t,r){var s=a(e,t);return i(e,n,s,(function t(a,o){a?r(a,o):(s.index++,s.index<(s.keyedList||e).length?i(e,n,s,t):r(null,s.results))})),o.bind(s,r)},e.exports.ascending=r,e.exports.descending=function(e,n){return-1*r(e,n)}},function(e,n,t){t(175),e.exports=t(377)},function(e,n,t){"use strict";if(t(176),t(373),t(374),global._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");global._babelPolyfill=!0;function i(e,n,t){e[n]||Object.defineProperty(e,n,{writable:!0,configurable:!0,value:t})}i(String.prototype,"padLeft","".padStart),i(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(e){[][e]&&i(Array,e,Function.call.bind([][e]))}))},function(e,n,t){t(177),t(180),t(181),t(182),t(183),t(184),t(185),t(186),t(187),t(188),t(189),t(190),t(191),t(192),t(193),t(194),t(195),t(196),t(197),t(198),t(199),t(200),t(201),t(202),t(203),t(204),t(205),t(206),t(207),t(208),t(209),t(210),t(211),t(212),t(213),t(214),t(215),t(216),t(217),t(218),t(219),t(220),t(221),t(222),t(223),t(224),t(225),t(226),t(227),t(228),t(229),t(230),t(231),t(232),t(233),t(234),t(235),t(236),t(237),t(238),t(239),t(240),t(241),t(242),t(243),t(244),t(245),t(246),t(247),t(248),t(249),t(250),t(251),t(252),t(253),t(254),t(255),t(257),t(258),t(260),t(261),t(262),t(263),t(264),t(265),t(266),t(268),t(269),t(270),t(271),t(272),t(273),t(274),t(275),t(276),t(277),t(278),t(279),t(280),t(98),t(281),t(135),t(282),t(136),t(283),t(284),t(285),t(286),t(287),t(139),t(141),t(142),t(288),t(289),t(290),t(291),t(292),t(293),t(294),t(295),t(296),t(297),t(298),t(299),t(300),t(301),t(302),t(303),t(304),t(305),t(306),t(307),t(308),t(309),t(310),t(311),t(312),t(313),t(314),t(315),t(316),t(317),t(318),t(319),t(320),t(321),t(322),t(323),t(324),t(325),t(326),t(327),t(328),t(329),t(330),t(331),t(332),t(333),t(334),t(335),t(336),t(337),t(338),t(339),t(340),t(341),t(342),t(343),t(344),t(345),t(346),t(347),t(348),t(349),t(350),t(351),t(352),t(353),t(354),t(355),t(356),t(357),t(358),t(359),t(360),t(361),t(362),t(363),t(364),t(365),t(366),t(367),t(368),t(369),t(370),t(371),t(372),e.exports=t(19)},function(e,n,t){"use strict";var i=t(2),a=t(15),o=t(7),r=t(0),s=t(12),c=t(34).KEY,p=t(3),u=t(52),l=t(47),f=t(37),d=t(5),m=t(117),v=t(79),h=t(179),x=t(62),b=t(1),g=t(4),k=t(9),y=t(16),w=t(27),S=t(36),_=t(40),j=t(120),E=t(17),C=t(61),O=t(8),A=t(38),M=E.f,P=O.f,F=j.f,B=i.Symbol,z=i.JSON,I=z&&z.stringify,N=d("_hidden"),T=d("toPrimitive"),L={}.propertyIsEnumerable,R=u("symbol-registry"),q=u("symbols"),D=u("op-symbols"),U=Object.prototype,V="function"==typeof B&&!!C.f,$=i.QObject,W=!$||!$.prototype||!$.prototype.findChild,G=o&&p((function(){return 7!=_(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a}))?function(e,n,t){var i=M(U,n);i&&delete U[n],P(e,n,t),i&&e!==U&&P(U,n,i)}:P,H=function(e){var n=q[e]=_(B.prototype);return n._k=e,n},K=V&&"symbol"==typeof B.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof B},J=function(e,n,t){return e===U&&J(D,n,t),b(e),n=w(n,!0),b(t),a(q,n)?(t.enumerable?(a(e,N)&&e[N][n]&&(e[N][n]=!1),t=_(t,{enumerable:S(0,!1)})):(a(e,N)||P(e,N,S(1,{})),e[N][n]=!0),G(e,n,t)):P(e,n,t)},Y=function(e,n){b(e);for(var t,i=h(n=y(n)),a=0,o=i.length;o>a;)J(e,t=i[a++],n[t]);return e},X=function(e){var n=L.call(this,e=w(e,!0));return!(this===U&&a(q,e)&&!a(D,e))&&(!(n||!a(this,e)||!a(q,e)||a(this,N)&&this[N][e])||n)},Z=function(e,n){if(e=y(e),n=w(n,!0),e!==U||!a(q,n)||a(D,n)){var t=M(e,n);return!t||!a(q,n)||a(e,N)&&e[N][n]||(t.enumerable=!0),t}},Q=function(e){for(var n,t=F(y(e)),i=[],o=0;t.length>o;)a(q,n=t[o++])||n==N||n==c||i.push(n);return i},ee=function(e){for(var n,t=e===U,i=F(t?D:y(e)),o=[],r=0;i.length>r;)!a(q,n=i[r++])||t&&!a(U,n)||o.push(q[n]);return o};V||(s((B=function(){if(this instanceof B)throw TypeError("Symbol is not a constructor!");var e=f(arguments.length>0?arguments[0]:void 0),n=function(t){this===U&&n.call(D,t),a(this,N)&&a(this[N],e)&&(this[N][e]=!1),G(this,e,S(1,t))};return o&&W&&G(U,e,{configurable:!0,set:n}),H(e)}).prototype,"toString",(function(){return this._k})),E.f=Z,O.f=J,t(41).f=j.f=Q,t(54).f=X,C.f=ee,o&&!t(33)&&s(U,"propertyIsEnumerable",X,!0),m.f=function(e){return H(d(e))}),r(r.G+r.W+r.F*!V,{Symbol:B});for(var ne="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),te=0;ne.length>te;)d(ne[te++]);for(var ie=A(d.store),ae=0;ie.length>ae;)v(ie[ae++]);r(r.S+r.F*!V,"Symbol",{for:function(e){return a(R,e+="")?R[e]:R[e]=B(e)},keyFor:function(e){if(!K(e))throw TypeError(e+" is not a symbol!");for(var n in R)if(R[n]===e)return n},useSetter:function(){W=!0},useSimple:function(){W=!1}}),r(r.S+r.F*!V,"Object",{create:function(e,n){return void 0===n?_(e):Y(_(e),n)},defineProperty:J,defineProperties:Y,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:ee});var oe=p((function(){C.f(1)}));r(r.S+r.F*oe,"Object",{getOwnPropertySymbols:function(e){return C.f(k(e))}}),z&&r(r.S+r.F*(!V||p((function(){var e=B();return"[null]"!=I([e])||"{}"!=I({a:e})||"{}"!=I(Object(e))}))),"JSON",{stringify:function(e){for(var n,t,i=[e],a=1;arguments.length>a;)i.push(arguments[a++]);if(t=n=i[1],(g(n)||void 0!==e)&&!K(e))return x(n)||(n=function(e,n){if("function"==typeof t&&(n=t.call(this,e,n)),!K(n))return n}),i[1]=n,I.apply(z,i)}}),B.prototype[T]||t(11)(B.prototype,T,B.prototype.valueOf),l(B,"Symbol"),l(Math,"Math",!0),l(i.JSON,"JSON",!0)},function(e,n,t){e.exports=t(52)("native-function-to-string",Function.toString)},function(e,n,t){var i=t(38),a=t(61),o=t(54);e.exports=function(e){var n=i(e),t=a.f;if(t)for(var r,s=t(e),c=o.f,p=0;s.length>p;)c.call(e,r=s[p++])&&n.push(r);return n}},function(e,n,t){var i=t(0);i(i.S,"Object",{create:t(40)})},function(e,n,t){var i=t(0);i(i.S+i.F*!t(7),"Object",{defineProperty:t(8).f})},function(e,n,t){var i=t(0);i(i.S+i.F*!t(7),"Object",{defineProperties:t(119)})},function(e,n,t){var i=t(16),a=t(17).f;t(29)("getOwnPropertyDescriptor",(function(){return function(e,n){return a(i(e),n)}}))},function(e,n,t){var i=t(9),a=t(18);t(29)("getPrototypeOf",(function(){return function(e){return a(i(e))}}))},function(e,n,t){var i=t(9),a=t(38);t(29)("keys",(function(){return function(e){return a(i(e))}}))},function(e,n,t){t(29)("getOwnPropertyNames",(function(){return t(120).f}))},function(e,n,t){var i=t(4),a=t(34).onFreeze;t(29)("freeze",(function(e){return function(n){return e&&i(n)?e(a(n)):n}}))},function(e,n,t){var i=t(4),a=t(34).onFreeze;t(29)("seal",(function(e){return function(n){return e&&i(n)?e(a(n)):n}}))},function(e,n,t){var i=t(4),a=t(34).onFreeze;t(29)("preventExtensions",(function(e){return function(n){return e&&i(n)?e(a(n)):n}}))},function(e,n,t){var i=t(4);t(29)("isFrozen",(function(e){return function(n){return!i(n)||!!e&&e(n)}}))},function(e,n,t){var i=t(4);t(29)("isSealed",(function(e){return function(n){return!i(n)||!!e&&e(n)}}))},function(e,n,t){var i=t(4);t(29)("isExtensible",(function(e){return function(n){return!!i(n)&&(!e||e(n))}}))},function(e,n,t){var i=t(0);i(i.S+i.F,"Object",{assign:t(121)})},function(e,n,t){var i=t(0);i(i.S,"Object",{is:t(122)})},function(e,n,t){var i=t(0);i(i.S,"Object",{setPrototypeOf:t(83).set})},function(e,n,t){"use strict";var i=t(48),a={};a[t(5)("toStringTag")]="z",a+""!="[object z]"&&t(12)(Object.prototype,"toString",(function(){return"[object "+i(this)+"]"}),!0)},function(e,n,t){var i=t(0);i(i.P,"Function",{bind:t(123)})},function(e,n,t){var i=t(8).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||t(7)&&i(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},function(e,n,t){"use strict";var i=t(4),a=t(18),o=t(5)("hasInstance"),r=Function.prototype;o in r||t(8).f(r,o,{value:function(e){if("function"!=typeof this||!i(e))return!1;if(!i(this.prototype))return e instanceof this;for(;e=a(e);)if(this.prototype===e)return!0;return!1}})},function(e,n,t){var i=t(0),a=t(125);i(i.G+i.F*(parseInt!=a),{parseInt:a})},function(e,n,t){var i=t(0),a=t(126);i(i.G+i.F*(parseFloat!=a),{parseFloat:a})},function(e,n,t){"use strict";var i=t(2),a=t(15),o=t(21),r=t(85),s=t(27),c=t(3),p=t(41).f,u=t(17).f,l=t(8).f,f=t(49).trim,d=i.Number,m=d,v=d.prototype,h="Number"==o(t(40)(v)),x="trim"in String.prototype,b=function(e){var n=s(e,!1);if("string"==typeof n&&n.length>2){var t,i,a,o=(n=x?n.trim():f(n,3)).charCodeAt(0);if(43===o||45===o){if(88===(t=n.charCodeAt(2))||120===t)return NaN}else if(48===o){switch(n.charCodeAt(1)){case 66:case 98:i=2,a=49;break;case 79:case 111:i=8,a=55;break;default:return+n}for(var r,c=n.slice(2),p=0,u=c.length;pa)return NaN;return parseInt(c,i)}}return+n};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(e){var n=arguments.length<1?0:e,t=this;return t instanceof d&&(h?c((function(){v.valueOf.call(t)})):"Number"!=o(t))?r(new m(b(n)),t,d):b(n)};for(var g,k=t(7)?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),y=0;k.length>y;y++)a(m,g=k[y])&&!a(d,g)&&l(d,g,u(m,g));d.prototype=v,v.constructor=d,t(12)(i,"Number",d)}},function(e,n,t){"use strict";var i=t(0),a=t(22),o=t(127),r=t(86),s=1..toFixed,c=Math.floor,p=[0,0,0,0,0,0],u="Number.toFixed: incorrect invocation!",l=function(e,n){for(var t=-1,i=n;++t<6;)i+=e*p[t],p[t]=i%1e7,i=c(i/1e7)},f=function(e){for(var n=6,t=0;--n>=0;)t+=p[n],p[n]=c(t/e),t=t%e*1e7},d=function(){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==p[e]){var t=String(p[e]);n=""===n?t:n+r.call("0",7-t.length)+t}return n},m=function(e,n,t){return 0===n?t:n%2==1?m(e,n-1,t*e):m(e*e,n/2,t)};i(i.P+i.F*(!!s&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!t(3)((function(){s.call({})}))),"Number",{toFixed:function(e){var n,t,i,s,c=o(this,u),p=a(e),v="",h="0";if(p<0||p>20)throw RangeError(u);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(t=(n=function(e){for(var n=0,t=e;t>=4096;)n+=12,t/=4096;for(;t>=2;)n+=1,t/=2;return n}(c*m(2,69,1))-69)<0?c*m(2,-n,1):c/m(2,n,1),t*=4503599627370496,(n=52-n)>0){for(l(0,t),i=p;i>=7;)l(1e7,0),i-=7;for(l(m(10,i,1),0),i=n-1;i>=23;)f(1<<23),i-=23;f(1<0?v+((s=h.length)<=p?"0."+r.call("0",p-s)+h:h.slice(0,s-p)+"."+h.slice(s-p)):v+h}})},function(e,n,t){"use strict";var i=t(0),a=t(3),o=t(127),r=1..toPrecision;i(i.P+i.F*(a((function(){return"1"!==r.call(1,void 0)}))||!a((function(){r.call({})}))),"Number",{toPrecision:function(e){var n=o(this,"Number#toPrecision: incorrect invocation!");return void 0===e?r.call(n):r.call(n,e)}})},function(e,n,t){var i=t(0);i(i.S,"Number",{EPSILON:Math.pow(2,-52)})},function(e,n,t){var i=t(0),a=t(2).isFinite;i(i.S,"Number",{isFinite:function(e){return"number"==typeof e&&a(e)}})},function(e,n,t){var i=t(0);i(i.S,"Number",{isInteger:t(128)})},function(e,n,t){var i=t(0);i(i.S,"Number",{isNaN:function(e){return e!=e}})},function(e,n,t){var i=t(0),a=t(128),o=Math.abs;i(i.S,"Number",{isSafeInteger:function(e){return a(e)&&o(e)<=9007199254740991}})},function(e,n,t){var i=t(0);i(i.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,n,t){var i=t(0);i(i.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(e,n,t){var i=t(0),a=t(126);i(i.S+i.F*(Number.parseFloat!=a),"Number",{parseFloat:a})},function(e,n,t){var i=t(0),a=t(125);i(i.S+i.F*(Number.parseInt!=a),"Number",{parseInt:a})},function(e,n,t){var i=t(0),a=t(129),o=Math.sqrt,r=Math.acosh;i(i.S+i.F*!(r&&710==Math.floor(r(Number.MAX_VALUE))&&r(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:a(e-1+o(e-1)*o(e+1))}})},function(e,n,t){var i=t(0),a=Math.asinh;i(i.S+i.F*!(a&&1/a(0)>0),"Math",{asinh:function e(n){return isFinite(n=+n)&&0!=n?n<0?-e(-n):Math.log(n+Math.sqrt(n*n+1)):n}})},function(e,n,t){var i=t(0),a=Math.atanh;i(i.S+i.F*!(a&&1/a(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(e,n,t){var i=t(0),a=t(87);i(i.S,"Math",{cbrt:function(e){return a(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(e,n,t){var i=t(0);i(i.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(e,n,t){var i=t(0),a=Math.exp;i(i.S,"Math",{cosh:function(e){return(a(e=+e)+a(-e))/2}})},function(e,n,t){var i=t(0),a=t(88);i(i.S+i.F*(a!=Math.expm1),"Math",{expm1:a})},function(e,n,t){var i=t(0);i(i.S,"Math",{fround:t(130)})},function(e,n,t){var i=t(0),a=Math.abs;i(i.S,"Math",{hypot:function(e,n){for(var t,i,o=0,r=0,s=arguments.length,c=0;r0?(i=t/c)*i:t;return c===1/0?1/0:c*Math.sqrt(o)}})},function(e,n,t){var i=t(0),a=Math.imul;i(i.S+i.F*t(3)((function(){return-5!=a(4294967295,5)||2!=a.length})),"Math",{imul:function(e,n){var t=+e,i=+n,a=65535&t,o=65535&i;return 0|a*o+((65535&t>>>16)*o+a*(65535&i>>>16)<<16>>>0)}})},function(e,n,t){var i=t(0);i(i.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}})},function(e,n,t){var i=t(0);i(i.S,"Math",{log1p:t(129)})},function(e,n,t){var i=t(0);i(i.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},function(e,n,t){var i=t(0);i(i.S,"Math",{sign:t(87)})},function(e,n,t){var i=t(0),a=t(88),o=Math.exp;i(i.S+i.F*t(3)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(a(e)-a(-e))/2:(o(e-1)-o(-e-1))*(Math.E/2)}})},function(e,n,t){var i=t(0),a=t(88),o=Math.exp;i(i.S,"Math",{tanh:function(e){var n=a(e=+e),t=a(-e);return n==1/0?1:t==1/0?-1:(n-t)/(o(e)+o(-e))}})},function(e,n,t){var i=t(0);i(i.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(e,n,t){var i=t(0),a=t(39),o=String.fromCharCode,r=String.fromCodePoint;i(i.S+i.F*(!!r&&1!=r.length),"String",{fromCodePoint:function(e){for(var n,t=[],i=arguments.length,r=0;i>r;){if(n=+arguments[r++],a(n,1114111)!==n)throw RangeError(n+" is not a valid code point");t.push(n<65536?o(n):o(55296+((n-=65536)>>10),n%1024+56320))}return t.join("")}})},function(e,n,t){var i=t(0),a=t(16),o=t(6);i(i.S,"String",{raw:function(e){for(var n=a(e.raw),t=o(n.length),i=arguments.length,r=[],s=0;t>s;)r.push(String(n[s++])),s=n.length?{value:void 0,done:!0}:(e=i(n,t),this._i+=e.length,{value:e,done:!1})}))},function(e,n,t){"use strict";var i=t(0),a=t(63)(!1);i(i.P,"String",{codePointAt:function(e){return a(this,e)}})},function(e,n,t){"use strict";var i=t(0),a=t(6),o=t(91),r="".endsWith;i(i.P+i.F*t(92)("endsWith"),"String",{endsWith:function(e){var n=o(this,e,"endsWith"),t=arguments.length>1?arguments[1]:void 0,i=a(n.length),s=void 0===t?i:Math.min(a(t),i),c=String(e);return r?r.call(n,c,s):n.slice(s-c.length,s)===c}})},function(e,n,t){"use strict";var i=t(0),a=t(91);i(i.P+i.F*t(92)("includes"),"String",{includes:function(e){return!!~a(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(e,n,t){var i=t(0);i(i.P,"String",{repeat:t(86)})},function(e,n,t){"use strict";var i=t(0),a=t(6),o=t(91),r="".startsWith;i(i.P+i.F*t(92)("startsWith"),"String",{startsWith:function(e){var n=o(this,e,"startsWith"),t=a(Math.min(arguments.length>1?arguments[1]:void 0,n.length)),i=String(e);return r?r.call(n,i,t):n.slice(t,t+i.length)===i}})},function(e,n,t){"use strict";t(13)("anchor",(function(e){return function(n){return e(this,"a","name",n)}}))},function(e,n,t){"use strict";t(13)("big",(function(e){return function(){return e(this,"big","","")}}))},function(e,n,t){"use strict";t(13)("blink",(function(e){return function(){return e(this,"blink","","")}}))},function(e,n,t){"use strict";t(13)("bold",(function(e){return function(){return e(this,"b","","")}}))},function(e,n,t){"use strict";t(13)("fixed",(function(e){return function(){return e(this,"tt","","")}}))},function(e,n,t){"use strict";t(13)("fontcolor",(function(e){return function(n){return e(this,"font","color",n)}}))},function(e,n,t){"use strict";t(13)("fontsize",(function(e){return function(n){return e(this,"font","size",n)}}))},function(e,n,t){"use strict";t(13)("italics",(function(e){return function(){return e(this,"i","","")}}))},function(e,n,t){"use strict";t(13)("link",(function(e){return function(n){return e(this,"a","href",n)}}))},function(e,n,t){"use strict";t(13)("small",(function(e){return function(){return e(this,"small","","")}}))},function(e,n,t){"use strict";t(13)("strike",(function(e){return function(){return e(this,"strike","","")}}))},function(e,n,t){"use strict";t(13)("sub",(function(e){return function(){return e(this,"sub","","")}}))},function(e,n,t){"use strict";t(13)("sup",(function(e){return function(){return e(this,"sup","","")}}))},function(e,n,t){var i=t(0);i(i.S,"Date",{now:function(){return(new Date).getTime()}})},function(e,n,t){"use strict";var i=t(0),a=t(9),o=t(27);i(i.P+i.F*t(3)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(e){var n=a(this),t=o(n);return"number"!=typeof t||isFinite(t)?n.toISOString():null}})},function(e,n,t){var i=t(0),a=t(256);i(i.P+i.F*(Date.prototype.toISOString!==a),"Date",{toISOString:a})},function(e,n,t){"use strict";var i=t(3),a=Date.prototype.getTime,o=Date.prototype.toISOString,r=function(e){return e>9?e:"0"+e};e.exports=i((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))}))||!i((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(a.call(this)))throw RangeError("Invalid time value");var e=this,n=e.getUTCFullYear(),t=e.getUTCMilliseconds(),i=n<0?"-":n>9999?"+":"";return i+("00000"+Math.abs(n)).slice(i?-6:-4)+"-"+r(e.getUTCMonth()+1)+"-"+r(e.getUTCDate())+"T"+r(e.getUTCHours())+":"+r(e.getUTCMinutes())+":"+r(e.getUTCSeconds())+"."+(t>99?t:"0"+r(t))+"Z"}:o},function(e,n,t){var i=Date.prototype,a=i.toString,o=i.getTime;new Date(NaN)+""!="Invalid Date"&&t(12)(i,"toString",(function(){var e=o.call(this);return e==e?a.call(this):"Invalid Date"}))},function(e,n,t){var i=t(5)("toPrimitive"),a=Date.prototype;i in a||t(11)(a,i,t(259))},function(e,n,t){"use strict";var i=t(1),a=t(27);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return a(i(this),"number"!=e)}},function(e,n,t){var i=t(0);i(i.S,"Array",{isArray:t(62)})},function(e,n,t){"use strict";var i=t(20),a=t(0),o=t(9),r=t(131),s=t(93),c=t(6),p=t(94),u=t(95);a(a.S+a.F*!t(65)((function(e){Array.from(e)})),"Array",{from:function(e){var n,t,a,l,f=o(e),d="function"==typeof this?this:Array,m=arguments.length,v=m>1?arguments[1]:void 0,h=void 0!==v,x=0,b=u(f);if(h&&(v=i(v,m>2?arguments[2]:void 0,2)),null==b||d==Array&&s(b))for(t=new d(n=c(f.length));n>x;x++)p(t,x,h?v(f[x],x):f[x]);else for(l=b.call(f),t=new d;!(a=l.next()).done;x++)p(t,x,h?r(l,v,[a.value,x],!0):a.value);return t.length=x,t}})},function(e,n,t){"use strict";var i=t(0),a=t(94);i(i.S+i.F*t(3)((function(){function e(){}return!(Array.of.call(e)instanceof e)})),"Array",{of:function(){for(var e=0,n=arguments.length,t=new("function"==typeof this?this:Array)(n);n>e;)a(t,e,arguments[e++]);return t.length=n,t}})},function(e,n,t){"use strict";var i=t(0),a=t(16),o=[].join;i(i.P+i.F*(t(53)!=Object||!t(23)(o)),"Array",{join:function(e){return o.call(a(this),void 0===e?",":e)}})},function(e,n,t){"use strict";var i=t(0),a=t(82),o=t(21),r=t(39),s=t(6),c=[].slice;i(i.P+i.F*t(3)((function(){a&&c.call(a)})),"Array",{slice:function(e,n){var t=s(this.length),i=o(this);if(n=void 0===n?t:n,"Array"==i)return c.call(this,e,n);for(var a=r(e,t),p=r(n,t),u=s(p-a),l=new Array(u),f=0;f1&&(i=Math.min(i,o(arguments[1]))),i<0&&(i=t+i);i>=0;i--)if(i in n&&n[i]===e)return i||0;return-1}})},function(e,n,t){var i=t(0);i(i.P,"Array",{copyWithin:t(133)}),t(35)("copyWithin")},function(e,n,t){var i=t(0);i(i.P,"Array",{fill:t(97)}),t(35)("fill")},function(e,n,t){"use strict";var i=t(0),a=t(30)(5),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),i(i.P+i.F*o,"Array",{find:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),t(35)("find")},function(e,n,t){"use strict";var i=t(0),a=t(30)(6),o="findIndex",r=!0;o in[]&&Array(1)[o]((function(){r=!1})),i(i.P+i.F*r,"Array",{findIndex:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),t(35)(o)},function(e,n,t){t(42)("Array")},function(e,n,t){var i=t(2),a=t(85),o=t(8).f,r=t(41).f,s=t(64),c=t(55),p=i.RegExp,u=p,l=p.prototype,f=/a/g,d=/a/g,m=new p(f)!==f;if(t(7)&&(!m||t(3)((function(){return d[t(5)("match")]=!1,p(f)!=f||p(d)==d||"/a/i"!=p(f,"i")})))){p=function(e,n){var t=this instanceof p,i=s(e),o=void 0===n;return!t&&i&&e.constructor===p&&o?e:a(m?new u(i&&!o?e.source:e,n):u((i=e instanceof p)?e.source:e,i&&o?c.call(e):n),t?this:l,p)};for(var v=function(e){e in p||o(p,e,{configurable:!0,get:function(){return u[e]},set:function(n){u[e]=n}})},h=r(u),x=0;h.length>x;)v(h[x++]);l.constructor=p,p.prototype=l,t(12)(i,"RegExp",p)}t(42)("RegExp")},function(e,n,t){"use strict";t(136);var i=t(1),a=t(55),o=t(7),r=/./.toString,s=function(e){t(12)(RegExp.prototype,"toString",e,!0)};t(3)((function(){return"/a/b"!=r.call({source:"a",flags:"b"})}))?s((function(){var e=i(this);return"/".concat(e.source,"/","flags"in e?e.flags:!o&&e instanceof RegExp?a.call(e):void 0)})):"toString"!=r.name&&s((function(){return r.call(this)}))},function(e,n,t){"use strict";var i=t(1),a=t(6),o=t(100),r=t(66);t(67)("match",1,(function(e,n,t,s){return[function(t){var i=e(this),a=null==t?void 0:t[n];return void 0!==a?a.call(t,i):new RegExp(t)[n](String(i))},function(e){var n=s(t,e,this);if(n.done)return n.value;var c=i(e),p=String(this);if(!c.global)return r(c,p);var u=c.unicode;c.lastIndex=0;for(var l,f=[],d=0;null!==(l=r(c,p));){var m=String(l[0]);f[d]=m,""===m&&(c.lastIndex=o(p,a(c.lastIndex),u)),d++}return 0===d?null:f}]}))},function(e,n,t){"use strict";var i=t(1),a=t(9),o=t(6),r=t(22),s=t(100),c=t(66),p=Math.max,u=Math.min,l=Math.floor,f=/\$([$&`']|\d\d?|<[^>]*>)/g,d=/\$([$&`']|\d\d?)/g;t(67)("replace",2,(function(e,n,t,m){return[function(i,a){var o=e(this),r=null==i?void 0:i[n];return void 0!==r?r.call(i,o,a):t.call(String(o),i,a)},function(e,n){var a=m(t,e,this,n);if(a.done)return a.value;var l=i(e),f=String(this),d="function"==typeof n;d||(n=String(n));var h=l.global;if(h){var x=l.unicode;l.lastIndex=0}for(var b=[];;){var g=c(l,f);if(null===g)break;if(b.push(g),!h)break;""===String(g[0])&&(l.lastIndex=s(f,o(l.lastIndex),x))}for(var k,y="",w=0,S=0;S=w&&(y+=f.slice(w,j)+M,w=j+_.length)}return y+f.slice(w)}];function v(e,n,i,o,r,s){var c=i+e.length,p=o.length,u=d;return void 0!==r&&(r=a(r),u=f),t.call(s,u,(function(t,a){var s;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(c);case"<":s=r[a.slice(1,-1)];break;default:var u=+a;if(0===u)return t;if(u>p){var f=l(u/10);return 0===f?t:f<=p?void 0===o[f-1]?a.charAt(1):o[f-1]+a.charAt(1):t}s=o[u-1]}return void 0===s?"":s}))}}))},function(e,n,t){"use strict";var i=t(1),a=t(122),o=t(66);t(67)("search",1,(function(e,n,t,r){return[function(t){var i=e(this),a=null==t?void 0:t[n];return void 0!==a?a.call(t,i):new RegExp(t)[n](String(i))},function(e){var n=r(t,e,this);if(n.done)return n.value;var s=i(e),c=String(this),p=s.lastIndex;a(p,0)||(s.lastIndex=0);var u=o(s,c);return a(s.lastIndex,p)||(s.lastIndex=p),null===u?-1:u.index}]}))},function(e,n,t){"use strict";var i=t(64),a=t(1),o=t(56),r=t(100),s=t(6),c=t(66),p=t(99),u=t(3),l=Math.min,f=[].push,d=!u((function(){RegExp(4294967295,"y")}));t(67)("split",2,(function(e,n,t,u){var m;return m="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var a=String(this);if(void 0===e&&0===n)return[];if(!i(e))return t.call(a,e,n);for(var o,r,s,c=[],u=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),l=0,d=void 0===n?4294967295:n>>>0,m=new RegExp(e.source,u+"g");(o=p.call(m,a))&&!((r=m.lastIndex)>l&&(c.push(a.slice(l,o.index)),o.length>1&&o.index=d));)m.lastIndex===o.index&&m.lastIndex++;return l===a.length?!s&&m.test("")||c.push(""):c.push(a.slice(l)),c.length>d?c.slice(0,d):c}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,i){var a=e(this),o=null==t?void 0:t[n];return void 0!==o?o.call(t,a,i):m.call(String(a),t,i)},function(e,n){var i=u(m,e,this,n,m!==t);if(i.done)return i.value;var p=a(e),f=String(this),v=o(p,RegExp),h=p.unicode,x=(p.ignoreCase?"i":"")+(p.multiline?"m":"")+(p.unicode?"u":"")+(d?"y":"g"),b=new v(d?p:"^(?:"+p.source+")",x),g=void 0===n?4294967295:n>>>0;if(0===g)return[];if(0===f.length)return null===c(b,f)?[f]:[];for(var k=0,y=0,w=[];yo;)r(t[o++]);e._c=[],e._n=!1,n&&!e._h&&z(e)}))}},z=function(e){x.call(c,(function(){var n,t,i,a=e._v,o=I(e);if(o&&(n=k((function(){O?_.emit("unhandledRejection",a,e):(t=c.onunhandledrejection)?t({promise:e,reason:a}):(i=c.console)&&i.error&&i.error("Unhandled promise rejection",a)})),e._h=O||I(e)?2:1),e._a=void 0,o&&n.e)throw n.v}))},I=function(e){return 1!==e._h&&0===(e._a||e._c).length},N=function(e){x.call(c,(function(){var n;O?_.emit("rejectionHandled",e):(n=c.onrejectionhandled)&&n({promise:e,reason:e._v})}))},T=function(e){var n=this;n._d||(n._d=!0,(n=n._w||n)._v=e,n._s=2,n._a||(n._a=n._c.slice()),B(n,!0))},L=function(e){var n,t=this;if(!t._d){t._d=!0,t=t._w||t;try{if(t===e)throw S("Promise can't be resolved itself");(n=F(e))?b((function(){var i={_w:t,_d:!1};try{n.call(e,p(L,i,1),p(T,i,1))}catch(e){T.call(i,e)}})):(t._v=e,t._s=1,B(t,!1))}catch(e){T.call({_w:t,_d:!1},e)}}};P||(C=function(e){m(this,C,"Promise","_h"),d(e),i.call(this);try{e(p(L,this,1),p(T,this,1))}catch(e){T.call(this,e)}},(i=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=t(45)(C.prototype,{then:function(e,n){var t=M(h(this,C));return t.ok="function"!=typeof e||e,t.fail="function"==typeof n&&n,t.domain=O?_.domain:void 0,this._c.push(t),this._a&&this._a.push(t),this._s&&B(this,!1),t.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new i;this.promise=e,this.resolve=p(L,e,1),this.reject=p(T,e,1)},g.f=M=function(e){return e===C||e===r?new o(e):a(e)}),l(l.G+l.W+l.F*!P,{Promise:C}),t(47)(C,"Promise"),t(42)("Promise"),r=t(19).Promise,l(l.S+l.F*!P,"Promise",{reject:function(e){var n=M(this);return(0,n.reject)(e),n.promise}}),l(l.S+l.F*(s||!P),"Promise",{resolve:function(e){return w(s&&this===r?C:this,e)}}),l(l.S+l.F*!(P&&t(65)((function(e){C.all(e).catch(A)}))),"Promise",{all:function(e){var n=this,t=M(n),i=t.resolve,a=t.reject,o=k((function(){var t=[],o=0,r=1;v(e,!1,(function(e){var s=o++,c=!1;t.push(void 0),r++,n.resolve(e).then((function(e){c||(c=!0,t[s]=e,--r||i(t))}),a)})),--r||i(t)}));return o.e&&a(o.v),t.promise},race:function(e){var n=this,t=M(n),i=t.reject,a=k((function(){v(e,!1,(function(e){n.resolve(e).then(t.resolve,i)}))}));return a.e&&i(a.v),t.promise}})},function(e,n,t){"use strict";var i=t(143),a=t(46);t(69)("WeakSet",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return i.def(a(this,"WeakSet"),e,!0)}},i,!1,!0)},function(e,n,t){"use strict";var i=t(0),a=t(70),o=t(104),r=t(1),s=t(39),c=t(6),p=t(4),u=t(2).ArrayBuffer,l=t(56),f=o.ArrayBuffer,d=o.DataView,m=a.ABV&&u.isView,v=f.prototype.slice,h=a.VIEW;i(i.G+i.W+i.F*(u!==f),{ArrayBuffer:f}),i(i.S+i.F*!a.CONSTR,"ArrayBuffer",{isView:function(e){return m&&m(e)||p(e)&&h in e}}),i(i.P+i.U+i.F*t(3)((function(){return!new f(2).slice(1,void 0).byteLength})),"ArrayBuffer",{slice:function(e,n){if(void 0!==v&&void 0===n)return v.call(r(this),e);for(var t=r(this).byteLength,i=s(e,t),a=s(void 0===n?t:n,t),o=new(l(this,f))(c(a-i)),p=new d(this),u=new d(o),m=0;i=n.length)return{value:void 0,done:!0}}while(!((e=n[this._i++])in this._t));return{value:e,done:!1}})),i(i.S,"Reflect",{enumerate:function(e){return new o(e)}})},function(e,n,t){var i=t(17),a=t(18),o=t(15),r=t(0),s=t(4),c=t(1);r(r.S,"Reflect",{get:function e(n,t){var r,p,u=arguments.length<3?n:arguments[2];return c(n)===u?n[t]:(r=i.f(n,t))?o(r,"value")?r.value:void 0!==r.get?r.get.call(u):void 0:s(p=a(n))?e(p,t,u):void 0}})},function(e,n,t){var i=t(17),a=t(0),o=t(1);a(a.S,"Reflect",{getOwnPropertyDescriptor:function(e,n){return i.f(o(e),n)}})},function(e,n,t){var i=t(0),a=t(18),o=t(1);i(i.S,"Reflect",{getPrototypeOf:function(e){return a(o(e))}})},function(e,n,t){var i=t(0);i(i.S,"Reflect",{has:function(e,n){return n in e}})},function(e,n,t){var i=t(0),a=t(1),o=Object.isExtensible;i(i.S,"Reflect",{isExtensible:function(e){return a(e),!o||o(e)}})},function(e,n,t){var i=t(0);i(i.S,"Reflect",{ownKeys:t(145)})},function(e,n,t){var i=t(0),a=t(1),o=Object.preventExtensions;i(i.S,"Reflect",{preventExtensions:function(e){a(e);try{return o&&o(e),!0}catch(e){return!1}}})},function(e,n,t){var i=t(8),a=t(17),o=t(18),r=t(15),s=t(0),c=t(36),p=t(1),u=t(4);s(s.S,"Reflect",{set:function e(n,t,s){var l,f,d=arguments.length<4?n:arguments[3],m=a.f(p(n),t);if(!m){if(u(f=o(n)))return e(f,t,s,d);m=c(0)}if(r(m,"value")){if(!1===m.writable||!u(d))return!1;if(l=a.f(d,t)){if(l.get||l.set||!1===l.writable)return!1;l.value=s,i.f(d,t,l)}else i.f(d,t,c(0,s));return!0}return void 0!==m.set&&(m.set.call(d,s),!0)}})},function(e,n,t){var i=t(0),a=t(83);a&&i(i.S,"Reflect",{setPrototypeOf:function(e,n){a.check(e,n);try{return a.set(e,n),!0}catch(e){return!1}}})},function(e,n,t){"use strict";var i=t(0),a=t(60)(!0);i(i.P,"Array",{includes:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),t(35)("includes")},function(e,n,t){"use strict";var i=t(0),a=t(146),o=t(9),r=t(6),s=t(10),c=t(96);i(i.P,"Array",{flatMap:function(e){var n,t,i=o(this);return s(e),n=r(i.length),t=c(i,0),a(t,i,i,n,0,1,e,arguments[1]),t}}),t(35)("flatMap")},function(e,n,t){"use strict";var i=t(0),a=t(146),o=t(9),r=t(6),s=t(22),c=t(96);i(i.P,"Array",{flatten:function(){var e=arguments[0],n=o(this),t=r(n.length),i=c(n,0);return a(i,n,n,t,0,void 0===e?1:s(e)),i}}),t(35)("flatten")},function(e,n,t){"use strict";var i=t(0),a=t(63)(!0);i(i.P,"String",{at:function(e){return a(this,e)}})},function(e,n,t){"use strict";var i=t(0),a=t(147),o=t(68),r=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);i(i.P+i.F*r,"String",{padStart:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,n,t){"use strict";var i=t(0),a=t(147),o=t(68),r=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);i(i.P+i.F*r,"String",{padEnd:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(e,n,t){"use strict";t(49)("trimLeft",(function(e){return function(){return e(this,1)}}),"trimStart")},function(e,n,t){"use strict";t(49)("trimRight",(function(e){return function(){return e(this,2)}}),"trimEnd")},function(e,n,t){"use strict";var i=t(0),a=t(28),o=t(6),r=t(64),s=t(55),c=RegExp.prototype,p=function(e,n){this._r=e,this._s=n};t(90)(p,"RegExp String",(function(){var e=this._r.exec(this._s);return{value:e,done:null===e}})),i(i.P,"String",{matchAll:function(e){if(a(this),!r(e))throw TypeError(e+" is not a regexp!");var n=String(this),t="flags"in c?String(e.flags):s.call(e),i=new RegExp(e.source,~t.indexOf("g")?t:"g"+t);return i.lastIndex=o(e.lastIndex),new p(i,n)}})},function(e,n,t){t(79)("asyncIterator")},function(e,n,t){t(79)("observable")},function(e,n,t){var i=t(0),a=t(145),o=t(16),r=t(17),s=t(94);i(i.S,"Object",{getOwnPropertyDescriptors:function(e){for(var n,t,i=o(e),c=r.f,p=a(i),u={},l=0;p.length>l;)void 0!==(t=c(i,n=p[l++]))&&s(u,n,t);return u}})},function(e,n,t){var i=t(0),a=t(148)(!1);i(i.S,"Object",{values:function(e){return a(e)}})},function(e,n,t){var i=t(0),a=t(148)(!0);i(i.S,"Object",{entries:function(e){return a(e)}})},function(e,n,t){"use strict";var i=t(0),a=t(9),o=t(10),r=t(8);t(7)&&i(i.P+t(71),"Object",{__defineGetter__:function(e,n){r.f(a(this),e,{get:o(n),enumerable:!0,configurable:!0})}})},function(e,n,t){"use strict";var i=t(0),a=t(9),o=t(10),r=t(8);t(7)&&i(i.P+t(71),"Object",{__defineSetter__:function(e,n){r.f(a(this),e,{set:o(n),enumerable:!0,configurable:!0})}})},function(e,n,t){"use strict";var i=t(0),a=t(9),o=t(27),r=t(18),s=t(17).f;t(7)&&i(i.P+t(71),"Object",{__lookupGetter__:function(e){var n,t=a(this),i=o(e,!0);do{if(n=s(t,i))return n.get}while(t=r(t))}})},function(e,n,t){"use strict";var i=t(0),a=t(9),o=t(27),r=t(18),s=t(17).f;t(7)&&i(i.P+t(71),"Object",{__lookupSetter__:function(e){var n,t=a(this),i=o(e,!0);do{if(n=s(t,i))return n.set}while(t=r(t))}})},function(e,n,t){var i=t(0);i(i.P+i.R,"Map",{toJSON:t(149)("Map")})},function(e,n,t){var i=t(0);i(i.P+i.R,"Set",{toJSON:t(149)("Set")})},function(e,n,t){t(72)("Map")},function(e,n,t){t(72)("Set")},function(e,n,t){t(72)("WeakMap")},function(e,n,t){t(72)("WeakSet")},function(e,n,t){t(73)("Map")},function(e,n,t){t(73)("Set")},function(e,n,t){t(73)("WeakMap")},function(e,n,t){t(73)("WeakSet")},function(e,n,t){var i=t(0);i(i.G,{global:t(2)})},function(e,n,t){var i=t(0);i(i.S,"System",{global:t(2)})},function(e,n,t){var i=t(0),a=t(21);i(i.S,"Error",{isError:function(e){return"Error"===a(e)}})},function(e,n,t){var i=t(0);i(i.S,"Math",{clamp:function(e,n,t){return Math.min(t,Math.max(n,e))}})},function(e,n,t){var i=t(0);i(i.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(e,n,t){var i=t(0),a=180/Math.PI;i(i.S,"Math",{degrees:function(e){return e*a}})},function(e,n,t){var i=t(0),a=t(151),o=t(130);i(i.S,"Math",{fscale:function(e,n,t,i,r){return o(a(e,n,t,i,r))}})},function(e,n,t){var i=t(0);i(i.S,"Math",{iaddh:function(e,n,t,i){var a=e>>>0,o=t>>>0;return(n>>>0)+(i>>>0)+((a&o|(a|o)&~(a+o>>>0))>>>31)|0}})},function(e,n,t){var i=t(0);i(i.S,"Math",{isubh:function(e,n,t,i){var a=e>>>0,o=t>>>0;return(n>>>0)-(i>>>0)-((~a&o|~(a^o)&a-o>>>0)>>>31)|0}})},function(e,n,t){var i=t(0);i(i.S,"Math",{imulh:function(e,n){var t=+e,i=+n,a=65535&t,o=65535&i,r=t>>16,s=i>>16,c=(r*o>>>0)+(a*o>>>16);return r*s+(c>>16)+((a*s>>>0)+(65535&c)>>16)}})},function(e,n,t){var i=t(0);i(i.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(e,n,t){var i=t(0),a=Math.PI/180;i(i.S,"Math",{radians:function(e){return e*a}})},function(e,n,t){var i=t(0);i(i.S,"Math",{scale:t(151)})},function(e,n,t){var i=t(0);i(i.S,"Math",{umulh:function(e,n){var t=+e,i=+n,a=65535&t,o=65535&i,r=t>>>16,s=i>>>16,c=(r*o>>>0)+(a*o>>>16);return r*s+(c>>>16)+((a*s>>>0)+(65535&c)>>>16)}})},function(e,n,t){var i=t(0);i(i.S,"Math",{signbit:function(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(e,n,t){"use strict";var i=t(0),a=t(19),o=t(2),r=t(56),s=t(138);i(i.P+i.R,"Promise",{finally:function(e){var n=r(this,a.Promise||o.Promise),t="function"==typeof e;return this.then(t?function(t){return s(n,e()).then((function(){return t}))}:e,t?function(t){return s(n,e()).then((function(){throw t}))}:e)}})},function(e,n,t){"use strict";var i=t(0),a=t(103),o=t(137);i(i.S,"Promise",{try:function(e){var n=a.f(this),t=o(e);return(t.e?n.reject:n.resolve)(t.v),n.promise}})},function(e,n,t){var i=t(32),a=t(1),o=i.key,r=i.set;i.exp({defineMetadata:function(e,n,t,i){r(e,n,a(t),o(i))}})},function(e,n,t){var i=t(32),a=t(1),o=i.key,r=i.map,s=i.store;i.exp({deleteMetadata:function(e,n){var t=arguments.length<3?void 0:o(arguments[2]),i=r(a(n),t,!1);if(void 0===i||!i.delete(e))return!1;if(i.size)return!0;var c=s.get(n);return c.delete(t),!!c.size||s.delete(n)}})},function(e,n,t){var i=t(32),a=t(1),o=t(18),r=i.has,s=i.get,c=i.key,p=function(e,n,t){if(r(e,n,t))return s(e,n,t);var i=o(n);return null!==i?p(e,i,t):void 0};i.exp({getMetadata:function(e,n){return p(e,a(n),arguments.length<3?void 0:c(arguments[2]))}})},function(e,n,t){var i=t(141),a=t(150),o=t(32),r=t(1),s=t(18),c=o.keys,p=o.key,u=function(e,n){var t=c(e,n),o=s(e);if(null===o)return t;var r=u(o,n);return r.length?t.length?a(new i(t.concat(r))):r:t};o.exp({getMetadataKeys:function(e){return u(r(e),arguments.length<2?void 0:p(arguments[1]))}})},function(e,n,t){var i=t(32),a=t(1),o=i.get,r=i.key;i.exp({getOwnMetadata:function(e,n){return o(e,a(n),arguments.length<3?void 0:r(arguments[2]))}})},function(e,n,t){var i=t(32),a=t(1),o=i.keys,r=i.key;i.exp({getOwnMetadataKeys:function(e){return o(a(e),arguments.length<2?void 0:r(arguments[1]))}})},function(e,n,t){var i=t(32),a=t(1),o=t(18),r=i.has,s=i.key,c=function(e,n,t){if(r(e,n,t))return!0;var i=o(n);return null!==i&&c(e,i,t)};i.exp({hasMetadata:function(e,n){return c(e,a(n),arguments.length<3?void 0:s(arguments[2]))}})},function(e,n,t){var i=t(32),a=t(1),o=i.has,r=i.key;i.exp({hasOwnMetadata:function(e,n){return o(e,a(n),arguments.length<3?void 0:r(arguments[2]))}})},function(e,n,t){var i=t(32),a=t(1),o=t(10),r=i.key,s=i.set;i.exp({metadata:function(e,n){return function(t,i){s(e,n,(void 0!==i?a:o)(t),r(i))}}})},function(e,n,t){var i=t(0),a=t(102)(),o=t(2).process,r="process"==t(21)(o);i(i.G,{asap:function(e){var n=r&&o.domain;a(n?n.bind(e):e)}})},function(e,n,t){"use strict";var i=t(0),a=t(2),o=t(19),r=t(102)(),s=t(5)("observable"),c=t(10),p=t(1),u=t(43),l=t(45),f=t(11),d=t(44),m=d.RETURN,v=function(e){return null==e?void 0:c(e)},h=function(e){var n=e._c;n&&(e._c=void 0,n())},x=function(e){return void 0===e._o},b=function(e){x(e)||(e._o=void 0,h(e))},g=function(e,n){p(e),this._c=void 0,this._o=e,e=new k(this);try{var t=n(e),i=t;null!=t&&("function"==typeof t.unsubscribe?t=function(){i.unsubscribe()}:c(t),this._c=t)}catch(n){return void e.error(n)}x(this)&&h(this)};g.prototype=l({},{unsubscribe:function(){b(this)}});var k=function(e){this._s=e};k.prototype=l({},{next:function(e){var n=this._s;if(!x(n)){var t=n._o;try{var i=v(t.next);if(i)return i.call(t,e)}catch(e){try{b(n)}finally{throw e}}}},error:function(e){var n=this._s;if(x(n))throw e;var t=n._o;n._o=void 0;try{var i=v(t.error);if(!i)throw e;e=i.call(t,e)}catch(e){try{h(n)}finally{throw e}}return h(n),e},complete:function(e){var n=this._s;if(!x(n)){var t=n._o;n._o=void 0;try{var i=v(t.complete);e=i?i.call(t,e):void 0}catch(e){try{h(n)}finally{throw e}}return h(n),e}}});var y=function(e){u(this,y,"Observable","_f")._f=c(e)};l(y.prototype,{subscribe:function(e){return new g(e,this._f)},forEach:function(e){var n=this;return new(o.Promise||a.Promise)((function(t,i){c(e);var a=n.subscribe({next:function(n){try{return e(n)}catch(e){i(e),a.unsubscribe()}},error:i,complete:t})}))}}),l(y,{from:function(e){var n="function"==typeof this?this:y,t=v(p(e)[s]);if(t){var i=p(t.call(e));return i.constructor===n?i:new n((function(e){return i.subscribe(e)}))}return new n((function(n){var t=!1;return r((function(){if(!t){try{if(d(e,!1,(function(e){if(n.next(e),t)return m}))===m)return}catch(e){if(t)throw e;return void n.error(e)}n.complete()}})),function(){t=!0}}))},of:function(){for(var e=0,n=arguments.length,t=new Array(n);e2,a=!!i&&r.call(arguments,2);return e(i?function(){("function"==typeof n?n:Function(n)).apply(this,a)}:n,t)}};a(a.G+a.B+a.F*s,{setTimeout:c(i.setTimeout),setInterval:c(i.setInterval)})},function(e,n,t){var i=t(0),a=t(101);i(i.G+i.B,{setImmediate:a.set,clearImmediate:a.clear})},function(e,n,t){for(var i=t(98),a=t(38),o=t(12),r=t(2),s=t(11),c=t(50),p=t(5),u=p("iterator"),l=p("toStringTag"),f=c.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},m=a(d),v=0;v=0;--a){var o=this.tryEntries[a],r=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var s=i.call(o,"catchLoc"),c=i.call(o,"finallyLoc");if(s&&c){if(this.prev=0;--t){var a=this.tryEntries[t];if(a.tryLoc<=this.prev&&i.call(a,"finallyLoc")&&this.prev=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),_(t),u}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var i=t.completion;if("throw"===i.type){var a=i.arg;_(t)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,t){return this.delegate={iterator:E(e),resultName:n,nextLoc:t},"next"===this.method&&(this.arg=void 0),u}}}function v(e,n,t,i){var a=n&&n.prototype instanceof x?n:x,o=Object.create(a.prototype),r=new j(i||[]);return o._invoke=function(e,n,t){var i="suspendedStart";return function(a,o){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===a)throw o;return C()}for(t.method=a,t.arg=o;;){var r=t.delegate;if(r){var s=w(r,t);if(s){if(s===u)continue;return s}}if("next"===t.method)t.sent=t._sent=t.arg;else if("throw"===t.method){if("suspendedStart"===i)throw i="completed",t.arg;t.dispatchException(t.arg)}else"return"===t.method&&t.abrupt("return",t.arg);i="executing";var c=h(e,n,t);if("normal"===c.type){if(i=t.done?"completed":"suspendedYield",c.arg===u)continue;return{value:c.arg,done:t.done}}"throw"===c.type&&(i="completed",t.method="throw",t.arg=c.arg)}}}(e,t,r),o}function h(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}function x(){}function b(){}function g(){}function k(e){["next","throw","return"].forEach((function(n){e[n]=function(e){return this._invoke(n,e)}}))}function y(e){function t(n,a,o,r){var s=h(e[n],e,a);if("throw"!==s.type){var c=s.arg,p=c.value;return p&&"object"==typeof p&&i.call(p,"__await")?Promise.resolve(p.__await).then((function(e){t("next",e,o,r)}),(function(e){t("throw",e,o,r)})):Promise.resolve(p).then((function(e){c.value=e,o(c)}),r)}r(s.arg)}var a;"object"==typeof n.process&&n.process.domain&&(t=n.process.domain.bind(t)),this._invoke=function(e,n){function i(){return new Promise((function(i,a){t(e,n,i,a)}))}return a=a?a.then(i,i):i()}}function w(e,n){var t=e.iterator[n.method];if(void 0===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=void 0,w(e,n),"throw"===n.method))return u;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var i=h(t,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,u;var a=i.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=void 0),n.delegate=null,u):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,u)}function S(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function _(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function E(e){if(e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var t=-1,a=function n(){for(;++t0?a(t(e),9007199254740991):0}},function(e,n,i){e.exports=!i(3)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,n,i){var t=i(1),a=i(116),o=i(27),r=Object.defineProperty;n.f=i(7)?Object.defineProperty:function(e,n,i){if(t(e),n=o(n,!0),t(i),a)try{return r(e,n,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[n]=i.value),e}},function(e,n,i){var t=i(28);e.exports=function(e){return Object(t(e))}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,i){var t=i(8),a=i(36);e.exports=i(7)?function(e,n,i){return t.f(e,n,a(1,i))}:function(e,n,i){return e[n]=i,e}},function(e,n,i){var t=i(2),a=i(11),o=i(15),r=i(37)("src"),s=i(178),c=(""+s).split("toString");i(19).inspectSource=function(e){return s.call(e)},(e.exports=function(e,n,i,s){var p="function"==typeof i;p&&(o(i,"name")||a(i,"name",n)),e[n]!==i&&(p&&(o(i,r)||a(i,r,e[n]?""+e[n]:c.join(String(n)))),e===t?e[n]=i:s?e[n]?e[n]=i:a(e,n,i):(delete e[n],a(e,n,i)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[r]||s.call(this)}))},function(e,n,i){var t=i(0),a=i(3),o=i(28),r=/"/g,s=function(e,n,i,t){var a=String(o(e)),s="<"+n;return""!==i&&(s+=" "+i+'="'+String(t).replace(r,""")+'"'),s+">"+a+""};e.exports=function(e,n){var i={};i[e]=n(s),t(t.P+t.F*a((function(){var n=""[e]('"');return n!==n.toLowerCase()||n.split('"').length>3})),"String",i)}},function(e,n,i){"use strict";var t=i(152),a=i(380),o=Object.prototype.toString;function r(e){return"[object Array]"===o.call(e)}function s(e){return null!==e&&"object"==typeof e}function c(e){return"[object Function]"===o.call(e)}function p(e,n){if(null!=e)if("object"!=typeof e&&(e=[e]),r(e))for(var i=0,t=e.length;i0?t:i)(e)}},function(e,n,i){"use strict";var t=i(3);e.exports=function(e,n){return!!e&&t((function(){n?e.call(null,(function(){}),1):e.call(null)}))}},function(e,n,i){e.exports=i(379)},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.baseUrl=void 0;n.baseUrl="https://api.pinata.cloud"},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.validateApiKeys=function(e,n){if(!e||""===e)throw new Error("No pinataApiKey provided! Please provide your pinata api key as an argument when you start this script");if(!n||""===n)throw new Error("No pinataSecretApiKey provided! Please provide your pinata secret api key as an argument when you start this script")},n.validateHostNodes=r,n.validateMetadata=function(e){if(e.name&&!("string"==typeof e.name||e.name instanceof String))throw new Error("metadata name must be of type string");if(e.keyvalues){if("object"!==o(e.keyvalues))throw new Error("metatadata keyvalues must be an object");var n=0;Object.entries(e.keyvalues).forEach((function(e){if(n>9)throw new Error("No more than 10 keyvalues can be provided for metadata entries");if("string"!=typeof e[1]&&"boolean"!=typeof e[1]&&isNaN(e[1]))throw new Error("Metadata keyvalue values must be strings, booleans, or numbers");n++}))}},n.validatePinPolicyStructure=s,n.validatePinataOptions=function(e){if("object"!==o(e))throw new Error("options must be an object");if(e.cidVersion&&0!=e.cidVersion&&1!=e.cidVersion)throw new Error("unsupported or invalid cidVersion");if(e.wrapWithDirectory&&!0!==e.wrapWithDirectory&&!1!==e.wrapWithDirectory)throw new Error("wrapWithDirectory must be a boolean value of true or false");e.hostNodes&&r(e.hostNodes);e.customPinPolicy&&s(e.customPinPolicy)};var t,a=(t=i(57))&&t.__esModule?t:{default:t};function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e){if(!Array.isArray(e))throw new Error("host_nodes value must be an array");e.forEach((function(e){if(!a.default.peerMultiaddr(e))throw new Error("host_node array entry: ".concat(e," is not a valid peer multiaddr"))}))}function s(e){if(!e)throw new Error("No pin policy provided");if(!e.regions)throw new Error("No regions provided in pin policy");e.regions.length&&e.regions.forEach((function(e){if(!e.id||"[object String]"!==Object.prototype.toString.call(e.id))throw new Error("region id must be a string");if(!e.desiredReplicationCount&&0!==e.desiredReplicationCount||!Number.isInteger(e.desiredReplicationCount))throw new Error("desiredReplicationCount must be an integer")}))}},function(e,n,i){var t=i(4);e.exports=function(e,n){if(!t(e))return e;var i,a;if(n&&"function"==typeof(i=e.toString)&&!t(a=i.call(e)))return a;if("function"==typeof(i=e.valueOf)&&!t(a=i.call(e)))return a;if(!n&&"function"==typeof(i=e.toString)&&!t(a=i.call(e)))return a;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,i){var t=i(0),a=i(19),o=i(3);e.exports=function(e,n){var i=(a.Object||{})[e]||Object[e],r={};r[e]=n(i),t(t.S+t.F*o((function(){i(1)})),"Object",r)}},function(e,n,i){var t=i(20),a=i(53),o=i(9),r=i(6),s=i(96);e.exports=function(e,n){var i=1==e,c=2==e,p=3==e,u=4==e,l=6==e,f=5==e||l,d=n||s;return function(n,s,m){for(var v,h,x=o(n),b=a(x),g=t(s,m,3),k=r(b.length),y=0,w=i?d(n,k):c?d(n,0):void 0;k>y;y++)if((f||y in b)&&(h=g(v=b[y],y,x),e))if(i)w[y]=h;else if(h)switch(e){case 3:return!0;case 5:return v;case 6:return y;case 2:w.push(v)}else if(u)return!1;return l?-1:p||u?u:w}}},function(e,n,i){"use strict";if(i(7)){var t=i(33),a=i(2),o=i(3),r=i(0),s=i(70),c=i(104),p=i(20),u=i(43),l=i(36),f=i(11),d=i(45),m=i(22),v=i(6),h=i(144),x=i(39),b=i(27),g=i(15),k=i(48),y=i(4),w=i(9),S=i(93),_=i(40),j=i(18),E=i(41).f,C=i(95),O=i(37),A=i(5),P=i(30),M=i(60),F=i(56),B=i(98),N=i(50),I=i(65),z=i(42),T=i(97),L=i(133),R=i(8),q=i(17),D=R.f,U=q.f,$=a.RangeError,V=a.TypeError,W=a.Uint8Array,G=Array.prototype,H=c.ArrayBuffer,K=c.DataView,J=P(0),Y=P(2),X=P(3),Z=P(4),Q=P(5),ee=P(6),ne=M(!0),ie=M(!1),te=B.values,ae=B.keys,oe=B.entries,re=G.lastIndexOf,se=G.reduce,ce=G.reduceRight,pe=G.join,ue=G.sort,le=G.slice,fe=G.toString,de=G.toLocaleString,me=A("iterator"),ve=A("toStringTag"),he=O("typed_constructor"),xe=O("def_constructor"),be=s.CONSTR,ge=s.TYPED,ke=s.VIEW,ye=P(1,(function(e,n){return Ee(F(e,e[xe]),n)})),we=o((function(){return 1===new W(new Uint16Array([1]).buffer)[0]})),Se=!!W&&!!W.prototype.set&&o((function(){new W(1).set({})})),_e=function(e,n){var i=m(e);if(i<0||i%n)throw $("Wrong offset!");return i},je=function(e){if(y(e)&&ge in e)return e;throw V(e+" is not a typed array!")},Ee=function(e,n){if(!(y(e)&&he in e))throw V("It is not a typed array constructor!");return new e(n)},Ce=function(e,n){return Oe(F(e,e[xe]),n)},Oe=function(e,n){for(var i=0,t=n.length,a=Ee(e,t);t>i;)a[i]=n[i++];return a},Ae=function(e,n,i){D(e,n,{get:function(){return this._d[i]}})},Pe=function(e){var n,i,t,a,o,r,s=w(e),c=arguments.length,u=c>1?arguments[1]:void 0,l=void 0!==u,f=C(s);if(null!=f&&!S(f)){for(r=f.call(s),t=[],n=0;!(o=r.next()).done;n++)t.push(o.value);s=t}for(l&&c>2&&(u=p(u,arguments[2],2)),n=0,i=v(s.length),a=Ee(this,i);i>n;n++)a[n]=l?u(s[n],n):s[n];return a},Me=function(){for(var e=0,n=arguments.length,i=Ee(this,n);n>e;)i[e]=arguments[e++];return i},Fe=!!W&&o((function(){de.call(new W(1))})),Be=function(){return de.apply(Fe?le.call(je(this)):je(this),arguments)},Ne={copyWithin:function(e,n){return L.call(je(this),e,n,arguments.length>2?arguments[2]:void 0)},every:function(e){return Z(je(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return T.apply(je(this),arguments)},filter:function(e){return Ce(this,Y(je(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Q(je(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(je(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){J(je(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ie(je(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ne(je(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return pe.apply(je(this),arguments)},lastIndexOf:function(e){return re.apply(je(this),arguments)},map:function(e){return ye(je(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return se.apply(je(this),arguments)},reduceRight:function(e){return ce.apply(je(this),arguments)},reverse:function(){for(var e,n=je(this).length,i=Math.floor(n/2),t=0;t1?arguments[1]:void 0)},sort:function(e){return ue.call(je(this),e)},subarray:function(e,n){var i=je(this),t=i.length,a=x(e,t);return new(F(i,i[xe]))(i.buffer,i.byteOffset+a*i.BYTES_PER_ELEMENT,v((void 0===n?t:x(n,t))-a))}},Ie=function(e,n){return Ce(this,le.call(je(this),e,n))},ze=function(e){je(this);var n=_e(arguments[1],1),i=this.length,t=w(e),a=v(t.length),o=0;if(a+n>i)throw $("Wrong length!");for(;o255?255:255&t),a.v[d](i*n+a.o,t,we)}(this,i,e)},enumerable:!0})};g?(m=i((function(e,i,t,a){u(e,m,p,"_d");var o,r,s,c,l=0,d=0;if(y(i)){if(!(i instanceof H||"ArrayBuffer"==(c=k(i))||"SharedArrayBuffer"==c))return ge in i?Oe(m,i):Pe.call(m,i);o=i,d=_e(t,n);var x=i.byteLength;if(void 0===a){if(x%n)throw $("Wrong length!");if((r=x-d)<0)throw $("Wrong length!")}else if((r=v(a)*n)+d>x)throw $("Wrong length!");s=r/n}else s=h(i),o=new H(r=s*n);for(f(e,"_d",{b:o,o:d,l:r,e:s,v:new K(o)});ldocument.F=Object<\/script>"),e.close(),c=e.F;t--;)delete c.prototype[o[t]];return c()};e.exports=Object.create||function(e,n){var i;return null!==e?(s.prototype=t(e),i=new s,s.prototype=null,i[r]=e):i=c(),void 0===n?i:a(i,n)}},function(e,n,i){var t=i(118),a=i(81).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return t(e,a)}},function(e,n,i){"use strict";var t=i(2),a=i(8),o=i(7),r=i(5)("species");e.exports=function(e){var n=t[e];o&&n&&!n[r]&&a.f(n,r,{configurable:!0,get:function(){return this}})}},function(e,n){e.exports=function(e,n,i,t){if(!(e instanceof n)||void 0!==t&&t in e)throw TypeError(i+": incorrect invocation!");return e}},function(e,n,i){var t=i(20),a=i(131),o=i(93),r=i(1),s=i(6),c=i(95),p={},u={};(n=e.exports=function(e,n,i,l,f){var d,m,v,h,x=f?function(){return e}:c(e),b=t(i,l,n?2:1),g=0;if("function"!=typeof x)throw TypeError(e+" is not iterable!");if(o(x)){for(d=s(e.length);d>g;g++)if((h=n?b(r(m=e[g])[0],m[1]):b(e[g]))===p||h===u)return h}else for(v=x.call(e);!(m=v.next()).done;)if((h=a(v,b,m.value,n))===p||h===u)return h}).BREAK=p,n.RETURN=u},function(e,n,i){var t=i(12);e.exports=function(e,n,i){for(var a in n)t(e,a,n[a],i);return e}},function(e,n,i){var t=i(4);e.exports=function(e,n){if(!t(e)||e._t!==n)throw TypeError("Incompatible receiver, "+n+" required!");return e}},function(e,n,i){var t=i(8).f,a=i(15),o=i(5)("toStringTag");e.exports=function(e,n,i){e&&!a(e=i?e:e.prototype,o)&&t(e,o,{configurable:!0,value:n})}},function(e,n,i){var t=i(21),a=i(5)("toStringTag"),o="Arguments"==t(function(){return arguments}());e.exports=function(e){var n,i,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),a))?i:o?t(n):"Object"==(r=t(n))&&"function"==typeof n.callee?"Arguments":r}},function(e,n,i){var t=i(0),a=i(28),o=i(3),r=i(84),s="["+r+"]",c=RegExp("^"+s+s+"*"),p=RegExp(s+s+"*$"),u=function(e,n,i){var a={},s=o((function(){return!!r[e]()||"​…"!="​…"[e]()})),c=a[e]=s?n(l):r[e];i&&(a[i]=c),t(t.P+t.F*s,"String",a)},l=u.trim=function(e,n){return e=String(a(e)),1&n&&(e=e.replace(c,"")),2&n&&(e=e.replace(p,"")),e};e.exports=u},function(e,n){e.exports={}},function(e,n,i){e.exports={encode:i(407),decode:i(408),encodingLength:i(409)}},function(e,n,i){var t=i(19),a=i(2),o=a["__core-js_shared__"]||(a["__core-js_shared__"]={});(e.exports=function(e,n){return o[e]||(o[e]=void 0!==n?n:{})})("versions",[]).push({version:t.version,mode:i(33)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,n,i){var t=i(21);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==t(e)?e.split(""):Object(e)}},function(e,n){n.f={}.propertyIsEnumerable},function(e,n,i){"use strict";var t=i(1);e.exports=function(){var e=t(this),n="";return e.global&&(n+="g"),e.ignoreCase&&(n+="i"),e.multiline&&(n+="m"),e.unicode&&(n+="u"),e.sticky&&(n+="y"),n}},function(e,n,i){var t=i(1),a=i(10),o=i(5)("species");e.exports=function(e,n){var i,r=t(e).constructor;return void 0===r||null==(i=t(r)[o])?n:a(i)}},function(e,n,i){"use strict";const t=i(76),a=i(110),o=i(163),r=i(164),s=i(428),c=i(112),p=/^https?:\/\/[^/]+\/(ip(f|n)s)\/((\w+).*)/,u=/^\/(ip(f|n)s)\/((\w+).*)/,l=/^https?:\/\/([^/]+)\.(ip(?:f|n)s)\.[^/]+/;function f(e){try{return new c(e),!0}catch(e){return!1}}function d(e){if(!e)return!1;if(r.isMultiaddr(e))return!0;try{return new r(e),!0}catch(e){return!1}}function m(e,n,i=1,t=4){const a=x(e);if(!a)return!1;const o=a.match(n);if(!o)return!1;if("ipfs"!==o[i])return!1;let r=o[t];return r&&n===l&&(r=r.toLowerCase()),f(r)}function v(e,n,i=1,t){const a=x(e);if(!a)return!1;const o=a.match(n);if(!o)return!1;if("ipns"!==o[i])return!1;if(t&&n===l){let e=o[t];return e=e.toLowerCase(),f(e)}return!0}function h(e){return"string"==typeof e}function x(e){return Buffer.isBuffer(e)?t.encode(e):!!h(e)&&e}const b=e=>m(e,l,2,1),g=e=>v(e,l,2,1);e.exports={multihash:function(e){const n=x(e);try{const e=Buffer.from(t.decode(n));return a.decode(e),!0}catch(e){return!1}},multiaddr:d,peerMultiaddr:function(e){return d(e)&&s.IPFS.matches(e)},cid:f,base32cid:e=>"base32"===function(e){try{return o.isEncoded(e)}catch(e){return!1}}(e)&&f(e),ipfsSubdomain:b,ipnsSubdomain:g,subdomain:e=>b(e)||g(e),subdomainPattern:l,ipfsUrl:e=>m(e,p),ipnsUrl:e=>v(e,p),url:e=>m(e,p)||v(e,p),urlPattern:p,ipfsPath:e=>m(e,u),ipnsPath:e=>v(e,u),path:e=>m(e,u)||v(e,u),pathPattern:u,urlOrPath:e=>m(e,p)||v(e,p)||m(e,u)||v(e,u),cidPath:e=>h(e)&&!f(e)&&m(`/ipfs/${e}`,u)}},function(e){e.exports=JSON.parse('{"identity":0,"ip4":4,"tcp":6,"sha1":17,"sha2-256":18,"sha2-512":19,"sha3-512":20,"sha3-384":21,"sha3-256":22,"sha3-224":23,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,"dccp":33,"murmur3-128":34,"murmur3-32":35,"ip6":41,"ip6zone":42,"path":47,"multicodec":48,"multihash":49,"multiaddr":50,"multibase":51,"dns":53,"dns4":54,"dns6":55,"dnsaddr":56,"protobuf":80,"cbor":81,"raw":85,"dbl-sha2-256":86,"rlp":96,"bencode":99,"dag-pb":112,"dag-cbor":113,"libp2p-key":114,"git-raw":120,"torrent-info":123,"torrent-file":124,"leofcoin-block":129,"leofcoin-tx":130,"leofcoin-pr":131,"sctp":132,"eth-block":144,"eth-block-list":145,"eth-tx-trie":146,"eth-tx":147,"eth-tx-receipt-trie":148,"eth-tx-receipt":149,"eth-state-trie":150,"eth-account-snapshot":151,"eth-storage-trie":152,"bitcoin-block":176,"bitcoin-tx":177,"zcash-block":192,"zcash-tx":193,"stellar-block":208,"stellar-tx":209,"md4":212,"md5":213,"bmt":214,"decred-block":224,"decred-tx":225,"ipld-ns":226,"ipfs-ns":227,"swarm-ns":228,"ipns-ns":229,"zeronet":230,"ed25519-pub":237,"dash-block":240,"dash-tx":241,"swarm-manifest":250,"swarm-feed":251,"udp":273,"p2p-webrtc-star":275,"p2p-webrtc-direct":276,"p2p-stardust":277,"p2p-circuit":290,"dag-json":297,"udt":301,"utp":302,"unix":400,"p2p":421,"ipfs":421,"https":443,"onion":444,"onion3":445,"garlic64":446,"garlic32":447,"tls":448,"quic":460,"ws":477,"wss":478,"p2p-websocket-star":479,"http":480,"json":512,"messagepack":513,"x11":4352,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"skein256-8":45825,"skein256-16":45826,"skein256-24":45827,"skein256-32":45828,"skein256-40":45829,"skein256-48":45830,"skein256-56":45831,"skein256-64":45832,"skein256-72":45833,"skein256-80":45834,"skein256-88":45835,"skein256-96":45836,"skein256-104":45837,"skein256-112":45838,"skein256-120":45839,"skein256-128":45840,"skein256-136":45841,"skein256-144":45842,"skein256-152":45843,"skein256-160":45844,"skein256-168":45845,"skein256-176":45846,"skein256-184":45847,"skein256-192":45848,"skein256-200":45849,"skein256-208":45850,"skein256-216":45851,"skein256-224":45852,"skein256-232":45853,"skein256-240":45854,"skein256-248":45855,"skein256-256":45856,"skein512-8":45857,"skein512-16":45858,"skein512-24":45859,"skein512-32":45860,"skein512-40":45861,"skein512-48":45862,"skein512-56":45863,"skein512-64":45864,"skein512-72":45865,"skein512-80":45866,"skein512-88":45867,"skein512-96":45868,"skein512-104":45869,"skein512-112":45870,"skein512-120":45871,"skein512-128":45872,"skein512-136":45873,"skein512-144":45874,"skein512-152":45875,"skein512-160":45876,"skein512-168":45877,"skein512-176":45878,"skein512-184":45879,"skein512-192":45880,"skein512-200":45881,"skein512-208":45882,"skein512-216":45883,"skein512-224":45884,"skein512-232":45885,"skein512-240":45886,"skein512-248":45887,"skein512-256":45888,"skein512-264":45889,"skein512-272":45890,"skein512-280":45891,"skein512-288":45892,"skein512-296":45893,"skein512-304":45894,"skein512-312":45895,"skein512-320":45896,"skein512-328":45897,"skein512-336":45898,"skein512-344":45899,"skein512-352":45900,"skein512-360":45901,"skein512-368":45902,"skein512-376":45903,"skein512-384":45904,"skein512-392":45905,"skein512-400":45906,"skein512-408":45907,"skein512-416":45908,"skein512-424":45909,"skein512-432":45910,"skein512-440":45911,"skein512-448":45912,"skein512-456":45913,"skein512-464":45914,"skein512-472":45915,"skein512-480":45916,"skein512-488":45917,"skein512-496":45918,"skein512-504":45919,"skein512-512":45920,"skein1024-8":45921,"skein1024-16":45922,"skein1024-24":45923,"skein1024-32":45924,"skein1024-40":45925,"skein1024-48":45926,"skein1024-56":45927,"skein1024-64":45928,"skein1024-72":45929,"skein1024-80":45930,"skein1024-88":45931,"skein1024-96":45932,"skein1024-104":45933,"skein1024-112":45934,"skein1024-120":45935,"skein1024-128":45936,"skein1024-136":45937,"skein1024-144":45938,"skein1024-152":45939,"skein1024-160":45940,"skein1024-168":45941,"skein1024-176":45942,"skein1024-184":45943,"skein1024-192":45944,"skein1024-200":45945,"skein1024-208":45946,"skein1024-216":45947,"skein1024-224":45948,"skein1024-232":45949,"skein1024-240":45950,"skein1024-248":45951,"skein1024-256":45952,"skein1024-264":45953,"skein1024-272":45954,"skein1024-280":45955,"skein1024-288":45956,"skein1024-296":45957,"skein1024-304":45958,"skein1024-312":45959,"skein1024-320":45960,"skein1024-328":45961,"skein1024-336":45962,"skein1024-344":45963,"skein1024-352":45964,"skein1024-360":45965,"skein1024-368":45966,"skein1024-376":45967,"skein1024-384":45968,"skein1024-392":45969,"skein1024-400":45970,"skein1024-408":45971,"skein1024-416":45972,"skein1024-424":45973,"skein1024-432":45974,"skein1024-440":45975,"skein1024-448":45976,"skein1024-456":45977,"skein1024-464":45978,"skein1024-472":45979,"skein1024-480":45980,"skein1024-488":45981,"skein1024-496":45982,"skein1024-504":45983,"skein1024-512":45984,"skein1024-520":45985,"skein1024-528":45986,"skein1024-536":45987,"skein1024-544":45988,"skein1024-552":45989,"skein1024-560":45990,"skein1024-568":45991,"skein1024-576":45992,"skein1024-584":45993,"skein1024-592":45994,"skein1024-600":45995,"skein1024-608":45996,"skein1024-616":45997,"skein1024-624":45998,"skein1024-632":45999,"skein1024-640":46000,"skein1024-648":46001,"skein1024-656":46002,"skein1024-664":46003,"skein1024-672":46004,"skein1024-680":46005,"skein1024-688":46006,"skein1024-696":46007,"skein1024-704":46008,"skein1024-712":46009,"skein1024-720":46010,"skein1024-728":46011,"skein1024-736":46012,"skein1024-744":46013,"skein1024-752":46014,"skein1024-760":46015,"skein1024-768":46016,"skein1024-776":46017,"skein1024-784":46018,"skein1024-792":46019,"skein1024-800":46020,"skein1024-808":46021,"skein1024-816":46022,"skein1024-824":46023,"skein1024-832":46024,"skein1024-840":46025,"skein1024-848":46026,"skein1024-856":46027,"skein1024-864":46028,"skein1024-872":46029,"skein1024-880":46030,"skein1024-888":46031,"skein1024-896":46032,"skein1024-904":46033,"skein1024-912":46034,"skein1024-920":46035,"skein1024-928":46036,"skein1024-936":46037,"skein1024-944":46038,"skein1024-952":46039,"skein1024-960":46040,"skein1024-968":46041,"skein1024-976":46042,"skein1024-984":46043,"skein1024-992":46044,"skein1024-1000":46045,"skein1024-1008":46046,"skein1024-1016":46047,"skein1024-1024":46048,"holochain-adr-v0":8417572,"holochain-adr-v1":8483108,"holochain-key-v0":9728292,"holochain-key-v1":9793828,"holochain-sig-v0":10645796,"holochain-sig-v1":10711332}')},function(e,n){e.exports=require("fs")},function(e,n,i){var t=i(16),a=i(6),o=i(39);e.exports=function(e){return function(n,i,r){var s,c=t(n),p=a(c.length),u=o(r,p);if(e&&i!=i){for(;p>u;)if((s=c[u++])!=s)return!0}else for(;p>u;u++)if((e||u in c)&&c[u]===i)return e||u||0;return!e&&-1}}},function(e,n){n.f=Object.getOwnPropertySymbols},function(e,n,i){var t=i(21);e.exports=Array.isArray||function(e){return"Array"==t(e)}},function(e,n,i){var t=i(22),a=i(28);e.exports=function(e){return function(n,i){var o,r,s=String(a(n)),c=t(i),p=s.length;return c<0||c>=p?e?"":void 0:(o=s.charCodeAt(c))<55296||o>56319||c+1===p||(r=s.charCodeAt(c+1))<56320||r>57343?e?s.charAt(c):o:e?s.slice(c,c+2):r-56320+(o-55296<<10)+65536}}},function(e,n,i){var t=i(4),a=i(21),o=i(5)("match");e.exports=function(e){var n;return t(e)&&(void 0!==(n=e[o])?!!n:"RegExp"==a(e))}},function(e,n,i){var t=i(5)("iterator"),a=!1;try{var o=[7][t]();o.return=function(){a=!0},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,n){if(!n&&!a)return!1;var i=!1;try{var o=[7],r=o[t]();r.next=function(){return{done:i=!0}},o[t]=function(){return r},e(o)}catch(e){}return i}},function(e,n,i){"use strict";var t=i(48),a=RegExp.prototype.exec;e.exports=function(e,n){var i=e.exec;if("function"==typeof i){var o=i.call(e,n);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==t(e))throw new TypeError("RegExp#exec called on incompatible receiver");return a.call(e,n)}},function(e,n,i){"use strict";i(135);var t=i(12),a=i(11),o=i(3),r=i(28),s=i(5),c=i(99),p=s("species"),u=!o((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),l=function(){var e=/(?:)/,n=e.exec;e.exec=function(){return n.apply(this,arguments)};var i="ab".split(e);return 2===i.length&&"a"===i[0]&&"b"===i[1]}();e.exports=function(e,n,i){var f=s(e),d=!o((function(){var n={};return n[f]=function(){return 7},7!=""[e](n)})),m=d?!o((function(){var n=!1,i=/a/;return i.exec=function(){return n=!0,null},"split"===e&&(i.constructor={},i.constructor[p]=function(){return i}),i[f](""),!n})):void 0;if(!d||!m||"replace"===e&&!u||"split"===e&&!l){var v=/./[f],h=i(r,f,""[e],(function(e,n,i,t,a){return n.exec===c?d&&!a?{done:!0,value:v.call(n,i,t)}:{done:!0,value:e.call(i,n,t)}:{done:!1}})),x=h[0],b=h[1];t(String.prototype,e,x),a(RegExp.prototype,f,2==n?function(e,n){return b.call(e,this,n)}:function(e){return b.call(e,this)})}}},function(e,n,i){var t=i(2).navigator;e.exports=t&&t.userAgent||""},function(e,n,i){"use strict";var t=i(2),a=i(0),o=i(12),r=i(45),s=i(34),c=i(44),p=i(43),u=i(4),l=i(3),f=i(65),d=i(47),m=i(85);e.exports=function(e,n,i,v,h,x){var b=t[e],g=b,k=h?"set":"add",y=g&&g.prototype,w={},S=function(e){var n=y[e];o(y,e,"delete"==e||"has"==e?function(e){return!(x&&!u(e))&&n.call(this,0===e?0:e)}:"get"==e?function(e){return x&&!u(e)?void 0:n.call(this,0===e?0:e)}:"add"==e?function(e){return n.call(this,0===e?0:e),this}:function(e,i){return n.call(this,0===e?0:e,i),this})};if("function"==typeof g&&(x||y.forEach&&!l((function(){(new g).entries().next()})))){var _=new g,j=_[k](x?{}:-0,1)!=_,E=l((function(){_.has(1)})),C=f((function(e){new g(e)})),O=!x&&l((function(){for(var e=new g,n=5;n--;)e[k](n,n);return!e.has(-0)}));C||((g=n((function(n,i){p(n,g,e);var t=m(new b,n,g);return null!=i&&c(i,h,t[k],t),t}))).prototype=y,y.constructor=g),(E||O)&&(S("delete"),S("has"),h&&S("get")),(O||j)&&S(k),x&&y.clear&&delete y.clear}else g=v.getConstructor(n,e,h,k),r(g.prototype,i),s.NEED=!0;return d(g,e),w[e]=g,a(a.G+a.W+a.F*(g!=b),w),x||v.setStrong(g,e,h),g}},function(e,n,i){for(var t,a=i(2),o=i(11),r=i(37),s=r("typed_array"),c=r("view"),p=!(!a.ArrayBuffer||!a.DataView),u=p,l=0,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(t=a[f[l++]])?(o(t.prototype,s,!0),o(t.prototype,c,!0)):u=!1;e.exports={ABV:p,CONSTR:u,TYPED:s,VIEW:c}},function(e,n,i){"use strict";e.exports=i(33)||!i(3)((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete i(2)[e]}))},function(e,n,i){"use strict";var t=i(0);e.exports=function(e){t(t.S,e,{of:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return new this(n)}})}},function(e,n,i){"use strict";var t=i(0),a=i(10),o=i(20),r=i(44);e.exports=function(e){t(t.S,e,{from:function(e){var n,i,t,s,c=arguments[1];return a(this),(n=void 0!==c)&&a(c),null==e?new this:(i=[],n?(t=0,s=o(c,arguments[2],2),r(e,!1,(function(e){i.push(s(e,t++))}))):r(e,!1,i.push,i),new this(i))}})}},function(e,n){e.exports=require("stream")},function(e,n){e.exports=require("util")},function(e,n,i){var t=i(161);e.exports=t("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},function(e,n){e.exports=require("path")},function(e,n,i){var t=i(4),a=i(2).document,o=t(a)&&t(a.createElement);e.exports=function(e){return o?a.createElement(e):{}}},function(e,n,i){var t=i(2),a=i(19),o=i(33),r=i(117),s=i(8).f;e.exports=function(e){var n=a.Symbol||(a.Symbol=o?{}:t.Symbol||{});"_"==e.charAt(0)||e in n||s(n,e,{value:r.f(e)})}},function(e,n,i){var t=i(52)("keys"),a=i(37);e.exports=function(e){return t[e]||(t[e]=a(e))}},function(e,n){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,n,i){var t=i(2).document;e.exports=t&&t.documentElement},function(e,n,i){var t=i(4),a=i(1),o=function(e,n){if(a(e),!t(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,t){try{(t=i(20)(Function.call,i(17).f(Object.prototype,"__proto__").set,2))(e,[]),n=!(e instanceof Array)}catch(e){n=!0}return function(e,i){return o(e,i),n?e.__proto__=i:t(e,i),e}}({},!1):void 0),check:o}},function(e,n){e.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(e,n,i){var t=i(4),a=i(83).set;e.exports=function(e,n,i){var o,r=n.constructor;return r!==i&&"function"==typeof r&&(o=r.prototype)!==i.prototype&&t(o)&&a&&a(e,o),e}},function(e,n,i){"use strict";var t=i(22),a=i(28);e.exports=function(e){var n=String(a(this)),i="",o=t(e);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(n+=n))1&o&&(i+=n);return i}},function(e,n){e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,n){var i=Math.expm1;e.exports=!i||i(10)>22025.465794806718||i(10)<22025.465794806718||-2e-17!=i(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:i},function(e,n,i){"use strict";var t=i(33),a=i(0),o=i(12),r=i(11),s=i(50),c=i(90),p=i(47),u=i(18),l=i(5)("iterator"),f=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,n,i,m,v,h,x){c(i,n,m);var b,g,k,y=function(e){if(!f&&e in j)return j[e];switch(e){case"keys":case"values":return function(){return new i(this,e)}}return function(){return new i(this,e)}},w=n+" Iterator",S="values"==v,_=!1,j=e.prototype,E=j[l]||j["@@iterator"]||v&&j[v],C=E||y(v),O=v?S?y("entries"):C:void 0,A="Array"==n&&j.entries||E;if(A&&(k=u(A.call(new e)))!==Object.prototype&&k.next&&(p(k,w,!0),t||"function"==typeof k[l]||r(k,l,d)),S&&E&&"values"!==E.name&&(_=!0,C=function(){return E.call(this)}),t&&!x||!f&&!_&&j[l]||r(j,l,C),s[n]=C,s[w]=d,v)if(b={values:S?C:y("values"),keys:h?C:y("keys"),entries:O},x)for(g in b)g in j||o(j,g,b[g]);else a(a.P+a.F*(f||_),n,b);return b}},function(e,n,i){"use strict";var t=i(40),a=i(36),o=i(47),r={};i(11)(r,i(5)("iterator"),(function(){return this})),e.exports=function(e,n,i){e.prototype=t(r,{next:a(1,i)}),o(e,n+" Iterator")}},function(e,n,i){var t=i(64),a=i(28);e.exports=function(e,n,i){if(t(n))throw TypeError("String#"+i+" doesn't accept regex!");return String(a(e))}},function(e,n,i){var t=i(5)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(i){try{return n[t]=!1,!"/./"[e](n)}catch(e){}}return!0}},function(e,n,i){var t=i(50),a=i(5)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(t.Array===e||o[a]===e)}},function(e,n,i){"use strict";var t=i(8),a=i(36);e.exports=function(e,n,i){n in e?t.f(e,n,a(0,i)):e[n]=i}},function(e,n,i){var t=i(48),a=i(5)("iterator"),o=i(50);e.exports=i(19).getIteratorMethod=function(e){if(null!=e)return e[a]||e["@@iterator"]||o[t(e)]}},function(e,n,i){var t=i(267);e.exports=function(e,n){return new(t(e))(n)}},function(e,n,i){"use strict";var t=i(9),a=i(39),o=i(6);e.exports=function(e){for(var n=t(this),i=o(n.length),r=arguments.length,s=a(r>1?arguments[1]:void 0,i),c=r>2?arguments[2]:void 0,p=void 0===c?i:a(c,i);p>s;)n[s++]=e;return n}},function(e,n,i){"use strict";var t=i(35),a=i(134),o=i(50),r=i(16);e.exports=i(89)(Array,"Array",(function(e,n){this._t=r(e),this._i=0,this._k=n}),(function(){var e=this._t,n=this._k,i=this._i++;return!e||i>=e.length?(this._t=void 0,a(1)):a(0,"keys"==n?i:"values"==n?e[i]:[i,e[i]])}),"values"),o.Arguments=o.Array,t("keys"),t("values"),t("entries")},function(e,n,i){"use strict";var t,a,o=i(55),r=RegExp.prototype.exec,s=String.prototype.replace,c=r,p=(t=/a/,a=/b*/g,r.call(t,"a"),r.call(a,"a"),0!==t.lastIndex||0!==a.lastIndex),u=void 0!==/()??/.exec("")[1];(p||u)&&(c=function(e){var n,i,t,a,c=this;return u&&(i=new RegExp("^"+c.source+"$(?!\\s)",o.call(c))),p&&(n=c.lastIndex),t=r.call(c,e),p&&t&&(c.lastIndex=c.global?t.index+t[0].length:n),u&&t&&t.length>1&&s.call(t[0],i,(function(){for(a=1;ai;)n.push(arguments[i++]);return x[++h]=function(){s("function"==typeof e?e:Function(e),n)},t(h),h},d=function(e){delete x[e]},"process"==i(21)(l)?t=function(e){l.nextTick(r(b,e,1))}:v&&v.now?t=function(e){v.now(r(b,e,1))}:m?(o=(a=new m).port2,a.port1.onmessage=g,t=r(o.postMessage,o,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(t=function(e){u.postMessage(e+"","*")},u.addEventListener("message",g,!1)):t="onreadystatechange"in p("script")?function(e){c.appendChild(p("script")).onreadystatechange=function(){c.removeChild(this),b.call(e)}}:function(e){setTimeout(r(b,e,1),0)}),e.exports={set:f,clear:d}},function(e,n,i){var t=i(2),a=i(101).set,o=t.MutationObserver||t.WebKitMutationObserver,r=t.process,s=t.Promise,c="process"==i(21)(r);e.exports=function(){var e,n,i,p=function(){var t,a;for(c&&(t=r.domain)&&t.exit();e;){a=e.fn,e=e.next;try{a()}catch(t){throw e?i():n=void 0,t}}n=void 0,t&&t.enter()};if(c)i=function(){r.nextTick(p)};else if(!o||t.navigator&&t.navigator.standalone)if(s&&s.resolve){var u=s.resolve(void 0);i=function(){u.then(p)}}else i=function(){a.call(t,p)};else{var l=!0,f=document.createTextNode("");new o(p).observe(f,{characterData:!0}),i=function(){f.data=l=!l}}return function(t){var a={fn:t,next:void 0};n&&(n.next=a),e||(e=a,i()),n=a}}},function(e,n,i){"use strict";var t=i(10);function a(e){var n,i;this.promise=new e((function(e,t){if(void 0!==n||void 0!==i)throw TypeError("Bad Promise constructor");n=e,i=t})),this.resolve=t(n),this.reject=t(i)}e.exports.f=function(e){return new a(e)}},function(e,n,i){"use strict";var t=i(2),a=i(7),o=i(33),r=i(70),s=i(11),c=i(45),p=i(3),u=i(43),l=i(22),f=i(6),d=i(144),m=i(41).f,v=i(8).f,h=i(97),x=i(47),b=t.ArrayBuffer,g=t.DataView,k=t.Math,y=t.RangeError,w=t.Infinity,S=b,_=k.abs,j=k.pow,E=k.floor,C=k.log,O=k.LN2,A=a?"_b":"buffer",P=a?"_l":"byteLength",M=a?"_o":"byteOffset";function F(e,n,i){var t,a,o,r=new Array(i),s=8*i-n-1,c=(1<>1,u=23===n?j(2,-24)-j(2,-77):0,l=0,f=e<0||0===e&&1/e<0?1:0;for((e=_(e))!=e||e===w?(a=e!=e?1:0,t=c):(t=E(C(e)/O),e*(o=j(2,-t))<1&&(t--,o*=2),(e+=t+p>=1?u/o:u*j(2,1-p))*o>=2&&(t++,o/=2),t+p>=c?(a=0,t=c):t+p>=1?(a=(e*o-1)*j(2,n),t+=p):(a=e*j(2,p-1)*j(2,n),t=0));n>=8;r[l++]=255&a,a/=256,n-=8);for(t=t<0;r[l++]=255&t,t/=256,s-=8);return r[--l]|=128*f,r}function B(e,n,i){var t,a=8*i-n-1,o=(1<>1,s=a-7,c=i-1,p=e[c--],u=127&p;for(p>>=7;s>0;u=256*u+e[c],c--,s-=8);for(t=u&(1<<-s)-1,u>>=-s,s+=n;s>0;t=256*t+e[c],c--,s-=8);if(0===u)u=1-r;else{if(u===o)return t?NaN:p?-w:w;t+=j(2,n),u-=r}return(p?-1:1)*t*j(2,u-n)}function N(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function I(e){return[255&e]}function z(e){return[255&e,e>>8&255]}function T(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return F(e,52,8)}function R(e){return F(e,23,4)}function q(e,n,i){v(e.prototype,n,{get:function(){return this[i]}})}function D(e,n,i,t){var a=d(+i);if(a+n>e[P])throw y("Wrong index!");var o=e[A]._b,r=a+e[M],s=o.slice(r,r+n);return t?s:s.reverse()}function U(e,n,i,t,a,o){var r=d(+i);if(r+n>e[P])throw y("Wrong index!");for(var s=e[A]._b,c=r+e[M],p=t(+a),u=0;uG;)($=W[G++])in b||s(b,$,S[$]);o||(V.constructor=b)}var H=new g(new b(2)),K=g.prototype.setInt8;H.setInt8(0,2147483648),H.setInt8(1,2147483649),!H.getInt8(0)&&H.getInt8(1)||c(g.prototype,{setInt8:function(e,n){K.call(this,e,n<<24>>24)},setUint8:function(e,n){K.call(this,e,n<<24>>24)}},!0)}else b=function(e){u(this,b,"ArrayBuffer");var n=d(e);this._b=h.call(new Array(n),0),this[P]=n},g=function(e,n,i){u(this,g,"DataView"),u(e,b,"DataView");var t=e[P],a=l(n);if(a<0||a>t)throw y("Wrong offset!");if(a+(i=void 0===i?t-a:f(i))>t)throw y("Wrong length!");this[A]=e,this[M]=a,this[P]=i},a&&(q(b,"byteLength","_l"),q(g,"buffer","_b"),q(g,"byteLength","_l"),q(g,"byteOffset","_o")),c(g.prototype,{getInt8:function(e){return D(this,1,e)[0]<<24>>24},getUint8:function(e){return D(this,1,e)[0]},getInt16:function(e){var n=D(this,2,e,arguments[1]);return(n[1]<<8|n[0])<<16>>16},getUint16:function(e){var n=D(this,2,e,arguments[1]);return n[1]<<8|n[0]},getInt32:function(e){return N(D(this,4,e,arguments[1]))},getUint32:function(e){return N(D(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return B(D(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return B(D(this,8,e,arguments[1]),52,8)},setInt8:function(e,n){U(this,1,e,I,n)},setUint8:function(e,n){U(this,1,e,I,n)},setInt16:function(e,n){U(this,2,e,z,n,arguments[2])},setUint16:function(e,n){U(this,2,e,z,n,arguments[2])},setInt32:function(e,n){U(this,4,e,T,n,arguments[2])},setUint32:function(e,n){U(this,4,e,T,n,arguments[2])},setFloat32:function(e,n){U(this,4,e,R,n,arguments[2])},setFloat64:function(e,n){U(this,8,e,L,n,arguments[2])}});x(b,"ArrayBuffer"),x(g,"DataView"),s(g.prototype,r.VIEW,!0),n.ArrayBuffer=b,n.DataView=g},function(e,n,i){"use strict";var t=i(14),a=i(382),o={"Content-Type":"application/x-www-form-urlencoded"};function r(e,n){!t.isUndefined(e)&&t.isUndefined(e["Content-Type"])&&(e["Content-Type"]=n)}var s,c={adapter:("undefined"!=typeof XMLHttpRequest?s=i(383):"undefined"!=typeof process&&(s=i(387)),s),transformRequest:[function(e,n){return a(n,"Content-Type"),t.isFormData(e)||t.isArrayBuffer(e)||t.isBuffer(e)||t.isStream(e)||t.isFile(e)||t.isBlob(e)?e:t.isArrayBufferView(e)?e.buffer:t.isURLSearchParams(e)?(r(n,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):t.isObject(e)?(r(n,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},t.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),t.forEach(["post","put","patch"],(function(e){c.headers[e]=t.merge(o)})),e.exports=c},function(e,n,i){"use strict";var t=i(154);e.exports=function(e,n,i,a,o){var r=new Error(e);return t(r,n,i,a,o)}},function(e,n){e.exports=require("http")},function(e,n){e.exports=require("https")},function(e,n){e.exports=require("url")},function(e,n,i){"use strict";const t=i(76),a=i(406);n.names=a.names,n.codes=a.codes,n.defaultLengths=a.defaultLengths;const o=i(51);function r(e){n.decode(e)}n.toHexString=function(e){if(!Buffer.isBuffer(e))throw new Error("must be passed a buffer");return e.toString("hex")},n.fromHexString=function(e){return Buffer.from(e,"hex")},n.toB58String=function(e){if(!Buffer.isBuffer(e))throw new Error("must be passed a buffer");return t.encode(e)},n.fromB58String=function(e){let n=e;return Buffer.isBuffer(e)&&(n=e.toString()),Buffer.from(t.decode(n))},n.decode=function(e){if(!Buffer.isBuffer(e))throw new Error("multihash must be a Buffer");if(e.length<3)throw new Error("multihash too short. must be > 3 bytes.");const i=o.decode(e);if(!n.isValidCode(i))throw new Error(`multihash unknown function code: 0x${i.toString(16)}`);e=e.slice(o.decode.bytes);const t=o.decode(e);if(t<1)throw new Error(`multihash invalid length: 0x${t.toString(16)}`);if((e=e.slice(o.decode.bytes)).length!==t)throw new Error(`multihash length inconsistent: 0x${e.toString("hex")}`);return{code:i,name:a.codes[i],length:t,digest:e}},n.encode=function(e,i,t){if(!e||void 0===i)throw new Error("multihash encode requires at least two args: digest, code");const a=n.coerceCode(i);if(!Buffer.isBuffer(e))throw new Error("digest should be a Buffer");if(null==t&&(t=e.length),t&&e.length!==t)throw new Error("digest length should be equal to specified length.");return Buffer.concat([Buffer.from(o.encode(a)),Buffer.from(o.encode(t)),e])},n.coerceCode=function(e){let i=e;if("string"==typeof e){if(void 0===a.names[e])throw new Error(`Unrecognized hash function named: ${e}`);i=a.names[e]}if("number"!=typeof i)throw new Error(`Hash function code should be a number. Got: ${i}`);if(void 0===a.codes[i]&&!n.isAppCode(i))throw new Error(`Unrecognized function code: ${i}`);return i},n.isAppCode=function(e){return e>0&&e<16},n.isValidCode=function(e){return!!n.isAppCode(e)||!!a.codes[e]},n.validate=r,n.prefix=function(e){return r(e),e.slice(0,2)}},function(e,n,i){"use strict";function t(e){if("number"==typeof e){if(t.codes[e])return t.codes[e];throw new Error("no protocol with code: "+e)}if("string"==typeof e||e instanceof String){if(t.names[e])return t.names[e];throw new Error("no protocol with name: "+e)}throw new Error("invalid protocol id type: "+e)}const a=-1;function o(e,n,i,t,a){return{code:e,size:n,name:i,resolvable:Boolean(t),path:Boolean(a)}}t.lengthPrefixedVarSize=a,t.V=a,t.table=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,a,"ip6zone"],[53,a,"dns","resolvable"],[54,a,"dns4","resolvable"],[55,a,"dns6","resolvable"],[56,a,"dnsaddr","resolvable"],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,a,"unix",!1,"path"],[421,a,"ipfs"],[421,a,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,a,"garlic64"],[460,0,"quic"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"]],t.names={},t.codes={},t.table.map(e=>{const n=o.apply(null,e);t.codes[n.code]=n,t.names[n.name]=n}),t.object=o,e.exports=t},function(e,n,i){"use strict";const t=i(110),a=i(163),o=i(420),r=i(58),s=i(425);class c{constructor(e,n,i,r){if(p.isCID(e)){const n=e;return this.version=n.version,this.codec=n.codec,this.multihash=Buffer.from(n.multihash),void(this.multibaseName=n.multibaseName||(0===n.version?"base58btc":"base32"))}if("string"==typeof e){const n=a.isEncoded(e);if(n){const i=a.decode(e);this.version=parseInt(i.slice(0,1).toString("hex"),16),this.codec=o.getCodec(i.slice(1)),this.multihash=o.rmPrefix(i.slice(1)),this.multibaseName=n}else this.version=0,this.codec="dag-pb",this.multihash=t.fromB58String(e),this.multibaseName="base58btc";return c.validateCID(this),void Object.defineProperty(this,"string",{value:e})}if(Buffer.isBuffer(e)){const n=e.slice(0,1),i=parseInt(n.toString("hex"),16);if(1===i){const n=e;this.version=i,this.codec=o.getCodec(n.slice(1)),this.multihash=o.rmPrefix(n.slice(1)),this.multibaseName="base32"}else this.version=0,this.codec="dag-pb",this.multihash=e,this.multibaseName="base58btc";c.validateCID(this)}else this.version=e,this.codec=n,this.multihash=i,this.multibaseName=r||(0===e?"base58btc":"base32"),c.validateCID(this)}get buffer(){let e=this._buffer;if(!e){if(0===this.version)e=this.multihash;else{if(1!==this.version)throw new Error("unsupported version");e=Buffer.concat([Buffer.from("01","hex"),o.getCodeVarint(this.codec),this.multihash])}Object.defineProperty(this,"_buffer",{value:e})}return e}get prefix(){return Buffer.concat([Buffer.from(`0${this.version}`,"hex"),o.getCodeVarint(this.codec),t.prefix(this.multihash)])}toV0(){if("dag-pb"!==this.codec)throw new Error("Cannot convert a non dag-pb CID to CIDv0");const{name:e,length:n}=t.decode(this.multihash);if("sha2-256"!==e)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");if(32!==n)throw new Error("Cannot convert non 32 byte multihash CID to CIDv0");return new p(0,this.codec,this.multihash)}toV1(){return new p(1,this.codec,this.multihash)}toBaseEncodedString(e=this.multibaseName){if(this.string&&e===this.multibaseName)return this.string;let n=null;if(0===this.version){if("base58btc"!==e)throw new Error("not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()");n=t.toB58String(this.multihash)}else{if(1!==this.version)throw new Error("unsupported version");n=a.encode(e,this.buffer).toString()}return e===this.multibaseName&&Object.defineProperty(this,"string",{value:n}),n}toString(e){return this.toBaseEncodedString(e)}toJSON(){return{codec:this.codec,version:this.version,hash:this.multihash}}equals(e){return this.codec===e.codec&&this.version===e.version&&this.multihash.equals(e.multihash)}static validateCID(e){const n=s.checkCIDComponents(e);if(n)throw new Error(n)}}const p=i(166)(c,{className:"CID",symbolName:"@ipld/js-cid/CID"});p.codecs=r,e.exports=p},function(e,n,i){var t=i(59),a=i(77);n.readdirr=function(e,n){var i=[],o=[];i.push(e),function e(r){if(r==i.length)return n(null,i,o);t.readdir(i[r],(function(s,c){if(s)return n(s);!function(e,n,r){!function s(c){if(c==n.length)return r();var p=a.join(e,n[c]);t.stat(p,(function(e,n){if(e)return r(e);n.isDirectory()?i.push(p):o.push(p),s(++c)}))}(0)}(i[r],c,(function(i){if(i)return n(i);e(++r)}))}))}(0)}},function(e,n,i){var t=i(59),a=i(113).readdirr;function o(e,n){return e>n?-1:ec;)t(s,i=n[c++])&&(~o(p,i)||p.push(i));return p}},function(e,n,i){var t=i(8),a=i(1),o=i(38);e.exports=i(7)?Object.defineProperties:function(e,n){a(e);for(var i,r=o(n),s=r.length,c=0;s>c;)t.f(e,i=r[c++],n[i]);return e}},function(e,n,i){var t=i(16),a=i(41).f,o={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return r&&"[object Window]"==o.call(e)?function(e){try{return a(e)}catch(e){return r.slice()}}(e):a(t(e))}},function(e,n,i){"use strict";var t=i(7),a=i(38),o=i(61),r=i(54),s=i(9),c=i(53),p=Object.assign;e.exports=!p||i(3)((function(){var e={},n={},i=Symbol(),t="abcdefghijklmnopqrst";return e[i]=7,t.split("").forEach((function(e){n[e]=e})),7!=p({},e)[i]||Object.keys(p({},n)).join("")!=t}))?function(e,n){for(var i=s(e),p=arguments.length,u=1,l=o.f,f=r.f;p>u;)for(var d,m=c(arguments[u++]),v=l?a(m).concat(l(m)):a(m),h=v.length,x=0;h>x;)d=v[x++],t&&!f.call(m,d)||(i[d]=m[d]);return i}:p},function(e,n){e.exports=Object.is||function(e,n){return e===n?0!==e||1/e==1/n:e!=e&&n!=n}},function(e,n,i){"use strict";var t=i(10),a=i(4),o=i(124),r=[].slice,s={},c=function(e,n,i){if(!(n in s)){for(var t=[],a=0;a>>0||(r.test(i)?16:10))}:t},function(e,n,i){var t=i(2).parseFloat,a=i(49).trim;e.exports=1/t(i(84)+"-0")!=-1/0?function(e){var n=a(String(e),3),i=t(n);return 0===i&&"-"==n.charAt(0)?-0:i}:t},function(e,n,i){var t=i(21);e.exports=function(e,n){if("number"!=typeof e&&"Number"!=t(e))throw TypeError(n);return+e}},function(e,n,i){var t=i(4),a=Math.floor;e.exports=function(e){return!t(e)&&isFinite(e)&&a(e)===e}},function(e,n){e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(e,n,i){var t=i(87),a=Math.pow,o=a(2,-52),r=a(2,-23),s=a(2,127)*(2-r),c=a(2,-126);e.exports=Math.fround||function(e){var n,i,a=Math.abs(e),p=t(e);return as||i!=i?p*(1/0):p*i}},function(e,n,i){var t=i(1);e.exports=function(e,n,i,a){try{return a?n(t(i)[0],i[1]):n(i)}catch(n){var o=e.return;throw void 0!==o&&t(o.call(e)),n}}},function(e,n,i){var t=i(10),a=i(9),o=i(53),r=i(6);e.exports=function(e,n,i,s,c){t(n);var p=a(e),u=o(p),l=r(p.length),f=c?l-1:0,d=c?-1:1;if(i<2)for(;;){if(f in u){s=u[f],f+=d;break}if(f+=d,c?f<0:l<=f)throw TypeError("Reduce of empty array with no initial value")}for(;c?f>=0:l>f;f+=d)f in u&&(s=n(s,u[f],f,p));return s}},function(e,n,i){"use strict";var t=i(9),a=i(39),o=i(6);e.exports=[].copyWithin||function(e,n){var i=t(this),r=o(i.length),s=a(e,r),c=a(n,r),p=arguments.length>2?arguments[2]:void 0,u=Math.min((void 0===p?r:a(p,r))-c,r-s),l=1;for(c0;)c in i?i[s]=i[c]:delete i[s],s+=l,c+=l;return i}},function(e,n){e.exports=function(e,n){return{value:n,done:!!e}}},function(e,n,i){"use strict";var t=i(99);i(0)({target:"RegExp",proto:!0,forced:t!==/./.exec},{exec:t})},function(e,n,i){i(7)&&"g"!=/./g.flags&&i(8).f(RegExp.prototype,"flags",{configurable:!0,get:i(55)})},function(e,n){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,n,i){var t=i(1),a=i(4),o=i(103);e.exports=function(e,n){if(t(e),a(n)&&n.constructor===e)return n;var i=o.f(e);return(0,i.resolve)(n),i.promise}},function(e,n,i){"use strict";var t=i(140),a=i(46);e.exports=i(69)("Map",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(e){var n=t.getEntry(a(this,"Map"),e);return n&&n.v},set:function(e,n){return t.def(a(this,"Map"),0===e?0:e,n)}},t,!0)},function(e,n,i){"use strict";var t=i(8).f,a=i(40),o=i(45),r=i(20),s=i(43),c=i(44),p=i(89),u=i(134),l=i(42),f=i(7),d=i(34).fastKey,m=i(46),v=f?"_s":"size",h=function(e,n){var i,t=d(n);if("F"!==t)return e._i[t];for(i=e._f;i;i=i.n)if(i.k==n)return i};e.exports={getConstructor:function(e,n,i,p){var u=e((function(e,t){s(e,u,n,"_i"),e._t=n,e._i=a(null),e._f=void 0,e._l=void 0,e[v]=0,null!=t&&c(t,i,e[p],e)}));return o(u.prototype,{clear:function(){for(var e=m(this,n),i=e._i,t=e._f;t;t=t.n)t.r=!0,t.p&&(t.p=t.p.n=void 0),delete i[t.i];e._f=e._l=void 0,e[v]=0},delete:function(e){var i=m(this,n),t=h(i,e);if(t){var a=t.n,o=t.p;delete i._i[t.i],t.r=!0,o&&(o.n=a),a&&(a.p=o),i._f==t&&(i._f=a),i._l==t&&(i._l=o),i[v]--}return!!t},forEach:function(e){m(this,n);for(var i,t=r(e,arguments.length>1?arguments[1]:void 0,3);i=i?i.n:this._f;)for(t(i.v,i.k,this);i&&i.r;)i=i.p},has:function(e){return!!h(m(this,n),e)}}),f&&t(u.prototype,"size",{get:function(){return m(this,n)[v]}}),u},def:function(e,n,i){var t,a,o=h(e,n);return o?o.v=i:(e._l=o={i:a=d(n,!0),k:n,v:i,p:t=e._l,n:void 0,r:!1},e._f||(e._f=o),t&&(t.n=o),e[v]++,"F"!==a&&(e._i[a]=o)),e},getEntry:h,setStrong:function(e,n,i){p(e,n,(function(e,i){this._t=m(e,n),this._k=i,this._l=void 0}),(function(){for(var e=this._k,n=this._l;n&&n.r;)n=n.p;return this._t&&(this._l=n=n?n.n:this._t._f)?u(0,"keys"==e?n.k:"values"==e?n.v:[n.k,n.v]):(this._t=void 0,u(1))}),i?"entries":"values",!i,!0),l(n)}}},function(e,n,i){"use strict";var t=i(140),a=i(46);e.exports=i(69)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return t.def(a(this,"Set"),e=0===e?0:e,e)}},t)},function(e,n,i){"use strict";var t,a=i(2),o=i(30)(0),r=i(12),s=i(34),c=i(121),p=i(143),u=i(4),l=i(46),f=i(46),d=!a.ActiveXObject&&"ActiveXObject"in a,m=s.getWeak,v=Object.isExtensible,h=p.ufstore,x=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(e){if(u(e)){var n=m(e);return!0===n?h(l(this,"WeakMap")).get(e):n?n[this._i]:void 0}},set:function(e,n){return p.def(l(this,"WeakMap"),e,n)}},g=e.exports=i(69)("WeakMap",x,b,p,!0,!0);f&&d&&(c((t=p.getConstructor(x,"WeakMap")).prototype,b),s.NEED=!0,o(["delete","has","get","set"],(function(e){var n=g.prototype,i=n[e];r(n,e,(function(n,a){if(u(n)&&!v(n)){this._f||(this._f=new t);var o=this._f[e](n,a);return"set"==e?this:o}return i.call(this,n,a)}))})))},function(e,n,i){"use strict";var t=i(45),a=i(34).getWeak,o=i(1),r=i(4),s=i(43),c=i(44),p=i(30),u=i(15),l=i(46),f=p(5),d=p(6),m=0,v=function(e){return e._l||(e._l=new h)},h=function(){this.a=[]},x=function(e,n){return f(e.a,(function(e){return e[0]===n}))};h.prototype={get:function(e){var n=x(this,e);if(n)return n[1]},has:function(e){return!!x(this,e)},set:function(e,n){var i=x(this,e);i?i[1]=n:this.a.push([e,n])},delete:function(e){var n=d(this.a,(function(n){return n[0]===e}));return~n&&this.a.splice(n,1),!!~n}},e.exports={getConstructor:function(e,n,i,o){var p=e((function(e,t){s(e,p,n,"_i"),e._t=n,e._i=m++,e._l=void 0,null!=t&&c(t,i,e[o],e)}));return t(p.prototype,{delete:function(e){if(!r(e))return!1;var i=a(e);return!0===i?v(l(this,n)).delete(e):i&&u(i,this._i)&&delete i[this._i]},has:function(e){if(!r(e))return!1;var i=a(e);return!0===i?v(l(this,n)).has(e):i&&u(i,this._i)}}),p},def:function(e,n,i){var t=a(o(n),!0);return!0===t?v(e).set(n,i):t[e._i]=i,e},ufstore:v}},function(e,n,i){var t=i(22),a=i(6);e.exports=function(e){if(void 0===e)return 0;var n=t(e),i=a(n);if(n!==i)throw RangeError("Wrong length!");return i}},function(e,n,i){var t=i(41),a=i(61),o=i(1),r=i(2).Reflect;e.exports=r&&r.ownKeys||function(e){var n=t.f(o(e)),i=a.f;return i?n.concat(i(e)):n}},function(e,n,i){"use strict";var t=i(62),a=i(4),o=i(6),r=i(20),s=i(5)("isConcatSpreadable");e.exports=function e(n,i,c,p,u,l,f,d){for(var m,v,h=u,x=0,b=!!f&&r(f,d,3);x0)h=e(n,i,m,o(m.length),h,l-1)-1;else{if(h>=9007199254740991)throw TypeError();n[h]=m}h++}x++}return h}},function(e,n,i){var t=i(6),a=i(86),o=i(28);e.exports=function(e,n,i,r){var s=String(o(e)),c=s.length,p=void 0===i?" ":String(i),u=t(n);if(u<=c||""==p)return s;var l=u-c,f=a.call(p,Math.ceil(l/p.length));return f.length>l&&(f=f.slice(0,l)),r?f+s:s+f}},function(e,n,i){var t=i(7),a=i(38),o=i(16),r=i(54).f;e.exports=function(e){return function(n){for(var i,s=o(n),c=a(s),p=c.length,u=0,l=[];p>u;)i=c[u++],t&&!r.call(s,i)||l.push(e?[i,s[i]]:s[i]);return l}}},function(e,n,i){var t=i(48),a=i(150);e.exports=function(e){return function(){if(t(this)!=e)throw TypeError(e+"#toJSON isn't generic");return a(this)}}},function(e,n,i){var t=i(44);e.exports=function(e,n){var i=[];return t(e,!1,i.push,i,n),i}},function(e,n){e.exports=Math.scale||function(e,n,i,t,a){return 0===arguments.length||e!=e||n!=n||i!=i||t!=t||a!=a?NaN:e===1/0||e===-1/0?e:(e-n)*(a-t)/(i-n)+t}},function(e,n,i){"use strict";e.exports=function(e,n){return function(){for(var i=new Array(arguments.length),t=0;t=300&&e.statusCode<400){if(++this._redirectCount>this._options.maxRedirects)return void this.emit("error",new Error("Max redirects exceeded."));var i,a=this._options.headers;if(307!==e.statusCode&&!(this._options.method in p))for(i in this._options.method="GET",this._requestBodyBuffers=[],a)/^content-/i.test(i)&&delete a[i];if(!this._isRedirect)for(i in a)/^host$/i.test(i)&&delete a[i];var o=t.resolve(this._currentUrl,n);c("redirecting to",o),Object.assign(this._options,t.parse(o)),this._isRedirect=!0,this._performRequest(),e.destroy()}else e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),this._requestBodyBuffers=[]},e.exports=f({http:a,https:o}),e.exports.wrap=f},function(e,n,i){function t(e){var i;function t(){if(t.enabled){var e=t,a=+new Date,o=a-(i||a);e.diff=o,e.prev=i,e.curr=a,i=a;for(var r=new Array(arguments.length),s=0;s=255)throw new TypeError("Alphabet too long");for(var n=new Uint8Array(256),i=0;i>>0,u=new Uint8Array(r);e[i];){var l=n[e.charCodeAt(i)];if(255===l)return;for(var f=0,d=r-1;(0!==l||f>>0,u[d]=l%256>>>0,l=l/256>>>0;if(0!==l)throw new Error("Non-zero carry");o=f,i++}if(" "!==e[i]){for(var m=r-o;m!==r&&0===u[m];)m++;var v=t.allocUnsafe(a+(r-m));v.fill(0,0,a);for(var h=a;m!==r;)v[h++]=u[m++];return v}}}return{encode:function(n){if((Array.isArray(n)||n instanceof Uint8Array)&&(n=t.from(n)),!t.isBuffer(n))throw new TypeError("Expected Buffer");if(0===n.length)return"";for(var i=0,a=0,o=0,r=n.length;o!==r&&0===n[o];)o++,i++;for(var p=(r-o)*u+1>>>0,l=new Uint8Array(p);o!==r;){for(var f=n[o],d=0,m=p-1;(0!==f||d>>0,l[m]=f%s>>>0,f=f/s>>>0;if(0!==f)throw new Error("Non-zero carry");a=d,o++}for(var v=p-a;v!==p&&0===l[v];)v++;for(var h=c.repeat(i);v0&&"/"!==e.charAt(0))throw new Error(`multiaddr "${e}" must start with a "/"`);this.buffer=t.fromString(e)}else{if(!(e.buffer&&e.protos&&e.protoCodes))throw new Error("addr must be a string, Buffer, or another Multiaddr");this.buffer=t.fromBuffer(e.buffer)}}),{className:"Multiaddr",symbolName:"@multiformats/js-multiaddr/multiaddr"});u.prototype.toString=function(){return t.bufferToString(this.buffer)},u.prototype.toJSON=u.prototype.toString,u.prototype.toOptions=function(){const e={},n=this.toString().split("/");return e.family="ip4"===n[1]?"ipv4":"ipv6",e.host=n[2],e.transport=n[3],e.port=parseInt(n[4]),e},u.prototype[p]=function(){return""},u.prototype.inspect=function(){return""},u.prototype.protos=function(){return this.protoCodes().map(e=>Object.assign({},a(e)))},u.prototype.protoCodes=function(){const e=[],n=this.buffer;let i=0;for(;ie.name)},u.prototype.tuples=function(){return t.bufferToTuples(this.buffer)},u.prototype.stringTuples=function(){const e=t.bufferToTuples(this.buffer);return t.tuplesToStringTuples(e)},u.prototype.encapsulate=function(e){return e=u(e),u(this.toString()+e.toString())},u.prototype.decapsulate=function(e){e=e.toString();const n=this.toString(),i=n.lastIndexOf(e);if(i<0)throw new Error("Address "+this+" does not contain subaddress: "+e);return u(n.slice(0,i))},u.prototype.decapsulateCode=function(e){const n=this.tuples();for(let i=n.length-1;i>=0;i--)if(n[i][0]===e)return u(t.tuplesToBuffer(n.slice(0,i)));return this},u.prototype.getPeerId=function(){let e=null;try{e=this.stringTuples().filter(e=>{if(e[0]===a.names.ipfs.code)return!0}).pop()[1],e=r.encode(new s(e).multihash)}catch(n){e=null}return e},u.prototype.getPath=function(){let e=null;try{e=this.stringTuples().filter(e=>{if(a(e[0]).path)return!0})[0][1]}catch(n){e=null}return e},u.prototype.equals=function(e){return this.buffer.equals(e.buffer)},u.prototype.nodeAddress=function(){const e=this.protoCodes(),n=this.protoNames(),i=this.toString().split("/").slice(1);if(i.length<4)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6}/{address}/{tcp, udp}/{port}".');if(4!==e[0]&&41!==e[0]&&54!==e[0]&&55!==e[0])throw new Error(`no protocol with name: "'${n[0]}'". Must have a valid family name: "{ip4, ip6, dns4, dns6}".`);if("tcp"!==i[2]&&"udp"!==i[2])throw new Error(`no protocol with name: "'${n[1]}'". Must have a valid transport protocol: "{tcp, udp}".`);return{family:41===e[0]||55===e[0]?6:4,address:i[1],port:parseInt(i[3])}},u.fromNodeAddress=function(e,n){if(!e)throw new Error("requires node address object");if(!n)throw new Error("requires transport protocol");const i="IPv6"===e.family?"ip6":"ip4";return u("/"+[i,e.address,n,e.port].join("/"))},u.prototype.isThinWaistAddress=function(e){const n=(e||this).protos();return 2===n.length&&((4===n[0].code||41===n[0].code)&&(6===n[1].code||273===n[1].code))},u.protocols=a,u.isName=function(e){return!!u.isMultiaddr(e)&&e.protos().some(e=>e.resolvable)},u.resolve=function(e){return u.isMultiaddr(e)&&u.isName(e)?Promise.reject(new Error("not implemented yet")):Promise.reject(Error("not a valid name"))},e.exports=u},function(e,n,i){"use strict";const t=i(51);function a(e){return parseInt(e.toString("hex"),16)}function o(e){let n=e.toString(16);return n.length%2==1&&(n="0"+n),Buffer.from(n,"hex")}e.exports={numberToBuffer:o,bufferToNumber:a,varintBufferEncode:function(e){return Buffer.from(t.encode(a(e)))},varintBufferDecode:function(e){return o(t.decode(e))},varintEncode:function(e){return Buffer.from(t.encode(e))}}},function(e,n,i){"use strict";e.exports=function(e,{className:n,symbolName:i}){const t=Symbol.for(i),a={[n]:class extends e{constructor(...e){super(...e),Object.defineProperty(this,t,{value:!0})}get[Symbol.toStringTag](){return n}}}[n];return a[`is${n}`]=e=>!(!e||!e[t]),a},e.exports.proto=function(e,{className:n,symbolName:i,withoutNew:t}){const a=Symbol.for(i),o={[n]:function(...n){if(t&&!(this instanceof o))return new o(...n);const i=e.call(this,...n)||this;return i&&!i[a]&&Object.defineProperty(i,a,{value:!0}),i}}[n];return o.prototype=Object.create(e.prototype),o.prototype.constructor=o,Object.defineProperty(o.prototype,Symbol.toStringTag,{get:()=>n}),o[`is${n}`]=e=>!(!e||!e[a]),o}},function(e,n,i){var t=i(431),a=i(75),o=i(77),r=i(107),s=i(108),c=i(109).parse,p=i(59),u=i(433),l=i(436),f=i(440);function d(e){if(!(this instanceof d))return new d;for(var n in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],t.call(this),e=e||{})this[n]=e[n]}e.exports=d,a.inherits(d,t),d.LINE_BREAK="\r\n",d.DEFAULT_CONTENT_TYPE="application/octet-stream",d.prototype.append=function(e,n,i){"string"==typeof(i=i||{})&&(i={filename:i});var o=t.prototype.append.bind(this);if("number"==typeof n&&(n=""+n),a.isArray(n))this._error(new Error("Arrays are not supported."));else{var r=this._multiPartHeader(e,n,i),s=this._multiPartFooter();o(r),o(n),o(s),this._trackLength(r,n,i)}},d.prototype._trackLength=function(e,n,i){var t=0;null!=i.knownLength?t+=+i.knownLength:Buffer.isBuffer(n)?t=n.length:"string"==typeof n&&(t=Buffer.byteLength(n)),this._valueLength+=t,this._overheadLength+=Buffer.byteLength(e)+d.LINE_BREAK.length,n&&(n.path||n.readable&&n.hasOwnProperty("httpVersion"))&&(i.knownLength||this._valuesToMeasure.push(n))},d.prototype._lengthRetriever=function(e,n){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?n(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(i,t){var a;i?n(i):(a=t.size-(e.start?e.start:0),n(null,a))})):e.hasOwnProperty("httpVersion")?n(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(i){e.pause(),n(null,+i.headers["content-length"])})),e.resume()):n("Unknown stream")},d.prototype._multiPartHeader=function(e,n,i){if("string"==typeof i.header)return i.header;var t,a=this._getContentDisposition(n,i),o=this._getContentType(n,i),r="",s={"Content-Disposition":["form-data",'name="'+e+'"'].concat(a||[]),"Content-Type":[].concat(o||[])};for(var c in"object"==typeof i.header&&f(s,i.header),s)s.hasOwnProperty(c)&&null!=(t=s[c])&&(Array.isArray(t)||(t=[t]),t.length&&(r+=c+": "+t.join("; ")+d.LINE_BREAK));return"--"+this.getBoundary()+d.LINE_BREAK+r+d.LINE_BREAK},d.prototype._getContentDisposition=function(e,n){var i,t;return"string"==typeof n.filepath?i=o.normalize(n.filepath).replace(/\\/g,"/"):n.filename||e.name||e.path?i=o.basename(n.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(i=o.basename(e.client._httpMessage.path||"")),i&&(t='filename="'+i+'"'),t},d.prototype._getContentType=function(e,n){var i=n.contentType;return!i&&e.name&&(i=u.lookup(e.name)),!i&&e.path&&(i=u.lookup(e.path)),!i&&e.readable&&e.hasOwnProperty("httpVersion")&&(i=e.headers["content-type"]),i||!n.filepath&&!n.filename||(i=u.lookup(n.filepath||n.filename)),i||"object"!=typeof e||(i=d.DEFAULT_CONTENT_TYPE),i},d.prototype._multiPartFooter=function(){return function(e){var n=d.LINE_BREAK;0===this._streams.length&&(n+=this._lastBoundary()),e(n)}.bind(this)},d.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+d.LINE_BREAK},d.prototype.getHeaders=function(e){var n,i={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(n in e)e.hasOwnProperty(n)&&(i[n.toLowerCase()]=e[n]);return i},d.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},d.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),n=this.getBoundary(),i=0,t=this._streams.length;in?1:0}e.exports=function(e,n,i,r){var s=a(e,i);return t(e,n,s,(function i(a,o){a?r(a,o):(s.index++,s.index<(s.keyedList||e).length?t(e,n,s,i):r(null,s.results))})),o.bind(s,r)},e.exports.ascending=r,e.exports.descending=function(e,n){return-1*r(e,n)}},function(e,n,i){i(175),e.exports=i(377)},function(e,n,i){"use strict";if(i(176),i(373),i(374),global._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");global._babelPolyfill=!0;function t(e,n,i){e[n]||Object.defineProperty(e,n,{writable:!0,configurable:!0,value:i})}t(String.prototype,"padLeft","".padStart),t(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(e){[][e]&&t(Array,e,Function.call.bind([][e]))}))},function(e,n,i){i(177),i(180),i(181),i(182),i(183),i(184),i(185),i(186),i(187),i(188),i(189),i(190),i(191),i(192),i(193),i(194),i(195),i(196),i(197),i(198),i(199),i(200),i(201),i(202),i(203),i(204),i(205),i(206),i(207),i(208),i(209),i(210),i(211),i(212),i(213),i(214),i(215),i(216),i(217),i(218),i(219),i(220),i(221),i(222),i(223),i(224),i(225),i(226),i(227),i(228),i(229),i(230),i(231),i(232),i(233),i(234),i(235),i(236),i(237),i(238),i(239),i(240),i(241),i(242),i(243),i(244),i(245),i(246),i(247),i(248),i(249),i(250),i(251),i(252),i(253),i(254),i(255),i(257),i(258),i(260),i(261),i(262),i(263),i(264),i(265),i(266),i(268),i(269),i(270),i(271),i(272),i(273),i(274),i(275),i(276),i(277),i(278),i(279),i(280),i(98),i(281),i(135),i(282),i(136),i(283),i(284),i(285),i(286),i(287),i(139),i(141),i(142),i(288),i(289),i(290),i(291),i(292),i(293),i(294),i(295),i(296),i(297),i(298),i(299),i(300),i(301),i(302),i(303),i(304),i(305),i(306),i(307),i(308),i(309),i(310),i(311),i(312),i(313),i(314),i(315),i(316),i(317),i(318),i(319),i(320),i(321),i(322),i(323),i(324),i(325),i(326),i(327),i(328),i(329),i(330),i(331),i(332),i(333),i(334),i(335),i(336),i(337),i(338),i(339),i(340),i(341),i(342),i(343),i(344),i(345),i(346),i(347),i(348),i(349),i(350),i(351),i(352),i(353),i(354),i(355),i(356),i(357),i(358),i(359),i(360),i(361),i(362),i(363),i(364),i(365),i(366),i(367),i(368),i(369),i(370),i(371),i(372),e.exports=i(19)},function(e,n,i){"use strict";var t=i(2),a=i(15),o=i(7),r=i(0),s=i(12),c=i(34).KEY,p=i(3),u=i(52),l=i(47),f=i(37),d=i(5),m=i(117),v=i(79),h=i(179),x=i(62),b=i(1),g=i(4),k=i(9),y=i(16),w=i(27),S=i(36),_=i(40),j=i(120),E=i(17),C=i(61),O=i(8),A=i(38),P=E.f,M=O.f,F=j.f,B=t.Symbol,N=t.JSON,I=N&&N.stringify,z=d("_hidden"),T=d("toPrimitive"),L={}.propertyIsEnumerable,R=u("symbol-registry"),q=u("symbols"),D=u("op-symbols"),U=Object.prototype,$="function"==typeof B&&!!C.f,V=t.QObject,W=!V||!V.prototype||!V.prototype.findChild,G=o&&p((function(){return 7!=_(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a}))?function(e,n,i){var t=P(U,n);t&&delete U[n],M(e,n,i),t&&e!==U&&M(U,n,t)}:M,H=function(e){var n=q[e]=_(B.prototype);return n._k=e,n},K=$&&"symbol"==typeof B.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof B},J=function(e,n,i){return e===U&&J(D,n,i),b(e),n=w(n,!0),b(i),a(q,n)?(i.enumerable?(a(e,z)&&e[z][n]&&(e[z][n]=!1),i=_(i,{enumerable:S(0,!1)})):(a(e,z)||M(e,z,S(1,{})),e[z][n]=!0),G(e,n,i)):M(e,n,i)},Y=function(e,n){b(e);for(var i,t=h(n=y(n)),a=0,o=t.length;o>a;)J(e,i=t[a++],n[i]);return e},X=function(e){var n=L.call(this,e=w(e,!0));return!(this===U&&a(q,e)&&!a(D,e))&&(!(n||!a(this,e)||!a(q,e)||a(this,z)&&this[z][e])||n)},Z=function(e,n){if(e=y(e),n=w(n,!0),e!==U||!a(q,n)||a(D,n)){var i=P(e,n);return!i||!a(q,n)||a(e,z)&&e[z][n]||(i.enumerable=!0),i}},Q=function(e){for(var n,i=F(y(e)),t=[],o=0;i.length>o;)a(q,n=i[o++])||n==z||n==c||t.push(n);return t},ee=function(e){for(var n,i=e===U,t=F(i?D:y(e)),o=[],r=0;t.length>r;)!a(q,n=t[r++])||i&&!a(U,n)||o.push(q[n]);return o};$||(s((B=function(){if(this instanceof B)throw TypeError("Symbol is not a constructor!");var e=f(arguments.length>0?arguments[0]:void 0),n=function(i){this===U&&n.call(D,i),a(this,z)&&a(this[z],e)&&(this[z][e]=!1),G(this,e,S(1,i))};return o&&W&&G(U,e,{configurable:!0,set:n}),H(e)}).prototype,"toString",(function(){return this._k})),E.f=Z,O.f=J,i(41).f=j.f=Q,i(54).f=X,C.f=ee,o&&!i(33)&&s(U,"propertyIsEnumerable",X,!0),m.f=function(e){return H(d(e))}),r(r.G+r.W+r.F*!$,{Symbol:B});for(var ne="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ie=0;ne.length>ie;)d(ne[ie++]);for(var te=A(d.store),ae=0;te.length>ae;)v(te[ae++]);r(r.S+r.F*!$,"Symbol",{for:function(e){return a(R,e+="")?R[e]:R[e]=B(e)},keyFor:function(e){if(!K(e))throw TypeError(e+" is not a symbol!");for(var n in R)if(R[n]===e)return n},useSetter:function(){W=!0},useSimple:function(){W=!1}}),r(r.S+r.F*!$,"Object",{create:function(e,n){return void 0===n?_(e):Y(_(e),n)},defineProperty:J,defineProperties:Y,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:ee});var oe=p((function(){C.f(1)}));r(r.S+r.F*oe,"Object",{getOwnPropertySymbols:function(e){return C.f(k(e))}}),N&&r(r.S+r.F*(!$||p((function(){var e=B();return"[null]"!=I([e])||"{}"!=I({a:e})||"{}"!=I(Object(e))}))),"JSON",{stringify:function(e){for(var n,i,t=[e],a=1;arguments.length>a;)t.push(arguments[a++]);if(i=n=t[1],(g(n)||void 0!==e)&&!K(e))return x(n)||(n=function(e,n){if("function"==typeof i&&(n=i.call(this,e,n)),!K(n))return n}),t[1]=n,I.apply(N,t)}}),B.prototype[T]||i(11)(B.prototype,T,B.prototype.valueOf),l(B,"Symbol"),l(Math,"Math",!0),l(t.JSON,"JSON",!0)},function(e,n,i){e.exports=i(52)("native-function-to-string",Function.toString)},function(e,n,i){var t=i(38),a=i(61),o=i(54);e.exports=function(e){var n=t(e),i=a.f;if(i)for(var r,s=i(e),c=o.f,p=0;s.length>p;)c.call(e,r=s[p++])&&n.push(r);return n}},function(e,n,i){var t=i(0);t(t.S,"Object",{create:i(40)})},function(e,n,i){var t=i(0);t(t.S+t.F*!i(7),"Object",{defineProperty:i(8).f})},function(e,n,i){var t=i(0);t(t.S+t.F*!i(7),"Object",{defineProperties:i(119)})},function(e,n,i){var t=i(16),a=i(17).f;i(29)("getOwnPropertyDescriptor",(function(){return function(e,n){return a(t(e),n)}}))},function(e,n,i){var t=i(9),a=i(18);i(29)("getPrototypeOf",(function(){return function(e){return a(t(e))}}))},function(e,n,i){var t=i(9),a=i(38);i(29)("keys",(function(){return function(e){return a(t(e))}}))},function(e,n,i){i(29)("getOwnPropertyNames",(function(){return i(120).f}))},function(e,n,i){var t=i(4),a=i(34).onFreeze;i(29)("freeze",(function(e){return function(n){return e&&t(n)?e(a(n)):n}}))},function(e,n,i){var t=i(4),a=i(34).onFreeze;i(29)("seal",(function(e){return function(n){return e&&t(n)?e(a(n)):n}}))},function(e,n,i){var t=i(4),a=i(34).onFreeze;i(29)("preventExtensions",(function(e){return function(n){return e&&t(n)?e(a(n)):n}}))},function(e,n,i){var t=i(4);i(29)("isFrozen",(function(e){return function(n){return!t(n)||!!e&&e(n)}}))},function(e,n,i){var t=i(4);i(29)("isSealed",(function(e){return function(n){return!t(n)||!!e&&e(n)}}))},function(e,n,i){var t=i(4);i(29)("isExtensible",(function(e){return function(n){return!!t(n)&&(!e||e(n))}}))},function(e,n,i){var t=i(0);t(t.S+t.F,"Object",{assign:i(121)})},function(e,n,i){var t=i(0);t(t.S,"Object",{is:i(122)})},function(e,n,i){var t=i(0);t(t.S,"Object",{setPrototypeOf:i(83).set})},function(e,n,i){"use strict";var t=i(48),a={};a[i(5)("toStringTag")]="z",a+""!="[object z]"&&i(12)(Object.prototype,"toString",(function(){return"[object "+t(this)+"]"}),!0)},function(e,n,i){var t=i(0);t(t.P,"Function",{bind:i(123)})},function(e,n,i){var t=i(8).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||i(7)&&t(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},function(e,n,i){"use strict";var t=i(4),a=i(18),o=i(5)("hasInstance"),r=Function.prototype;o in r||i(8).f(r,o,{value:function(e){if("function"!=typeof this||!t(e))return!1;if(!t(this.prototype))return e instanceof this;for(;e=a(e);)if(this.prototype===e)return!0;return!1}})},function(e,n,i){var t=i(0),a=i(125);t(t.G+t.F*(parseInt!=a),{parseInt:a})},function(e,n,i){var t=i(0),a=i(126);t(t.G+t.F*(parseFloat!=a),{parseFloat:a})},function(e,n,i){"use strict";var t=i(2),a=i(15),o=i(21),r=i(85),s=i(27),c=i(3),p=i(41).f,u=i(17).f,l=i(8).f,f=i(49).trim,d=t.Number,m=d,v=d.prototype,h="Number"==o(i(40)(v)),x="trim"in String.prototype,b=function(e){var n=s(e,!1);if("string"==typeof n&&n.length>2){var i,t,a,o=(n=x?n.trim():f(n,3)).charCodeAt(0);if(43===o||45===o){if(88===(i=n.charCodeAt(2))||120===i)return NaN}else if(48===o){switch(n.charCodeAt(1)){case 66:case 98:t=2,a=49;break;case 79:case 111:t=8,a=55;break;default:return+n}for(var r,c=n.slice(2),p=0,u=c.length;pa)return NaN;return parseInt(c,t)}}return+n};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(e){var n=arguments.length<1?0:e,i=this;return i instanceof d&&(h?c((function(){v.valueOf.call(i)})):"Number"!=o(i))?r(new m(b(n)),i,d):b(n)};for(var g,k=i(7)?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),y=0;k.length>y;y++)a(m,g=k[y])&&!a(d,g)&&l(d,g,u(m,g));d.prototype=v,v.constructor=d,i(12)(t,"Number",d)}},function(e,n,i){"use strict";var t=i(0),a=i(22),o=i(127),r=i(86),s=1..toFixed,c=Math.floor,p=[0,0,0,0,0,0],u="Number.toFixed: incorrect invocation!",l=function(e,n){for(var i=-1,t=n;++i<6;)t+=e*p[i],p[i]=t%1e7,t=c(t/1e7)},f=function(e){for(var n=6,i=0;--n>=0;)i+=p[n],p[n]=c(i/e),i=i%e*1e7},d=function(){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==p[e]){var i=String(p[e]);n=""===n?i:n+r.call("0",7-i.length)+i}return n},m=function(e,n,i){return 0===n?i:n%2==1?m(e,n-1,i*e):m(e*e,n/2,i)};t(t.P+t.F*(!!s&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!i(3)((function(){s.call({})}))),"Number",{toFixed:function(e){var n,i,t,s,c=o(this,u),p=a(e),v="",h="0";if(p<0||p>20)throw RangeError(u);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(i=(n=function(e){for(var n=0,i=e;i>=4096;)n+=12,i/=4096;for(;i>=2;)n+=1,i/=2;return n}(c*m(2,69,1))-69)<0?c*m(2,-n,1):c/m(2,n,1),i*=4503599627370496,(n=52-n)>0){for(l(0,i),t=p;t>=7;)l(1e7,0),t-=7;for(l(m(10,t,1),0),t=n-1;t>=23;)f(1<<23),t-=23;f(1<0?v+((s=h.length)<=p?"0."+r.call("0",p-s)+h:h.slice(0,s-p)+"."+h.slice(s-p)):v+h}})},function(e,n,i){"use strict";var t=i(0),a=i(3),o=i(127),r=1..toPrecision;t(t.P+t.F*(a((function(){return"1"!==r.call(1,void 0)}))||!a((function(){r.call({})}))),"Number",{toPrecision:function(e){var n=o(this,"Number#toPrecision: incorrect invocation!");return void 0===e?r.call(n):r.call(n,e)}})},function(e,n,i){var t=i(0);t(t.S,"Number",{EPSILON:Math.pow(2,-52)})},function(e,n,i){var t=i(0),a=i(2).isFinite;t(t.S,"Number",{isFinite:function(e){return"number"==typeof e&&a(e)}})},function(e,n,i){var t=i(0);t(t.S,"Number",{isInteger:i(128)})},function(e,n,i){var t=i(0);t(t.S,"Number",{isNaN:function(e){return e!=e}})},function(e,n,i){var t=i(0),a=i(128),o=Math.abs;t(t.S,"Number",{isSafeInteger:function(e){return a(e)&&o(e)<=9007199254740991}})},function(e,n,i){var t=i(0);t(t.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,n,i){var t=i(0);t(t.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(e,n,i){var t=i(0),a=i(126);t(t.S+t.F*(Number.parseFloat!=a),"Number",{parseFloat:a})},function(e,n,i){var t=i(0),a=i(125);t(t.S+t.F*(Number.parseInt!=a),"Number",{parseInt:a})},function(e,n,i){var t=i(0),a=i(129),o=Math.sqrt,r=Math.acosh;t(t.S+t.F*!(r&&710==Math.floor(r(Number.MAX_VALUE))&&r(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:a(e-1+o(e-1)*o(e+1))}})},function(e,n,i){var t=i(0),a=Math.asinh;t(t.S+t.F*!(a&&1/a(0)>0),"Math",{asinh:function e(n){return isFinite(n=+n)&&0!=n?n<0?-e(-n):Math.log(n+Math.sqrt(n*n+1)):n}})},function(e,n,i){var t=i(0),a=Math.atanh;t(t.S+t.F*!(a&&1/a(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(e,n,i){var t=i(0),a=i(87);t(t.S,"Math",{cbrt:function(e){return a(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(e,n,i){var t=i(0);t(t.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(e,n,i){var t=i(0),a=Math.exp;t(t.S,"Math",{cosh:function(e){return(a(e=+e)+a(-e))/2}})},function(e,n,i){var t=i(0),a=i(88);t(t.S+t.F*(a!=Math.expm1),"Math",{expm1:a})},function(e,n,i){var t=i(0);t(t.S,"Math",{fround:i(130)})},function(e,n,i){var t=i(0),a=Math.abs;t(t.S,"Math",{hypot:function(e,n){for(var i,t,o=0,r=0,s=arguments.length,c=0;r0?(t=i/c)*t:i;return c===1/0?1/0:c*Math.sqrt(o)}})},function(e,n,i){var t=i(0),a=Math.imul;t(t.S+t.F*i(3)((function(){return-5!=a(4294967295,5)||2!=a.length})),"Math",{imul:function(e,n){var i=+e,t=+n,a=65535&i,o=65535&t;return 0|a*o+((65535&i>>>16)*o+a*(65535&t>>>16)<<16>>>0)}})},function(e,n,i){var t=i(0);t(t.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}})},function(e,n,i){var t=i(0);t(t.S,"Math",{log1p:i(129)})},function(e,n,i){var t=i(0);t(t.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}})},function(e,n,i){var t=i(0);t(t.S,"Math",{sign:i(87)})},function(e,n,i){var t=i(0),a=i(88),o=Math.exp;t(t.S+t.F*i(3)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(a(e)-a(-e))/2:(o(e-1)-o(-e-1))*(Math.E/2)}})},function(e,n,i){var t=i(0),a=i(88),o=Math.exp;t(t.S,"Math",{tanh:function(e){var n=a(e=+e),i=a(-e);return n==1/0?1:i==1/0?-1:(n-i)/(o(e)+o(-e))}})},function(e,n,i){var t=i(0);t(t.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(e,n,i){var t=i(0),a=i(39),o=String.fromCharCode,r=String.fromCodePoint;t(t.S+t.F*(!!r&&1!=r.length),"String",{fromCodePoint:function(e){for(var n,i=[],t=arguments.length,r=0;t>r;){if(n=+arguments[r++],a(n,1114111)!==n)throw RangeError(n+" is not a valid code point");i.push(n<65536?o(n):o(55296+((n-=65536)>>10),n%1024+56320))}return i.join("")}})},function(e,n,i){var t=i(0),a=i(16),o=i(6);t(t.S,"String",{raw:function(e){for(var n=a(e.raw),i=o(n.length),t=arguments.length,r=[],s=0;i>s;)r.push(String(n[s++])),s=n.length?{value:void 0,done:!0}:(e=t(n,i),this._i+=e.length,{value:e,done:!1})}))},function(e,n,i){"use strict";var t=i(0),a=i(63)(!1);t(t.P,"String",{codePointAt:function(e){return a(this,e)}})},function(e,n,i){"use strict";var t=i(0),a=i(6),o=i(91),r="".endsWith;t(t.P+t.F*i(92)("endsWith"),"String",{endsWith:function(e){var n=o(this,e,"endsWith"),i=arguments.length>1?arguments[1]:void 0,t=a(n.length),s=void 0===i?t:Math.min(a(i),t),c=String(e);return r?r.call(n,c,s):n.slice(s-c.length,s)===c}})},function(e,n,i){"use strict";var t=i(0),a=i(91);t(t.P+t.F*i(92)("includes"),"String",{includes:function(e){return!!~a(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(e,n,i){var t=i(0);t(t.P,"String",{repeat:i(86)})},function(e,n,i){"use strict";var t=i(0),a=i(6),o=i(91),r="".startsWith;t(t.P+t.F*i(92)("startsWith"),"String",{startsWith:function(e){var n=o(this,e,"startsWith"),i=a(Math.min(arguments.length>1?arguments[1]:void 0,n.length)),t=String(e);return r?r.call(n,t,i):n.slice(i,i+t.length)===t}})},function(e,n,i){"use strict";i(13)("anchor",(function(e){return function(n){return e(this,"a","name",n)}}))},function(e,n,i){"use strict";i(13)("big",(function(e){return function(){return e(this,"big","","")}}))},function(e,n,i){"use strict";i(13)("blink",(function(e){return function(){return e(this,"blink","","")}}))},function(e,n,i){"use strict";i(13)("bold",(function(e){return function(){return e(this,"b","","")}}))},function(e,n,i){"use strict";i(13)("fixed",(function(e){return function(){return e(this,"tt","","")}}))},function(e,n,i){"use strict";i(13)("fontcolor",(function(e){return function(n){return e(this,"font","color",n)}}))},function(e,n,i){"use strict";i(13)("fontsize",(function(e){return function(n){return e(this,"font","size",n)}}))},function(e,n,i){"use strict";i(13)("italics",(function(e){return function(){return e(this,"i","","")}}))},function(e,n,i){"use strict";i(13)("link",(function(e){return function(n){return e(this,"a","href",n)}}))},function(e,n,i){"use strict";i(13)("small",(function(e){return function(){return e(this,"small","","")}}))},function(e,n,i){"use strict";i(13)("strike",(function(e){return function(){return e(this,"strike","","")}}))},function(e,n,i){"use strict";i(13)("sub",(function(e){return function(){return e(this,"sub","","")}}))},function(e,n,i){"use strict";i(13)("sup",(function(e){return function(){return e(this,"sup","","")}}))},function(e,n,i){var t=i(0);t(t.S,"Date",{now:function(){return(new Date).getTime()}})},function(e,n,i){"use strict";var t=i(0),a=i(9),o=i(27);t(t.P+t.F*i(3)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(e){var n=a(this),i=o(n);return"number"!=typeof i||isFinite(i)?n.toISOString():null}})},function(e,n,i){var t=i(0),a=i(256);t(t.P+t.F*(Date.prototype.toISOString!==a),"Date",{toISOString:a})},function(e,n,i){"use strict";var t=i(3),a=Date.prototype.getTime,o=Date.prototype.toISOString,r=function(e){return e>9?e:"0"+e};e.exports=t((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))}))||!t((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(a.call(this)))throw RangeError("Invalid time value");var e=this,n=e.getUTCFullYear(),i=e.getUTCMilliseconds(),t=n<0?"-":n>9999?"+":"";return t+("00000"+Math.abs(n)).slice(t?-6:-4)+"-"+r(e.getUTCMonth()+1)+"-"+r(e.getUTCDate())+"T"+r(e.getUTCHours())+":"+r(e.getUTCMinutes())+":"+r(e.getUTCSeconds())+"."+(i>99?i:"0"+r(i))+"Z"}:o},function(e,n,i){var t=Date.prototype,a=t.toString,o=t.getTime;new Date(NaN)+""!="Invalid Date"&&i(12)(t,"toString",(function(){var e=o.call(this);return e==e?a.call(this):"Invalid Date"}))},function(e,n,i){var t=i(5)("toPrimitive"),a=Date.prototype;t in a||i(11)(a,t,i(259))},function(e,n,i){"use strict";var t=i(1),a=i(27);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return a(t(this),"number"!=e)}},function(e,n,i){var t=i(0);t(t.S,"Array",{isArray:i(62)})},function(e,n,i){"use strict";var t=i(20),a=i(0),o=i(9),r=i(131),s=i(93),c=i(6),p=i(94),u=i(95);a(a.S+a.F*!i(65)((function(e){Array.from(e)})),"Array",{from:function(e){var n,i,a,l,f=o(e),d="function"==typeof this?this:Array,m=arguments.length,v=m>1?arguments[1]:void 0,h=void 0!==v,x=0,b=u(f);if(h&&(v=t(v,m>2?arguments[2]:void 0,2)),null==b||d==Array&&s(b))for(i=new d(n=c(f.length));n>x;x++)p(i,x,h?v(f[x],x):f[x]);else for(l=b.call(f),i=new d;!(a=l.next()).done;x++)p(i,x,h?r(l,v,[a.value,x],!0):a.value);return i.length=x,i}})},function(e,n,i){"use strict";var t=i(0),a=i(94);t(t.S+t.F*i(3)((function(){function e(){}return!(Array.of.call(e)instanceof e)})),"Array",{of:function(){for(var e=0,n=arguments.length,i=new("function"==typeof this?this:Array)(n);n>e;)a(i,e,arguments[e++]);return i.length=n,i}})},function(e,n,i){"use strict";var t=i(0),a=i(16),o=[].join;t(t.P+t.F*(i(53)!=Object||!i(23)(o)),"Array",{join:function(e){return o.call(a(this),void 0===e?",":e)}})},function(e,n,i){"use strict";var t=i(0),a=i(82),o=i(21),r=i(39),s=i(6),c=[].slice;t(t.P+t.F*i(3)((function(){a&&c.call(a)})),"Array",{slice:function(e,n){var i=s(this.length),t=o(this);if(n=void 0===n?i:n,"Array"==t)return c.call(this,e,n);for(var a=r(e,i),p=r(n,i),u=s(p-a),l=new Array(u),f=0;f1&&(t=Math.min(t,o(arguments[1]))),t<0&&(t=i+t);t>=0;t--)if(t in n&&n[t]===e)return t||0;return-1}})},function(e,n,i){var t=i(0);t(t.P,"Array",{copyWithin:i(133)}),i(35)("copyWithin")},function(e,n,i){var t=i(0);t(t.P,"Array",{fill:i(97)}),i(35)("fill")},function(e,n,i){"use strict";var t=i(0),a=i(30)(5),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),t(t.P+t.F*o,"Array",{find:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),i(35)("find")},function(e,n,i){"use strict";var t=i(0),a=i(30)(6),o="findIndex",r=!0;o in[]&&Array(1)[o]((function(){r=!1})),t(t.P+t.F*r,"Array",{findIndex:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),i(35)(o)},function(e,n,i){i(42)("Array")},function(e,n,i){var t=i(2),a=i(85),o=i(8).f,r=i(41).f,s=i(64),c=i(55),p=t.RegExp,u=p,l=p.prototype,f=/a/g,d=/a/g,m=new p(f)!==f;if(i(7)&&(!m||i(3)((function(){return d[i(5)("match")]=!1,p(f)!=f||p(d)==d||"/a/i"!=p(f,"i")})))){p=function(e,n){var i=this instanceof p,t=s(e),o=void 0===n;return!i&&t&&e.constructor===p&&o?e:a(m?new u(t&&!o?e.source:e,n):u((t=e instanceof p)?e.source:e,t&&o?c.call(e):n),i?this:l,p)};for(var v=function(e){e in p||o(p,e,{configurable:!0,get:function(){return u[e]},set:function(n){u[e]=n}})},h=r(u),x=0;h.length>x;)v(h[x++]);l.constructor=p,p.prototype=l,i(12)(t,"RegExp",p)}i(42)("RegExp")},function(e,n,i){"use strict";i(136);var t=i(1),a=i(55),o=i(7),r=/./.toString,s=function(e){i(12)(RegExp.prototype,"toString",e,!0)};i(3)((function(){return"/a/b"!=r.call({source:"a",flags:"b"})}))?s((function(){var e=t(this);return"/".concat(e.source,"/","flags"in e?e.flags:!o&&e instanceof RegExp?a.call(e):void 0)})):"toString"!=r.name&&s((function(){return r.call(this)}))},function(e,n,i){"use strict";var t=i(1),a=i(6),o=i(100),r=i(66);i(67)("match",1,(function(e,n,i,s){return[function(i){var t=e(this),a=null==i?void 0:i[n];return void 0!==a?a.call(i,t):new RegExp(i)[n](String(t))},function(e){var n=s(i,e,this);if(n.done)return n.value;var c=t(e),p=String(this);if(!c.global)return r(c,p);var u=c.unicode;c.lastIndex=0;for(var l,f=[],d=0;null!==(l=r(c,p));){var m=String(l[0]);f[d]=m,""===m&&(c.lastIndex=o(p,a(c.lastIndex),u)),d++}return 0===d?null:f}]}))},function(e,n,i){"use strict";var t=i(1),a=i(9),o=i(6),r=i(22),s=i(100),c=i(66),p=Math.max,u=Math.min,l=Math.floor,f=/\$([$&`']|\d\d?|<[^>]*>)/g,d=/\$([$&`']|\d\d?)/g;i(67)("replace",2,(function(e,n,i,m){return[function(t,a){var o=e(this),r=null==t?void 0:t[n];return void 0!==r?r.call(t,o,a):i.call(String(o),t,a)},function(e,n){var a=m(i,e,this,n);if(a.done)return a.value;var l=t(e),f=String(this),d="function"==typeof n;d||(n=String(n));var h=l.global;if(h){var x=l.unicode;l.lastIndex=0}for(var b=[];;){var g=c(l,f);if(null===g)break;if(b.push(g),!h)break;""===String(g[0])&&(l.lastIndex=s(f,o(l.lastIndex),x))}for(var k,y="",w=0,S=0;S=w&&(y+=f.slice(w,j)+P,w=j+_.length)}return y+f.slice(w)}];function v(e,n,t,o,r,s){var c=t+e.length,p=o.length,u=d;return void 0!==r&&(r=a(r),u=f),i.call(s,u,(function(i,a){var s;switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,t);case"'":return n.slice(c);case"<":s=r[a.slice(1,-1)];break;default:var u=+a;if(0===u)return i;if(u>p){var f=l(u/10);return 0===f?i:f<=p?void 0===o[f-1]?a.charAt(1):o[f-1]+a.charAt(1):i}s=o[u-1]}return void 0===s?"":s}))}}))},function(e,n,i){"use strict";var t=i(1),a=i(122),o=i(66);i(67)("search",1,(function(e,n,i,r){return[function(i){var t=e(this),a=null==i?void 0:i[n];return void 0!==a?a.call(i,t):new RegExp(i)[n](String(t))},function(e){var n=r(i,e,this);if(n.done)return n.value;var s=t(e),c=String(this),p=s.lastIndex;a(p,0)||(s.lastIndex=0);var u=o(s,c);return a(s.lastIndex,p)||(s.lastIndex=p),null===u?-1:u.index}]}))},function(e,n,i){"use strict";var t=i(64),a=i(1),o=i(56),r=i(100),s=i(6),c=i(66),p=i(99),u=i(3),l=Math.min,f=[].push,d=!u((function(){RegExp(4294967295,"y")}));i(67)("split",2,(function(e,n,i,u){var m;return m="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var a=String(this);if(void 0===e&&0===n)return[];if(!t(e))return i.call(a,e,n);for(var o,r,s,c=[],u=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),l=0,d=void 0===n?4294967295:n>>>0,m=new RegExp(e.source,u+"g");(o=p.call(m,a))&&!((r=m.lastIndex)>l&&(c.push(a.slice(l,o.index)),o.length>1&&o.index=d));)m.lastIndex===o.index&&m.lastIndex++;return l===a.length?!s&&m.test("")||c.push(""):c.push(a.slice(l)),c.length>d?c.slice(0,d):c}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:i.call(this,e,n)}:i,[function(i,t){var a=e(this),o=null==i?void 0:i[n];return void 0!==o?o.call(i,a,t):m.call(String(a),i,t)},function(e,n){var t=u(m,e,this,n,m!==i);if(t.done)return t.value;var p=a(e),f=String(this),v=o(p,RegExp),h=p.unicode,x=(p.ignoreCase?"i":"")+(p.multiline?"m":"")+(p.unicode?"u":"")+(d?"y":"g"),b=new v(d?p:"^(?:"+p.source+")",x),g=void 0===n?4294967295:n>>>0;if(0===g)return[];if(0===f.length)return null===c(b,f)?[f]:[];for(var k=0,y=0,w=[];yo;)r(i[o++]);e._c=[],e._n=!1,n&&!e._h&&N(e)}))}},N=function(e){x.call(c,(function(){var n,i,t,a=e._v,o=I(e);if(o&&(n=k((function(){O?_.emit("unhandledRejection",a,e):(i=c.onunhandledrejection)?i({promise:e,reason:a}):(t=c.console)&&t.error&&t.error("Unhandled promise rejection",a)})),e._h=O||I(e)?2:1),e._a=void 0,o&&n.e)throw n.v}))},I=function(e){return 1!==e._h&&0===(e._a||e._c).length},z=function(e){x.call(c,(function(){var n;O?_.emit("rejectionHandled",e):(n=c.onrejectionhandled)&&n({promise:e,reason:e._v})}))},T=function(e){var n=this;n._d||(n._d=!0,(n=n._w||n)._v=e,n._s=2,n._a||(n._a=n._c.slice()),B(n,!0))},L=function(e){var n,i=this;if(!i._d){i._d=!0,i=i._w||i;try{if(i===e)throw S("Promise can't be resolved itself");(n=F(e))?b((function(){var t={_w:i,_d:!1};try{n.call(e,p(L,t,1),p(T,t,1))}catch(e){T.call(t,e)}})):(i._v=e,i._s=1,B(i,!1))}catch(e){T.call({_w:i,_d:!1},e)}}};M||(C=function(e){m(this,C,"Promise","_h"),d(e),t.call(this);try{e(p(L,this,1),p(T,this,1))}catch(e){T.call(this,e)}},(t=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=i(45)(C.prototype,{then:function(e,n){var i=P(h(this,C));return i.ok="function"!=typeof e||e,i.fail="function"==typeof n&&n,i.domain=O?_.domain:void 0,this._c.push(i),this._a&&this._a.push(i),this._s&&B(this,!1),i.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new t;this.promise=e,this.resolve=p(L,e,1),this.reject=p(T,e,1)},g.f=P=function(e){return e===C||e===r?new o(e):a(e)}),l(l.G+l.W+l.F*!M,{Promise:C}),i(47)(C,"Promise"),i(42)("Promise"),r=i(19).Promise,l(l.S+l.F*!M,"Promise",{reject:function(e){var n=P(this);return(0,n.reject)(e),n.promise}}),l(l.S+l.F*(s||!M),"Promise",{resolve:function(e){return w(s&&this===r?C:this,e)}}),l(l.S+l.F*!(M&&i(65)((function(e){C.all(e).catch(A)}))),"Promise",{all:function(e){var n=this,i=P(n),t=i.resolve,a=i.reject,o=k((function(){var i=[],o=0,r=1;v(e,!1,(function(e){var s=o++,c=!1;i.push(void 0),r++,n.resolve(e).then((function(e){c||(c=!0,i[s]=e,--r||t(i))}),a)})),--r||t(i)}));return o.e&&a(o.v),i.promise},race:function(e){var n=this,i=P(n),t=i.reject,a=k((function(){v(e,!1,(function(e){n.resolve(e).then(i.resolve,t)}))}));return a.e&&t(a.v),i.promise}})},function(e,n,i){"use strict";var t=i(143),a=i(46);i(69)("WeakSet",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return t.def(a(this,"WeakSet"),e,!0)}},t,!1,!0)},function(e,n,i){"use strict";var t=i(0),a=i(70),o=i(104),r=i(1),s=i(39),c=i(6),p=i(4),u=i(2).ArrayBuffer,l=i(56),f=o.ArrayBuffer,d=o.DataView,m=a.ABV&&u.isView,v=f.prototype.slice,h=a.VIEW;t(t.G+t.W+t.F*(u!==f),{ArrayBuffer:f}),t(t.S+t.F*!a.CONSTR,"ArrayBuffer",{isView:function(e){return m&&m(e)||p(e)&&h in e}}),t(t.P+t.U+t.F*i(3)((function(){return!new f(2).slice(1,void 0).byteLength})),"ArrayBuffer",{slice:function(e,n){if(void 0!==v&&void 0===n)return v.call(r(this),e);for(var i=r(this).byteLength,t=s(e,i),a=s(void 0===n?i:n,i),o=new(l(this,f))(c(a-t)),p=new d(this),u=new d(o),m=0;t=n.length)return{value:void 0,done:!0}}while(!((e=n[this._i++])in this._t));return{value:e,done:!1}})),t(t.S,"Reflect",{enumerate:function(e){return new o(e)}})},function(e,n,i){var t=i(17),a=i(18),o=i(15),r=i(0),s=i(4),c=i(1);r(r.S,"Reflect",{get:function e(n,i){var r,p,u=arguments.length<3?n:arguments[2];return c(n)===u?n[i]:(r=t.f(n,i))?o(r,"value")?r.value:void 0!==r.get?r.get.call(u):void 0:s(p=a(n))?e(p,i,u):void 0}})},function(e,n,i){var t=i(17),a=i(0),o=i(1);a(a.S,"Reflect",{getOwnPropertyDescriptor:function(e,n){return t.f(o(e),n)}})},function(e,n,i){var t=i(0),a=i(18),o=i(1);t(t.S,"Reflect",{getPrototypeOf:function(e){return a(o(e))}})},function(e,n,i){var t=i(0);t(t.S,"Reflect",{has:function(e,n){return n in e}})},function(e,n,i){var t=i(0),a=i(1),o=Object.isExtensible;t(t.S,"Reflect",{isExtensible:function(e){return a(e),!o||o(e)}})},function(e,n,i){var t=i(0);t(t.S,"Reflect",{ownKeys:i(145)})},function(e,n,i){var t=i(0),a=i(1),o=Object.preventExtensions;t(t.S,"Reflect",{preventExtensions:function(e){a(e);try{return o&&o(e),!0}catch(e){return!1}}})},function(e,n,i){var t=i(8),a=i(17),o=i(18),r=i(15),s=i(0),c=i(36),p=i(1),u=i(4);s(s.S,"Reflect",{set:function e(n,i,s){var l,f,d=arguments.length<4?n:arguments[3],m=a.f(p(n),i);if(!m){if(u(f=o(n)))return e(f,i,s,d);m=c(0)}if(r(m,"value")){if(!1===m.writable||!u(d))return!1;if(l=a.f(d,i)){if(l.get||l.set||!1===l.writable)return!1;l.value=s,t.f(d,i,l)}else t.f(d,i,c(0,s));return!0}return void 0!==m.set&&(m.set.call(d,s),!0)}})},function(e,n,i){var t=i(0),a=i(83);a&&t(t.S,"Reflect",{setPrototypeOf:function(e,n){a.check(e,n);try{return a.set(e,n),!0}catch(e){return!1}}})},function(e,n,i){"use strict";var t=i(0),a=i(60)(!0);t(t.P,"Array",{includes:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),i(35)("includes")},function(e,n,i){"use strict";var t=i(0),a=i(146),o=i(9),r=i(6),s=i(10),c=i(96);t(t.P,"Array",{flatMap:function(e){var n,i,t=o(this);return s(e),n=r(t.length),i=c(t,0),a(i,t,t,n,0,1,e,arguments[1]),i}}),i(35)("flatMap")},function(e,n,i){"use strict";var t=i(0),a=i(146),o=i(9),r=i(6),s=i(22),c=i(96);t(t.P,"Array",{flatten:function(){var e=arguments[0],n=o(this),i=r(n.length),t=c(n,0);return a(t,n,n,i,0,void 0===e?1:s(e)),t}}),i(35)("flatten")},function(e,n,i){"use strict";var t=i(0),a=i(63)(!0);t(t.P,"String",{at:function(e){return a(this,e)}})},function(e,n,i){"use strict";var t=i(0),a=i(147),o=i(68),r=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);t(t.P+t.F*r,"String",{padStart:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(e,n,i){"use strict";var t=i(0),a=i(147),o=i(68),r=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);t(t.P+t.F*r,"String",{padEnd:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(e,n,i){"use strict";i(49)("trimLeft",(function(e){return function(){return e(this,1)}}),"trimStart")},function(e,n,i){"use strict";i(49)("trimRight",(function(e){return function(){return e(this,2)}}),"trimEnd")},function(e,n,i){"use strict";var t=i(0),a=i(28),o=i(6),r=i(64),s=i(55),c=RegExp.prototype,p=function(e,n){this._r=e,this._s=n};i(90)(p,"RegExp String",(function(){var e=this._r.exec(this._s);return{value:e,done:null===e}})),t(t.P,"String",{matchAll:function(e){if(a(this),!r(e))throw TypeError(e+" is not a regexp!");var n=String(this),i="flags"in c?String(e.flags):s.call(e),t=new RegExp(e.source,~i.indexOf("g")?i:"g"+i);return t.lastIndex=o(e.lastIndex),new p(t,n)}})},function(e,n,i){i(79)("asyncIterator")},function(e,n,i){i(79)("observable")},function(e,n,i){var t=i(0),a=i(145),o=i(16),r=i(17),s=i(94);t(t.S,"Object",{getOwnPropertyDescriptors:function(e){for(var n,i,t=o(e),c=r.f,p=a(t),u={},l=0;p.length>l;)void 0!==(i=c(t,n=p[l++]))&&s(u,n,i);return u}})},function(e,n,i){var t=i(0),a=i(148)(!1);t(t.S,"Object",{values:function(e){return a(e)}})},function(e,n,i){var t=i(0),a=i(148)(!0);t(t.S,"Object",{entries:function(e){return a(e)}})},function(e,n,i){"use strict";var t=i(0),a=i(9),o=i(10),r=i(8);i(7)&&t(t.P+i(71),"Object",{__defineGetter__:function(e,n){r.f(a(this),e,{get:o(n),enumerable:!0,configurable:!0})}})},function(e,n,i){"use strict";var t=i(0),a=i(9),o=i(10),r=i(8);i(7)&&t(t.P+i(71),"Object",{__defineSetter__:function(e,n){r.f(a(this),e,{set:o(n),enumerable:!0,configurable:!0})}})},function(e,n,i){"use strict";var t=i(0),a=i(9),o=i(27),r=i(18),s=i(17).f;i(7)&&t(t.P+i(71),"Object",{__lookupGetter__:function(e){var n,i=a(this),t=o(e,!0);do{if(n=s(i,t))return n.get}while(i=r(i))}})},function(e,n,i){"use strict";var t=i(0),a=i(9),o=i(27),r=i(18),s=i(17).f;i(7)&&t(t.P+i(71),"Object",{__lookupSetter__:function(e){var n,i=a(this),t=o(e,!0);do{if(n=s(i,t))return n.set}while(i=r(i))}})},function(e,n,i){var t=i(0);t(t.P+t.R,"Map",{toJSON:i(149)("Map")})},function(e,n,i){var t=i(0);t(t.P+t.R,"Set",{toJSON:i(149)("Set")})},function(e,n,i){i(72)("Map")},function(e,n,i){i(72)("Set")},function(e,n,i){i(72)("WeakMap")},function(e,n,i){i(72)("WeakSet")},function(e,n,i){i(73)("Map")},function(e,n,i){i(73)("Set")},function(e,n,i){i(73)("WeakMap")},function(e,n,i){i(73)("WeakSet")},function(e,n,i){var t=i(0);t(t.G,{global:i(2)})},function(e,n,i){var t=i(0);t(t.S,"System",{global:i(2)})},function(e,n,i){var t=i(0),a=i(21);t(t.S,"Error",{isError:function(e){return"Error"===a(e)}})},function(e,n,i){var t=i(0);t(t.S,"Math",{clamp:function(e,n,i){return Math.min(i,Math.max(n,e))}})},function(e,n,i){var t=i(0);t(t.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(e,n,i){var t=i(0),a=180/Math.PI;t(t.S,"Math",{degrees:function(e){return e*a}})},function(e,n,i){var t=i(0),a=i(151),o=i(130);t(t.S,"Math",{fscale:function(e,n,i,t,r){return o(a(e,n,i,t,r))}})},function(e,n,i){var t=i(0);t(t.S,"Math",{iaddh:function(e,n,i,t){var a=e>>>0,o=i>>>0;return(n>>>0)+(t>>>0)+((a&o|(a|o)&~(a+o>>>0))>>>31)|0}})},function(e,n,i){var t=i(0);t(t.S,"Math",{isubh:function(e,n,i,t){var a=e>>>0,o=i>>>0;return(n>>>0)-(t>>>0)-((~a&o|~(a^o)&a-o>>>0)>>>31)|0}})},function(e,n,i){var t=i(0);t(t.S,"Math",{imulh:function(e,n){var i=+e,t=+n,a=65535&i,o=65535&t,r=i>>16,s=t>>16,c=(r*o>>>0)+(a*o>>>16);return r*s+(c>>16)+((a*s>>>0)+(65535&c)>>16)}})},function(e,n,i){var t=i(0);t(t.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(e,n,i){var t=i(0),a=Math.PI/180;t(t.S,"Math",{radians:function(e){return e*a}})},function(e,n,i){var t=i(0);t(t.S,"Math",{scale:i(151)})},function(e,n,i){var t=i(0);t(t.S,"Math",{umulh:function(e,n){var i=+e,t=+n,a=65535&i,o=65535&t,r=i>>>16,s=t>>>16,c=(r*o>>>0)+(a*o>>>16);return r*s+(c>>>16)+((a*s>>>0)+(65535&c)>>>16)}})},function(e,n,i){var t=i(0);t(t.S,"Math",{signbit:function(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(e,n,i){"use strict";var t=i(0),a=i(19),o=i(2),r=i(56),s=i(138);t(t.P+t.R,"Promise",{finally:function(e){var n=r(this,a.Promise||o.Promise),i="function"==typeof e;return this.then(i?function(i){return s(n,e()).then((function(){return i}))}:e,i?function(i){return s(n,e()).then((function(){throw i}))}:e)}})},function(e,n,i){"use strict";var t=i(0),a=i(103),o=i(137);t(t.S,"Promise",{try:function(e){var n=a.f(this),i=o(e);return(i.e?n.reject:n.resolve)(i.v),n.promise}})},function(e,n,i){var t=i(32),a=i(1),o=t.key,r=t.set;t.exp({defineMetadata:function(e,n,i,t){r(e,n,a(i),o(t))}})},function(e,n,i){var t=i(32),a=i(1),o=t.key,r=t.map,s=t.store;t.exp({deleteMetadata:function(e,n){var i=arguments.length<3?void 0:o(arguments[2]),t=r(a(n),i,!1);if(void 0===t||!t.delete(e))return!1;if(t.size)return!0;var c=s.get(n);return c.delete(i),!!c.size||s.delete(n)}})},function(e,n,i){var t=i(32),a=i(1),o=i(18),r=t.has,s=t.get,c=t.key,p=function(e,n,i){if(r(e,n,i))return s(e,n,i);var t=o(n);return null!==t?p(e,t,i):void 0};t.exp({getMetadata:function(e,n){return p(e,a(n),arguments.length<3?void 0:c(arguments[2]))}})},function(e,n,i){var t=i(141),a=i(150),o=i(32),r=i(1),s=i(18),c=o.keys,p=o.key,u=function(e,n){var i=c(e,n),o=s(e);if(null===o)return i;var r=u(o,n);return r.length?i.length?a(new t(i.concat(r))):r:i};o.exp({getMetadataKeys:function(e){return u(r(e),arguments.length<2?void 0:p(arguments[1]))}})},function(e,n,i){var t=i(32),a=i(1),o=t.get,r=t.key;t.exp({getOwnMetadata:function(e,n){return o(e,a(n),arguments.length<3?void 0:r(arguments[2]))}})},function(e,n,i){var t=i(32),a=i(1),o=t.keys,r=t.key;t.exp({getOwnMetadataKeys:function(e){return o(a(e),arguments.length<2?void 0:r(arguments[1]))}})},function(e,n,i){var t=i(32),a=i(1),o=i(18),r=t.has,s=t.key,c=function(e,n,i){if(r(e,n,i))return!0;var t=o(n);return null!==t&&c(e,t,i)};t.exp({hasMetadata:function(e,n){return c(e,a(n),arguments.length<3?void 0:s(arguments[2]))}})},function(e,n,i){var t=i(32),a=i(1),o=t.has,r=t.key;t.exp({hasOwnMetadata:function(e,n){return o(e,a(n),arguments.length<3?void 0:r(arguments[2]))}})},function(e,n,i){var t=i(32),a=i(1),o=i(10),r=t.key,s=t.set;t.exp({metadata:function(e,n){return function(i,t){s(e,n,(void 0!==t?a:o)(i),r(t))}}})},function(e,n,i){var t=i(0),a=i(102)(),o=i(2).process,r="process"==i(21)(o);t(t.G,{asap:function(e){var n=r&&o.domain;a(n?n.bind(e):e)}})},function(e,n,i){"use strict";var t=i(0),a=i(2),o=i(19),r=i(102)(),s=i(5)("observable"),c=i(10),p=i(1),u=i(43),l=i(45),f=i(11),d=i(44),m=d.RETURN,v=function(e){return null==e?void 0:c(e)},h=function(e){var n=e._c;n&&(e._c=void 0,n())},x=function(e){return void 0===e._o},b=function(e){x(e)||(e._o=void 0,h(e))},g=function(e,n){p(e),this._c=void 0,this._o=e,e=new k(this);try{var i=n(e),t=i;null!=i&&("function"==typeof i.unsubscribe?i=function(){t.unsubscribe()}:c(i),this._c=i)}catch(n){return void e.error(n)}x(this)&&h(this)};g.prototype=l({},{unsubscribe:function(){b(this)}});var k=function(e){this._s=e};k.prototype=l({},{next:function(e){var n=this._s;if(!x(n)){var i=n._o;try{var t=v(i.next);if(t)return t.call(i,e)}catch(e){try{b(n)}finally{throw e}}}},error:function(e){var n=this._s;if(x(n))throw e;var i=n._o;n._o=void 0;try{var t=v(i.error);if(!t)throw e;e=t.call(i,e)}catch(e){try{h(n)}finally{throw e}}return h(n),e},complete:function(e){var n=this._s;if(!x(n)){var i=n._o;n._o=void 0;try{var t=v(i.complete);e=t?t.call(i,e):void 0}catch(e){try{h(n)}finally{throw e}}return h(n),e}}});var y=function(e){u(this,y,"Observable","_f")._f=c(e)};l(y.prototype,{subscribe:function(e){return new g(e,this._f)},forEach:function(e){var n=this;return new(o.Promise||a.Promise)((function(i,t){c(e);var a=n.subscribe({next:function(n){try{return e(n)}catch(e){t(e),a.unsubscribe()}},error:t,complete:i})}))}}),l(y,{from:function(e){var n="function"==typeof this?this:y,i=v(p(e)[s]);if(i){var t=p(i.call(e));return t.constructor===n?t:new n((function(e){return t.subscribe(e)}))}return new n((function(n){var i=!1;return r((function(){if(!i){try{if(d(e,!1,(function(e){if(n.next(e),i)return m}))===m)return}catch(e){if(i)throw e;return void n.error(e)}n.complete()}})),function(){i=!0}}))},of:function(){for(var e=0,n=arguments.length,i=new Array(n);e2,a=!!t&&r.call(arguments,2);return e(t?function(){("function"==typeof n?n:Function(n)).apply(this,a)}:n,i)}};a(a.G+a.B+a.F*s,{setTimeout:c(t.setTimeout),setInterval:c(t.setInterval)})},function(e,n,i){var t=i(0),a=i(101);t(t.G+t.B,{setImmediate:a.set,clearImmediate:a.clear})},function(e,n,i){for(var t=i(98),a=i(38),o=i(12),r=i(2),s=i(11),c=i(50),p=i(5),u=p("iterator"),l=p("toStringTag"),f=c.Array,d={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},m=a(d),v=0;v=0;--a){var o=this.tryEntries[a],r=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var s=t.call(o,"catchLoc"),c=t.call(o,"finallyLoc");if(s&&c){if(this.prev=0;--i){var a=this.tryEntries[i];if(a.tryLoc<=this.prev&&t.call(a,"finallyLoc")&&this.prev=0;--n){var i=this.tryEntries[n];if(i.finallyLoc===e)return this.complete(i.completion,i.afterLoc),_(i),u}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc===e){var t=i.completion;if("throw"===t.type){var a=t.arg;_(i)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,i){return this.delegate={iterator:E(e),resultName:n,nextLoc:i},"next"===this.method&&(this.arg=void 0),u}}}function v(e,n,i,t){var a=n&&n.prototype instanceof x?n:x,o=Object.create(a.prototype),r=new j(t||[]);return o._invoke=function(e,n,i){var t="suspendedStart";return function(a,o){if("executing"===t)throw new Error("Generator is already running");if("completed"===t){if("throw"===a)throw o;return C()}for(i.method=a,i.arg=o;;){var r=i.delegate;if(r){var s=w(r,i);if(s){if(s===u)continue;return s}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===t)throw t="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);t="executing";var c=h(e,n,i);if("normal"===c.type){if(t=i.done?"completed":"suspendedYield",c.arg===u)continue;return{value:c.arg,done:i.done}}"throw"===c.type&&(t="completed",i.method="throw",i.arg=c.arg)}}}(e,i,r),o}function h(e,n,i){try{return{type:"normal",arg:e.call(n,i)}}catch(e){return{type:"throw",arg:e}}}function x(){}function b(){}function g(){}function k(e){["next","throw","return"].forEach((function(n){e[n]=function(e){return this._invoke(n,e)}}))}function y(e){function i(n,a,o,r){var s=h(e[n],e,a);if("throw"!==s.type){var c=s.arg,p=c.value;return p&&"object"==typeof p&&t.call(p,"__await")?Promise.resolve(p.__await).then((function(e){i("next",e,o,r)}),(function(e){i("throw",e,o,r)})):Promise.resolve(p).then((function(e){c.value=e,o(c)}),r)}r(s.arg)}var a;"object"==typeof n.process&&n.process.domain&&(i=n.process.domain.bind(i)),this._invoke=function(e,n){function t(){return new Promise((function(t,a){i(e,n,t,a)}))}return a=a?a.then(t,t):t()}}function w(e,n){var i=e.iterator[n.method];if(void 0===i){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=void 0,w(e,n),"throw"===n.method))return u;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var t=h(i,e.iterator,n.arg);if("throw"===t.type)return n.method="throw",n.arg=t.arg,n.delegate=null,u;var a=t.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=void 0),n.delegate=null,u):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,u)}function S(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function _(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function E(e){if(e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function n(){for(;++i * @license MIT */ -e.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,n,t){"use strict";var i=t(105),a=t(14),o=t(398),r=t(399);function s(e){this.defaults=e,this.interceptors={request:new o,response:new o}}s.prototype.request=function(e){"string"==typeof e&&(e=a.merge({url:arguments[0]},arguments[1])),(e=a.merge(i,{method:"get"},this.defaults,e)).method=e.method.toLowerCase();var n=[r,void 0],t=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){n.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){n.push(e.fulfilled,e.rejected)}));n.length;)t=t.then(n.shift(),n.shift());return t},a.forEach(["delete","get","head","options"],(function(e){s.prototype[e]=function(n,t){return this.request(a.merge(t||{},{method:e,url:n}))}})),a.forEach(["post","put","patch"],(function(e){s.prototype[e]=function(n,t,i){return this.request(a.merge(i||{},{method:e,url:n,data:t}))}})),e.exports=s},function(e,n,t){"use strict";var i=t(14);e.exports=function(e,n){i.forEach(e,(function(t,i){i!==n&&i.toUpperCase()===n.toUpperCase()&&(e[n]=t,delete e[i])}))}},function(e,n,t){"use strict";var i=t(14),a=t(153),o=t(155),r=t(384),s=t(385),c=t(106);e.exports=function(e){return new Promise((function(n,p){var u=e.data,l=e.headers;i.isFormData(u)&&delete l["Content-Type"];var f=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",m=e.auth.password||"";l.Authorization="Basic "+btoa(d+":"+m)}if(f.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),f.timeout=e.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var t="getAllResponseHeaders"in f?r(f.getAllResponseHeaders()):null,i={data:e.responseType&&"text"!==e.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:t,config:e,request:f};a(n,p,i),f=null}},f.onerror=function(){p(c("Network Error",e,null,f)),f=null},f.ontimeout=function(){p(c("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",f)),f=null},i.isStandardBrowserEnv()){var v=t(386),h=(e.withCredentials||s(e.url))&&e.xsrfCookieName?v.read(e.xsrfCookieName):void 0;h&&(l[e.xsrfHeaderName]=h)}if("setRequestHeader"in f&&i.forEach(l,(function(e,n){void 0===u&&"content-type"===n.toLowerCase()?delete l[n]:f.setRequestHeader(n,e)})),e.withCredentials&&(f.withCredentials=!0),e.responseType)try{f.responseType=e.responseType}catch(n){if("json"!==e.responseType)throw n}"function"==typeof e.onDownloadProgress&&f.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){f&&(f.abort(),p(e),f=null)})),void 0===u&&(u=null),f.send(u)}))}},function(e,n,t){"use strict";var i=t(14),a=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var n,t,o,r={};return e?(i.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),n=i.trim(e.substr(0,o)).toLowerCase(),t=i.trim(e.substr(o+1)),n){if(r[n]&&a.indexOf(n)>=0)return;r[n]="set-cookie"===n?(r[n]?r[n]:[]).concat([t]):r[n]?r[n]+", "+t:t}})),r):r}},function(e,n,t){"use strict";var i=t(14);e.exports=i.isStandardBrowserEnv()?function(){var e,n=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");function a(e){var i=e;return n&&(t.setAttribute("href",i),i=t.href),t.setAttribute("href",i),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return e=a(window.location.href),function(n){var t=i.isString(n)?a(n):n;return t.protocol===e.protocol&&t.host===e.host}}():function(){return!0}},function(e,n,t){"use strict";var i=t(14);e.exports=i.isStandardBrowserEnv()?{write:function(e,n,t,a,o,r){var s=[];s.push(e+"="+encodeURIComponent(n)),i.isNumber(t)&&s.push("expires="+new Date(t).toGMTString()),i.isString(a)&&s.push("path="+a),i.isString(o)&&s.push("domain="+o),!0===r&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var n=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,n,t){"use strict";var i=t(14),a=t(153),o=t(155),r=t(107),s=t(108),c=t(156).http,p=t(156).https,u=t(109),l=t(396),f=t(397),d=t(106),m=t(154);e.exports=function(e){return new Promise((function(n,t){var v,h=e.data,x=e.headers;if(x["User-Agent"]||x["user-agent"]||(x["User-Agent"]="axios/"+f.version),h&&!i.isStream(h)){if(Buffer.isBuffer(h));else if(i.isArrayBuffer(h))h=new Buffer(new Uint8Array(h));else{if(!i.isString(h))return t(d("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",e));h=new Buffer(h,"utf-8")}x["Content-Length"]=h.length}var b=void 0;e.auth&&(b=(e.auth.username||"")+":"+(e.auth.password||""));var g=u.parse(e.url),k=g.protocol||"http:";if(!b&&g.auth){var y=g.auth.split(":");b=(y[0]||"")+":"+(y[1]||"")}b&&delete x.Authorization;var w="https:"===k,S=w?e.httpsAgent:e.httpAgent,_={path:o(g.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method,headers:x,agent:S,auth:b};e.socketPath?_.socketPath=e.socketPath:(_.hostname=g.hostname,_.port=g.port);var j,E=e.proxy;if(!E&&!1!==E){var C=k.slice(0,-1)+"_proxy",O=process.env[C]||process.env[C.toUpperCase()];if(O){var A=u.parse(O);if(E={host:A.hostname,port:A.port},A.auth){var M=A.auth.split(":");E.auth={username:M[0],password:M[1]}}}}if(E&&(_.hostname=E.host,_.host=E.host,_.headers.host=g.hostname+(g.port?":"+g.port:""),_.port=E.port,_.path=k+"//"+g.hostname+(g.port?":"+g.port:"")+_.path,E.auth)){var P=new Buffer(E.auth.username+":"+E.auth.password,"utf8").toString("base64");_.headers["Proxy-Authorization"]="Basic "+P}e.transport?j=e.transport:0===e.maxRedirects?j=w?s:r:(e.maxRedirects&&(_.maxRedirects=e.maxRedirects),j=w?p:c),e.maxContentLength&&e.maxContentLength>-1&&(_.maxBodyLength=e.maxContentLength);var F=j.request(_,(function(i){if(!F.aborted){clearTimeout(v),v=null;var o=i;switch(i.headers["content-encoding"]){case"gzip":case"compress":case"deflate":o=o.pipe(l.createUnzip()),delete i.headers["content-encoding"]}var r=i.req||F,s={status:i.statusCode,statusText:i.statusMessage,headers:i.headers,config:e,request:r};if("stream"===e.responseType)s.data=o,a(n,t,s);else{var c=[];o.on("data",(function(n){c.push(n),e.maxContentLength>-1&&Buffer.concat(c).length>e.maxContentLength&&(o.destroy(),t(d("maxContentLength size of "+e.maxContentLength+" exceeded",e,null,r)))})),o.on("error",(function(n){F.aborted||t(m(n,e,null,r))})),o.on("end",(function(){var i=Buffer.concat(c);"arraybuffer"!==e.responseType&&(i=i.toString("utf8")),s.data=i,a(n,t,s)}))}}}));F.on("error",(function(n){F.aborted||t(m(n,e,null,F))})),e.timeout&&!v&&(v=setTimeout((function(){F.abort(),t(d("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",F))}),e.timeout)),e.cancelToken&&e.cancelToken.promise.then((function(e){F.aborted||(F.abort(),t(e))})),i.isStream(h)?h.pipe(F):F.end(h)}))}},function(e,n){e.exports=require("assert")},function(e,n,t){"undefined"==typeof process||"renderer"===process.type?e.exports=t(390):e.exports=t(392)},function(e,n,t){function i(){var e;try{e=n.storage.debug}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e}(n=e.exports=t(157)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},n.formatArgs=function(e){var t=this.useColors;if(e[0]=(t?"%c":"")+this.namespace+(t?" %c":" ")+e[0]+(t?"%c ":" ")+"+"+n.humanize(this.diff),!t)return;var i="color: "+this.color;e.splice(1,0,i,"color: inherit");var a=0,o=0;e[0].replace(/%[a-zA-Z%]/g,(function(e){"%%"!==e&&(a++,"%c"===e&&(o=a))})),e.splice(o,0,i)},n.save=function(e){try{null==e?n.storage.removeItem("debug"):n.storage.debug=e}catch(e){}},n.load=i,n.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},n.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),n.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],n.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},n.enable(i())},function(e,n){var t=1e3,i=6e4,a=36e5,o=24*a;function r(e,n,t){if(!(e0)return function(e){if((e=String(e)).length>100)return;var n=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!n)return;var r=parseFloat(n[1]);switch((n[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*r;case"days":case"day":case"d":return r*o;case"hours":case"hour":case"hrs":case"hr":case"h":return r*a;case"minutes":case"minute":case"mins":case"min":case"m":return r*i;case"seconds":case"second":case"secs":case"sec":case"s":return r*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}(e);if("number"===c&&!1===isNaN(e))return n.long?r(s=e,o,"day")||r(s,a,"hour")||r(s,i,"minute")||r(s,t,"second")||s+" ms":function(e){if(e>=o)return Math.round(e/o)+"d";if(e>=a)return Math.round(e/a)+"h";if(e>=i)return Math.round(e/i)+"m";if(e>=t)return Math.round(e/t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,n,t){var i=t(393),a=t(75);(n=e.exports=t(157)).init=function(e){e.inspectOpts={};for(var t=Object.keys(n.inspectOpts),i=0;i=2&&(n.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}function r(){return process.env.DEBUG}n.inspectOpts=Object.keys(process.env).filter((function(e){return/^debug_/i.test(e)})).reduce((function(e,n){var t=n.substring(6).toLowerCase().replace(/_([a-z])/g,(function(e,n){return n.toUpperCase()})),i=process.env[n];return i=!!/^(yes|on|true|enabled)$/i.test(i)||!/^(no|off|false|disabled)$/i.test(i)&&("null"===i?null:Number(i)),e[t]=i,e}),{}),n.formatters.o=function(e){return this.inspectOpts.colors=this.useColors,a.inspect(e,this.inspectOpts).split("\n").map((function(e){return e.trim()})).join(" ")},n.formatters.O=function(e){return this.inspectOpts.colors=this.useColors,a.inspect(e,this.inspectOpts)},n.enable(r())},function(e,n){e.exports=require("tty")},function(e,n,t){"use strict";const i=t(158),a=t(395),o=process.env;let r;function s(e){return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(function(e){if(!1===r)return 0;if(a("color=16m")||a("color=full")||a("color=truecolor"))return 3;if(a("color=256"))return 2;if(e&&!e.isTTY&&!0!==r)return 0;const n=r?1:0;if("win32"===process.platform){const e=i.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in o)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(e=>e in o)||"codeship"===o.CI_NAME?1:n;if("TEAMCITY_VERSION"in o)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0;if("truecolor"===o.COLORTERM)return 3;if("TERM_PROGRAM"in o){const e=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||"COLORTERM"in o?1:(o.TERM,n)}(e))}a("no-color")||a("no-colors")||a("color=false")?r=!1:(a("color")||a("colors")||a("color=true")||a("color=always"))&&(r=!0),"FORCE_COLOR"in o&&(r=0===o.FORCE_COLOR.length||0!==parseInt(o.FORCE_COLOR,10)),e.exports={supportsColor:s,stdout:s(process.stdout),stderr:s(process.stderr)}},function(e,n,t){"use strict";e.exports=(e,n)=>{n=n||process.argv;const t=e.startsWith("-")?"":1===e.length?"-":"--",i=n.indexOf(t+e),a=n.indexOf("--");return-1!==i&&(-1===a||i=t;)i[a++]=255&n|128,n/=128;for(;-128&n;)i[a++]=255&n|128,n>>>=7;return i[a]=0|n,e.bytes=a-o+1,i};var t=Math.pow(2,31)},function(e,n){e.exports=function e(n,t){var i,a=0,o=0,r=t=t||0,s=n.length;do{if(r>=s)throw e.bytes=0,new RangeError("Could not decode varint");i=n[r++],a+=o<28?(127&i)<=128);return e.bytes=r-t,a}},function(e,n){var t=Math.pow(2,7),i=Math.pow(2,14),a=Math.pow(2,21),o=Math.pow(2,28),r=Math.pow(2,35),s=Math.pow(2,42),c=Math.pow(2,49),p=Math.pow(2,56),u=Math.pow(2,63);e.exports=function(e){return e(e[n[0]]=new i(n[0],n[1],n[2],n[3]),e),{}),u=c.reduce((e,n)=>(e[n[1]]=p[n[0]],e),{});e.exports={names:p,codes:u}},function(e,n,t){"use strict";e.exports=class{constructor(e,n,t,i){this.name=e,this.code=n,this.alphabet=i,t&&i&&(this.engine=t(i))}encode(e){return this.engine.encode(e)}decode(e){return this.engine.decode(e)}isImplemented(){return this.engine}}},function(e,n,t){"use strict";e.exports=function(e){return{encode:e=>"string"==typeof e?Buffer.from(e).toString("hex"):e.toString("hex"),decode(n){for(let t of n)if(e.indexOf(t)<0)throw new Error("invalid base16 character");return Buffer.from(n,"hex")}}}},function(e,n,t){"use strict";function i(e,n){let t=e.byteLength,i=new Uint8Array(e),a=n.indexOf("=")===n.length-1;a&&(n=n.substring(0,n.length-2));let o=0,r=0,s="";for(let e=0;e=5;)s+=n[r>>>o-5&31],o-=5;if(o>0&&(s+=n[r<<5-o&31]),a)for(;s.length%8!=0;)s+="=";return s}e.exports=function(e){return{encode:n=>i("string"==typeof n?Buffer.from(n):n,e),decode(n){for(let t of n)if(e.indexOf(t)<0)throw new Error("invalid base32 character");return function(e,n){let t=(e=e.replace(new RegExp("=","g"),"")).length,i=0,a=0,o=0,r=new Uint8Array(5*t/8|0);for(let s=0;s=8&&(r[o++]=a>>>i-8&255,i-=8);return r.buffer}(n,e)}}}},function(e,n,t){"use strict";e.exports=function(e){const n=e.indexOf("=")>-1,t=e.indexOf("-")>-1&&e.indexOf("_")>-1;return{encode(e){let i="";i="string"==typeof e?Buffer.from(e).toString("base64"):e.toString("base64"),t&&(i=i.replace(/\+/g,"-").replace(/\//g,"_"));const a=i.indexOf("=");return a>0&&!n&&(i=i.substring(0,a)),i},decode(n){for(let t of n)if(e.indexOf(t)<0)throw new Error("invalid base64 character");return Buffer.from(n,"base64")}}}},function(e,n,t){"use strict";const i=t(416),a=t(111),o=t(51);function r(e){const n=[],t=e.split("/").slice(1);if(1===t.length&&""===t[0])return[];for(let i=0;i=t.length)throw x("invalid address: "+e);if(r.path){n.push([o,h(t.slice(i).join("/"))]);break}n.push([o,t[i]])}else n.push([o])}return n}function s(e){const n=[];return e.map(e=>{const t=b(e);n.push(t.name),e.length>1&&n.push(e[1])}),h(n.join("/"))}function c(e){return e.map(e=>{Array.isArray(e)||(e=[e]);const n=b(e);return e.length>1?[n.code,i.toBuffer(n.code,e[1])]:[n.code]})}function p(e){return e.map(e=>{const n=b(e);return e.length>1?[n.code,i.toString(n.code,e[1])]:[n.code]})}function u(e){return m(Buffer.concat(e.map(e=>{const n=b(e);let t=Buffer.from(o.encode(n.code));return e.length>1&&(t=Buffer.concat([t,e[1]])),t})))}function l(e,n){if(e.size>0)return e.size/8;if(0===e.size)return 0;return o.decode(n)+o.decode.bytes}function f(e){const n=[];let t=0;for(;te.length)throw x("Invalid address buffer: "+e.toString("hex"));n.push([i,c])}return n}function d(e){return u(c(r(e=h(e))))}function m(e){const n=v(e);if(n)throw n;return Buffer.from(e)}function v(e){try{f(e)}catch(e){return e}}function h(e){return"/"+e.trim().split("/").filter(e=>e).join("/")}function x(e){return new Error("Error parsing address: "+e)}function b(e){return a(e[0])}e.exports={stringToStringTuples:r,stringTuplesToString:s,tuplesToStringTuples:p,stringTuplesToTuples:c,bufferToTuples:f,tuplesToBuffer:u,bufferToString:function(e){return s(p(f(e)))},stringToBuffer:d,fromString:function(e){return d(e)},fromBuffer:m,validateBuffer:v,isValidBuffer:function(e){return void 0===v(e)},cleanPath:h,ParseError:x,protoFromTuple:b,sizeForAddr:l}},function(e,n,t){"use strict";const i=t(417),a=t(418),o=t(111),r=t(76),s=t(112),c=t(426),p=t(51);function u(e,n){return n instanceof Buffer?u.toString(e,n):u.toBuffer(e,n)}function l(e){if(!a(e))throw new Error("invalid ip address");return i.toBuffer(e)}function f(e){const n=Buffer.alloc(2);return n.writeUInt16BE(e,0),n}function d(e){return e.readUInt16BE(0)}function m(e){const n=e.slice(0,e.length-2),t=e.slice(e.length-2);return c.encode(n).toLowerCase()+":"+d(t)}e.exports=u,u.toString=function(e,n){switch((e=o(e)).code){case 4:case 41:return function(e){const n=i.toString(e);if(!a(n))throw new Error("invalid ip address");return n}(n);case 6:case 273:case 33:case 132:return d(n);case 53:case 54:case 55:case 56:case 400:return function(e){const n=p.decode(e);if((e=e.slice(p.decode.bytes)).length!==n)throw new Error("inconsistent lengths");return e.toString()}(n);case 421:return function(e){const n=p.decode(e),t=e.slice(p.decode.bytes);if(t.length!==n)throw new Error("inconsistent lengths");return r.encode(t)}(n);case 444:case 445:return m(n);default:return n.toString("hex")}},u.toBuffer=function(e,n){switch((e=o(e)).code){case 4:case 41:return l(n);case 6:case 273:case 33:case 132:return f(parseInt(n,10));case 53:case 54:case 55:case 56:case 400:return function(e){const n=Buffer.from(e),t=Buffer.from(p.encode(n.length));return Buffer.concat([t,n])}(n);case 421:return function(e){const n=new s(e).multihash,t=Buffer.from(p.encode(n.length));return Buffer.concat([t,n])}(n);case 444:return function(e){const n=e.split(":");if(2!==n.length)throw new Error("failed to parse onion addr: "+n+" does not contain a port number");if(16!==n[0].length)throw new Error("failed to parse onion addr: "+n[0]+" not a Tor onion address.");const t=Buffer.from(c.decode.asBytes(n[0].toUpperCase())),i=parseInt(n[1],10);if(i<1||i>65536)throw new Error("Port number is not in range(1, 65536)");const a=f(i);return Buffer.concat([t,a])}(n);case 445:return function(e){const n=e.split(":");if(2!==n.length)throw new Error("failed to parse onion addr: "+n+" does not contain a port number");if(56!==n[0].length)throw new Error("failed to parse onion addr: "+n[0]+" not a Tor onion3 address.");const t=Buffer.from(c.decode.asBytes(n[0].toUpperCase())),i=parseInt(n[1],10);if(i<1||i>65536)throw new Error("Port number is not in range(1, 65536)");const a=f(i);return Buffer.concat([t,a])}(n);default:return Buffer.from(n,"hex")}}},function(e,n,t){"use strict";var i=n,a=t(162).Buffer,o=t(158);i.toBuffer=function(e,n,t){var i;if(t=~~t,this.isV4Format(e))i=n||new a(t+4),e.split(/\./g).map((function(e){i[t++]=255&parseInt(e,10)}));else if(this.isV6Format(e)){var o,r=e.split(":",8);for(o=0;o0;o--)c.push("0");r.splice.apply(r,c)}for(i=n||new a(t+16),o=0;o>8&255,i[t++]=255&p}}if(!i)throw Error("Invalid ip address: "+e);return i},i.toString=function(e,n,t){n=~~n;var i=[];if(4===(t=t||e.length-n)){for(var a=0;a32?"ipv6":c(n))&&(t=16);for(var o=new a(t),r=0,s=o.length;r>p)}return i.toString(o)},i.mask=function(e,n){e=i.toBuffer(e),n=i.toBuffer(n);var t=new a(Math.max(e.length,n.length)),o=0;if(e.length===n.length)for(o=0;oe.length&&(a=n,o=e);var r=a.length-o.length;for(t=r;t>>0},i.fromLong=function(e){return(e>>>24)+"."+(e>>16&255)+"."+(e>>8&255)+"."+(255&e)}},function(e,n,t){"use strict";const i=t(419),a=e=>i({exact:!0}).test(e);a.v4=e=>i.v4({exact:!0}).test(e),a.v6=e=>i.v6({exact:!0}).test(e),a.version=e=>a(e)?a.v4(e)?4:6:void 0,e.exports=a},function(e,n,t){"use strict";const i=e=>e&&e.includeBoundaries?"(?:(?<=\\s|^)(?=[a-fA-F\\d:])|(?<=[a-fA-F\\d:])(?=\\s|$))":"",a="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",o="[a-fA-F\\d]{1,4}",r=`\n(\n(?:${o}:){7}(?:${o}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:${o}:){6}(?:${a}|:${o}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:${o}:){5}(?::${a}|(:${o}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:${o}:){4}(?:(:${o}){0,1}:${a}|(:${o}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:${o}:){3}(?:(:${o}){0,2}:${a}|(:${o}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:${o}:){2}(?:(:${o}){0,3}:${a}|(:${o}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:${o}:){1}(?:(:${o}){0,4}:${a}|(:${o}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::((?::${o}){0,5}:${a}|(?::${o}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(%[0-9a-zA-Z]{1,})? // %eth0 %1\n`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),s=e=>e&&e.exact?new RegExp(`(?:^${a}$)|(?:^${r}$)`):new RegExp(`(?:${i(e)}${a}${i(e)})|(?:${i(e)}${r}${i(e)})`,"g");s.v4=e=>e&&e.exact?new RegExp(`^${a}$`):new RegExp(`${i(e)}${a}${i(e)}`,"g"),s.v6=e=>e&&e.exact?new RegExp(`^${r}$`):new RegExp(`${i(e)}${r}${i(e)}`,"g"),e.exports=s},function(e,n,t){"use strict";const i=t(51),a=t(421),o=t(422),r=t(165);(n=e.exports).addPrefix=(e,n)=>{let t;if(Buffer.isBuffer(e))t=r.varintBufferEncode(e);else{if(!o[e])throw new Error("multicodec not recognized");t=o[e]}return Buffer.concat([t,n])},n.rmPrefix=e=>(i.decode(e),e.slice(i.decode.bytes)),n.getCodec=e=>{const n=i.decode(e),t=a.get(n);if(void 0===t)throw new Error(`Code ${n} not found`);return t},n.getName=e=>a.get(e),n.getNumber=e=>{const n=o[e];if(void 0===n)throw new Error("Codec `"+e+"` not found");return r.varintBufferDecode(n)[0]},n.getCode=e=>i.decode(e),n.getCodeVarint=e=>{const n=o[e];if(void 0===n)throw new Error("Codec `"+e+"` not found");return n},n.getVarint=e=>i.encode(e);const s=t(423);Object.assign(n,s),n.print=t(424)},function(e,n,t){"use strict";const i=t(58),a=new Map;for(const e in i){const n=i[e];a.set(n,e)}e.exports=Object.freeze(a)},function(e,n,t){"use strict";const i=t(58),a=t(165).varintEncode,o={};for(const e in i){const n=i[e];o[e]=a(n)}e.exports=Object.freeze(o)},function(e,n,t){"use strict";const i=t(58),a={};for(const[e,n]of Object.entries(i))a[e.toUpperCase().replace(/-/g,"_")]=n;e.exports=Object.freeze(a)},function(e,n,t){"use strict";const i=t(58),a={};for(const[e,n]of Object.entries(i))void 0===a[n]&&(a[n]=e);e.exports=Object.freeze(a)},function(e,n,t){"use strict";const i=t(110);var a={checkCIDComponents:function(e){if(null==e)return"null values are not valid CIDs";if(0!==e.version&&1!==e.version)return"Invalid version, must be a number equal to 1 or 0";if("string"!=typeof e.codec)return"codec must be string";if(0===e.version){if("dag-pb"!==e.codec)return"codec must be 'dag-pb' for CIDv0";if("base58btc"!==e.multibaseName)return"multibaseName must be 'base58btc' for CIDv0"}if(!Buffer.isBuffer(e.multihash))return"multihash must be a Buffer";try{i.validate(e.multihash)}catch(e){let n=e.message;return n||(n="Multihash validation failed"),n}}};e.exports=a},function(e,n,t){var i; +e.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,n,i){"use strict";var t=i(105),a=i(14),o=i(398),r=i(399);function s(e){this.defaults=e,this.interceptors={request:new o,response:new o}}s.prototype.request=function(e){"string"==typeof e&&(e=a.merge({url:arguments[0]},arguments[1])),(e=a.merge(t,{method:"get"},this.defaults,e)).method=e.method.toLowerCase();var n=[r,void 0],i=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){n.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){n.push(e.fulfilled,e.rejected)}));n.length;)i=i.then(n.shift(),n.shift());return i},a.forEach(["delete","get","head","options"],(function(e){s.prototype[e]=function(n,i){return this.request(a.merge(i||{},{method:e,url:n}))}})),a.forEach(["post","put","patch"],(function(e){s.prototype[e]=function(n,i,t){return this.request(a.merge(t||{},{method:e,url:n,data:i}))}})),e.exports=s},function(e,n,i){"use strict";var t=i(14);e.exports=function(e,n){t.forEach(e,(function(i,t){t!==n&&t.toUpperCase()===n.toUpperCase()&&(e[n]=i,delete e[t])}))}},function(e,n,i){"use strict";var t=i(14),a=i(153),o=i(155),r=i(384),s=i(385),c=i(106);e.exports=function(e){return new Promise((function(n,p){var u=e.data,l=e.headers;t.isFormData(u)&&delete l["Content-Type"];var f=new XMLHttpRequest;if(e.auth){var d=e.auth.username||"",m=e.auth.password||"";l.Authorization="Basic "+btoa(d+":"+m)}if(f.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),f.timeout=e.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var i="getAllResponseHeaders"in f?r(f.getAllResponseHeaders()):null,t={data:e.responseType&&"text"!==e.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:i,config:e,request:f};a(n,p,t),f=null}},f.onerror=function(){p(c("Network Error",e,null,f)),f=null},f.ontimeout=function(){p(c("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",f)),f=null},t.isStandardBrowserEnv()){var v=i(386),h=(e.withCredentials||s(e.url))&&e.xsrfCookieName?v.read(e.xsrfCookieName):void 0;h&&(l[e.xsrfHeaderName]=h)}if("setRequestHeader"in f&&t.forEach(l,(function(e,n){void 0===u&&"content-type"===n.toLowerCase()?delete l[n]:f.setRequestHeader(n,e)})),e.withCredentials&&(f.withCredentials=!0),e.responseType)try{f.responseType=e.responseType}catch(n){if("json"!==e.responseType)throw n}"function"==typeof e.onDownloadProgress&&f.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){f&&(f.abort(),p(e),f=null)})),void 0===u&&(u=null),f.send(u)}))}},function(e,n,i){"use strict";var t=i(14),a=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var n,i,o,r={};return e?(t.forEach(e.split("\n"),(function(e){if(o=e.indexOf(":"),n=t.trim(e.substr(0,o)).toLowerCase(),i=t.trim(e.substr(o+1)),n){if(r[n]&&a.indexOf(n)>=0)return;r[n]="set-cookie"===n?(r[n]?r[n]:[]).concat([i]):r[n]?r[n]+", "+i:i}})),r):r}},function(e,n,i){"use strict";var t=i(14);e.exports=t.isStandardBrowserEnv()?function(){var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function a(e){var t=e;return n&&(i.setAttribute("href",t),t=i.href),i.setAttribute("href",t),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return e=a(window.location.href),function(n){var i=t.isString(n)?a(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return!0}},function(e,n,i){"use strict";var t=i(14);e.exports=t.isStandardBrowserEnv()?{write:function(e,n,i,a,o,r){var s=[];s.push(e+"="+encodeURIComponent(n)),t.isNumber(i)&&s.push("expires="+new Date(i).toGMTString()),t.isString(a)&&s.push("path="+a),t.isString(o)&&s.push("domain="+o),!0===r&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var n=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,n,i){"use strict";var t=i(14),a=i(153),o=i(155),r=i(107),s=i(108),c=i(156).http,p=i(156).https,u=i(109),l=i(396),f=i(397),d=i(106),m=i(154);e.exports=function(e){return new Promise((function(n,i){var v,h=e.data,x=e.headers;if(x["User-Agent"]||x["user-agent"]||(x["User-Agent"]="axios/"+f.version),h&&!t.isStream(h)){if(Buffer.isBuffer(h));else if(t.isArrayBuffer(h))h=new Buffer(new Uint8Array(h));else{if(!t.isString(h))return i(d("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",e));h=new Buffer(h,"utf-8")}x["Content-Length"]=h.length}var b=void 0;e.auth&&(b=(e.auth.username||"")+":"+(e.auth.password||""));var g=u.parse(e.url),k=g.protocol||"http:";if(!b&&g.auth){var y=g.auth.split(":");b=(y[0]||"")+":"+(y[1]||"")}b&&delete x.Authorization;var w="https:"===k,S=w?e.httpsAgent:e.httpAgent,_={path:o(g.path,e.params,e.paramsSerializer).replace(/^\?/,""),method:e.method,headers:x,agent:S,auth:b};e.socketPath?_.socketPath=e.socketPath:(_.hostname=g.hostname,_.port=g.port);var j,E=e.proxy;if(!E&&!1!==E){var C=k.slice(0,-1)+"_proxy",O=process.env[C]||process.env[C.toUpperCase()];if(O){var A=u.parse(O);if(E={host:A.hostname,port:A.port},A.auth){var P=A.auth.split(":");E.auth={username:P[0],password:P[1]}}}}if(E&&(_.hostname=E.host,_.host=E.host,_.headers.host=g.hostname+(g.port?":"+g.port:""),_.port=E.port,_.path=k+"//"+g.hostname+(g.port?":"+g.port:"")+_.path,E.auth)){var M=new Buffer(E.auth.username+":"+E.auth.password,"utf8").toString("base64");_.headers["Proxy-Authorization"]="Basic "+M}e.transport?j=e.transport:0===e.maxRedirects?j=w?s:r:(e.maxRedirects&&(_.maxRedirects=e.maxRedirects),j=w?p:c),e.maxContentLength&&e.maxContentLength>-1&&(_.maxBodyLength=e.maxContentLength);var F=j.request(_,(function(t){if(!F.aborted){clearTimeout(v),v=null;var o=t;switch(t.headers["content-encoding"]){case"gzip":case"compress":case"deflate":o=o.pipe(l.createUnzip()),delete t.headers["content-encoding"]}var r=t.req||F,s={status:t.statusCode,statusText:t.statusMessage,headers:t.headers,config:e,request:r};if("stream"===e.responseType)s.data=o,a(n,i,s);else{var c=[];o.on("data",(function(n){c.push(n),e.maxContentLength>-1&&Buffer.concat(c).length>e.maxContentLength&&(o.destroy(),i(d("maxContentLength size of "+e.maxContentLength+" exceeded",e,null,r)))})),o.on("error",(function(n){F.aborted||i(m(n,e,null,r))})),o.on("end",(function(){var t=Buffer.concat(c);"arraybuffer"!==e.responseType&&(t=t.toString("utf8")),s.data=t,a(n,i,s)}))}}}));F.on("error",(function(n){F.aborted||i(m(n,e,null,F))})),e.timeout&&!v&&(v=setTimeout((function(){F.abort(),i(d("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",F))}),e.timeout)),e.cancelToken&&e.cancelToken.promise.then((function(e){F.aborted||(F.abort(),i(e))})),t.isStream(h)?h.pipe(F):F.end(h)}))}},function(e,n){e.exports=require("assert")},function(e,n,i){"undefined"==typeof process||"renderer"===process.type?e.exports=i(390):e.exports=i(392)},function(e,n,i){function t(){var e;try{e=n.storage.debug}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e}(n=e.exports=i(157)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},n.formatArgs=function(e){var i=this.useColors;if(e[0]=(i?"%c":"")+this.namespace+(i?" %c":" ")+e[0]+(i?"%c ":" ")+"+"+n.humanize(this.diff),!i)return;var t="color: "+this.color;e.splice(1,0,t,"color: inherit");var a=0,o=0;e[0].replace(/%[a-zA-Z%]/g,(function(e){"%%"!==e&&(a++,"%c"===e&&(o=a))})),e.splice(o,0,t)},n.save=function(e){try{null==e?n.storage.removeItem("debug"):n.storage.debug=e}catch(e){}},n.load=t,n.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},n.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),n.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],n.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},n.enable(t())},function(e,n){var i=1e3,t=6e4,a=36e5,o=24*a;function r(e,n,i){if(!(e0)return function(e){if((e=String(e)).length>100)return;var n=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!n)return;var r=parseFloat(n[1]);switch((n[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*r;case"days":case"day":case"d":return r*o;case"hours":case"hour":case"hrs":case"hr":case"h":return r*a;case"minutes":case"minute":case"mins":case"min":case"m":return r*t;case"seconds":case"second":case"secs":case"sec":case"s":return r*i;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}(e);if("number"===c&&!1===isNaN(e))return n.long?r(s=e,o,"day")||r(s,a,"hour")||r(s,t,"minute")||r(s,i,"second")||s+" ms":function(e){if(e>=o)return Math.round(e/o)+"d";if(e>=a)return Math.round(e/a)+"h";if(e>=t)return Math.round(e/t)+"m";if(e>=i)return Math.round(e/i)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,n,i){var t=i(393),a=i(75);(n=e.exports=i(157)).init=function(e){e.inspectOpts={};for(var i=Object.keys(n.inspectOpts),t=0;t=2&&(n.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}function r(){return process.env.DEBUG}n.inspectOpts=Object.keys(process.env).filter((function(e){return/^debug_/i.test(e)})).reduce((function(e,n){var i=n.substring(6).toLowerCase().replace(/_([a-z])/g,(function(e,n){return n.toUpperCase()})),t=process.env[n];return t=!!/^(yes|on|true|enabled)$/i.test(t)||!/^(no|off|false|disabled)$/i.test(t)&&("null"===t?null:Number(t)),e[i]=t,e}),{}),n.formatters.o=function(e){return this.inspectOpts.colors=this.useColors,a.inspect(e,this.inspectOpts).split("\n").map((function(e){return e.trim()})).join(" ")},n.formatters.O=function(e){return this.inspectOpts.colors=this.useColors,a.inspect(e,this.inspectOpts)},n.enable(r())},function(e,n){e.exports=require("tty")},function(e,n,i){"use strict";const t=i(158),a=i(395),o=process.env;let r;function s(e){return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(function(e){if(!1===r)return 0;if(a("color=16m")||a("color=full")||a("color=truecolor"))return 3;if(a("color=256"))return 2;if(e&&!e.isTTY&&!0!==r)return 0;const n=r?1:0;if("win32"===process.platform){const e=t.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in o)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(e=>e in o)||"codeship"===o.CI_NAME?1:n;if("TEAMCITY_VERSION"in o)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0;if("truecolor"===o.COLORTERM)return 3;if("TERM_PROGRAM"in o){const e=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||"COLORTERM"in o?1:(o.TERM,n)}(e))}a("no-color")||a("no-colors")||a("color=false")?r=!1:(a("color")||a("colors")||a("color=true")||a("color=always"))&&(r=!0),"FORCE_COLOR"in o&&(r=0===o.FORCE_COLOR.length||0!==parseInt(o.FORCE_COLOR,10)),e.exports={supportsColor:s,stdout:s(process.stdout),stderr:s(process.stderr)}},function(e,n,i){"use strict";e.exports=(e,n)=>{n=n||process.argv;const i=e.startsWith("-")?"":1===e.length?"-":"--",t=n.indexOf(i+e),a=n.indexOf("--");return-1!==t&&(-1===a||t=i;)t[a++]=255&n|128,n/=128;for(;-128&n;)t[a++]=255&n|128,n>>>=7;return t[a]=0|n,e.bytes=a-o+1,t};var i=Math.pow(2,31)},function(e,n){e.exports=function e(n,i){var t,a=0,o=0,r=i=i||0,s=n.length;do{if(r>=s)throw e.bytes=0,new RangeError("Could not decode varint");t=n[r++],a+=o<28?(127&t)<=128);return e.bytes=r-i,a}},function(e,n){var i=Math.pow(2,7),t=Math.pow(2,14),a=Math.pow(2,21),o=Math.pow(2,28),r=Math.pow(2,35),s=Math.pow(2,42),c=Math.pow(2,49),p=Math.pow(2,56),u=Math.pow(2,63);e.exports=function(e){return e(e[n[0]]=new t(n[0],n[1],n[2],n[3]),e),{}),u=c.reduce((e,n)=>(e[n[1]]=p[n[0]],e),{});e.exports={names:p,codes:u}},function(e,n,i){"use strict";e.exports=class{constructor(e,n,i,t){this.name=e,this.code=n,this.alphabet=t,i&&t&&(this.engine=i(t))}encode(e){return this.engine.encode(e)}decode(e){return this.engine.decode(e)}isImplemented(){return this.engine}}},function(e,n,i){"use strict";e.exports=function(e){return{encode:e=>"string"==typeof e?Buffer.from(e).toString("hex"):e.toString("hex"),decode(n){for(let i of n)if(e.indexOf(i)<0)throw new Error("invalid base16 character");return Buffer.from(n,"hex")}}}},function(e,n,i){"use strict";function t(e,n){let i=e.byteLength,t=new Uint8Array(e),a=n.indexOf("=")===n.length-1;a&&(n=n.substring(0,n.length-2));let o=0,r=0,s="";for(let e=0;e=5;)s+=n[r>>>o-5&31],o-=5;if(o>0&&(s+=n[r<<5-o&31]),a)for(;s.length%8!=0;)s+="=";return s}e.exports=function(e){return{encode:n=>t("string"==typeof n?Buffer.from(n):n,e),decode(n){for(let i of n)if(e.indexOf(i)<0)throw new Error("invalid base32 character");return function(e,n){let i=(e=e.replace(new RegExp("=","g"),"")).length,t=0,a=0,o=0,r=new Uint8Array(5*i/8|0);for(let s=0;s=8&&(r[o++]=a>>>t-8&255,t-=8);return r.buffer}(n,e)}}}},function(e,n,i){"use strict";e.exports=function(e){const n=e.indexOf("=")>-1,i=e.indexOf("-")>-1&&e.indexOf("_")>-1;return{encode(e){let t="";t="string"==typeof e?Buffer.from(e).toString("base64"):e.toString("base64"),i&&(t=t.replace(/\+/g,"-").replace(/\//g,"_"));const a=t.indexOf("=");return a>0&&!n&&(t=t.substring(0,a)),t},decode(n){for(let i of n)if(e.indexOf(i)<0)throw new Error("invalid base64 character");return Buffer.from(n,"base64")}}}},function(e,n,i){"use strict";const t=i(416),a=i(111),o=i(51);function r(e){const n=[],i=e.split("/").slice(1);if(1===i.length&&""===i[0])return[];for(let t=0;t=i.length)throw x("invalid address: "+e);if(r.path){n.push([o,h(i.slice(t).join("/"))]);break}n.push([o,i[t]])}else n.push([o])}return n}function s(e){const n=[];return e.map(e=>{const i=b(e);n.push(i.name),e.length>1&&n.push(e[1])}),h(n.join("/"))}function c(e){return e.map(e=>{Array.isArray(e)||(e=[e]);const n=b(e);return e.length>1?[n.code,t.toBuffer(n.code,e[1])]:[n.code]})}function p(e){return e.map(e=>{const n=b(e);return e.length>1?[n.code,t.toString(n.code,e[1])]:[n.code]})}function u(e){return m(Buffer.concat(e.map(e=>{const n=b(e);let i=Buffer.from(o.encode(n.code));return e.length>1&&(i=Buffer.concat([i,e[1]])),i})))}function l(e,n){if(e.size>0)return e.size/8;if(0===e.size)return 0;return o.decode(n)+o.decode.bytes}function f(e){const n=[];let i=0;for(;ie.length)throw x("Invalid address buffer: "+e.toString("hex"));n.push([t,c])}return n}function d(e){return u(c(r(e=h(e))))}function m(e){const n=v(e);if(n)throw n;return Buffer.from(e)}function v(e){try{f(e)}catch(e){return e}}function h(e){return"/"+e.trim().split("/").filter(e=>e).join("/")}function x(e){return new Error("Error parsing address: "+e)}function b(e){return a(e[0])}e.exports={stringToStringTuples:r,stringTuplesToString:s,tuplesToStringTuples:p,stringTuplesToTuples:c,bufferToTuples:f,tuplesToBuffer:u,bufferToString:function(e){return s(p(f(e)))},stringToBuffer:d,fromString:function(e){return d(e)},fromBuffer:m,validateBuffer:v,isValidBuffer:function(e){return void 0===v(e)},cleanPath:h,ParseError:x,protoFromTuple:b,sizeForAddr:l}},function(e,n,i){"use strict";const t=i(417),a=i(418),o=i(111),r=i(76),s=i(112),c=i(426),p=i(51);function u(e,n){return n instanceof Buffer?u.toString(e,n):u.toBuffer(e,n)}function l(e){if(!a(e))throw new Error("invalid ip address");return t.toBuffer(e)}function f(e){const n=Buffer.alloc(2);return n.writeUInt16BE(e,0),n}function d(e){return e.readUInt16BE(0)}function m(e){const n=e.slice(0,e.length-2),i=e.slice(e.length-2);return c.encode(n).toLowerCase()+":"+d(i)}e.exports=u,u.toString=function(e,n){switch((e=o(e)).code){case 4:case 41:return function(e){const n=t.toString(e);if(!a(n))throw new Error("invalid ip address");return n}(n);case 6:case 273:case 33:case 132:return d(n);case 53:case 54:case 55:case 56:case 400:return function(e){const n=p.decode(e);if((e=e.slice(p.decode.bytes)).length!==n)throw new Error("inconsistent lengths");return e.toString()}(n);case 421:return function(e){const n=p.decode(e),i=e.slice(p.decode.bytes);if(i.length!==n)throw new Error("inconsistent lengths");return r.encode(i)}(n);case 444:case 445:return m(n);default:return n.toString("hex")}},u.toBuffer=function(e,n){switch((e=o(e)).code){case 4:case 41:return l(n);case 6:case 273:case 33:case 132:return f(parseInt(n,10));case 53:case 54:case 55:case 56:case 400:return function(e){const n=Buffer.from(e),i=Buffer.from(p.encode(n.length));return Buffer.concat([i,n])}(n);case 421:return function(e){const n=new s(e).multihash,i=Buffer.from(p.encode(n.length));return Buffer.concat([i,n])}(n);case 444:return function(e){const n=e.split(":");if(2!==n.length)throw new Error("failed to parse onion addr: "+n+" does not contain a port number");if(16!==n[0].length)throw new Error("failed to parse onion addr: "+n[0]+" not a Tor onion address.");const i=Buffer.from(c.decode.asBytes(n[0].toUpperCase())),t=parseInt(n[1],10);if(t<1||t>65536)throw new Error("Port number is not in range(1, 65536)");const a=f(t);return Buffer.concat([i,a])}(n);case 445:return function(e){const n=e.split(":");if(2!==n.length)throw new Error("failed to parse onion addr: "+n+" does not contain a port number");if(56!==n[0].length)throw new Error("failed to parse onion addr: "+n[0]+" not a Tor onion3 address.");const i=Buffer.from(c.decode.asBytes(n[0].toUpperCase())),t=parseInt(n[1],10);if(t<1||t>65536)throw new Error("Port number is not in range(1, 65536)");const a=f(t);return Buffer.concat([i,a])}(n);default:return Buffer.from(n,"hex")}}},function(e,n,i){"use strict";var t=n,a=i(162).Buffer,o=i(158);t.toBuffer=function(e,n,i){var t;if(i=~~i,this.isV4Format(e))t=n||new a(i+4),e.split(/\./g).map((function(e){t[i++]=255&parseInt(e,10)}));else if(this.isV6Format(e)){var o,r=e.split(":",8);for(o=0;o0;o--)c.push("0");r.splice.apply(r,c)}for(t=n||new a(i+16),o=0;o>8&255,t[i++]=255&p}}if(!t)throw Error("Invalid ip address: "+e);return t},t.toString=function(e,n,i){n=~~n;var t=[];if(4===(i=i||e.length-n)){for(var a=0;a32?"ipv6":c(n))&&(i=16);for(var o=new a(i),r=0,s=o.length;r>p)}return t.toString(o)},t.mask=function(e,n){e=t.toBuffer(e),n=t.toBuffer(n);var i=new a(Math.max(e.length,n.length)),o=0;if(e.length===n.length)for(o=0;oe.length&&(a=n,o=e);var r=a.length-o.length;for(i=r;i>>0},t.fromLong=function(e){return(e>>>24)+"."+(e>>16&255)+"."+(e>>8&255)+"."+(255&e)}},function(e,n,i){"use strict";const t=i(419),a=e=>t({exact:!0}).test(e);a.v4=e=>t.v4({exact:!0}).test(e),a.v6=e=>t.v6({exact:!0}).test(e),a.version=e=>a(e)?a.v4(e)?4:6:void 0,e.exports=a},function(e,n,i){"use strict";const t=e=>e&&e.includeBoundaries?"(?:(?<=\\s|^)(?=[a-fA-F\\d:])|(?<=[a-fA-F\\d:])(?=\\s|$))":"",a="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",o="[a-fA-F\\d]{1,4}",r=`\n(\n(?:${o}:){7}(?:${o}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:${o}:){6}(?:${a}|:${o}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:${o}:){5}(?::${a}|(:${o}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:${o}:){4}(?:(:${o}){0,1}:${a}|(:${o}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:${o}:){3}(?:(:${o}){0,2}:${a}|(:${o}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:${o}:){2}(?:(:${o}){0,3}:${a}|(:${o}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:${o}:){1}(?:(:${o}){0,4}:${a}|(:${o}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::((?::${o}){0,5}:${a}|(?::${o}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(%[0-9a-zA-Z]{1,})? // %eth0 %1\n`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),s=e=>e&&e.exact?new RegExp(`(?:^${a}$)|(?:^${r}$)`):new RegExp(`(?:${t(e)}${a}${t(e)})|(?:${t(e)}${r}${t(e)})`,"g");s.v4=e=>e&&e.exact?new RegExp(`^${a}$`):new RegExp(`${t(e)}${a}${t(e)}`,"g"),s.v6=e=>e&&e.exact?new RegExp(`^${r}$`):new RegExp(`${t(e)}${r}${t(e)}`,"g"),e.exports=s},function(e,n,i){"use strict";const t=i(51),a=i(421),o=i(422),r=i(165);(n=e.exports).addPrefix=(e,n)=>{let i;if(Buffer.isBuffer(e))i=r.varintBufferEncode(e);else{if(!o[e])throw new Error("multicodec not recognized");i=o[e]}return Buffer.concat([i,n])},n.rmPrefix=e=>(t.decode(e),e.slice(t.decode.bytes)),n.getCodec=e=>{const n=t.decode(e),i=a.get(n);if(void 0===i)throw new Error(`Code ${n} not found`);return i},n.getName=e=>a.get(e),n.getNumber=e=>{const n=o[e];if(void 0===n)throw new Error("Codec `"+e+"` not found");return r.varintBufferDecode(n)[0]},n.getCode=e=>t.decode(e),n.getCodeVarint=e=>{const n=o[e];if(void 0===n)throw new Error("Codec `"+e+"` not found");return n},n.getVarint=e=>t.encode(e);const s=i(423);Object.assign(n,s),n.print=i(424)},function(e,n,i){"use strict";const t=i(58),a=new Map;for(const e in t){const n=t[e];a.set(n,e)}e.exports=Object.freeze(a)},function(e,n,i){"use strict";const t=i(58),a=i(165).varintEncode,o={};for(const e in t){const n=t[e];o[e]=a(n)}e.exports=Object.freeze(o)},function(e,n,i){"use strict";const t=i(58),a={};for(const[e,n]of Object.entries(t))a[e.toUpperCase().replace(/-/g,"_")]=n;e.exports=Object.freeze(a)},function(e,n,i){"use strict";const t=i(58),a={};for(const[e,n]of Object.entries(t))void 0===a[n]&&(a[n]=e);e.exports=Object.freeze(a)},function(e,n,i){"use strict";const t=i(110);var a={checkCIDComponents:function(e){if(null==e)return"null values are not valid CIDs";if(0!==e.version&&1!==e.version)return"Invalid version, must be a number equal to 1 or 0";if("string"!=typeof e.codec)return"codec must be string";if(0===e.version){if("dag-pb"!==e.codec)return"codec must be 'dag-pb' for CIDv0";if("base58btc"!==e.multibaseName)return"multibaseName must be 'base58btc' for CIDv0"}if(!Buffer.isBuffer(e.multihash))return"multihash must be a Buffer";try{t.validate(e.multihash)}catch(e){let n=e.message;return n||(n="Multihash validation failed"),n}}};e.exports=a},function(e,n,i){var t; /* * [hi-base32]{@link https://github.com/emn178/hi-base32} * @@ -13,17 +13,17 @@ e.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e. * @author Chen, Yi-Cyuan [emn178@gmail.com] * @copyright Chen, Yi-Cyuan 2015-2018 * @license MIT - */!function(){"use strict";var n="object"==typeof window?window:{};!n.HI_BASE32_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node&&(n=global);var a=!n.HI_BASE32_NO_COMMON_JS&&"object"==typeof e&&e.exports,o=t(427),r="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".split(""),s={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9,K:10,L:11,M:12,N:13,O:14,P:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,2:26,3:27,4:28,5:29,6:30,7:31},c=[0,0,0,0,0,0,0,0],p=function(e,n){n.length>10&&(n="..."+n.substr(-10));var t=new Error("Decoded data is not valid UTF-8. Maybe try base32.decode.asBytes()? Partial data after reading "+e+" bytes: "+n+" <-");throw t.position=e,t},u=function(e){if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");for(var n,t,i,a,o,r,c,p,u=[],l=0,f=(e=e.replace(/=/g,"")).length,d=0,m=f>>3<<3;d>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3),u[l++]=255&(c<<5|p);var v=f-m;return 2===v?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2)):4===v?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4)):5===v?(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1)):7===v&&(n=s[e.charAt(d++)],t=s[e.charAt(d++)],i=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],r=s[e.charAt(d++)],c=s[e.charAt(d++)],u[l++]=255&(n<<3|t>>>2),u[l++]=255&(t<<6|i<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3)),u},l=function(e,n){if(!n)return function(e){for(var n,t,i="",a=e.length,o=0,r=0;o191&&n<=223?(t=31&n,r=1):n<=239?(t=15&n,r=2):n<=247?(t=7&n,r=3):p(o,i);for(var s=0;s191)&&p(o,i),t<<=6,t+=63&n;t>=55296&&t<=57343&&p(o,i),t>1114111&&p(o,i),t<=65535?i+=String.fromCharCode(t):(t-=65536,i+=String.fromCharCode(55296+(t>>10)),i+=String.fromCharCode(56320+(1023&t)))}return i}(u(e));if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");var t,i,a,o,r,c,l,f,d="",m=e.indexOf("=");-1===m&&(m=e.length);for(var v=0,h=m>>3<<3;v>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))+String.fromCharCode(255&(l<<5|f));var x=m-h;return 2===x?(t=s[e.charAt(v++)],i=s[e.charAt(v++)],d+=String.fromCharCode(255&(t<<3|i>>>2))):4===x?(t=s[e.charAt(v++)],i=s[e.charAt(v++)],a=s[e.charAt(v++)],o=s[e.charAt(v++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))):5===x?(t=s[e.charAt(v++)],i=s[e.charAt(v++)],a=s[e.charAt(v++)],o=s[e.charAt(v++)],r=s[e.charAt(v++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))):7===x&&(t=s[e.charAt(v++)],i=s[e.charAt(v++)],a=s[e.charAt(v++)],o=s[e.charAt(v++)],r=s[e.charAt(v++)],c=s[e.charAt(v++)],l=s[e.charAt(v++)],d+=String.fromCharCode(255&(t<<3|i>>>2))+String.fromCharCode(255&(i<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))),d},f={encode:function(e,n){var t="string"!=typeof e;return t&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),t?function(e){for(var n,t,i,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e[p],s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e[p++],t=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===l?(n=e[p++],t=e[p++],i=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):4===l&&(n=e[p++],t=e[p++],i=e[p++],a=e[p],s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):n?function(e){for(var n,t,i,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e.charCodeAt(p),s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e.charCodeAt(p++),t=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===l?(n=e.charCodeAt(p++),t=e.charCodeAt(p++),i=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):4===l&&(n=e.charCodeAt(p++),t=e.charCodeAt(p++),i=e.charCodeAt(p++),a=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):function(e){var n,t,i,a,o,s,p,u=!1,l="",f=0,d=0,m=e.length;do{for(c[0]=c[5],c[1]=c[6],c[2]=c[7],p=d;f>6,c[p++]=128|63&s):s<55296||s>=57344?(c[p++]=224|s>>12,c[p++]=128|s>>6&63,c[p++]=128|63&s):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++f)),c[p++]=240|s>>18,c[p++]=128|s>>12&63,c[p++]=128|s>>6&63,c[p++]=128|63&s);p-d,d=p-5,f===m&&++f,f>m&&p<6&&(u=!0),n=c[0],p>4?(t=c[1],i=c[2],a=c[3],o=c[4],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o]):1===p?l+=r[n>>>3]+r[n<<2&31]+"======":2===p?(t=c[1],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[t<<4&31]+"===="):3===p?(t=c[1],i=c[2],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[i<<1&31]+"==="):(t=c[1],i=c[2],a=c[3],l+=r[n>>>3]+r[31&(n<<2|t>>>6)]+r[t>>>1&31]+r[31&(t<<4|i>>>4)]+r[31&(i<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"=")}while(!u);return l}(e)},decode:l};l.asBytes=u,a?e.exports=f:(n.base32=f,o&&(void 0===(i=function(){return f}.call(f,t,f,e))||(e.exports=i)))}()},function(e,n){(function(n){e.exports=n}).call(this,{})},function(e,n,t){"use strict";const i=t(164),a=O("dns4"),o=O("dns6"),r=C(O("dns"),O("dnsaddr"),a,o),s=C(O("ip4"),O("ip6")),c=C(E(s,O("tcp")),E(r,O("tcp"))),p=E(s,O("udp")),u=E(p,O("utp")),l=C(E(c,O("ws")),E(r,O("ws"))),f=C(E(c,O("wss")),E(r,O("wss"))),d=C(E(c,O("http")),E(s,O("http")),E(r,O("http"))),m=C(E(c,O("https")),E(s,O("https")),E(r,O("https"))),v=C(E(l,O("p2p-webrtc-star"),O("p2p")),E(f,O("p2p-webrtc-star"),O("p2p")),E(l,O("p2p-webrtc-star")),E(f,O("p2p-webrtc-star"))),h=C(E(l,O("p2p-websocket-star"),O("p2p")),E(f,O("p2p-websocket-star"),O("p2p")),E(l,O("p2p-websocket-star")),E(f,O("p2p-websocket-star"))),x=C(E(d,O("p2p-webrtc-direct")),E(m,O("p2p-webrtc-direct"))),b=C(l,f,d,m,v,x,c,u),g=C(E(b,O("p2p-stardust"),O("p2p")),E(b,O("p2p-stardust"))),k=C(E(b,O("p2p")),v,O("p2p")),y=C(E(k,O("p2p-circuit"),k),E(k,O("p2p-circuit")),E(O("p2p-circuit"),k),E(b,O("p2p-circuit")),E(O("p2p-circuit"),b),O("p2p-circuit")),w=()=>C(E(y,w),y),S=w(),_=C(E(S,k,S),E(k,S),E(S,k),S,k);function j(e){return function(n){if(!i.isMultiaddr(n))try{n=i(n)}catch(e){return!1}const t=e(n.protoNames());return null!==t&&0===t.length}}function E(){const e=Array.from(arguments);function n(n){return n.length{if(null===(n="function"==typeof e?e().partialMatch(n):e.partialMatch(n)))return!0}),n)}return{toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n}}function C(){const e=Array.from(arguments);function n(n){let t=null;return e.some(e=>{const i="function"==typeof e?e().partialMatch(n):e.partialMatch(n);if(i)return t=i,!0}),t}const t={toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n};return t}function O(e){const n=e;return{toString:function(){return n},matches:function(e){if("string"==typeof e)try{e=i(e)}catch(e){return!1}const t=e.protoNames();return 1===t.length&&t[0]===n},partialMatch:function(e){return 0===e.length?null:e[0]===n?e.slice(1):null}}}n.DNS=r,n.DNS4=a,n.DNS6=o,n.IP=s,n.TCP=c,n.UDP=p,n.UTP=u,n.HTTP=d,n.HTTPS=m,n.WebSockets=l,n.WebSocketsSecure=f,n.WebSocketStar=h,n.WebRTCStar=v,n.WebRTCDirect=x,n.Reliable=b,n.Stardust=g,n.Circuit=S,n.P2P=_,n.IPFS=_},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,c){return(0,s.validateApiKeys)(e,n),new Promise((function(p,u){var l=new o.default;l.append("file",t);var f="".concat(a.baseUrl,"/pinning/pinFileToIPFS");t instanceof r.default.Readable||u(new Error("readStream is not a readable stream")),c&&(c.pinataMetadata&&((0,s.validateMetadata)(c.pinataMetadata),l.append("pinataMetadata",JSON.stringify(c.pinataMetadata))),c.pinataOptions&&((0,s.validatePinataOptions)(c.pinataOptions),l.append("pinataOptions",JSON.stringify(c.pinataOptions)))),i.default.post(f,l,{withCredentials:!0,maxContentLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(l._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&u(new Error("unknown server response while pinning File to IPFS: ".concat(e))),p(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?u(new Error(e.response.data.error)):u(e)}))}))};var i=c(t(24)),a=t(25),o=c(t(167)),r=c(t(74)),s=t(26);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){var i=t(75),a=t(74).Stream,o=t(431);function r(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=r,i.inherits(r,a),r.create=function(e){var n=new this;for(var t in e=e||{})n[t]=e[t];return n},r.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},r.prototype.append=function(e){if(r.isStreamLike(e)){if(!(e instanceof o)){var n=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=n}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},r.prototype.pipe=function(e,n){return a.prototype.pipe.call(this,e,n),this.resume(),e},r.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},r.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){r.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},r.prototype._pipeNext=function(e){if(this._currentStream=e,r.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var n=e;this.write(n),this._getNext()},r.prototype._handleErrors=function(e){var n=this;e.on("error",(function(e){n._emitError(e)}))},r.prototype.write=function(e){this.emit("data",e)},r.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},r.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},r.prototype.end=function(){this._reset(),this.emit("end")},r.prototype.destroy=function(){this._reset(),this.emit("close")},r.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},r.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},r.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(n){n.dataSize&&(e.dataSize+=n.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},r.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},function(e,n,t){var i=t(74).Stream,a=t(75);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,a.inherits(o,i),o.create=function(e,n){var t=new this;for(var i in n=n||{})t[i]=n[i];t.source=e;var a=e.emit;return e.emit=function(){return t._handleEmit(arguments),a.apply(e,arguments)},e.on("error",(function(){})),t.pauseStream&&e.pause(),t},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=i.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},function(e,n,t){"use strict"; + */!function(){"use strict";var n="object"==typeof window?window:{};!n.HI_BASE32_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node&&(n=global);var a=!n.HI_BASE32_NO_COMMON_JS&&"object"==typeof e&&e.exports,o=i(427),r="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".split(""),s={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9,K:10,L:11,M:12,N:13,O:14,P:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,2:26,3:27,4:28,5:29,6:30,7:31},c=[0,0,0,0,0,0,0,0],p=function(e,n){n.length>10&&(n="..."+n.substr(-10));var i=new Error("Decoded data is not valid UTF-8. Maybe try base32.decode.asBytes()? Partial data after reading "+e+" bytes: "+n+" <-");throw i.position=e,i},u=function(e){if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");for(var n,i,t,a,o,r,c,p,u=[],l=0,f=(e=e.replace(/=/g,"")).length,d=0,m=f>>3<<3;d>>2),u[l++]=255&(i<<6|t<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3),u[l++]=255&(c<<5|p);var v=f-m;return 2===v?(n=s[e.charAt(d++)],i=s[e.charAt(d++)],u[l++]=255&(n<<3|i>>>2)):4===v?(n=s[e.charAt(d++)],i=s[e.charAt(d++)],t=s[e.charAt(d++)],a=s[e.charAt(d++)],u[l++]=255&(n<<3|i>>>2),u[l++]=255&(i<<6|t<<1|a>>>4)):5===v?(n=s[e.charAt(d++)],i=s[e.charAt(d++)],t=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],u[l++]=255&(n<<3|i>>>2),u[l++]=255&(i<<6|t<<1|a>>>4),u[l++]=255&(a<<4|o>>>1)):7===v&&(n=s[e.charAt(d++)],i=s[e.charAt(d++)],t=s[e.charAt(d++)],a=s[e.charAt(d++)],o=s[e.charAt(d++)],r=s[e.charAt(d++)],c=s[e.charAt(d++)],u[l++]=255&(n<<3|i>>>2),u[l++]=255&(i<<6|t<<1|a>>>4),u[l++]=255&(a<<4|o>>>1),u[l++]=255&(o<<7|r<<2|c>>>3)),u},l=function(e,n){if(!n)return function(e){for(var n,i,t="",a=e.length,o=0,r=0;o191&&n<=223?(i=31&n,r=1):n<=239?(i=15&n,r=2):n<=247?(i=7&n,r=3):p(o,t);for(var s=0;s191)&&p(o,t),i<<=6,i+=63&n;i>=55296&&i<=57343&&p(o,t),i>1114111&&p(o,t),i<=65535?t+=String.fromCharCode(i):(i-=65536,t+=String.fromCharCode(55296+(i>>10)),t+=String.fromCharCode(56320+(1023&i)))}return t}(u(e));if(!/^[A-Z2-7=]+$/.test(e))throw new Error("Invalid base32 characters");var i,t,a,o,r,c,l,f,d="",m=e.indexOf("=");-1===m&&(m=e.length);for(var v=0,h=m>>3<<3;v>>2))+String.fromCharCode(255&(t<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))+String.fromCharCode(255&(l<<5|f));var x=m-h;return 2===x?(i=s[e.charAt(v++)],t=s[e.charAt(v++)],d+=String.fromCharCode(255&(i<<3|t>>>2))):4===x?(i=s[e.charAt(v++)],t=s[e.charAt(v++)],a=s[e.charAt(v++)],o=s[e.charAt(v++)],d+=String.fromCharCode(255&(i<<3|t>>>2))+String.fromCharCode(255&(t<<6|a<<1|o>>>4))):5===x?(i=s[e.charAt(v++)],t=s[e.charAt(v++)],a=s[e.charAt(v++)],o=s[e.charAt(v++)],r=s[e.charAt(v++)],d+=String.fromCharCode(255&(i<<3|t>>>2))+String.fromCharCode(255&(t<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))):7===x&&(i=s[e.charAt(v++)],t=s[e.charAt(v++)],a=s[e.charAt(v++)],o=s[e.charAt(v++)],r=s[e.charAt(v++)],c=s[e.charAt(v++)],l=s[e.charAt(v++)],d+=String.fromCharCode(255&(i<<3|t>>>2))+String.fromCharCode(255&(t<<6|a<<1|o>>>4))+String.fromCharCode(255&(o<<4|r>>>1))+String.fromCharCode(255&(r<<7|c<<2|l>>>3))),d},f={encode:function(e,n){var i="string"!=typeof e;return i&&e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),i?function(e){for(var n,i,t,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[31&(t<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e[p],s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e[p++],i=e[p],s+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[i<<4&31]+"===="):3===l?(n=e[p++],i=e[p++],t=e[p],s+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[t<<1&31]+"==="):4===l&&(n=e[p++],i=e[p++],t=e[p++],a=e[p],s+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[31&(t<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):n?function(e){for(var n,i,t,a,o,s="",c=e.length,p=0,u=5*parseInt(c/5);p>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[31&(t<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o];var l=c-u;return 1===l?(n=e.charCodeAt(p),s+=r[n>>>3]+r[n<<2&31]+"======"):2===l?(n=e.charCodeAt(p++),i=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[i<<4&31]+"===="):3===l?(n=e.charCodeAt(p++),i=e.charCodeAt(p++),t=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[t<<1&31]+"==="):4===l&&(n=e.charCodeAt(p++),i=e.charCodeAt(p++),t=e.charCodeAt(p++),a=e.charCodeAt(p),s+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[31&(t<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"="),s}(e):function(e){var n,i,t,a,o,s,p,u=!1,l="",f=0,d=0,m=e.length;do{for(c[0]=c[5],c[1]=c[6],c[2]=c[7],p=d;f>6,c[p++]=128|63&s):s<55296||s>=57344?(c[p++]=224|s>>12,c[p++]=128|s>>6&63,c[p++]=128|63&s):(s=65536+((1023&s)<<10|1023&e.charCodeAt(++f)),c[p++]=240|s>>18,c[p++]=128|s>>12&63,c[p++]=128|s>>6&63,c[p++]=128|63&s);p-d,d=p-5,f===m&&++f,f>m&&p<6&&(u=!0),n=c[0],p>4?(i=c[1],t=c[2],a=c[3],o=c[4],l+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[31&(t<<1|a>>>7)]+r[a>>>2&31]+r[31&(a<<3|o>>>5)]+r[31&o]):1===p?l+=r[n>>>3]+r[n<<2&31]+"======":2===p?(i=c[1],l+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[i<<4&31]+"===="):3===p?(i=c[1],t=c[2],l+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[t<<1&31]+"==="):(i=c[1],t=c[2],a=c[3],l+=r[n>>>3]+r[31&(n<<2|i>>>6)]+r[i>>>1&31]+r[31&(i<<4|t>>>4)]+r[31&(t<<1|a>>>7)]+r[a>>>2&31]+r[a<<3&31]+"=")}while(!u);return l}(e)},decode:l};l.asBytes=u,a?e.exports=f:(n.base32=f,o&&(void 0===(t=function(){return f}.call(f,i,f,e))||(e.exports=t)))}()},function(e,n){(function(n){e.exports=n}).call(this,{})},function(e,n,i){"use strict";const t=i(164),a=O("dns4"),o=O("dns6"),r=C(O("dns"),O("dnsaddr"),a,o),s=C(O("ip4"),O("ip6")),c=C(E(s,O("tcp")),E(r,O("tcp"))),p=E(s,O("udp")),u=E(p,O("utp")),l=C(E(c,O("ws")),E(r,O("ws"))),f=C(E(c,O("wss")),E(r,O("wss"))),d=C(E(c,O("http")),E(s,O("http")),E(r,O("http"))),m=C(E(c,O("https")),E(s,O("https")),E(r,O("https"))),v=C(E(l,O("p2p-webrtc-star"),O("p2p")),E(f,O("p2p-webrtc-star"),O("p2p")),E(l,O("p2p-webrtc-star")),E(f,O("p2p-webrtc-star"))),h=C(E(l,O("p2p-websocket-star"),O("p2p")),E(f,O("p2p-websocket-star"),O("p2p")),E(l,O("p2p-websocket-star")),E(f,O("p2p-websocket-star"))),x=C(E(d,O("p2p-webrtc-direct")),E(m,O("p2p-webrtc-direct"))),b=C(l,f,d,m,v,x,c,u),g=C(E(b,O("p2p-stardust"),O("p2p")),E(b,O("p2p-stardust"))),k=C(E(b,O("p2p")),v,O("p2p")),y=C(E(k,O("p2p-circuit"),k),E(k,O("p2p-circuit")),E(O("p2p-circuit"),k),E(b,O("p2p-circuit")),E(O("p2p-circuit"),b),O("p2p-circuit")),w=()=>C(E(y,w),y),S=w(),_=C(E(S,k,S),E(k,S),E(S,k),S,k);function j(e){return function(n){if(!t.isMultiaddr(n))try{n=t(n)}catch(e){return!1}const i=e(n.protoNames());return null!==i&&0===i.length}}function E(){const e=Array.from(arguments);function n(n){return n.length{if(null===(n="function"==typeof e?e().partialMatch(n):e.partialMatch(n)))return!0}),n)}return{toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n}}function C(){const e=Array.from(arguments);function n(n){let i=null;return e.some(e=>{const t="function"==typeof e?e().partialMatch(n):e.partialMatch(n);if(t)return i=t,!0}),i}const i={toString:function(){return"{ "+e.join(" ")+" }"},input:e,matches:j(n),partialMatch:n};return i}function O(e){const n=e;return{toString:function(){return n},matches:function(e){if("string"==typeof e)try{e=t(e)}catch(e){return!1}const i=e.protoNames();return 1===i.length&&i[0]===n},partialMatch:function(e){return 0===e.length?null:e[0]===n?e.slice(1):null}}}n.DNS=r,n.DNS4=a,n.DNS6=o,n.IP=s,n.TCP=c,n.UDP=p,n.UTP=u,n.HTTP=d,n.HTTPS=m,n.WebSockets=l,n.WebSocketsSecure=f,n.WebSocketStar=h,n.WebRTCStar=v,n.WebRTCDirect=x,n.Reliable=b,n.Stardust=g,n.Circuit=S,n.P2P=_,n.IPFS=_},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i,s){if((0,o.validateApiKeys)(e,n),(0,o.validatePinPolicyStructure)(s),!i)throw new Error("ipfsPinHash value is required for changing the pin policy of a pin");if(!r.default.cid(i))throw new Error("ipfsPinHash value is an invalid IPFS CID");if(!s)throw new Error("newPinPolicy is required for changing the pin policy of a pin");var c="".concat(a.baseUrl,"/pinning/hashPinPolicy"),p={ipfsPinHash:i,newPinPolicy:s};return new Promise((function(i,a){t.default.put(c,p,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while changing pin policy for hash: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var t=s(i(24)),a=i(25),o=i(26),r=s(i(57));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i,c){return(0,s.validateApiKeys)(e,n),new Promise((function(p,u){var l=new o.default;l.append("file",i);var f="".concat(a.baseUrl,"/pinning/pinFileToIPFS");i instanceof r.default.Readable||u(new Error("readStream is not a readable stream")),c&&(c.pinataMetadata&&((0,s.validateMetadata)(c.pinataMetadata),l.append("pinataMetadata",JSON.stringify(c.pinataMetadata))),c.pinataOptions&&((0,s.validatePinataOptions)(c.pinataOptions),l.append("pinataOptions",JSON.stringify(c.pinataOptions)))),t.default.post(f,l,{withCredentials:!0,maxContentLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(l._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&u(new Error("unknown server response while pinning File to IPFS: ".concat(e))),p(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?u(new Error(e.response.data.error)):u(e)}))}))};var t=c(i(24)),a=i(25),o=c(i(167)),r=c(i(74)),s=i(26);function c(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,i){var t=i(75),a=i(74).Stream,o=i(432);function r(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=r,t.inherits(r,a),r.create=function(e){var n=new this;for(var i in e=e||{})n[i]=e[i];return n},r.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},r.prototype.append=function(e){if(r.isStreamLike(e)){if(!(e instanceof o)){var n=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=n}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},r.prototype.pipe=function(e,n){return a.prototype.pipe.call(this,e,n),this.resume(),e},r.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},r.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){r.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},r.prototype._pipeNext=function(e){if(this._currentStream=e,r.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var n=e;this.write(n),this._getNext()},r.prototype._handleErrors=function(e){var n=this;e.on("error",(function(e){n._emitError(e)}))},r.prototype.write=function(e){this.emit("data",e)},r.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},r.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},r.prototype.end=function(){this._reset(),this.emit("end")},r.prototype.destroy=function(){this._reset(),this.emit("close")},r.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},r.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},r.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(n){n.dataSize&&(e.dataSize+=n.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},r.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},function(e,n,i){var t=i(74).Stream,a=i(75);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,a.inherits(o,t),o.create=function(e,n){var i=new this;for(var t in n=n||{})i[t]=n[t];i.source=e;var a=e.emit;return e.emit=function(){return i._handleEmit(arguments),a.apply(e,arguments)},e.on("error",(function(){})),i.pauseStream&&e.pause(),i},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=t.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},function(e,n,i){"use strict"; /*! * mime-types * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed - */var i,a,o,r=t(433),s=t(77).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function u(e){if(!e||"string"!=typeof e)return!1;var n=c.exec(e),t=n&&r[n[1].toLowerCase()];return t&&t.charset?t.charset:!(!n||!p.test(n[1]))&&"UTF-8"}n.charset=u,n.charsets={lookup:u},n.contentType=function(e){if(!e||"string"!=typeof e)return!1;var t=-1===e.indexOf("/")?n.lookup(e):e;if(!t)return!1;if(-1===t.indexOf("charset")){var i=n.charset(t);i&&(t+="; charset="+i.toLowerCase())}return t},n.extension=function(e){if(!e||"string"!=typeof e)return!1;var t=c.exec(e),i=t&&n.extensions[t[1].toLowerCase()];if(!i||!i.length)return!1;return i[0]},n.extensions=Object.create(null),n.lookup=function(e){if(!e||"string"!=typeof e)return!1;var t=s("x."+e).toLowerCase().substr(1);if(!t)return!1;return n.types[t]||!1},n.types=Object.create(null),i=n.extensions,a=n.types,o=["nginx","apache",void 0,"iana"],Object.keys(r).forEach((function(e){var n=r[e],t=n.extensions;if(t&&t.length){i[e]=t;for(var s=0;su||p===u&&"application/"===a[c].substr(0,12)))continue}a[c]=e}}}))},function(e,n,t){ + */var t,a,o,r=i(434),s=i(77).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function u(e){if(!e||"string"!=typeof e)return!1;var n=c.exec(e),i=n&&r[n[1].toLowerCase()];return i&&i.charset?i.charset:!(!n||!p.test(n[1]))&&"UTF-8"}n.charset=u,n.charsets={lookup:u},n.contentType=function(e){if(!e||"string"!=typeof e)return!1;var i=-1===e.indexOf("/")?n.lookup(e):e;if(!i)return!1;if(-1===i.indexOf("charset")){var t=n.charset(i);t&&(i+="; charset="+t.toLowerCase())}return i},n.extension=function(e){if(!e||"string"!=typeof e)return!1;var i=c.exec(e),t=i&&n.extensions[i[1].toLowerCase()];if(!t||!t.length)return!1;return t[0]},n.extensions=Object.create(null),n.lookup=function(e){if(!e||"string"!=typeof e)return!1;var i=s("x."+e).toLowerCase().substr(1);if(!i)return!1;return n.types[i]||!1},n.types=Object.create(null),t=n.extensions,a=n.types,o=["nginx","apache",void 0,"iana"],Object.keys(r).forEach((function(e){var n=r[e],i=n.extensions;if(i&&i.length){t[e]=i;for(var s=0;su||p===u&&"application/"===a[c].substr(0,12)))continue}a[c]=e}}}))},function(e,n,i){ /*! * mime-db * Copyright(c) 2014 Jonathan Ong * MIT Licensed */ -e.exports=t(434)},function(e){e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma","es"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","compressible":true},"application/fhir+xml":{"source":"iana","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/mrb-publish+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/msc-ivr+xml":{"source":"iana","compressible":true},"application/msc-mixer+xml":{"source":"iana","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana"},"application/news-groupinfo":{"source":"iana"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana"},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","compressible":true},"application/pidf-diff+xml":{"source":"iana","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["keynote"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"apache","extensions":["der","crt","pem"]},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana"},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},function(e,n,t){e.exports={parallel:t(436),serial:t(438),serialOrdered:t(173)}},function(e,n,t){var i=t(168),a=t(171),o=t(172);e.exports=function(e,n,t){var r=a(e);for(;r.index<(r.keyedList||e).length;)i(e,n,r,(function(e,n){e?t(e,n):0!==Object.keys(r.jobs).length||t(null,r.results)})),r.index++;return o.bind(r,t)}},function(e,n){e.exports=function(e){var n="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;n?n(e):setTimeout(e,0)}},function(e,n,t){var i=t(173);e.exports=function(e,n,t){return i(e,n,null,t)}},function(e,n){e.exports=function(e,n){return Object.keys(n).forEach((function(t){e[t]=e[t]||n[t]})),e}},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,c){return(0,r.validateApiKeys)(e,n),new Promise((function(l,f){var d="".concat(a.baseUrl,"/pinning/pinFileToIPFS");u.readdirr(t,(function(a,u,m){a&&f(new Error(a));var v=new o.default;m.forEach((function(e){v.append("file",p.createReadStream(e),{filepath:(0,s.default)(t,e)})})),c&&(c.pinataMetadata&&((0,r.validateMetadata)(c.pinataMetadata),v.append("pinataMetadata",JSON.stringify(c.pinataMetadata))),c.pinataOptions&&((0,r.validatePinataOptions)(c.pinataOptions),v.append("pinataOptions",JSON.stringify(c.pinataOptions)))),i.default.post(d,v,{withCredentials:!0,maxContentLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(v._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&f(new Error("unknown server response while pinning File to IPFS: ".concat(e))),l(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?f(new Error(e.response.data.error)):f(e)}))}))}))};var i=c(t(24)),a=t(25),o=c(t(167)),r=t(26),s=c(t(441));function c(e){return e&&e.__esModule?e:{default:e}}var p=t(59),u=t(442);e.exports=n.default},function(e,n){e.exports=function(e,n){let t=e;e.lastIndexOf("/")===e.length-1&&(t=e.slice(0,-1));const i=t.lastIndexOf("/");if(-1===i)return t;{const e=t.substring(0,i+1);t=n.split(e)[1]}return t}},function(e,n,t){e.exports={readdirr:t(113).readdirr,rmdirr:t(114).rmdirr,rmdirs:t(114).rmdirs,rmfiles:t(114).rmfiles,cpdirr:t(115).cpdirr,cpdirs:t(115).cpdirs,cpfiles:t(115).cpfiles}},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,i){(0,r.validateApiKeys)(e,n);var c=t;if("object"!==s(t))throw new Error("body must be a valid JSON object");i&&(c={pinataContent:t},i.pinataMetadata&&((0,r.validateMetadata)(i.pinataMetadata),c.pinataMetadata=i.pinataMetadata),i.pinataOptions&&((0,r.validatePinataOptions)(i.pinataOptions),c.pinataOptions=i.pinataOptions));var p="".concat(o.baseUrl,"/pinning/pinJSONToIPFS");return new Promise((function(t,i){a.default.post(p,c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&i(new Error("unknown server response while pinning JSON to IPFS: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?i(new Error(e.response.data.error)):i(e)}))}))};var i,a=(i=t(24))&&i.__esModule?i:{default:i},o=t(25),r=t(26);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t,s){if((0,o.validateApiKeys)(e,n),!t)throw new Error("hashToPin value is required for adding a hash to the pin queue");if(!r.default.cid(t))throw new Error("hashToPin value is an invalid IPFS CID");var c="".concat(a.baseUrl,"/pinning/pinHashToIPFS"),p={hashToPin:t};s&&(s.host_nodes&&((0,o.validateHostNodes)(s.host_nodes),p.host_nodes=s.host_nodes),s.pinataMetadata&&((0,o.validateMetadata)(s.pinataMetadata),p.pinataMetadata=s.pinataMetadata));return new Promise((function(t,a){i.default.post(c,p,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while pinning hash to IPFS: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var i=s(t(24)),a=t(25),o=t(26),r=s(t(57));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){(0,o.validateApiKeys)(e,n);var s="".concat(a.baseUrl,"/pinning/pinJobs");t&&(s=(0,r.default)(s,t));return new Promise((function(t,a){i.default.get(s,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve pin jobs: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var i=s(t(24)),a=t(25),o=t(26),r=s(t(446));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");if(!n)return e;var t=e,i=!1;function o(e){i?t="".concat(t,"&").concat(e):(i=!0,t="".concat(t,"?").concat(e))}if(n){if(n.sort){if("ASC"!==n.sort&&"DESC"!==n.sort)throw new Error("Unknown sort value: ".concat(n.sort," provided"));o("sort=".concat(n.sort))}if(n.status){if("searching"!==n.status&&"expired"!==n.status&&"over_free_limit"!==n.status&&"over_max_size"!==n.status&&"invalid_object"!==n.status&&"bad_host_node"!==n.status)throw new Error("Unknown status value: ".concat(n.status," provided"));o("status=".concat(n.status))}if(n.ipfs_pin_hash){if(!a.default.cid(n.ipfs_pin_hash))throw new Error("Invalid IPFS hash: ".concat(n.ipfs_pin_hash));o("ipfs_pin_hash=".concat(n.ipfs_pin_hash))}if(n.limit){if(!(Number.isInteger(n.limit)&&n.limit>0&&n.limit<100))throw new Error("Invalid limit: ".concat(n.limit,". Valid limits are 1-100"));o("limit=".concat(n.limit))}if(n.offset){if(!(Number.isInteger(n.offset)&&n.offset>0))throw new Error("Invalid offset: ".concat(n.offset,". Please provide a positive integer for the offset"));o("offset=".concat(n.offset))}}return t};var i,a=(i=t(57))&&i.__esModule?i:{default:i};e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){if((0,o.validateApiKeys)(e,n),!t)throw new Error("ipfsPinHash value is required for removing a pin from Pinata");if(!r.default.cid(t))throw new Error("".concat(t," is an invalid IPFS CID"));var s="".concat(a.baseUrl,"/pinning/removePinFromIPFS"),c={ipfs_pin_hash:t};return new Promise((function(t,a){i.default.post(s,c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while removing pin from IPFS: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var i=s(t(24)),a=t(25),o=t(26),r=s(t(57));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){(0,r.validateApiKeys)(e,n);var t="".concat(o.baseUrl,"/data/testAuthentication");return new Promise((function(i,o){a.default.get(t,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while authenticating: ".concat(e))),i({authenticated:!0})})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?o(new Error(e.response.data.error)):o(e)}))}))};var i,a=(i=t(24))&&i.__esModule?i:{default:i},o=t(25),r=t(26);e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){(0,o.validateApiKeys)(e,n);var s="".concat(a.baseUrl,"/data/pinList"),c=(0,r.default)(s,t);return new Promise((function(t,a){i.default.get(c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve user pin list: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var i=s(t(24)),a=t(25),o=t(26),r=s(t(450));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e){var n=new Date(Date.parse(e));try{if(n.toISOString()===e)return e;throw new Error("dates must be in valid ISO_8601 format")}catch(e){throw new Error("dates must be in valid ISO_8601 format")}}Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");var t="?",o="";if(n){if(n.hashContains){if("string"!=typeof n.hashContains)throw new Error("hashContains value is not a string");t+="hashContains=".concat(n.hashContains,"&")}if(n.pinStart&&(t+="pinStart=".concat(a(n.pinStart),"&")),n.pinEnd&&(t+="pinEnd=".concat(a(n.pinEnd),"&")),n.unpinStart&&(t+="unpinStart=".concat(a(n.unpinStart),"&")),n.unpinEnd&&(t+="unpinEnd=".concat(a(n.unpinEnd),"&")),n.pinSizeMin){if(isNaN(n.pinSizeMin)||n.pinSizeMin<0)throw new Error("Please make sure the pinSizeMin is a valid positive integer");t+="pinSizeMin=".concat(n.pinSizeMin,"&")}if(n.pinSizeMax){if(isNaN(n.pinSizeMax)||n.pinSizeMax<0)throw new Error("Please make sure the pinSizeMax is a valid positive integer");t+="pinSizeMax=".concat(n.pinSizeMax,"&")}if(n.status){if("all"!==n.status&&"pinned"!==n.status&&"unpinned"!==n.status)throw new Error("status value must be either: all, pinned, or unpinned");t+="status=".concat(n.status,"&")}if(n.pageLimit){if(isNaN(n.pageLimit)||n.pageLimit<=0||n.pageLimit>1e3)throw new Error("Please make sure the pageLimit is a valid integer between 1-1000");t+="pageLimit=".concat(parseInt(n.pageLimit),"&")}if(n.pageOffset){if(isNaN(n.pageOffset)||n.pageOffset<=0)throw new Error("Please make sure the pageOffset is a positive integer");t+="pageOffset=".concat(parseInt(n.pageOffset),"&")}if(n.metadata){if("object"!==i(n.metadata))throw new Error("metadata value must be an object");if(n.metadata.name&&(o="metadata[name]=".concat(n.metadata.name,"&")),n.metadata.keyvalues){if("object"!==i(n.metadata.keyvalues))throw new Error("metadata keyvalues must be an object");var r={};Object.entries(n.metadata.keyvalues).forEach((function(e){var n=e[0],t=e[1];if("object"!==i(t))throw new Error("keyValue: ".concat(n," is not an object"));if(!t||!t.value||!t.op)throw new Error("keyValue: ".concat(n," must have both value and op attributes"));if("string"!=typeof t.value&&"boolean"!=typeof t.value&&"number"!=typeof t.value)throw new Error("Metadata keyvalue values must be strings, booleans, or numbers");switch(t.op){case"gt":case"gte":case"lt":case"lte":case"ne":case"eq":r[n]={value:t.value,op:t.op};break;case"between":if(!t.secondValue)throw new Error("Because between op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof t.secondValue&&"boolean"!=typeof t.secondValue&&"number"!=typeof t.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");r[n]={value:t.value,op:t.op,secondValue:t.secondValue};break;case"notBetween":if(!t.secondValue)throw new Error("Because notBetween op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof t.secondValue&&"boolean"!=typeof t.secondValue&&"number"!=typeof t.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");r[n]={value:t.value,op:t.op,secondValue:t.secondValue};break;case"like":case"notLike":case"iLike":case"notILike":case"regexp":case"iRegexp":r[n]={value:t.value,op:t.op};break;default:throw new Error("keyValue op: ".concat(t.op," is not a valid op code"))}o+="metadata[keyvalues]=".concat(JSON.stringify(r))}))}}}return"".concat(e).concat(t).concat(o)},e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,t){(0,o.validateApiKeys)(e,n);var s="".concat(a.baseUrl,"/data/userPinList"),c=(0,r.default)(s,t);return new Promise((function(t,a){i.default.get(c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve user pin list: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var i=s(t(24)),a=t(25),o=t(26),r=s(t(452));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,t){"use strict";function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e){var n=new Date(Date.parse(e));try{if(n.toISOString()===e)return e;throw new Error("dates must be in valid ISO_8601 format")}catch(e){throw new Error("dates must be in valid ISO_8601 format")}}Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");var t="*",o="*",r="*",s="*",c="*",p="*",u="*",l="*",f=10,d=0,m="";if(n){if(n.hashContains){if("string"!=typeof n.hashContains)throw new Error("hashContains value is not a string");t=n.hashContains}if(n.pinStart&&(o=a(n.pinStart)),n.pinEnd&&(r=a(n.pinEnd)),n.unpinStart&&(s=a(n.unpinStart)),n.unpinEnd&&(c=a(n.unpinEnd)),n.pinSizeMin){if(isNaN(n.pinSizeMin)||n.pinSizeMin<0)throw new Error("Please make sure the pinSizeMin is a valid positive integer");p=n.pinSizeMin}if(n.pinSizeMax){if(isNaN(n.pinSizeMax)||n.pinSizeMax<0)throw new Error("Please make sure the pinSizeMax is a valid positive integer");u=n.pinSizeMax}if(n.pinFilter){if("all"!==n.pinFilter&&"pinned"!==n.pinFilter&&"unpinned"!==n.pinFilter)throw new Error("pinFilter value must be either: all, pinned, or unpinned");l=n.pinFilter}if(n.pageLimit){if(isNaN(n.pageLimit)||n.pageLimit<=0||n.pageLimit>1e3)throw new Error("Please make sure the pageLimit is a valid integer between 1-1000");f=parseInt(n.pageLimit)}if(n.pageOffset){if(isNaN(n.pageOffset)||n.pageOffset<=0)throw new Error("Please make sure the pageOffset is a positive integer");d=parseInt(n.pageOffset)}if(n.metadata){if("object"!==i(n.metadata))throw new Error("metadata value must be an object");if(n.metadata.name&&(m="?metadata[name]=".concat(n.metadata.name)),n.metadata.keyvalues){if("object"!==i(n.metadata.keyvalues))throw new Error("metadata keyvalues must be an object");var v={};Object.entries(n.metadata.keyvalues).forEach((function(e){var t=e[0],a=e[1];if("object"!==i(a))throw new Error("keyValue: ".concat(t," is not an object"));if(!a||!a.value||!a.op)throw new Error("keyValue: ".concat(t," must have both value and op attributes"));if("string"!=typeof a.value&&"boolean"!=typeof a.value&&"number"!=typeof a.value)throw new Error("Metadata keyvalue values must be strings, booleans, or numbers");switch(a.op){case"gt":case"gte":case"lt":case"lte":case"ne":case"eq":v[t]={value:a.value,op:a.op};break;case"between":if(!a.secondValue)throw new Error("Because between op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof a.secondValue&&"boolean"!=typeof a.secondValue&&"number"!=typeof a.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");v[t]={value:a.value,op:a.op,secondValue:a.secondValue};break;case"notBetween":if(!a.secondValue)throw new Error("Because notBetween op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof a.secondValue&&"boolean"!=typeof a.secondValue&&"number"!=typeof a.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");v[t]={value:a.value,op:a.op,secondValue:a.secondValue};break;case"like":case"notLike":case"iLike":case"notILike":case"regexp":case"iRegexp":v[t]={value:a.value,op:a.op};break;default:throw new Error("keyValue op: ".concat(a.op," is not a valid op code"))}m="".concat(m).concat(n.metadata.name?"&":"?","metadata[keyvalues]=").concat(JSON.stringify(v))}))}}}return"".concat(e,"/hashContains/").concat(t,"/pinStart/").concat(o,"/pinEnd/").concat(r,"/unpinStart/").concat(s,"/unpinEnd/").concat(c,"/pinSizeMin/").concat(p,"/pinSizeMax/").concat(u,"/pinFilter/").concat(l,"/pageLimit/").concat(f,"/pageOffset/").concat(d).concat(m)},e.exports=n.default},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){(0,r.validateApiKeys)(e,n);var t="".concat(o.baseUrl,"/data/userPinnedDataTotal");return new Promise((function(i,o){a.default.get(t,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while attempting to retrieve pinned data total: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?o(new Error(e.response.data.error)):o(e)}))}))};var i,a=(i=t(24))&&i.__esModule?i:{default:i},o=t(25),r=t(26);e.exports=n.default}])})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy91dGlsL3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcGZzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInV0aWxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JzNTgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ1cmxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvcHJvdG9jb2xzLXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY2lkcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL3JlYWRkaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVjdXJzaXZlLWZzL2xpYi9ybWRpcnIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL2NwZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtbG9nMXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcIm9zXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXgvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJidWZmZXJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdXRpbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NsYXNzLWlzL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9hc3luYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9hYm9ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy50cmltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgudW11bGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL2FkZEhhc2hUb1BpblF1ZXVlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXMtYnVmZmVyL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvaHR0cC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInR0eVwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiemxpYlwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvZW5jb2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2RlY29kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9sZW5ndGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTE2LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvY29kZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2NvbnZlcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC9saWIvaXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lwLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9pbnQtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy92YXJpbnQtdGFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWNvZGVjL3NyYy9wcmludC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NpZHMvc3JjL2NpZC11dGlsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGktYmFzZTMyL3NyYy9iYXNlMzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21hZm10L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluRmlsZVRvSVBGUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3BhcmFsbGVsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2RlZmVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9wb3B1bGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluRnJvbUZTLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYmFzZS1wYXRoLWNvbnZlcnRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlY3Vyc2l2ZS1mcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSlNPTlRvSVBGUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSGFzaFRvSVBGUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9waW5Kb2JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcmVtb3ZlUGluRnJvbUlQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3Rlc3RBdXRoZW50aWNhdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvcGluTGlzdC9waW5MaXN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS9waW5MaXN0L3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvdXNlclBpbkxpc3QvdXNlclBpbkxpc3QuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3VzZXJQaW5MaXN0L3F1ZXJ5QnVpbGRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvdXNlclBpbm5lZERhdGFUb3RhbC5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwidGhpcyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJnbG9iYWwiLCJjb3JlIiwiaGlkZSIsInJlZGVmaW5lIiwiY3R4IiwiJGV4cG9ydCIsInR5cGUiLCJzb3VyY2UiLCJvd24iLCJvdXQiLCJleHAiLCJJU19GT1JDRUQiLCJGIiwiSVNfR0xPQkFMIiwiRyIsIklTX1NUQVRJQyIsIlMiLCJJU19QUk9UTyIsIlAiLCJJU19CSU5EIiwiQiIsInRhcmdldCIsImV4cFByb3RvIiwidW5kZWZpbmVkIiwiRnVuY3Rpb24iLCJVIiwiVyIsIlIiLCJpc09iamVjdCIsIml0IiwiVHlwZUVycm9yIiwid2luZG93IiwiTWF0aCIsIl9fZyIsImV4ZWMiLCJlIiwic3RvcmUiLCJ1aWQiLCJVU0VfU1lNQk9MIiwidG9JbnRlZ2VyIiwibWluIiwiYSIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsImRQIiwiZiIsIk8iLCJBdHRyaWJ1dGVzIiwiZGVmaW5lZCIsImNyZWF0ZURlc2MiLCJoYXMiLCJTUkMiLCIkdG9TdHJpbmciLCJUUEwiLCJzcGxpdCIsImluc3BlY3RTb3VyY2UiLCJ2YWwiLCJzYWZlIiwiaXNGdW5jdGlvbiIsImpvaW4iLCJTdHJpbmciLCJmYWlscyIsInF1b3QiLCJjcmVhdGVIVE1MIiwic3RyaW5nIiwidGFnIiwiYXR0cmlidXRlIiwicDEiLCJyZXBsYWNlIiwiTkFNRSIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsImxlbmd0aCIsImlzQnVmZmVyIiwidG9TdHJpbmciLCJpc0FycmF5IiwiZm9yRWFjaCIsIm9iaiIsImZuIiwiaXNBcnJheUJ1ZmZlciIsImlzRm9ybURhdGEiLCJGb3JtRGF0YSIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNVbmRlZmluZWQiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc1N0cmVhbSIsInBpcGUiLCJpc1VSTFNlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImlzU3RhbmRhcmRCcm93c2VyRW52IiwibmF2aWdhdG9yIiwicHJvZHVjdCIsImRvY3VtZW50IiwibWVyZ2UiLCJyZXN1bHQiLCJhc3NpZ25WYWx1ZSIsImFyZ3VtZW50cyIsImV4dGVuZCIsImIiLCJ0aGlzQXJnIiwidHJpbSIsInN0ciIsIklPYmplY3QiLCJwSUUiLCJ0b0lPYmplY3QiLCJnT1BEIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidG9PYmplY3QiLCJJRV9QUk9UTyIsIk9iamVjdFByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJjb25zdHJ1Y3RvciIsInZlcnNpb24iLCJfX2UiLCJhRnVuY3Rpb24iLCJ0aGF0IiwiYXBwbHkiLCJzbGljZSIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwibWV0aG9kIiwiYXJnIiwicGluYXRhQXBpS2V5IiwicGluYXRhU2VjcmV0QXBpS2V5IiwiRXJyb3IiLCJob3N0Tm9kZXMiLCJBcnJheSIsIm5vZGUiLCJpc0lQRlMiLCJwZWVyTXVsdGlhZGRyIiwibWV0YWRhdGEiLCJrZXl2YWx1ZXMiLCJlbnRyaWVzIiwia2V5VmFsdWUiLCJvcHRpb25zIiwiY2lkVmVyc2lvbiIsIndyYXBXaXRoRGlyZWN0b3J5IiwidmFsdWVPZiIsIktFWSIsInRvTGVuZ3RoIiwiYXNjIiwiVFlQRSIsIiRjcmVhdGUiLCJJU19NQVAiLCJJU19GSUxURVIiLCJJU19TT01FIiwiSVNfRVZFUlkiLCJJU19GSU5EX0lOREVYIiwiTk9fSE9MRVMiLCIkdGhpcyIsImNhbGxiYWNrZm4iLCJyZXMiLCJpbmRleCIsInB1c2giLCJMSUJSQVJZIiwiJHR5cGVkIiwiJGJ1ZmZlciIsImFuSW5zdGFuY2UiLCJwcm9wZXJ0eURlc2MiLCJyZWRlZmluZUFsbCIsInRvSW5kZXgiLCJ0b0Fic29sdXRlSW5kZXgiLCJjbGFzc29mIiwiaXNBcnJheUl0ZXIiLCJnT1BOIiwiZ2V0SXRlckZuIiwid2tzIiwiY3JlYXRlQXJyYXlNZXRob2QiLCJjcmVhdGVBcnJheUluY2x1ZGVzIiwic3BlY2llc0NvbnN0cnVjdG9yIiwiQXJyYXlJdGVyYXRvcnMiLCJJdGVyYXRvcnMiLCIkaXRlckRldGVjdCIsInNldFNwZWNpZXMiLCJhcnJheUZpbGwiLCJhcnJheUNvcHlXaXRoaW4iLCIkRFAiLCIkR09QRCIsIlJhbmdlRXJyb3IiLCJVaW50OEFycmF5IiwiQXJyYXlQcm90byIsIiRBcnJheUJ1ZmZlciIsIiREYXRhVmlldyIsIkRhdGFWaWV3IiwiYXJyYXlGb3JFYWNoIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVNvbWUiLCJhcnJheUV2ZXJ5IiwiYXJyYXlGaW5kIiwiYXJyYXlGaW5kSW5kZXgiLCJhcnJheUluY2x1ZGVzIiwiYXJyYXlJbmRleE9mIiwiYXJyYXlWYWx1ZXMiLCJ2YWx1ZXMiLCJhcnJheUtleXMiLCJrZXlzIiwiYXJyYXlFbnRyaWVzIiwiYXJyYXlMYXN0SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJhcnJheVJlZHVjZVJpZ2h0IiwicmVkdWNlUmlnaHQiLCJhcnJheUpvaW4iLCJhcnJheVNvcnQiLCJzb3J0IiwiYXJyYXlTbGljZSIsImFycmF5VG9TdHJpbmciLCJhcnJheVRvTG9jYWxlU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJJVEVSQVRPUiIsIlRBRyIsIlRZUEVEX0NPTlNUUlVDVE9SIiwiREVGX0NPTlNUUlVDVE9SIiwiQUxMX0NPTlNUUlVDVE9SUyIsIkNPTlNUUiIsIlRZUEVEX0FSUkFZIiwiVFlQRUQiLCJWSUVXIiwiJG1hcCIsImFsbG9jYXRlIiwiTElUVExFX0VORElBTiIsIlVpbnQxNkFycmF5IiwiRk9SQ0VEX1NFVCIsInNldCIsInRvT2Zmc2V0IiwiQllURVMiLCJvZmZzZXQiLCJ2YWxpZGF0ZSIsIkMiLCJzcGVjaWVzRnJvbUxpc3QiLCJsaXN0IiwiZnJvbUxpc3QiLCJhZGRHZXR0ZXIiLCJpbnRlcm5hbCIsIl9kIiwiJGZyb20iLCJzdGVwIiwiaXRlcmF0b3IiLCJhTGVuIiwibWFwZm4iLCJtYXBwaW5nIiwiaXRlckZuIiwibmV4dCIsImRvbmUiLCIkb2YiLCJUT19MT0NBTEVfQlVHIiwiJHRvTG9jYWxlU3RyaW5nIiwicHJvdG8iLCJjb3B5V2l0aGluIiwic3RhcnQiLCJldmVyeSIsImZpbGwiLCJmaWx0ZXIiLCJmaW5kIiwicHJlZGljYXRlIiwiZmluZEluZGV4IiwiaW5kZXhPZiIsInNlYXJjaEVsZW1lbnQiLCJpbmNsdWRlcyIsInNlcGFyYXRvciIsIm1hcCIsInJldmVyc2UiLCJtaWRkbGUiLCJzb21lIiwiY29tcGFyZWZuIiwic3ViYXJyYXkiLCJiZWdpbiIsImVuZCIsIiRiZWdpbiIsImJ5dGVPZmZzZXQiLCJCWVRFU19QRVJfRUxFTUVOVCIsIiRzbGljZSIsIiRzZXQiLCJhcnJheUxpa2UiLCJzcmMiLCJsZW4iLCIkaXRlcmF0b3JzIiwiaXNUQUluZGV4IiwiJGdldERlc2MiLCIkc2V0RGVzYyIsImRlc2MiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIiRUeXBlZEFycmF5UHJvdG90eXBlJCIsIndyYXBwZXIiLCJDTEFNUEVEIiwiR0VUVEVSIiwiU0VUVEVSIiwiVHlwZWRBcnJheSIsIkJhc2UiLCJUQUMiLCJGT1JDRUQiLCJBQlYiLCJUeXBlZEFycmF5UHJvdG90eXBlIiwiYWRkRWxlbWVudCIsImRhdGEiLCJ2Iiwicm91bmQiLCJzZXR0ZXIiLCIkb2Zmc2V0IiwiJGxlbmd0aCIsImJ5dGVMZW5ndGgiLCJrbGFzcyIsIiRsZW4iLCJpdGVyIiwiY29uY2F0IiwiJG5hdGl2ZUl0ZXJhdG9yIiwiQ09SUkVDVF9JVEVSX05BTUUiLCIkaXRlcmF0b3IiLCJvZiIsImZyb20iLCJNYXAiLCJzaGFyZWQiLCJnZXRPckNyZWF0ZU1ldGFkYXRhTWFwIiwidGFyZ2V0S2V5IiwidGFyZ2V0TWV0YWRhdGEiLCJrZXlNZXRhZGF0YSIsIk1ldGFkYXRhS2V5IiwibWV0YWRhdGFNYXAiLCJNZXRhZGF0YVZhbHVlIiwiXyIsIk1FVEEiLCJzZXREZXNjIiwiaWQiLCJpc0V4dGVuc2libGUiLCJGUkVFWkUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsInNldE1ldGEiLCJ3IiwibWV0YSIsIk5FRUQiLCJmYXN0S2V5IiwiZ2V0V2VhayIsIm9uRnJlZXplIiwiVU5TQ09QQUJMRVMiLCJiaXRtYXAiLCJweCIsInJhbmRvbSIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJtYXgiLCJkUHMiLCJFbXB0eSIsImNyZWF0ZURpY3QiLCJpZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsInN0eWxlIiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJ3cml0ZSIsImx0IiwiY2xvc2UiLCJQcm9wZXJ0aWVzIiwiaGlkZGVuS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJERVNDUklQVE9SUyIsIlNQRUNJRVMiLCJDb25zdHJ1Y3RvciIsImZvcmJpZGRlbkZpZWxkIiwiQlJFQUsiLCJSRVRVUk4iLCJpdGVyYWJsZSIsIl90IiwiZGVmIiwic3RhdCIsImNvZiIsIkFSRyIsIlQiLCJ0cnlHZXQiLCJjYWxsZWUiLCJzcGFjZXMiLCJzcGFjZSIsImx0cmltIiwiUmVnRXhwIiwicnRyaW0iLCJleHBvcnRlciIsIkFMSUFTIiwiRk9SQ0UiLCJlbmNvZGUiLCJkZWNvZGUiLCJlbmNvZGluZ0xlbmd0aCIsImNvcHlyaWdodCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsInVuaWNvZGUiLCJzdGlja3kiLCJEIiwiYmFzZTU4IiwibXVsdGloYXNoIiwibXVsdGliYXNlIiwiTXVsdGlhZGRyIiwibWFmbXQiLCJDSUQiLCJ1cmxQYXR0ZXJuIiwicGF0aFBhdHRlcm4iLCJmcWRuUGF0dGVybiIsImlzQ0lEIiwiaGFzaCIsImlzTXVsdGlhZGRyIiwiaW5wdXQiLCJpc0lwZnMiLCJwYXR0ZXJuIiwicHJvdG9jb2xNYXRjaCIsImhhc2hNYXRjaCIsImZvcm1hdHRlZCIsImNvbnZlcnRUb1N0cmluZyIsIm1hdGNoIiwiaXNJcG5zIiwiQnVmZmVyIiwiaXBmc1N1YmRvbWFpbiIsInVybCIsImlwbnNTdWJkb21haW4iLCJtdWx0aWFkZHIiLCJJUEZTIiwibWF0Y2hlcyIsImNpZCIsImJhc2UzMmNpZCIsImlzRW5jb2RlZCIsImlzTXVsdGliYXNlIiwic3ViZG9tYWluIiwic3ViZG9tYWluUGF0dGVybiIsImlwZnNVcmwiLCJpcG5zVXJsIiwiaXBmc1BhdGgiLCJwYXRoIiwiaXBuc1BhdGgiLCJ1cmxPclBhdGgiLCJ4IiwiY2lkUGF0aCIsInJlcXVpcmUiLCJJU19JTkNMVURFUyIsImVsIiwiZnJvbUluZGV4IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiVE9fU1RSSU5HIiwicG9zIiwiY2hhckNvZGVBdCIsImNoYXJBdCIsIk1BVENIIiwiaXNSZWdFeHAiLCJTQUZFX0NMT1NJTkciLCJyaXRlciIsInNraXBDbG9zaW5nIiwiYXJyIiwiYnVpbHRpbkV4ZWMiLCJyZWdleHBFeGVjIiwiUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMiLCJyZSIsImdyb3VwcyIsIlNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyIsIm9yaWdpbmFsRXhlYyIsIlNZTUJPTCIsIkRFTEVHQVRFU19UT19TWU1CT0wiLCJERUxFR0FURVNfVE9fRVhFQyIsImV4ZWNDYWxsZWQiLCJuYXRpdmVSZWdFeHBNZXRob2QiLCJmbnMiLCJuYXRpdmVNZXRob2QiLCJyZWdleHAiLCJhcmcyIiwiZm9yY2VTdHJpbmdNZXRob2QiLCJzdHJmbiIsInJ4Zm4iLCJ1c2VyQWdlbnQiLCJmb3JPZiIsInNldFRvU3RyaW5nVGFnIiwiaW5oZXJpdElmUmVxdWlyZWQiLCJtZXRob2RzIiwiY29tbW9uIiwiSVNfV0VBSyIsIkFEREVSIiwiZml4TWV0aG9kIiwiaW5zdGFuY2UiLCJIQVNOVF9DSEFJTklORyIsIlRIUk9XU19PTl9QUklNSVRJVkVTIiwiQUNDRVBUX0lURVJBQkxFUyIsIkJVR0dZX1pFUk8iLCIkaW5zdGFuY2UiLCJjbGVhciIsImdldENvbnN0cnVjdG9yIiwic2V0U3Ryb25nIiwiVHlwZWQiLCJUeXBlZEFycmF5Q29uc3RydWN0b3JzIiwiSyIsIl9fZGVmaW5lU2V0dGVyX18iLCJDT0xMRUNUSU9OIiwiQSIsImNiIiwibWFwRm4iLCJuZXh0SXRlbSIsImJhc2V4IiwiaXMiLCJjcmVhdGVFbGVtZW50Iiwid2tzRXh0IiwiJFN5bWJvbCIsImRvY3VtZW50RWxlbWVudCIsImNoZWNrIiwic2V0UHJvdG90eXBlT2YiLCJidWdneSIsIl9fcHJvdG9fXyIsImNvdW50IiwiSW5maW5pdHkiLCJzaWduIiwiJGV4cG0xIiwiZXhwbTEiLCIkaXRlckNyZWF0ZSIsIkJVR0dZIiwicmV0dXJuVGhpcyIsIkRFRkFVTFQiLCJJU19TRVQiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldE1ldGhvZCIsImtpbmQiLCJERUZfVkFMVUVTIiwiVkFMVUVTX0JVRyIsIiRuYXRpdmUiLCIkZGVmYXVsdCIsIiRlbnRyaWVzIiwiJGFueU5hdGl2ZSIsImRlc2NyaXB0b3IiLCJzZWFyY2hTdHJpbmciLCIkZGVmaW5lUHJvcGVydHkiLCJnZXRJdGVyYXRvck1ldGhvZCIsIm9yaWdpbmFsIiwiZW5kUG9zIiwiYWRkVG9VbnNjb3BhYmxlcyIsIml0ZXJhdGVkIiwiX2kiLCJfayIsIkFyZ3VtZW50cyIsInJlMSIsInJlMiIsInJlZ2V4cEZsYWdzIiwibmF0aXZlRXhlYyIsIm5hdGl2ZVJlcGxhY2UiLCJwYXRjaGVkRXhlYyIsIlVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyIsIk5QQ0dfSU5DTFVERUQiLCJsYXN0SW5kZXgiLCJyZUNvcHkiLCJhdCIsImRlZmVyIiwiY2hhbm5lbCIsInBvcnQiLCJpbnZva2UiLCJodG1sIiwiY2VsIiwicHJvY2VzcyIsInNldFRhc2siLCJzZXRJbW1lZGlhdGUiLCJjbGVhclRhc2siLCJjbGVhckltbWVkaWF0ZSIsIk1lc3NhZ2VDaGFubmVsIiwiRGlzcGF0Y2giLCJjb3VudGVyIiwicXVldWUiLCJydW4iLCJsaXN0ZW5lciIsImV2ZW50IiwiYXJncyIsIm5leHRUaWNrIiwibm93IiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImltcG9ydFNjcmlwdHMiLCJyZW1vdmVDaGlsZCIsInNldFRpbWVvdXQiLCJtYWNyb3Rhc2siLCJPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwiUHJvbWlzZSIsImlzTm9kZSIsImhlYWQiLCJsYXN0Iiwibm90aWZ5IiwiZmx1c2giLCJwYXJlbnQiLCJkb21haW4iLCJleGl0IiwiZW50ZXIiLCJzdGFuZGFsb25lIiwicmVzb2x2ZSIsInByb21pc2UiLCJ0aGVuIiwidG9nZ2xlIiwiY3JlYXRlVGV4dE5vZGUiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInRhc2siLCJQcm9taXNlQ2FwYWJpbGl0eSIsInJlamVjdCIsIiQkcmVzb2x2ZSIsIiQkcmVqZWN0IiwiQmFzZUJ1ZmZlciIsImFicyIsInBvdyIsImxvZyIsIkxOMiIsIiRCVUZGRVIiLCIkTEVOR1RIIiwiJE9GRlNFVCIsInBhY2tJRUVFNzU0IiwibUxlbiIsIm5CeXRlcyIsImVMZW4iLCJlTWF4IiwiZUJpYXMiLCJydCIsInVucGFja0lFRUU3NTQiLCJuQml0cyIsIk5hTiIsInVucGFja0kzMiIsImJ5dGVzIiwicGFja0k4IiwicGFja0kxNiIsInBhY2tJMzIiLCJwYWNrRjY0IiwicGFja0YzMiIsInZpZXciLCJpc0xpdHRsZUVuZGlhbiIsImludEluZGV4IiwiX2IiLCJwYWNrIiwiY29udmVyc2lvbiIsIkFycmF5QnVmZmVyUHJvdG8iLCJqIiwiJHNldEludDgiLCJzZXRJbnQ4IiwiZ2V0SW50OCIsInNldFVpbnQ4IiwiYnVmZmVyTGVuZ3RoIiwiZ2V0VWludDgiLCJnZXRJbnQxNiIsImdldFVpbnQxNiIsImdldEludDMyIiwiZ2V0VWludDMyIiwiZ2V0RmxvYXQzMiIsImdldEZsb2F0NjQiLCJzZXRJbnQxNiIsInNldFVpbnQxNiIsInNldEludDMyIiwic2V0VWludDMyIiwic2V0RmxvYXQzMiIsInNldEZsb2F0NjQiLCJ1dGlscyIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJERUZBVUxUX0NPTlRFTlRfVFlQRSIsInNldENvbnRlbnRUeXBlSWZVbnNldCIsImhlYWRlcnMiLCJhZGFwdGVyIiwiZGVmYXVsdHMiLCJYTUxIdHRwUmVxdWVzdCIsInRyYW5zZm9ybVJlcXVlc3QiLCJKU09OIiwic3RyaW5naWZ5IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJwYXJzZSIsInRpbWVvdXQiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwic3RhdHVzIiwiZW5oYW5jZUVycm9yIiwibWVzc2FnZSIsImNvbmZpZyIsImNvZGUiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJlcnJvciIsImJzNTgiLCJjcyIsIm5hbWVzIiwiY29kZXMiLCJkZWZhdWx0TGVuZ3RocyIsInZhcmludCIsInRvSGV4U3RyaW5nIiwiZnJvbUhleFN0cmluZyIsInRvQjU4U3RyaW5nIiwiZnJvbUI1OFN0cmluZyIsImVuY29kZWQiLCJidWYiLCJpc1ZhbGlkQ29kZSIsImRpZ2VzdCIsImhhc2hmbiIsImNvZXJjZUNvZGUiLCJpc0FwcENvZGUiLCJwcmVmaXgiLCJQcm90b2NvbHMiLCJWIiwic2l6ZSIsInJlc29sdmFibGUiLCJCb29sZWFuIiwibGVuZ3RoUHJlZml4ZWRWYXJTaXplIiwidGFibGUiLCJyb3ciLCJtaCIsIm11bHRpY29kZWMiLCJjb2RlY3MiLCJDSURVdGlsIiwiY29kZWMiLCJtdWx0aWJhc2VOYW1lIiwiX0NJRCIsImJhc2VOYW1lIiwicGFyc2VJbnQiLCJnZXRDb2RlYyIsInJtUHJlZml4IiwidmFsaWRhdGVDSUQiLCJmaXJzdEJ5dGUiLCJfYnVmZmVyIiwiZ2V0Q29kZVZhcmludCIsImJhc2UiLCJ0b0Jhc2VFbmNvZGVkU3RyaW5nIiwib3RoZXIiLCJlcXVhbHMiLCJlcnJvck1zZyIsImNoZWNrQ0lEQ29tcG9uZW50cyIsIndpdGhJcyIsImNsYXNzTmFtZSIsInN5bWJvbE5hbWUiLCJmcyIsInJlYWRkaXJyIiwiZHBhdGgiLCJkaXJzIiwiZmlsZXMiLCJsb29wIiwicmVhZGRpciIsImVyciIsIl9maWxlcyIsImZwYXRoIiwic3RhdHMiLCJpc0RpcmVjdG9yeSIsImdldHN0YXQiLCJybWRpcnIiLCJybWZpbGVzIiwicm1kaXJzIiwidW5saW5rIiwicm1kaXIiLCJjcGRpcnIiLCJzcGF0aCIsInRwYXRoIiwiY3BkaXJzIiwiY3BmaWxlcyIsInJwYXRoIiwicmVsYXRpdmUiLCJleGlzdHMiLCJta2RpciIsInJlYWRGaWxlIiwid3JpdGVGaWxlIiwiZ2V0S2V5cyIsImRlZmluZVByb3BlcnRpZXMiLCJ3aW5kb3dOYW1lcyIsImdldFdpbmRvd05hbWVzIiwiZ09QUyIsIiRhc3NpZ24iLCJhc3NpZ24iLCJrIiwiZ2V0U3ltYm9scyIsImlzRW51bSIsInkiLCJmYWN0b3JpZXMiLCJjb25zdHJ1Y3QiLCJwYXJ0QXJncyIsImJvdW5kIiwidW4iLCIkcGFyc2VJbnQiLCIkdHJpbSIsIndzIiwiaGV4IiwicmFkaXgiLCIkcGFyc2VGbG9hdCIsInBhcnNlRmxvYXQiLCJtc2ciLCJpc0Zpbml0ZSIsImxvZzFwIiwiRVBTSUxPTiIsIkVQU0lMT04zMiIsIk1BWDMyIiwiTUlOMzIiLCJmcm91bmQiLCIkYWJzIiwiJHNpZ24iLCJyZXQiLCJtZW1vIiwiaXNSaWdodCIsInRvIiwiaW5jIiwiZm9yY2VkIiwiZmxhZ3MiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsInByb21pc2VDYXBhYmlsaXR5Iiwic3Ryb25nIiwiZW50cnkiLCJnZXRFbnRyeSIsIiRpdGVyRGVmaW5lIiwiU0laRSIsIl9mIiwiX2wiLCJwcmV2IiwiYWRkIiwiSW50ZXJuYWxNYXAiLCJlYWNoIiwid2VhayIsIk5BVElWRV9XRUFLX01BUCIsIklTX0lFMTEiLCJBY3RpdmVYT2JqZWN0IiwidW5jYXVnaHRGcm96ZW5TdG9yZSIsInVmc3RvcmUiLCIkV2Vha01hcCIsIiRoYXMiLCJVbmNhdWdodEZyb3plblN0b3JlIiwiZmluZFVuY2F1Z2h0RnJvemVuIiwic3BsaWNlIiwibnVtYmVyIiwiUmVmbGVjdCIsIm93bktleXMiLCJJU19DT05DQVRfU1BSRUFEQUJMRSIsImZsYXR0ZW5JbnRvQXJyYXkiLCJzb3VyY2VMZW4iLCJkZXB0aCIsIm1hcHBlciIsImVsZW1lbnQiLCJzcHJlYWRhYmxlIiwidGFyZ2V0SW5kZXgiLCJzb3VyY2VJbmRleCIsInJlcGVhdCIsIm1heExlbmd0aCIsImZpbGxTdHJpbmciLCJsZWZ0Iiwic3RyaW5nTGVuZ3RoIiwiZmlsbFN0ciIsImludE1heExlbmd0aCIsImZpbGxMZW4iLCJzdHJpbmdGaWxsZXIiLCJpc0VudHJpZXMiLCJzY2FsZSIsImluTG93IiwiaW5IaWdoIiwib3V0TG93Iiwib3V0SGlnaCIsImNyZWF0ZUVycm9yIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInRvSVNPU3RyaW5nIiwiaHR0cCIsImh0dHBzIiwiYXNzZXJ0IiwiV3JpdGFibGUiLCJkZWJ1ZyIsIlNBRkVfTUVUSE9EUyIsIkdFVCIsIkhFQUQiLCJPUFRJT05TIiwiVFJBQ0UiLCJldmVudEhhbmRsZXJzIiwiUmVkaXJlY3RhYmxlUmVxdWVzdCIsInJlc3BvbnNlQ2FsbGJhY2siLCJfb3B0aW9ucyIsIl9yZWRpcmVjdENvdW50IiwiX3JlZGlyZWN0cyIsIl9yZXF1ZXN0Qm9keUxlbmd0aCIsIl9yZXF1ZXN0Qm9keUJ1ZmZlcnMiLCJob3N0IiwiaG9zdG5hbWUiLCJvbiIsIl9vbk5hdGl2ZVJlc3BvbnNlIiwiX3Byb2Nlc3NSZXNwb25zZSIsInBhdGhuYW1lIiwic2VhcmNoUG9zIiwic3Vic3RyaW5nIiwic2VhcmNoIiwiX3BlcmZvcm1SZXF1ZXN0Iiwid3JhcCIsInByb3RvY29scyIsIm1heFJlZGlyZWN0cyIsIm1heEJvZHlMZW5ndGgiLCJuYXRpdmVQcm90b2NvbHMiLCJzY2hlbWUiLCJwcm90b2NvbCIsIm5hdGl2ZVByb3RvY29sIiwid3JhcHBlZFByb3RvY29sIiwiY2FsbGJhY2siLCJlcXVhbCIsIl9yZWRpcmVjdGFibGUiLCJlbWl0IiwiZW5jb2RpbmciLCJfY3VycmVudFJlcXVlc3QiLCJhYm9ydCIsImN1cnJlbnRSZXF1ZXN0Iiwic2V0SGVhZGVyIiwicmVtb3ZlSGVhZGVyIiwiYWdlbnRzIiwic3Vic3RyIiwiYWdlbnQiLCJfY3VycmVudFVybCIsImZvcm1hdCIsIl9pc1JlZGlyZWN0IiwiYnVmZmVycyIsIndyaXRlTmV4dCIsInRyYWNrUmVkaXJlY3RzIiwic3RhdHVzQ29kZSIsImxvY2F0aW9uIiwiZm9sbG93UmVkaXJlY3RzIiwiaGVhZGVyIiwicmVkaXJlY3RVcmwiLCJkZXN0cm95IiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdHMiLCJjcmVhdGVEZWJ1ZyIsIm5hbWVzcGFjZSIsInByZXZUaW1lIiwiZW5hYmxlZCIsImN1cnIiLCJEYXRlIiwibXMiLCJkaWZmIiwiY29lcmNlIiwidW5zaGlmdCIsImZvcm1hdHRlciIsImZvcm1hdHRlcnMiLCJmb3JtYXRBcmdzIiwibG9nRm4iLCJjb25zb2xlIiwidXNlQ29sb3JzIiwiY29sb3IiLCJjb2xvcnMiLCJzZWxlY3RDb2xvciIsImluaXQiLCJpbnN0YW5jZXMiLCJzdGFjayIsImRpc2FibGUiLCJlbmFibGUiLCJuYW1lc3BhY2VzIiwic2F2ZSIsInNraXBzIiwiaHVtYW5pemUiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsIiwiX0J1ZmZlciIsIkFMUEhBQkVUIiwiQkFTRV9NQVAiLCJ4YyIsIkJBU0UiLCJMRUFERVIiLCJGQUNUT1IiLCJpRkFDVE9SIiwiZGVjb2RlVW5zYWZlIiwiYWxsb2MiLCJwc3oiLCJ6ZXJvZXMiLCJiMjU2IiwiY2FycnkiLCJpdDMiLCJpdDQiLCJ2Y2giLCJhbGxvY1Vuc2FmZSIsInBiZWdpbiIsInBlbmQiLCJiNTgiLCJpdDEiLCJpdDIiLCJjb25zdGFudHMiLCJuYW1lT3JDb2RlIiwiZ2V0QmFzZSIsImJ1Zk9yU3RyaW5nIiwiZnJlZXplIiwiZXJyTm90U3VwcG9ydGVkIiwiY29kZUJ1ZiIsInZhbGlkRW5jb2RlIiwiaXNJbXBsZW1lbnRlZCIsImluc3BlY3QiLCJmb3IiLCJhZGRyIiwiZnJvbUJ1ZmZlciIsImZyb21TdHJpbmciLCJwcm90b3MiLCJwcm90b0NvZGVzIiwiYnVmZmVyVG9TdHJpbmciLCJ0b0pTT04iLCJ0b09wdGlvbnMiLCJvcHRzIiwicGFyc2VkIiwiZmFtaWx5IiwidHJhbnNwb3J0Iiwic2l6ZUZvckFkZHIiLCJwcm90b05hbWVzIiwidHVwbGVzIiwiYnVmZmVyVG9UdXBsZXMiLCJzdHJpbmdUdXBsZXMiLCJ0dXBsZXNUb1N0cmluZ1R1cGxlcyIsImVuY2Fwc3VsYXRlIiwiZGVjYXBzdWxhdGUiLCJkZWNhcHN1bGF0ZUNvZGUiLCJ0dXBsZXNUb0J1ZmZlciIsImdldFBlZXJJZCIsImI1OHN0ciIsInR1cGxlIiwiaXBmcyIsInBvcCIsImdldFBhdGgiLCJub2RlQWRkcmVzcyIsImFkZHJlc3MiLCJmcm9tTm9kZUFkZHJlc3MiLCJpcCIsImlzVGhpbldhaXN0QWRkcmVzcyIsImlzTmFtZSIsImJ1ZmZlclRvTnVtYmVyIiwibnVtYmVyVG9CdWZmZXIiLCJudW0iLCJoZXhTdHJpbmciLCJ2YXJpbnRCdWZmZXJFbmNvZGUiLCJ2YXJpbnRCdWZmZXJEZWNvZGUiLCJ2YXJpbnRFbmNvZGUiLCJDbGFzcyIsInN5bWJvbCIsIkNsYXNzSXNXcmFwcGVyIiwic3VwZXIiLCJ3aXRob3V0TmV3IiwiX3RoaXMiLCJDb21iaW5lZFN0cmVhbSIsInV0aWwiLCJwYXJzZVVybCIsIm1pbWUiLCJhc3luY2tpdCIsInBvcHVsYXRlIiwib3B0aW9uIiwiX292ZXJoZWFkTGVuZ3RoIiwiX3ZhbHVlTGVuZ3RoIiwiX3ZhbHVlc1RvTWVhc3VyZSIsImluaGVyaXRzIiwiTElORV9CUkVBSyIsImFwcGVuZCIsImZpZWxkIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJfbXVsdGlQYXJ0SGVhZGVyIiwiZm9vdGVyIiwiX211bHRpUGFydEZvb3RlciIsIl90cmFja0xlbmd0aCIsInZhbHVlTGVuZ3RoIiwia25vd25MZW5ndGgiLCJyZWFkYWJsZSIsIl9sZW5ndGhSZXRyaWV2ZXIiLCJmaWxlU2l6ZSIsInBhdXNlIiwicmVzdW1lIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsImNvbnRlbnRUeXBlIiwiX2dldENvbnRlbnRUeXBlIiwiY29udGVudHMiLCJwcm9wIiwiZ2V0Qm91bmRhcnkiLCJmaWxlcGF0aCIsIm5vcm1hbGl6ZSIsImJhc2VuYW1lIiwiY2xpZW50IiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwiX3N0cmVhbXMiLCJfbGFzdEJvdW5kYXJ5IiwiZ2V0SGVhZGVycyIsInVzZXJIZWFkZXJzIiwiZm9ybUhlYWRlcnMiLCJfYm91bmRhcnkiLCJfZ2VuZXJhdGVCb3VuZGFyeSIsImdldEJ1ZmZlciIsImRhdGFCdWZmZXIiLCJib3VuZGFyeSIsImdldExlbmd0aFN5bmMiLCJoYXNLbm93bkxlbmd0aCIsImdldExlbmd0aCIsInBhcmFsbGVsIiwic3VibWl0IiwiYXN5bmMiLCJzdGF0ZSIsImpvYnMiLCJpdGVtIiwiYWJvcnRlciIsInJ1bkpvYiIsIm91dHB1dCIsInJlc3VsdHMiLCJpc0FzeW5jIiwiY2xlYW4iLCJzb3J0TWV0aG9kIiwiaXNOYW1lZExpc3QiLCJpbml0U3RhdGUiLCJrZXllZExpc3QiLCJpdGVyYXRlIiwidGVybWluYXRvciIsImFzY2VuZGluZyIsIml0ZXJhdG9ySGFuZGxlciIsImRlc2NlbmRpbmciLCJfYmFiZWxQb2x5ZmlsbCIsInBhZFN0YXJ0IiwicGFkRW5kIiwiJGZhaWxzIiwid2tzRGVmaW5lIiwiZW51bUtleXMiLCJfY3JlYXRlIiwiZ09QTkV4dCIsIiRHT1BTIiwiJEpTT04iLCJfc3RyaW5naWZ5IiwiSElEREVOIiwiVE9fUFJJTUlUSVZFIiwiU3ltYm9sUmVnaXN0cnkiLCJBbGxTeW1ib2xzIiwiT1BTeW1ib2xzIiwiVVNFX05BVElWRSIsIlFPYmplY3QiLCJmaW5kQ2hpbGQiLCJzZXRTeW1ib2xEZXNjIiwicHJvdG9EZXNjIiwic3ltIiwiaXNTeW1ib2wiLCIkZGVmaW5lUHJvcGVydGllcyIsIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiJGdldE93blByb3BlcnR5TmFtZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiSVNfT1AiLCJlczZTeW1ib2xzIiwid2VsbEtub3duU3ltYm9scyIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCJyZXBsYWNlciIsIiRyZXBsYWNlciIsInN5bWJvbHMiLCIkZ2V0UHJvdG90eXBlT2YiLCIkZnJlZXplIiwiJHNlYWwiLCIkcHJldmVudEV4dGVuc2lvbnMiLCIkaXNGcm96ZW4iLCIkaXNTZWFsZWQiLCIkaXNFeHRlbnNpYmxlIiwiRlByb3RvIiwibmFtZVJFIiwiSEFTX0lOU1RBTkNFIiwiRnVuY3Rpb25Qcm90byIsIiROdW1iZXIiLCJCUk9LRU5fQ09GIiwiVFJJTSIsInRvTnVtYmVyIiwiYXJndW1lbnQiLCJ0aGlyZCIsIm1heENvZGUiLCJmaXJzdCIsImRpZ2l0cyIsImFOdW1iZXJWYWx1ZSIsIiR0b0ZpeGVkIiwidG9GaXhlZCIsIkVSUk9SIiwibXVsdGlwbHkiLCJjMiIsImRpdmlkZSIsIm51bVRvU3RyaW5nIiwiYWNjIiwiZnJhY3Rpb25EaWdpdHMiLCJ6IiwieDIiLCIkdG9QcmVjaXNpb24iLCJ0b1ByZWNpc2lvbiIsInByZWNpc2lvbiIsIl9pc0Zpbml0ZSIsImlzSW50ZWdlciIsImlzU2FmZUludGVnZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUlOX1NBRkVfSU5URUdFUiIsIk51bWJlciIsInNxcnQiLCIkYWNvc2giLCJhY29zaCIsIk1BWF9WQUxVRSIsIiRhc2luaCIsImFzaW5oIiwiJGF0YW5oIiwiYXRhbmgiLCJjYnJ0IiwiY2x6MzIiLCJMT0cyRSIsImNvc2giLCJoeXBvdCIsInZhbHVlMSIsInZhbHVlMiIsImRpdiIsInN1bSIsImxhcmciLCIkaW11bCIsImltdWwiLCJ4biIsInluIiwieGwiLCJ5bCIsImxvZzEwIiwiTE9HMTBFIiwibG9nMiIsInNpbmgiLCJ0YW5oIiwidHJ1bmMiLCJmcm9tQ2hhckNvZGUiLCIkZnJvbUNvZGVQb2ludCIsImZyb21Db2RlUG9pbnQiLCJyYXciLCJjYWxsU2l0ZSIsInRwbCIsIiRhdCIsInBvaW50IiwiY29kZVBvaW50QXQiLCJjb250ZXh0IiwiJGVuZHNXaXRoIiwiZW5kc1dpdGgiLCJlbmRQb3NpdGlvbiIsIiRzdGFydHNXaXRoIiwic3RhcnRzV2l0aCIsImdldFRpbWUiLCJwdiIsIiR0b0lTT1N0cmluZyIsImx6IiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRVVENIb3VycyIsImdldFVUQ01pbnV0ZXMiLCJnZXRVVENTZWNvbmRzIiwiRGF0ZVByb3RvIiwiaGludCIsImNyZWF0ZVByb3BlcnR5IiwidXBUbyIsImNsb25lZCIsIiRzb3J0IiwiJGZvckVhY2giLCJTVFJJQ1QiLCIkZmlsdGVyIiwiJHNvbWUiLCIkZXZlcnkiLCIkcmVkdWNlIiwiJGluZGV4T2YiLCJORUdBVElWRV9aRVJPIiwiJGZpbmQiLCIkZmxhZ3MiLCIkUmVnRXhwIiwiQ09SUkVDVF9ORVciLCJ0aVJFIiwicGlSRSIsImZpVSIsInByb3h5IiwiYWR2YW5jZVN0cmluZ0luZGV4IiwicmVnRXhwRXhlYyIsIiRtYXRjaCIsIm1heWJlQ2FsbE5hdGl2ZSIsInJ4IiwiZnVsbFVuaWNvZGUiLCJtYXRjaFN0ciIsIlNVQlNUSVRVVElPTl9TWU1CT0xTIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQiLCJSRVBMQUNFIiwiJHJlcGxhY2UiLCJzZWFyY2hWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsImZ1bmN0aW9uYWxSZXBsYWNlIiwiYWNjdW11bGF0ZWRSZXN1bHQiLCJuZXh0U291cmNlUG9zaXRpb24iLCJtYXRjaGVkIiwicG9zaXRpb24iLCJjYXB0dXJlcyIsIm5hbWVkQ2FwdHVyZXMiLCJyZXBsYWNlckFyZ3MiLCJyZXBsYWNlbWVudCIsImdldFN1YnN0aXR1dGlvbiIsInRhaWxQb3MiLCJjaCIsImNhcHR1cmUiLCJzYW1lVmFsdWUiLCJTRUFSQ0giLCIkc2VhcmNoIiwicHJldmlvdXNMYXN0SW5kZXgiLCJjYWxsUmVnRXhwRXhlYyIsIiRtaW4iLCIkcHVzaCIsIlNVUFBPUlRTX1kiLCJTUExJVCIsIiRzcGxpdCIsImludGVybmFsU3BsaXQiLCJsaW1pdCIsImxhc3RMZW5ndGgiLCJsYXN0TGFzdEluZGV4Iiwic3BsaXRMaW1pdCIsInNlcGFyYXRvckNvcHkiLCJzcGxpdHRlciIsInVuaWNvZGVNYXRjaGluZyIsImxpbSIsInEiLCJJbnRlcm5hbCIsIm5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSIsIk93blByb21pc2VDYXBhYmlsaXR5IiwiV3JhcHBlciIsIm1pY3JvdGFzayIsIm5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlIiwicGVyZm9ybSIsInByb21pc2VSZXNvbHZlIiwidmVyc2lvbnMiLCJ2OCIsIiRQcm9taXNlIiwiZW1wdHkiLCJGYWtlUHJvbWlzZSIsIlByb21pc2VSZWplY3Rpb25FdmVudCIsImlzVGhlbmFibGUiLCJpc1JlamVjdCIsIl9uIiwiY2hhaW4iLCJfYyIsIl92Iiwib2siLCJfcyIsInJlYWN0aW9uIiwiZXhpdGVkIiwiaGFuZGxlciIsImZhaWwiLCJfaCIsIm9uSGFuZGxlVW5oYW5kbGVkIiwib25VbmhhbmRsZWQiLCJ1bmhhbmRsZWQiLCJpc1VuaGFuZGxlZCIsIm9udW5oYW5kbGVkcmVqZWN0aW9uIiwicmVhc29uIiwiX2EiLCJvbnJlamVjdGlvbmhhbmRsZWQiLCIkcmVqZWN0IiwiX3ciLCIkcmVzb2x2ZSIsImV4ZWN1dG9yIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiY2FwYWJpbGl0eSIsImFsbCIsInJlbWFpbmluZyIsIiRpbmRleCIsImFscmVhZHlDYWxsZWQiLCJyYWNlIiwiJGlzVmlldyIsImZpbiIsInZpZXdTIiwidmlld1QiLCJyQXBwbHkiLCJmQXBwbHkiLCJ0aGlzQXJndW1lbnQiLCJhcmd1bWVudHNMaXN0IiwiTCIsInJDb25zdHJ1Y3QiLCJORVdfVEFSR0VUX0JVRyIsIkFSR1NfQlVHIiwiVGFyZ2V0IiwibmV3VGFyZ2V0IiwiJGFyZ3MiLCJwcm9wZXJ0eUtleSIsImF0dHJpYnV0ZXMiLCJkZWxldGVQcm9wZXJ0eSIsIkVudW1lcmF0ZSIsImVudW1lcmF0ZSIsInJlY2VpdmVyIiwiZ2V0UHJvdG8iLCJleGlzdGluZ0Rlc2NyaXB0b3IiLCJvd25EZXNjIiwic2V0UHJvdG8iLCIkaW5jbHVkZXMiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJmbGF0TWFwIiwiZmxhdHRlbiIsImRlcHRoQXJnIiwiJHBhZCIsIldFQktJVF9CVUciLCJnZXRGbGFncyIsIlJlZ0V4cFByb3RvIiwiJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yIiwiX3IiLCJtYXRjaEFsbCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJnZXREZXNjIiwiJHZhbHVlcyIsIl9fZGVmaW5lR2V0dGVyX18iLCJfX2xvb2t1cEdldHRlcl9fIiwiX19sb29rdXBTZXR0ZXJfXyIsImlzRXJyb3IiLCJjbGFtcCIsImxvd2VyIiwidXBwZXIiLCJERUdfUEVSX1JBRCIsIlBJIiwiUkFEX1BFUl9ERUciLCJkZWdyZWVzIiwicmFkaWFucyIsImZzY2FsZSIsImlhZGRoIiwieDAiLCJ4MSIsInkwIiwieTEiLCIkeDAiLCIkeTAiLCJpc3ViaCIsImltdWxoIiwidSIsIiR1IiwiJHYiLCJ1MCIsInYwIiwidTEiLCJ2MSIsInVtdWxoIiwic2lnbmJpdCIsIm9uRmluYWxseSIsInRvTWV0YUtleSIsIm9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEiLCJkZWZpbmVNZXRhZGF0YSIsIm1ldGFkYXRhS2V5IiwibWV0YWRhdGFWYWx1ZSIsImRlbGV0ZU1ldGFkYXRhIiwib3JkaW5hcnlIYXNPd25NZXRhZGF0YSIsIm9yZGluYXJ5R2V0T3duTWV0YWRhdGEiLCJvcmRpbmFyeUdldE1ldGFkYXRhIiwiZ2V0TWV0YWRhdGEiLCJTZXQiLCJvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyIsIm9yZGluYXJ5TWV0YWRhdGFLZXlzIiwib0tleXMiLCJwS2V5cyIsImdldE1ldGFkYXRhS2V5cyIsImdldE93bk1ldGFkYXRhIiwiZ2V0T3duTWV0YWRhdGFLZXlzIiwib3JkaW5hcnlIYXNNZXRhZGF0YSIsImhhc01ldGFkYXRhIiwiaGFzT3duTWV0YWRhdGEiLCIkbWV0YWRhdGEiLCJhc2FwIiwiT0JTRVJWQUJMRSIsImNsZWFudXBTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb24iLCJjbGVhbnVwIiwic3Vic2NyaXB0aW9uQ2xvc2VkIiwiX28iLCJjbG9zZVN1YnNjcmlwdGlvbiIsIlN1YnNjcmlwdGlvbiIsIm9ic2VydmVyIiwic3Vic2NyaWJlciIsIlN1YnNjcmlwdGlvbk9ic2VydmVyIiwidW5zdWJzY3JpYmUiLCJjb21wbGV0ZSIsIiRPYnNlcnZhYmxlIiwic3Vic2NyaWJlIiwib2JzZXJ2YWJsZSIsIml0ZW1zIiwiT2JzZXJ2YWJsZSIsIk1TSUUiLCJ0aW1lIiwiYm91bmRBcmdzIiwic2V0SW50ZXJ2YWwiLCIkdGFzayIsIlRPX1NUUklOR19UQUciLCJBcnJheVZhbHVlcyIsIkRPTUl0ZXJhYmxlcyIsIkNTU1J1bGVMaXN0IiwiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsIkNTU1ZhbHVlTGlzdCIsIkNsaWVudFJlY3RMaXN0IiwiRE9NUmVjdExpc3QiLCJET01TdHJpbmdMaXN0IiwiRE9NVG9rZW5MaXN0IiwiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCJGaWxlTGlzdCIsIkhUTUxBbGxDb2xsZWN0aW9uIiwiSFRNTENvbGxlY3Rpb24iLCJIVE1MRm9ybUVsZW1lbnQiLCJIVE1MU2VsZWN0RWxlbWVudCIsIk1lZGlhTGlzdCIsIk1pbWVUeXBlQXJyYXkiLCJOYW1lZE5vZGVNYXAiLCJOb2RlTGlzdCIsIlBhaW50UmVxdWVzdExpc3QiLCJQbHVnaW4iLCJQbHVnaW5BcnJheSIsIlNWR0xlbmd0aExpc3QiLCJTVkdOdW1iZXJMaXN0IiwiU1ZHUGF0aFNlZ0xpc3QiLCJTVkdQb2ludExpc3QiLCJTVkdTdHJpbmdMaXN0IiwiU1ZHVHJhbnNmb3JtTGlzdCIsIlNvdXJjZUJ1ZmZlckxpc3QiLCJTdHlsZVNoZWV0TGlzdCIsIlRleHRUcmFja0N1ZUxpc3QiLCJUZXh0VHJhY2tMaXN0IiwiVG91Y2hMaXN0IiwiY29sbGVjdGlvbnMiLCJleHBsaWNpdCIsIkNvbGxlY3Rpb24iLCJPcCIsImhhc093biIsIml0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsImluTW9kdWxlIiwicnVudGltZSIsInJlZ2VuZXJhdG9yUnVudGltZSIsIkNvbnRpbnVlU2VudGluZWwiLCJOYXRpdmVJdGVyYXRvclByb3RvdHlwZSIsIkdwIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJHZW5lcmF0b3JGdW5jdGlvbiIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJtYXJrIiwiYXdyYXAiLCJfX2F3YWl0IiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiQXN5bmNJdGVyYXRvciIsImlubmVyRm4iLCJvdXRlckZuIiwidHJ5TG9jc0xpc3QiLCJDb250ZXh0IiwicmVzZXQiLCJza2lwVGVtcFJlc2V0Iiwic2VudCIsIl9zZW50IiwiZGVsZWdhdGUiLCJ0cnlFbnRyaWVzIiwicmVzZXRUcnlFbnRyeSIsInN0b3AiLCJyb290UmVjb3JkIiwiY29tcGxldGlvbiIsInJ2YWwiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsInJlY29yZCIsInRyeUxvYyIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFicnVwdCIsImZpbmFsbHlFbnRyeSIsImFmdGVyTG9jIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicHJvdG9HZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJfaW52b2tlIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInRyeUNhdGNoIiwibWFrZUludm9rZU1ldGhvZCIsInVud3JhcHBlZCIsInByZXZpb3VzUHJvbWlzZSIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwicmV0dXJuIiwiaW5mbyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJpdGVyYXRvck1ldGhvZCIsImVzY2FwZSIsIiRyZSIsInJlZ0V4cCIsInBhcnQiLCJhZGRIYXNoVG9QaW5RdWV1ZSIsImhhc2hUb1BpbiIsInBpbkZpbGVUb0lQRlMiLCJyZWFkYWJsZVN0cmVhbSIsInBpbkZyb21GUyIsInNvdXJjZVBhdGgiLCJwaW5KU09OVG9JUEZTIiwiYm9keSIsInBpbkhhc2hUb0lQRlMiLCJwaW5Kb2JzIiwiZmlsdGVycyIsInJlbW92ZVBpbkZyb21JUEZTIiwiaXBmc1Bpbkhhc2giLCJ0ZXN0QXV0aGVudGljYXRpb24iLCJwaW5MaXN0IiwidXNlclBpbkxpc3QiLCJ1c2VyUGlubmVkRGF0YVRvdGFsIiwidmFsaWRhdGVBcGlLZXlzIiwiZW5kcG9pbnQiLCJiYXNlVXJsIiwiaG9zdF9ub2RlcyIsInZhbGlkYXRlSG9zdE5vZGVzIiwicGluYXRhTWV0YWRhdGEiLCJ2YWxpZGF0ZU1ldGFkYXRhIiwiYXhpb3MiLCJwb3N0Iiwid2l0aENyZWRlbnRpYWxzIiwiQXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZUNvbmZpZyIsIkNhbmNlbFRva2VuIiwiaXNDYW5jZWwiLCJwcm9taXNlcyIsInNwcmVhZCIsImRlZmF1bHQiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJpbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic2hpZnQiLCJub3JtYWxpemVkTmFtZSIsInRvVXBwZXJDYXNlIiwic2V0dGxlIiwiYnVpbGRVUkwiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVHlwZSIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJvbmVycm9yIiwib250aW1lb3V0IiwiY29va2llcyIsInhzcmZWYWx1ZSIsInJlYWQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbFRva2VuIiwiY2FuY2VsIiwic2VuZCIsImlnbm9yZUR1cGxpY2F0ZU9mIiwibGluZSIsIm9yaWdpblVSTCIsIm1zaWUiLCJ1cmxQYXJzaW5nTm9kZSIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwicmVxdWVzdFVSTCIsImV4cGlyZXMiLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImh0dHBGb2xsb3ciLCJodHRwc0ZvbGxvdyIsInpsaWIiLCJwa2ciLCJ0aW1lciIsInVybEF1dGgiLCJpc0h0dHBzIiwiaHR0cHNBZ2VudCIsImh0dHBBZ2VudCIsInNvY2tldFBhdGgiLCJwcm94eUVudiIsInByb3h5VXJsIiwiZW52IiwicGFyc2VkUHJveHlVcmwiLCJwcm94eVVybEF1dGgiLCJiYXNlNjQiLCJyZXEiLCJhYm9ydGVkIiwiY2xlYXJUaW1lb3V0Iiwic3RyZWFtIiwiY3JlYXRlVW56aXAiLCJsYXN0UmVxdWVzdCIsInN0YXR1c01lc3NhZ2UiLCJyZXNwb25zZUJ1ZmZlciIsImNodW5rIiwicmVzcG9uc2VEYXRhIiwibG9hZCIsInN0b3JhZ2UiLCJERUJVRyIsImxhc3RDIiwicmVtb3ZlSXRlbSIsIldlYmtpdEFwcGVhcmFuY2UiLCJmaXJlYnVnIiwiJDEiLCJjaHJvbWUiLCJsb2NhbCIsImxvY2FsU3RvcmFnZSIsImxvY2Fsc3RvcmFnZSIsImgiLCJwbHVyYWwiLCJsb25nIiwiZm10U2hvcnQiLCJ0dHkiLCJpbnNwZWN0T3B0cyIsInN0ZGVyciIsImNvbG9yQ29kZSIsImhpZGVEYXRlIiwiaXNhdHR5IiwiZmQiLCJzdXBwb3J0c0NvbG9yIiwibGV2ZWwiLCJvcyIsImhhc0ZsYWciLCJmb3JjZUNvbG9yIiwiZ2V0U3VwcG9ydExldmVsIiwiaGFzQmFzaWMiLCJoYXMyNTYiLCJoYXMxNm0iLCJ0cmFuc2xhdGVMZXZlbCIsImlzVFRZIiwicGxhdGZvcm0iLCJvc1JlbGVhc2UiLCJyZWxlYXNlIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJGT1JDRV9DT0xPUiIsInN0ZG91dCIsImZsYWciLCJhcmd2IiwidGVybWluYXRvclBvcyIsImhhbmRsZXJzIiwidXNlIiwiZWplY3QiLCJ0cmFuc2Zvcm1EYXRhIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJiYXNlVVJMIiwicmVsYXRpdmVVUkwiLCJyZXNvbHZlUHJvbWlzZSIsInRva2VuIiwiY29weVByb3BzIiwiZHN0IiwiU2FmZUJ1ZmZlciIsImVuY29kaW5nT3JPZmZzZXQiLCJhbGxvY1Vuc2FmZVNsb3ciLCJTbG93QnVmZmVyIiwiMCIsIm9sZE9mZnNldCIsIklOVCIsIk4xIiwiTjIiLCJOMyIsIk40IiwiTjUiLCJONiIsIk43IiwiTjgiLCJOOSIsImJhc2VYIiwiYmFzZTE2IiwiYmFzZTMyIiwidHVwcGxlIiwiaW1wbGVtZW50YXRpb24iLCJhbHBoYWJldCIsImVuZ2luZSIsInN0cmluZ09yQnVmZmVyIiwiY2hhciIsInBhZGRpbmciLCJiaXRzIiwicGFkIiwiY29udmVydCIsInN0cmluZ1RvU3RyaW5nVHVwbGVzIiwiUGFyc2VFcnJvciIsImNsZWFuUGF0aCIsInN0cmluZ1R1cGxlc1RvU3RyaW5nIiwidHVwIiwicHJvdG9Gcm9tVHVwbGUiLCJzdHJpbmdUdXBsZXNUb1R1cGxlcyIsInRvQnVmZmVyIiwic3RyaW5nVG9CdWZmZXIiLCJ2YWxpZGF0ZUJ1ZmZlciIsImlzVmFsaWRCdWZmZXIiLCJpc0lwIiwiQ29udmVydCIsImlwMmJ1ZiIsImlwU3RyaW5nIiwicG9ydDJidWYiLCJ3cml0ZVVJbnQxNkJFIiwiYnVmMnBvcnQiLCJyZWFkVUludDE2QkUiLCJidWYyb25pb24iLCJhZGRyQnl0ZXMiLCJwb3J0Qnl0ZXMiLCJpcEJ1ZmYiLCJidWYyaXAiLCJidWYyc3RyIiwiYnVmMm1oIiwic3RyMmJ1ZiIsIm1oMmJ1ZiIsImFzQnl0ZXMiLCJwb3J0QnVmIiwib25pb24yYnVmIiwib25pb24zMmJ1ZiIsImJ1ZmYiLCJpc1Y0Rm9ybWF0IiwiYnl0ZSIsImlzVjZGb3JtYXQiLCJzZWN0aW9ucyIsInY0QnVmZmVyIiwid29yZCIsImlwdjRSZWdleCIsImlwdjZSZWdleCIsIl9ub3JtYWxpemVGYW1pbHkiLCJmcm9tUHJlZml4TGVuIiwicHJlZml4bGVuIiwibWFzayIsImNpZHIiLCJjaWRyU3RyaW5nIiwiY2lkclBhcnRzIiwic3VibmV0IiwibmV0d29ya0FkZHJlc3MiLCJ0b0xvbmciLCJtYXNrQnVmZmVyIiwibWFza0xlbmd0aCIsIm9jdGV0IiwibnVtYmVyT2ZBZGRyZXNzZXMiLCJmcm9tTG9uZyIsImZpcnN0QWRkcmVzcyIsImxhc3RBZGRyZXNzIiwiYnJvYWRjYXN0QWRkcmVzcyIsInN1Ym5ldE1hc2siLCJzdWJuZXRNYXNrTGVuZ3RoIiwibnVtSG9zdHMiLCJjb250YWlucyIsImNpZHJTdWJuZXQiLCJub3QiLCJvciIsImlzRXF1YWwiLCJpc1ByaXZhdGUiLCJpc1B1YmxpYyIsImlzTG9vcGJhY2siLCJsb29wYmFjayIsImludGVyZmFjZXMiLCJuZXR3b3JrSW50ZXJmYWNlcyIsImRldGFpbHMiLCJuaWMiLCJhZGRyZXNzZXMiLCJpcGwiLCJpcFJlZ2V4IiwiZXhhY3QiLCJ2NCIsInY2IiwiaW5jbHVkZUJvdW5kYXJpZXMiLCJ2NnNlZyIsImludFRhYmxlIiwiY29kZWNOYW1lVG9Db2RlVmFyaW50IiwiYWRkUHJlZml4IiwibXVsdGljb2RlY1N0ck9yQ29kZSIsInByZWZpeGVkRGF0YSIsImNvZGVjTmFtZSIsImdldE5hbWUiLCJnZXROdW1iZXIiLCJnZXRDb2RlIiwiZ2V0VmFyaW50IiwicHJpbnQiLCJiYXNlVGFibGUiLCJuYW1lVGFibGUiLCJlbmNvZGluZ05hbWUiLCJ2YXJpbnRUYWJsZSIsInRhYmxlQnlDb2RlIiwiSElfQkFTRTMyX05PX05PREVfSlMiLCJDT01NT05fSlMiLCJISV9CQVNFMzJfTk9fQ09NTU9OX0pTIiwiQU1EIiwiQkFTRTMyX0VOQ09ERV9DSEFSIiwiQkFTRTMyX0RFQ09ERV9DSEFSIiwiYmxvY2tzIiwidGhyb3dJbnZhbGlkVXRmOCIsInBhcnRpYWwiLCJkZWNvZGVBc0J5dGVzIiwiYmFzZTMyU3RyIiwidjIiLCJ2MyIsInY1IiwidjciLCJyZW1haW4iLCJhc2NpaU9ubHkiLCJmb2xsb3dpbmdDaGFycyIsInRvVXRmOFN0cmluZyIsIm5vdFN0cmluZyIsImVuY29kZUJ5dGVzIiwiZW5jb2RlQXNjaWkiLCJlbmNvZGVVdGY4IiwiX193ZWJwYWNrX2FtZF9vcHRpb25zX18iLCJETlM0IiwiRE5TNiIsIkROUyIsIklQIiwiVENQIiwiYW5kIiwiVURQIiwiVVRQIiwiV2ViU29ja2V0cyIsIldlYlNvY2tldHNTZWN1cmUiLCJIVFRQIiwiSFRUUFMiLCJXZWJSVENTdGFyIiwiV2ViU29ja2V0U3RhciIsIldlYlJUQ0RpcmVjdCIsIlJlbGlhYmxlIiwiU3RhcmR1c3QiLCJfUDJQIiwiX0NpcmN1aXQiLCJDaXJjdWl0UmVjdXJzaXZlIiwiQ2lyY3VpdCIsIlAyUCIsIm1ha2VNYXRjaGVzRnVuY3Rpb24iLCJwYXJ0aWFsTWF0Y2giLCJwbmFtZXMiLCJyZWFkU3RyZWFtIiwiTm9kZUZvcm1EYXRhIiwiUmVhZGFibGUiLCJwaW5hdGFPcHRpb25zIiwidmFsaWRhdGVQaW5hdGFPcHRpb25zIiwiU3RyZWFtIiwiRGVsYXllZFN0cmVhbSIsImRhdGFTaXplIiwibWF4RGF0YVNpemUiLCJwYXVzZVN0cmVhbXMiLCJfcmVsZWFzZWQiLCJfY3VycmVudFN0cmVhbSIsIl9pbnNpZGVMb29wIiwiX3BlbmRpbmdOZXh0IiwiY29tYmluZWRTdHJlYW0iLCJpc1N0cmVhbUxpa2UiLCJuZXdTdHJlYW0iLCJwYXVzZVN0cmVhbSIsIl9jaGVja0RhdGFTaXplIiwiX2hhbmRsZUVycm9ycyIsImRlc3QiLCJfZ2V0TmV4dCIsIl9yZWFsR2V0TmV4dCIsIl9waXBlTmV4dCIsIl9lbWl0RXJyb3IiLCJfcmVzZXQiLCJfdXBkYXRlRGF0YVNpemUiLCJfbWF4RGF0YVNpemVFeGNlZWRlZCIsIl9idWZmZXJlZEV2ZW50cyIsImRlbGF5ZWRTdHJlYW0iLCJyZWFsRW1pdCIsIl9oYW5kbGVFbWl0Iiwic2V0RW5jb2RpbmciLCJfY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQiLCJleHRlbnNpb25zIiwidHlwZXMiLCJwcmVmZXJlbmNlIiwiZGIiLCJleHRuYW1lIiwiRVhUUkFDVF9UWVBFX1JFR0VYUCIsIlRFWFRfVFlQRV9SRUdFWFAiLCJjaGFyc2V0IiwiY2hhcnNldHMiLCJleHRlbnNpb24iLCJleHRzIiwic2VyaWFsIiwic2VyaWFsT3JkZXJlZCIsInJlY3Vyc2l2ZSIsImZpbGUiLCJjcmVhdGVSZWFkU3RyZWFtIiwiZmlsZVBhdGgiLCJuZXdTdHJpbmciLCJuZXdMYXN0SW5kZXgiLCJwYXRoR2FyYmFnZSIsInJlcXVlc3RCb2R5IiwicGluYXRhQ29udGVudCIsIm5ld1VybCIsImZpcnN0RmlsdGVyQXBwbGllZCIsImFkZEZpbHRlciIsIm5ld0ZpbHRlciIsImlwZnNfcGluX2hhc2giLCJhdXRoZW50aWNhdGVkIiwiYmFzZUVuZHBvaW50IiwidmFsaWRhdGVBbmRSZXR1cm5EYXRlIiwiZGF0ZVRvVmFsaWRhdGUiLCJkYXRlUGFyc2VkIiwiZmlsdGVyUXVlcnkiLCJtZXRhZGF0YVF1ZXJ5IiwiaGFzaENvbnRhaW5zIiwicGluU3RhcnQiLCJwaW5FbmQiLCJ1bnBpblN0YXJ0IiwidW5waW5FbmQiLCJwaW5TaXplTWluIiwicGluU2l6ZU1heCIsInBhZ2VMaW1pdCIsInBhZ2VPZmZzZXQiLCJwcnVuZWRLZXlWYWx1ZXMiLCJvcCIsInNlY29uZFZhbHVlIiwicGluRmlsdGVyIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsSUFDUSxtQkFBWEcsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLGFBQWMsR0FBSUgsR0FDQyxpQkFBWkMsUUFDZEEsUUFBUSxjQUFnQkQsSUFFeEJELEVBQUssY0FBZ0JDLElBUnZCLENBU21CLG9CQUFUSyxLQUF1QkEsS0FBT0MsTUFBTSxXQUM5QyxPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVIsUUFHbkMsSUFBSUMsRUFBU0ssRUFBaUJFLEdBQVksQ0FDekNDLEVBQUdELEVBQ0hFLEdBQUcsRUFDSFYsUUFBUyxJQVVWLE9BTkFXLEVBQVFILEdBQVVJLEtBQUtYLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNPLEdBRy9ETixFQUFPUyxHQUFJLEVBR0pULEVBQU9ELFFBMERmLE9BckRBTyxFQUFvQk0sRUFBSUYsRUFHeEJKLEVBQW9CTyxFQUFJUixFQUd4QkMsRUFBb0JRLEVBQUksU0FBU2YsRUFBU2dCLEVBQU1DLEdBQzNDVixFQUFvQlcsRUFBRWxCLEVBQVNnQixJQUNsQ0csT0FBT0MsZUFBZXBCLEVBQVNnQixFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVWLEVBQW9CZ0IsRUFBSSxTQUFTdkIsR0FDWCxvQkFBWHdCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZXBCLEVBQVN3QixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWVwQixFQUFTLGFBQWMsQ0FBRTBCLE9BQU8sS0FRdkRuQixFQUFvQm9CLEVBQUksU0FBU0QsRUFBT0UsR0FFdkMsR0FEVSxFQUFQQSxJQUFVRixFQUFRbkIsRUFBb0JtQixJQUMvQixFQUFQRSxFQUFVLE9BQU9GLEVBQ3BCLEdBQVcsRUFBUEUsR0FBOEIsaUJBQVZGLEdBQXNCQSxHQUFTQSxFQUFNRyxXQUFZLE9BQU9ILEVBQ2hGLElBQUlJLEVBQUtYLE9BQU9ZLE9BQU8sTUFHdkIsR0FGQXhCLEVBQW9CZ0IsRUFBRU8sR0FDdEJYLE9BQU9DLGVBQWVVLEVBQUksVUFBVyxDQUFFVCxZQUFZLEVBQU1LLE1BQU9BLElBQ3RELEVBQVBFLEdBQTRCLGlCQUFURixFQUFtQixJQUFJLElBQUlNLEtBQU9OLEVBQU9uQixFQUFvQlEsRUFBRWUsRUFBSUUsRUFBSyxTQUFTQSxHQUFPLE9BQU9OLEVBQU1NLElBQVFDLEtBQUssS0FBTUQsSUFDOUksT0FBT0YsR0FJUnZCLEVBQW9CMkIsRUFBSSxTQUFTakMsR0FDaEMsSUFBSWdCLEVBQVNoQixHQUFVQSxFQUFPNEIsV0FDN0IsV0FBd0IsT0FBTzVCLEVBQWdCLFNBQy9DLFdBQThCLE9BQU9BLEdBRXRDLE9BREFNLEVBQW9CUSxFQUFFRSxFQUFRLElBQUtBLEdBQzVCQSxHQUlSVixFQUFvQlcsRUFBSSxTQUFTaUIsRUFBUUMsR0FBWSxPQUFPakIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLdUIsRUFBUUMsSUFHekc3QixFQUFvQmdDLEVBQUksR0FJakJoQyxFQUFvQkEsRUFBb0JpQyxFQUFJLEssa0JDbEZyRCxJQUFJQyxFQUFTLEVBQVEsR0FDakJDLEVBQU8sRUFBUSxJQUNmQyxFQUFPLEVBQVEsSUFDZkMsRUFBVyxFQUFRLElBQ25CQyxFQUFNLEVBQVEsSUFHZEMsRUFBVSxTQUFVQyxFQUFNL0IsRUFBTWdDLEdBQ2xDLElBUUloQixFQUFLaUIsRUFBS0MsRUFBS0MsRUFSZkMsRUFBWUwsRUFBT0QsRUFBUU8sRUFDM0JDLEVBQVlQLEVBQU9ELEVBQVFTLEVBQzNCQyxFQUFZVCxFQUFPRCxFQUFRVyxFQUMzQkMsRUFBV1gsRUFBT0QsRUFBUWEsRUFDMUJDLEVBQVViLEVBQU9ELEVBQVFlLEVBQ3pCQyxFQUFTUixFQUFZYixFQUFTZSxFQUFZZixFQUFPekIsS0FBVXlCLEVBQU96QixHQUFRLEtBQU95QixFQUFPekIsSUFBUyxJQUFhLFVBQzlHaEIsRUFBVXNELEVBQVlaLEVBQU9BLEVBQUsxQixLQUFVMEIsRUFBSzFCLEdBQVEsSUFDekQrQyxFQUFXL0QsRUFBaUIsWUFBTUEsRUFBaUIsVUFBSSxJQUczRCxJQUFLZ0MsS0FERHNCLElBQVdOLEVBQVNoQyxHQUNaZ0MsRUFJVkUsSUFGQUQsR0FBT0csR0FBYVUsUUFBMEJFLElBQWhCRixFQUFPOUIsSUFFeEI4QixFQUFTZCxHQUFRaEIsR0FFOUJtQixFQUFNUyxHQUFXWCxFQUFNSixFQUFJSyxFQUFLVCxHQUFVaUIsR0FBMEIsbUJBQVBSLEVBQW9CTCxFQUFJb0IsU0FBU3JELEtBQU1zQyxHQUFPQSxFQUV2R1ksR0FBUWxCLEVBQVNrQixFQUFROUIsRUFBS2tCLEVBQUtILEVBQU9ELEVBQVFvQixHQUVsRGxFLEVBQVFnQyxJQUFRa0IsR0FBS1AsRUFBSzNDLEVBQVNnQyxFQUFLbUIsR0FDeENPLEdBQVlLLEVBQVMvQixJQUFRa0IsSUFBS2EsRUFBUy9CLEdBQU9rQixJQUcxRFQsRUFBT0MsS0FBT0EsRUFFZEksRUFBUU8sRUFBSSxFQUNaUCxFQUFRUyxFQUFJLEVBQ1pULEVBQVFXLEVBQUksRUFDWlgsRUFBUWEsRUFBSSxFQUNaYixFQUFRZSxFQUFJLEdBQ1pmLEVBQVFxQixFQUFJLEdBQ1pyQixFQUFRb0IsRUFBSSxHQUNacEIsRUFBUXNCLEVBQUksSUFDWm5FLEVBQU9ELFFBQVU4QyxHLGdCQzFDakIsSUFBSXVCLEVBQVcsRUFBUSxHQUN2QnBFLEVBQU9ELFFBQVUsU0FBVXNFLEdBQ3pCLElBQUtELEVBQVNDLEdBQUssTUFBTUMsVUFBVUQsRUFBSyxzQkFDeEMsT0FBT0EsSSxjQ0ZULElBQUk3QixFQUFTeEMsRUFBT0QsUUFBMkIsb0JBQVZ3RSxRQUF5QkEsT0FBT0MsTUFBUUEsS0FDekVELE9BQXdCLG9CQUFScEUsTUFBdUJBLEtBQUtxRSxNQUFRQSxLQUFPckUsS0FFM0Q2RCxTQUFTLGNBQVRBLEdBQ2MsaUJBQVBTLE1BQWlCQSxJQUFNakMsSSxjQ0xsQ3hDLEVBQU9ELFFBQVUsU0FBVTJFLEdBQ3pCLElBQ0UsUUFBU0EsSUFDVCxNQUFPQyxHQUNQLE9BQU8sSyxjQ0pYM0UsRUFBT0QsUUFBVSxTQUFVc0UsR0FDekIsTUFBcUIsaUJBQVBBLEVBQXlCLE9BQVBBLEVBQTRCLG1CQUFQQSxJLGdCQ0R2RCxJQUFJTyxFQUFRLEVBQVEsR0FBUixDQUFxQixPQUM3QkMsRUFBTSxFQUFRLElBQ2R0RCxFQUFTLEVBQVEsR0FBYUEsT0FDOUJ1RCxFQUE4QixtQkFBVnZELEdBRVR2QixFQUFPRCxRQUFVLFNBQVVnQixHQUN4QyxPQUFPNkQsRUFBTTdELEtBQVU2RCxFQUFNN0QsR0FDM0IrRCxHQUFjdkQsRUFBT1IsS0FBVStELEVBQWF2RCxFQUFTc0QsR0FBSyxVQUFZOUQsTUFHakU2RCxNQUFRQSxHLGdCQ1RqQixJQUFJRyxFQUFZLEVBQVEsSUFDcEJDLEVBQU1SLEtBQUtRLElBQ2ZoRixFQUFPRCxRQUFVLFNBQVVzRSxHQUN6QixPQUFPQSxFQUFLLEVBQUlXLEVBQUlELEVBQVVWLEdBQUssa0JBQW9CLEksZ0JDSHpEckUsRUFBT0QsU0FBVyxFQUFRLEVBQVIsRUFBb0IsV0FDcEMsT0FBK0UsR0FBeEVtQixPQUFPQyxlQUFlLEdBQUksSUFBSyxDQUFFRSxJQUFLLFdBQWMsT0FBTyxLQUFRNEQsTSxnQkNGNUUsSUFBSUMsRUFBVyxFQUFRLEdBQ25CQyxFQUFpQixFQUFRLEtBQ3pCQyxFQUFjLEVBQVEsSUFDdEJDLEVBQUtuRSxPQUFPQyxlQUVoQnBCLEVBQVF1RixFQUFJLEVBQVEsR0FBb0JwRSxPQUFPQyxlQUFpQixTQUF3Qm9FLEVBQUc3QixFQUFHOEIsR0FJNUYsR0FIQU4sRUFBU0ssR0FDVDdCLEVBQUkwQixFQUFZMUIsR0FBRyxHQUNuQndCLEVBQVNNLEdBQ0xMLEVBQWdCLElBQ2xCLE9BQU9FLEVBQUdFLEVBQUc3QixFQUFHOEIsR0FDaEIsTUFBT2IsSUFDVCxHQUFJLFFBQVNhLEdBQWMsUUFBU0EsRUFBWSxNQUFNbEIsVUFBVSw0QkFFaEUsTUFESSxVQUFXa0IsSUFBWUQsRUFBRTdCLEdBQUs4QixFQUFXL0QsT0FDdEM4RCxJLGdCQ2JULElBQUlFLEVBQVUsRUFBUSxJQUN0QnpGLEVBQU9ELFFBQVUsU0FBVXNFLEdBQ3pCLE9BQU9uRCxPQUFPdUUsRUFBUXBCLE0sY0NIeEJyRSxFQUFPRCxRQUFVLFNBQVVzRSxHQUN6QixHQUFpQixtQkFBTkEsRUFBa0IsTUFBTUMsVUFBVUQsRUFBSyx1QkFDbEQsT0FBT0EsSSxnQkNGVCxJQUFJZ0IsRUFBSyxFQUFRLEdBQ2JLLEVBQWEsRUFBUSxJQUN6QjFGLEVBQU9ELFFBQVUsRUFBUSxHQUFvQixTQUFVbUMsRUFBUUgsRUFBS04sR0FDbEUsT0FBTzRELEVBQUdDLEVBQUVwRCxFQUFRSCxFQUFLMkQsRUFBVyxFQUFHakUsS0FDckMsU0FBVVMsRUFBUUgsRUFBS04sR0FFekIsT0FEQVMsRUFBT0gsR0FBT04sRUFDUFMsSSxnQkNOVCxJQUFJTSxFQUFTLEVBQVEsR0FDakJFLEVBQU8sRUFBUSxJQUNmaUQsRUFBTSxFQUFRLElBQ2RDLEVBQU0sRUFBUSxHQUFSLENBQWtCLE9BQ3hCQyxFQUFZLEVBQVEsS0FFcEJDLEdBQU8sR0FBS0QsR0FBV0UsTUFEWCxZQUdoQixFQUFRLElBQVdDLGNBQWdCLFNBQVUzQixHQUMzQyxPQUFPd0IsRUFBVWxGLEtBQUswRCxLQUd2QnJFLEVBQU9ELFFBQVUsU0FBVXdGLEVBQUd4RCxFQUFLa0UsRUFBS0MsR0FDdkMsSUFBSUMsRUFBMkIsbUJBQVBGLEVBQ3BCRSxJQUFZUixFQUFJTSxFQUFLLFNBQVd2RCxFQUFLdUQsRUFBSyxPQUFRbEUsSUFDbER3RCxFQUFFeEQsS0FBU2tFLElBQ1hFLElBQVlSLEVBQUlNLEVBQUtMLElBQVFsRCxFQUFLdUQsRUFBS0wsRUFBS0wsRUFBRXhELEdBQU8sR0FBS3dELEVBQUV4RCxHQUFPK0QsRUFBSU0sS0FBS0MsT0FBT3RFLE1BQ25Gd0QsSUFBTS9DLEVBQ1IrQyxFQUFFeEQsR0FBT2tFLEVBQ0NDLEVBR0RYLEVBQUV4RCxHQUNYd0QsRUFBRXhELEdBQU9rRSxFQUVUdkQsRUFBSzZDLEVBQUd4RCxFQUFLa0UsV0FMTlYsRUFBRXhELEdBQ1RXLEVBQUs2QyxFQUFHeEQsRUFBS2tFLE9BT2RqQyxTQUFTNUIsVUF2QkksWUF1QmtCLFdBQ2hDLE1BQXNCLG1CQUFSaEMsTUFBc0JBLEtBQUt3RixJQUFRQyxFQUFVbEYsS0FBS1AsVSxnQkM3QmxFLElBQUl5QyxFQUFVLEVBQVEsR0FDbEJ5RCxFQUFRLEVBQVEsR0FDaEJiLEVBQVUsRUFBUSxJQUNsQmMsRUFBTyxLQUVQQyxFQUFhLFNBQVVDLEVBQVFDLEVBQUtDLEVBQVdsRixHQUNqRCxJQUFJK0IsRUFBSTZDLE9BQU9aLEVBQVFnQixJQUNuQkcsRUFBSyxJQUFNRixFQUVmLE1BRGtCLEtBQWRDLElBQWtCQyxHQUFNLElBQU1ELEVBQVksS0FBT04sT0FBTzVFLEdBQU9vRixRQUFRTixFQUFNLFVBQVksS0FDdEZLLEVBQUssSUFBTXBELEVBQUksS0FBT2tELEVBQU0sS0FFckMxRyxFQUFPRCxRQUFVLFNBQVUrRyxFQUFNcEMsR0FDL0IsSUFBSWEsRUFBSSxHQUNSQSxFQUFFdUIsR0FBUXBDLEVBQUs4QixHQUNmM0QsRUFBUUEsRUFBUWEsRUFBSWIsRUFBUU8sRUFBSWtELEdBQU0sV0FDcEMsSUFBSVMsRUFBTyxHQUFHRCxHQUFNLEtBQ3BCLE9BQU9DLElBQVNBLEVBQUtDLGVBQWlCRCxFQUFLaEIsTUFBTSxLQUFLa0IsT0FBUyxLQUM3RCxTQUFVMUIsSyw2QkNmaEIsSUFBSXZELEVBQU8sRUFBUSxLQUNma0YsRUFBVyxFQUFRLEtBTW5CQyxFQUFXakcsT0FBT2tCLFVBQVUrRSxTQVFoQyxTQUFTQyxFQUFRbkIsR0FDZixNQUE4QixtQkFBdkJrQixFQUFTeEcsS0FBS3NGLEdBMkV2QixTQUFTN0IsRUFBUzZCLEdBQ2hCLE9BQWUsT0FBUkEsR0FBK0IsaUJBQVJBLEVBdUNoQyxTQUFTRSxFQUFXRixHQUNsQixNQUE4QixzQkFBdkJrQixFQUFTeEcsS0FBS3NGLEdBb0V2QixTQUFTb0IsRUFBUUMsRUFBS0MsR0FFcEIsR0FBSUQsUUFVSixHQUxtQixpQkFBUkEsSUFFVEEsRUFBTSxDQUFDQSxJQUdMRixFQUFRRSxHQUVWLElBQUssSUFBSTlHLEVBQUksRUFBR0MsRUFBSTZHLEVBQUlMLE9BQVF6RyxFQUFJQyxFQUFHRCxJQUNyQytHLEVBQUc1RyxLQUFLLEtBQU0yRyxFQUFJOUcsR0FBSUEsRUFBRzhHLFFBSTNCLElBQUssSUFBSXZGLEtBQU91RixFQUNWcEcsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLMkcsRUFBS3ZGLElBQzVDd0YsRUFBRzVHLEtBQUssS0FBTTJHLEVBQUl2RixHQUFNQSxFQUFLdUYsR0EwRHJDdEgsRUFBT0QsUUFBVSxDQUNmcUgsUUFBU0EsRUFDVEksY0FoUUYsU0FBdUJ2QixHQUNyQixNQUE4Qix5QkFBdkJrQixFQUFTeEcsS0FBS3NGLElBZ1FyQmlCLFNBQVVBLEVBQ1ZPLFdBeFBGLFNBQW9CeEIsR0FDbEIsTUFBNEIsb0JBQWJ5QixVQUE4QnpCLGFBQWV5QixVQXdQNURDLGtCQS9PRixTQUEyQjFCLEdBT3pCLE1BTDRCLG9CQUFoQjJCLGFBQWlDQSxZQUFrQixPQUNwREEsWUFBWUMsT0FBTzVCLEdBRW5CLEdBQVVBLEVBQVUsUUFBTUEsRUFBSTZCLGtCQUFrQkYsYUEyTzNERyxTQWhPRixTQUFrQjlCLEdBQ2hCLE1BQXNCLGlCQUFSQSxHQWdPZCtCLFNBdk5GLFNBQWtCL0IsR0FDaEIsTUFBc0IsaUJBQVJBLEdBdU5kN0IsU0FBVUEsRUFDVjZELFlBL01GLFNBQXFCaEMsR0FDbkIsWUFBc0IsSUFBUkEsR0ErTWRpQyxPQTVMRixTQUFnQmpDLEdBQ2QsTUFBOEIsa0JBQXZCa0IsRUFBU3hHLEtBQUtzRixJQTRMckJrQyxPQW5MRixTQUFnQmxDLEdBQ2QsTUFBOEIsa0JBQXZCa0IsRUFBU3hHLEtBQUtzRixJQW1MckJtQyxPQTFLRixTQUFnQm5DLEdBQ2QsTUFBOEIsa0JBQXZCa0IsRUFBU3hHLEtBQUtzRixJQTBLckJFLFdBQVlBLEVBQ1prQyxTQXhKRixTQUFrQnBDLEdBQ2hCLE9BQU83QixFQUFTNkIsSUFBUUUsRUFBV0YsRUFBSXFDLE9Bd0p2Q0Msa0JBL0lGLFNBQTJCdEMsR0FDekIsTUFBa0Msb0JBQXBCdUMsaUJBQW1DdkMsYUFBZXVDLGlCQStJaEVDLHFCQXJIRixXQUNFLE9BQXlCLG9CQUFkQyxXQUFtRCxnQkFBdEJBLFVBQVVDLFdBSTlCLG9CQUFYcEUsUUFDYSxvQkFBYnFFLFdBZ0hUdkIsUUFBU0EsRUFDVHdCLE1BckRGLFNBQVNBLElBQ1AsSUFBSUMsRUFBUyxHQUNiLFNBQVNDLEVBQVk5QyxFQUFLbEUsR0FDRyxpQkFBaEIrRyxFQUFPL0csSUFBb0MsaUJBQVJrRSxFQUM1QzZDLEVBQU8vRyxHQUFPOEcsRUFBTUMsRUFBTy9HLEdBQU1rRSxHQUVqQzZDLEVBQU8vRyxHQUFPa0UsRUFJbEIsSUFBSyxJQUFJekYsRUFBSSxFQUFHQyxFQUFJdUksVUFBVS9CLE9BQVF6RyxFQUFJQyxFQUFHRCxJQUMzQzZHLEVBQVEyQixVQUFVeEksR0FBSXVJLEdBRXhCLE9BQU9ELEdBeUNQRyxPQTlCRixTQUFnQmhFLEVBQUdpRSxFQUFHQyxHQVFwQixPQVBBOUIsRUFBUTZCLEdBQUcsU0FBcUJqRCxFQUFLbEUsR0FFakNrRCxFQUFFbEQsR0FEQW9ILEdBQTBCLG1CQUFSbEQsRUFDWGpFLEVBQUtpRSxFQUFLa0QsR0FFVmxELEtBR05oQixHQXVCUG1FLEtBMUlGLFNBQWNDLEdBQ1osT0FBT0EsRUFBSXhDLFFBQVEsT0FBUSxJQUFJQSxRQUFRLE9BQVEsTyxjQ3BLakQsSUFBSXhFLEVBQWlCLEdBQUdBLGVBQ3hCckMsRUFBT0QsUUFBVSxTQUFVc0UsRUFBSXRDLEdBQzdCLE9BQU9NLEVBQWUxQixLQUFLMEQsRUFBSXRDLEssZ0JDRGpDLElBQUl1SCxFQUFVLEVBQVEsSUFDbEI3RCxFQUFVLEVBQVEsSUFDdEJ6RixFQUFPRCxRQUFVLFNBQVVzRSxHQUN6QixPQUFPaUYsRUFBUTdELEVBQVFwQixNLGdCQ0p6QixJQUFJa0YsRUFBTSxFQUFRLElBQ2Q3RCxFQUFhLEVBQVEsSUFDckI4RCxFQUFZLEVBQVEsSUFDcEJwRSxFQUFjLEVBQVEsSUFDdEJPLEVBQU0sRUFBUSxJQUNkUixFQUFpQixFQUFRLEtBQ3pCc0UsRUFBT3ZJLE9BQU93SSx5QkFFbEIzSixFQUFRdUYsRUFBSSxFQUFRLEdBQW9CbUUsRUFBTyxTQUFrQ2xFLEVBQUc3QixHQUdsRixHQUZBNkIsRUFBSWlFLEVBQVVqRSxHQUNkN0IsRUFBSTBCLEVBQVkxQixHQUFHLEdBQ2Z5QixFQUFnQixJQUNsQixPQUFPc0UsRUFBS2xFLEVBQUc3QixHQUNmLE1BQU9pQixJQUNULEdBQUlnQixFQUFJSixFQUFHN0IsR0FBSSxPQUFPZ0MsR0FBWTZELEVBQUlqRSxFQUFFM0UsS0FBSzRFLEVBQUc3QixHQUFJNkIsRUFBRTdCLE0sZ0JDYnhELElBQUlpQyxFQUFNLEVBQVEsSUFDZGdFLEVBQVcsRUFBUSxHQUNuQkMsRUFBVyxFQUFRLEdBQVIsQ0FBeUIsWUFDcENDLEVBQWMzSSxPQUFPa0IsVUFFekJwQyxFQUFPRCxRQUFVbUIsT0FBTzRJLGdCQUFrQixTQUFVdkUsR0FFbEQsT0FEQUEsRUFBSW9FLEVBQVNwRSxHQUNUSSxFQUFJSixFQUFHcUUsR0FBa0JyRSxFQUFFcUUsR0FDSCxtQkFBakJyRSxFQUFFd0UsYUFBNkJ4RSxhQUFhQSxFQUFFd0UsWUFDaER4RSxFQUFFd0UsWUFBWTNILFVBQ2RtRCxhQUFhckUsT0FBUzJJLEVBQWMsTyxjQ1gvQyxJQUFJcEgsRUFBT3pDLEVBQU9ELFFBQVUsQ0FBRWlLLFFBQVMsVUFDckIsaUJBQVBDLE1BQWlCQSxJQUFNeEgsSSxnQkNBbEMsSUFBSXlILEVBQVksRUFBUSxJQUN4QmxLLEVBQU9ELFFBQVUsU0FBVXdILEVBQUk0QyxFQUFNbEQsR0FFbkMsR0FEQWlELEVBQVUzQyxRQUNHeEQsSUFBVG9HLEVBQW9CLE9BQU81QyxFQUMvQixPQUFRTixHQUNOLEtBQUssRUFBRyxPQUFPLFNBQVVoQyxHQUN2QixPQUFPc0MsRUFBRzVHLEtBQUt3SixFQUFNbEYsSUFFdkIsS0FBSyxFQUFHLE9BQU8sU0FBVUEsRUFBR2lFLEdBQzFCLE9BQU8zQixFQUFHNUcsS0FBS3dKLEVBQU1sRixFQUFHaUUsSUFFMUIsS0FBSyxFQUFHLE9BQU8sU0FBVWpFLEVBQUdpRSxFQUFHckksR0FDN0IsT0FBTzBHLEVBQUc1RyxLQUFLd0osRUFBTWxGLEVBQUdpRSxFQUFHckksSUFHL0IsT0FBTyxXQUNMLE9BQU8wRyxFQUFHNkMsTUFBTUQsRUFBTW5CLGMsY0NqQjFCLElBQUk3QixFQUFXLEdBQUdBLFNBRWxCbkgsRUFBT0QsUUFBVSxTQUFVc0UsR0FDekIsT0FBTzhDLEVBQVN4RyxLQUFLMEQsR0FBSWdHLE1BQU0sR0FBSSxLLGNDRnJDLElBQUlDLEVBQU85RixLQUFLOEYsS0FDWkMsRUFBUS9GLEtBQUsrRixNQUNqQnZLLEVBQU9ELFFBQVUsU0FBVXNFLEdBQ3pCLE9BQU9tRyxNQUFNbkcsR0FBTUEsR0FBTSxHQUFLQSxFQUFLLEVBQUlrRyxFQUFRRCxHQUFNakcsSyw2QkNIdkQsSUFBSWlDLEVBQVEsRUFBUSxHQUVwQnRHLEVBQU9ELFFBQVUsU0FBVTBLLEVBQVFDLEdBQ2pDLFFBQVNELEdBQVVuRSxHQUFNLFdBRXZCb0UsRUFBTUQsRUFBTzlKLEtBQUssTUFBTSxjQUE2QixHQUFLOEosRUFBTzlKLEtBQUssVyxnQkNOMUVYLEVBQU9ELFFBQVUsRUFBUSxNLHlHQ0FGLDRCLGdHQ0VoQixTQUF5QjRLLEVBQWNDLEdBQzFDLElBQUtELEdBQWlDLEtBQWpCQSxFQUNqQixNQUFNLElBQUlFLE1BQU0sMEdBRXBCLElBQUtELEdBQTZDLEtBQXZCQSxFQUN2QixNQUFNLElBQUlDLE1BQU0sd0gsb0JBSWpCLFNBQTJCQyxHQUM5QixJQUFLQyxNQUFNM0QsUUFBUTBELEdBQ2YsTUFBTSxJQUFJRCxNQUFNLHFDQUVwQkMsRUFBVXpELFNBQVEsU0FBQzJELEdBQ2YsSUFBS0MsVUFBT0MsY0FBY0YsR0FDdEIsTUFBTSxJQUFJSCxNQUFKLGlDQUFvQ0csRUFBcEMsdUMsbUJBS1gsU0FBMEJHLEdBQzdCLEdBQUlBLEVBQVNwSyxRQUNzQixpQkFBbEJvSyxFQUFTcEssTUFBcUJvSyxFQUFTcEssZ0JBQWdCc0YsUUFDaEUsTUFBTSxJQUFJd0UsTUFBTSx3Q0FJeEIsR0FBSU0sRUFBU0MsVUFBVyxDQUNwQixHQUFvQyxXQUE5QixFQUFPRCxFQUFTQyxXQUNsQixNQUFNLElBQUlQLE1BQU0sMENBR3BCLElBQUlySyxFQUFJLEVBRVJVLE9BQU9tSyxRQUFRRixFQUFTQyxXQUFXL0QsU0FBUSxTQUFVaUUsR0FDakQsR0FBSTlLLEVBQUksRUFDSixNQUFNLElBQUlxSyxNQUFNLGtFQUdwQixHQUE2QixpQkFBaEJTLEVBQVMsSUFBMEMsa0JBQWhCQSxFQUFTLElBQXFCZCxNQUFNYyxFQUFTLElBQ3pGLE1BQU0sSUFBSVQsTUFBTSxrRUFFcEJySyxTLHdCQUtMLFNBQStCK0ssR0FDbEMsR0FBdUIsV0FBbkIsRUFBT0EsR0FDUCxNQUFNLElBQUlWLE1BQU0sNkJBR3BCLEdBQUlVLEVBQVFDLFlBRWtCLEdBQXRCRCxFQUFRQyxZQUF5QyxHQUF0QkQsRUFBUUMsV0FDbkMsTUFBTSxJQUFJWCxNQUFNLHFDQUd4QixHQUFJVSxFQUFRRSxvQkFFMEIsSUFBOUJGLEVBQVFFLG9CQUE0RCxJQUE5QkYsRUFBUUUsa0JBQzlDLE1BQU0sSUFBSVosTUFBTSwrREEvRDVCLEksRUFBQSxHLEVBQUEsUSxrUkNDQSxJQUFJekcsRUFBVyxFQUFRLEdBR3ZCcEUsRUFBT0QsUUFBVSxTQUFVc0UsRUFBSWIsR0FDN0IsSUFBS1ksRUFBU0MsR0FBSyxPQUFPQSxFQUMxQixJQUFJa0QsRUFBSXRCLEVBQ1IsR0FBSXpDLEdBQWtDLG1CQUFyQitELEVBQUtsRCxFQUFHOEMsWUFBNEIvQyxFQUFTNkIsRUFBTXNCLEVBQUc1RyxLQUFLMEQsSUFBTSxPQUFPNEIsRUFDekYsR0FBZ0MsbUJBQXBCc0IsRUFBS2xELEVBQUdxSCxXQUEyQnRILEVBQVM2QixFQUFNc0IsRUFBRzVHLEtBQUswRCxJQUFNLE9BQU80QixFQUNuRixJQUFLekMsR0FBa0MsbUJBQXJCK0QsRUFBS2xELEVBQUc4QyxZQUE0Qi9DLEVBQVM2QixFQUFNc0IsRUFBRzVHLEtBQUswRCxJQUFNLE9BQU80QixFQUMxRixNQUFNM0IsVUFBVSw2QyxjQ1RsQnRFLEVBQU9ELFFBQVUsU0FBVXNFLEdBQ3pCLEdBQVVOLE1BQU5NLEVBQWlCLE1BQU1DLFVBQVUseUJBQTJCRCxHQUNoRSxPQUFPQSxJLGdCQ0ZULElBQUl4QixFQUFVLEVBQVEsR0FDbEJKLEVBQU8sRUFBUSxJQUNmNkQsRUFBUSxFQUFRLEdBQ3BCdEcsRUFBT0QsUUFBVSxTQUFVNEwsRUFBS2pILEdBQzlCLElBQUk2QyxHQUFNOUUsRUFBS3ZCLFFBQVUsSUFBSXlLLElBQVF6SyxPQUFPeUssR0FDeEN6SSxFQUFNLEdBQ1ZBLEVBQUl5SSxHQUFPakgsRUFBSzZDLEdBQ2hCMUUsRUFBUUEsRUFBUVcsRUFBSVgsRUFBUU8sRUFBSWtELEdBQU0sV0FBY2lCLEVBQUcsTUFBUSxTQUFVckUsSyxnQkNEM0UsSUFBSU4sRUFBTSxFQUFRLElBQ2QwRyxFQUFVLEVBQVEsSUFDbEJLLEVBQVcsRUFBUSxHQUNuQmlDLEVBQVcsRUFBUSxHQUNuQkMsRUFBTSxFQUFRLElBQ2xCN0wsRUFBT0QsUUFBVSxTQUFVK0wsRUFBTUMsR0FDL0IsSUFBSUMsRUFBaUIsR0FBUkYsRUFDVEcsRUFBb0IsR0FBUkgsRUFDWkksRUFBa0IsR0FBUkosRUFDVkssRUFBbUIsR0FBUkwsRUFDWE0sRUFBd0IsR0FBUk4sRUFDaEJPLEVBQW1CLEdBQVJQLEdBQWFNLEVBQ3hCdEssRUFBU2lLLEdBQVdGLEVBQ3hCLE9BQU8sU0FBVVMsRUFBT0MsRUFBWXBDLEdBUWxDLElBUEEsSUFNSWxFLEVBQUt1RyxFQU5MakgsRUFBSW9FLEVBQVMyQyxHQUNibk0sRUFBT21KLEVBQVEvRCxHQUNmRCxFQUFJMUMsRUFBSTJKLEVBQVlwQyxFQUFNLEdBQzFCbEQsRUFBUzJFLEVBQVN6TCxFQUFLOEcsUUFDdkJ3RixFQUFRLEVBQ1IzRCxFQUFTa0QsRUFBU2xLLEVBQU93SyxFQUFPckYsR0FBVWdGLEVBQVluSyxFQUFPd0ssRUFBTyxRQUFLdkksRUFFdkVrRCxFQUFTd0YsRUFBT0EsSUFBUyxJQUFJSixHQUFZSSxLQUFTdE0sS0FFdERxTSxFQUFNbEgsRUFETlcsRUFBTTlGLEVBQUtzTSxHQUNFQSxFQUFPbEgsR0FDaEJ1RyxHQUNGLEdBQUlFLEVBQVFsRCxFQUFPMkQsR0FBU0QsT0FDdkIsR0FBSUEsRUFBSyxPQUFRVixHQUNwQixLQUFLLEVBQUcsT0FBTyxFQUNmLEtBQUssRUFBRyxPQUFPN0YsRUFDZixLQUFLLEVBQUcsT0FBT3dHLEVBQ2YsS0FBSyxFQUFHM0QsRUFBTzRELEtBQUt6RyxRQUNmLEdBQUlrRyxFQUFVLE9BQU8sRUFHaEMsT0FBT0MsR0FBaUIsRUFBSUYsR0FBV0MsRUFBV0EsRUFBV3JELEssNkJDeENqRSxHQUFJLEVBQVEsR0FBbUIsQ0FDN0IsSUFBSTZELEVBQVUsRUFBUSxJQUNsQm5LLEVBQVMsRUFBUSxHQUNqQjhELEVBQVEsRUFBUSxHQUNoQnpELEVBQVUsRUFBUSxHQUNsQitKLEVBQVMsRUFBUSxJQUNqQkMsRUFBVSxFQUFRLEtBQ2xCakssRUFBTSxFQUFRLElBQ2RrSyxFQUFhLEVBQVEsSUFDckJDLEVBQWUsRUFBUSxJQUN2QnJLLEVBQU8sRUFBUSxJQUNmc0ssRUFBYyxFQUFRLElBQ3RCakksRUFBWSxFQUFRLElBQ3BCNkcsRUFBVyxFQUFRLEdBQ25CcUIsRUFBVSxFQUFRLEtBQ2xCQyxFQUFrQixFQUFRLElBQzFCOUgsRUFBYyxFQUFRLElBQ3RCTyxFQUFNLEVBQVEsSUFDZHdILEVBQVUsRUFBUSxJQUNsQi9JLEVBQVcsRUFBUSxHQUNuQnVGLEVBQVcsRUFBUSxHQUNuQnlELEVBQWMsRUFBUSxJQUN0QnRMLEVBQVMsRUFBUSxJQUNqQmdJLEVBQWlCLEVBQVEsSUFDekJ1RCxFQUFPLEVBQVEsSUFBa0IvSCxFQUNqQ2dJLEVBQVksRUFBUSxJQUNwQnpJLEVBQU0sRUFBUSxJQUNkMEksRUFBTSxFQUFRLEdBQ2RDLEVBQW9CLEVBQVEsSUFDNUJDLEVBQXNCLEVBQVEsSUFDOUJDLEVBQXFCLEVBQVEsSUFDN0JDLEVBQWlCLEVBQVEsSUFDekJDLEVBQVksRUFBUSxJQUNwQkMsRUFBYyxFQUFRLElBQ3RCQyxFQUFhLEVBQVEsSUFDckJDLEVBQVksRUFBUSxJQUNwQkMsRUFBa0IsRUFBUSxLQUMxQkMsRUFBTSxFQUFRLEdBQ2RDLEVBQVEsRUFBUSxJQUNoQjdJLEVBQUs0SSxFQUFJM0ksRUFDVG1FLEVBQU95RSxFQUFNNUksRUFDYjZJLEVBQWEzTCxFQUFPMkwsV0FDcEI3SixFQUFZOUIsRUFBTzhCLFVBQ25COEosRUFBYTVMLEVBQU80TCxXQUtwQkMsRUFBYXRELE1BQWUsVUFDNUJ1RCxFQUFlekIsRUFBUWpGLFlBQ3ZCMkcsRUFBWTFCLEVBQVEyQixTQUNwQkMsRUFBZWpCLEVBQWtCLEdBQ2pDa0IsRUFBY2xCLEVBQWtCLEdBQ2hDbUIsRUFBWW5CLEVBQWtCLEdBQzlCb0IsRUFBYXBCLEVBQWtCLEdBQy9CcUIsRUFBWXJCLEVBQWtCLEdBQzlCc0IsR0FBaUJ0QixFQUFrQixHQUNuQ3VCLEdBQWdCdEIsR0FBb0IsR0FDcEN1QixHQUFldkIsR0FBb0IsR0FDbkN3QixHQUFjdEIsRUFBZXVCLE9BQzdCQyxHQUFZeEIsRUFBZXlCLEtBQzNCQyxHQUFlMUIsRUFBZXRDLFFBQzlCaUUsR0FBbUJqQixFQUFXa0IsWUFDOUJDLEdBQWNuQixFQUFXb0IsT0FDekJDLEdBQW1CckIsRUFBV3NCLFlBQzlCQyxHQUFZdkIsRUFBV2pJLEtBQ3ZCeUosR0FBWXhCLEVBQVd5QixLQUN2QkMsR0FBYTFCLEVBQVdoRSxNQUN4QjJGLEdBQWdCM0IsRUFBV2xILFNBQzNCOEksR0FBc0I1QixFQUFXNkIsZUFDakNDLEdBQVc1QyxFQUFJLFlBQ2Y2QyxHQUFNN0MsRUFBSSxlQUNWOEMsR0FBb0J4TCxFQUFJLHFCQUN4QnlMLEdBQWtCekwsRUFBSSxtQkFDdEIwTCxHQUFtQjNELEVBQU80RCxPQUMxQkMsR0FBYzdELEVBQU84RCxNQUNyQkMsR0FBTy9ELEVBQU8rRCxLQUdkQyxHQUFPcEQsRUFBa0IsR0FBRyxTQUFVakksRUFBRzBCLEdBQzNDLE9BQU80SixHQUFTbkQsRUFBbUJuSSxFQUFHQSxFQUFFK0ssS0FBbUJySixNQUd6RDZKLEdBQWdCeEssR0FBTSxXQUV4QixPQUEwRCxJQUFuRCxJQUFJOEgsRUFBVyxJQUFJMkMsWUFBWSxDQUFDLElBQUlqSixRQUFRLE1BR2pEa0osS0FBZTVDLEtBQWdCQSxFQUFvQixVQUFFNkMsS0FBTzNLLEdBQU0sV0FDcEUsSUFBSThILEVBQVcsR0FBRzZDLElBQUksT0FHcEJDLEdBQVcsU0FBVTdNLEVBQUk4TSxHQUMzQixJQUFJQyxFQUFTck0sRUFBVVYsR0FDdkIsR0FBSStNLEVBQVMsR0FBS0EsRUFBU0QsRUFBTyxNQUFNaEQsRUFBVyxpQkFDbkQsT0FBT2lELEdBR0xDLEdBQVcsU0FBVWhOLEdBQ3ZCLEdBQUlELEVBQVNDLElBQU9vTSxNQUFlcE0sRUFBSSxPQUFPQSxFQUM5QyxNQUFNQyxFQUFVRCxFQUFLLDJCQUduQndNLEdBQVcsU0FBVVMsRUFBR3JLLEdBQzFCLEtBQU03QyxFQUFTa04sSUFBTWpCLE1BQXFCaUIsR0FDeEMsTUFBTWhOLEVBQVUsd0NBQ2hCLE9BQU8sSUFBSWdOLEVBQUVySyxJQUdic0ssR0FBa0IsU0FBVWhNLEVBQUdpTSxHQUNqQyxPQUFPQyxHQUFTL0QsRUFBbUJuSSxFQUFHQSxFQUFFK0ssS0FBbUJrQixJQUd6REMsR0FBVyxTQUFVSCxFQUFHRSxHQUkxQixJQUhBLElBQUkvRSxFQUFRLEVBQ1J4RixFQUFTdUssRUFBS3ZLLE9BQ2Q2QixFQUFTK0gsR0FBU1MsRUFBR3JLLEdBQ2xCQSxFQUFTd0YsR0FBTzNELEVBQU8yRCxHQUFTK0UsRUFBSy9FLEtBQzVDLE9BQU8zRCxHQUdMNEksR0FBWSxTQUFVck4sRUFBSXRDLEVBQUs0UCxHQUNqQ3RNLEVBQUdoQixFQUFJdEMsRUFBSyxDQUFFVixJQUFLLFdBQWMsT0FBT2pCLEtBQUt3UixHQUFHRCxPQUc5Q0UsR0FBUSxTQUFjOU8sR0FDeEIsSUFLSXZDLEVBQUd5RyxFQUFRaUksRUFBUXBHLEVBQVFnSixFQUFNQyxFQUxqQ3hNLEVBQUlvRSxFQUFTNUcsR0FDYmlQLEVBQU9oSixVQUFVL0IsT0FDakJnTCxFQUFRRCxFQUFPLEVBQUloSixVQUFVLFFBQUtqRixFQUNsQ21PLE9BQW9Cbk8sSUFBVmtPLEVBQ1ZFLEVBQVM3RSxFQUFVL0gsR0FFdkIsR0FBY3hCLE1BQVZvTyxJQUF3Qi9FLEVBQVkrRSxHQUFTLENBQy9DLElBQUtKLEVBQVdJLEVBQU94UixLQUFLNEUsR0FBSTJKLEVBQVMsR0FBSTFPLEVBQUksSUFBS3NSLEVBQU9DLEVBQVNLLFFBQVFDLEtBQU03UixJQUNsRjBPLEVBQU94QyxLQUFLb0YsRUFBS3JRLE9BQ2pCOEQsRUFBSTJKLEVBR1IsSUFESWdELEdBQVdGLEVBQU8sSUFBR0MsRUFBUXJQLEVBQUlxUCxFQUFPakosVUFBVSxHQUFJLElBQ3JEeEksRUFBSSxFQUFHeUcsRUFBUzJFLEVBQVNyRyxFQUFFMEIsUUFBUzZCLEVBQVMrSCxHQUFTelEsS0FBTTZHLEdBQVNBLEVBQVN6RyxFQUFHQSxJQUNwRnNJLEVBQU90SSxHQUFLMFIsRUFBVUQsRUFBTTFNLEVBQUUvRSxHQUFJQSxHQUFLK0UsRUFBRS9FLEdBRTNDLE9BQU9zSSxHQUdMd0osR0FBTSxXQUlSLElBSEEsSUFBSTdGLEVBQVEsRUFDUnhGLEVBQVMrQixVQUFVL0IsT0FDbkI2QixFQUFTK0gsR0FBU3pRLEtBQU02RyxHQUNyQkEsRUFBU3dGLEdBQU8zRCxFQUFPMkQsR0FBU3pELFVBQVV5RCxLQUNqRCxPQUFPM0QsR0FJTHlKLEtBQWtCbkUsR0FBYzlILEdBQU0sV0FBYzJKLEdBQW9CdFAsS0FBSyxJQUFJeU4sRUFBVyxPQUU1Rm9FLEdBQWtCLFdBQ3BCLE9BQU92QyxHQUFvQjdGLE1BQU1tSSxHQUFnQnhDLEdBQVdwUCxLQUFLMFEsR0FBU2pSLE9BQVNpUixHQUFTalIsTUFBTzRJLFlBR2pHeUosR0FBUSxDQUNWQyxXQUFZLFNBQW9CN08sRUFBUThPLEdBQ3RDLE9BQU8zRSxFQUFnQnJOLEtBQUswUSxHQUFTalIsTUFBT3lELEVBQVE4TyxFQUFPM0osVUFBVS9CLE9BQVMsRUFBSStCLFVBQVUsUUFBS2pGLElBRW5HNk8sTUFBTyxTQUFlckcsR0FDcEIsT0FBT3FDLEVBQVd5QyxHQUFTalIsTUFBT21NLEVBQVl2RCxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsSUFFdEY4TyxLQUFNLFNBQWNwUixHQUNsQixPQUFPc00sRUFBVTNELE1BQU1pSCxHQUFTalIsTUFBTzRJLFlBRXpDOEosT0FBUSxTQUFnQnZHLEdBQ3RCLE9BQU9nRixHQUFnQm5SLEtBQU1zTyxFQUFZMkMsR0FBU2pSLE1BQU9tTSxFQUN2RHZELFVBQVUvQixPQUFTLEVBQUkrQixVQUFVLFFBQUtqRixLQUUxQ2dQLEtBQU0sU0FBY0MsR0FDbEIsT0FBT25FLEVBQVV3QyxHQUFTalIsTUFBTzRTLEVBQVdoSyxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsSUFFcEZrUCxVQUFXLFNBQW1CRCxHQUM1QixPQUFPbEUsR0FBZXVDLEdBQVNqUixNQUFPNFMsRUFBV2hLLFVBQVUvQixPQUFTLEVBQUkrQixVQUFVLFFBQUtqRixJQUV6RnNELFFBQVMsU0FBaUJrRixHQUN4QmtDLEVBQWE0QyxHQUFTalIsTUFBT21NLEVBQVl2RCxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsSUFFakZtUCxRQUFTLFNBQWlCQyxHQUN4QixPQUFPbkUsR0FBYXFDLEdBQVNqUixNQUFPK1MsRUFBZW5LLFVBQVUvQixPQUFTLEVBQUkrQixVQUFVLFFBQUtqRixJQUUzRnFQLFNBQVUsU0FBa0JELEdBQzFCLE9BQU9wRSxHQUFjc0MsR0FBU2pSLE1BQU8rUyxFQUFlbkssVUFBVS9CLE9BQVMsRUFBSStCLFVBQVUsUUFBS2pGLElBRTVGcUMsS0FBTSxTQUFjaU4sR0FDbEIsT0FBT3pELEdBQVV4RixNQUFNaUgsR0FBU2pSLE1BQU80SSxZQUV6Q3VHLFlBQWEsU0FBcUI0RCxHQUNoQyxPQUFPN0QsR0FBaUJsRixNQUFNaUgsR0FBU2pSLE1BQU80SSxZQUVoRHNLLElBQUssU0FBYXJCLEdBQ2hCLE9BQU9yQixHQUFLUyxHQUFTalIsTUFBTzZSLEVBQU9qSixVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsSUFFM0UwTCxPQUFRLFNBQWdCbEQsR0FDdEIsT0FBT2lELEdBQVlwRixNQUFNaUgsR0FBU2pSLE1BQU80SSxZQUUzQzJHLFlBQWEsU0FBcUJwRCxHQUNoQyxPQUFPbUQsR0FBaUJ0RixNQUFNaUgsR0FBU2pSLE1BQU80SSxZQUVoRHVLLFFBQVMsV0FNUCxJQUxBLElBSUk5UixFQUhBd0YsRUFBU29LLEdBREZqUixNQUNpQjZHLE9BQ3hCdU0sRUFBU2hQLEtBQUsrRixNQUFNdEQsRUFBUyxHQUM3QndGLEVBQVEsRUFFTEEsRUFBUStHLEdBQ2IvUixFQU5TckIsS0FNSXFNLEdBTkpyTSxLQU9KcU0sS0FQSXJNLE9BT2M2RyxHQVBkN0csS0FRSjZHLEdBQVV4RixFQUNmLE9BVFNyQixNQVdicVQsS0FBTSxTQUFjbEgsR0FDbEIsT0FBT29DLEVBQVUwQyxHQUFTalIsTUFBT21NLEVBQVl2RCxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsSUFFckYrTCxLQUFNLFNBQWM0RCxHQUNsQixPQUFPN0QsR0FBVWxQLEtBQUswUSxHQUFTalIsTUFBT3NULElBRXhDQyxTQUFVLFNBQWtCQyxFQUFPQyxHQUNqQyxJQUFJdE8sRUFBSThMLEdBQVNqUixNQUNiNkcsRUFBUzFCLEVBQUUwQixPQUNYNk0sRUFBUzVHLEVBQWdCMEcsRUFBTzNNLEdBQ3BDLE9BQU8sSUFBS3lHLEVBQW1CbkksRUFBR0EsRUFBRStLLEtBQTdCLENBQ0wvSyxFQUFFdUMsT0FDRnZDLEVBQUV3TyxXQUFhRCxFQUFTdk8sRUFBRXlPLGtCQUMxQnBJLFFBQWtCN0gsSUFBUjhQLEVBQW9CNU0sRUFBU2lHLEVBQWdCMkcsRUFBSzVNLElBQVc2TSxNQUt6RUcsR0FBUyxTQUFldEIsRUFBT2tCLEdBQ2pDLE9BQU90QyxHQUFnQm5SLEtBQU0yUCxHQUFXcFAsS0FBSzBRLEdBQVNqUixNQUFPdVMsRUFBT2tCLEtBR2xFSyxHQUFPLFNBQWFDLEdBQ3RCOUMsR0FBU2pSLE1BQ1QsSUFBSWdSLEVBQVNGLEdBQVNsSSxVQUFVLEdBQUksR0FDaEMvQixFQUFTN0csS0FBSzZHLE9BQ2RtTixFQUFNekssRUFBU3dLLEdBQ2ZFLEVBQU16SSxFQUFTd0ksRUFBSW5OLFFBQ25Cd0YsRUFBUSxFQUNaLEdBQUk0SCxFQUFNakQsRUFBU25LLEVBQVEsTUFBTWtILEVBdktoQixpQkF3S2pCLEtBQU8xQixFQUFRNEgsR0FBS2pVLEtBQUtnUixFQUFTM0UsR0FBUzJILEVBQUkzSCxNQUc3QzZILEdBQWEsQ0FDZmpKLFFBQVMsV0FDUCxPQUFPZ0UsR0FBYTFPLEtBQUswUSxHQUFTalIsUUFFcENnUCxLQUFNLFdBQ0osT0FBT0QsR0FBVXhPLEtBQUswUSxHQUFTalIsUUFFakM4TyxPQUFRLFdBQ04sT0FBT0QsR0FBWXRPLEtBQUswUSxHQUFTalIsU0FJakNtVSxHQUFZLFNBQVUxUSxFQUFROUIsR0FDaEMsT0FBT3FDLEVBQVNQLElBQ1hBLEVBQU80TSxLQUNPLGlCQUFQMU8sR0FDUEEsS0FBTzhCLEdBQ1B3QyxRQUFRdEUsSUFBUXNFLE9BQU90RSxJQUUxQnlTLEdBQVcsU0FBa0MzUSxFQUFROUIsR0FDdkQsT0FBT3dTLEdBQVUxUSxFQUFROUIsRUFBTXFELEVBQVlyRCxHQUFLLElBQzVDZ0wsRUFBYSxFQUFHbEosRUFBTzlCLElBQ3ZCMEgsRUFBSzVGLEVBQVE5QixJQUVmMFMsR0FBVyxTQUF3QjVRLEVBQVE5QixFQUFLMlMsR0FDbEQsUUFBSUgsR0FBVTFRLEVBQVE5QixFQUFNcUQsRUFBWXJELEdBQUssS0FDeENxQyxFQUFTc1EsSUFDVC9PLEVBQUkrTyxFQUFNLFdBQ1QvTyxFQUFJK08sRUFBTSxRQUNWL08sRUFBSStPLEVBQU0sUUFFVkEsRUFBS0MsY0FDSmhQLEVBQUkrTyxFQUFNLGNBQWVBLEVBQUtFLFVBQzlCalAsRUFBSStPLEVBQU0sZ0JBQWlCQSxFQUFLdFQsV0FJOUJpRSxFQUFHeEIsRUFBUTlCLEVBQUsyUyxJQUZ2QjdRLEVBQU85QixHQUFPMlMsRUFBS2pULE1BQ1pvQyxJQUlOME0sS0FDSHJDLEVBQU01SSxFQUFJa1AsR0FDVnZHLEVBQUkzSSxFQUFJbVAsSUFHVjVSLEVBQVFBLEVBQVFXLEVBQUlYLEVBQVFPLEdBQUttTixHQUFrQixTQUFVLENBQzNEN0cseUJBQTBCOEssR0FDMUJyVCxlQUFnQnNULEtBR2RuTyxHQUFNLFdBQWMwSixHQUFjclAsS0FBSyxTQUN6Q3FQLEdBQWdCQyxHQUFzQixXQUNwQyxPQUFPTCxHQUFValAsS0FBS1AsUUFJMUIsSUFBSXlVLEdBQXdCN0gsRUFBWSxHQUFJeUYsSUFDNUN6RixFQUFZNkgsR0FBdUJQLElBQ25DNVIsRUFBS21TLEdBQXVCMUUsR0FBVW1FLEdBQVdwRixRQUNqRGxDLEVBQVk2SCxHQUF1QixDQUNqQ3hLLE1BQU80SixHQUNQaEQsSUFBS2lELEdBQ0xuSyxZQUFhLGFBQ2I1QyxTQUFVNkksR0FDVkUsZUFBZ0JzQyxLQUVsQmQsR0FBVW1ELEdBQXVCLFNBQVUsS0FDM0NuRCxHQUFVbUQsR0FBdUIsYUFBYyxLQUMvQ25ELEdBQVVtRCxHQUF1QixhQUFjLEtBQy9DbkQsR0FBVW1ELEdBQXVCLFNBQVUsS0FDM0N4UCxFQUFHd1AsR0FBdUJ6RSxHQUFLLENBQzdCL08sSUFBSyxXQUFjLE9BQU9qQixLQUFLcVEsT0FJakN6USxFQUFPRCxRQUFVLFNBQVU0TCxFQUFLd0YsRUFBTzJELEVBQVNDLEdBRTlDLElBQUlqTyxFQUFPNkUsSUFEWG9KLElBQVlBLEdBQ2dCLFVBQVksSUFBTSxRQUMxQ0MsRUFBUyxNQUFRckosRUFDakJzSixFQUFTLE1BQVF0SixFQUNqQnVKLEVBQWExUyxFQUFPc0UsR0FDcEJxTyxFQUFPRCxHQUFjLEdBQ3JCRSxFQUFNRixHQUFjcEwsRUFBZW9MLEdBQ25DRyxHQUFVSCxJQUFldEksRUFBTzBJLElBQ2hDL1AsRUFBSSxHQUNKZ1EsRUFBc0JMLEdBQWNBLEVBQW9CLFVBVXhETSxFQUFhLFNBQVVyTCxFQUFNc0MsR0FDL0JwSCxFQUFHOEUsRUFBTXNDLEVBQU8sQ0FDZHBMLElBQUssV0FDSCxPQVpPLFNBQVU4SSxFQUFNc0MsR0FDM0IsSUFBSWdKLEVBQU90TCxFQUFLeUgsR0FDaEIsT0FBTzZELEVBQUtDLEVBQUVWLEdBQVF2SSxFQUFRMEUsRUFBUXNFLEVBQUt4VSxFQUFHNlAsSUFVbkM5UCxDQUFPWixLQUFNcU0sSUFFdEJ3RSxJQUFLLFNBQVV4UCxHQUNiLE9BWE8sU0FBVTBJLEVBQU1zQyxFQUFPaEwsR0FDbEMsSUFBSWdVLEVBQU90TCxFQUFLeUgsR0FDWm1ELElBQVN0VCxHQUFTQSxFQUFRK0MsS0FBS21SLE1BQU1sVSxJQUFVLEVBQUksRUFBSUEsRUFBUSxJQUFPLElBQWUsSUFBUkEsR0FDakZnVSxFQUFLQyxFQUFFVCxHQUFReEksRUFBUTBFLEVBQVFzRSxFQUFLeFUsRUFBR1EsRUFBT3FQLElBUW5DOEUsQ0FBT3hWLEtBQU1xTSxFQUFPaEwsSUFFN0JMLFlBQVksS0FHWmlVLEdBQ0ZILEVBQWFKLEdBQVEsU0FBVTNLLEVBQU1zTCxFQUFNSSxFQUFTQyxHQUNsRGhKLEVBQVczQyxFQUFNK0ssRUFBWXBPLEVBQU0sTUFDbkMsSUFFSWdCLEVBQVFpTyxFQUFZOU8sRUFBUStPLEVBRjVCdkosRUFBUSxFQUNSMkUsRUFBUyxFQUViLEdBQUtoTixFQUFTcVIsR0FJUCxNQUFJQSxhQUFnQm5ILEdBaFVkLGdCQWdVK0IwSCxFQUFRN0ksRUFBUXNJLEtBL1Q5QyxxQkErVHdFTyxHQWEvRSxPQUFJdkYsTUFBZWdGLEVBQ2pCaEUsR0FBU3lELEVBQVlPLEdBRXJCNUQsR0FBTWxSLEtBQUt1VSxFQUFZTyxHQWY5QjNOLEVBQVMyTixFQUNUckUsRUFBU0YsR0FBUzJFLEVBQVMxRSxHQUMzQixJQUFJOEUsRUFBT1IsRUFBS00sV0FDaEIsUUFBZ0JoUyxJQUFaK1IsRUFBdUIsQ0FDekIsR0FBSUcsRUFBTzlFLEVBQU8sTUFBTWhELEVBcFNmLGlCQXNTVCxJQURBNEgsRUFBYUUsRUFBTzdFLEdBQ0gsRUFBRyxNQUFNakQsRUF0U2pCLHNCQXlTVCxJQURBNEgsRUFBYW5LLEVBQVNrSyxHQUFXM0UsR0FDaEJDLEVBQVM2RSxFQUFNLE1BQU05SCxFQXpTN0IsaUJBMlNYbEgsRUFBUzhPLEVBQWE1RSxPQWZ0QmxLLEVBQVNnRyxFQUFRd0ksR0FFakIzTixFQUFTLElBQUl3RyxFQURieUgsRUFBYTlPLEVBQVNrSyxHQTJCeEIsSUFQQXpPLEVBQUt5SCxFQUFNLEtBQU0sQ0FDZmpCLEVBQUdwQixFQUNIN0csRUFBR21RLEVBQ0gzUSxFQUFHc1YsRUFDSHBSLEVBQUdzQyxFQUNIeU8sRUFBRyxJQUFJbkgsRUFBVXpHLEtBRVoyRSxFQUFReEYsR0FBUXVPLEVBQVdyTCxFQUFNc0MsUUFFMUM4SSxFQUFzQkwsRUFBb0IsVUFBSXBULEVBQU8rUyxJQUNyRG5TLEVBQUs2UyxFQUFxQixjQUFlTCxJQUMvQjVPLEdBQU0sV0FDaEI0TyxFQUFXLE9BQ041TyxHQUFNLFdBQ1gsSUFBSTRPLEdBQVksT0FDWHJILEdBQVksU0FBVXFJLEdBQzNCLElBQUloQixFQUNKLElBQUlBLEVBQVcsTUFDZixJQUFJQSxFQUFXLEtBQ2YsSUFBSUEsRUFBV2dCLE1BQ2QsS0FDRGhCLEVBQWFKLEdBQVEsU0FBVTNLLEVBQU1zTCxFQUFNSSxFQUFTQyxHQUVsRCxJQUFJRSxFQUdKLE9BSkFsSixFQUFXM0MsRUFBTStLLEVBQVlwTyxHQUl4QjFDLEVBQVNxUixHQUNWQSxhQUFnQm5ILEdBN1dQLGdCQTZXd0IwSCxFQUFRN0ksRUFBUXNJLEtBNVd2QyxxQkE0V2lFTyxPQUMxRGpTLElBQVorUixFQUNILElBQUlYLEVBQUtNLEVBQU12RSxHQUFTMkUsRUFBUzFFLEdBQVEyRSxRQUM3Qi9SLElBQVo4UixFQUNFLElBQUlWLEVBQUtNLEVBQU12RSxHQUFTMkUsRUFBUzFFLElBQ2pDLElBQUlnRSxFQUFLTSxHQUViaEYsTUFBZWdGLEVBQWFoRSxHQUFTeUQsRUFBWU8sR0FDOUM1RCxHQUFNbFIsS0FBS3VVLEVBQVlPLEdBVEYsSUFBSU4sRUFBS2xJLEVBQVF3SSxPQVcvQ2hILEVBQWEyRyxJQUFRcFIsU0FBUzVCLFVBQVlpTCxFQUFLOEgsR0FBTWdCLE9BQU85SSxFQUFLK0gsSUFBUS9ILEVBQUs4SCxJQUFPLFNBQVVwVCxHQUN2RkEsS0FBT21ULEdBQWF4UyxFQUFLd1MsRUFBWW5ULEVBQUtvVCxFQUFLcFQsT0FFdkRtVCxFQUFvQixVQUFJSyxFQUNuQjVJLElBQVM0SSxFQUFvQnhMLFlBQWNtTCxJQUVsRCxJQUFJa0IsRUFBa0JiLEVBQW9CcEYsSUFDdENrRyxJQUFzQkQsSUFDSSxVQUF4QkEsRUFBZ0JyVixNQUE0Q2dELE1BQXhCcVMsRUFBZ0JyVixNQUN0RHVWLEVBQVloQyxHQUFXcEYsT0FDM0J4TSxFQUFLd1MsRUFBWTdFLElBQW1CLEdBQ3BDM04sRUFBSzZTLEVBQXFCOUUsR0FBYTNKLEdBQ3ZDcEUsRUFBSzZTLEVBQXFCNUUsSUFBTSxHQUNoQ2pPLEVBQUs2UyxFQUFxQmpGLEdBQWlCNEUsSUFFdkNILEVBQVUsSUFBSUcsRUFBVyxHQUFHOUUsS0FBUXRKLEVBQVNzSixNQUFPbUYsSUFDdERsUSxFQUFHa1EsRUFBcUJuRixHQUFLLENBQzNCL08sSUFBSyxXQUFjLE9BQU95RixLQUk5QnZCLEVBQUV1QixHQUFRb08sRUFFVnJTLEVBQVFBLEVBQVFTLEVBQUlULEVBQVFxQixFQUFJckIsRUFBUU8sR0FBSzhSLEdBQWNDLEdBQU81UCxHQUVsRTFDLEVBQVFBLEVBQVFXLEVBQUdzRCxFQUFNLENBQ3ZCa04sa0JBQW1CN0MsSUFHckJ0TyxFQUFRQSxFQUFRVyxFQUFJWCxFQUFRTyxFQUFJa0QsR0FBTSxXQUFjNk8sRUFBS29CLEdBQUc1VixLQUFLdVUsRUFBWSxNQUFRcE8sRUFBTSxDQUN6RjBQLEtBQU0zRSxHQUNOMEUsR0FBSWpFLEtBcFpnQixzQkF1WktpRCxHQUFzQjdTLEVBQUs2UyxFQXZaaEMsb0JBdVp3RXBFLEdBRTlGdE8sRUFBUUEsRUFBUWEsRUFBR29ELEVBQU0yTCxJQUV6QjNFLEVBQVdoSCxHQUVYakUsRUFBUUEsRUFBUWEsRUFBSWIsRUFBUU8sRUFBSTROLEdBQVlsSyxFQUFNLENBQUVtSyxJQUFLaUQsS0FFekRyUixFQUFRQSxFQUFRYSxFQUFJYixFQUFRTyxHQUFLaVQsRUFBbUJ2UCxFQUFNd04sSUFFckQzSCxHQUFXNEksRUFBb0JwTyxVQUFZNkksS0FBZXVGLEVBQW9CcE8sU0FBVzZJLElBRTlGbk4sRUFBUUEsRUFBUWEsRUFBSWIsRUFBUU8sRUFBSWtELEdBQU0sV0FDcEMsSUFBSTRPLEVBQVcsR0FBRzdLLFdBQ2hCdkQsRUFBTSxDQUFFdUQsTUFBTzRKLEtBRW5CcFIsRUFBUUEsRUFBUWEsRUFBSWIsRUFBUU8sR0FBS2tELEdBQU0sV0FDckMsTUFBTyxDQUFDLEVBQUcsR0FBRzRKLGtCQUFvQixJQUFJZ0YsRUFBVyxDQUFDLEVBQUcsSUFBSWhGLHNCQUNwRDVKLEdBQU0sV0FDWGlQLEVBQW9CckYsZUFBZXZQLEtBQUssQ0FBQyxFQUFHLFFBQ3pDbUcsRUFBTSxDQUFFb0osZUFBZ0JzQyxLQUU3QjVFLEVBQVU5RyxHQUFRdVAsRUFBb0JELEVBQWtCRSxFQUNuRDNKLEdBQVkwSixHQUFtQjNULEVBQUs2UyxFQUFxQnBGLEdBQVVtRyxTQUVyRXRXLEVBQU9ELFFBQVUsYyxnQkMvZHhCLElBQUkwVyxFQUFNLEVBQVEsS0FDZDVULEVBQVUsRUFBUSxHQUNsQjZULEVBQVMsRUFBUSxHQUFSLENBQXFCLFlBQzlCOVIsRUFBUThSLEVBQU85UixRQUFVOFIsRUFBTzlSLE1BQVEsSUFBSyxFQUFRLE9BRXJEK1IsRUFBeUIsU0FBVTlTLEVBQVErUyxFQUFXOVUsR0FDeEQsSUFBSStVLEVBQWlCalMsRUFBTXZELElBQUl3QyxHQUMvQixJQUFLZ1QsRUFBZ0IsQ0FDbkIsSUFBSy9VLEVBQVEsT0FDYjhDLEVBQU1xTSxJQUFJcE4sRUFBUWdULEVBQWlCLElBQUlKLEdBRXpDLElBQUlLLEVBQWNELEVBQWV4VixJQUFJdVYsR0FDckMsSUFBS0UsRUFBYSxDQUNoQixJQUFLaFYsRUFBUSxPQUNiK1UsRUFBZTVGLElBQUkyRixFQUFXRSxFQUFjLElBQUlMLEdBQ2hELE9BQU9LLEdBMEJYOVcsRUFBT0QsUUFBVSxDQUNmNkUsTUFBT0EsRUFDUDBPLElBQUtxRCxFQUNMaFIsSUEzQjJCLFNBQVVvUixFQUFheFIsRUFBRzdCLEdBQ3JELElBQUlzVCxFQUFjTCxFQUF1QnBSLEVBQUc3QixHQUFHLEdBQy9DLFlBQXVCSyxJQUFoQmlULEdBQW9DQSxFQUFZclIsSUFBSW9SLElBMEIzRDFWLElBeEIyQixTQUFVMFYsRUFBYXhSLEVBQUc3QixHQUNyRCxJQUFJc1QsRUFBY0wsRUFBdUJwUixFQUFHN0IsR0FBRyxHQUMvQyxZQUF1QkssSUFBaEJpVCxPQUE0QmpULEVBQVlpVCxFQUFZM1YsSUFBSTBWLElBdUIvRDlGLElBckI4QixTQUFVOEYsRUFBYUUsRUFBZTFSLEVBQUc3QixHQUN2RWlULEVBQXVCcFIsRUFBRzdCLEdBQUcsR0FBTXVOLElBQUk4RixFQUFhRSxJQXFCcEQ3SCxLQW5CNEIsU0FBVXZMLEVBQVErUyxHQUM5QyxJQUFJSSxFQUFjTCxFQUF1QjlTLEVBQVErUyxHQUFXLEdBQ3hEeEgsRUFBTyxHQUVYLE9BREk0SCxHQUFhQSxFQUFZM1AsU0FBUSxTQUFVNlAsRUFBR25WLEdBQU9xTixFQUFLMUMsS0FBSzNLLE1BQzVEcU4sR0FnQlByTixJQWRjLFNBQVVzQyxHQUN4QixZQUFjTixJQUFQTSxHQUFpQyxpQkFBTkEsRUFBaUJBLEVBQUtnQyxPQUFPaEMsSUFjL0RuQixJQVpRLFNBQVVxQyxHQUNsQjFDLEVBQVFBLEVBQVFXLEVBQUcsVUFBVytCLE0sY0N0Q2hDdkYsRUFBT0QsU0FBVSxHLGdCQ0FqQixJQUFJb1gsRUFBTyxFQUFRLEdBQVIsQ0FBa0IsUUFDekIvUyxFQUFXLEVBQVEsR0FDbkJ1QixFQUFNLEVBQVEsSUFDZHlSLEVBQVUsRUFBUSxHQUFnQjlSLEVBQ2xDK1IsRUFBSyxFQUNMQyxFQUFlcFcsT0FBT29XLGNBQWdCLFdBQ3hDLE9BQU8sR0FFTEMsR0FBVSxFQUFRLEVBQVIsRUFBb0IsV0FDaEMsT0FBT0QsRUFBYXBXLE9BQU9zVyxrQkFBa0IsUUFFM0NDLEVBQVUsU0FBVXBULEdBQ3RCK1MsRUFBUS9TLEVBQUk4UyxFQUFNLENBQUUxVixNQUFPLENBQ3pCakIsRUFBRyxPQUFRNlcsRUFDWEssRUFBRyxPQWdDSEMsRUFBTzNYLEVBQU9ELFFBQVUsQ0FDMUI0TCxJQUFLd0wsRUFDTFMsTUFBTSxFQUNOQyxRQWhDWSxTQUFVeFQsRUFBSXZDLEdBRTFCLElBQUtzQyxFQUFTQyxHQUFLLE1BQW9CLGlCQUFOQSxFQUFpQkEsR0FBbUIsaUJBQU5BLEVBQWlCLElBQU0sS0FBT0EsRUFDN0YsSUFBS3NCLEVBQUl0QixFQUFJOFMsR0FBTyxDQUVsQixJQUFLRyxFQUFhalQsR0FBSyxNQUFPLElBRTlCLElBQUt2QyxFQUFRLE1BQU8sSUFFcEIyVixFQUFRcFQsR0FFUixPQUFPQSxFQUFHOFMsR0FBTTNXLEdBc0JsQnNYLFFBcEJZLFNBQVV6VCxFQUFJdkMsR0FDMUIsSUFBSzZELEVBQUl0QixFQUFJOFMsR0FBTyxDQUVsQixJQUFLRyxFQUFhalQsR0FBSyxPQUFPLEVBRTlCLElBQUt2QyxFQUFRLE9BQU8sRUFFcEIyVixFQUFRcFQsR0FFUixPQUFPQSxFQUFHOFMsR0FBTU8sR0FZbEJLLFNBVGEsU0FBVTFULEdBRXZCLE9BRElrVCxHQUFVSSxFQUFLQyxNQUFRTixFQUFhalQsS0FBUXNCLEVBQUl0QixFQUFJOFMsSUFBT00sRUFBUXBULEdBQ2hFQSxLLGdCQzNDVCxJQUFJMlQsRUFBYyxFQUFRLEVBQVIsQ0FBa0IsZUFDaEMzSixFQUFhdEQsTUFBTTNJLFVBQ1EyQixNQUEzQnNLLEVBQVcySixJQUEyQixFQUFRLEdBQVIsQ0FBbUIzSixFQUFZMkosRUFBYSxJQUN0RmhZLEVBQU9ELFFBQVUsU0FBVWdDLEdBQ3pCc00sRUFBVzJKLEdBQWFqVyxJQUFPLEksY0NMakMvQixFQUFPRCxRQUFVLFNBQVVrWSxFQUFReFcsR0FDakMsTUFBTyxDQUNMTCxhQUF1QixFQUFUNlcsR0FDZHRELGVBQXlCLEVBQVRzRCxHQUNoQnJELFdBQXFCLEVBQVRxRCxHQUNaeFcsTUFBT0EsSyxjQ0xYLElBQUk0VixFQUFLLEVBQ0xhLEVBQUsxVCxLQUFLMlQsU0FDZG5ZLEVBQU9ELFFBQVUsU0FBVWdDLEdBQ3pCLE1BQU8sVUFBVW9VLFlBQWVwUyxJQUFSaEMsRUFBb0IsR0FBS0EsRUFBSyxRQUFTc1YsRUFBS2EsR0FBSS9RLFNBQVMsTyxnQkNGbkYsSUFBSWlSLEVBQVEsRUFBUSxLQUNoQkMsRUFBYyxFQUFRLElBRTFCclksRUFBT0QsUUFBVW1CLE9BQU9rTyxNQUFRLFNBQWM3SixHQUM1QyxPQUFPNlMsRUFBTTdTLEVBQUc4UyxLLGdCQ0xsQixJQUFJdFQsRUFBWSxFQUFRLElBQ3BCdVQsRUFBTTlULEtBQUs4VCxJQUNYdFQsRUFBTVIsS0FBS1EsSUFDZmhGLEVBQU9ELFFBQVUsU0FBVTBNLEVBQU94RixHQUVoQyxPQURBd0YsRUFBUTFILEVBQVUwSCxJQUNILEVBQUk2TCxFQUFJN0wsRUFBUXhGLEVBQVEsR0FBS2pDLEVBQUl5SCxFQUFPeEYsSyxnQkNKekQsSUFBSS9CLEVBQVcsRUFBUSxHQUNuQnFULEVBQU0sRUFBUSxLQUNkRixFQUFjLEVBQVEsSUFDdEJ6TyxFQUFXLEVBQVEsR0FBUixDQUF5QixZQUNwQzRPLEVBQVEsYUFJUkMsRUFBYSxXQUVmLElBSUlDLEVBSkFDLEVBQVMsRUFBUSxHQUFSLENBQXlCLFVBQ2xDblksRUFBSTZYLEVBQVlwUixPQWNwQixJQVZBMFIsRUFBT0MsTUFBTUMsUUFBVSxPQUN2QixFQUFRLElBQVdDLFlBQVlILEdBQy9CQSxFQUFPdkUsSUFBTSxlQUdic0UsRUFBaUJDLEVBQU9JLGNBQWNuUSxVQUN2Qm9RLE9BQ2ZOLEVBQWVPLE1BQU1DLHVDQUNyQlIsRUFBZVMsUUFDZlYsRUFBYUMsRUFBZXRWLEVBQ3JCNUMsWUFBWWlZLEVBQW9CLFVBQUVKLEVBQVk3WCxJQUNyRCxPQUFPaVksS0FHVHpZLEVBQU9ELFFBQVVtQixPQUFPWSxRQUFVLFNBQWdCeUQsRUFBRzZULEdBQ25ELElBQUl0USxFQVFKLE9BUFUsT0FBTnZELEdBQ0ZpVCxFQUFlLFVBQUl0VCxFQUFTSyxHQUM1QnVELEVBQVMsSUFBSTBQLEVBQ2JBLEVBQWUsVUFBSSxLQUVuQjFQLEVBQU9jLEdBQVlyRSxHQUNkdUQsRUFBUzJQLFNBQ00xVSxJQUFmcVYsRUFBMkJ0USxFQUFTeVAsRUFBSXpQLEVBQVFzUSxLLGdCQ3RDekQsSUFBSWhCLEVBQVEsRUFBUSxLQUNoQmlCLEVBQWEsRUFBUSxJQUFvQmxELE9BQU8sU0FBVSxhQUU5RHBXLEVBQVF1RixFQUFJcEUsT0FBT29ZLHFCQUF1QixTQUE2Qi9ULEdBQ3JFLE9BQU82UyxFQUFNN1MsRUFBRzhULEssNkJDSmxCLElBQUk3VyxFQUFTLEVBQVEsR0FDakI2QyxFQUFLLEVBQVEsR0FDYmtVLEVBQWMsRUFBUSxHQUN0QkMsRUFBVSxFQUFRLEVBQVIsQ0FBa0IsV0FFaEN4WixFQUFPRCxRQUFVLFNBQVU0TCxHQUN6QixJQUFJMkYsRUFBSTlPLEVBQU9tSixHQUNYNE4sR0FBZWpJLElBQU1BLEVBQUVrSSxJQUFVblUsRUFBR0MsRUFBRWdNLEVBQUdrSSxFQUFTLENBQ3BEN0UsY0FBYyxFQUNkdFQsSUFBSyxXQUFjLE9BQU9qQixVLGNDVjlCSixFQUFPRCxRQUFVLFNBQVVzRSxFQUFJb1YsRUFBYTFZLEVBQU0yWSxHQUNoRCxLQUFNclYsYUFBY29WLFNBQW9DMVYsSUFBbkIyVixHQUFnQ0EsS0FBa0JyVixFQUNyRixNQUFNQyxVQUFVdkQsRUFBTywyQkFDdkIsT0FBT3NELEksZ0JDSFgsSUFBSXpCLEVBQU0sRUFBUSxJQUNkakMsRUFBTyxFQUFRLEtBQ2Z5TSxFQUFjLEVBQVEsSUFDdEJsSSxFQUFXLEVBQVEsR0FDbkIwRyxFQUFXLEVBQVEsR0FDbkIwQixFQUFZLEVBQVEsSUFDcEJxTSxFQUFRLEdBQ1JDLEVBQVMsSUFDVDdaLEVBQVVDLEVBQU9ELFFBQVUsU0FBVThaLEVBQVV4TyxFQUFTOUQsRUFBSTRDLEVBQU1nRyxHQUNwRSxJQUdJbEosRUFBUTZLLEVBQU1DLEVBQVVqSixFQUh4QnFKLEVBQVNoQyxFQUFXLFdBQWMsT0FBTzBKLEdBQWN2TSxFQUFVdU0sR0FDakV2VSxFQUFJMUMsRUFBSTJFLEVBQUk0QyxFQUFNa0IsRUFBVSxFQUFJLEdBQ2hDb0IsRUFBUSxFQUVaLEdBQXFCLG1CQUFWMEYsRUFBc0IsTUFBTTdOLFVBQVV1VixFQUFXLHFCQUU1RCxHQUFJek0sRUFBWStFLElBQVMsSUFBS2xMLEVBQVMyRSxFQUFTaU8sRUFBUzVTLFFBQVNBLEVBQVN3RixFQUFPQSxJQUVoRixJQURBM0QsRUFBU3VDLEVBQVUvRixFQUFFSixFQUFTNE0sRUFBTytILEVBQVNwTixJQUFRLEdBQUlxRixFQUFLLElBQU14TSxFQUFFdVUsRUFBU3BOLE9BQ2pFa04sR0FBUzdRLElBQVc4USxFQUFRLE9BQU85USxPQUM3QyxJQUFLaUosRUFBV0ksRUFBT3hSLEtBQUtrWixLQUFhL0gsRUFBT0MsRUFBU0ssUUFBUUMsTUFFdEUsSUFEQXZKLEVBQVNuSSxFQUFLb1IsRUFBVXpNLEVBQUd3TSxFQUFLclEsTUFBTzRKLE1BQ3hCc08sR0FBUzdRLElBQVc4USxFQUFRLE9BQU85USxJQUc5QzZRLE1BQVFBLEVBQ2hCNVosRUFBUTZaLE9BQVNBLEcsZ0JDeEJqQixJQUFJalgsRUFBVyxFQUFRLElBQ3ZCM0MsRUFBT0QsUUFBVSxTQUFVOEQsRUFBUXVRLEVBQUtsTyxHQUN0QyxJQUFLLElBQUluRSxLQUFPcVMsRUFBS3pSLEVBQVNrQixFQUFROUIsRUFBS3FTLEVBQUlyUyxHQUFNbUUsR0FDckQsT0FBT3JDLEksZ0JDSFQsSUFBSU8sRUFBVyxFQUFRLEdBQ3ZCcEUsRUFBT0QsUUFBVSxTQUFVc0UsRUFBSXlILEdBQzdCLElBQUsxSCxFQUFTQyxJQUFPQSxFQUFHeVYsS0FBT2hPLEVBQU0sTUFBTXhILFVBQVUsMEJBQTRCd0gsRUFBTyxjQUN4RixPQUFPekgsSSxnQkNIVCxJQUFJMFYsRUFBTSxFQUFRLEdBQWdCelUsRUFDOUJLLEVBQU0sRUFBUSxJQUNkeUssRUFBTSxFQUFRLEVBQVIsQ0FBa0IsZUFFNUJwUSxFQUFPRCxRQUFVLFNBQVVzRSxFQUFJcUMsRUFBS3NULEdBQzlCM1YsSUFBT3NCLEVBQUl0QixFQUFLMlYsRUFBTzNWLEVBQUtBLEVBQUdqQyxVQUFXZ08sSUFBTTJKLEVBQUkxVixFQUFJK0wsRUFBSyxDQUFFdUUsY0FBYyxFQUFNbFQsTUFBT2lGLE0sZ0JDSmhHLElBQUl1VCxFQUFNLEVBQVEsSUFDZDdKLEVBQU0sRUFBUSxFQUFSLENBQWtCLGVBRXhCOEosRUFBa0QsYUFBNUNELEVBQUksV0FBYyxPQUFPalIsVUFBckIsSUFTZGhKLEVBQU9ELFFBQVUsU0FBVXNFLEdBQ3pCLElBQUlrQixFQUFHNFUsRUFBR3ZXLEVBQ1YsWUFBY0csSUFBUE0sRUFBbUIsWUFBcUIsT0FBUEEsRUFBYyxPQUVOLGlCQUFwQzhWLEVBVkQsU0FBVTlWLEVBQUl0QyxHQUN6QixJQUNFLE9BQU9zQyxFQUFHdEMsR0FDVixNQUFPNEMsS0FPT3lWLENBQU83VSxFQUFJckUsT0FBT21ELEdBQUsrTCxJQUFvQitKLEVBRXZERCxFQUFNRCxFQUFJMVUsR0FFTSxXQUFmM0IsRUFBSXFXLEVBQUkxVSxLQUFzQyxtQkFBWkEsRUFBRThVLE9BQXVCLFlBQWN6VyxJLGdCQ3JCaEYsSUFBSWYsRUFBVSxFQUFRLEdBQ2xCNEMsRUFBVSxFQUFRLElBQ2xCYSxFQUFRLEVBQVEsR0FDaEJnVSxFQUFTLEVBQVEsSUFDakJDLEVBQVEsSUFBTUQsRUFBUyxJQUV2QkUsRUFBUUMsT0FBTyxJQUFNRixFQUFRQSxFQUFRLEtBQ3JDRyxFQUFRRCxPQUFPRixFQUFRQSxFQUFRLE1BRS9CSSxFQUFXLFNBQVVoUCxFQUFLakgsRUFBTWtXLEdBQ2xDLElBQUkxWCxFQUFNLEdBQ04yWCxFQUFRdlUsR0FBTSxXQUNoQixRQUFTZ1UsRUFBTzNPLE1BUFYsV0FPd0JBLFFBRTVCcEUsRUFBS3JFLEVBQUl5SSxHQUFPa1AsRUFBUW5XLEVBQUswRSxHQUFRa1IsRUFBTzNPLEdBQzVDaVAsSUFBTzFYLEVBQUkwWCxHQUFTclQsR0FDeEIxRSxFQUFRQSxFQUFRYSxFQUFJYixFQUFRTyxFQUFJeVgsRUFBTyxTQUFVM1gsSUFNL0NrRyxFQUFPdVIsRUFBU3ZSLEtBQU8sU0FBVTNDLEVBQVFxRixHQUkzQyxPQUhBckYsRUFBU0osT0FBT1osRUFBUWdCLElBQ2IsRUFBUHFGLElBQVVyRixFQUFTQSxFQUFPSSxRQUFRMlQsRUFBTyxLQUNsQyxFQUFQMU8sSUFBVXJGLEVBQVNBLEVBQU9JLFFBQVE2VCxFQUFPLEtBQ3RDalUsR0FHVHpHLEVBQU9ELFFBQVU0YSxHLGNDN0JqQjNhLEVBQU9ELFFBQVUsSSxnQkNBakJDLEVBQU9ELFFBQVUsQ0FDYithLE9BQVEsRUFBUSxLQUNoQkMsT0FBUSxFQUFRLEtBQ2hCQyxlQUFnQixFQUFRLE8sZ0JDSDVCLElBQUl2WSxFQUFPLEVBQVEsSUFDZkQsRUFBUyxFQUFRLEdBRWpCb0MsRUFBUXBDLEVBREMsd0JBQ2tCQSxFQURsQixzQkFDbUMsS0FFL0N4QyxFQUFPRCxRQUFVLFNBQVVnQyxFQUFLTixHQUMvQixPQUFPbUQsRUFBTTdDLEtBQVM2QyxFQUFNN0MsUUFBaUJnQyxJQUFWdEMsRUFBc0JBLEVBQVEsTUFDaEUsV0FBWSxJQUFJaUwsS0FBSyxDQUN0QjFDLFFBQVN2SCxFQUFLdUgsUUFDZHJJLEtBQU0sRUFBUSxJQUFnQixPQUFTLFNBQ3ZDc1osVUFBVywwQyxnQkNUYixJQUFJaEIsRUFBTSxFQUFRLElBRWxCamEsRUFBT0QsUUFBVW1CLE9BQU8sS0FBS2dhLHFCQUFxQixHQUFLaGEsT0FBUyxTQUFVbUQsR0FDeEUsTUFBa0IsVUFBWDRWLEVBQUk1VixHQUFrQkEsRUFBRzBCLE1BQU0sSUFBTTdFLE9BQU9tRCxLLGNDSnJEdEUsRUFBUXVGLEVBQUksR0FBRzRWLHNCLDZCQ0VmLElBQUloVyxFQUFXLEVBQVEsR0FDdkJsRixFQUFPRCxRQUFVLFdBQ2YsSUFBSW9LLEVBQU9qRixFQUFTOUUsTUFDaEIwSSxFQUFTLEdBTWIsT0FMSXFCLEVBQUszSCxTQUFRc0csR0FBVSxLQUN2QnFCLEVBQUtnUixhQUFZclMsR0FBVSxLQUMzQnFCLEVBQUtpUixZQUFXdFMsR0FBVSxLQUMxQnFCLEVBQUtrUixVQUFTdlMsR0FBVSxLQUN4QnFCLEVBQUttUixTQUFReFMsR0FBVSxLQUNwQkEsSSxnQkNWVCxJQUFJNUQsRUFBVyxFQUFRLEdBQ25CZ0YsRUFBWSxFQUFRLElBQ3BCc1AsRUFBVSxFQUFRLEVBQVIsQ0FBa0IsV0FDaEN4WixFQUFPRCxRQUFVLFNBQVV3RixFQUFHZ1csR0FDNUIsSUFDSS9YLEVBREE4TixFQUFJcE0sRUFBU0ssR0FBR3dFLFlBRXBCLFlBQWFoRyxJQUFOdU4sR0FBaUR2TixPQUE3QlAsRUFBSTBCLEVBQVNvTSxHQUFHa0ksSUFBeUIrQixFQUFJclIsRUFBVTFHLEssNkJDTHBGLE1BQU1nWSxFQUFTLEVBQVEsSUFDakJDLEVBQVksRUFBUSxLQUNwQkMsRUFBWSxFQUFRLEtBQ3BCQyxFQUFZLEVBQVEsS0FDcEJDLEVBQVEsRUFBUSxLQUNoQkMsRUFBTSxFQUFRLEtBRWRDLEVBQWEsMkNBQ2JDLEVBQWMsMkJBSWRDLEVBQWMsMkNBdUJwQixTQUFTQyxFQUFPQyxHQUNkLElBRUUsT0FEQSxJQUFJTCxFQUFJSyxJQUNELEVBQ1AsTUFBT3ZYLEdBQ1AsT0FBTyxHQUlYLFNBQVN3WCxFQUFhQyxHQUNwQixJQUFLQSxFQUFPLE9BQU8sRUFDbkIsR0FBSVQsRUFBVVEsWUFBWUMsR0FBUSxPQUFPLEVBQ3pDLElBRUUsT0FEQSxJQUFJVCxFQUFVUyxJQUNQLEVBQ1AsTUFBT3pYLEdBQ1AsT0FBTyxHQVFYLFNBQVMwWCxFQUFRRCxFQUFPRSxFQUFTQyxFQWxESixFQWtEMENDLEVBakQvQyxHQWtEdEIsTUFBTUMsRUFBWUMsRUFBZ0JOLEdBQ2xDLElBQUtLLEVBQ0gsT0FBTyxFQUdULE1BQU1FLEVBQVFGLEVBQVVFLE1BQU1MLEdBQzlCLElBQUtLLEVBQ0gsT0FBTyxFQUdULEdBQTZCLFNBQXpCQSxFQUFNSixHQUNSLE9BQU8sRUFHVCxJQUFJTCxFQUFPUyxFQUFNSCxHQVNqQixPQVBJTixHQUFRSSxJQUFZTixJQUl0QkUsRUFBT0EsRUFBS2xWLGVBR1BpVixFQUFNQyxHQUdmLFNBQVNVLEVBQVFSLEVBQU9FLEVBQVNDLEVBN0VKLEVBNkUwQ0MsR0FDckUsTUFBTUMsRUFBWUMsRUFBZ0JOLEdBQ2xDLElBQUtLLEVBQ0gsT0FBTyxFQUVULE1BQU1FLEVBQVFGLEVBQVVFLE1BQU1MLEdBQzlCLElBQUtLLEVBQ0gsT0FBTyxFQUdULEdBQTZCLFNBQXpCQSxFQUFNSixHQUNSLE9BQU8sRUFHVCxHQUFJQyxHQUFhRixJQUFZTixFQUFhLENBQ3hDLElBQUlFLEVBQU9TLEVBQU1ILEdBS2pCLE9BREFOLEVBQU9BLEVBQUtsVixjQUNMaVYsRUFBTUMsR0FHZixPQUFPLEVBR1QsU0FBU25VLEVBQVVxVSxHQUNqQixNQUF3QixpQkFBVkEsRUFHaEIsU0FBU00sRUFBaUJOLEdBQ3hCLE9BQUlTLE9BQU8zVixTQUFTa1YsR0FDWFosRUFBT1YsT0FBT3NCLEtBR25CclUsRUFBU3FVLElBQ0pBLEVBTVgsTUFBTVUsRUFBaUJDLEdBQVFWLEVBQU9VLEVBQUtmLEVBbEhqQixFQURKLEdBb0hoQmdCLEVBQWlCRCxHQUFRSCxFQUFPRyxFQUFLZixFQW5IakIsRUFESixHQXNIdEJoYyxFQUFPRCxRQUFVLENBQ2YwYixVQXBIRixTQUFzQlMsR0FDcEIsTUFBTU8sRUFBWUMsRUFBZ0JSLEdBQ2xDLElBQ0UsTUFBTXBVLEVBQVMrVSxPQUFPckcsS0FBS2dGLEVBQU9ULE9BQU8wQixJQUV6QyxPQURBaEIsRUFBVVYsT0FBT2pULElBQ1YsRUFDUCxNQUFPbkQsR0FDUCxPQUFPLElBOEdUc1ksVUFBV2QsRUFDWGpSLGNBL0VGLFNBQTBCa1IsR0FDeEIsT0FBT0QsRUFBWUMsSUFBVVIsRUFBTXNCLEtBQUtDLFFBQVFmLElBK0VoRGdCLElBQUtuQixFQUNMb0IsVUFBWUQsR0FBOEIsV0E3RzVDLFNBQXNCbEIsR0FDcEIsSUFDRSxPQUFPUixFQUFVNEIsVUFBVXBCLEdBQzNCLE1BQU92WCxHQUNQLE9BQU8sR0F5R1k0WSxDQUFZSCxJQUFxQm5CLEVBQU1tQixHQUM1RE4sY0FBZUEsRUFDZkUsY0FBZUEsRUFDZlEsVUFBWVQsR0FBU0QsRUFBY0MsSUFBUUMsRUFBY0QsR0FDekRVLGlCQUFrQnpCLEVBQ2xCMEIsUUFBVVgsR0FBUVYsRUFBT1UsRUFBS2pCLEdBQzlCNkIsUUFBVVosR0FBUUgsRUFBT0csRUFBS2pCLEdBQzlCaUIsSUFBTUEsR0FBU1YsRUFBT1UsRUFBS2pCLElBQWVjLEVBQU9HLEVBQUtqQixHQUN0REEsV0FBWUEsRUFDWjhCLFNBQVdDLEdBQVN4QixFQUFPd0IsRUFBTTlCLEdBQ2pDK0IsU0FBV0QsR0FBU2pCLEVBQU9pQixFQUFNOUIsR0FDakM4QixLQUFPQSxHQUFVeEIsRUFBT3dCLEVBQU05QixJQUFnQmEsRUFBT2lCLEVBQU05QixHQUMzREEsWUFBYUEsRUFDYmdDLFVBQVlDLEdBQU8zQixFQUFPMkIsRUFBR2xDLElBQWVjLEVBQU9vQixFQUFHbEMsSUFBZU8sRUFBTzJCLEVBQUdqQyxJQUFnQmEsRUFBT29CLEVBQUdqQyxHQUN6R2tDLFFBQVNKLEdBQVE5VixFQUFTOFYsS0FBVTVCLEVBQU00QixJQUFTeEIsRUFBTyxTQUFTd0IsSUFBUTlCLEssZ3RRQ3hKN0UvYixFQUFPRCxRQUFVbWUsUUFBUSxPLGdCQ0V6QixJQUFJMVUsRUFBWSxFQUFRLElBQ3BCb0MsRUFBVyxFQUFRLEdBQ25Cc0IsRUFBa0IsRUFBUSxJQUM5QmxOLEVBQU9ELFFBQVUsU0FBVW9lLEdBQ3pCLE9BQU8sU0FBVTdSLEVBQU84UixFQUFJQyxHQUMxQixJQUdJNWMsRUFIQThELEVBQUlpRSxFQUFVOEMsR0FDZHJGLEVBQVMyRSxFQUFTckcsRUFBRTBCLFFBQ3BCd0YsRUFBUVMsRUFBZ0JtUixFQUFXcFgsR0FJdkMsR0FBSWtYLEdBQWVDLEdBQU1BLEdBQUksS0FBT25YLEVBQVN3RixHQUczQyxJQUZBaEwsRUFBUThELEVBQUVrSCxPQUVHaEwsRUFBTyxPQUFPLE9BRXRCLEtBQU13RixFQUFTd0YsRUFBT0EsSUFBUyxJQUFJMFIsR0FBZTFSLEtBQVNsSCxJQUM1REEsRUFBRWtILEtBQVcyUixFQUFJLE9BQU9ELEdBQWUxUixHQUFTLEVBQ3BELE9BQVEwUixJQUFnQixLLGNDcEI5QnBlLEVBQVF1RixFQUFJcEUsT0FBT29kLHVCLGdCQ0NuQixJQUFJckUsRUFBTSxFQUFRLElBQ2xCamEsRUFBT0QsUUFBVWdMLE1BQU0zRCxTQUFXLFNBQWlCc0QsR0FDakQsTUFBbUIsU0FBWnVQLEVBQUl2UCxLLGdCQ0hiLElBQUkzRixFQUFZLEVBQVEsSUFDcEJVLEVBQVUsRUFBUSxJQUd0QnpGLEVBQU9ELFFBQVUsU0FBVXdlLEdBQ3pCLE9BQU8sU0FBVXBVLEVBQU1xVSxHQUNyQixJQUdJdlosRUFBR2lFLEVBSEgzRyxFQUFJOEQsT0FBT1osRUFBUTBFLElBQ25CM0osRUFBSXVFLEVBQVV5WixHQUNkL2QsRUFBSThCLEVBQUUwRSxPQUVWLE9BQUl6RyxFQUFJLEdBQUtBLEdBQUtDLEVBQVU4ZCxFQUFZLFFBQUt4YSxHQUM3Q2tCLEVBQUkxQyxFQUFFa2MsV0FBV2plLElBQ04sT0FBVXlFLEVBQUksT0FBVXpFLEVBQUksSUFBTUMsSUFBTXlJLEVBQUkzRyxFQUFFa2MsV0FBV2plLEVBQUksSUFBTSxPQUFVMEksRUFBSSxNQUN4RnFWLEVBQVloYyxFQUFFbWMsT0FBT2xlLEdBQUt5RSxFQUMxQnNaLEVBQVloYyxFQUFFOEgsTUFBTTdKLEVBQUdBLEVBQUksR0FBMkIwSSxFQUFJLE9BQXpCakUsRUFBSSxPQUFVLElBQXFCLFMsZ0JDYjVFLElBQUliLEVBQVcsRUFBUSxHQUNuQjZWLEVBQU0sRUFBUSxJQUNkMEUsRUFBUSxFQUFRLEVBQVIsQ0FBa0IsU0FDOUIzZSxFQUFPRCxRQUFVLFNBQVVzRSxHQUN6QixJQUFJdWEsRUFDSixPQUFPeGEsRUFBU0MsVUFBbUNOLEtBQTFCNmEsRUFBV3ZhLEVBQUdzYSxNQUEwQkMsRUFBc0IsVUFBWDNFLEVBQUk1VixNLGdCQ05sRixJQUFJOEwsRUFBVyxFQUFRLEVBQVIsQ0FBa0IsWUFDN0IwTyxHQUFlLEVBRW5CLElBQ0UsSUFBSUMsRUFBUSxDQUFDLEdBQUczTyxLQUNoQjJPLEVBQWMsT0FBSSxXQUFjRCxHQUFlLEdBRS9DOVQsTUFBTXlMLEtBQUtzSSxHQUFPLFdBQWMsTUFBTSxLQUN0QyxNQUFPbmEsSUFFVDNFLEVBQU9ELFFBQVUsU0FBVTJFLEVBQU1xYSxHQUMvQixJQUFLQSxJQUFnQkYsRUFBYyxPQUFPLEVBQzFDLElBQUkzWSxHQUFPLEVBQ1gsSUFDRSxJQUFJOFksRUFBTSxDQUFDLEdBQ1A5SSxFQUFPOEksRUFBSTdPLEtBQ2YrRixFQUFLOUQsS0FBTyxXQUFjLE1BQU8sQ0FBRUMsS0FBTW5NLEdBQU8sSUFDaEQ4WSxFQUFJN08sR0FBWSxXQUFjLE9BQU8rRixHQUNyQ3hSLEVBQUtzYSxHQUNMLE1BQU9yYSxJQUNULE9BQU91QixJLDZCQ2xCVCxJQUFJaUgsRUFBVSxFQUFRLElBQ2xCOFIsRUFBY3hFLE9BQU9yWSxVQUFVc0MsS0FJbkMxRSxFQUFPRCxRQUFVLFNBQVVvRSxFQUFHWCxHQUM1QixJQUFJa0IsRUFBT1AsRUFBRU8sS0FDYixHQUFvQixtQkFBVEEsRUFBcUIsQ0FDOUIsSUFBSW9FLEVBQVNwRSxFQUFLL0QsS0FBS3dELEVBQUdYLEdBQzFCLEdBQXNCLGlCQUFYc0YsRUFDVCxNQUFNLElBQUl4RSxVQUFVLHNFQUV0QixPQUFPd0UsRUFFVCxHQUFtQixXQUFmcUUsRUFBUWhKLEdBQ1YsTUFBTSxJQUFJRyxVQUFVLCtDQUV0QixPQUFPMmEsRUFBWXRlLEtBQUt3RCxFQUFHWCxLLDZCQ2xCN0IsRUFBUSxLQUNSLElBQUliLEVBQVcsRUFBUSxJQUNuQkQsRUFBTyxFQUFRLElBQ2Y0RCxFQUFRLEVBQVEsR0FDaEJiLEVBQVUsRUFBUSxJQUNsQjhILEVBQU0sRUFBUSxHQUNkMlIsRUFBYSxFQUFRLElBRXJCMUYsRUFBVWpNLEVBQUksV0FFZDRSLEdBQWlDN1ksR0FBTSxXQUl6QyxJQUFJOFksRUFBSyxJQU1ULE9BTEFBLEVBQUcxYSxLQUFPLFdBQ1IsSUFBSW9FLEVBQVMsR0FFYixPQURBQSxFQUFPdVcsT0FBUyxDQUFFcGEsRUFBRyxLQUNkNkQsR0FFeUIsTUFBM0IsR0FBR2pDLFFBQVF1WSxFQUFJLFdBR3BCRSxFQUFvQyxXQUV0QyxJQUFJRixFQUFLLE9BQ0xHLEVBQWVILEVBQUcxYSxLQUN0QjBhLEVBQUcxYSxLQUFPLFdBQWMsT0FBTzZhLEVBQWFuVixNQUFNaEssS0FBTTRJLFlBQ3hELElBQUlGLEVBQVMsS0FBSy9DLE1BQU1xWixHQUN4QixPQUF5QixJQUFsQnRXLEVBQU83QixRQUE4QixNQUFkNkIsRUFBTyxJQUE0QixNQUFkQSxFQUFPLEdBTnBCLEdBU3hDOUksRUFBT0QsUUFBVSxTQUFVNEwsRUFBSzFFLEVBQVF2QyxHQUN0QyxJQUFJOGEsRUFBU2pTLEVBQUk1QixHQUViOFQsR0FBdUJuWixHQUFNLFdBRS9CLElBQUlmLEVBQUksR0FFUixPQURBQSxFQUFFaWEsR0FBVSxXQUFjLE9BQU8sR0FDWixHQUFkLEdBQUc3VCxHQUFLcEcsTUFHYm1hLEVBQW9CRCxHQUF1Qm5aLEdBQU0sV0FFbkQsSUFBSXFaLEdBQWEsRUFDYlAsRUFBSyxJQVNULE9BUkFBLEVBQUcxYSxLQUFPLFdBQWlDLE9BQW5CaWIsR0FBYSxFQUFhLE1BQ3RDLFVBQVJoVSxJQUdGeVQsRUFBR3JWLFlBQWMsR0FDakJxVixFQUFHclYsWUFBWXlQLEdBQVcsV0FBYyxPQUFPNEYsSUFFakRBLEVBQUdJLEdBQVEsS0FDSEcsVUFDTDViLEVBRUwsSUFDRzBiLElBQ0FDLEdBQ1EsWUFBUi9ULElBQXNCd1QsR0FDZCxVQUFSeFQsSUFBb0IyVCxFQUNyQixDQUNBLElBQUlNLEVBQXFCLElBQUlKLEdBQ3pCSyxFQUFNbmIsRUFDUmUsRUFDQStaLEVBQ0EsR0FBRzdULElBQ0gsU0FBeUJtVSxFQUFjQyxFQUFRMVcsRUFBSzJXLEVBQU1DLEdBQ3hELE9BQUlGLEVBQU9yYixPQUFTd2EsRUFDZE8sSUFBd0JRLEVBSW5CLENBQUU1TixNQUFNLEVBQU01USxNQUFPbWUsRUFBbUJqZixLQUFLb2YsRUFBUTFXLEVBQUsyVyxJQUU1RCxDQUFFM04sTUFBTSxFQUFNNVEsTUFBT3FlLEVBQWFuZixLQUFLMEksRUFBSzBXLEVBQVFDLElBRXRELENBQUUzTixNQUFNLE1BR2Y2TixFQUFRTCxFQUFJLEdBQ1pNLEVBQU9OLEVBQUksR0FFZmxkLEVBQVMwRCxPQUFPakUsVUFBV3VKLEVBQUt1VSxHQUNoQ3hkLEVBQUsrWCxPQUFPclksVUFBV29kLEVBQWtCLEdBQVZ2WSxFQUczQixTQUFVUixFQUFRaUUsR0FBTyxPQUFPeVYsRUFBS3hmLEtBQUs4RixFQUFRckcsS0FBTXNLLElBR3hELFNBQVVqRSxHQUFVLE9BQU8wWixFQUFLeGYsS0FBSzhGLEVBQVFyRyxXLGdCQzVGckQsSUFDSXNJLEVBRFMsRUFBUSxHQUNFQSxVQUV2QjFJLEVBQU9ELFFBQVUySSxHQUFhQSxFQUFVMFgsV0FBYSxJLDZCQ0ZyRCxJQUFJNWQsRUFBUyxFQUFRLEdBQ2pCSyxFQUFVLEVBQVEsR0FDbEJGLEVBQVcsRUFBUSxJQUNuQnFLLEVBQWMsRUFBUSxJQUN0QjJLLEVBQU8sRUFBUSxJQUNmMEksRUFBUSxFQUFRLElBQ2hCdlQsRUFBYSxFQUFRLElBQ3JCMUksRUFBVyxFQUFRLEdBQ25Ca0MsRUFBUSxFQUFRLEdBQ2hCdUgsRUFBYyxFQUFRLElBQ3RCeVMsRUFBaUIsRUFBUSxJQUN6QkMsRUFBb0IsRUFBUSxJQUVoQ3ZnQixFQUFPRCxRQUFVLFNBQVUrRyxFQUFNZ08sRUFBUzBMLEVBQVNDLEVBQVF6VSxFQUFRMFUsR0FDakUsSUFBSXZMLEVBQU8zUyxFQUFPc0UsR0FDZHdLLEVBQUk2RCxFQUNKd0wsRUFBUTNVLEVBQVMsTUFBUSxNQUN6QnlHLEVBQVFuQixHQUFLQSxFQUFFbFAsVUFDZm1ELEVBQUksR0FDSnFiLEVBQVksU0FBVWpWLEdBQ3hCLElBQUlwRSxFQUFLa0wsRUFBTTlHLEdBQ2ZoSixFQUFTOFAsRUFBTzlHLEVBQ1AsVUFBUEEsR0FFVyxPQUFQQSxFQUZjLFNBQVUxRyxHQUMxQixRQUFPeWIsSUFBWXRjLEVBQVNhLEtBQWFzQyxFQUFHNUcsS0FBS1AsS0FBWSxJQUFONkUsRUFBVSxFQUFJQSxJQUc1RCxPQUFQMEcsRUFBZSxTQUFhMUcsR0FDOUIsT0FBT3liLElBQVl0YyxFQUFTYSxRQUFLbEIsRUFBWXdELEVBQUc1RyxLQUFLUCxLQUFZLElBQU42RSxFQUFVLEVBQUlBLElBQ2hFLE9BQVAwRyxFQUFlLFNBQWExRyxHQUFxQyxPQUFoQ3NDLEVBQUc1RyxLQUFLUCxLQUFZLElBQU42RSxFQUFVLEVBQUlBLEdBQVc3RSxNQUN4RSxTQUFhNkUsRUFBR2lFLEdBQXdDLE9BQW5DM0IsRUFBRzVHLEtBQUtQLEtBQVksSUFBTjZFLEVBQVUsRUFBSUEsRUFBR2lFLEdBQVc5SSxRQUd2RSxHQUFnQixtQkFBTGtSLElBQXFCb1AsR0FBV2pPLEVBQU1wTCxVQUFZZixHQUFNLFlBQ2pFLElBQUlnTCxHQUFJakcsVUFBVStHLFdBTWIsQ0FDTCxJQUFJeU8sRUFBVyxJQUFJdlAsRUFFZndQLEVBQWlCRCxFQUFTRixHQUFPRCxFQUFVLElBQU0sRUFBRyxJQUFNRyxFQUUxREUsRUFBdUJ6YSxHQUFNLFdBQWN1YSxFQUFTbGIsSUFBSSxNQUV4RHFiLEVBQW1CblQsR0FBWSxTQUFVcUksR0FBUSxJQUFJNUUsRUFBRTRFLE1BRXZEK0ssR0FBY1AsR0FBV3BhLEdBQU0sV0FJakMsSUFGQSxJQUFJNGEsRUFBWSxJQUFJNVAsRUFDaEI3RSxFQUFRLEVBQ0xBLEtBQVN5VSxFQUFVUCxHQUFPbFUsRUFBT0EsR0FDeEMsT0FBUXlVLEVBQVV2YixLQUFLLE1BRXBCcWIsS0FDSDFQLEVBQUl3RCxHQUFRLFNBQVVqUixFQUFRZ1csR0FDNUIvTSxFQUFXakosRUFBUXlOLEVBQUd4SyxHQUN0QixJQUFJcUQsRUFBT29XLEVBQWtCLElBQUlwTCxFQUFRdFIsRUFBUXlOLEdBRWpELE9BRGdCdk4sTUFBWjhWLEdBQXVCd0csRUFBTXhHLEVBQVU3TixFQUFRN0IsRUFBS3dXLEdBQVF4VyxHQUN6REEsTUFFUC9ILFVBQVlxUSxFQUNkQSxFQUFNMUksWUFBY3VILElBRWxCeVAsR0FBd0JFLEtBQzFCTCxFQUFVLFVBQ1ZBLEVBQVUsT0FDVjVVLEdBQVU0VSxFQUFVLFNBRWxCSyxHQUFjSCxJQUFnQkYsRUFBVUQsR0FFeENELEdBQVdqTyxFQUFNME8sY0FBYzFPLEVBQU0wTyxXQXBDekM3UCxFQUFJbVAsRUFBT1csZUFBZXRNLEVBQVNoTyxFQUFNa0YsRUFBUTJVLEdBQ2pEM1QsRUFBWXNFLEVBQUVsUCxVQUFXb2UsR0FDekI3SSxFQUFLQyxNQUFPLEVBNENkLE9BUEEwSSxFQUFlaFAsRUFBR3hLLEdBRWxCdkIsRUFBRXVCLEdBQVF3SyxFQUNWek8sRUFBUUEsRUFBUVMsRUFBSVQsRUFBUXFCLEVBQUlyQixFQUFRTyxHQUFLa08sR0FBSzZELEdBQU81UCxHQUVwRG1iLEdBQVNELEVBQU9ZLFVBQVUvUCxFQUFHeEssRUFBTWtGLEdBRWpDc0YsSSxnQkNwRVQsSUFmQSxJQVNJZ1EsRUFUQTllLEVBQVMsRUFBUSxHQUNqQkUsRUFBTyxFQUFRLElBQ2ZtQyxFQUFNLEVBQVEsSUFDZDZMLEVBQVE3TCxFQUFJLGVBQ1o4TCxFQUFPOUwsRUFBSSxRQUNYeVEsS0FBUzlTLEVBQU9vRixjQUFlcEYsRUFBT2dNLFVBQ3RDZ0MsRUFBUzhFLEVBQ1Q5VSxFQUFJLEVBSUorZ0IsRUFBeUIsaUhBRTNCeGIsTUFBTSxLQUVEdkYsRUFQQyxJQVFGOGdCLEVBQVE5ZSxFQUFPK2UsRUFBdUIvZ0IsUUFDeENrQyxFQUFLNGUsRUFBTWxmLFVBQVdzTyxHQUFPLEdBQzdCaE8sRUFBSzRlLEVBQU1sZixVQUFXdU8sR0FBTSxJQUN2QkgsR0FBUyxFQUdsQnhRLEVBQU9ELFFBQVUsQ0FDZnVWLElBQUtBLEVBQ0w5RSxPQUFRQSxFQUNSRSxNQUFPQSxFQUNQQyxLQUFNQSxJLDZCQ3hCUjNRLEVBQU9ELFFBQVUsRUFBUSxNQUFrQixFQUFRLEVBQVIsRUFBb0IsV0FDN0QsSUFBSXloQixFQUFJaGQsS0FBSzJULFNBR2JzSixpQkFBaUI5Z0IsS0FBSyxLQUFNNmdCLEdBQUcsc0JBQ3hCLEVBQVEsR0FBYUEsTyw2QkNMOUIsSUFBSTNlLEVBQVUsRUFBUSxHQUV0QjdDLEVBQU9ELFFBQVUsU0FBVTJoQixHQUN6QjdlLEVBQVFBLEVBQVFXLEVBQUdrZSxFQUFZLENBQUVuTCxHQUFJLFdBR25DLElBRkEsSUFBSXRQLEVBQVMrQixVQUFVL0IsT0FDbkIwYSxFQUFJLElBQUk1VyxNQUFNOUQsR0FDWEEsS0FBVTBhLEVBQUUxYSxHQUFVK0IsVUFBVS9CLEdBQ3ZDLE9BQU8sSUFBSTdHLEtBQUt1aEIsUSw2QkNQcEIsSUFBSTllLEVBQVUsRUFBUSxHQUNsQnFILEVBQVksRUFBUSxJQUNwQnRILEVBQU0sRUFBUSxJQUNkeWQsRUFBUSxFQUFRLElBRXBCcmdCLEVBQU9ELFFBQVUsU0FBVTJoQixHQUN6QjdlLEVBQVFBLEVBQVFXLEVBQUdrZSxFQUFZLENBQUVsTCxLQUFNLFNBQWN6VCxHQUNuRCxJQUNJbVAsRUFBU3lQLEVBQUcxZixFQUFHMmYsRUFEZkMsRUFBUTdZLFVBQVUsR0FLdEIsT0FIQWtCLEVBQVU5SixPQUNWOFIsT0FBb0JuTyxJQUFWOGQsSUFDRzNYLEVBQVUyWCxHQUNUOWQsTUFBVmhCLEVBQTRCLElBQUkzQyxNQUNwQ3VoQixFQUFJLEdBQ0F6UCxHQUNGalEsRUFBSSxFQUNKMmYsRUFBS2hmLEVBQUlpZixFQUFPN1ksVUFBVSxHQUFJLEdBQzlCcVgsRUFBTXRkLEdBQVEsR0FBTyxTQUFVK2UsR0FDN0JILEVBQUVqVixLQUFLa1YsRUFBR0UsRUFBVTdmLFVBR3RCb2UsRUFBTXRkLEdBQVEsRUFBTzRlLEVBQUVqVixLQUFNaVYsR0FFeEIsSUFBSXZoQixLQUFLdWhCLFMsY0N6QnBCM2hCLEVBQU9ELFFBQVVtZSxRQUFRLFcsY0NBekJsZSxFQUFPRCxRQUFVbWUsUUFBUSxTLGdCQ0F6QixJQUFJNkQsRUFBUSxFQUFRLEtBR3BCL2hCLEVBQU9ELFFBQVVnaUIsRUFGRiwrRCxjQ0RmL2hCLEVBQU9ELFFBQVVtZSxRQUFRLFMsZ0JDQXpCLElBQUk5WixFQUFXLEVBQVEsR0FDbkJ3RSxFQUFXLEVBQVEsR0FBYUEsU0FFaENvWixFQUFLNWQsRUFBU3dFLElBQWF4RSxFQUFTd0UsRUFBU3FaLGVBQ2pEamlCLEVBQU9ELFFBQVUsU0FBVXNFLEdBQ3pCLE9BQU8yZCxFQUFLcFosRUFBU3FaLGNBQWM1ZCxHQUFNLEssZ0JDTDNDLElBQUk3QixFQUFTLEVBQVEsR0FDakJDLEVBQU8sRUFBUSxJQUNma0ssRUFBVSxFQUFRLElBQ2xCdVYsRUFBUyxFQUFRLEtBQ2pCL2dCLEVBQWlCLEVBQVEsR0FBZ0JtRSxFQUM3Q3RGLEVBQU9ELFFBQVUsU0FBVWdCLEdBQ3pCLElBQUlvaEIsRUFBVTFmLEVBQUtsQixTQUFXa0IsRUFBS2xCLE9BQVNvTCxFQUFVLEdBQUtuSyxFQUFPakIsUUFBVSxJQUN0RCxLQUFsQlIsRUFBSzJkLE9BQU8sSUFBZTNkLEtBQVFvaEIsR0FBVWhoQixFQUFlZ2hCLEVBQVNwaEIsRUFBTSxDQUFFVSxNQUFPeWdCLEVBQU81YyxFQUFFdkUsTyxnQkNQbkcsSUFBSTJWLEVBQVMsRUFBUSxHQUFSLENBQXFCLFFBQzlCN1IsRUFBTSxFQUFRLElBQ2xCN0UsRUFBT0QsUUFBVSxTQUFVZ0MsR0FDekIsT0FBTzJVLEVBQU8zVSxLQUFTMlUsRUFBTzNVLEdBQU84QyxFQUFJOUMsTSxjQ0YzQy9CLEVBQU9ELFFBQVUsZ0dBRWZnRyxNQUFNLE0sZ0JDSFIsSUFBSTZDLEVBQVcsRUFBUSxHQUFhQSxTQUNwQzVJLEVBQU9ELFFBQVU2SSxHQUFZQSxFQUFTd1osaUIsZ0JDQ3RDLElBQUloZSxFQUFXLEVBQVEsR0FDbkJjLEVBQVcsRUFBUSxHQUNuQm1kLEVBQVEsU0FBVTljLEVBQUdrTixHQUV2QixHQURBdk4sRUFBU0ssSUFDSm5CLEVBQVNxTyxJQUFvQixPQUFWQSxFQUFnQixNQUFNbk8sVUFBVW1PLEVBQVEsOEJBRWxFelMsRUFBT0QsUUFBVSxDQUNma1IsSUFBSy9QLE9BQU9vaEIsaUJBQW1CLGFBQWUsR0FDNUMsU0FBVXZiLEVBQU13YixFQUFPdFIsR0FDckIsS0FDRUEsRUFBTSxFQUFRLEdBQVIsQ0FBa0JqTixTQUFTckQsS0FBTSxFQUFRLElBQWtCMkUsRUFBRXBFLE9BQU9rQixVQUFXLGFBQWE2TyxJQUFLLElBQ25HbEssRUFBTSxJQUNWd2IsSUFBVXhiLGFBQWdCZ0UsT0FDMUIsTUFBT3BHLEdBQUs0ZCxHQUFRLEVBQ3RCLE9BQU8sU0FBd0JoZCxFQUFHa04sR0FJaEMsT0FIQTRQLEVBQU05YyxFQUFHa04sR0FDTDhQLEVBQU9oZCxFQUFFaWQsVUFBWS9QLEVBQ3BCeEIsRUFBSTFMLEVBQUdrTixHQUNMbE4sR0FWWCxDQVlFLElBQUksUUFBU3hCLEdBQ2pCc2UsTUFBT0EsSSxjQ3ZCVHJpQixFQUFPRCxRQUFVLGtELGdCQ0FqQixJQUFJcUUsRUFBVyxFQUFRLEdBQ25Ca2UsRUFBaUIsRUFBUSxJQUFnQnJSLElBQzdDalIsRUFBT0QsUUFBVSxTQUFVb0ssRUFBTXRHLEVBQVF5TixHQUN2QyxJQUNJNU4sRUFEQUYsRUFBSUssRUFBT2tHLFlBSWIsT0FGRXZHLElBQU04TixHQUFpQixtQkFBTDlOLElBQW9CRSxFQUFJRixFQUFFcEIsYUFBZWtQLEVBQUVsUCxXQUFhZ0MsRUFBU1YsSUFBTTRlLEdBQzNGQSxFQUFlblksRUFBTXpHLEdBQ2R5RyxJLDZCQ05YLElBQUlwRixFQUFZLEVBQVEsSUFDcEJVLEVBQVUsRUFBUSxJQUV0QnpGLEVBQU9ELFFBQVUsU0FBZ0IwaUIsR0FDL0IsSUFBSXBaLEVBQU1oRCxPQUFPWixFQUFRckYsT0FDckJvTSxFQUFNLEdBQ052SyxFQUFJOEMsRUFBVTBkLEdBQ2xCLEdBQUl4Z0IsRUFBSSxHQUFLQSxHQUFLeWdCLElBQVUsTUFBTXZVLFdBQVcsMkJBQzdDLEtBQU1sTSxFQUFJLEdBQUlBLEtBQU8sS0FBT29ILEdBQU9BLEdBQWMsRUFBSnBILElBQU91SyxHQUFPbkQsR0FDM0QsT0FBT21ELEksY0NUVHhNLEVBQU9ELFFBQVV5RSxLQUFLbWUsTUFBUSxTQUFjM0UsR0FFMUMsT0FBbUIsSUFBWEEsR0FBS0EsSUFBV0EsR0FBS0EsRUFBSUEsRUFBSUEsRUFBSSxHQUFLLEVBQUksSSxjQ0ZwRCxJQUFJNEUsRUFBU3BlLEtBQUtxZSxNQUNsQjdpQixFQUFPRCxTQUFZNmlCLEdBRWRBLEVBQU8sSUFBTSxvQkFBc0JBLEVBQU8sSUFBTSxxQkFFN0IsT0FBbkJBLEdBQVEsT0FDVCxTQUFlNUUsR0FDakIsT0FBbUIsSUFBWEEsR0FBS0EsR0FBVUEsRUFBSUEsR0FBSyxNQUFRQSxFQUFJLEtBQU9BLEVBQUlBLEVBQUlBLEVBQUksRUFBSXhaLEtBQUt0QixJQUFJOGEsR0FBSyxHQUMvRTRFLEcsNkJDUkosSUFBSWpXLEVBQVUsRUFBUSxJQUNsQjlKLEVBQVUsRUFBUSxHQUNsQkYsRUFBVyxFQUFRLElBQ25CRCxFQUFPLEVBQVEsSUFDZmtMLEVBQVksRUFBUSxJQUNwQmtWLEVBQWMsRUFBUSxJQUN0QnhDLEVBQWlCLEVBQVEsSUFDekJ4VyxFQUFpQixFQUFRLElBQ3pCcUcsRUFBVyxFQUFRLEVBQVIsQ0FBa0IsWUFDN0I0UyxJQUFVLEdBQUczVCxNQUFRLFFBQVUsR0FBR0EsUUFLbEM0VCxFQUFhLFdBQWMsT0FBTzVpQixNQUV0Q0osRUFBT0QsUUFBVSxTQUFVb1YsRUFBTXJPLEVBQU0yUyxFQUFhckgsRUFBTTZRLEVBQVNDLEVBQVE3TixHQUN6RXlOLEVBQVlySixFQUFhM1MsRUFBTXNMLEdBQy9CLElBZUlvTyxFQUFTemUsRUFBS29oQixFQWZkQyxFQUFZLFNBQVVDLEdBQ3hCLElBQUtOLEdBQVNNLEtBQVE1USxFQUFPLE9BQU9BLEVBQU00USxHQUMxQyxPQUFRQSxHQUNOLElBVkssT0FXTCxJQVZPLFNBVU0sT0FBTyxXQUFvQixPQUFPLElBQUk1SixFQUFZclosS0FBTWlqQixJQUNyRSxPQUFPLFdBQXFCLE9BQU8sSUFBSTVKLEVBQVlyWixLQUFNaWpCLEtBRXpEalQsRUFBTXRKLEVBQU8sWUFDYndjLEVBZE8sVUFjTUwsRUFDYk0sR0FBYSxFQUNiOVEsRUFBUTBDLEVBQUsvUyxVQUNib2hCLEVBQVUvUSxFQUFNdEMsSUFBYXNDLEVBbkJqQixlQW1CdUN3USxHQUFXeFEsRUFBTXdRLEdBQ3BFUSxFQUFXRCxHQUFXSixFQUFVSCxHQUNoQ1MsRUFBV1QsRUFBV0ssRUFBd0JGLEVBQVUsV0FBckJLLE9BQWtDMWYsRUFDckU0ZixFQUFxQixTQUFSN2MsR0FBa0IyTCxFQUFNcEgsU0FBcUJtWSxFQXdCOUQsR0FyQklHLElBQ0ZSLEVBQW9CclosRUFBZTZaLEVBQVdoakIsS0FBSyxJQUFJd1UsT0FDN0JqVSxPQUFPa0IsV0FBYStnQixFQUFrQi9RLE9BRTlEa08sRUFBZTZDLEVBQW1CL1MsR0FBSyxHQUVsQ3pELEdBQWlELG1CQUEvQndXLEVBQWtCaFQsSUFBeUJ6TixFQUFLeWdCLEVBQW1CaFQsRUFBVTZTLElBSXBHTSxHQUFjRSxHQWpDUCxXQWlDa0JBLEVBQVF6aUIsT0FDbkN3aUIsR0FBYSxFQUNiRSxFQUFXLFdBQW9CLE9BQU9ELEVBQVE3aUIsS0FBS1AsUUFHL0N1TSxJQUFXMEksSUFBWTBOLElBQVNRLEdBQWU5USxFQUFNdEMsSUFDekR6TixFQUFLK1AsRUFBT3RDLEVBQVVzVCxHQUd4QjdWLEVBQVU5RyxHQUFRMmMsRUFDbEI3VixFQUFVd0MsR0FBTzRTLEVBQ2JDLEVBTUYsR0FMQXpDLEVBQVUsQ0FDUnRSLE9BQVFvVSxFQUFhRyxFQUFXTCxFQTlDekIsVUErQ1BoVSxLQUFNOFQsRUFBU08sRUFBV0wsRUFoRHJCLFFBaURML1gsUUFBU3FZLEdBRVByTyxFQUFRLElBQUt0VCxLQUFPeWUsRUFDaEJ6ZSxLQUFPMFEsR0FBUTlQLEVBQVM4UCxFQUFPMVEsRUFBS3llLEVBQVF6ZSxTQUM3Q2MsRUFBUUEsRUFBUWEsRUFBSWIsRUFBUU8sR0FBSzJmLEdBQVNRLEdBQWF6YyxFQUFNMFosR0FFdEUsT0FBT0EsSSw2QkNsRVQsSUFBSTFlLEVBQVMsRUFBUSxJQUNqQjhoQixFQUFhLEVBQVEsSUFDckJ0RCxFQUFpQixFQUFRLElBQ3pCNkMsRUFBb0IsR0FHeEIsRUFBUSxHQUFSLENBQW1CQSxFQUFtQixFQUFRLEVBQVIsQ0FBa0IsYUFBYSxXQUFjLE9BQU8vaUIsUUFFMUZKLEVBQU9ELFFBQVUsU0FBVTBaLEVBQWEzUyxFQUFNc0wsR0FDNUNxSCxFQUFZclgsVUFBWU4sRUFBT3FoQixFQUFtQixDQUFFL1EsS0FBTXdSLEVBQVcsRUFBR3hSLEtBQ3hFa08sRUFBZTdHLEVBQWEzUyxFQUFPLGUsZ0JDVnJDLElBQUk4WCxFQUFXLEVBQVEsSUFDbkJuWixFQUFVLEVBQVEsSUFFdEJ6RixFQUFPRCxRQUFVLFNBQVVvSyxFQUFNMFosRUFBYy9jLEdBQzdDLEdBQUk4WCxFQUFTaUYsR0FBZSxNQUFNdmYsVUFBVSxVQUFZd0MsRUFBTywwQkFDL0QsT0FBT1QsT0FBT1osRUFBUTBFLE0sZ0JDTnhCLElBQUl3VSxFQUFRLEVBQVEsRUFBUixDQUFrQixTQUM5QjNlLEVBQU9ELFFBQVUsU0FBVTRMLEdBQ3pCLElBQUl5VCxFQUFLLElBQ1QsSUFDRSxNQUFNelQsR0FBS3lULEdBQ1gsTUFBT3phLEdBQ1AsSUFFRSxPQURBeWEsRUFBR1QsSUFBUyxHQUNKLE1BQU1oVCxHQUFLeVQsR0FDbkIsTUFBTzlaLEtBQ1QsT0FBTyxJLGdCQ1RYLElBQUlzSSxFQUFZLEVBQVEsSUFDcEJ1QyxFQUFXLEVBQVEsRUFBUixDQUFrQixZQUM3QjlCLEVBQWF0RCxNQUFNM0ksVUFFdkJwQyxFQUFPRCxRQUFVLFNBQVVzRSxHQUN6QixZQUFjTixJQUFQTSxJQUFxQnVKLEVBQVU3QyxRQUFVMUcsR0FBTWdLLEVBQVc4QixLQUFjOUwsSyw2QkNMakYsSUFBSXlmLEVBQWtCLEVBQVEsR0FDMUJwZSxFQUFhLEVBQVEsSUFFekIxRixFQUFPRCxRQUFVLFNBQVVtQyxFQUFRdUssRUFBT2hMLEdBQ3BDZ0wsS0FBU3ZLLEVBQVE0aEIsRUFBZ0J4ZSxFQUFFcEQsRUFBUXVLLEVBQU8vRyxFQUFXLEVBQUdqRSxJQUMvRFMsRUFBT3VLLEdBQVNoTCxJLGdCQ052QixJQUFJMEwsRUFBVSxFQUFRLElBQ2xCZ0QsRUFBVyxFQUFRLEVBQVIsQ0FBa0IsWUFDN0J2QyxFQUFZLEVBQVEsSUFDeEI1TixFQUFPRCxRQUFVLEVBQVEsSUFBV2drQixrQkFBb0IsU0FBVTFmLEdBQ2hFLEdBQVVOLE1BQU5NLEVBQWlCLE9BQU9BLEVBQUc4TCxJQUMxQjlMLEVBQUcsZUFDSHVKLEVBQVVULEVBQVE5SSxNLGdCQ0x6QixJQUFJcUosRUFBcUIsRUFBUSxLQUVqQzFOLEVBQU9ELFFBQVUsU0FBVWlrQixFQUFVL2MsR0FDbkMsT0FBTyxJQUFLeUcsRUFBbUJzVyxHQUF4QixDQUFtQy9jLEssNkJDRjVDLElBQUkwQyxFQUFXLEVBQVEsR0FDbkJ1RCxFQUFrQixFQUFRLElBQzFCdEIsRUFBVyxFQUFRLEdBQ3ZCNUwsRUFBT0QsUUFBVSxTQUFjMEIsR0FPN0IsSUFOQSxJQUFJOEQsRUFBSW9FLEVBQVN2SixNQUNiNkcsRUFBUzJFLEVBQVNyRyxFQUFFMEIsUUFDcEIrSyxFQUFPaEosVUFBVS9CLE9BQ2pCd0YsRUFBUVMsRUFBZ0I4RSxFQUFPLEVBQUloSixVQUFVLFFBQUtqRixFQUFXa0QsR0FDN0Q0TSxFQUFNN0IsRUFBTyxFQUFJaEosVUFBVSxRQUFLakYsRUFDaENrZ0IsT0FBaUJsZ0IsSUFBUjhQLEVBQW9CNU0sRUFBU2lHLEVBQWdCMkcsRUFBSzVNLEdBQ3hEZ2QsRUFBU3hYLEdBQU9sSCxFQUFFa0gsS0FBV2hMLEVBQ3BDLE9BQU84RCxJLDZCQ1pULElBQUkyZSxFQUFtQixFQUFRLElBQzNCcFMsRUFBTyxFQUFRLEtBQ2ZsRSxFQUFZLEVBQVEsSUFDcEJwRSxFQUFZLEVBQVEsSUFNeEJ4SixFQUFPRCxRQUFVLEVBQVEsR0FBUixDQUEwQmdMLE1BQU8sU0FBUyxTQUFVb1osRUFBVWQsR0FDN0VqakIsS0FBSzBaLEdBQUt0USxFQUFVMmEsR0FDcEIvakIsS0FBS2drQixHQUFLLEVBQ1Zoa0IsS0FBS2lrQixHQUFLaEIsS0FFVCxXQUNELElBQUk5ZCxFQUFJbkYsS0FBSzBaLEdBQ1R1SixFQUFPampCLEtBQUtpa0IsR0FDWjVYLEVBQVFyTSxLQUFLZ2tCLEtBQ2pCLE9BQUs3ZSxHQUFLa0gsR0FBU2xILEVBQUUwQixRQUNuQjdHLEtBQUswWixRQUFLL1YsRUFDSCtOLEVBQUssSUFFYUEsRUFBSyxFQUFwQixRQUFSdVIsRUFBK0I1VyxFQUN2QixVQUFSNFcsRUFBaUM5ZCxFQUFFa0gsR0FDeEIsQ0FBQ0EsRUFBT2xILEVBQUVrSCxPQUN4QixVQUdIbUIsRUFBVTBXLFVBQVkxVyxFQUFVN0MsTUFFaENtWixFQUFpQixRQUNqQkEsRUFBaUIsVUFDakJBLEVBQWlCLFksNkJDL0JqQixJQWFNSyxFQUNBQyxFQWRGQyxFQUFjLEVBQVEsSUFFdEJDLEVBQWFqSyxPQUFPclksVUFBVXNDLEtBSTlCaWdCLEVBQWdCdGUsT0FBT2pFLFVBQVV5RSxRQUVqQytkLEVBQWNGLEVBSWRHLEdBQ0VOLEVBQU0sSUFDTkMsRUFBTSxNQUNWRSxFQUFXL2pCLEtBQUs0akIsRUFBSyxLQUNyQkcsRUFBVy9qQixLQUFLNmpCLEVBQUssS0FDTSxJQUFwQkQsRUFBYyxXQUErQixJQUFwQkMsRUFBYyxXQUk1Q00sT0FBdUMvZ0IsSUFBdkIsT0FBT1csS0FBSyxJQUFJLElBRXhCbWdCLEdBQTRCQyxLQUd0Q0YsRUFBYyxTQUFjdmIsR0FDMUIsSUFDSTBiLEVBQVdDLEVBQVFySSxFQUFPbmMsRUFEMUI0ZSxFQUFLaGYsS0F3QlQsT0FyQkkwa0IsSUFDRkUsRUFBUyxJQUFJdkssT0FBTyxJQUFNMkUsRUFBR3JjLE9BQVMsV0FBWTBoQixFQUFZOWpCLEtBQUt5ZSxLQUVqRXlGLElBQTBCRSxFQUFZM0YsRUFBYSxXQUV2RHpDLEVBQVErSCxFQUFXL2pCLEtBQUt5ZSxFQUFJL1YsR0FFeEJ3YixHQUE0QmxJLElBQzlCeUMsRUFBYSxVQUFJQSxFQUFHNWMsT0FBU21hLEVBQU1sUSxNQUFRa1EsRUFBTSxHQUFHMVYsT0FBUzhkLEdBRTNERCxHQUFpQm5JLEdBQVNBLEVBQU0xVixPQUFTLEdBSTNDMGQsRUFBY2hrQixLQUFLZ2MsRUFBTSxHQUFJcUksR0FBUSxXQUNuQyxJQUFLeGtCLEVBQUksRUFBR0EsRUFBSXdJLFVBQVUvQixPQUFTLEVBQUd6RyxTQUNmdUQsSUFBakJpRixVQUFVeEksS0FBa0JtYyxFQUFNbmMsUUFBS3VELE1BSzFDNFksSUFJWDNjLEVBQU9ELFFBQVU2a0IsRyw2QkN4RGpCLElBQUlLLEVBQUssRUFBUSxHQUFSLEVBQXdCLEdBSWpDamxCLEVBQU9ELFFBQVUsU0FBVXlELEVBQUdpSixFQUFPNE8sR0FDbkMsT0FBTzVPLEdBQVM0TyxFQUFVNEosRUFBR3poQixFQUFHaUosR0FBT3hGLE9BQVMsSyxnQkNObEQsSUFhSWllLEVBQU9DLEVBQVNDLEVBYmhCeGlCLEVBQU0sRUFBUSxJQUNkeWlCLEVBQVMsRUFBUSxLQUNqQkMsRUFBTyxFQUFRLElBQ2ZDLEVBQU0sRUFBUSxJQUNkL2lCLEVBQVMsRUFBUSxHQUNqQmdqQixFQUFVaGpCLEVBQU9nakIsUUFDakJDLEVBQVVqakIsRUFBT2tqQixhQUNqQkMsRUFBWW5qQixFQUFPb2pCLGVBQ25CQyxFQUFpQnJqQixFQUFPcWpCLGVBQ3hCQyxFQUFXdGpCLEVBQU9zakIsU0FDbEJDLEVBQVUsRUFDVkMsRUFBUSxHQUdSQyxFQUFNLFdBQ1IsSUFBSTVPLEdBQU1qWCxLQUVWLEdBQUk0bEIsRUFBTTNqQixlQUFlZ1YsR0FBSyxDQUM1QixJQUFJOVAsRUFBS3llLEVBQU0zTyxVQUNSMk8sRUFBTTNPLEdBQ2I5UCxNQUdBMmUsRUFBVyxTQUFVQyxHQUN2QkYsRUFBSXRsQixLQUFLd2xCLEVBQU0xUSxPQUdaZ1EsR0FBWUUsSUFDZkYsRUFBVSxTQUFzQmxlLEdBRzlCLElBRkEsSUFBSTZlLEVBQU8sR0FDUDVsQixFQUFJLEVBQ0R3SSxVQUFVL0IsT0FBU3pHLEdBQUc0bEIsRUFBSzFaLEtBQUsxRCxVQUFVeEksTUFNakQsT0FMQXdsQixJQUFRRCxHQUFXLFdBRWpCVixFQUFvQixtQkFBTjlkLEVBQW1CQSxFQUFLdkQsU0FBU3VELEdBQUs2ZSxJQUV0RGxCLEVBQU1hLEdBQ0NBLEdBRVRKLEVBQVksU0FBd0J0TyxVQUMzQjJPLEVBQU0zTyxJQUdtQixXQUE5QixFQUFRLEdBQVIsQ0FBa0JtTyxHQUNwQk4sRUFBUSxTQUFVN04sR0FDaEJtTyxFQUFRYSxTQUFTempCLEVBQUlxakIsRUFBSzVPLEVBQUksS0FHdkJ5TyxHQUFZQSxFQUFTUSxJQUM5QnBCLEVBQVEsU0FBVTdOLEdBQ2hCeU8sRUFBU1EsSUFBSTFqQixFQUFJcWpCLEVBQUs1TyxFQUFJLEtBR25Cd08sR0FFVFQsR0FEQUQsRUFBVSxJQUFJVSxHQUNDVSxNQUNmcEIsRUFBUXFCLE1BQU1DLFVBQVlQLEVBQzFCaEIsRUFBUXRpQixFQUFJd2lCLEVBQUtzQixZQUFhdEIsRUFBTSxJQUczQjVpQixFQUFPbWtCLGtCQUEwQyxtQkFBZkQsY0FBOEJsa0IsRUFBT29rQixlQUNoRjFCLEVBQVEsU0FBVTdOLEdBQ2hCN1UsRUFBT2trQixZQUFZclAsRUFBSyxHQUFJLE1BRTlCN1UsRUFBT21rQixpQkFBaUIsVUFBV1QsR0FBVSxJQUc3Q2hCLEVBdkRxQix1QkFzRFVLLEVBQUksVUFDM0IsU0FBVWxPLEdBQ2hCaU8sRUFBS3hNLFlBQVl5TSxFQUFJLFdBQTZCLG1CQUFJLFdBQ3BERCxFQUFLdUIsWUFBWXptQixNQUNqQjZsQixFQUFJdGxCLEtBQUswVyxLQUtMLFNBQVVBLEdBQ2hCeVAsV0FBV2xrQixFQUFJcWpCLEVBQUs1TyxFQUFJLEdBQUksS0FJbENyWCxFQUFPRCxRQUFVLENBQ2ZrUixJQUFLd1UsRUFDTHRFLE1BQU93RSxJLGdCQ2xGVCxJQUFJbmpCLEVBQVMsRUFBUSxHQUNqQnVrQixFQUFZLEVBQVEsS0FBVzlWLElBQy9CK1YsRUFBV3hrQixFQUFPeWtCLGtCQUFvQnprQixFQUFPMGtCLHVCQUM3QzFCLEVBQVVoakIsRUFBT2dqQixRQUNqQjJCLEVBQVUza0IsRUFBTzJrQixRQUNqQkMsRUFBdUMsV0FBOUIsRUFBUSxHQUFSLENBQWtCNUIsR0FFL0J4bEIsRUFBT0QsUUFBVSxXQUNmLElBQUlzbkIsRUFBTUMsRUFBTUMsRUFFWkMsRUFBUSxXQUNWLElBQUlDLEVBQVFsZ0IsRUFFWixJQURJNmYsSUFBV0ssRUFBU2pDLEVBQVFrQyxTQUFTRCxFQUFPRSxPQUN6Q04sR0FBTSxDQUNYOWYsRUFBSzhmLEVBQUs5ZixHQUNWOGYsRUFBT0EsRUFBS2pWLEtBQ1osSUFDRTdLLElBQ0EsTUFBTzVDLEdBR1AsTUFGSTBpQixFQUFNRSxJQUNMRCxPQUFPdmpCLEVBQ05ZLEdBRVIyaUIsT0FBT3ZqQixFQUNMMGpCLEdBQVFBLEVBQU9HLFNBSXJCLEdBQUlSLEVBQ0ZHLEVBQVMsV0FDUC9CLEVBQVFhLFNBQVNtQixTQUdkLElBQUlSLEdBQWN4a0IsRUFBT2tHLFdBQWFsRyxFQUFPa0csVUFBVW1mLFdBUXZELEdBQUlWLEdBQVdBLEVBQVFXLFFBQVMsQ0FFckMsSUFBSUMsRUFBVVosRUFBUVcsYUFBUS9qQixHQUM5QndqQixFQUFTLFdBQ1BRLEVBQVFDLEtBQUtSLFNBU2ZELEVBQVMsV0FFUFIsRUFBVXBtQixLQUFLNkIsRUFBUWdsQixRQXZCZ0QsQ0FDekUsSUFBSVMsR0FBUyxFQUNUamQsRUFBT3BDLFNBQVNzZixlQUFlLElBQ25DLElBQUlsQixFQUFTUSxHQUFPVyxRQUFRbmQsRUFBTSxDQUFFb2QsZUFBZSxJQUNuRGIsRUFBUyxXQUNQdmMsRUFBS3lLLEtBQU93UyxHQUFVQSxHQXNCMUIsT0FBTyxTQUFVMWdCLEdBQ2YsSUFBSThnQixFQUFPLENBQUU5Z0IsR0FBSUEsRUFBSTZLLFVBQU1yTyxHQUN2QnVqQixJQUFNQSxFQUFLbFYsS0FBT2lXLEdBQ2pCaEIsSUFDSEEsRUFBT2dCLEVBQ1BkLEtBQ0FELEVBQU9lLEssNkJDaEViLElBQUluZSxFQUFZLEVBQVEsSUFFeEIsU0FBU29lLEVBQWtCaFgsR0FDekIsSUFBSXdXLEVBQVNTLEVBQ2Jub0IsS0FBSzJuQixRQUFVLElBQUl6VyxHQUFFLFNBQVVrWCxFQUFXQyxHQUN4QyxRQUFnQjFrQixJQUFaK2pCLFFBQW9DL2pCLElBQVh3a0IsRUFBc0IsTUFBTWprQixVQUFVLDJCQUNuRXdqQixFQUFVVSxFQUNWRCxFQUFTRSxLQUVYcm9CLEtBQUswbkIsUUFBVTVkLEVBQVU0ZCxHQUN6QjFuQixLQUFLbW9CLE9BQVNyZSxFQUFVcWUsR0FHMUJ2b0IsRUFBT0QsUUFBUXVGLEVBQUksU0FBVWdNLEdBQzNCLE9BQU8sSUFBSWdYLEVBQWtCaFgsSyw2QkNmL0IsSUFBSTlPLEVBQVMsRUFBUSxHQUNqQitXLEVBQWMsRUFBUSxHQUN0QjVNLEVBQVUsRUFBUSxJQUNsQkMsRUFBUyxFQUFRLElBQ2pCbEssRUFBTyxFQUFRLElBQ2ZzSyxFQUFjLEVBQVEsSUFDdEIxRyxFQUFRLEVBQVEsR0FDaEJ3RyxFQUFhLEVBQVEsSUFDckIvSCxFQUFZLEVBQVEsSUFDcEI2RyxFQUFXLEVBQVEsR0FDbkJxQixFQUFVLEVBQVEsS0FDbEJJLEVBQU8sRUFBUSxJQUFrQi9ILEVBQ2pDRCxFQUFLLEVBQVEsR0FBZ0JDLEVBQzdCeUksRUFBWSxFQUFRLElBQ3BCdVMsRUFBaUIsRUFBUSxJQU16QmhTLEVBQWU5TCxFQUFtQixZQUNsQytMLEVBQVkvTCxFQUFnQixTQUM1QmdDLEVBQU9oQyxFQUFPZ0MsS0FDZDJKLEVBQWEzTCxFQUFPMkwsV0FFcEJ1VSxFQUFXbGdCLEVBQU9rZ0IsU0FDbEJnRyxFQUFhcGEsRUFDYnFhLEVBQU1ua0IsRUFBS21rQixJQUNYQyxFQUFNcGtCLEVBQUtva0IsSUFDWHJlLEVBQVEvRixFQUFLK0YsTUFDYnNlLEVBQU1ya0IsRUFBS3FrQixJQUNYQyxFQUFNdGtCLEVBQUtza0IsSUFJWEMsRUFBVXhQLEVBQWMsS0FIZixTQUlUeVAsRUFBVXpQLEVBQWMsS0FIVixhQUlkMFAsRUFBVTFQLEVBQWMsS0FIVixhQU1sQixTQUFTMlAsRUFBWXpuQixFQUFPMG5CLEVBQU1DLEdBQ2hDLElBT0l6a0IsRUFBRy9ELEVBQUdDLEVBUE5pSCxFQUFTLElBQUlpRCxNQUFNcWUsR0FDbkJDLEVBQWdCLEVBQVRELEVBQWFELEVBQU8sRUFDM0JHLEdBQVEsR0FBS0QsR0FBUSxFQUNyQkUsRUFBUUQsR0FBUSxFQUNoQkUsRUFBYyxLQUFUTCxFQUFjUCxFQUFJLEdBQUksSUFBTUEsRUFBSSxHQUFJLElBQU0sRUFDL0Nwb0IsRUFBSSxFQUNKK0IsRUFBSWQsRUFBUSxHQUFlLElBQVZBLEdBQWUsRUFBSUEsRUFBUSxFQUFJLEVBQUksRUFrQ3hELEtBaENBQSxFQUFRa25CLEVBQUlsbkIsS0FFQ0EsR0FBU0EsSUFBVWloQixHQUU5QjloQixFQUFJYSxHQUFTQSxFQUFRLEVBQUksRUFDekJrRCxFQUFJMmtCLElBRUoza0IsRUFBSTRGLEVBQU1zZSxFQUFJcG5CLEdBQVNxbkIsR0FDbkJybkIsR0FBU1osRUFBSStuQixFQUFJLEdBQUlqa0IsSUFBTSxJQUM3QkEsSUFDQTlELEdBQUssSUFHTFksR0FERWtELEVBQUk0a0IsR0FBUyxFQUNOQyxFQUFLM29CLEVBRUwyb0IsRUFBS1osRUFBSSxFQUFHLEVBQUlXLElBRWYxb0IsR0FBSyxJQUNmOEQsSUFDQTlELEdBQUssR0FFSDhELEVBQUk0a0IsR0FBU0QsR0FDZjFvQixFQUFJLEVBQ0orRCxFQUFJMmtCLEdBQ0sza0IsRUFBSTRrQixHQUFTLEdBQ3RCM29CLEdBQUthLEVBQVFaLEVBQUksR0FBSytuQixFQUFJLEVBQUdPLEdBQzdCeGtCLEdBQVE0a0IsSUFFUjNvQixFQUFJYSxFQUFRbW5CLEVBQUksRUFBR1csRUFBUSxHQUFLWCxFQUFJLEVBQUdPLEdBQ3ZDeGtCLEVBQUksSUFHRHdrQixHQUFRLEVBQUdyaEIsRUFBT3RILEtBQVcsSUFBSkksRUFBU0EsR0FBSyxJQUFLdW9CLEdBQVEsR0FHM0QsSUFGQXhrQixFQUFJQSxHQUFLd2tCLEVBQU92b0IsRUFDaEJ5b0IsR0FBUUYsRUFDREUsRUFBTyxFQUFHdmhCLEVBQU90SCxLQUFXLElBQUptRSxFQUFTQSxHQUFLLElBQUswa0IsR0FBUSxHQUUxRCxPQURBdmhCLElBQVN0SCxJQUFVLElBQUorQixFQUNSdUYsRUFFVCxTQUFTMmhCLEVBQWMzaEIsRUFBUXFoQixFQUFNQyxHQUNuQyxJQU9JeG9CLEVBUEF5b0IsRUFBZ0IsRUFBVEQsRUFBYUQsRUFBTyxFQUMzQkcsR0FBUSxHQUFLRCxHQUFRLEVBQ3JCRSxFQUFRRCxHQUFRLEVBQ2hCSSxFQUFRTCxFQUFPLEVBQ2Y3b0IsRUFBSTRvQixFQUFTLEVBQ2I3bUIsRUFBSXVGLEVBQU90SCxLQUNYbUUsRUFBUSxJQUFKcEMsRUFHUixJQURBQSxJQUFNLEVBQ0NtbkIsRUFBUSxFQUFHL2tCLEVBQVEsSUFBSkEsRUFBVW1ELEVBQU90SCxHQUFJQSxJQUFLa3BCLEdBQVMsR0FJekQsSUFIQTlvQixFQUFJK0QsR0FBSyxJQUFNK2tCLEdBQVMsRUFDeEIva0IsS0FBTytrQixFQUNQQSxHQUFTUCxFQUNGTyxFQUFRLEVBQUc5b0IsRUFBUSxJQUFKQSxFQUFVa0gsRUFBT3RILEdBQUlBLElBQUtrcEIsR0FBUyxHQUN6RCxHQUFVLElBQU4va0IsRUFDRkEsRUFBSSxFQUFJNGtCLE1BQ0gsSUFBSTVrQixJQUFNMmtCLEVBQ2YsT0FBTzFvQixFQUFJK29CLElBQU1wbkIsR0FBS21nQixFQUFXQSxFQUVqQzloQixHQUFRZ29CLEVBQUksRUFBR08sR0FDZnhrQixHQUFRNGtCLEVBQ1IsT0FBUWhuQixHQUFLLEVBQUksR0FBSzNCLEVBQUlnb0IsRUFBSSxFQUFHamtCLEVBQUl3a0IsR0FHekMsU0FBU1MsRUFBVUMsR0FDakIsT0FBT0EsRUFBTSxJQUFNLEdBQUtBLEVBQU0sSUFBTSxHQUFLQSxFQUFNLElBQU0sRUFBSUEsRUFBTSxHQUVqRSxTQUFTQyxFQUFPemxCLEdBQ2QsTUFBTyxDQUFNLElBQUxBLEdBRVYsU0FBUzBsQixFQUFRMWxCLEdBQ2YsTUFBTyxDQUFNLElBQUxBLEVBQVdBLEdBQU0sRUFBSSxLQUUvQixTQUFTMmxCLEVBQVEzbEIsR0FDZixNQUFPLENBQU0sSUFBTEEsRUFBV0EsR0FBTSxFQUFJLElBQU1BLEdBQU0sR0FBSyxJQUFNQSxHQUFNLEdBQUssS0FFakUsU0FBUzRsQixFQUFRNWxCLEdBQ2YsT0FBTzZrQixFQUFZN2tCLEVBQUksR0FBSSxHQUU3QixTQUFTNmxCLEVBQVE3bEIsR0FDZixPQUFPNmtCLEVBQVk3a0IsRUFBSSxHQUFJLEdBRzdCLFNBQVNxTixFQUFVSixFQUFHdlAsRUFBSzRQLEdBQ3pCdE0sRUFBR2lNLEVBQVcsVUFBR3ZQLEVBQUssQ0FBRVYsSUFBSyxXQUFjLE9BQU9qQixLQUFLdVIsTUFHekQsU0FBU3RRLEVBQUk4b0IsRUFBTU4sRUFBT3BkLEVBQU8yZCxHQUMvQixJQUNJQyxFQUFXcGQsR0FEQ1IsR0FFaEIsR0FBSTRkLEVBQVdSLEVBQVFNLEVBQUtuQixHQUFVLE1BQU03YSxFQXhINUIsZ0JBeUhoQixJQUFJdkosRUFBUXVsQixFQUFLcEIsR0FBU3VCLEdBQ3RCM1gsRUFBUTBYLEVBQVdGLEVBQUtsQixHQUN4QnNCLEVBQU8zbEIsRUFBTXlGLE1BQU1zSSxFQUFPQSxFQUFRa1gsR0FDdEMsT0FBT08sRUFBaUJHLEVBQU9BLEVBQUtoWCxVQUV0QyxTQUFTdEMsRUFBSWtaLEVBQU1OLEVBQU9wZCxFQUFPK2QsRUFBWS9vQixFQUFPMm9CLEdBQ2xELElBQ0lDLEVBQVdwZCxHQURDUixHQUVoQixHQUFJNGQsRUFBV1IsRUFBUU0sRUFBS25CLEdBQVUsTUFBTTdhLEVBakk1QixnQkFxSWhCLElBSEEsSUFBSXZKLEVBQVF1bEIsRUFBS3BCLEdBQVN1QixHQUN0QjNYLEVBQVEwWCxFQUFXRixFQUFLbEIsR0FDeEJzQixFQUFPQyxHQUFZL29CLEdBQ2RqQixFQUFJLEVBQUdBLEVBQUlxcEIsRUFBT3JwQixJQUFLb0UsRUFBTStOLEVBQVFuUyxHQUFLK3BCLEVBQUtILEVBQWlCNXBCLEVBQUlxcEIsRUFBUXJwQixFQUFJLEdBRzNGLEdBQUtvTSxFQUFPMEksSUFnRkwsQ0FDTCxJQUFLaFAsR0FBTSxXQUNUZ0ksRUFBYSxRQUNSaEksR0FBTSxXQUNYLElBQUlnSSxHQUFjLE9BQ2RoSSxHQUFNLFdBSVYsT0FIQSxJQUFJZ0ksRUFDSixJQUFJQSxFQUFhLEtBQ2pCLElBQUlBLEVBQWFxYixLQXBPRixlQXFPUnJiLEVBQWF2TixRQUNsQixDQU1GLElBREEsSUFDeUNnQixFQURyQzBvQixHQUpKbmMsRUFBZSxTQUFxQnJILEdBRWxDLE9BREE2RixFQUFXMU0sS0FBTWtPLEdBQ1YsSUFBSW9hLEVBQVd6YixFQUFRaEcsTUFFYSxVQUFJeWhCLEVBQW9CLFVBQzVEdFosRUFBTy9CLEVBQUtxYixHQUFhZ0MsRUFBSSxFQUFRdGIsRUFBS25JLE9BQVN5akIsSUFDbkQzb0IsRUFBTXFOLEVBQUtzYixRQUFTcGMsR0FBZTVMLEVBQUs0TCxFQUFjdk0sRUFBSzJtQixFQUFXM21CLElBRTFFNEssSUFBUzhkLEVBQWlCMWdCLFlBQWN1RSxHQUcvQyxJQUFJNmIsRUFBTyxJQUFJNWIsRUFBVSxJQUFJRCxFQUFhLElBQ3RDcWMsRUFBV3BjLEVBQW1CLFVBQUVxYyxRQUNwQ1QsRUFBS1MsUUFBUSxFQUFHLFlBQ2hCVCxFQUFLUyxRQUFRLEVBQUcsYUFDWlQsRUFBS1UsUUFBUSxJQUFPVixFQUFLVSxRQUFRLElBQUk3ZCxFQUFZdUIsRUFBbUIsVUFBRyxDQUN6RXFjLFFBQVMsU0FBaUI3VyxFQUFZdFMsR0FDcENrcEIsRUFBU2hxQixLQUFLUCxLQUFNMlQsRUFBWXRTLEdBQVMsSUFBTSxLQUVqRHFwQixTQUFVLFNBQWtCL1csRUFBWXRTLEdBQ3RDa3BCLEVBQVNocUIsS0FBS1AsS0FBTTJULEVBQVl0UyxHQUFTLElBQU0sT0FFaEQsUUFoSEg2TSxFQUFlLFNBQXFCckgsR0FDbEM2RixFQUFXMU0sS0FBTWtPLEVBOUlGLGVBK0lmLElBQUl5SCxFQUFhOUksRUFBUWhHLEdBQ3pCN0csS0FBS2txQixHQUFLdmMsRUFBVXBOLEtBQUssSUFBSW9LLE1BQU1nTCxHQUFhLEdBQ2hEM1YsS0FBSzRvQixHQUFXalQsR0FHbEJ4SCxFQUFZLFNBQWtCekcsRUFBUWlNLEVBQVlnQyxHQUNoRGpKLEVBQVcxTSxLQUFNbU8sRUFwSkwsWUFxSlp6QixFQUFXaEYsRUFBUXdHLEVBckpQLFlBc0paLElBQUl5YyxFQUFlampCLEVBQU9raEIsR0FDdEI1WCxFQUFTck0sRUFBVWdQLEdBQ3ZCLEdBQUkzQyxFQUFTLEdBQUtBLEVBQVMyWixFQUFjLE1BQU01YyxFQUFXLGlCQUUxRCxHQUFJaUQsR0FESjJFLE9BQTRCaFMsSUFBZmdTLEVBQTJCZ1YsRUFBZTNaLEVBQVN4RixFQUFTbUssSUFDL0NnVixFQUFjLE1BQU01YyxFQXhKL0IsaUJBeUpmL04sS0FBSzJvQixHQUFXamhCLEVBQ2hCMUgsS0FBSzZvQixHQUFXN1gsRUFDaEJoUixLQUFLNG9CLEdBQVdqVCxHQUdkd0QsSUFDRjdILEVBQVVwRCxFQWhKSSxhQWdKdUIsTUFDckNvRCxFQUFVbkQsRUFsSkQsU0FrSm9CLE1BQzdCbUQsRUFBVW5ELEVBbEpJLGFBa0pvQixNQUNsQ21ELEVBQVVuRCxFQWxKSSxhQWtKb0IsT0FHcEN2QixFQUFZdUIsRUFBbUIsVUFBRyxDQUNoQ3NjLFFBQVMsU0FBaUI5VyxHQUN4QixPQUFPMVMsRUFBSWpCLEtBQU0sRUFBRzJULEdBQVksSUFBTSxJQUFNLElBRTlDaVgsU0FBVSxTQUFrQmpYLEdBQzFCLE9BQU8xUyxFQUFJakIsS0FBTSxFQUFHMlQsR0FBWSxJQUVsQ2tYLFNBQVUsU0FBa0JsWCxHQUMxQixJQUFJOFYsRUFBUXhvQixFQUFJakIsS0FBTSxFQUFHMlQsRUFBWS9LLFVBQVUsSUFDL0MsT0FBUTZnQixFQUFNLElBQU0sRUFBSUEsRUFBTSxLQUFPLElBQU0sSUFFN0NxQixVQUFXLFNBQW1CblgsR0FDNUIsSUFBSThWLEVBQVF4b0IsRUFBSWpCLEtBQU0sRUFBRzJULEVBQVkvSyxVQUFVLElBQy9DLE9BQU82Z0IsRUFBTSxJQUFNLEVBQUlBLEVBQU0sSUFFL0JzQixTQUFVLFNBQWtCcFgsR0FDMUIsT0FBTzZWLEVBQVV2b0IsRUFBSWpCLEtBQU0sRUFBRzJULEVBQVkvSyxVQUFVLE1BRXREb2lCLFVBQVcsU0FBbUJyWCxHQUM1QixPQUFPNlYsRUFBVXZvQixFQUFJakIsS0FBTSxFQUFHMlQsRUFBWS9LLFVBQVUsT0FBUyxHQUUvRHFpQixXQUFZLFNBQW9CdFgsR0FDOUIsT0FBTzBWLEVBQWNwb0IsRUFBSWpCLEtBQU0sRUFBRzJULEVBQVkvSyxVQUFVLElBQUssR0FBSSxJQUVuRXNpQixXQUFZLFNBQW9CdlgsR0FDOUIsT0FBTzBWLEVBQWNwb0IsRUFBSWpCLEtBQU0sRUFBRzJULEVBQVkvSyxVQUFVLElBQUssR0FBSSxJQUVuRTRoQixRQUFTLFNBQWlCN1csRUFBWXRTLEdBQ3BDd1AsRUFBSTdRLEtBQU0sRUFBRzJULEVBQVkrVixFQUFRcm9CLElBRW5DcXBCLFNBQVUsU0FBa0IvVyxFQUFZdFMsR0FDdEN3UCxFQUFJN1EsS0FBTSxFQUFHMlQsRUFBWStWLEVBQVFyb0IsSUFFbkM4cEIsU0FBVSxTQUFrQnhYLEVBQVl0UyxHQUN0Q3dQLEVBQUk3USxLQUFNLEVBQUcyVCxFQUFZZ1csRUFBU3RvQixFQUFPdUgsVUFBVSxLQUVyRHdpQixVQUFXLFNBQW1CelgsRUFBWXRTLEdBQ3hDd1AsRUFBSTdRLEtBQU0sRUFBRzJULEVBQVlnVyxFQUFTdG9CLEVBQU91SCxVQUFVLEtBRXJEeWlCLFNBQVUsU0FBa0IxWCxFQUFZdFMsR0FDdEN3UCxFQUFJN1EsS0FBTSxFQUFHMlQsRUFBWWlXLEVBQVN2b0IsRUFBT3VILFVBQVUsS0FFckQwaUIsVUFBVyxTQUFtQjNYLEVBQVl0UyxHQUN4Q3dQLEVBQUk3USxLQUFNLEVBQUcyVCxFQUFZaVcsRUFBU3ZvQixFQUFPdUgsVUFBVSxLQUVyRDJpQixXQUFZLFNBQW9CNVgsRUFBWXRTLEdBQzFDd1AsRUFBSTdRLEtBQU0sRUFBRzJULEVBQVltVyxFQUFTem9CLEVBQU91SCxVQUFVLEtBRXJENGlCLFdBQVksU0FBb0I3WCxFQUFZdFMsR0FDMUN3UCxFQUFJN1EsS0FBTSxFQUFHMlQsRUFBWWtXLEVBQVN4b0IsRUFBT3VILFVBQVUsT0FzQ3pEc1gsRUFBZWhTLEVBL1BJLGVBZ1FuQmdTLEVBQWUvUixFQS9QQyxZQWdRaEI3TCxFQUFLNkwsRUFBbUIsVUFBRzNCLEVBQU8rRCxNQUFNLEdBQ3hDNVEsRUFBb0IsWUFBSXVPLEVBQ3hCdk8sRUFBaUIsU0FBSXdPLEcsNkJDalJyQixJQUFJc2QsRUFBUSxFQUFRLElBQ2hCQyxFQUFzQixFQUFRLEtBRTlCQyxFQUF1QixDQUN6QixlQUFnQixxQ0FHbEIsU0FBU0MsRUFBc0JDLEVBQVN4cUIsSUFDakNvcUIsRUFBTTVqQixZQUFZZ2tCLElBQVlKLEVBQU01akIsWUFBWWdrQixFQUFRLG1CQUMzREEsRUFBUSxnQkFBa0J4cUIsR0FnQjlCLElBWE15cUIsRUFXRkMsRUFBVyxDQUNiRCxTQVg4QixvQkFBbkJFLGVBRVRGLEVBQVUsRUFBUSxLQUNVLG9CQUFaMUcsVUFFaEIwRyxFQUFVLEVBQVEsTUFFYkEsR0FNUEcsaUJBQWtCLENBQUMsU0FBMEI1VyxFQUFNd1csR0FFakQsT0FEQUgsRUFBb0JHLEVBQVMsZ0JBQ3pCSixFQUFNcGtCLFdBQVdnTyxJQUNuQm9XLEVBQU1ya0IsY0FBY2lPLElBQ3BCb1csRUFBTTNrQixTQUFTdU8sSUFDZm9XLEVBQU14akIsU0FBU29OLElBQ2ZvVyxFQUFNMWpCLE9BQU9zTixJQUNib1csRUFBTXpqQixPQUFPcU4sR0FFTkEsRUFFTG9XLEVBQU1sa0Isa0JBQWtCOE4sR0FDbkJBLEVBQUszTixPQUVWK2pCLEVBQU10akIsa0JBQWtCa04sSUFDMUJ1VyxFQUFzQkMsRUFBUyxtREFDeEJ4VyxFQUFLdE8sWUFFVjBrQixFQUFNem5CLFNBQVNxUixJQUNqQnVXLEVBQXNCQyxFQUFTLGtDQUN4QkssS0FBS0MsVUFBVTlXLElBRWpCQSxJQUdUK1csa0JBQW1CLENBQUMsU0FBMkIvVyxHQUU3QyxHQUFvQixpQkFBVEEsRUFDVCxJQUNFQSxFQUFPNlcsS0FBS0csTUFBTWhYLEdBQ2xCLE1BQU85USxJQUVYLE9BQU84USxJQU9UaVgsUUFBUyxFQUVUQyxlQUFnQixhQUNoQkMsZUFBZ0IsZUFFaEJDLGtCQUFtQixFQUVuQkMsZUFBZ0IsU0FBd0JDLEdBQ3RDLE9BQU9BLEdBQVUsS0FBT0EsRUFBUyxNQUlyQ1osRUFBU0YsUUFBVSxDQUNqQnhMLE9BQVEsQ0FDTixPQUFVLHNDQUlkb0wsRUFBTXhrQixRQUFRLENBQUMsU0FBVSxNQUFPLFNBQVMsU0FBNkJvRCxHQUNwRTBoQixFQUFTRixRQUFReGhCLEdBQVUsTUFHN0JvaEIsRUFBTXhrQixRQUFRLENBQUMsT0FBUSxNQUFPLFVBQVUsU0FBK0JvRCxHQUNyRTBoQixFQUFTRixRQUFReGhCLEdBQVVvaEIsRUFBTWhqQixNQUFNa2pCLE1BR3pDL3JCLEVBQU9ELFFBQVVvc0IsRyw2QkM3RmpCLElBQUlhLEVBQWUsRUFBUSxLQVkzQmh0QixFQUFPRCxRQUFVLFNBQXFCa3RCLEVBQVNDLEVBQVFDLEVBQU1DLEVBQVNDLEdBQ3BFLElBQUlDLEVBQVEsSUFBSXppQixNQUFNb2lCLEdBQ3RCLE9BQU9ELEVBQWFNLEVBQU9KLEVBQVFDLEVBQU1DLEVBQVNDLEssY0NoQnBEcnRCLEVBQU9ELFFBQVVtZSxRQUFRLFMsY0NBekJsZSxFQUFPRCxRQUFVbWUsUUFBUSxVLGNDQXpCbGUsRUFBT0QsUUFBVW1lLFFBQVEsUSw2QkNPekIsTUFBTXFQLEVBQU8sRUFBUSxJQUVmQyxFQUFLLEVBQVEsS0FFbkJ6dEIsRUFBUTB0QixNQUFRRCxFQUFHQyxNQUNuQjF0QixFQUFRMnRCLE1BQVFGLEVBQUdFLE1BQ25CM3RCLEVBQVE0dEIsZUFBaUJILEVBQUdHLGVBRTVCLE1BQU1DLEVBQVMsRUFBUSxJQWlNdkIsU0FBU3ZjLEVBQVVvSyxHQUNqQjFiLEVBQVFnYixPQUFPVSxHQTFMakIxYixFQUFROHRCLFlBQWMsU0FBc0IzUixHQUMxQyxJQUFLVyxPQUFPM1YsU0FBU2dWLEdBQ25CLE1BQU0sSUFBSXJSLE1BQU0sMkJBR2xCLE9BQU9xUixFQUFLL1UsU0FBUyxRQVN2QnBILEVBQVErdEIsY0FBZ0IsU0FBd0I1UixHQUM5QyxPQUFPVyxPQUFPckcsS0FBSzBGLEVBQU0sUUFTM0JuYyxFQUFRZ3VCLFlBQWMsU0FBc0I3UixHQUMxQyxJQUFLVyxPQUFPM1YsU0FBU2dWLEdBQ25CLE1BQU0sSUFBSXJSLE1BQU0sMkJBR2xCLE9BQU8waUIsRUFBS3pTLE9BQU9vQixJQVNyQm5jLEVBQVFpdUIsY0FBZ0IsU0FBd0I5UixHQUM5QyxJQUFJK1IsRUFBVS9SLEVBS2QsT0FKSVcsT0FBTzNWLFNBQVNnVixLQUNsQitSLEVBQVUvUixFQUFLL1UsWUFHVjBWLE9BQU9yRyxLQUFLK1csRUFBS3hTLE9BQU9rVCxLQVNqQ2x1QixFQUFRZ2IsT0FBUyxTQUFpQm1ULEdBQ2hDLElBQU1yUixPQUFPM1YsU0FBU2duQixHQUNwQixNQUFNLElBQUlyakIsTUFBTSw4QkFHbEIsR0FBSXFqQixFQUFJam5CLE9BQVMsRUFDZixNQUFNLElBQUk0RCxNQUFNLDJDQUdsQixNQUFNc2lCLEVBQU9TLEVBQU83UyxPQUFPbVQsR0FDM0IsSUFBS251QixFQUFRb3VCLFlBQVloQixHQUN2QixNQUFNLElBQUl0aUIsTUFBTSxzQ0FBc0NzaUIsRUFBS2htQixTQUFTLE9BRXRFK21CLEVBQU1BLEVBQUk3akIsTUFBTXVqQixFQUFPN1MsT0FBTzhPLE9BRTlCLE1BQU14VixFQUFNdVosRUFBTzdTLE9BQU9tVCxHQUMxQixHQUFJN1osRUFBTSxFQUNSLE1BQU0sSUFBSXhKLE1BQU0sK0JBQStCd0osRUFBSWxOLFNBQVMsT0FJOUQsSUFGQSttQixFQUFNQSxFQUFJN2pCLE1BQU11akIsRUFBTzdTLE9BQU84TyxRQUV0QjVpQixTQUFXb04sRUFDakIsTUFBTSxJQUFJeEosTUFBTSxvQ0FBb0NxakIsRUFBSS9tQixTQUFTLFVBR25FLE1BQU8sQ0FDTGdtQixLQUFNQSxFQUNOcHNCLEtBQU15c0IsRUFBR0UsTUFBTVAsR0FDZmxtQixPQUFRb04sRUFDUitaLE9BQVFGLElBY1pudUIsRUFBUSthLE9BQVMsU0FBaUJzVCxFQUFRakIsRUFBTWxtQixHQUM5QyxJQUFLbW5CLFFBQW1CcnFCLElBQVRvcEIsRUFDYixNQUFNLElBQUl0aUIsTUFBTSw2REFJbEIsTUFBTXdqQixFQUFTdHVCLEVBQVF1dUIsV0FBV25CLEdBRWxDLElBQU10USxPQUFPM1YsU0FBU2tuQixHQUNwQixNQUFNLElBQUl2akIsTUFBTSw2QkFPbEIsR0FKYyxNQUFWNUQsSUFDRkEsRUFBU21uQixFQUFPbm5CLFFBR2RBLEdBQVVtbkIsRUFBT25uQixTQUFXQSxFQUM5QixNQUFNLElBQUk0RCxNQUFNLHNEQUdsQixPQUFPZ1MsT0FBTzFHLE9BQU8sQ0FDbkIwRyxPQUFPckcsS0FBS29YLEVBQU85UyxPQUFPdVQsSUFDMUJ4UixPQUFPckcsS0FBS29YLEVBQU85UyxPQUFPN1QsSUFDMUJtbkIsS0FVSnJ1QixFQUFRdXVCLFdBQWEsU0FBcUJ2dEIsR0FDeEMsSUFBSW9zQixFQUFPcHNCLEVBRVgsR0FBb0IsaUJBQVRBLEVBQW1CLENBQzVCLFFBQXVCZ0QsSUFBbkJ5cEIsRUFBR0MsTUFBTTFzQixHQUNYLE1BQU0sSUFBSThKLE1BQU0scUNBQXFDOUosS0FFdkRvc0IsRUFBT0ssRUFBR0MsTUFBTTFzQixHQUdsQixHQUFvQixpQkFBVG9zQixFQUNULE1BQU0sSUFBSXRpQixNQUFNLCtDQUErQ3NpQixLQUdqRSxRQUF1QnBwQixJQUFuQnlwQixFQUFHRSxNQUFNUCxLQUF3QnB0QixFQUFRd3VCLFVBQVVwQixHQUNyRCxNQUFNLElBQUl0aUIsTUFBTSwrQkFBK0JzaUIsS0FHakQsT0FBT0EsR0FTVHB0QixFQUFRd3VCLFVBQVksU0FBa0JwQixHQUNwQyxPQUFPQSxFQUFPLEdBQUtBLEVBQU8sSUFTNUJwdEIsRUFBUW91QixZQUFjLFNBQW9CaEIsR0FDeEMsUUFBSXB0QixFQUFRd3VCLFVBQVVwQixNQUlsQkssRUFBR0UsTUFBTVAsSUFpQmZwdEIsRUFBUXNSLFNBQVdBLEVBU25CdFIsRUFBUXl1QixPQUFTLFNBQWlCL1MsR0FHaEMsT0FGQXBLLEVBQVNvSyxHQUVGQSxFQUFVcFIsTUFBTSxFQUFHLEssNkJDN041QixTQUFTb2tCLEVBQVdoYyxHQUNsQixHQUF1QixpQkFBWixFQUFzQixDQUMvQixHQUFJZ2MsRUFBVWYsTUFBTWpiLEdBQ2xCLE9BQU9nYyxFQUFVZixNQUFNamIsR0FHekIsTUFBTSxJQUFJNUgsTUFBTSwwQkFBNEI0SCxHQUN2QyxHQUF1QixpQkFBWixHQUF3QkEsYUFBaUJwTSxPQUFRLENBQ2pFLEdBQUlvb0IsRUFBVWhCLE1BQU1oYixHQUNsQixPQUFPZ2MsRUFBVWhCLE1BQU1oYixHQUd6QixNQUFNLElBQUk1SCxNQUFNLDBCQUE0QjRILEdBRzlDLE1BQU0sSUFBSTVILE1BQU0sNkJBQStCNEgsR0FHakQsTUFBTWljLEdBQUssRUFvRFgsU0FBU3BzQixFQUFHNnFCLEVBQU13QixFQUFNNXRCLEVBQU02dEIsRUFBWS9RLEdBQ3hDLE1BQU8sQ0FDTHNQLEtBQU1BLEVBQ053QixLQUFNQSxFQUNONXRCLEtBQU1BLEVBQ042dEIsV0FBWUMsUUFBUUQsR0FDcEIvUSxLQUFNZ1IsUUFBUWhSLElBekRsQjRRLEVBQVVLLHNCQUF3QkosRUFDbENELEVBQVVDLEVBQUlBLEVBRWRELEVBQVVNLE1BQVEsQ0FDaEIsQ0FBQyxFQUFHLEdBQUksT0FDUixDQUFDLEVBQUcsR0FBSSxPQUNSLENBQUMsR0FBSSxHQUFJLFFBQ1QsQ0FBQyxHQUFJLElBQUssT0FDVixDQUFDLEdBQUlMLEVBQUcsV0FDUixDQUFDLEdBQUlBLEVBQUcsTUFBTyxjQUNmLENBQUMsR0FBSUEsRUFBRyxPQUFRLGNBQ2hCLENBQUMsR0FBSUEsRUFBRyxPQUFRLGNBQ2hCLENBQUMsR0FBSUEsRUFBRyxVQUFXLGNBQ25CLENBQUMsSUFBSyxHQUFJLFFBQ1YsQ0FBQyxJQUFLLEdBQUksT0FDVixDQUFDLElBQUssRUFBRyxtQkFDVCxDQUFDLElBQUssRUFBRyxxQkFDVCxDQUFDLElBQUssRUFBRyxnQkFDVCxDQUFDLElBQUssRUFBRyxlQUNULENBQUMsSUFBSyxFQUFHLE9BQ1QsQ0FBQyxJQUFLLEVBQUcsT0FDVCxDQUFDLElBQUtBLEVBQUcsUUFBUSxFQUFPLFFBSXhCLENBQUMsSUFBS0EsRUFBRyxRQUVULENBQUMsSUFBS0EsRUFBRyxPQUNULENBQUMsSUFBSyxFQUFHLFNBQ1QsQ0FBQyxJQUFLLEdBQUksU0FDVixDQUFDLElBQUssSUFBSyxVQUNYLENBQUMsSUFBS0EsRUFBRyxZQUNULENBQUMsSUFBSyxFQUFHLFFBQ1QsQ0FBQyxJQUFLLEVBQUcsTUFDVCxDQUFDLElBQUssRUFBRyxPQUNULENBQUMsSUFBSyxFQUFHLHNCQUNULENBQUMsSUFBSyxFQUFHLFNBR1hELEVBQVVoQixNQUFRLEdBQ2xCZ0IsRUFBVWYsTUFBUSxHQUdsQmUsRUFBVU0sTUFBTXpiLElBQUkwYixJQUNsQixNQUFNdmMsRUFBUW5RLEVBQUU4SCxNQUFNLEtBQU00a0IsR0FDNUJQLEVBQVVmLE1BQU1qYixFQUFNMGEsTUFBUTFhLEVBQzlCZ2MsRUFBVWhCLE1BQU1oYixFQUFNMVIsTUFBUTBSLElBR2hDZ2MsRUFBVXZzQixPQUFTSSxFQVluQnRDLEVBQU9ELFFBQVUwdUIsRyw2QkNoRmpCLE1BQU1RLEVBQUssRUFBUSxLQUNidlQsRUFBWSxFQUFRLEtBQ3BCd1QsRUFBYSxFQUFRLEtBQ3JCQyxFQUFTLEVBQVEsSUFDakJDLEVBQVUsRUFBUSxLQXdCeEIsTUFBTXZULEVBK0JKLFlBQWE3UixFQUFTcWxCLEVBQU81VCxFQUFXNlQsR0FDdEMsR0FBSUMsRUFBS3RULE1BQU1qUyxHQUFVLENBRXZCLE1BQU1vVCxFQUFNcFQsRUFNWixPQUxBNUosS0FBSzRKLFFBQVVvVCxFQUFJcFQsUUFDbkI1SixLQUFLaXZCLE1BQVFqUyxFQUFJaVMsTUFDakJqdkIsS0FBS3FiLFVBQVlvQixPQUFPckcsS0FBSzRHLEVBQUkzQixnQkFFakNyYixLQUFLa3ZCLGNBQWdCbFMsRUFBSWtTLGdCQUFrQyxJQUFoQmxTLEVBQUlwVCxRQUFnQixZQUFjLFdBSS9FLEdBQXVCLGlCQUFaQSxFQUFzQixDQUUvQixNQUFNd2xCLEVBQVc5VCxFQUFVNEIsVUFBVXRULEdBQ3JDLEdBQUl3bEIsRUFBVSxDQUVaLE1BQU1wUyxFQUFNMUIsRUFBVVgsT0FBTy9RLEdBQzdCNUosS0FBSzRKLFFBQVV5bEIsU0FBU3JTLEVBQUkvUyxNQUFNLEVBQUcsR0FBR2xELFNBQVMsT0FBUSxJQUN6RC9HLEtBQUtpdkIsTUFBUUgsRUFBV1EsU0FBU3RTLEVBQUkvUyxNQUFNLElBQzNDakssS0FBS3FiLFVBQVl5VCxFQUFXUyxTQUFTdlMsRUFBSS9TLE1BQU0sSUFDL0NqSyxLQUFLa3ZCLGNBQWdCRSxPQUdyQnB2QixLQUFLNEosUUFBVSxFQUNmNUosS0FBS2l2QixNQUFRLFNBQ2JqdkIsS0FBS3FiLFVBQVl3VCxFQUFHakIsY0FBY2hrQixHQUNsQzVKLEtBQUtrdkIsY0FBZ0IsWUFJdkIsT0FGQXpULEVBQUkrVCxZQUFZeHZCLFdBQ2hCYyxPQUFPQyxlQUFlZixLQUFNLFNBQVUsQ0FBRXFCLE1BQU91SSxJQUlqRCxHQUFJNlMsT0FBTzNWLFNBQVM4QyxHQUFwQixDQUNFLE1BQU02bEIsRUFBWTdsQixFQUFRSyxNQUFNLEVBQUcsR0FDN0JxTCxFQUFJK1osU0FBU0ksRUFBVTFvQixTQUFTLE9BQVEsSUFDOUMsR0FBVSxJQUFOdU8sRUFBUyxDQUVYLE1BQU0wSCxFQUFNcFQsRUFDWjVKLEtBQUs0SixRQUFVMEwsRUFDZnRWLEtBQUtpdkIsTUFBUUgsRUFBV1EsU0FBU3RTLEVBQUkvUyxNQUFNLElBQzNDakssS0FBS3FiLFVBQVl5VCxFQUFXUyxTQUFTdlMsRUFBSS9TLE1BQU0sSUFDL0NqSyxLQUFLa3ZCLGNBQWdCLGNBR3JCbHZCLEtBQUs0SixRQUFVLEVBQ2Y1SixLQUFLaXZCLE1BQVEsU0FDYmp2QixLQUFLcWIsVUFBWXpSLEVBQ2pCNUosS0FBS2t2QixjQUFnQixZQUV2QnpULEVBQUkrVCxZQUFZeHZCLFdBU2xCQSxLQUFLNEosUUFBVUEsRUFLZjVKLEtBQUtpdkIsTUFBUUEsRUFLYmp2QixLQUFLcWIsVUFBWUEsRUFLakJyYixLQUFLa3ZCLGNBQWdCQSxJQUE4QixJQUFadGxCLEVBQWdCLFlBQWMsVUFFckU2UixFQUFJK1QsWUFBWXh2QixNQVdsQixhQUNFLElBQUkwSCxFQUFTMUgsS0FBSzB2QixRQUVsQixJQUFLaG9CLEVBQVEsQ0FDWCxHQUFxQixJQUFqQjFILEtBQUs0SixRQUNQbEMsRUFBUzFILEtBQUtxYixjQUNULElBQXFCLElBQWpCcmIsS0FBSzRKLFFBT2QsTUFBTSxJQUFJYSxNQUFNLHVCQU5oQi9DLEVBQVMrVSxPQUFPMUcsT0FBTyxDQUNyQjBHLE9BQU9yRyxLQUFLLEtBQU0sT0FDbEIwWSxFQUFXYSxjQUFjM3ZCLEtBQUtpdkIsT0FDOUJqdkIsS0FBS3FiLFlBT1R2YSxPQUFPQyxlQUFlZixLQUFNLFVBQVcsQ0FBRXFCLE1BQU9xRyxJQUdsRCxPQUFPQSxFQVNULGFBQ0UsT0FBTytVLE9BQU8xRyxPQUFPLENBQ25CMEcsT0FBT3JHLEtBQUssSUFBSXBXLEtBQUs0SixVQUFXLE9BQ2hDa2xCLEVBQVdhLGNBQWMzdkIsS0FBS2l2QixPQUM5QkosRUFBR1QsT0FBT3B1QixLQUFLcWIsYUFTbkIsT0FDRSxHQUFtQixXQUFmcmIsS0FBS2l2QixNQUNQLE1BQU0sSUFBSXhrQixNQUFNLDRDQUdsQixNQUFNLEtBQUU5SixFQUFJLE9BQUVrRyxHQUFXZ29CLEVBQUdsVSxPQUFPM2EsS0FBS3FiLFdBRXhDLEdBQWEsYUFBVDFhLEVBQ0YsTUFBTSxJQUFJOEosTUFBTSxzREFHbEIsR0FBZSxLQUFYNUQsRUFDRixNQUFNLElBQUk0RCxNQUFNLHFEQUdsQixPQUFPLElBQUkwa0IsRUFBSyxFQUFHbnZCLEtBQUtpdkIsTUFBT2p2QixLQUFLcWIsV0FRdEMsT0FDRSxPQUFPLElBQUk4VCxFQUFLLEVBQUdudkIsS0FBS2l2QixNQUFPanZCLEtBQUtxYixXQVN0QyxvQkFBcUJ1VSxFQUFPNXZCLEtBQUtrdkIsZUFDL0IsR0FBSWx2QixLQUFLcUcsUUFBVXVwQixJQUFTNXZCLEtBQUtrdkIsY0FDL0IsT0FBT2x2QixLQUFLcUcsT0FFZCxJQUFJNEMsRUFBTSxLQUNWLEdBQXFCLElBQWpCakosS0FBSzRKLFFBQWUsQ0FDdEIsR0FBYSxjQUFUZ21CLEVBQ0YsTUFBTSxJQUFJbmxCLE1BQU0sa0lBRWxCeEIsRUFBTTRsQixFQUFHbEIsWUFBWTN0QixLQUFLcWIsZUFDckIsSUFBcUIsSUFBakJyYixLQUFLNEosUUFHZCxNQUFNLElBQUlhLE1BQU0sdUJBRmhCeEIsRUFBTXFTLEVBQVVaLE9BQU9rVixFQUFNNXZCLEtBQUswSCxRQUFRWCxXQVE1QyxPQUpJNm9CLElBQVM1dkIsS0FBS2t2QixlQUVoQnB1QixPQUFPQyxlQUFlZixLQUFNLFNBQVUsQ0FBRXFCLE1BQU80SCxJQUUxQ0EsRUFHVCxTQUFVMm1CLEdBQ1IsT0FBTzV2QixLQUFLNnZCLG9CQUFvQkQsR0FRbEMsU0FDRSxNQUFPLENBQ0xYLE1BQU9qdkIsS0FBS2l2QixNQUNacmxCLFFBQVM1SixLQUFLNEosUUFDZGtTLEtBQU05YixLQUFLcWIsV0FVZixPQUFReVUsR0FDTixPQUFPOXZCLEtBQUtpdkIsUUFBVWEsRUFBTWIsT0FDMUJqdkIsS0FBSzRKLFVBQVlrbUIsRUFBTWxtQixTQUN2QjVKLEtBQUtxYixVQUFVMFUsT0FBT0QsRUFBTXpVLFdBVWhDLG1CQUFvQnlVLEdBQ2xCLE1BQU1FLEVBQVdoQixFQUFRaUIsbUJBQW1CSCxHQUM1QyxHQUFJRSxFQUNGLE1BQU0sSUFBSXZsQixNQUFNdWxCLElBS3RCLE1BQU1iLEVBM1JTLEVBQVEsSUEyUlZlLENBQU96VSxFQUFLLENBQ3ZCMFUsVUFBVyxNQUNYQyxXQUFZLHFCQUdkakIsRUFBS0osT0FBU0EsRUFFZG52QixFQUFPRCxRQUFVd3ZCLEcsZ0JDeFNqQixJQUFJa0IsRUFBSyxFQUFRLElBQ2I1UyxFQUFPLEVBQVEsSUFZbkI5ZCxFQUFRMndCLFNBQVcsU0FBVUMsRUFBTy9PLEdBQ2xDLElBQUlnUCxFQUFPLEdBQUlDLEVBQVEsR0FDdkJELEVBQUtsa0IsS0FBS2lrQixHQUNSLFNBQVNHLEVBQU1ya0IsR0FDZixHQUFJQSxHQUFTbWtCLEVBQUszcEIsT0FBUSxPQUFPMmEsRUFBRyxLQUFNZ1AsRUFBTUMsR0FDaERKLEVBQUdNLFFBQVFILEVBQUtua0IsSUFBUSxTQUFVdWtCLEVBQUtDLEdBQ3JDLEdBQUlELEVBQUssT0FBT3BQLEVBQUdvUCxJQWdCdkIsU0FBa0JMLEVBQU9NLEVBQVFyUCxJQUM3QixTQUFTa1AsRUFBTXJrQixHQUNmLEdBQUlBLEdBQVN3a0IsRUFBT2hxQixPQUFRLE9BQU8yYSxJQUNuQyxJQUFJc1AsRUFBUXJULEVBQUt6WCxLQUFLdXFCLEVBQU9NLEVBQU94a0IsSUFDcENna0IsRUFBR3pXLEtBQUtrWCxHQUFPLFNBQVVGLEVBQUtHLEdBQzVCLEdBQUlILEVBQUssT0FBT3BQLEVBQUdvUCxHQUNmRyxFQUFNQyxjQUNSUixFQUFLbGtCLEtBQUt3a0IsR0FFVkwsRUFBTW5rQixLQUFLd2tCLEdBRWJKLElBQU9ya0IsTUFWVixDQVlDLEdBNUJBNGtCLENBQVFULEVBQUtua0IsR0FBUXdrQixHQUFRLFNBQVVELEdBQ3JDLEdBQUlBLEVBQUssT0FBT3BQLEVBQUdvUCxHQUNuQkYsSUFBT3JrQixTQU5aLENBU0MsSyxnQkN6QkosSUFBSWdrQixFQUFLLEVBQVEsSUFDYkMsRUFBVyxFQUFRLEtBQWNBLFNBa0VyQyxTQUFTaGMsRUFBS3pQLEVBQUdpRSxHQUNmLE9BQUlqRSxFQUFJaUUsR0FBVyxFQUNmakUsRUFBSWlFLEVBQVcsRUFDWixFQTFEVG5KLEVBQVF1eEIsT0FBUyxTQUFVWCxFQUFPL08sR0FDaEM4TyxFQUFTQyxHQUFPLFNBQVVLLEVBQUtKLEVBQU1DLEdBQ25DLEdBQUlHLEVBQUssT0FBT3BQLEVBQUdvUCxHQUNuQmp4QixFQUFRd3hCLFFBQVFWLEdBQU8sU0FBVUcsR0FDL0IsR0FBSUEsRUFBSyxPQUFPcFAsRUFBR29QLEdBQ25CanhCLEVBQVF5eEIsT0FBT1osRUFBTWhQLFVBYTNCN2hCLEVBQVF3eEIsUUFBVSxTQUFVVixFQUFPalAsSUFDL0IsU0FBU2tQLEVBQU1ya0IsR0FDZixHQUFJQSxHQUFTb2tCLEVBQU01cEIsT0FBUSxPQUFPMmEsSUFDbEM2TyxFQUFHZ0IsT0FBT1osRUFBTXBrQixJQUFRLFNBQVV1a0IsR0FDaEMsR0FBSUEsRUFBSyxPQUFPcFAsRUFBR29QLEdBQ25CRixJQUFPcmtCLE1BSlYsQ0FNQyxJQVdKMU0sRUFBUXl4QixPQUFTLFNBQVVaLEVBQU1oUCxHQUMvQmdQLEVBQUs5Z0IsS0FBSzRFLEdBQ1IsU0FBU29jLEVBQU1ya0IsR0FDZixHQUFJQSxHQUFTbWtCLEVBQUszcEIsT0FBUSxPQUFPMmEsSUFDakM2TyxFQUFHaUIsTUFBTWQsRUFBS25rQixJQUFRLFNBQVV1a0IsR0FDOUIsR0FBSUEsRUFBSyxPQUFPcFAsRUFBR29QLEdBQ25CRixJQUFPcmtCLE1BSlYsQ0FNQyxLLGdCQ3hESixJQUFJZ2tCLEVBQUssRUFBUSxJQUNiNVMsRUFBTyxFQUFRLElBQ2Y2UyxFQUFXLEVBQVEsS0FBY0EsU0FZckMzd0IsRUFBUTR4QixPQUFTLFNBQVVDLEVBQU9DLEVBQU9qUSxHQUN2QzhPLEVBQVNrQixHQUFPLFNBQVVaLEVBQUtKLEVBQU1DLEdBQ25DLEdBQUlHLEVBQUssT0FBT3BQLEVBQUdvUCxHQUNuQmp4QixFQUFRK3hCLE9BQU9GLEVBQU9DLEVBQU9qQixHQUFNLFNBQVVJLEdBQzNDLEdBQUlBLEVBQUssT0FBT3BQLEVBQUdvUCxHQUNuQmp4QixFQUFRZ3lCLFFBQVFILEVBQU9DLEVBQU9oQixHQUFPLFNBQVVHLEdBQzdDLEdBQUlBLEVBQUssT0FBT3BQLEVBQUdvUCxHQUNuQnBQLGNBZ0JSN2hCLEVBQVEreEIsT0FBUyxTQUFVRixFQUFPQyxFQUFPakIsRUFBTWhQLEdBQzdDZ1AsRUFBSzlnQixPQUNILFNBQVNnaEIsRUFBTXJrQixHQUNmLEdBQUlBLEdBQVNta0IsRUFBSzNwQixPQUFRLE9BQU8yYSxJQUNqQyxJQUFJb1EsRUFBUW5VLEVBQUtvVSxTQUFTTCxFQUFPaEIsRUFBS25rQixJQUN0Q3VsQixFQUFRblUsRUFBS3pYLEtBQUt5ckIsRUFBT0csR0FDekJ2QixFQUFHeUIsT0FBT0YsR0FBTyxTQUFVRSxHQUN6QixHQUFJQSxFQUFRLE9BQU9wQixJQUFPcmtCLEdBQzFCZ2tCLEVBQUcwQixNQUFNSCxHQUFPLFNBQVVoQixHQUN4QixHQUFJQSxFQUFLLE9BQU9wUCxFQUFHb1AsR0FDbkJGLElBQU9ya0IsU0FSWixDQVdDLElBYUoxTSxFQUFRZ3lCLFFBQVUsU0FBVUgsRUFBT0MsRUFBT2hCLEVBQU9qUCxJQUM3QyxTQUFTa1AsRUFBTXJrQixHQUNmLEdBQUlBLEdBQVNva0IsRUFBTTVwQixPQUFRLE9BQU8yYSxJQUNsQzZPLEVBQUcyQixTQUFTdkIsRUFBTXBrQixJQUFRLFNBQVV1a0IsRUFBS3ZiLEdBQ3ZDLEdBQUl1YixFQUFLLE9BQU9wUCxFQUFHb1AsR0FDbkIsSUFBSWdCLEVBQVFuVSxFQUFLb1UsU0FBU0wsRUFBT2YsRUFBTXBrQixJQUN2Q3VsQixFQUFRblUsRUFBS3pYLEtBQUt5ckIsRUFBT0csR0FDekJ2QixFQUFHNEIsVUFBVUwsRUFBT3ZjLEdBQU0sU0FBVXViLEdBQ2xDLEdBQUlBLEVBQUssT0FBT3BQLEVBQUdvUCxHQUNuQkYsSUFBT3JrQixTQVJaLENBV0MsSyxnQkM1RUp6TSxFQUFPRCxTQUFXLEVBQVEsS0FBc0IsRUFBUSxFQUFSLEVBQW9CLFdBQ2xFLE9BQTRHLEdBQXJHbUIsT0FBT0MsZUFBZSxFQUFRLEdBQVIsQ0FBeUIsT0FBUSxJQUFLLENBQUVFLElBQUssV0FBYyxPQUFPLEtBQVE0RCxNLGdCQ0R6R2xGLEVBQVF1RixFQUFJLEVBQVEsSSxnQkNBcEIsSUFBSUssRUFBTSxFQUFRLElBQ2Q2RCxFQUFZLEVBQVEsSUFDcEJ3RixFQUFlLEVBQVEsR0FBUixFQUE2QixHQUM1Q3BGLEVBQVcsRUFBUSxHQUFSLENBQXlCLFlBRXhDNUosRUFBT0QsUUFBVSxTQUFVbUMsRUFBUXVyQixHQUNqQyxJQUdJMXJCLEVBSEF3RCxFQUFJaUUsRUFBVXRILEdBQ2QxQixFQUFJLEVBQ0pzSSxFQUFTLEdBRWIsSUFBSy9HLEtBQU93RCxFQUFPeEQsR0FBTzZILEdBQVVqRSxFQUFJSixFQUFHeEQsSUFBUStHLEVBQU80RCxLQUFLM0ssR0FFL0QsS0FBTzByQixFQUFNeG1CLE9BQVN6RyxHQUFPbUYsRUFBSUosRUFBR3hELEVBQU0wckIsRUFBTWp0QixTQUM3Q3dPLEVBQWFsRyxFQUFRL0csSUFBUStHLEVBQU80RCxLQUFLM0ssSUFFNUMsT0FBTytHLEksZ0JDZlQsSUFBSXpELEVBQUssRUFBUSxHQUNiSCxFQUFXLEVBQVEsR0FDbkJvdEIsRUFBVSxFQUFRLElBRXRCdHlCLEVBQU9ELFFBQVUsRUFBUSxHQUFvQm1CLE9BQU9xeEIsaUJBQW1CLFNBQTBCaHRCLEVBQUc2VCxHQUNsR2xVLEVBQVNLLEdBS1QsSUFKQSxJQUdJN0IsRUFIQTBMLEVBQU9rakIsRUFBUWxaLEdBQ2ZuUyxFQUFTbUksRUFBS25JLE9BQ2R6RyxFQUFJLEVBRUR5RyxFQUFTekcsR0FBRzZFLEVBQUdDLEVBQUVDLEVBQUc3QixFQUFJMEwsRUFBSzVPLEtBQU00WSxFQUFXMVYsSUFDckQsT0FBTzZCLEksZ0JDVlQsSUFBSWlFLEVBQVksRUFBUSxJQUNwQjZELEVBQU8sRUFBUSxJQUFrQi9ILEVBQ2pDNkIsRUFBVyxHQUFHQSxTQUVkcXJCLEVBQStCLGlCQUFWanVCLFFBQXNCQSxRQUFVckQsT0FBT29ZLG9CQUM1RHBZLE9BQU9vWSxvQkFBb0IvVSxRQUFVLEdBVXpDdkUsRUFBT0QsUUFBUXVGLEVBQUksU0FBNkJqQixHQUM5QyxPQUFPbXVCLEdBQW9DLG1CQUFyQnJyQixFQUFTeEcsS0FBSzBELEdBVGpCLFNBQVVBLEdBQzdCLElBQ0UsT0FBT2dKLEVBQUtoSixHQUNaLE1BQU9NLEdBQ1AsT0FBTzZ0QixFQUFZbm9CLFNBSzBDb29CLENBQWVwdUIsR0FBTWdKLEVBQUs3RCxFQUFVbkYsTSw2QkNmckcsSUFBSWtWLEVBQWMsRUFBUSxHQUN0QitZLEVBQVUsRUFBUSxJQUNsQkksRUFBTyxFQUFRLElBQ2ZucEIsRUFBTSxFQUFRLElBQ2RJLEVBQVcsRUFBUSxHQUNuQkwsRUFBVSxFQUFRLElBQ2xCcXBCLEVBQVV6eEIsT0FBTzB4QixPQUdyQjV5QixFQUFPRCxTQUFXNHlCLEdBQVcsRUFBUSxFQUFSLEVBQW9CLFdBQy9DLElBQUloUixFQUFJLEdBQ0ovZCxFQUFJLEdBRUpKLEVBQUlqQyxTQUNKaWdCLEVBQUksdUJBR1IsT0FGQUcsRUFBRW5lLEdBQUssRUFDUGdlLEVBQUV6YixNQUFNLElBQUlzQixTQUFRLFNBQVV3ckIsR0FBS2p2QixFQUFFaXZCLEdBQUtBLEtBQ2QsR0FBckJGLEVBQVEsR0FBSWhSLEdBQUduZSxJQUFXdEMsT0FBT2tPLEtBQUt1akIsRUFBUSxHQUFJL3VCLElBQUl3QyxLQUFLLEtBQU9vYixLQUN0RSxTQUFnQjNkLEVBQVFkLEdBTTNCLElBTEEsSUFBSW9YLEVBQUl4USxFQUFTOUYsR0FDYm1PLEVBQU9oSixVQUFVL0IsT0FDakJ3RixFQUFRLEVBQ1JxbUIsRUFBYUosRUFBS3B0QixFQUNsQnl0QixFQUFTeHBCLEVBQUlqRSxFQUNWME0sRUFBT3ZGLEdBTVosSUFMQSxJQUlJMUssRUFKQXlCLEVBQUk4RixFQUFRTixVQUFVeUQsTUFDdEIyQyxFQUFPMGpCLEVBQWFSLEVBQVE5dUIsR0FBRzJTLE9BQU8yYyxFQUFXdHZCLElBQU04dUIsRUFBUTl1QixHQUMvRHlELEVBQVNtSSxFQUFLbkksT0FDZHlqQixFQUFJLEVBRUR6akIsRUFBU3lqQixHQUNkM29CLEVBQU1xTixFQUFLc2IsS0FDTm5SLElBQWV3WixFQUFPcHlCLEtBQUs2QyxFQUFHekIsS0FBTW9ZLEVBQUVwWSxHQUFPeUIsRUFBRXpCLElBRXRELE9BQU9vWSxHQUNQd1ksRyxjQ3BDSjN5QixFQUFPRCxRQUFVbUIsT0FBTzhnQixJQUFNLFNBQVloRSxFQUFHZ1YsR0FFM0MsT0FBT2hWLElBQU1nVixFQUFVLElBQU5oVixHQUFXLEVBQUlBLEdBQU0sRUFBSWdWLEVBQUloVixHQUFLQSxHQUFLZ1YsR0FBS0EsSSw2QkNGL0QsSUFBSTlvQixFQUFZLEVBQVEsSUFDcEI5RixFQUFXLEVBQVEsR0FDbkJpaEIsRUFBUyxFQUFRLEtBQ2pCdFYsRUFBYSxHQUFHMUYsTUFDaEI0b0IsRUFBWSxHQUVaQyxFQUFZLFNBQVU5dkIsRUFBR2lSLEVBQUsrUixHQUNoQyxLQUFNL1IsS0FBTzRlLEdBQVksQ0FDdkIsSUFBSyxJQUFJaHhCLEVBQUksR0FBSXpCLEVBQUksRUFBR0EsRUFBSTZULEVBQUs3VCxJQUFLeUIsRUFBRXpCLEdBQUssS0FBT0EsRUFBSSxJQUV4RHl5QixFQUFVNWUsR0FBT3JRLFNBQVMsTUFBTyxnQkFBa0IvQixFQUFFbUUsS0FBSyxLQUFPLEtBQ2pFLE9BQU82c0IsRUFBVTVlLEdBQUtqUixFQUFHZ2pCLElBRzdCcG1CLEVBQU9ELFFBQVVpRSxTQUFTaEMsTUFBUSxTQUFjbUksR0FDOUMsSUFBSTVDLEVBQUsyQyxFQUFVOUosTUFDZit5QixFQUFXcGpCLEVBQVdwUCxLQUFLcUksVUFBVyxHQUN0Q29xQixFQUFRLFdBQ1YsSUFBSWhOLEVBQU8rTSxFQUFTaGQsT0FBT3BHLEVBQVdwUCxLQUFLcUksWUFDM0MsT0FBTzVJLGdCQUFnQmd6QixFQUFRRixFQUFVM3JCLEVBQUk2ZSxFQUFLbmYsT0FBUW1mLEdBQVFmLEVBQU85ZCxFQUFJNmUsRUFBTWpjLElBR3JGLE9BREkvRixFQUFTbUQsRUFBR25GLGFBQVlneEIsRUFBTWh4QixVQUFZbUYsRUFBR25GLFdBQzFDZ3hCLEksY0N0QlRwekIsRUFBT0QsUUFBVSxTQUFVd0gsRUFBSTZlLEVBQU1qYyxHQUNuQyxJQUFJa3BCLE9BQWN0dkIsSUFBVG9HLEVBQ1QsT0FBUWljLEVBQUtuZixRQUNYLEtBQUssRUFBRyxPQUFPb3NCLEVBQUs5ckIsSUFDQUEsRUFBRzVHLEtBQUt3SixHQUM1QixLQUFLLEVBQUcsT0FBT2twQixFQUFLOXJCLEVBQUc2ZSxFQUFLLElBQ1I3ZSxFQUFHNUcsS0FBS3dKLEVBQU1pYyxFQUFLLElBQ3ZDLEtBQUssRUFBRyxPQUFPaU4sRUFBSzlyQixFQUFHNmUsRUFBSyxHQUFJQSxFQUFLLElBQ2pCN2UsRUFBRzVHLEtBQUt3SixFQUFNaWMsRUFBSyxHQUFJQSxFQUFLLElBQ2hELEtBQUssRUFBRyxPQUFPaU4sRUFBSzlyQixFQUFHNmUsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssSUFDMUI3ZSxFQUFHNUcsS0FBS3dKLEVBQU1pYyxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUN6RCxLQUFLLEVBQUcsT0FBT2lOLEVBQUs5ckIsRUFBRzZlLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssSUFDbkM3ZSxFQUFHNUcsS0FBS3dKLEVBQU1pYyxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBQ2xFLE9BQU83ZSxFQUFHNkMsTUFBTUQsRUFBTWljLEssZ0JDZDFCLElBQUlrTixFQUFZLEVBQVEsR0FBYTdELFNBQ2pDOEQsRUFBUSxFQUFRLElBQWtCbnFCLEtBQ2xDb3FCLEVBQUssRUFBUSxJQUNiQyxFQUFNLGNBRVZ6ekIsRUFBT0QsUUFBbUMsSUFBekJ1ekIsRUFBVUUsRUFBSyxPQUEwQyxLQUEzQkYsRUFBVUUsRUFBSyxRQUFpQixTQUFrQm5xQixFQUFLcXFCLEdBQ3BHLElBQUlqdEIsRUFBUzhzQixFQUFNbHRCLE9BQU9nRCxHQUFNLEdBQ2hDLE9BQU9pcUIsRUFBVTdzQixFQUFTaXRCLElBQVUsSUFBT0QsRUFBSTFzQixLQUFLTixHQUFVLEdBQUssTUFDakU2c0IsRyxnQkNSSixJQUFJSyxFQUFjLEVBQVEsR0FBYUMsV0FDbkNMLEVBQVEsRUFBUSxJQUFrQm5xQixLQUV0Q3BKLEVBQU9ELFFBQVUsRUFBSTR6QixFQUFZLEVBQVEsSUFBa0IsUUFBV2pSLElBQVcsU0FBb0JyWixHQUNuRyxJQUFJNUMsRUFBUzhzQixFQUFNbHRCLE9BQU9nRCxHQUFNLEdBQzVCUCxFQUFTNnFCLEVBQVlsdEIsR0FDekIsT0FBa0IsSUFBWHFDLEdBQW9DLEtBQXBCckMsRUFBT2lZLE9BQU8sSUFBYSxFQUFJNVYsR0FDcEQ2cUIsRyxnQkNQSixJQUFJMVosRUFBTSxFQUFRLElBQ2xCamEsRUFBT0QsUUFBVSxTQUFVc0UsRUFBSXd2QixHQUM3QixHQUFpQixpQkFBTnh2QixHQUE2QixVQUFYNFYsRUFBSTVWLEdBQWlCLE1BQU1DLFVBQVV1dkIsR0FDbEUsT0FBUXh2QixJLGdCQ0ZWLElBQUlELEVBQVcsRUFBUSxHQUNuQm1HLEVBQVEvRixLQUFLK0YsTUFDakJ2SyxFQUFPRCxRQUFVLFNBQW1Cc0UsR0FDbEMsT0FBUUQsRUFBU0MsSUFBT3l2QixTQUFTenZCLElBQU9rRyxFQUFNbEcsS0FBUUEsSSxjQ0h4RHJFLEVBQU9ELFFBQVV5RSxLQUFLdXZCLE9BQVMsU0FBZS9WLEdBQzVDLE9BQVFBLEdBQUtBLElBQU0sTUFBUUEsRUFBSSxLQUFPQSxFQUFJQSxFQUFJQSxFQUFJLEVBQUl4WixLQUFLcWtCLElBQUksRUFBSTdLLEssZ0JDRHJFLElBQUkyRSxFQUFPLEVBQVEsSUFDZmlHLEVBQU1wa0IsS0FBS29rQixJQUNYb0wsRUFBVXBMLEVBQUksR0FBSSxJQUNsQnFMLEVBQVlyTCxFQUFJLEdBQUksSUFDcEJzTCxFQUFRdEwsRUFBSSxFQUFHLE1BQVEsRUFBSXFMLEdBQzNCRSxFQUFRdkwsRUFBSSxHQUFJLEtBTXBCNW9CLEVBQU9ELFFBQVV5RSxLQUFLNHZCLFFBQVUsU0FBZ0JwVyxHQUM5QyxJQUVJL1ksRUFBRzZELEVBRkh1ckIsRUFBTzd2QixLQUFLbWtCLElBQUkzSyxHQUNoQnNXLEVBQVEzUixFQUFLM0UsR0FFakIsT0FBSXFXLEVBQU9GLEVBQWNHLEdBQXdCRCxFQUFPRixFQUFRRixFQVByRCxFQUFJRCxFQUFVLEVBQUlBLEdBT2dERyxFQUFRRixHQUVyRm5yQixHQURBN0QsR0FBSyxFQUFJZ3ZCLEVBQVlELEdBQVdLLElBQ2xCcHZCLEVBQUlvdkIsSUFFTEgsR0FBU3ByQixHQUFVQSxFQUFld3JCLEdBQVE1UixLQUNoRDRSLEVBQVF4ckIsSSxnQkNwQmpCLElBQUk1RCxFQUFXLEVBQVEsR0FDdkJsRixFQUFPRCxRQUFVLFNBQVVnUyxFQUFVeEssRUFBSTlGLEVBQU80SixHQUM5QyxJQUNFLE9BQU9BLEVBQVU5RCxFQUFHckMsRUFBU3pELEdBQU8sR0FBSUEsRUFBTSxJQUFNOEYsRUFBRzlGLEdBRXZELE1BQU9rRCxHQUNQLElBQUk0dkIsRUFBTXhpQixFQUFpQixPQUUzQixXQURZaE8sSUFBUnd3QixHQUFtQnJ2QixFQUFTcXZCLEVBQUk1ekIsS0FBS29SLElBQ25DcE4sSyxnQkNUVixJQUFJdUYsRUFBWSxFQUFRLElBQ3BCUCxFQUFXLEVBQVEsR0FDbkJMLEVBQVUsRUFBUSxJQUNsQnNDLEVBQVcsRUFBUSxHQUV2QjVMLEVBQU9ELFFBQVUsU0FBVW9LLEVBQU1vQyxFQUFZeUYsRUFBTXdpQixFQUFNQyxHQUN2RHZxQixFQUFVcUMsR0FDVixJQUFJaEgsRUFBSW9FLEVBQVNRLEdBQ2JoSyxFQUFPbUosRUFBUS9ELEdBQ2YwQixFQUFTMkUsRUFBU3JHLEVBQUUwQixRQUNwQndGLEVBQVFnb0IsRUFBVXh0QixFQUFTLEVBQUksRUFDL0J6RyxFQUFJaTBCLEdBQVcsRUFBSSxFQUN2QixHQUFJemlCLEVBQU8sRUFBRyxPQUFTLENBQ3JCLEdBQUl2RixLQUFTdE0sRUFBTSxDQUNqQnEwQixFQUFPcjBCLEVBQUtzTSxHQUNaQSxHQUFTak0sRUFDVCxNQUdGLEdBREFpTSxHQUFTak0sRUFDTGkwQixFQUFVaG9CLEVBQVEsRUFBSXhGLEdBQVV3RixFQUNsQyxNQUFNbkksVUFBVSwrQ0FHcEIsS0FBTW13QixFQUFVaG9CLEdBQVMsRUFBSXhGLEVBQVN3RixFQUFPQSxHQUFTak0sRUFBT2lNLEtBQVN0TSxJQUNwRXEwQixFQUFPam9CLEVBQVdpb0IsRUFBTXIwQixFQUFLc00sR0FBUUEsRUFBT2xILElBRTlDLE9BQU9pdkIsSSw2QkN4QlQsSUFBSTdxQixFQUFXLEVBQVEsR0FDbkJ1RCxFQUFrQixFQUFRLElBQzFCdEIsRUFBVyxFQUFRLEdBRXZCNUwsRUFBT0QsUUFBVSxHQUFHMlMsWUFBYyxTQUFvQjdPLEVBQWtCOE8sR0FDdEUsSUFBSXBOLEVBQUlvRSxFQUFTdkosTUFDYmlVLEVBQU16SSxFQUFTckcsRUFBRTBCLFFBQ2pCeXRCLEVBQUt4bkIsRUFBZ0JySixFQUFRd1EsR0FDN0JtQyxFQUFPdEosRUFBZ0J5RixFQUFPMEIsR0FDOUJSLEVBQU03SyxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsRUFDNUMwZSxFQUFRamUsS0FBS1EsVUFBYWpCLElBQVI4UCxFQUFvQlEsRUFBTW5ILEVBQWdCMkcsRUFBS1EsSUFBUW1DLEVBQU1uQyxFQUFNcWdCLEdBQ3JGQyxFQUFNLEVBTVYsSUFMSW5lLEVBQU9rZSxHQUFNQSxFQUFLbGUsRUFBT2lNLElBQzNCa1MsR0FBTyxFQUNQbmUsR0FBUWlNLEVBQVEsRUFDaEJpUyxHQUFNalMsRUFBUSxHQUVUQSxLQUFVLEdBQ1hqTSxLQUFRalIsRUFBR0EsRUFBRW12QixHQUFNbnZCLEVBQUVpUixVQUNialIsRUFBRW12QixHQUNkQSxHQUFNQyxFQUNObmUsR0FBUW1lLEVBQ1IsT0FBT3B2QixJLGNDeEJYdkYsRUFBT0QsUUFBVSxTQUFVc1MsRUFBTTVRLEdBQy9CLE1BQU8sQ0FBRUEsTUFBT0EsRUFBTzRRLE9BQVFBLEssNkJDQWpDLElBQUk2TSxFQUFhLEVBQVEsSUFDekIsRUFBUSxFQUFSLENBQXFCLENBQ25CcmIsT0FBUSxTQUNSNE8sT0FBTyxFQUNQbWlCLE9BQVExVixJQUFlLElBQUl4YSxNQUMxQixDQUNEQSxLQUFNd2EsSyxnQkNOSixFQUFRLElBQW1DLEtBQWQsS0FBSzJWLE9BQWMsRUFBUSxHQUFnQnZ2QixFQUFFbVYsT0FBT3JZLFVBQVcsUUFBUyxDQUN2R3VTLGNBQWMsRUFDZHRULElBQUssRUFBUSxPLGNDSGZyQixFQUFPRCxRQUFVLFNBQVUyRSxHQUN6QixJQUNFLE1BQU8sQ0FBRUMsR0FBRyxFQUFPK1EsRUFBR2hSLEtBQ3RCLE1BQU9DLEdBQ1AsTUFBTyxDQUFFQSxHQUFHLEVBQU0rUSxFQUFHL1EsTSxnQkNKekIsSUFBSU8sRUFBVyxFQUFRLEdBQ25CZCxFQUFXLEVBQVEsR0FDbkIwd0IsRUFBdUIsRUFBUSxLQUVuQzkwQixFQUFPRCxRQUFVLFNBQVV1UixFQUFHME0sR0FFNUIsR0FEQTlZLEVBQVNvTSxHQUNMbE4sRUFBUzRaLElBQU1BLEVBQUVqVSxjQUFnQnVILEVBQUcsT0FBTzBNLEVBQy9DLElBQUkrVyxFQUFvQkQsRUFBcUJ4dkIsRUFBRWdNLEdBRy9DLE9BREF3VyxFQURjaU4sRUFBa0JqTixTQUN4QjlKLEdBQ0QrVyxFQUFrQmhOLFUsNkJDVDNCLElBQUlpTixFQUFTLEVBQVEsS0FDakIzakIsRUFBVyxFQUFRLElBSXZCclIsRUFBT0QsUUFBVSxFQUFRLEdBQVIsQ0FIUCxPQUdxQyxTQUFVc0IsR0FDdkQsT0FBTyxXQUFpQixPQUFPQSxFQUFJakIsS0FBTTRJLFVBQVUvQixPQUFTLEVBQUkrQixVQUFVLFFBQUtqRixNQUM5RSxDQUVEMUMsSUFBSyxTQUFhVSxHQUNoQixJQUFJa3pCLEVBQVFELEVBQU9FLFNBQVM3akIsRUFBU2pSLEtBUi9CLE9BUTJDMkIsR0FDakQsT0FBT2t6QixHQUFTQSxFQUFNdmYsR0FHeEJ6RSxJQUFLLFNBQWFsUCxFQUFLTixHQUNyQixPQUFPdXpCLEVBQU9qYixJQUFJMUksRUFBU2pSLEtBYnJCLE9BYXlDLElBQVIyQixFQUFZLEVBQUlBLEVBQUtOLEtBRTdEdXpCLEdBQVEsSSw2QkNqQlgsSUFBSTN2QixFQUFLLEVBQVEsR0FBZ0JDLEVBQzdCeEQsRUFBUyxFQUFRLElBQ2pCa0wsRUFBYyxFQUFRLElBQ3RCcEssRUFBTSxFQUFRLElBQ2RrSyxFQUFhLEVBQVEsSUFDckJ1VCxFQUFRLEVBQVEsSUFDaEI4VSxFQUFjLEVBQVEsSUFDdEJyakIsRUFBTyxFQUFRLEtBQ2ZoRSxFQUFhLEVBQVEsSUFDckJ5TCxFQUFjLEVBQVEsR0FDdEIxQixFQUFVLEVBQVEsSUFBV0EsUUFDN0J4RyxFQUFXLEVBQVEsSUFDbkIrakIsRUFBTzdiLEVBQWMsS0FBTyxPQUU1QjJiLEVBQVcsU0FBVS9xQixFQUFNcEksR0FFN0IsSUFDSWt6QixFQURBeG9CLEVBQVFvTCxFQUFROVYsR0FFcEIsR0FBYyxNQUFWMEssRUFBZSxPQUFPdEMsRUFBS2lhLEdBQUczWCxHQUVsQyxJQUFLd29CLEVBQVE5cUIsRUFBS2tyQixHQUFJSixFQUFPQSxFQUFRQSxFQUFNaHpCLEVBQ3pDLEdBQUlnekIsRUFBTXBDLEdBQUs5d0IsRUFBSyxPQUFPa3pCLEdBSS9CajFCLEVBQU9ELFFBQVUsQ0FDZnFoQixlQUFnQixTQUFVdE0sRUFBU2hPLEVBQU1rRixFQUFRMlUsR0FDL0MsSUFBSXJQLEVBQUl3RCxHQUFRLFNBQVUzSyxFQUFNMFAsR0FDOUIvTSxFQUFXM0MsRUFBTW1ILEVBQUd4SyxFQUFNLE1BQzFCcUQsRUFBSzJQLEdBQUtoVCxFQUNWcUQsRUFBS2lhLEdBQUt0aUIsRUFBTyxNQUNqQnFJLEVBQUtrckIsUUFBS3R4QixFQUNWb0csRUFBS21yQixRQUFLdnhCLEVBQ1ZvRyxFQUFLaXJCLEdBQVEsRUFDR3J4QixNQUFaOFYsR0FBdUJ3RyxFQUFNeEcsRUFBVTdOLEVBQVE3QixFQUFLd1csR0FBUXhXLE1Bc0RsRSxPQXBEQTZDLEVBQVlzRSxFQUFFbFAsVUFBVyxDQUd2QitlLE1BQU8sV0FDTCxJQUFLLElBQUloWCxFQUFPa0gsRUFBU2pSLEtBQU0wRyxHQUFPMk8sRUFBT3RMLEVBQUtpYSxHQUFJNlEsRUFBUTlxQixFQUFLa3JCLEdBQUlKLEVBQU9BLEVBQVFBLEVBQU1oekIsRUFDMUZnekIsRUFBTTN6QixHQUFJLEVBQ04yekIsRUFBTTN5QixJQUFHMnlCLEVBQU0zeUIsRUFBSTJ5QixFQUFNM3lCLEVBQUVMLE9BQUk4QixVQUM1QjBSLEVBQUt3ZixFQUFNejBCLEdBRXBCMkosRUFBS2tyQixHQUFLbHJCLEVBQUttckIsUUFBS3Z4QixFQUNwQm9HLEVBQUtpckIsR0FBUSxHQUlmLE9BQVUsU0FBVXJ6QixHQUNsQixJQUFJb0ksRUFBT2tILEVBQVNqUixLQUFNMEcsR0FDdEJtdUIsRUFBUUMsRUFBUy9xQixFQUFNcEksR0FDM0IsR0FBSWt6QixFQUFPLENBQ1QsSUFBSTdpQixFQUFPNmlCLEVBQU1oekIsRUFDYnN6QixFQUFPTixFQUFNM3lCLFNBQ1Y2SCxFQUFLaWEsR0FBRzZRLEVBQU16MEIsR0FDckJ5MEIsRUFBTTN6QixHQUFJLEVBQ05pMEIsSUFBTUEsRUFBS3R6QixFQUFJbVEsR0FDZkEsSUFBTUEsRUFBSzlQLEVBQUlpekIsR0FDZnByQixFQUFLa3JCLElBQU1KLElBQU85cUIsRUFBS2tyQixHQUFLampCLEdBQzVCakksRUFBS21yQixJQUFNTCxJQUFPOXFCLEVBQUttckIsR0FBS0MsR0FDaENwckIsRUFBS2lyQixLQUNMLFFBQVNILEdBSWI1dEIsUUFBUyxTQUFpQmtGLEdBQ3hCOEUsRUFBU2pSLEtBQU0wRyxHQUdmLElBRkEsSUFDSW11QixFQURBM3ZCLEVBQUkxQyxFQUFJMkosRUFBWXZELFVBQVUvQixPQUFTLEVBQUkrQixVQUFVLFFBQUtqRixFQUFXLEdBRWxFa3hCLEVBQVFBLEVBQVFBLEVBQU1oekIsRUFBSTdCLEtBQUtpMUIsSUFHcEMsSUFGQS92QixFQUFFMnZCLEVBQU12ZixFQUFHdWYsRUFBTXBDLEVBQUd6eUIsTUFFYjYwQixHQUFTQSxFQUFNM3pCLEdBQUcyekIsRUFBUUEsRUFBTTN5QixHQUszQ3FELElBQUssU0FBYTVELEdBQ2hCLFFBQVNtekIsRUFBUzdqQixFQUFTalIsS0FBTTBHLEdBQU8vRSxNQUd4Q3dYLEdBQWFsVSxFQUFHaU0sRUFBRWxQLFVBQVcsT0FBUSxDQUN2Q2YsSUFBSyxXQUNILE9BQU9nUSxFQUFTalIsS0FBTTBHLEdBQU1zdUIsTUFHekI5akIsR0FFVHlJLElBQUssU0FBVTVQLEVBQU1wSSxFQUFLTixHQUN4QixJQUNJOHpCLEVBQU05b0IsRUFETndvQixFQUFRQyxFQUFTL3FCLEVBQU1wSSxHQW9CekIsT0FqQkVrekIsRUFDRkEsRUFBTXZmLEVBQUlqVSxHQUdWMEksRUFBS21yQixHQUFLTCxFQUFRLENBQ2hCejBCLEVBQUdpTSxFQUFRb0wsRUFBUTlWLEdBQUssR0FDeEI4d0IsRUFBRzl3QixFQUNIMlQsRUFBR2pVLEVBQ0hhLEVBQUdpekIsRUFBT3ByQixFQUFLbXJCLEdBQ2ZyekIsT0FBRzhCLEVBQ0h6QyxHQUFHLEdBRUE2SSxFQUFLa3JCLEtBQUlsckIsRUFBS2tyQixHQUFLSixHQUNwQk0sSUFBTUEsRUFBS3R6QixFQUFJZ3pCLEdBQ25COXFCLEVBQUtpckIsS0FFUyxNQUFWM29CLElBQWV0QyxFQUFLaWEsR0FBRzNYLEdBQVN3b0IsSUFDN0I5cUIsR0FFWCtxQixTQUFVQSxFQUNWN1QsVUFBVyxTQUFVL1AsRUFBR3hLLEVBQU1rRixHQUc1Qm1wQixFQUFZN2pCLEVBQUd4SyxHQUFNLFNBQVVxZCxFQUFVZCxHQUN2Q2pqQixLQUFLMFosR0FBS3pJLEVBQVM4UyxFQUFVcmQsR0FDN0IxRyxLQUFLaWtCLEdBQUtoQixFQUNWampCLEtBQUtrMUIsUUFBS3Z4QixLQUNULFdBS0QsSUFKQSxJQUNJc2YsRUFET2pqQixLQUNLaWtCLEdBQ1o0USxFQUZPNzBCLEtBRU1rMUIsR0FFVkwsR0FBU0EsRUFBTTN6QixHQUFHMnpCLEVBQVFBLEVBQU0zeUIsRUFFdkMsT0FOV2xDLEtBTUQwWixLQU5DMVosS0FNWWsxQixHQUFLTCxFQUFRQSxFQUFRQSxFQUFNaHpCLEVBTnZDN0IsS0FNZ0QwWixHQUFHdWIsSUFNbkN2akIsRUFBSyxFQUFwQixRQUFSdVIsRUFBK0I0UixFQUFNcEMsRUFDN0IsVUFBUnhQLEVBQWlDNFIsRUFBTXZmLEVBQzVCLENBQUN1ZixFQUFNcEMsRUFBR29DLEVBQU12ZixLQWRwQnRWLEtBUUowWixRQUFLL1YsRUFDSCtOLEVBQUssTUFNYjlGLEVBQVMsVUFBWSxVQUFXQSxHQUFRLEdBRzNDOEIsRUFBV2hILE0sNkJDNUlmLElBQUlrdUIsRUFBUyxFQUFRLEtBQ2pCM2pCLEVBQVcsRUFBUSxJQUl2QnJSLEVBQU9ELFFBQVUsRUFBUSxHQUFSLENBSFAsT0FHcUMsU0FBVXNCLEdBQ3ZELE9BQU8sV0FBaUIsT0FBT0EsRUFBSWpCLEtBQU00SSxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsTUFDOUUsQ0FFRHl4QixJQUFLLFNBQWEvekIsR0FDaEIsT0FBT3V6QixFQUFPamIsSUFBSTFJLEVBQVNqUixLQVJyQixPQVFpQ3FCLEVBQWtCLElBQVZBLEVBQWMsRUFBSUEsRUFBT0EsS0FFekV1ekIsSSw2QkNaSCxJQWNJUyxFQWRBanpCLEVBQVMsRUFBUSxHQUNqQmt6QixFQUFPLEVBQVEsR0FBUixDQUE0QixHQUNuQy95QixFQUFXLEVBQVEsSUFDbkJnVixFQUFPLEVBQVEsSUFDZmliLEVBQVMsRUFBUSxLQUNqQitDLEVBQU8sRUFBUSxLQUNmdnhCLEVBQVcsRUFBUSxHQUNuQmlOLEVBQVcsRUFBUSxJQUNuQnVrQixFQUFrQixFQUFRLElBQzFCQyxHQUFXcnpCLEVBQU9zekIsZUFBaUIsa0JBQW1CdHpCLEVBRXREc1YsRUFBVUgsRUFBS0csUUFDZlIsRUFBZXBXLE9BQU9vVyxhQUN0QnllLEVBQXNCSixFQUFLSyxRQUczQmxoQixFQUFVLFNBQVV6VCxHQUN0QixPQUFPLFdBQ0wsT0FBT0EsRUFBSWpCLEtBQU00SSxVQUFVL0IsT0FBUyxFQUFJK0IsVUFBVSxRQUFLakYsS0FJdkR5YyxFQUFVLENBRVpuZixJQUFLLFNBQWFVLEdBQ2hCLEdBQUlxQyxFQUFTckMsR0FBTSxDQUNqQixJQUFJMFQsRUFBT3FDLEVBQVEvVixHQUNuQixPQUFhLElBQVQwVCxFQUFzQnNnQixFQUFvQjFrQixFQUFTalIsS0FqQjlDLFlBaUIrRGlCLElBQUlVLEdBQ3JFMFQsRUFBT0EsRUFBS3JWLEtBQUtna0IsU0FBTXJnQixJQUlsQ2tOLElBQUssU0FBYWxQLEVBQUtOLEdBQ3JCLE9BQU9rMEIsRUFBSzViLElBQUkxSSxFQUFTalIsS0F2QmQsV0F1QitCMkIsRUFBS04sS0FLL0N3MEIsRUFBV2oyQixFQUFPRCxRQUFVLEVBQVEsR0FBUixDQTVCakIsVUE0Qm9EK1UsRUFBUzBMLEVBQVNtVixHQUFNLEdBQU0sR0FHN0ZDLEdBQW1CQyxJQUVyQmpELEdBREE2QyxFQUFjRSxFQUFLdlUsZUFBZXRNLEVBaENyQixZQWlDTTFTLFVBQVdvZSxHQUM5QjdJLEVBQUtDLE1BQU8sRUFDWjhkLEVBQUssQ0FBQyxTQUFVLE1BQU8sTUFBTyxRQUFRLFNBQVUzekIsR0FDOUMsSUFBSTBRLEVBQVF3akIsRUFBUzd6QixVQUNqQnFJLEVBQVNnSSxFQUFNMVEsR0FDbkJZLEVBQVM4UCxFQUFPMVEsR0FBSyxTQUFVa0QsRUFBR2lFLEdBRWhDLEdBQUk5RSxFQUFTYSxLQUFPcVMsRUFBYXJTLEdBQUksQ0FDOUI3RSxLQUFLaTFCLEtBQUlqMUIsS0FBS2kxQixHQUFLLElBQUlJLEdBQzVCLElBQUkzc0IsRUFBUzFJLEtBQUtpMUIsR0FBR3R6QixHQUFLa0QsRUFBR2lFLEdBQzdCLE1BQWMsT0FBUG5ILEVBQWUzQixLQUFPMEksRUFFN0IsT0FBTzJCLEVBQU85SixLQUFLUCxLQUFNNkUsRUFBR2lFLFcsNkJDdkRwQyxJQUFJOEQsRUFBYyxFQUFRLElBQ3RCOEssRUFBVSxFQUFRLElBQVdBLFFBQzdCNVMsRUFBVyxFQUFRLEdBQ25CZCxFQUFXLEVBQVEsR0FDbkIwSSxFQUFhLEVBQVEsSUFDckJ1VCxFQUFRLEVBQVEsSUFDaEI3UyxFQUFvQixFQUFRLElBQzVCMG9CLEVBQU8sRUFBUSxJQUNmN2tCLEVBQVcsRUFBUSxJQUNuQnhDLEVBQVlyQixFQUFrQixHQUM5QnNCLEVBQWlCdEIsRUFBa0IsR0FDbkM2SixFQUFLLEVBR0wwZSxFQUFzQixTQUFVNXJCLEdBQ2xDLE9BQU9BLEVBQUttckIsS0FBT25yQixFQUFLbXJCLEdBQUssSUFBSWEsSUFFL0JBLEVBQXNCLFdBQ3hCLzFCLEtBQUs2RSxFQUFJLElBRVBteEIsRUFBcUIsU0FBVXh4QixFQUFPN0MsR0FDeEMsT0FBTzhNLEVBQVVqSyxFQUFNSyxHQUFHLFNBQVVaLEdBQ2xDLE9BQU9BLEVBQUcsS0FBT3RDLE1BR3JCbzBCLEVBQW9CL3pCLFVBQVksQ0FDOUJmLElBQUssU0FBVVUsR0FDYixJQUFJa3pCLEVBQVFtQixFQUFtQmgyQixLQUFNMkIsR0FDckMsR0FBSWt6QixFQUFPLE9BQU9BLEVBQU0sSUFFMUJ0dkIsSUFBSyxTQUFVNUQsR0FDYixRQUFTcTBCLEVBQW1CaDJCLEtBQU0yQixJQUVwQ2tQLElBQUssU0FBVWxQLEVBQUtOLEdBQ2xCLElBQUl3ekIsRUFBUW1CLEVBQW1CaDJCLEtBQU0yQixHQUNqQ2t6QixFQUFPQSxFQUFNLEdBQUt4ekIsRUFDakJyQixLQUFLNkUsRUFBRXlILEtBQUssQ0FBQzNLLEVBQUtOLEtBRXpCLE9BQVUsU0FBVU0sR0FDbEIsSUFBSTBLLEVBQVFxQyxFQUFlMU8sS0FBSzZFLEdBQUcsU0FBVVosR0FDM0MsT0FBT0EsRUFBRyxLQUFPdEMsS0FHbkIsT0FESzBLLEdBQU9yTSxLQUFLNkUsRUFBRW94QixPQUFPNXBCLEVBQU8sTUFDdkJBLElBSWR6TSxFQUFPRCxRQUFVLENBQ2ZxaEIsZUFBZ0IsU0FBVXRNLEVBQVNoTyxFQUFNa0YsRUFBUTJVLEdBQy9DLElBQUlyUCxFQUFJd0QsR0FBUSxTQUFVM0ssRUFBTTBQLEdBQzlCL00sRUFBVzNDLEVBQU1tSCxFQUFHeEssRUFBTSxNQUMxQnFELEVBQUsyUCxHQUFLaFQsRUFDVnFELEVBQUtpYSxHQUFLL00sSUFDVmxOLEVBQUttckIsUUFBS3Z4QixFQUNNQSxNQUFaOFYsR0FBdUJ3RyxFQUFNeEcsRUFBVTdOLEVBQVE3QixFQUFLd1csR0FBUXhXLE1Bb0JsRSxPQWxCQTZDLEVBQVlzRSxFQUFFbFAsVUFBVyxDQUd2QixPQUFVLFNBQVVMLEdBQ2xCLElBQUtxQyxFQUFTckMsR0FBTSxPQUFPLEVBQzNCLElBQUkwVCxFQUFPcUMsRUFBUS9WLEdBQ25CLE9BQWEsSUFBVDBULEVBQXNCc2dCLEVBQW9CMWtCLEVBQVNqUixLQUFNMEcsSUFBZSxPQUFFL0UsR0FDdkUwVCxHQUFReWdCLEVBQUt6Z0IsRUFBTXJWLEtBQUtna0IsWUFBYzNPLEVBQUtyVixLQUFLZ2tCLEtBSXpEemUsSUFBSyxTQUFhNUQsR0FDaEIsSUFBS3FDLEVBQVNyQyxHQUFNLE9BQU8sRUFDM0IsSUFBSTBULEVBQU9xQyxFQUFRL1YsR0FDbkIsT0FBYSxJQUFUMFQsRUFBc0JzZ0IsRUFBb0Ixa0IsRUFBU2pSLEtBQU0wRyxJQUFPbkIsSUFBSTVELEdBQ2pFMFQsR0FBUXlnQixFQUFLemdCLEVBQU1yVixLQUFLZ2tCLE9BRzVCOVMsR0FFVHlJLElBQUssU0FBVTVQLEVBQU1wSSxFQUFLTixHQUN4QixJQUFJZ1UsRUFBT3FDLEVBQVE1UyxFQUFTbkQsSUFBTSxHQUdsQyxPQUZhLElBQVQwVCxFQUFlc2dCLEVBQW9CNXJCLEdBQU04RyxJQUFJbFAsRUFBS04sR0FDakRnVSxFQUFLdEwsRUFBS2lhLElBQU0zaUIsRUFDZDBJLEdBRVQ2ckIsUUFBU0QsSSxnQkNsRlgsSUFBSWh4QixFQUFZLEVBQVEsSUFDcEI2RyxFQUFXLEVBQVEsR0FDdkI1TCxFQUFPRCxRQUFVLFNBQVVzRSxHQUN6QixRQUFXTixJQUFQTSxFQUFrQixPQUFPLEVBQzdCLElBQUlpeUIsRUFBU3Z4QixFQUFVVixHQUNuQjRDLEVBQVMyRSxFQUFTMHFCLEdBQ3RCLEdBQUlBLElBQVdydkIsRUFBUSxNQUFNa0gsV0FBVyxpQkFDeEMsT0FBT2xILEksZ0JDUFQsSUFBSW9HLEVBQU8sRUFBUSxJQUNmcWxCLEVBQU8sRUFBUSxJQUNmeHRCLEVBQVcsRUFBUSxHQUNuQnF4QixFQUFVLEVBQVEsR0FBYUEsUUFDbkN2MkIsRUFBT0QsUUFBVXcyQixHQUFXQSxFQUFRQyxTQUFXLFNBQWlCbnlCLEdBQzlELElBQUkrSyxFQUFPL0IsRUFBSy9ILEVBQUVKLEVBQVNiLElBQ3ZCeXVCLEVBQWFKLEVBQUtwdEIsRUFDdEIsT0FBT3d0QixFQUFhMWpCLEVBQUsrRyxPQUFPMmMsRUFBV3p1QixJQUFPK0ssSSw2QkNOcEQsSUFBSWhJLEVBQVUsRUFBUSxJQUNsQmhELEVBQVcsRUFBUSxHQUNuQndILEVBQVcsRUFBUSxHQUNuQmhKLEVBQU0sRUFBUSxJQUNkNnpCLEVBQXVCLEVBQVEsRUFBUixDQUFrQixzQkFnQzdDejJCLEVBQU9ELFFBOUJQLFNBQVMyMkIsRUFBaUI3eUIsRUFBUW1nQixFQUFVamhCLEVBQVE0ekIsRUFBV2hrQixFQUFPaWtCLEVBQU9DLEVBQVExdEIsR0FNbkYsSUFMQSxJQUdJMnRCLEVBQVNDLEVBSFRDLEVBQWNya0IsRUFDZHNrQixFQUFjLEVBQ2RwVixJQUFRZ1YsR0FBU2owQixFQUFJaTBCLEVBQVExdEIsRUFBUyxHQUduQzh0QixFQUFjTixHQUFXLENBQzlCLEdBQUlNLEtBQWVsMEIsRUFBUSxDQVN6QixHQVJBK3pCLEVBQVVqVixFQUFRQSxFQUFNOWUsRUFBT2swQixHQUFjQSxFQUFhalQsR0FBWWpoQixFQUFPazBCLEdBRTdFRixHQUFhLEVBQ1QzeUIsRUFBUzB5QixLQUVYQyxPQUE0Qmh6QixLQUQ1Qmd6QixFQUFhRCxFQUFRTCxNQUNxQk0sRUFBYTN2QixFQUFRMHZCLElBRzdEQyxHQUFjSCxFQUFRLEVBQ3hCSSxFQUFjTixFQUFpQjd5QixFQUFRbWdCLEVBQVU4UyxFQUFTbHJCLEVBQVNrckIsRUFBUTd2QixRQUFTK3ZCLEVBQWFKLEVBQVEsR0FBSyxNQUN6RyxDQUNMLEdBQUlJLEdBQWUsaUJBQWtCLE1BQU0xeUIsWUFDM0NULEVBQU9tekIsR0FBZUYsRUFHeEJFLElBRUZDLElBRUYsT0FBT0QsSSxnQkNsQ1QsSUFBSXByQixFQUFXLEVBQVEsR0FDbkJzckIsRUFBUyxFQUFRLElBQ2pCenhCLEVBQVUsRUFBUSxJQUV0QnpGLEVBQU9ELFFBQVUsU0FBVW9LLEVBQU1ndEIsRUFBV0MsRUFBWUMsR0FDdEQsSUFBSTd6QixFQUFJNkMsT0FBT1osRUFBUTBFLElBQ25CbXRCLEVBQWU5ekIsRUFBRXlELE9BQ2pCc3dCLE9BQXlCeHpCLElBQWZxekIsRUFBMkIsSUFBTS93QixPQUFPK3dCLEdBQ2xESSxFQUFlNXJCLEVBQVN1ckIsR0FDNUIsR0FBSUssR0FBZ0JGLEdBQTJCLElBQVhDLEVBQWUsT0FBTy96QixFQUMxRCxJQUFJaTBCLEVBQVVELEVBQWVGLEVBQ3pCSSxFQUFlUixFQUFPdjJCLEtBQUs0MkIsRUFBUy95QixLQUFLOEYsS0FBS210QixFQUFVRixFQUFRdHdCLFNBRXBFLE9BREl5d0IsRUFBYXp3QixPQUFTd3dCLElBQVNDLEVBQWVBLEVBQWFydEIsTUFBTSxFQUFHb3RCLElBQ2pFSixFQUFPSyxFQUFlbDBCLEVBQUlBLEVBQUlrMEIsSSxnQkNkdkMsSUFBSW5lLEVBQWMsRUFBUSxHQUN0QitZLEVBQVUsRUFBUSxJQUNsQjlvQixFQUFZLEVBQVEsSUFDcEJ1cEIsRUFBUyxFQUFRLElBQWlCenRCLEVBQ3RDdEYsRUFBT0QsUUFBVSxTQUFVNDNCLEdBQ3pCLE9BQU8sU0FBVXR6QixHQU9mLElBTkEsSUFLSXRDLEVBTEF3RCxFQUFJaUUsRUFBVW5GLEdBQ2QrSyxFQUFPa2pCLEVBQVEvc0IsR0FDZjBCLEVBQVNtSSxFQUFLbkksT0FDZHpHLEVBQUksRUFDSnNJLEVBQVMsR0FFTjdCLEVBQVN6RyxHQUNkdUIsRUFBTXFOLEVBQUs1TyxLQUNOK1ksSUFBZXdaLEVBQU9weUIsS0FBSzRFLEVBQUd4RCxJQUNqQytHLEVBQU80RCxLQUFLaXJCLEVBQVksQ0FBQzUxQixFQUFLd0QsRUFBRXhELElBQVF3RCxFQUFFeEQsSUFHOUMsT0FBTytHLEssZ0JDakJYLElBQUlxRSxFQUFVLEVBQVEsSUFDbEJxSixFQUFPLEVBQVEsS0FDbkJ4VyxFQUFPRCxRQUFVLFNBQVUrRyxHQUN6QixPQUFPLFdBQ0wsR0FBSXFHLEVBQVEvTSxPQUFTMEcsRUFBTSxNQUFNeEMsVUFBVXdDLEVBQU8seUJBQ2xELE9BQU8wUCxFQUFLcFcsUyxnQkNOaEIsSUFBSWlnQixFQUFRLEVBQVEsSUFFcEJyZ0IsRUFBT0QsUUFBVSxTQUFVbVcsRUFBTS9GLEdBQy9CLElBQUlySCxFQUFTLEdBRWIsT0FEQXVYLEVBQU1uSyxHQUFNLEVBQU9wTixFQUFPNEQsS0FBTTVELEVBQVFxSCxHQUNqQ3JILEksY0NKVDlJLEVBQU9ELFFBQVV5RSxLQUFLb3pCLE9BQVMsU0FBZTVaLEVBQUc2WixFQUFPQyxFQUFRQyxFQUFRQyxHQUN0RSxPQUN1QixJQUFyQmh2QixVQUFVL0IsUUFFTCtXLEdBQUtBLEdBRUw2WixHQUFTQSxHQUVUQyxHQUFVQSxHQUVWQyxHQUFVQSxHQUVWQyxHQUFXQSxFQUNUck8sSUFDTDNMLElBQU0wRSxLQUFZMUUsS0FBTzBFLElBQWlCMUUsR0FDdENBLEVBQUk2WixJQUFVRyxFQUFVRCxJQUFXRCxFQUFTRCxHQUFTRSxJLDZCQ2QvRC8zQixFQUFPRCxRQUFVLFNBQWN3SCxFQUFJNEIsR0FDakMsT0FBTyxXQUVMLElBREEsSUFBSWlkLEVBQU8sSUFBSXJiLE1BQU0vQixVQUFVL0IsUUFDdEJ6RyxFQUFJLEVBQUdBLEVBQUk0bEIsRUFBS25mLE9BQVF6RyxJQUMvQjRsQixFQUFLNWxCLEdBQUt3SSxVQUFVeEksR0FFdEIsT0FBTytHLEVBQUc2QyxNQUFNakIsRUFBU2lkLE0sNkJDTjdCLElBQUk2UixFQUFjLEVBQVEsS0FTMUJqNEIsRUFBT0QsUUFBVSxTQUFnQituQixFQUFTUyxFQUFROEUsR0FDaEQsSUFBSVAsRUFBaUJPLEVBQVNILE9BQU9KLGVBRWhDTyxFQUFTTixRQUFXRCxJQUFrQkEsRUFBZU8sRUFBU04sUUFHakV4RSxFQUFPMFAsRUFDTCxtQ0FBcUM1SyxFQUFTTixPQUM5Q00sRUFBU0gsT0FDVCxLQUNBRyxFQUFTRCxRQUNUQyxJQVBGdkYsRUFBUXVGLEssNkJDSFpydEIsRUFBT0QsUUFBVSxTQUFzQnV0QixFQUFPSixFQUFRQyxFQUFNQyxFQUFTQyxHQU9uRSxPQU5BQyxFQUFNSixPQUFTQSxFQUNYQyxJQUNGRyxFQUFNSCxLQUFPQSxHQUVmRyxFQUFNRixRQUFVQSxFQUNoQkUsRUFBTUQsU0FBV0EsRUFDVkMsSSw2QkNqQlQsSUFBSXpCLEVBQVEsRUFBUSxJQUVwQixTQUFTL1EsRUFBTzdVLEdBQ2QsT0FBT2l5QixtQkFBbUJqeUIsR0FDeEJZLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLE9BQVEsS0FDaEJBLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxPQUFRLEtBQ2hCQSxRQUFRLFFBQVMsS0FDakJBLFFBQVEsUUFBUyxLQVVyQjdHLEVBQU9ELFFBQVUsU0FBa0JnZCxFQUFLb2IsRUFBUUMsR0FFOUMsSUFBS0QsRUFDSCxPQUFPcGIsRUFHVCxJQUFJc2IsRUFDSixHQUFJRCxFQUNGQyxFQUFtQkQsRUFBaUJELFFBQy9CLEdBQUl0TSxFQUFNdGpCLGtCQUFrQjR2QixHQUNqQ0UsRUFBbUJGLEVBQU9oeEIsZUFDckIsQ0FDTCxJQUFJbXhCLEVBQVEsR0FFWnpNLEVBQU14a0IsUUFBUTh3QixHQUFRLFNBQW1CbHlCLEVBQUtsRSxHQUN4Q2tFLFVBSUE0bEIsRUFBTXprQixRQUFRbkIsR0FDaEJsRSxHQUFZLEtBRVprRSxFQUFNLENBQUNBLEdBR1Q0bEIsRUFBTXhrQixRQUFRcEIsR0FBSyxTQUFvQnlQLEdBQ2pDbVcsRUFBTTNqQixPQUFPd04sR0FDZkEsRUFBSUEsRUFBRTZpQixjQUNHMU0sRUFBTXpuQixTQUFTc1IsS0FDeEJBLEVBQUk0VyxLQUFLQyxVQUFVN1csSUFFckI0aUIsRUFBTTVyQixLQUFLb08sRUFBTy9ZLEdBQU8sSUFBTStZLEVBQU9wRixXQUkxQzJpQixFQUFtQkMsRUFBTWx5QixLQUFLLEtBT2hDLE9BSklpeUIsSUFDRnRiLEtBQThCLElBQXRCQSxFQUFJN0osUUFBUSxLQUFjLElBQU0sS0FBT21sQixHQUcxQ3RiLEksZ0JDaEVULElBQUlBLEVBQU0sRUFBUSxLQUNkeWIsRUFBTyxFQUFRLEtBQ2ZDLEVBQVEsRUFBUSxLQUNoQkMsRUFBUyxFQUFRLEtBQ2pCQyxFQUFXLEVBQVEsSUFBVUEsU0FDN0JDLEVBQVEsRUFBUSxJQUFSLENBQWlCLG9CQUl6QkMsRUFBZSxDQUFFQyxLQUFLLEVBQU1DLE1BQU0sRUFBTUMsU0FBUyxFQUFNQyxPQUFPLEdBRzlEQyxFQUFnQmg0QixPQUFPWSxPQUFPLE1BUWxDLFNBQVNxM0IsRUFBb0I1dEIsRUFBUzZ0QixHQUVwQ1QsRUFBU2g0QixLQUFLUCxNQUNkbUwsRUFBUTBnQixRQUFVMWdCLEVBQVEwZ0IsU0FBVyxHQUNyQzdyQixLQUFLaTVCLFNBQVc5dEIsRUFDaEJuTCxLQUFLazVCLGVBQWlCLEVBQ3RCbDVCLEtBQUttNUIsV0FBYSxHQUNsQm41QixLQUFLbzVCLG1CQUFxQixFQUMxQnA1QixLQUFLcTVCLG9CQUFzQixHQUt2Qmx1QixFQUFRbXVCLE9BRUxudUIsRUFBUW91QixXQUNYcHVCLEVBQVFvdUIsU0FBV3B1QixFQUFRbXVCLGFBRXRCbnVCLEVBQVFtdUIsTUFJYk4sR0FDRmg1QixLQUFLdzVCLEdBQUcsV0FBWVIsR0FJdEIsSUFBSWo1QixFQUFPQyxLQU1YLEdBTEFBLEtBQUt5NUIsa0JBQW9CLFNBQVV4TSxHQUNqQ2x0QixFQUFLMjVCLGlCQUFpQnpNLEtBSW5COWhCLEVBQVF3dUIsVUFBWXh1QixFQUFRc1MsS0FBTSxDQUNyQyxJQUFJbWMsRUFBWXp1QixFQUFRc1MsS0FBSzNLLFFBQVEsS0FDakM4bUIsRUFBWSxFQUNkenVCLEVBQVF3dUIsU0FBV3h1QixFQUFRc1MsTUFHM0J0UyxFQUFRd3VCLFNBQVd4dUIsRUFBUXNTLEtBQUtvYyxVQUFVLEVBQUdELEdBQzdDenVCLEVBQVEydUIsT0FBUzN1QixFQUFRc1MsS0FBS29jLFVBQVVELElBSzVDNTVCLEtBQUsrNUIsa0JBbU5QLFNBQVNDLEVBQUtDLEdBRVosSUFBSXQ2QixFQUFVLENBQ1p1NkIsYUFBYyxHQUNkQyxjQUFlLFVBSWJDLEVBQWtCLEdBZ0N0QixPQS9CQXQ1QixPQUFPa08sS0FBS2lyQixHQUFXaHpCLFNBQVEsU0FBVW96QixHQUN2QyxJQUFJQyxFQUFXRCxFQUFTLElBQ3BCRSxFQUFpQkgsRUFBZ0JFLEdBQVlMLEVBQVVJLEdBQ3ZERyxFQUFrQjc2QixFQUFRMDZCLEdBQVV2NUIsT0FBT1ksT0FBTzY0QixHQUd0REMsRUFBZ0J4TixRQUFVLFNBQVU3aEIsRUFBU3N2QixHQWUzQyxNQWR1QixpQkFBWnR2QixHQUNUQSxFQUFVd1IsRUFBSTBQLE1BQU1saEIsSUFDWit1QixhQUFldjZCLEVBQVF1NkIsYUFHL0IvdUIsRUFBVXJLLE9BQU8weEIsT0FBTyxDQUN0QjhILFNBQVVBLEVBQ1ZKLGFBQWN2NkIsRUFBUXU2QixhQUN0QkMsY0FBZXg2QixFQUFRdzZCLGVBQ3RCaHZCLEdBRUxBLEVBQVFpdkIsZ0JBQWtCQSxFQUMxQjlCLEVBQU9vQyxNQUFNdnZCLEVBQVFtdkIsU0FBVUEsRUFBVSxxQkFDekM5QixFQUFNLFVBQVdydEIsR0FDVixJQUFJNHRCLEVBQW9CNXRCLEVBQVNzdkIsSUFJMUNELEVBQWdCdjVCLElBQU0sU0FBVWtLLEVBQVNzdkIsR0FDdkMsSUFBSXpOLEVBQVV3TixFQUFnQnhOLFFBQVE3aEIsRUFBU3N2QixHQUUvQyxPQURBek4sRUFBUXZaLE1BQ0R1WixNQUdKcnRCLEVBL1NULENBQUMsUUFBUyxVQUFXLFFBQVMsU0FBVSxXQUFXc0gsU0FBUSxTQUFVOGUsR0FDbkUrUyxFQUFjL1MsR0FBUyxTQUFVemIsR0FDL0J0SyxLQUFLMjZCLGNBQWNDLEtBQUs3VSxFQUFPemIsT0FvRG5DeXVCLEVBQW9CLzJCLFVBQVlsQixPQUFPWSxPQUFPNjJCLEVBQVN2MkIsV0FHdkQrMkIsRUFBb0IvMkIsVUFBVTZXLE1BQVEsU0FBVXhELEVBQU13bEIsRUFBVUosR0FFOUQsS0FBc0IsaUJBQVRwbEIsR0FBcUMsaUJBQVRBLEdBQXNCLFdBQVlBLEdBQ3pFLE1BQU0sSUFBSTVLLE1BQU0saURBRU0sbUJBQWJvd0IsSUFDVEosRUFBV0ksRUFDWEEsRUFBVyxNQUtPLElBQWhCeGxCLEVBQUt4TyxPQU9MN0csS0FBS281QixtQkFBcUIvakIsRUFBS3hPLFFBQVU3RyxLQUFLaTVCLFNBQVNrQixlQUN6RG42QixLQUFLbzVCLG9CQUFzQi9qQixFQUFLeE8sT0FDaEM3RyxLQUFLcTVCLG9CQUFvQi9zQixLQUFLLENBQUUrSSxLQUFNQSxFQUFNd2xCLFNBQVVBLElBQ3RENzZCLEtBQUs4NkIsZ0JBQWdCamlCLE1BQU14RCxFQUFNd2xCLEVBQVVKLEtBSTNDejZCLEtBQUs0NkIsS0FBSyxRQUFTLElBQUlud0IsTUFBTSxpREFDN0J6SyxLQUFLKzZCLFNBZEROLEdBQ0ZBLEtBa0JOMUIsRUFBb0IvMkIsVUFBVXlSLElBQU0sU0FBVTRCLEVBQU13bEIsRUFBVUosR0FFeEMsbUJBQVRwbEIsR0FDVG9sQixFQUFXcGxCLEVBQ1hBLEVBQU93bEIsRUFBVyxNQUVTLG1CQUFiQSxJQUNkSixFQUFXSSxFQUNYQSxFQUFXLE1BSWIsSUFBSUcsRUFBaUJoN0IsS0FBSzg2QixnQkFDMUI5NkIsS0FBSzZZLE1BQU14RCxHQUFRLEdBQUl3bEIsR0FBVSxXQUMvQkcsRUFBZXZuQixJQUFJLEtBQU0sS0FBTWduQixPQUtuQzFCLEVBQW9CLzJCLFVBQVVpNUIsVUFBWSxTQUFVdDZCLEVBQU1VLEdBQ3hEckIsS0FBS2k1QixTQUFTcE4sUUFBUWxyQixHQUFRVSxFQUM5QnJCLEtBQUs4NkIsZ0JBQWdCRyxVQUFVdDZCLEVBQU1VLElBSXZDMDNCLEVBQW9CLzJCLFVBQVVrNUIsYUFBZSxTQUFVdjZCLFVBQzlDWCxLQUFLaTVCLFNBQVNwTixRQUFRbHJCLEdBQzdCWCxLQUFLODZCLGdCQUFnQkksYUFBYXY2QixJQUlwQyxDQUNFLFFBQVMsZUFBZ0IsWUFDekIsYUFBYyxxQkFBc0IsY0FDcENzRyxTQUFRLFNBQVVvRCxHQUNsQjB1QixFQUFvQi8yQixVQUFVcUksR0FBVSxTQUFVeEYsRUFBR2lFLEdBQ25ELE9BQU85SSxLQUFLODZCLGdCQUFnQnp3QixHQUFReEYsRUFBR2lFLE9BSzNDLENBQUMsVUFBVyxhQUFjLFVBQVU3QixTQUFRLFNBQVVsRixHQUNwRGpCLE9BQU9DLGVBQWVnNEIsRUFBb0IvMkIsVUFBV0QsRUFBVSxDQUM3RGQsSUFBSyxXQUFjLE9BQU9qQixLQUFLODZCLGdCQUFnQi80QixTQUtuRGczQixFQUFvQi8yQixVQUFVKzNCLGdCQUFrQixXQUU5QyxJQUFJTyxFQUFXdDZCLEtBQUtpNUIsU0FBU3FCLFNBQ3pCQyxFQUFpQnY2QixLQUFLaTVCLFNBQVNtQixnQkFBZ0JFLEdBQ25ELEdBQUtDLEVBQUwsQ0FPQSxHQUFJdjZCLEtBQUtpNUIsU0FBU2tDLE9BQVEsQ0FDeEIsSUFBSWQsRUFBU0MsRUFBU2MsT0FBTyxFQUFHZCxFQUFTenpCLE9BQVMsR0FDbEQ3RyxLQUFLaTVCLFNBQVNvQyxNQUFRcjdCLEtBQUtpNUIsU0FBU2tDLE9BQU9kLEdBSTdDLElBQUlyTixFQUFVaHRCLEtBQUs4NkIsZ0JBQ2JQLEVBQWV2TixRQUFRaHRCLEtBQUtpNUIsU0FBVWo1QixLQUFLeTVCLG1CQUtqRCxJQUFLLElBQUkxVCxLQUpUL2xCLEtBQUtzN0IsWUFBYzNlLEVBQUk0ZSxPQUFPdjdCLEtBQUtpNUIsVUFHbkNqTSxFQUFRMk4sY0FBZ0IzNkIsS0FDTjg0QixFQUVaL1MsR0FDRmlILEVBQVF3TSxHQUFHelQsRUFBTytTLEVBQWMvUyxJQU1wQyxHQUFJL2xCLEtBQUt3N0IsWUFBYSxDQUVwQixJQUFJcDdCLEVBQUksRUFDSnE3QixFQUFVejdCLEtBQUtxNUIscUJBQ2xCLFNBQVNxQyxJQUNSLEdBQUl0N0IsRUFBSXE3QixFQUFRNTBCLE9BQVEsQ0FDdEIsSUFBSWEsRUFBUyt6QixFQUFRcjdCLEtBQ3JCNHNCLEVBQVFuVSxNQUFNblIsRUFBTzJOLEtBQU0zTixFQUFPbXpCLFNBQVVhLFFBRzVDMU8sRUFBUXZaLE1BTlosU0EvQkF6VCxLQUFLNDZCLEtBQUssUUFBUyxJQUFJbndCLE1BQU0sd0JBQTBCNnZCLEtBNEMzRHZCLEVBQW9CLzJCLFVBQVUwM0IsaUJBQW1CLFNBQVV6TSxHQUVyRGp0QixLQUFLaTVCLFNBQVMwQyxnQkFDaEIzN0IsS0FBS201QixXQUFXN3NCLEtBQUssQ0FDbkJxUSxJQUFLM2MsS0FBS3M3QixZQUNWelAsUUFBU29CLEVBQVNwQixRQUNsQitQLFdBQVkzTyxFQUFTMk8sYUFVekIsSUFBSUMsRUFBVzVPLEVBQVNwQixRQUFRZ1EsU0FDaEMsR0FBSUEsSUFBOEMsSUFBbEM3N0IsS0FBS2k1QixTQUFTNkMsaUJBQzFCN08sRUFBUzJPLFlBQWMsS0FBTzNPLEVBQVMyTyxXQUFhLElBQUssQ0FHM0QsS0FBTTU3QixLQUFLazVCLGVBQWlCbDVCLEtBQUtpNUIsU0FBU2lCLGFBRXhDLFlBREFsNkIsS0FBSzQ2QixLQUFLLFFBQVMsSUFBSW53QixNQUFNLDRCQVcvQixJQUFJc3hCLEVBQ0FsUSxFQUFVN3JCLEtBQUtpNUIsU0FBU3BOLFFBQzVCLEdBQTRCLE1BQXhCb0IsRUFBUzJPLGNBQXdCNTdCLEtBQUtpNUIsU0FBUzV1QixVQUFVb3VCLEdBSTNELElBQUtzRCxLQUhMLzdCLEtBQUtpNUIsU0FBUzV1QixPQUFTLE1BRXZCckssS0FBS3E1QixvQkFBc0IsR0FDWnhOLEVBQ1QsYUFBYWxsQixLQUFLbzFCLFdBQ2JsUSxFQUFRa1EsR0FNckIsSUFBSy83QixLQUFLdzdCLFlBQ1IsSUFBS08sS0FBVWxRLEVBQ1QsVUFBVWxsQixLQUFLbzFCLFdBQ1ZsUSxFQUFRa1EsR0FNckIsSUFBSUMsRUFBY3JmLEVBQUkrSyxRQUFRMW5CLEtBQUtzN0IsWUFBYU8sR0FDaERyRCxFQUFNLGlCQUFrQndELEdBQ3hCbDdCLE9BQU8weEIsT0FBT3h5QixLQUFLaTVCLFNBQVV0YyxFQUFJMFAsTUFBTTJQLElBQ3ZDaDhCLEtBQUt3N0IsYUFBYyxFQUNuQng3QixLQUFLKzVCLGtCQUdMOU0sRUFBU2dQLGVBSVRoUCxFQUFTaVAsWUFBY2w4QixLQUFLczdCLFlBQzVCck8sRUFBU2tQLFVBQVluOEIsS0FBS201QixXQUMxQm41QixLQUFLNDZCLEtBQUssV0FBWTNOLEdBR3RCanRCLEtBQUtxNUIsb0JBQXNCLElBaUQvQno1QixFQUFPRCxRQUFVcTZCLEVBQUssQ0FBRTVCLEtBQU1BLEVBQU1DLE1BQU9BLElBQzNDejRCLEVBQU9ELFFBQVFxNkIsS0FBT0EsRyxnQkNwUXRCLFNBQVNvQyxFQUFZQyxHQUVuQixJQUFJQyxFQUVKLFNBQVM5RCxJQUVQLEdBQUtBLEVBQU0rRCxRQUFYLENBRUEsSUFBSXg4QixFQUFPeTRCLEVBR1BnRSxHQUFRLElBQUlDLEtBQ1pDLEVBQUtGLEdBQVFGLEdBQVlFLEdBQzdCejhCLEVBQUs0OEIsS0FBT0QsRUFDWjM4QixFQUFLbzFCLEtBQU9tSCxFQUNadjhCLEVBQUt5OEIsS0FBT0EsRUFDWkYsRUFBV0UsRUFJWCxJQURBLElBQUl4VyxFQUFPLElBQUlyYixNQUFNL0IsVUFBVS9CLFFBQ3RCekcsRUFBSSxFQUFHQSxFQUFJNGxCLEVBQUtuZixPQUFRekcsSUFDL0I0bEIsRUFBSzVsQixHQUFLd0ksVUFBVXhJLEdBR3RCNGxCLEVBQUssR0FBS3JtQixFQUFRaTlCLE9BQU81VyxFQUFLLElBRTFCLGlCQUFvQkEsRUFBSyxJQUUzQkEsRUFBSzZXLFFBQVEsTUFJZixJQUFJeHdCLEVBQVEsRUFDWjJaLEVBQUssR0FBS0EsRUFBSyxHQUFHdmYsUUFBUSxpQkFBaUIsU0FBUzhWLEVBQU9nZixHQUV6RCxHQUFjLE9BQVZoZixFQUFnQixPQUFPQSxFQUMzQmxRLElBQ0EsSUFBSXl3QixFQUFZbjlCLEVBQVFvOUIsV0FBV3hCLEdBQ25DLEdBQUksbUJBQXNCdUIsRUFBVyxDQUNuQyxJQUFJajNCLEVBQU1tZ0IsRUFBSzNaLEdBQ2ZrUSxFQUFRdWdCLEVBQVV2OEIsS0FBS1IsRUFBTThGLEdBRzdCbWdCLEVBQUtpUSxPQUFPNXBCLEVBQU8sR0FDbkJBLElBRUYsT0FBT2tRLEtBSVQ1YyxFQUFRcTlCLFdBQVd6OEIsS0FBS1IsRUFBTWltQixHQUU5QixJQUFJaVgsRUFBUXpFLEVBQU0vUCxLQUFPOW9CLEVBQVE4b0IsS0FBT3lVLFFBQVF6VSxJQUFJN21CLEtBQUtzN0IsU0FDekRELEVBQU1qekIsTUFBTWpLLEVBQU1pbUIsSUFnQnBCLE9BYkF3UyxFQUFNNkQsVUFBWUEsRUFDbEI3RCxFQUFNK0QsUUFBVTU4QixFQUFRNDhCLFFBQVFGLEdBQ2hDN0QsRUFBTTJFLFVBQVl4OUIsRUFBUXc5QixZQUMxQjNFLEVBQU00RSxNQTlFUixTQUFxQmYsR0FDbkIsSUFBY2o4QixFQUFWMGIsRUFBTyxFQUVYLElBQUsxYixLQUFLaThCLEVBQ1J2Z0IsR0FBVUEsR0FBUSxHQUFLQSxFQUFRdWdCLEVBQVVoZSxXQUFXamUsR0FDcEQwYixHQUFRLEVBR1YsT0FBT25jLEVBQVEwOUIsT0FBT2o1QixLQUFLbWtCLElBQUl6TSxHQUFRbmMsRUFBUTA5QixPQUFPeDJCLFFBc0V4Q3kyQixDQUFZakIsR0FDMUI3RCxFQUFNeUQsUUFBVUEsRUFHWixtQkFBc0J0OEIsRUFBUTQ5QixNQUNoQzU5QixFQUFRNDlCLEtBQUsvRSxHQUdmNzRCLEVBQVE2OUIsVUFBVWx4QixLQUFLa3NCLEdBRWhCQSxFQUdULFNBQVN5RCxJQUNQLElBQUk1dkIsRUFBUTFNLEVBQVE2OUIsVUFBVTFxQixRQUFROVMsTUFDdEMsT0FBZSxJQUFYcU0sSUFDRjFNLEVBQVE2OUIsVUFBVXZILE9BQU81cEIsRUFBTyxJQUN6QixJQWpJWDFNLEVBQVVDLEVBQU9ELFFBQVV5OEIsRUFBWTVELE1BQVE0RCxFQUFxQixRQUFJQSxHQUNoRVEsT0FvTlIsU0FBZ0IvMkIsR0FDZCxPQUFJQSxhQUFlNEUsTUFBYzVFLEVBQUk0M0IsT0FBUzUzQixFQUFJZ25CLFFBQzNDaG5CLEdBck5UbEcsRUFBUSs5QixRQTZLUixXQUNFLzlCLEVBQVFnK0IsT0FBTyxLQTdLakJoK0IsRUFBUWcrQixPQTRJUixTQUFnQkMsR0FNZCxJQUFJeDlCLEVBTEpULEVBQVFrK0IsS0FBS0QsR0FFYmorQixFQUFRMHRCLE1BQVEsR0FDaEIxdEIsRUFBUW0rQixNQUFRLEdBR2hCLElBQUluNEIsR0FBK0IsaUJBQWZpNEIsRUFBMEJBLEVBQWEsSUFBSWo0QixNQUFNLFVBQ2pFc08sRUFBTXRPLEVBQU1rQixPQUVoQixJQUFLekcsRUFBSSxFQUFHQSxFQUFJNlQsRUFBSzdULElBQ2R1RixFQUFNdkYsS0FFVyxPQUR0Qnc5QixFQUFhajRCLEVBQU12RixHQUFHcUcsUUFBUSxNQUFPLFFBQ3RCLEdBQ2I5RyxFQUFRbStCLE1BQU14eEIsS0FBSyxJQUFJK04sT0FBTyxJQUFNdWpCLEVBQVd4QyxPQUFPLEdBQUssTUFFM0R6N0IsRUFBUTB0QixNQUFNL2dCLEtBQUssSUFBSStOLE9BQU8sSUFBTXVqQixFQUFhLE9BSXJELElBQUt4OUIsRUFBSSxFQUFHQSxFQUFJVCxFQUFRNjlCLFVBQVUzMkIsT0FBUXpHLElBQUssQ0FDN0MsSUFBSXFnQixFQUFXOWdCLEVBQVE2OUIsVUFBVXA5QixHQUNqQ3FnQixFQUFTOGIsUUFBVTU4QixFQUFRNDhCLFFBQVE5YixFQUFTNGIsYUFqS2hEMThCLEVBQVE0OEIsUUF1TFIsU0FBaUI1N0IsR0FDZixHQUE4QixNQUExQkEsRUFBS0EsRUFBS2tHLE9BQVMsR0FDckIsT0FBTyxFQUVULElBQUl6RyxFQUFHNlQsRUFDUCxJQUFLN1QsRUFBSSxFQUFHNlQsRUFBTXRVLEVBQVFtK0IsTUFBTWozQixPQUFRekcsRUFBSTZULEVBQUs3VCxJQUMvQyxHQUFJVCxFQUFRbStCLE1BQU0xOUIsR0FBR3VHLEtBQUtoRyxHQUN4QixPQUFPLEVBR1gsSUFBS1AsRUFBSSxFQUFHNlQsRUFBTXRVLEVBQVEwdEIsTUFBTXhtQixPQUFRekcsRUFBSTZULEVBQUs3VCxJQUMvQyxHQUFJVCxFQUFRMHRCLE1BQU1qdEIsR0FBR3VHLEtBQUtoRyxHQUN4QixPQUFPLEVBR1gsT0FBTyxHQXJNVGhCLEVBQVFvK0IsU0FBVyxFQUFRLEtBSzNCcCtCLEVBQVE2OUIsVUFBWSxHQU1wQjc5QixFQUFRMHRCLE1BQVEsR0FDaEIxdEIsRUFBUW0rQixNQUFRLEdBUWhCbitCLEVBQVFvOUIsV0FBYSxJLGNDakNyQm45QixFQUFPRCxRQUFVbWUsUUFBUSxPLDZCQ0V6QmxlLEVBQU9ELFFBQVUsU0FBa0IwQixHQUNqQyxTQUFVQSxJQUFTQSxFQUFNMjhCLGMsNkJDSzNCLFNBQVNDLEVBQU9wUixHQUNkN3NCLEtBQUs2c0IsUUFBVUEsRUFHakJvUixFQUFPajhCLFVBQVUrRSxTQUFXLFdBQzFCLE1BQU8sVUFBWS9HLEtBQUs2c0IsUUFBVSxLQUFPN3NCLEtBQUs2c0IsUUFBVSxLQUcxRG9SLEVBQU9qOEIsVUFBVWc4QixZQUFhLEVBRTlCcCtCLEVBQU9ELFFBQVVzK0IsRyw2QkNYakIsSUFBSUMsRUFBVSxFQUFRLEtBQWV6aEIsT0FtSHJDN2MsRUFBT0QsUUFsSFAsU0FBZXcrQixHQUNiLEdBQUlBLEVBQVN0M0IsUUFBVSxJQUFPLE1BQU0sSUFBSTNDLFVBQVUscUJBRWxELElBREEsSUFBSWs2QixFQUFXLElBQUlwd0IsV0FBVyxLQUNyQnNjLEVBQUksRUFBR0EsRUFBSThULEVBQVN2M0IsT0FBUXlqQixJQUNuQzhULEVBQVM5VCxHQUFLLElBRWhCLElBQUssSUFBSWxxQixFQUFJLEVBQUdBLEVBQUkrOUIsRUFBU3QzQixPQUFRekcsSUFBSyxDQUN4QyxJQUFJd2QsRUFBSXVnQixFQUFTN2YsT0FBT2xlLEdBQ3BCaStCLEVBQUt6Z0IsRUFBRVMsV0FBVyxHQUN0QixHQUFxQixNQUFqQitmLEVBQVNDLEdBQWUsTUFBTSxJQUFJbjZCLFVBQVUwWixFQUFJLGlCQUNwRHdnQixFQUFTQyxHQUFNaitCLEVBRWpCLElBQUlrK0IsRUFBT0gsRUFBU3QzQixPQUNoQjAzQixFQUFTSixFQUFTN2YsT0FBTyxHQUN6QmtnQixFQUFTcDZCLEtBQUtxa0IsSUFBSTZWLEdBQVFsNkIsS0FBS3FrQixJQUFJLEtBQ25DZ1csRUFBVXI2QixLQUFLcWtCLElBQUksS0FBT3JrQixLQUFLcWtCLElBQUk2VixHQXlDdkMsU0FBU0ksRUFBYy83QixHQUNyQixHQUFzQixpQkFBWEEsRUFBdUIsTUFBTSxJQUFJdUIsVUFBVSxtQkFDdEQsR0FBc0IsSUFBbEJ2QixFQUFPa0UsT0FBZ0IsT0FBT3EzQixFQUFRUyxNQUFNLEdBQ2hELElBQUlDLEVBQU0sRUFFVixHQUFvQixNQUFoQmo4QixFQUFPaThCLEdBQVgsQ0FJQSxJQUZBLElBQUlDLEVBQVMsRUFDVGg0QixFQUFTLEVBQ05sRSxFQUFPaThCLEtBQVNMLEdBQ3JCTSxJQUNBRCxJQU1GLElBSEEsSUFBSXJRLEdBQVU1ckIsRUFBT2tFLE9BQVMrM0IsR0FBT0osRUFBVSxJQUFPLEVBQ2xETSxFQUFPLElBQUk5d0IsV0FBV3VnQixHQUVuQjVyQixFQUFPaThCLElBQU0sQ0FFbEIsSUFBSUcsRUFBUVgsRUFBU3o3QixFQUFPMGIsV0FBV3VnQixJQUV2QyxHQUFjLE1BQVZHLEVBQWlCLE9BRXJCLElBREEsSUFBSTMrQixFQUFJLEVBQ0M0K0IsRUFBTXpRLEVBQU8sR0FBYyxJQUFWd1EsR0FBZTMrQixFQUFJeUcsS0FBcUIsSUFBVG00QixFQUFhQSxJQUFPNStCLElBQzNFMitCLEdBQVVULEVBQU9RLEVBQUtFLEtBQVUsRUFDaENGLEVBQUtFLEdBQVFELEVBQVEsTUFBUyxFQUM5QkEsRUFBU0EsRUFBUSxNQUFTLEVBRTVCLEdBQWMsSUFBVkEsRUFBZSxNQUFNLElBQUl0MEIsTUFBTSxrQkFDbkM1RCxFQUFTekcsRUFDVHcrQixJQUdGLEdBQW9CLE1BQWhCajhCLEVBQU9pOEIsR0FBWCxDQUdBLElBREEsSUFBSUssRUFBTTFRLEVBQU8xbkIsRUFDVm80QixJQUFRMVEsR0FBc0IsSUFBZHVRLEVBQUtHLElBQzFCQSxJQUVGLElBQUlDLEVBQU1oQixFQUFRaUIsWUFBWU4sR0FBVXRRLEVBQU8wUSxJQUMvQ0MsRUFBSXpzQixLQUFLLEVBQU0sRUFBR29zQixHQUVsQixJQURBLElBQUl2VSxFQUFJdVUsRUFDREksSUFBUTFRLEdBQ2IyUSxFQUFJNVUsS0FBT3dVLEVBQUtHLEtBRWxCLE9BQU9DLElBT1QsTUFBTyxDQUNMeGtCLE9BN0ZGLFNBQWlCL1gsR0FFZixJQURJZ0ksTUFBTTNELFFBQVFyRSxJQUFXQSxhQUFrQnFMLGNBQWNyTCxFQUFTdTdCLEVBQVE5bkIsS0FBS3pULEtBQzlFdTdCLEVBQVFwM0IsU0FBU25FLEdBQVcsTUFBTSxJQUFJdUIsVUFBVSxtQkFDckQsR0FBc0IsSUFBbEJ2QixFQUFPa0UsT0FBZ0IsTUFBTyxHQU1sQyxJQUpBLElBQUlnNEIsRUFBUyxFQUNUaDRCLEVBQVMsRUFDVHU0QixFQUFTLEVBQ1RDLEVBQU8xOEIsRUFBT2tFLE9BQ1h1NEIsSUFBV0MsR0FBMkIsSUFBbkIxOEIsRUFBT3k4QixJQUMvQkEsSUFDQVAsSUFNRixJQUhBLElBQUl0USxHQUFTOFEsRUFBT0QsR0FBVVgsRUFBVSxJQUFPLEVBQzNDYSxFQUFNLElBQUl0eEIsV0FBV3VnQixHQUVsQjZRLElBQVdDLEdBQU0sQ0FJdEIsSUFIQSxJQUFJTixFQUFRcDhCLEVBQU95OEIsR0FFZmgvQixFQUFJLEVBQ0NtL0IsRUFBTWhSLEVBQU8sR0FBYyxJQUFWd1EsR0FBZTMrQixFQUFJeUcsS0FBcUIsSUFBVDA0QixFQUFhQSxJQUFPbi9CLElBQzNFMitCLEdBQVUsSUFBTU8sRUFBSUMsS0FBVSxFQUM5QkQsRUFBSUMsR0FBUVIsRUFBUVQsSUFBVSxFQUM5QlMsRUFBU0EsRUFBUVQsSUFBVSxFQUU3QixHQUFjLElBQVZTLEVBQWUsTUFBTSxJQUFJdDBCLE1BQU0sa0JBQ25DNUQsRUFBU3pHLEVBQ1RnL0IsSUFJRixJQURBLElBQUlJLEVBQU1qUixFQUFPMW5CLEVBQ1YyNEIsSUFBUWpSLEdBQXFCLElBQWIrUSxFQUFJRSxJQUN6QkEsSUFJRixJQURBLElBQUl2MkIsRUFBTXMxQixFQUFPekgsT0FBTytILEdBQ2pCVyxFQUFNalIsSUFBUWlSLEVBQU92MkIsR0FBT2sxQixFQUFTN2YsT0FBT2doQixFQUFJRSxJQUN2RCxPQUFPdjJCLEdBd0RQeTFCLGFBQWNBLEVBQ2QvakIsT0FSRixTQUFpQnRVLEdBQ2YsSUFBSXFCLEVBQVNnM0IsRUFBYXI0QixHQUMxQixHQUFJcUIsRUFBVSxPQUFPQSxFQUNyQixNQUFNLElBQUkrQyxNQUFNLFdBQWE2ekIsRUFBTyxrQixjQ2xIeEMxK0IsRUFBT0QsUUFBVW1lLFFBQVEsVyw2QkNNekIsTUFBTTJoQixFQUFZLEVBQVEsTUFFMUI5L0IsRUFBVUMsRUFBT0QsUUFBVTJiLEdBQ25CWixPQW9DUixTQUFpQmdsQixFQUFZNVIsR0FDM0IsTUFBTThCLEVBQU8rUCxFQUFRRCxHQUdyQixPQUFPcGtCLEVBRk1zVSxFQUFLanZCLEtBRUs4YixPQUFPckcsS0FBS3daLEVBQUtsVixPQUFPb1QsTUF2Q2pEbnVCLEVBQVFnYixPQW1EUixTQUFpQmlsQixHQUNYbmpCLE9BQU8zVixTQUFTODRCLEtBQ2xCQSxFQUFjQSxFQUFZNzRCLFlBRzVCLE1BQU1nbUIsRUFBTzZTLEVBQVkvRixVQUFVLEVBQUcsR0FHWCxpQkFGM0IrRixFQUFjQSxFQUFZL0YsVUFBVSxFQUFHK0YsRUFBWS80QixXQUdqRCs0QixFQUFjbmpCLE9BQU9yRyxLQUFLd3BCLElBRzVCLE1BQU1oUSxFQUFPK1AsRUFBUTVTLEdBQ3JCLE9BQU90USxPQUFPckcsS0FBS3daLEVBQUtqVixPQUFPaWxCLEVBQVk3NEIsY0EvRDdDcEgsRUFBUXVkLFVBeUVSLFNBQW9CMGlCLEdBQ2RuakIsT0FBTzNWLFNBQVM4NEIsS0FDbEJBLEVBQWNBLEVBQVk3NEIsWUFJNUIsR0FBb0Qsb0JBQWhEakcsT0FBT2tCLFVBQVUrRSxTQUFTeEcsS0FBS3EvQixHQUNqQyxPQUFPLEVBR1QsTUFBTTdTLEVBQU82UyxFQUFZL0YsVUFBVSxFQUFHLEdBQ3RDLElBRUUsT0FEYThGLEVBQVE1UyxHQUNUcHNCLEtBQ1osTUFBT2l3QixHQUNQLE9BQU8sSUF2RlhqeEIsRUFBUTB0QixNQUFRdnNCLE9BQU8rK0IsT0FBTy8rQixPQUFPa08sS0FBS3l3QixFQUFVcFMsUUFDcEQxdEIsRUFBUTJ0QixNQUFReHNCLE9BQU8rK0IsT0FBTy8rQixPQUFPa08sS0FBS3l3QixFQUFVblMsUUFFcEQsTUFBTXdTLEVBQWtCLElBQUlyMUIsTUFBTSx3QkFVbEMsU0FBUzZRLEVBQVdva0IsRUFBWTVSLEdBQzlCLElBQUtBLEVBQ0gsTUFBTSxJQUFJcmpCLE1BQU0sOEJBRWxCLE1BQU1tbEIsRUFBTytQLEVBQVFELEdBQ2ZLLEVBQVV0akIsT0FBT3JHLEtBQUt3WixFQUFLN0MsTUFJakMsT0EyRUYsU0FBc0Jwc0IsRUFBTW10QixHQUNiNlIsRUFBUWgvQixHQUNoQmdhLE9BQU9tVCxFQUFJL21CLFlBOUVoQmk1QixDQURhcFEsRUFBS2p2QixLQUNBbXRCLEdBQ1hyUixPQUFPMUcsT0FBTyxDQUFDZ3FCLEVBQVNqUyxJQWdGakMsU0FBUzZSLEVBQVNELEdBQ2hCLElBQUk5UCxFQUVKLEdBQUk2UCxFQUFVcFMsTUFBTXFTLEdBQ2xCOVAsRUFBTzZQLEVBQVVwUyxNQUFNcVMsT0FDbEIsS0FBSUQsRUFBVW5TLE1BQU1vUyxHQUd6QixNQUFNSSxFQUZObFEsRUFBTzZQLEVBQVVuUyxNQUFNb1MsR0FLekIsSUFBSzlQLEVBQUtxUSxnQkFDUixNQUFNLElBQUl4MUIsTUFBTSxRQUFVaTFCLEVBQWEsMkJBR3pDLE9BQU85UCxJLDZCQy9IVCxNQUFNWCxFQUFRLEVBQVEsS0FDaEJnTCxFQUFZLEVBQVEsS0FDcEJ6TSxFQUFTLEVBQVEsSUFDakJMLEVBQU8sRUFBUSxJQUNmMVIsRUFBTSxFQUFRLEtBQ2R5VSxFQUFTLEVBQVEsS0FDakJnUSxFQUFVLytCLE9BQU9nL0IsSUFBSSw4QkFhckI1a0IsRUFBWTJVLEVBQU83ZCxPQUFNLFNBQVUrdEIsR0FDdkMsS0FBTXBnQyxnQkFBZ0J1YixHQUNwQixPQUFPLElBQUlBLEVBQVU2a0IsR0FRdkIsR0FKWSxNQUFSQSxJQUNGQSxFQUFPLElBR0xBLGFBQWdCM2pCLE9BSWxCemMsS0FBSzBILE9BQVN1bkIsRUFBTW9SLFdBQVdELFFBQzFCLEdBQW9CLGlCQUFUQSxHQUFxQkEsYUFBZ0JuNkIsT0FBUSxDQUM3RCxHQUFJbTZCLEVBQUt2NUIsT0FBUyxHQUF3QixNQUFuQnU1QixFQUFLOWhCLE9BQU8sR0FDakMsTUFBTSxJQUFJN1QsTUFBTSxjQUFjMjFCLDRCQUVoQ3BnQyxLQUFLMEgsT0FBU3VuQixFQUFNcVIsV0FBV0YsT0FDMUIsTUFBSUEsRUFBSzE0QixRQUFVMDRCLEVBQUtHLFFBQVVILEVBQUtJLFlBRzVDLE1BQU0sSUFBSS8xQixNQUFNLHVEQUZoQnpLLEtBQUswSCxPQUFTdW5CLEVBQU1vUixXQUFXRCxFQUFLMTRCLFdBSXJDLENBQUV5b0IsVUFBVyxZQUFhQyxXQUFZLHlDQVV6QzdVLEVBQVV2WixVQUFVK0UsU0FBVyxXQUM3QixPQUFPa29CLEVBQU13UixlQUFlemdDLEtBQUswSCxTQVduQzZULEVBQVV2WixVQUFVMCtCLE9BQVNubEIsRUFBVXZaLFVBQVUrRSxTQVVqRHdVLEVBQVV2WixVQUFVMitCLFVBQVksV0FDOUIsTUFBTUMsRUFBTyxHQUNQQyxFQUFTN2dDLEtBQUsrRyxXQUFXcEIsTUFBTSxLQUtyQyxPQUpBaTdCLEVBQUtFLE9BQXVCLFFBQWRELEVBQU8sR0FBZSxPQUFTLE9BQzdDRCxFQUFLdEgsS0FBT3VILEVBQU8sR0FDbkJELEVBQUtHLFVBQVlGLEVBQU8sR0FDeEJELEVBQUs1YixLQUFPcUssU0FBU3dSLEVBQU8sSUFDckJELEdBYVRybEIsRUFBVXZaLFVBQVVrK0IsR0FBVyxXQUM3QixNQUFPLGNBQ0xsZ0MsS0FBSzBILE9BQU9YLFNBQVMsT0FBUyxNQUM5QmtvQixFQUFNd1IsZUFBZXpnQyxLQUFLMEgsUUFBVSxLQWF4QzZULEVBQVV2WixVQUFVaytCLFFBQVUsV0FDNUIsTUFBTyxjQUNMbGdDLEtBQUswSCxPQUFPWCxTQUFTLE9BQVMsTUFDOUJrb0IsRUFBTXdSLGVBQWV6Z0MsS0FBSzBILFFBQVUsS0FrQnhDNlQsRUFBVXZaLFVBQVV1K0IsT0FBUyxXQUMzQixPQUFPdmdDLEtBQUt3Z0MsYUFBYXR0QixJQUFJNlosR0FBUWpzQixPQUFPMHhCLE9BQU8sR0FBSXlILEVBQVVsTixNQVluRXhSLEVBQVV2WixVQUFVdytCLFdBQWEsV0FDL0IsTUFBTWxULEVBQVEsR0FDUlEsRUFBTTl0QixLQUFLMEgsT0FDakIsSUFBSXRILEVBQUksRUFDUixLQUFPQSxFQUFJMHRCLEVBQUlqbkIsUUFBUSxDQUNyQixNQUFNa21CLEVBQU9TLEVBQU83UyxPQUFPbVQsRUFBSzF0QixHQUMxQnlCLEVBQUkyckIsRUFBTzdTLE9BQU84TyxNQUVsQnZuQixFQUFJKzNCLEVBQVVsTixHQUdwQjNzQixHQUZhNnVCLEVBQU0rUixZQUFZOStCLEVBQUc0ckIsRUFBSTdqQixNQUFNN0osRUFBSXlCLElBRW5DQSxFQUNieXJCLEVBQU1oaEIsS0FBS3lnQixHQUdiLE9BQU9PLEdBWVQvUixFQUFVdlosVUFBVWkvQixXQUFhLFdBQy9CLE9BQU9qaEMsS0FBS3VnQyxTQUFTcnRCLElBQUliLEdBQVNBLEVBQU0xUixPQWExQzRhLEVBQVV2WixVQUFVay9CLE9BQVMsV0FDM0IsT0FBT2pTLEVBQU1rUyxlQUFlbmhDLEtBQUswSCxTQWFuQzZULEVBQVV2WixVQUFVby9CLGFBQWUsV0FDakMsTUFBTTkvQixFQUFJMnRCLEVBQU1rUyxlQUFlbmhDLEtBQUswSCxRQUNwQyxPQUFPdW5CLEVBQU1vUyxxQkFBcUIvL0IsSUFxQnBDaWEsRUFBVXZaLFVBQVVzL0IsWUFBYyxTQUFzQmxCLEdBRXRELE9BREFBLEVBQU83a0IsRUFBVTZrQixHQUNWN2tCLEVBQVV2YixLQUFLK0csV0FBYXE1QixFQUFLcjVCLGFBcUIxQ3dVLEVBQVV2WixVQUFVdS9CLFlBQWMsU0FBc0JuQixHQUN0REEsRUFBT0EsRUFBS3I1QixXQUNaLE1BQU01RSxFQUFJbkMsS0FBSytHLFdBQ1QzRyxFQUFJK0IsRUFBRWdOLFlBQVlpeEIsR0FDeEIsR0FBSWhnQyxFQUFJLEVBQ04sTUFBTSxJQUFJcUssTUFBTSxXQUFhekssS0FBTyxpQ0FBbUNvZ0MsR0FFekUsT0FBTzdrQixFQUFVcFosRUFBRThILE1BQU0sRUFBRzdKLEtBcUI5Qm1iLEVBQVV2WixVQUFVdy9CLGdCQUFrQixTQUEwQnpVLEdBQzlELE1BQU1tVSxFQUFTbGhDLEtBQUtraEMsU0FDcEIsSUFBSyxJQUFJOWdDLEVBQUk4Z0MsRUFBT3I2QixPQUFTLEVBQUd6RyxHQUFLLEVBQUdBLElBQ3RDLEdBQUk4Z0MsRUFBTzlnQyxHQUFHLEtBQU8yc0IsRUFDbkIsT0FBT3hSLEVBQVUwVCxFQUFNd1MsZUFBZVAsRUFBT2ozQixNQUFNLEVBQUc3SixLQUcxRCxPQUFPSixNQWNUdWIsRUFBVXZaLFVBQVUwL0IsVUFBWSxXQUM5QixJQUFJQyxFQUFTLEtBQ2IsSUFRRUEsRUFQZTNoQyxLQUFLb2hDLGVBQWUxdUIsT0FBUWt2QixJQUN6QyxHQUFJQSxFQUFNLEtBQU8zSCxFQUFVNU0sTUFBTXdVLEtBQUs5VSxLQUNwQyxPQUFPLElBS0srVSxNQUFNLEdBRXRCSCxFQUFTeFUsRUFBS3pTLE9BQU8sSUFBSWUsRUFBSWttQixHQUFRdG1CLFdBQ3JDLE1BQU85VyxHQUNQbzlCLEVBQVMsS0FHWCxPQUFPQSxHQWNUcG1CLEVBQVV2WixVQUFVKy9CLFFBQVUsV0FDNUIsSUFBSXRrQixFQUFPLEtBQ1gsSUFDRUEsRUFBT3pkLEtBQUtvaEMsZUFBZTF1QixPQUFRa3ZCLElBRWpDLEdBRGMzSCxFQUFVMkgsRUFBTSxJQUNwQm5rQixLQUNSLE9BQU8sSUFFUixHQUFHLEdBQ04sTUFBT2xaLEdBQ1BrWixFQUFPLEtBR1QsT0FBT0EsR0FxQlRsQyxFQUFVdlosVUFBVSt0QixPQUFTLFNBQWlCcVEsR0FDNUMsT0FBT3BnQyxLQUFLMEgsT0FBT3FvQixPQUFPcVEsRUFBSzE0QixTQWdCakM2VCxFQUFVdlosVUFBVWdnQyxZQUFjLFdBQ2hDLE1BQU0xVSxFQUFRdHRCLEtBQUt3Z0MsYUFDYm5ULEVBQVFydEIsS0FBS2loQyxhQUNiL0ksRUFBUWw0QixLQUFLK0csV0FBV3BCLE1BQU0sS0FBS3NFLE1BQU0sR0FFL0MsR0FBSWl1QixFQUFNcnhCLE9BQVMsRUFDakIsTUFBTSxJQUFJNEQsTUFBTSw4RkFDWCxHQUFpQixJQUFiNmlCLEVBQU0sSUFBeUIsS0FBYkEsRUFBTSxJQUEwQixLQUFiQSxFQUFNLElBQTBCLEtBQWJBLEVBQU0sR0FDdkUsTUFBTSxJQUFJN2lCLE1BQU0sNEJBQTRCNGlCLEVBQU0sa0VBQzdDLEdBQWlCLFFBQWI2SyxFQUFNLElBQTZCLFFBQWJBLEVBQU0sR0FDckMsTUFBTSxJQUFJenRCLE1BQU0sNEJBQTRCNGlCLEVBQU0sNkRBR3BELE1BQU8sQ0FDTHlULE9BQXNCLEtBQWJ4VCxFQUFNLElBQTBCLEtBQWJBLEVBQU0sR0FBYSxFQUFJLEVBQ25EMlUsUUFBUy9KLEVBQU0sR0FDZmxULEtBQU1xSyxTQUFTNkksRUFBTSxNQWdCekIzYyxFQUFVMm1CLGdCQUFrQixTQUEwQjlCLEVBQU1XLEdBQzFELElBQUtYLEVBQU0sTUFBTSxJQUFJMzFCLE1BQU0sZ0NBQzNCLElBQUtzMkIsRUFBVyxNQUFNLElBQUl0MkIsTUFBTSwrQkFDaEMsTUFBTTAzQixFQUFzQixTQUFoQi9CLEVBQUtVLE9BQXFCLE1BQVEsTUFDOUMsT0FBT3ZsQixFQUFVLElBQU0sQ0FBQzRtQixFQUFJL0IsRUFBSzZCLFFBQVNsQixFQUFXWCxFQUFLcGIsTUFBTWhmLEtBQUssT0EyQnZFdVYsRUFBVXZaLFVBQVVvZ0MsbUJBQXFCLFNBQTZCaEMsR0FDcEUsTUFBTUcsR0FBVUgsR0FBUXBnQyxNQUFNdWdDLFNBRTlCLE9BQXNCLElBQWxCQSxFQUFPMTVCLFVBSVksSUFBbkIwNUIsRUFBTyxHQUFHeFQsTUFBaUMsS0FBbkJ3VCxFQUFPLEdBQUd4VCxRQUdmLElBQW5Cd1QsRUFBTyxHQUFHeFQsTUFBaUMsTUFBbkJ3VCxFQUFPLEdBQUd4VCxRQWlCeEN4UixFQUFVMGUsVUFBWUEsRUFRdEIxZSxFQUFVOG1CLE9BQVMsU0FBaUJqQyxHQUNsQyxRQUFLN2tCLEVBQVVRLFlBQVlxa0IsSUFLcEJBLEVBQUtHLFNBQVNsdEIsS0FBTWhCLEdBQVVBLEVBQU1tYyxhQVU3Q2pULEVBQVVtTSxRQUFVLFNBQWtCMFksR0FDcEMsT0FBSzdrQixFQUFVUSxZQUFZcWtCLElBQVU3a0IsRUFBVThtQixPQUFPakMsR0FTL0NyWixRQUFRb0IsT0FBTyxJQUFJMWQsTUFBTSx3QkFSdkJzYyxRQUFRb0IsT0FBTzFkLE1BQU0sc0JBV3RCN0ssRUFBT0QsUUFBVTRiLEcsNkJDMWYzQixNQUFNaVMsRUFBUyxFQUFRLElBVXZCLFNBQVM4VSxFQUFnQnhVLEdBQ3ZCLE9BQU91QixTQUFTdkIsRUFBSS9tQixTQUFTLE9BQVEsSUFHdkMsU0FBU3c3QixFQUFnQkMsR0FDdkIsSUFBSUMsRUFBWUQsRUFBSXo3QixTQUFTLElBSTdCLE9BSEkwN0IsRUFBVTU3QixPQUFTLEdBQU0sSUFDM0I0N0IsRUFBWSxJQUFNQSxHQUViaG1CLE9BQU9yRyxLQUFLcXNCLEVBQVcsT0FqQmhDN2lDLEVBQU9ELFFBQVUsQ0FDZjRpQyxpQkFDQUQsaUJBQ0FJLG1CQWlCRixTQUE2QjFtQixHQUMzQixPQUFPUyxPQUFPckcsS0FBS29YLEVBQU85UyxPQUFPNG5CLEVBQWV0bUIsTUFqQmhEMm1CLG1CQW9CRixTQUE2QjNtQixHQUMzQixPQUFPdW1CLEVBQWUvVSxFQUFPN1MsT0FBT3FCLEtBcEJwQzRtQixhQXVCRixTQUF1QkosR0FDckIsT0FBTy9sQixPQUFPckcsS0FBS29YLEVBQU85UyxPQUFPOG5CLE8sNkJDZ0NuQzVpQyxFQUFPRCxRQTlEUCxTQUFnQmtqQyxHQUFPLFVBQUUxUyxFQUFTLFdBQUVDLElBQ2hDLE1BQU0wUyxFQUFTM2hDLE9BQU9nL0IsSUFBSS9QLEdBRXBCMlMsRUFBaUIsQ0FPbkIsQ0FBQzVTLEdBQVksY0FBYzBTLEVBQ3ZCLGVBQWU3YyxHQUNYZ2QsU0FBU2hkLEdBQ1RsbEIsT0FBT0MsZUFBZWYsS0FBTThpQyxFQUFRLENBQUV6aEMsT0FBTyxJQUdqREosSUFBS0UsT0FBT0MsZUFDUixPQUFPK3VCLEtBR2pCQSxHQUlGLE9BRkE0UyxFQUFlLEtBQUs1UyxLQUFnQmpwQixNQUFXQSxJQUFPQSxFQUFJNDdCLElBRW5EQyxHQXVDWG5qQyxFQUFPRCxRQUFRMFMsTUFwQ2YsU0FBcUJ3d0IsR0FBTyxVQUFFMVMsRUFBUyxXQUFFQyxFQUFVLFdBQUU2UyxJQUNqRCxNQUFNSCxFQUFTM2hDLE9BQU9nL0IsSUFBSS9QLEdBR3BCMlMsRUFBaUIsQ0FDbkIsQ0FBQzVTLEdBQVksWUFBYW5LLEdBQ3RCLEdBQUlpZCxLQUFnQmpqQyxnQkFBZ0IraUMsR0FDaEMsT0FBTyxJQUFJQSxLQUFrQi9jLEdBR2pDLE1BQU1rZCxFQUFRTCxFQUFNdGlDLEtBQUtQLFFBQVNnbUIsSUFBU2htQixLQU0zQyxPQUpJa2pDLElBQVVBLEVBQU1KLElBQ2hCaGlDLE9BQU9DLGVBQWVtaUMsRUFBT0osRUFBUSxDQUFFemhDLE9BQU8sSUFHM0M2aEMsSUFFYi9TLEdBY0YsT0FYQTRTLEVBQWUvZ0MsVUFBWWxCLE9BQU9ZLE9BQU9taEMsRUFBTTdnQyxXQUMvQytnQyxFQUFlL2dDLFVBQVUySCxZQUFjbzVCLEVBRXZDamlDLE9BQU9DLGVBQWVnaUMsRUFBZS9nQyxVQUFXYixPQUFPQyxZQUFhLENBQ2hFSCxJQUFHLElBQ1FrdkIsSUFJZjRTLEVBQWUsS0FBSzVTLEtBQWdCanBCLE1BQVdBLElBQU9BLEVBQUk0N0IsSUFFbkRDLEksZ0JDN0RYLElBQUlJLEVBQWlCLEVBQVEsS0FDekJDLEVBQU8sRUFBUSxJQUNmM2xCLEVBQU8sRUFBUSxJQUNmMmEsRUFBTyxFQUFRLEtBQ2ZDLEVBQVEsRUFBUSxLQUNoQmdMLEVBQVcsRUFBUSxLQUFPaFgsTUFDMUJnRSxFQUFLLEVBQVEsSUFDYmlULEVBQU8sRUFBUSxLQUNmQyxFQUFXLEVBQVEsS0FDbkJDLEVBQVcsRUFBUSxLQWdCdkIsU0FBU2w4QixFQUFTNkQsR0FDaEIsS0FBTW5MLGdCQUFnQnNILEdBQ3BCLE9BQU8sSUFBSUEsRUFVYixJQUFLLElBQUltOEIsS0FQVHpqQyxLQUFLMGpDLGdCQUFrQixFQUN2QjFqQyxLQUFLMmpDLGFBQWUsRUFDcEIzakMsS0FBSzRqQyxpQkFBbUIsR0FFeEJULEVBQWU1aUMsS0FBS1AsTUFFcEJtTCxFQUFVQSxHQUFXLEdBRW5CbkwsS0FBS3lqQyxHQUFVdDRCLEVBQVFzNEIsR0ExQjNCN2pDLEVBQU9ELFFBQVUySCxFQUdqQjg3QixFQUFLUyxTQUFTdjhCLEVBQVU2N0IsR0EyQnhCNzdCLEVBQVN3OEIsV0FBYSxPQUN0Qng4QixFQUFTcWtCLHFCQUF1QiwyQkFFaENya0IsRUFBU3RGLFVBQVUraEMsT0FBUyxTQUFTQyxFQUFPM2lDLEVBQU84SixHQUszQixpQkFIdEJBLEVBQVVBLEdBQVcsTUFJbkJBLEVBQVUsQ0FBQzg0QixTQUFVOTRCLElBR3ZCLElBQUk0NEIsRUFBU1osRUFBZW5oQyxVQUFVK2hDLE9BQU9uaUMsS0FBSzVCLE1BUWxELEdBTG9CLGlCQUFUcUIsSUFDVEEsRUFBUSxHQUFLQSxHQUlYK2hDLEVBQUtwOEIsUUFBUTNGLEdBR2ZyQixLQUFLa2tDLE9BQU8sSUFBSXo1QixNQUFNLGtDQUh4QixDQU9BLElBQUlzeEIsRUFBUy83QixLQUFLbWtDLGlCQUFpQkgsRUFBTzNpQyxFQUFPOEosR0FDN0NpNUIsRUFBU3BrQyxLQUFLcWtDLG1CQUVsQk4sRUFBT2hJLEdBQ1BnSSxFQUFPMWlDLEdBQ1AwaUMsRUFBT0ssR0FHUHBrQyxLQUFLc2tDLGFBQWF2SSxFQUFRMTZCLEVBQU84SixLQUduQzdELEVBQVN0RixVQUFVc2lDLGFBQWUsU0FBU3ZJLEVBQVExNkIsRUFBTzhKLEdBQ3hELElBQUlvNUIsRUFBYyxFQU1TLE1BQXZCcDVCLEVBQVFxNUIsWUFDVkQsSUFBZ0JwNUIsRUFBUXE1QixZQUNmL25CLE9BQU8zVixTQUFTekYsR0FDekJrakMsRUFBY2xqQyxFQUFNd0YsT0FDTSxpQkFBVnhGLElBQ2hCa2pDLEVBQWM5bkIsT0FBTzlHLFdBQVd0VSxJQUdsQ3JCLEtBQUsyakMsY0FBZ0JZLEVBR3JCdmtDLEtBQUswakMsaUJBQ0hqbkIsT0FBTzlHLFdBQVdvbUIsR0FDbEJ6MEIsRUFBU3c4QixXQUFXajlCLE9BR2pCeEYsSUFBWUEsRUFBTW9jLE1BQVVwYyxFQUFNb2pDLFVBQVlwakMsRUFBTVksZUFBZSxrQkFLbkVrSixFQUFRcTVCLGFBQ1h4a0MsS0FBSzRqQyxpQkFBaUJ0M0IsS0FBS2pMLEtBSS9CaUcsRUFBU3RGLFVBQVUwaUMsaUJBQW1CLFNBQVNyakMsRUFBT281QixHQUVoRHA1QixFQUFNWSxlQUFlLE1BU04wQixNQUFidEMsRUFBTW9TLEtBQW9CcFMsRUFBTW9TLEtBQU82TyxLQUEyQjNlLE1BQWZ0QyxFQUFNa1IsTUFLM0Rrb0IsRUFBUyxLQUFNcDVCLEVBQU1vUyxJQUFNLEdBQUtwUyxFQUFNa1IsTUFBUWxSLEVBQU1rUixNQUFRLElBSzVEOGQsRUFBR3pXLEtBQUt2WSxFQUFNb2MsTUFBTSxTQUFTbVQsRUFBS2hYLEdBRWhDLElBQUkrcUIsRUFFQS9ULEVBQ0Y2SixFQUFTN0osSUFLWCtULEVBQVcvcUIsRUFBSzJVLE1BQVFsdEIsRUFBTWtSLE1BQVFsUixFQUFNa1IsTUFBUSxHQUNwRGtvQixFQUFTLEtBQU1rSyxPQUtWdGpDLEVBQU1ZLGVBQWUsZUFDOUJ3NEIsRUFBUyxNQUFPcDVCLEVBQU13cUIsUUFBUSxtQkFHckJ4cUIsRUFBTVksZUFBZSxlQUU5QlosRUFBTW00QixHQUFHLFlBQVksU0FBU3ZNLEdBQzVCNXJCLEVBQU11akMsUUFDTm5LLEVBQVMsTUFBT3hOLEVBQVNwQixRQUFRLHNCQUVuQ3hxQixFQUFNd2pDLFVBSU5wSyxFQUFTLG1CQUlibnpCLEVBQVN0RixVQUFVbWlDLGlCQUFtQixTQUFTSCxFQUFPM2lDLEVBQU84SixHQUkzRCxHQUE2QixpQkFBbEJBLEVBQVE0d0IsT0FDakIsT0FBTzV3QixFQUFRNHdCLE9BR2pCLElBZ0JJQSxFQWhCQStJLEVBQXFCOWtDLEtBQUsra0MsdUJBQXVCMWpDLEVBQU84SixHQUN4RDY1QixFQUFjaGxDLEtBQUtpbEMsZ0JBQWdCNWpDLEVBQU84SixHQUUxQys1QixFQUFXLEdBQ1hyWixFQUFXLENBRWIsc0JBQXVCLENBQUMsWUFBYSxTQUFXbVksRUFBUSxLQUFLanVCLE9BQU8rdUIsR0FBc0IsSUFFMUYsZUFBZ0IsR0FBRy91QixPQUFPaXZCLEdBQWUsS0FTM0MsSUFBSyxJQUFJRyxJQUxvQixpQkFBbEJoNkIsRUFBUTR3QixRQUNqQnlILEVBQVMzWCxFQUFTMWdCLEVBQVE0d0IsUUFJWGxRLEVBQ1ZBLEVBQVE1cEIsZUFBZWtqQyxJQUlkLE9BSGRwSixFQUFTbFEsRUFBUXNaLE1BUVp4NkIsTUFBTTNELFFBQVErMEIsS0FDakJBLEVBQVMsQ0FBQ0EsSUFJUkEsRUFBT2wxQixTQUNUcStCLEdBQVlDLEVBQU8sS0FBT3BKLEVBQU8vMUIsS0FBSyxNQUFRc0IsRUFBU3c4QixhQUkzRCxNQUFPLEtBQU85akMsS0FBS29sQyxjQUFnQjk5QixFQUFTdzhCLFdBQWFvQixFQUFXNTlCLEVBQVN3OEIsWUFHL0V4OEIsRUFBU3RGLFVBQVUraUMsdUJBQXlCLFNBQVMxakMsRUFBTzhKLEdBRTFELElBQUk4NEIsRUFDQWEsRUFvQkosTUFqQmdDLGlCQUFyQjM1QixFQUFRazZCLFNBRWpCcEIsRUFBV3htQixFQUFLNm5CLFVBQVVuNkIsRUFBUWs2QixVQUFVNStCLFFBQVEsTUFBTyxLQUNsRDBFLEVBQVE4NEIsVUFBWTVpQyxFQUFNVixNQUFRVSxFQUFNb2MsS0FJakR3bUIsRUFBV3htQixFQUFLOG5CLFNBQVNwNkIsRUFBUTg0QixVQUFZNWlDLEVBQU1WLE1BQVFVLEVBQU1vYyxNQUN4RHBjLEVBQU1vakMsVUFBWXBqQyxFQUFNWSxlQUFlLGlCQUVoRGdpQyxFQUFXeG1CLEVBQUs4bkIsU0FBU2xrQyxFQUFNbWtDLE9BQU9DLGFBQWFob0IsTUFBUSxLQUd6RHdtQixJQUNGYSxFQUFxQixhQUFlYixFQUFXLEtBRzFDYSxHQUdUeDlCLEVBQVN0RixVQUFVaWpDLGdCQUFrQixTQUFTNWpDLEVBQU84SixHQUduRCxJQUFJNjVCLEVBQWM3NUIsRUFBUTY1QixZQTJCMUIsT0F4QktBLEdBQWUzakMsRUFBTVYsT0FDeEJxa0MsRUFBYzFCLEVBQUtvQyxPQUFPcmtDLEVBQU1WLFFBSTdCcWtDLEdBQWUzakMsRUFBTW9jLE9BQ3hCdW5CLEVBQWMxQixFQUFLb0MsT0FBT3JrQyxFQUFNb2MsUUFJN0J1bkIsR0FBZTNqQyxFQUFNb2pDLFVBQVlwakMsRUFBTVksZUFBZSxpQkFDekQraUMsRUFBYzNqQyxFQUFNd3FCLFFBQVEsaUJBSXpCbVosSUFBZ0I3NUIsRUFBUWs2QixXQUFZbDZCLEVBQVE4NEIsV0FDL0NlLEVBQWMxQixFQUFLb0MsT0FBT3Y2QixFQUFRazZCLFVBQVlsNkIsRUFBUTg0QixXQUluRGUsR0FBK0IsaUJBQVQzakMsSUFDekIyakMsRUFBYzE5QixFQUFTcWtCLHNCQUdsQnFaLEdBR1QxOUIsRUFBU3RGLFVBQVVxaUMsaUJBQW1CLFdBQ3BDLE9BQU8sU0FBU3J5QixHQUNkLElBQUlveUIsRUFBUzk4QixFQUFTdzhCLFdBRW1CLElBQXpCOWpDLEtBQUsybEMsU0FBUzkrQixTQUU1QnU5QixHQUFVcGtDLEtBQUs0bEMsaUJBR2pCNXpCLEVBQUtveUIsSUFDTHhpQyxLQUFLNUIsT0FHVHNILEVBQVN0RixVQUFVNGpDLGNBQWdCLFdBQ2pDLE1BQU8sS0FBTzVsQyxLQUFLb2xDLGNBQWdCLEtBQU85OUIsRUFBU3c4QixZQUdyRHg4QixFQUFTdEYsVUFBVTZqQyxXQUFhLFNBQVNDLEdBQ3ZDLElBQUkvSixFQUNBZ0ssRUFBYyxDQUNoQixlQUFnQixpQ0FBbUMvbEMsS0FBS29sQyxlQUcxRCxJQUFLckosS0FBVStKLEVBQ1RBLEVBQVk3akMsZUFBZTg1QixLQUM3QmdLLEVBQVloSyxFQUFPbjFCLGVBQWlCay9CLEVBQVkvSixJQUlwRCxPQUFPZ0ssR0FHVHorQixFQUFTdEYsVUFBVW9qQyxZQUFjLFdBSy9CLE9BSktwbEMsS0FBS2dtQyxXQUNSaG1DLEtBQUtpbUMsb0JBR0FqbUMsS0FBS2dtQyxXQUdkMStCLEVBQVN0RixVQUFVa2tDLFVBQVksV0FLN0IsSUFKQSxJQUFJQyxFQUFhLElBQUkxcEIsT0FBT2tpQixNQUFPLEdBQy9CeUgsRUFBV3BtQyxLQUFLb2xDLGNBR1hobEMsRUFBSSxFQUFHNlQsRUFBTWpVLEtBQUsybEMsU0FBUzkrQixPQUFRekcsRUFBSTZULEVBQUs3VCxJQUNuQixtQkFBckJKLEtBQUsybEMsU0FBU3ZsQyxLQUlyQitsQyxFQURDMXBCLE9BQU8zVixTQUFTOUcsS0FBSzJsQyxTQUFTdmxDLElBQ2xCcWMsT0FBTzFHLE9BQVEsQ0FBQ293QixFQUFZbm1DLEtBQUsybEMsU0FBU3ZsQyxLQUUxQ3FjLE9BQU8xRyxPQUFRLENBQUNvd0IsRUFBWTFwQixPQUFPckcsS0FBS3BXLEtBQUsybEMsU0FBU3ZsQyxNQUlyQyxpQkFBckJKLEtBQUsybEMsU0FBU3ZsQyxJQUFtQkosS0FBSzJsQyxTQUFTdmxDLEdBQUd5NUIsVUFBVyxFQUFHdU0sRUFBU3YvQixPQUFTLEtBQVF1L0IsSUFDbkdELEVBQWExcEIsT0FBTzFHLE9BQVEsQ0FBQ293QixFQUFZMXBCLE9BQU9yRyxLQUFLOU8sRUFBU3c4QixnQkFNcEUsT0FBT3JuQixPQUFPMUcsT0FBUSxDQUFDb3dCLEVBQVkxcEIsT0FBT3JHLEtBQUtwVyxLQUFLNGxDLG9CQUd0RHQrQixFQUFTdEYsVUFBVWlrQyxrQkFBb0IsV0FJckMsSUFEQSxJQUFJRyxFQUFXLDZCQUNOaG1DLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUN0QmdtQyxHQUFZaGlDLEtBQUsrRixNQUFzQixHQUFoQi9GLEtBQUsyVCxVQUFlaFIsU0FBUyxJQUd0RC9HLEtBQUtnbUMsVUFBWUksR0FNbkI5K0IsRUFBU3RGLFVBQVVxa0MsY0FBZ0IsV0FDakMsSUFBSTdCLEVBQWN4a0MsS0FBSzBqQyxnQkFBa0IxakMsS0FBSzJqQyxhQWdCOUMsT0FaSTNqQyxLQUFLMmxDLFNBQVM5K0IsU0FDaEIyOUIsR0FBZXhrQyxLQUFLNGxDLGdCQUFnQi8rQixRQUlqQzdHLEtBQUtzbUMsa0JBSVJ0bUMsS0FBS2trQyxPQUFPLElBQUl6NUIsTUFBTSx1REFHakIrNUIsR0FNVGw5QixFQUFTdEYsVUFBVXNrQyxlQUFpQixXQUNsQyxJQUFJQSxHQUFpQixFQU1yQixPQUpJdG1DLEtBQUs0akMsaUJBQWlCLzhCLFNBQ3hCeS9CLEdBQWlCLEdBR1pBLEdBR1RoL0IsRUFBU3RGLFVBQVV1a0MsVUFBWSxTQUFTL2tCLEdBQ3RDLElBQUlnakIsRUFBY3hrQyxLQUFLMGpDLGdCQUFrQjFqQyxLQUFLMmpDLGFBRTFDM2pDLEtBQUsybEMsU0FBUzkrQixTQUNoQjI5QixHQUFleGtDLEtBQUs0bEMsZ0JBQWdCLytCLFFBR2pDN0csS0FBSzRqQyxpQkFBaUIvOEIsT0FLM0IwOEIsRUFBU2lELFNBQVN4bUMsS0FBSzRqQyxpQkFBa0I1akMsS0FBSzBrQyxrQkFBa0IsU0FBUzlULEVBQUs5aEIsR0FDeEU4aEIsRUFDRnBQLEVBQUdvUCxJQUlMOWhCLEVBQU83SCxTQUFRLFNBQVNKLEdBQ3RCMjlCLEdBQWUzOUIsS0FHakIyYSxFQUFHLEtBQU1nakIsT0FkVHBmLFFBQVFhLFNBQVN6RSxFQUFHNWYsS0FBSzVCLEtBQU0sS0FBTXdrQyxLQWtCekNsOUIsRUFBU3RGLFVBQVV5a0MsT0FBUyxTQUFTMU8sRUFBUXZXLEdBQzNDLElBQUl3TCxFQUNBN2hCLEVBQ0E0Z0IsRUFBVyxDQUFDMWhCLE9BQVEsUUFvRHhCLE1BL0NxQixpQkFBVjB0QixHQUVUQSxFQUFTc0wsRUFBU3RMLEdBQ2xCNXNCLEVBQVVxNEIsRUFBUyxDQUNqQnhlLEtBQU0rUyxFQUFPL1MsS0FDYnZILEtBQU1zYSxFQUFPNEIsU0FDYkwsS0FBTXZCLEVBQU93QixTQUNiZSxTQUFVdkMsRUFBT3VDLFVBQ2hCdk8sS0FLSDVnQixFQUFVcTRCLEVBQVN6TCxFQUFRaE0sSUFFZC9HLE9BQ1g3WixFQUFRNlosS0FBMkIsVUFBcEI3WixFQUFRbXZCLFNBQXVCLElBQU0sSUFLeERudkIsRUFBUTBnQixRQUFVN3JCLEtBQUs2bEMsV0FBVzlOLEVBQU9sTSxTQUl2Q21CLEVBRHNCLFVBQXBCN2hCLEVBQVFtdkIsU0FDQWpDLEVBQU1yTCxRQUFRN2hCLEdBRWRpdEIsRUFBS3BMLFFBQVE3aEIsR0FJekJuTCxLQUFLdW1DLFVBQVUsU0FBUzNWLEVBQUsvcEIsR0FDdkIrcEIsRUFDRjV3QixLQUFLa2tDLE9BQU90VCxJQUtkNUQsRUFBUWlPLFVBQVUsaUJBQWtCcDBCLEdBRXBDN0csS0FBS2tJLEtBQUs4a0IsR0FDTnhMLElBQ0Z3TCxFQUFRd00sR0FBRyxRQUFTaFksR0FDcEJ3TCxFQUFRd00sR0FBRyxXQUFZaFksRUFBRzVmLEtBQUs1QixLQUFNLFVBRXZDNEIsS0FBSzVCLE9BRUFndEIsR0FHVDFsQixFQUFTdEYsVUFBVWtpQyxPQUFTLFNBQVN0VCxHQUM5QjV3QixLQUFLa3RCLFFBQ1JsdEIsS0FBS2t0QixNQUFRMEQsRUFDYjV3QixLQUFLNGtDLFFBQ0w1a0MsS0FBSzQ2QixLQUFLLFFBQVNoSyxLQUl2QnRwQixFQUFTdEYsVUFBVStFLFNBQVcsV0FDNUIsTUFBTyxzQixnQkNqZVQsSUFBSTIvQixFQUFRLEVBQVEsS0FDaEIzTCxFQUFRLEVBQVEsS0FJcEJuN0IsRUFBT0QsUUFVUCxTQUFpQnlSLEVBQU1PLEVBQVVnMUIsRUFBT2xNLEdBR3RDLElBQUk5NEIsRUFBTWdsQyxFQUFpQixVQUFJQSxFQUFpQixVQUFFQSxFQUFNdDZCLE9BQVNzNkIsRUFBTXQ2QixNQUV2RXM2QixFQUFNQyxLQUFLamxDLEdBc0NiLFNBQWdCZ1EsRUFBVWhRLEVBQUtrbEMsRUFBTXBNLEdBRW5DLElBQUlxTSxFQUtGQSxFQUZxQixHQUFuQm4xQixFQUFTOUssT0FFRDhLLEVBQVNrMUIsRUFBTUgsRUFBTWpNLElBS3JCOW9CLEVBQVNrMUIsRUFBTWxsQyxFQUFLK2tDLEVBQU1qTSxJQUd0QyxPQUFPcU0sRUFyRFdDLENBQU9wMUIsRUFBVWhRLEVBQUt5UCxFQUFLelAsSUFBTSxTQUFTdXJCLEVBQU84WixHQUkzRHJsQyxLQUFPZ2xDLEVBQU1DLGNBTVpELEVBQU1DLEtBQUtqbEMsR0FFZHVyQixFQUtGNk4sRUFBTTRMLEdBSU5BLEVBQU1NLFFBQVF0bEMsR0FBT3FsQyxFQUl2QnZNLEVBQVN2TixFQUFPeVosRUFBTU0sZSxnQkM3QzFCLElBQUluaUIsRUFBUSxFQUFRLEtBR3BCbGxCLEVBQU9ELFFBU1AsU0FBZTg2QixHQUViLElBQUl5TSxHQUFVLEVBS2QsT0FGQXBpQixHQUFNLFdBQWFvaUIsR0FBVSxLQUV0QixTQUF3QnRXLEVBQUtsb0IsR0FFOUJ3K0IsRUFFRnpNLEVBQVM3SixFQUFLbG9CLEdBSWRvYyxHQUFNLFdBRUoyVixFQUFTN0osRUFBS2xvQixTLGNDUHRCLFNBQVN5K0IsRUFBTXhsQyxHQUVnQixtQkFBbEIzQixLQUFLNG1DLEtBQUtqbEMsSUFFbkIzQixLQUFLNG1DLEtBQUtqbEMsS0F6QmQvQixFQUFPRCxRQU9QLFNBQWVnbkMsR0FFYjdsQyxPQUFPa08sS0FBSzIzQixFQUFNQyxNQUFNMy9CLFFBQVFrZ0MsRUFBTXZsQyxLQUFLK2tDLElBRzNDQSxFQUFNQyxLQUFPLEssY0NaZmhuQyxFQUFPRCxRQVdQLFNBQWV5UixFQUFNZzJCLEdBRW5CLElBQUlDLEdBQWUxOEIsTUFBTTNELFFBQVFvSyxHQUM3QmsyQixFQUNGLENBQ0VqN0IsTUFBVyxFQUNYazdCLFVBQVdGLEdBQWVELEVBQWF0bUMsT0FBT2tPLEtBQUtvQyxHQUFRLEtBQzNEdzFCLEtBQVcsR0FDWEssUUFBV0ksRUFBYyxHQUFLLEdBQzlCOVksS0FBVzhZLEVBQWN2bUMsT0FBT2tPLEtBQUtvQyxHQUFNdkssT0FBU3VLLEVBQUt2SyxRQUl6RHVnQyxHQUlGRSxFQUFVQyxVQUFVNzNCLEtBQUsyM0IsRUFBY0QsRUFBYSxTQUFTdmlDLEVBQUdpRSxHQUU5RCxPQUFPcytCLEVBQVdoMkIsRUFBS3ZNLEdBQUl1TSxFQUFLdEksTUFJcEMsT0FBT3crQixJLGdCQ25DVCxJQUFJdk0sRUFBUSxFQUFRLEtBQ2hCMkwsRUFBUSxFQUFRLEtBSXBCOW1DLEVBQU9ELFFBUVAsU0FBb0I4NkIsR0FFbEIsSUFBSzM1QixPQUFPa08sS0FBS2hQLEtBQUs0bUMsTUFBTS8vQixPQUUxQixPQUlGN0csS0FBS3FNLE1BQVFyTSxLQUFLdXVCLEtBR2xCd00sRUFBTS82QixNQUdOMG1DLEVBQU1qTSxFQUFOaU0sQ0FBZ0IsS0FBTTFtQyxLQUFLaW5DLFcsZ0JDM0I3QixJQUFJTyxFQUFhLEVBQVEsS0FDckJGLEVBQWEsRUFBUSxLQUNyQkcsRUFBYSxFQUFRLEtBeUR6QixTQUFTQyxFQUFVN2lDLEVBQUdpRSxHQUVwQixPQUFPakUsRUFBSWlFLEdBQUssRUFBSWpFLEVBQUlpRSxFQUFJLEVBQUksRUF2RGxDbEosRUFBT0QsUUFjUCxTQUF1QnlSLEVBQU1PLEVBQVV5MUIsRUFBWTNNLEdBRWpELElBQUlrTSxFQUFRVyxFQUFVbDJCLEVBQU1nMkIsR0F1QjVCLE9BckJBSSxFQUFRcDJCLEVBQU1PLEVBQVVnMUIsR0FBTyxTQUFTZ0IsRUFBZ0J6YSxFQUFPeGtCLEdBRXpEd2tCLEVBRUZ1TixFQUFTdk4sRUFBT3hrQixJQUlsQmkrQixFQUFNdDZCLFFBR0ZzNkIsRUFBTXQ2QixPQUFTczZCLEVBQWlCLFdBQUt2MUIsR0FBTXZLLE9BRTdDMmdDLEVBQVFwMkIsRUFBTU8sRUFBVWcxQixFQUFPZ0IsR0FLakNsTixFQUFTLEtBQU1rTSxFQUFNTSxhQUdoQlEsRUFBVzdsQyxLQUFLK2tDLEVBQU9sTSxJQXJDaEM3NkIsRUFBT0QsUUFBUStuQyxVQUFhQSxFQUM1QjluQyxFQUFPRCxRQUFRaW9DLFdBOERmLFNBQW9CL2lDLEVBQUdpRSxHQUVyQixPQUFRLEVBQUk0K0IsRUFBVTdpQyxFQUFHaUUsSyxzRUNqRTNCLEdBTkEsRUFBUSxLQUVSLEVBQVEsS0FFUixFQUFRLEtBRUoxRyxPQUFPeWxDLGVBQ1QsTUFBTSxJQUFJcDlCLE1BQU0sa0RBRWxCckksT0FBT3lsQyxnQkFBaUIsRUFHeEIsU0FBU2hvQyxFQUFPc0YsRUFBR3hELEVBQUtOLEdBQ3RCOEQsRUFBRXhELElBQVFiLE9BQXNCLGVBQUVxRSxFQUFHeEQsRUFBSyxDQUN4QzZTLFVBQVUsRUFDVkQsY0FBYyxFQUNkbFQsTUFBT0EsSUFJWHhCLEVBQU9vRyxPQUFPakUsVUFBVyxVQUFXLEdBQUc4bEMsVUFDdkNqb0MsRUFBT29HLE9BQU9qRSxVQUFXLFdBQVksR0FBRytsQyxRQUV4QyxnTUFBZ01waUMsTUFBTSxLQUFLc0IsU0FBUSxTQUFVdEYsR0FDM04sR0FBR0EsSUFBUTlCLEVBQU84SyxNQUFPaEosRUFBS2lDLFNBQVNyRCxLQUFLcUIsS0FBSyxHQUFHRCxTLGdCQzFCdEQsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxJQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FD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QWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsWUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixhQUFjLE1BQ2QsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixhQUFjLE1BQ2QsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixjQUFlLE1BQ2YsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixLQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGlCQUFrQixNQUNsQixpQkFBa0IsTUFDbEIsaUJBQWtCLE1BQ2xCLGlCQUFrQixRQUdwQmxnQyxFQUFRMnRCLE1BQVF4c0IsT0FBTysrQixPQUFPLENBQzVCMnhCLEVBQUssV0FHTCxHQUFNLE9BQ04sR0FBTSxXQUNOLEdBQU0sV0FDTixHQUFNLGVBQ04sR0FBTSxXQUNOLEdBQU0sV0FDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sWUFDTixHQUFNLFlBQ04sR0FBTSxhQUNOLEdBQU0sYUFDTixHQUFNLGFBQ04sR0FBTSxhQUVOLEdBQU0sY0FDTixHQUFNLGFBR04sTUFBUSxZQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsWUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBR1IsTUFBUSxhQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxjQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixLQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGlCQUNSLE1BQVEsaUJBQ1IsTUFBUSxpQkFDUixNQUFRLG1CQUdWN3hELEVBQVE0dEIsZUFBaUJ6c0IsT0FBTysrQixPQUFPLENBQ3JDLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUVOLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1B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LFNBQVU2WCxHQUVYQSxHQUFTQSxFQUFNRCxVQUFZQyxFQUFNRCxVQUFZQyxFQUFNRCxTQUFTNVgsTUFBUTZYLEVBQU1ELFNBQVM1WCxLQUFLNlgsTUFDeEYvRSxFQUFPLElBQUkxZCxNQUFNeWlCLEVBQU1ELFNBQVM1WCxLQUFLNlgsUUFFckMvRSxFQUFPK0UsVUE1QnZCLEksRUFBQSxHLEVBQUEsUSwyQkFDQSxRQUNBLFEiLCJmaWxlIjoicGluYXRhLXNkay5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInBpbmF0YS1zZGtcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGluYXRhLXNka1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaW5hdGEtc2RrXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNzQpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgcXVvdCA9IC9cIi9nO1xuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG52YXIgY3JlYXRlSFRNTCA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCBleGVjKSB7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KSwgJ1N0cmluZycsIE8pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIGlzQnVmZmVyID0gcmVxdWlyZSgnaXMtYnVmZmVyJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHRba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiZXhwb3J0IGNvbnN0IGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkucGluYXRhLmNsb3VkJztcbiIsImltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICBpZiAoIXBpbmF0YUFwaUtleSB8fCBwaW5hdGFBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhQXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBhcGkga2V5IGFzIGFuIGFyZ3VtZW50IHdoZW4geW91IHN0YXJ0IHRoaXMgc2NyaXB0Jyk7XG4gICAgfVxuICAgIGlmICghcGluYXRhU2VjcmV0QXBpS2V5IHx8IHBpbmF0YVNlY3JldEFwaUtleSA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwaW5hdGFTZWNyZXRBcGlLZXkgcHJvdmlkZWQhIFBsZWFzZSBwcm92aWRlIHlvdXIgcGluYXRhIHNlY3JldCBhcGkga2V5IGFzIGFuIGFyZ3VtZW50IHdoZW4geW91IHN0YXJ0IHRoaXMgc2NyaXB0Jyk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIb3N0Tm9kZXMoaG9zdE5vZGVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhvc3ROb2RlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdob3N0X25vZGVzIHZhbHVlIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgaG9zdE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFpc0lQRlMucGVlck11bHRpYWRkcihub2RlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBob3N0X25vZGUgYXJyYXkgZW50cnk6ICR7bm9kZX0gaXMgbm90IGEgdmFsaWQgcGVlciBtdWx0aWFkZHJgKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSkge1xuICAgIGlmIChtZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5uYW1lID09PSAnc3RyaW5nJyB8fCBtZXRhZGF0YS5uYW1lIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSBuYW1lIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS5rZXl2YWx1ZXMpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIG1ldGFkYXRhLmtleXZhbHVlcyA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGF0YWRhdGEga2V5dmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaSA9IDA7XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEua2V5dmFsdWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKGkgPiA5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIHRoYW4gMTAga2V5dmFsdWVzIGNhbiBiZSBwcm92aWRlZCBmb3IgbWV0YWRhdGEgZW50cmllcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGlucHV0IGlzIGEgc3RyaW5nLCBhIGJvb2xlYW4sIG9yIGEgbnVtYmVyLCBzbyB3ZSBkb24ndCBnZXQgYW4gb2JqZWN0IHBhc3NlZCBpbiBieSBhY2NpZGVudFxuICAgICAgICAgICAgaWYgKCEodHlwZW9mIGtleVZhbHVlWzFdID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5VmFsdWVbMV0gPT09ICdib29sZWFuJyB8fCAhaXNOYU4oa2V5VmFsdWVbMV0pKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncywgYm9vbGVhbnMsIG9yIG51bWJlcnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob3B0aW9ucy5jaWRWZXJzaW9uICE9IDAgJiYgb3B0aW9ucy5jaWRWZXJzaW9uICE9IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBjaWRWZXJzaW9uJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSAhPT0gdHJ1ZSAmJiBvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cmFwV2l0aERpcmVjdG9yeSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSBvZiB0cnVlIG9yIGZhbHNlJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpKSB7XG4gIHZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xuICB2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG4gIHZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG4gIHZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4gIHZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xuICB2YXIgJGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xuICB2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG4gIHZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbiAgdmFyIHByb3BlcnR5RGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbiAgdmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG4gIHZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xuICB2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xuICB2YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbiAgdmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbiAgdmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbiAgdmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG4gIHZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuICB2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbiAgdmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xuICB2YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xuICB2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG4gIHZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xuICB2YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbiAgdmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xuICB2YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4gIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbiAgdmFyIGNyZWF0ZUFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpO1xuICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuICB2YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xuICB2YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG4gIHZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG4gIHZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbiAgdmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJyk7XG4gIHZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbiAgdmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbiAgdmFyIGRQID0gJERQLmY7XG4gIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgdmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbiAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gIHZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuICB2YXIgU0hBUkVEX0JVRkZFUiA9ICdTaGFyZWQnICsgQVJSQVlfQlVGRkVSO1xuICB2YXIgQllURVNfUEVSX0VMRU1FTlQgPSAnQllURVNfUEVSX0VMRU1FTlQnO1xuICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXlbUFJPVE9UWVBFXTtcbiAgdmFyICRBcnJheUJ1ZmZlciA9ICRidWZmZXIuQXJyYXlCdWZmZXI7XG4gIHZhciAkRGF0YVZpZXcgPSAkYnVmZmVyLkRhdGFWaWV3O1xuICB2YXIgYXJyYXlGb3JFYWNoID0gY3JlYXRlQXJyYXlNZXRob2QoMCk7XG4gIHZhciBhcnJheUZpbHRlciA9IGNyZWF0ZUFycmF5TWV0aG9kKDIpO1xuICB2YXIgYXJyYXlTb21lID0gY3JlYXRlQXJyYXlNZXRob2QoMyk7XG4gIHZhciBhcnJheUV2ZXJ5ID0gY3JlYXRlQXJyYXlNZXRob2QoNCk7XG4gIHZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbiAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gIHZhciBhcnJheUluY2x1ZGVzID0gY3JlYXRlQXJyYXlJbmNsdWRlcyh0cnVlKTtcbiAgdmFyIGFycmF5SW5kZXhPZiA9IGNyZWF0ZUFycmF5SW5jbHVkZXMoZmFsc2UpO1xuICB2YXIgYXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9ycy52YWx1ZXM7XG4gIHZhciBhcnJheUtleXMgPSBBcnJheUl0ZXJhdG9ycy5rZXlzO1xuICB2YXIgYXJyYXlFbnRyaWVzID0gQXJyYXlJdGVyYXRvcnMuZW50cmllcztcbiAgdmFyIGFycmF5TGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mO1xuICB2YXIgYXJyYXlSZWR1Y2UgPSBBcnJheVByb3RvLnJlZHVjZTtcbiAgdmFyIGFycmF5UmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0O1xuICB2YXIgYXJyYXlKb2luID0gQXJyYXlQcm90by5qb2luO1xuICB2YXIgYXJyYXlTb3J0ID0gQXJyYXlQcm90by5zb3J0O1xuICB2YXIgYXJyYXlTbGljZSA9IEFycmF5UHJvdG8uc2xpY2U7XG4gIHZhciBhcnJheVRvU3RyaW5nID0gQXJyYXlQcm90by50b1N0cmluZztcbiAgdmFyIGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBBcnJheVByb3RvLnRvTG9jYWxlU3RyaW5nO1xuICB2YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG4gIHZhciBUQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG4gIHZhciBUWVBFRF9DT05TVFJVQ1RPUiA9IHVpZCgndHlwZWRfY29uc3RydWN0b3InKTtcbiAgdmFyIERFRl9DT05TVFJVQ1RPUiA9IHVpZCgnZGVmX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBBTExfQ09OU1RSVUNUT1JTID0gJHR5cGVkLkNPTlNUUjtcbiAgdmFyIFRZUEVEX0FSUkFZID0gJHR5cGVkLlRZUEVEO1xuICB2YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xuICB2YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xuXG4gIHZhciAkbWFwID0gY3JlYXRlQXJyYXlNZXRob2QoMSwgZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICAgIHJldHVybiBhbGxvY2F0ZShzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGVuZ3RoKTtcbiAgfSk7XG5cbiAgdmFyIExJVFRMRV9FTkRJQU4gPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF0gPT09IDE7XG4gIH0pO1xuXG4gIHZhciBGT1JDRURfU0VUID0gISFVaW50OEFycmF5ICYmICEhVWludDhBcnJheVtQUk9UT1RZUEVdLnNldCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IFVpbnQ4QXJyYXkoMSkuc2V0KHt9KTtcbiAgfSk7XG5cbiAgdmFyIHRvT2Zmc2V0ID0gZnVuY3Rpb24gKGl0LCBCWVRFUykge1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoaXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfTtcblxuICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaXQpICYmIFRZUEVEX0FSUkFZIGluIGl0KSByZXR1cm4gaXQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSEnKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiAoQywgbGVuZ3RoKSB7XG4gICAgaWYgKCEoaXNPYmplY3QoQykgJiYgVFlQRURfQ09OU1RSVUNUT1IgaW4gQykpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IhJyk7XG4gICAgfSByZXR1cm4gbmV3IEMobGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgc3BlY2llc0Zyb21MaXN0ID0gZnVuY3Rpb24gKE8sIGxpc3QpIHtcbiAgICByZXR1cm4gZnJvbUxpc3Qoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxpc3QpO1xuICB9O1xuXG4gIHZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKEMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSwgaW50ZXJuYWwpIHtcbiAgICBkUChpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZFtpbnRlcm5hbF07IH0gfSk7XG4gIH07XG5cbiAgdmFyICRmcm9tID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBmbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGksIGxlbmd0aCwgdmFsdWVzLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICFpc0FycmF5SXRlcihpdGVyRm4pKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHZhbHVlcyA9IFtdLCBpID0gMDsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpKyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgICB9IE8gPSB2YWx1ZXM7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nICYmIGFMZW4gPiAyKSBtYXBmbiA9IGN0eChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCksIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gbWFwcGluZyA/IG1hcGZuKE9baV0sIGkpIDogT1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgJG9mID0gZnVuY3Rpb24gb2YoLyogLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbiAgdmFyIFRPX0xPQ0FMRV9CVUcgPSAhIVVpbnQ4QXJyYXkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IFVpbnQ4QXJyYXkoMSkpOyB9KTtcblxuICB2YXIgJHRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9Mb2NhbGVTdHJpbmcuYXBwbHkoVE9fTE9DQUxFX0JVRyA/IGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSkgOiB2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICB2YXIgcHJvdG8gPSB7XG4gICAgY29weVdpdGhpbjogZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlDb3B5V2l0aGluLmNhbGwodmFsaWRhdGUodGhpcyksIHRhcmdldCwgc3RhcnQsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RXZlcnkodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUZpbGwuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheUZpbHRlcih2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbixcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKTtcbiAgICB9LFxuICAgIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kSW5kZXgodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgYXJyYXlGb3JFYWNoKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluZGV4T2YodmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmNsdWRlcyh2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUxhc3RJbmRleE9mLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gJG1hcCh2YWxpZGF0ZSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlUmlnaHQuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlKHRoYXQpLmxlbmd0aDtcbiAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKGxlbmd0aCAvIDIpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHdoaWxlIChpbmRleCA8IG1pZGRsZSkge1xuICAgICAgICB2YWx1ZSA9IHRoYXRbaW5kZXhdO1xuICAgICAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgICAgIHRoYXRbbGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9LFxuICAgIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheVNvbWUodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb3J0LmNhbGwodmFsaWRhdGUodGhpcyksIGNvbXBhcmVmbik7XG4gICAgfSxcbiAgICBzdWJhcnJheTogZnVuY3Rpb24gc3ViYXJyYXkoYmVnaW4sIGVuZCkge1xuICAgICAgdmFyIE8gPSB2YWxpZGF0ZSh0aGlzKTtcbiAgICAgIHZhciBsZW5ndGggPSBPLmxlbmd0aDtcbiAgICAgIHZhciAkYmVnaW4gPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbmd0aCk7XG4gICAgICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSkoXG4gICAgICAgIE8uYnVmZmVyLFxuICAgICAgICBPLmJ5dGVPZmZzZXQgKyAkYmVnaW4gKiBPLkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgICAgICB0b0xlbmd0aCgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpKSAtICRiZWdpbilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciAkc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcyksIHN0YXJ0LCBlbmQpKTtcbiAgfTtcblxuICB2YXIgJHNldCA9IGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzWzFdLCAxKTtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIHNyYyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHNyYy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG4gIH07XG5cbiAgdmFyICRpdGVyYXRvcnMgPSB7XG4gICAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgIHJldHVybiBhcnJheUVudHJpZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5VmFsdWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgaXNUQUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRhcmdldClcbiAgICAgICYmIHRhcmdldFtUWVBFRF9BUlJBWV1cbiAgICAgICYmIHR5cGVvZiBrZXkgIT0gJ3N5bWJvbCdcbiAgICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAgICYmIFN0cmluZygra2V5KSA9PSBTdHJpbmcoa2V5KTtcbiAgfTtcbiAgdmFyICRnZXREZXNjID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICA/IHByb3BlcnR5RGVzYygyLCB0YXJnZXRba2V5XSlcbiAgICAgIDogZ09QRCh0YXJnZXQsIGtleSk7XG4gIH07XG4gIHZhciAkc2V0RGVzYyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgaWYgKGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICAmJiBpc09iamVjdChkZXNjKVxuICAgICAgJiYgaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgICAmJiAhaGFzKGRlc2MsICdnZXQnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnc2V0JylcbiAgICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgICAmJiAhZGVzYy5jb25maWd1cmFibGVcbiAgICAgICYmICghaGFzKGRlc2MsICd3cml0YWJsZScpIHx8IGRlc2Mud3JpdGFibGUpXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnZW51bWVyYWJsZScpIHx8IGRlc2MuZW51bWVyYWJsZSlcbiAgICApIHtcbiAgICAgIHRhcmdldFtrZXldID0gZGVzYy52YWx1ZTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSByZXR1cm4gZFAodGFyZ2V0LCBrZXksIGRlc2MpO1xuICB9O1xuXG4gIGlmICghQUxMX0NPTlNUUlVDVE9SUykge1xuICAgICRHT1BELmYgPSAkZ2V0RGVzYztcbiAgICAkRFAuZiA9ICRzZXREZXNjO1xuICB9XG5cbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhQUxMX0NPTlNUUlVDVE9SUywgJ09iamVjdCcsIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXREZXNjLFxuICAgIGRlZmluZVByb3BlcnR5OiAkc2V0RGVzY1xuICB9KTtcblxuICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvU3RyaW5nLmNhbGwoe30pOyB9KSkge1xuICAgIGFycmF5VG9TdHJpbmcgPSBhcnJheVRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQgPSByZWRlZmluZUFsbCh7fSwgcHJvdG8pO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsICRpdGVyYXRvcnMpO1xuICBoaWRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgSVRFUkFUT1IsICRpdGVyYXRvcnMudmFsdWVzKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCB7XG4gICAgc2xpY2U6ICRzbGljZSxcbiAgICBzZXQ6ICRzZXQsXG4gICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHsgLyogbm9vcCAqLyB9LFxuICAgIHRvU3RyaW5nOiBhcnJheVRvU3RyaW5nLFxuICAgIHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmdcbiAgfSk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdidWZmZXInLCAnYicpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZU9mZnNldCcsICdvJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlTGVuZ3RoJywgJ2wnKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2xlbmd0aCcsICdlJyk7XG4gIGRQKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgVEFHLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW1RZUEVEX0FSUkFZXTsgfVxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBCWVRFUywgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIENMQU1QRUQgPSAhIUNMQU1QRUQ7XG4gICAgdmFyIE5BTUUgPSBLRVkgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSc7XG4gICAgdmFyIEdFVFRFUiA9ICdnZXQnICsgS0VZO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIEtFWTtcbiAgICB2YXIgVHlwZWRBcnJheSA9IGdsb2JhbFtOQU1FXTtcbiAgICB2YXIgQmFzZSA9IFR5cGVkQXJyYXkgfHwge307XG4gICAgdmFyIFRBQyA9IFR5cGVkQXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheSk7XG4gICAgdmFyIEZPUkNFRCA9ICFUeXBlZEFycmF5IHx8ICEkdHlwZWQuQUJWO1xuICAgIHZhciBPID0ge307XG4gICAgdmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5ICYmIFR5cGVkQXJyYXlbUFJPVE9UWVBFXTtcbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICByZXR1cm4gZGF0YS52W0dFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgaWYgKENMQU1QRUQpIHZhbHVlID0gKHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4ZmYgPyAweGZmIDogdmFsdWUgJiAweGZmO1xuICAgICAgZGF0YS52W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgdmFsdWUsIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIGRQKHRoYXQsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXIodGhpcywgaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUsICdfZCcpO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoLCBrbGFzcztcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgIGxlbmd0aCA9IHRvSW5kZXgoZGF0YSk7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyAkQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgb2Zmc2V0ID0gdG9PZmZzZXQoJG9mZnNldCwgQllURVMpO1xuICAgICAgICAgIHZhciAkbGVuID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmICgkbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICgkbGVuICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSAkbGVuIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB0b0xlbmd0aCgkbGVuZ3RoKSAqIEJZVEVTO1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggKyBvZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGhpZGUodGhhdCwgJ19kJywge1xuICAgICAgICAgIGI6IGJ1ZmZlcixcbiAgICAgICAgICBvOiBvZmZzZXQsXG4gICAgICAgICAgbDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBlOiBsZW5ndGgsXG4gICAgICAgICAgdjogbmV3ICREYXRhVmlldyhidWZmZXIpXG4gICAgICAgIH0pO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGFkZEVsZW1lbnQodGhhdCwgaW5kZXgrKyk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBjcmVhdGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkKTtcbiAgICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgVHlwZWRBcnJheSk7XG4gICAgfSBlbHNlIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheSgxKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0pIHx8ICEkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KG51bGwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KGl0ZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0sIHRydWUpKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUpO1xuICAgICAgICB2YXIga2xhc3M7XG4gICAgICAgIC8vIGB3c2AgbW9kdWxlIGJ1ZywgdGVtcG9yYXJpbHkgcmVtb3ZlIHZhbGlkYXRpb24gbGVuZ3RoIGZvciBVaW50OEFycmF5XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvNjQ1XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgQmFzZSh0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogJG9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpKVxuICAgICAgICAgICAgICA6IG5ldyBCYXNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBhcnJheUZvckVhY2goVEFDICE9PSBGdW5jdGlvbi5wcm90b3R5cGUgPyBnT1BOKEJhc2UpLmNvbmNhdChnT1BOKFRBQykpIDogZ09QTihCYXNlKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheSkpIGhpZGUoVHlwZWRBcnJheSwga2V5LCBCYXNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBUeXBlZEFycmF5UHJvdG90eXBlO1xuICAgICAgaWYgKCFMSUJSQVJZKSBUeXBlZEFycmF5UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHlwZWRBcnJheTtcbiAgICB9XG4gICAgdmFyICRuYXRpdmVJdGVyYXRvciA9IFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdO1xuICAgIHZhciBDT1JSRUNUX0lURVJfTkFNRSA9ICEhJG5hdGl2ZUl0ZXJhdG9yXG4gICAgICAmJiAoJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gJ3ZhbHVlcycgfHwgJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gdW5kZWZpbmVkKTtcbiAgICB2YXIgJGl0ZXJhdG9yID0gJGl0ZXJhdG9ycy52YWx1ZXM7XG4gICAgaGlkZShUeXBlZEFycmF5LCBUWVBFRF9DT05TVFJVQ1RPUiwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBUWVBFRF9BUlJBWSwgTkFNRSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIERFRl9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheSk7XG5cbiAgICBpZiAoQ0xBTVBFRCA/IG5ldyBUeXBlZEFycmF5KDEpW1RBR10gIT0gTkFNRSA6ICEoVEFHIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSB7XG4gICAgICBkUChUeXBlZEFycmF5UHJvdG90eXBlLCBUQUcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOQU1FOyB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPW05BTUVdID0gVHlwZWRBcnJheTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKFR5cGVkQXJyYXkgIT0gQmFzZSksIE8pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMsIE5BTUUsIHtcbiAgICAgIEJZVEVTX1BFUl9FTEVNRU5UOiBCWVRFU1xuICAgIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IEJhc2Uub2YuY2FsbChUeXBlZEFycmF5LCAxKTsgfSksIE5BTUUsIHtcbiAgICAgIGZyb206ICRmcm9tLFxuICAgICAgb2Y6ICRvZlxuICAgIH0pO1xuXG4gICAgaWYgKCEoQllURVNfUEVSX0VMRU1FTlQgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QLCBOQU1FLCBwcm90byk7XG5cbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRURfU0VULCBOQU1FLCB7IHNldDogJHNldCB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIUNPUlJFQ1RfSVRFUl9OQU1FLCBOQU1FLCAkaXRlcmF0b3JzKTtcblxuICAgIGlmICghTElCUkFSWSAmJiBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nICE9IGFycmF5VG9TdHJpbmcpIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgPSBhcnJheVRvU3RyaW5nO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgxKS5zbGljZSgpO1xuICAgIH0pLCBOQU1FLCB7IHNsaWNlOiAkc2xpY2UgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gWzEsIDJdLnRvTG9jYWxlU3RyaW5nKCkgIT0gbmV3IFR5cGVkQXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsIDJdKTtcbiAgICB9KSksIE5BTUUsIHsgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZyB9KTtcblxuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IENPUlJFQ1RfSVRFUl9OQU1FID8gJG5hdGl2ZUl0ZXJhdG9yIDogJGl0ZXJhdG9yO1xuICAgIGlmICghTElCUkFSWSAmJiAhQ09SUkVDVF9JVEVSX05BTUUpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgSVRFUkFUT1IsICRpdGVyYXRvcik7XG4gIH07XG59IGVsc2UgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGVuY29kZTogcmVxdWlyZSgnLi9lbmNvZGUuanMnKVxuICAsIGRlY29kZTogcmVxdWlyZSgnLi9kZWNvZGUuanMnKVxuICAsIGVuY29kaW5nTGVuZ3RoOiByZXF1aXJlKCcuL2xlbmd0aC5qcycpXG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2U1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgbXVsdGloYXNoID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuY29uc3QgbXVsdGliYXNlID0gcmVxdWlyZSgnbXVsdGliYXNlJylcbmNvbnN0IE11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5jb25zdCBtYWZtdCA9IHJlcXVpcmUoJ21hZm10JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuXG5jb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvW14vXStcXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IHBhdGhQYXR0ZXJuID0gL15cXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IGRlZmF1bHRQcm90b2NvbE1hdGNoID0gMVxuY29uc3QgZGVmYXVsdEhhc2hNYXRoID0gNFxuXG5jb25zdCBmcWRuUGF0dGVybiA9IC9eaHR0cHM/OlxcL1xcLyhbXi9dKylcXC4oaXAoPzpmfG4pcylcXC5bXi9dKy9cbmNvbnN0IGZxZG5IYXNoTWF0Y2ggPSAxXG5jb25zdCBmcWRuUHJvdG9jb2xNYXRjaCA9IDJcblxuZnVuY3Rpb24gaXNNdWx0aWhhc2ggKGhhc2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGhhc2gpXG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShmb3JtYXR0ZWQpKVxuICAgIG11bHRpaGFzaC5kZWNvZGUoYnVmZmVyKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYmFzZSAoaGFzaCkge1xuICB0cnkge1xuICAgIHJldHVybiBtdWx0aWJhc2UuaXNFbmNvZGVkKGhhc2gpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NJRCAoaGFzaCkge1xuICB0cnkge1xuICAgIG5ldyBDSUQoaGFzaCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aWFkZHIgKGlucHV0KSB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZVxuICBpZiAoTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGlucHV0KSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICBuZXcgTXVsdGlhZGRyKGlucHV0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BlZXJNdWx0aWFkZHIgKGlucHV0KSB7XG4gIHJldHVybiBpc011bHRpYWRkcihpbnB1dCkgJiYgbWFmbXQuSVBGUy5tYXRjaGVzKGlucHV0KVxufVxuXG5mdW5jdGlvbiBpc0lwZnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCA9IGRlZmF1bHRIYXNoTWF0aCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGZvcm1hdHRlZC5tYXRjaChwYXR0ZXJuKVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWF0Y2hbcHJvdG9jb2xNYXRjaF0gIT09ICdpcGZzJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG5cbiAgaWYgKGhhc2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gaXNDSUQoaGFzaClcbn1cblxuZnVuY3Rpb24gaXNJcG5zIChpbnB1dCwgcGF0dGVybiwgcHJvdG9jb2xNYXRjaCA9IGRlZmF1bHRQcm90b2NvbE1hdGNoLCBoYXNoTWF0Y2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGlucHV0KVxuICBpZiAoIWZvcm1hdHRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwbnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoaGFzaE1hdGNoICYmIHBhdHRlcm4gPT09IGZxZG5QYXR0ZXJuKSB7XG4gICAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG4gICAgLy8gd2hlbiBkb2luZyBjaGVja3MgZm9yIHN1YmRvbWFpbiBjb250ZXh0XG4gICAgLy8gZW5zdXJlIGhhc2ggaXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIChicm93c2VycyBmb3JjZS1sb3dlcmNhc2UgYXV0aG9yaXR5IGNvbXBvdGVudCBhbnl3YXkpXG4gICAgaGFzaCA9IGhhc2gudG9Mb3dlckNhc2UoKVxuICAgIHJldHVybiBpc0NJRChoYXNoKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcgKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAoaW5wdXQpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpbnB1dCkpIHtcbiAgICByZXR1cm4gYmFzZTU4LmVuY29kZShpbnB1dClcbiAgfVxuXG4gIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBpcGZzU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcGZzKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuY29uc3QgaXBuc1N1YmRvbWFpbiA9ICh1cmwpID0+IGlzSXBucyh1cmwsIGZxZG5QYXR0ZXJuLCBmcWRuUHJvdG9jb2xNYXRjaCwgZnFkbkhhc2hNYXRjaClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpaGFzaDogaXNNdWx0aWhhc2gsXG4gIG11bHRpYWRkcjogaXNNdWx0aWFkZHIsXG4gIHBlZXJNdWx0aWFkZHI6IGlzUGVlck11bHRpYWRkcixcbiAgY2lkOiBpc0NJRCxcbiAgYmFzZTMyY2lkOiAoY2lkKSA9PiAoaXNNdWx0aWJhc2UoY2lkKSA9PT0gJ2Jhc2UzMicgJiYgaXNDSUQoY2lkKSksXG4gIGlwZnNTdWJkb21haW46IGlwZnNTdWJkb21haW4sXG4gIGlwbnNTdWJkb21haW46IGlwbnNTdWJkb21haW4sXG4gIHN1YmRvbWFpbjogKHVybCkgPT4gKGlwZnNTdWJkb21haW4odXJsKSB8fCBpcG5zU3ViZG9tYWluKHVybCkpLFxuICBzdWJkb21haW5QYXR0ZXJuOiBmcWRuUGF0dGVybixcbiAgaXBmc1VybDogKHVybCkgPT4gaXNJcGZzKHVybCwgdXJsUGF0dGVybiksXG4gIGlwbnNVcmw6ICh1cmwpID0+IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pLFxuICB1cmw6ICh1cmwpID0+IChpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnModXJsLCB1cmxQYXR0ZXJuKSksXG4gIHVybFBhdHRlcm46IHVybFBhdHRlcm4sXG4gIGlwZnNQYXRoOiAocGF0aCkgPT4gaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSxcbiAgaXBuc1BhdGg6IChwYXRoKSA9PiBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBwYXRoOiAocGF0aCkgPT4gKGlzSXBmcyhwYXRoLCBwYXRoUGF0dGVybikgfHwgaXNJcG5zKHBhdGgsIHBhdGhQYXR0ZXJuKSksXG4gIHBhdGhQYXR0ZXJuOiBwYXRoUGF0dGVybixcbiAgdXJsT3JQYXRoOiAoeCkgPT4gKGlzSXBmcyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgdXJsUGF0dGVybikgfHwgaXNJcGZzKHgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgcGF0aFBhdHRlcm4pKSxcbiAgY2lkUGF0aDogcGF0aCA9PiBpc1N0cmluZyhwYXRoKSAmJiAhaXNDSUQocGF0aCkgJiYgaXNJcGZzKGAvaXBmcy8ke3BhdGh9YCwgcGF0aFBhdHRlcm4pXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dGlsXCIpOyIsInZhciBiYXNleCA9IHJlcXVpcmUoJ2Jhc2UteCcpXG52YXIgQUxQSEFCRVQgPSAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eidcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNleChBTFBIQUJFVClcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBJZ25vcmUgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwiLyoqXG4gKiBNdWx0aWhhc2ggaW1wbGVtZW50YXRpb24gaW4gSmF2YVNjcmlwdC5cbiAqXG4gKiBAbW9kdWxlIG11bHRpaGFzaFxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuXG5jb25zdCBjcyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuZXhwb3J0cy5uYW1lcyA9IGNzLm5hbWVzXG5leHBvcnRzLmNvZGVzID0gY3MuY29kZXNcbmV4cG9ydHMuZGVmYXVsdExlbmd0aHMgPSBjcy5kZWZhdWx0TGVuZ3Roc1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGhleCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0hleFN0cmluZyA9IGZ1bmN0aW9uIHRvSGV4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gaGFzaC50b1N0cmluZygnaGV4Jylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBoZXggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uIGZyb21IZXhTdHJpbmcgKGhhc2gpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2gsICdoZXgnKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGJhc2U1OCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0I1OFN0cmluZyA9IGZ1bmN0aW9uIHRvQjU4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoaGFzaClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBiYXNlNTggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmZyb21CNThTdHJpbmcgPSBmdW5jdGlvbiBmcm9tQjU4U3RyaW5nIChoYXNoKSB7XG4gIGxldCBlbmNvZGVkID0gaGFzaFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgZW5jb2RlZCA9IGhhc2gudG9TdHJpbmcoKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJzNTguZGVjb2RlKGVuY29kZWQpKVxufVxuXG4vKipcbiAqIERlY29kZSBhIGhhc2ggZnJvbSB0aGUgZ2l2ZW4gbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm5zIHt7Y29kZTogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyLCBkaWdlc3Q6IEJ1ZmZlcn19IHJlc3VsdFxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmKSB7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihidWYpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKGJ1Zi5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggdG9vIHNob3J0LiBtdXN0IGJlID4gMyBieXRlcy4nKVxuICB9XG5cbiAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAoIWV4cG9ydHMuaXNWYWxpZENvZGUoY29kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCB1bmtub3duIGZ1bmN0aW9uIGNvZGU6IDB4JHtjb2RlLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGNvbnN0IGxlbiA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAobGVuIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIGludmFsaWQgbGVuZ3RoOiAweCR7bGVuLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBsZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCBsZW5ndGggaW5jb25zaXN0ZW50OiAweCR7YnVmLnRvU3RyaW5nKCdoZXgnKX1gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBjb2RlLFxuICAgIG5hbWU6IGNzLmNvZGVzW2NvZGVdLFxuICAgIGxlbmd0aDogbGVuLFxuICAgIGRpZ2VzdDogYnVmXG4gIH1cbn1cblxuLyoqXG4gKiAgRW5jb2RlIGEgaGFzaCBkaWdlc3QgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGNvZGUuXG4gKlxuICogPiAqKk5vdGU6KiogdGhlIGxlbmd0aCBpcyBkZXJpdmVkIGZyb20gdGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGlnZXN0XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKGRpZ2VzdCwgY29kZSwgbGVuZ3RoKSB7XG4gIGlmICghZGlnZXN0IHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIGVuY29kZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gYXJnczogZGlnZXN0LCBjb2RlJylcbiAgfVxuXG4gIC8vIGVuc3VyZSBpdCdzIGEgaGFzaGZ1bmN0aW9uIGNvZGUuXG4gIGNvbnN0IGhhc2hmbiA9IGV4cG9ydHMuY29lcmNlQ29kZShjb2RlKVxuXG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihkaWdlc3QpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAobGVuZ3RoID09IG51bGwpIHtcbiAgICBsZW5ndGggPSBkaWdlc3QubGVuZ3RoXG4gIH1cblxuICBpZiAobGVuZ3RoICYmIGRpZ2VzdC5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IGxlbmd0aCBzaG91bGQgYmUgZXF1YWwgdG8gc3BlY2lmaWVkIGxlbmd0aC4nKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoaGFzaGZuKSksXG4gICAgQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShsZW5ndGgpKSxcbiAgICBkaWdlc3RcbiAgXSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGhhc2ggZnVuY3Rpb24gbmFtZSBpbnRvIHRoZSBtYXRjaGluZyBjb2RlLlxuICogSWYgcGFzc2VkIGEgbnVtYmVyIGl0IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgaWYgaXQncyBhIHZhbGlkIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuY29lcmNlQ29kZSA9IGZ1bmN0aW9uIGNvZXJjZUNvZGUgKG5hbWUpIHtcbiAgbGV0IGNvZGUgPSBuYW1lXG5cbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGlmIChjcy5uYW1lc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZ1bmN0aW9uIG5hbWVkOiAke25hbWV9YClcbiAgICB9XG4gICAgY29kZSA9IGNzLm5hbWVzW25hbWVdXG4gIH1cblxuICBpZiAodHlwZW9mIGNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIYXNoIGZ1bmN0aW9uIGNvZGUgc2hvdWxkIGJlIGEgbnVtYmVyLiBHb3Q6ICR7Y29kZX1gKVxuICB9XG5cbiAgaWYgKGNzLmNvZGVzW2NvZGVdID09PSB1bmRlZmluZWQgJiYgIWV4cG9ydHMuaXNBcHBDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZnVuY3Rpb24gY29kZTogJHtjb2RlfWApXG4gIH1cblxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIENoZWNrcyB3ZXRoZXIgYSBjb2RlIGlzIHBhcnQgb2YgdGhlIGFwcCByYW5nZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc0FwcENvZGUgPSBmdW5jdGlvbiBhcHBDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID4gMCAmJiBjb2RlIDwgMHgxMFxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbXVsdGloYXNoIGNvZGUgaXMgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRDb2RlID0gZnVuY3Rpb24gdmFsaWRDb2RlIChjb2RlKSB7XG4gIGlmIChleHBvcnRzLmlzQXBwQ29kZShjb2RlKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoY3MuY29kZXNbY29kZV0pIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBpcyBhIHZhbGlkIG11bHRpaGFzaC4gVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlIChtdWx0aWhhc2gpIHtcbiAgZXhwb3J0cy5kZWNvZGUobXVsdGloYXNoKSAvLyB0aHJvd3MgaWYgYmFkLlxufVxuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlXG5cbi8qKlxuICogUmV0dXJucyBhIHByZWZpeCBmcm9tIGEgdmFsaWQgbXVsdGloYXNoLiBUaHJvd3MgYW4gZXJyb3IgaWYgaXQgaXMgbm90IHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZXhwb3J0cy5wcmVmaXggPSBmdW5jdGlvbiBwcmVmaXggKG11bHRpaGFzaCkge1xuICB2YWxpZGF0ZShtdWx0aWhhc2gpXG5cbiAgcmV0dXJuIG11bHRpaGFzaC5zbGljZSgwLCAyKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIFByb3RvY29scyAocHJvdG8pIHtcbiAgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnbnVtYmVyJykge1xuICAgIGlmIChQcm90b2NvbHMuY29kZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLmNvZGVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBjb2RlOiAnICsgcHJvdG8pXG4gIH0gZWxzZSBpZiAodHlwZW9mIChwcm90bykgPT09ICdzdHJpbmcnIHx8IHByb3RvIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKFByb3RvY29scy5uYW1lc1twcm90b10pIHtcbiAgICAgIHJldHVybiBQcm90b2NvbHMubmFtZXNbcHJvdG9dXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm90b2NvbCB3aXRoIG5hbWU6ICcgKyBwcm90bylcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcm90b2NvbCBpZCB0eXBlOiAnICsgcHJvdG8pXG59XG5cbmNvbnN0IFYgPSAtMVxuUHJvdG9jb2xzLmxlbmd0aFByZWZpeGVkVmFyU2l6ZSA9IFZcblByb3RvY29scy5WID0gVlxuXG5Qcm90b2NvbHMudGFibGUgPSBbXG4gIFs0LCAzMiwgJ2lwNCddLFxuICBbNiwgMTYsICd0Y3AnXSxcbiAgWzMzLCAxNiwgJ2RjY3AnXSxcbiAgWzQxLCAxMjgsICdpcDYnXSxcbiAgWzQyLCBWLCAnaXA2em9uZSddLFxuICBbNTMsIFYsICdkbnMnLCAncmVzb2x2YWJsZSddLFxuICBbNTQsIFYsICdkbnM0JywgJ3Jlc29sdmFibGUnXSxcbiAgWzU1LCBWLCAnZG5zNicsICdyZXNvbHZhYmxlJ10sXG4gIFs1NiwgViwgJ2Ruc2FkZHInLCAncmVzb2x2YWJsZSddLFxuICBbMTMyLCAxNiwgJ3NjdHAnXSxcbiAgWzI3MywgMTYsICd1ZHAnXSxcbiAgWzI3NSwgMCwgJ3AycC13ZWJydGMtc3RhciddLFxuICBbMjc2LCAwLCAncDJwLXdlYnJ0Yy1kaXJlY3QnXSxcbiAgWzI3NywgMCwgJ3AycC1zdGFyZHVzdCddLFxuICBbMjkwLCAwLCAncDJwLWNpcmN1aXQnXSxcbiAgWzMwMSwgMCwgJ3VkdCddLFxuICBbMzAyLCAwLCAndXRwJ10sXG4gIFs0MDAsIFYsICd1bml4JywgZmFsc2UsICdwYXRoJ10sXG4gIC8vIGBpcGZzYCBpcyBhZGRlZCBiZWZvcmUgYHAycGAgZm9yIGxlZ2FjeSBzdXBwb3J0LlxuICAvLyBBbGwgdGV4dCByZXByZXNlbnRhdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGBwMnBgLCBidXQgYGlwZnNgIHdpbGxcbiAgLy8gc3RpbGwgYmUgc3VwcG9ydGVkXG4gIFs0MjEsIFYsICdpcGZzJ10sXG4gIC8vIGBwMnBgIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgNDIxLCBhbmQgaXMgbm93IHRoZSBkZWZhdWx0XG4gIFs0MjEsIFYsICdwMnAnXSxcbiAgWzQ0MywgMCwgJ2h0dHBzJ10sXG4gIFs0NDQsIDk2LCAnb25pb24nXSxcbiAgWzQ0NSwgMjk2LCAnb25pb24zJ10sXG4gIFs0NDYsIFYsICdnYXJsaWM2NCddLFxuICBbNDYwLCAwLCAncXVpYyddLFxuICBbNDc3LCAwLCAnd3MnXSxcbiAgWzQ3OCwgMCwgJ3dzcyddLFxuICBbNDc5LCAwLCAncDJwLXdlYnNvY2tldC1zdGFyJ10sXG4gIFs0ODAsIDAsICdodHRwJ11cbl1cblxuUHJvdG9jb2xzLm5hbWVzID0ge31cblByb3RvY29scy5jb2RlcyA9IHt9XG5cbi8vIHBvcHVsYXRlIHRhYmxlc1xuUHJvdG9jb2xzLnRhYmxlLm1hcChyb3cgPT4ge1xuICBjb25zdCBwcm90byA9IHAuYXBwbHkobnVsbCwgcm93KVxuICBQcm90b2NvbHMuY29kZXNbcHJvdG8uY29kZV0gPSBwcm90b1xuICBQcm90b2NvbHMubmFtZXNbcHJvdG8ubmFtZV0gPSBwcm90b1xufSlcblxuUHJvdG9jb2xzLm9iamVjdCA9IHBcblxuZnVuY3Rpb24gcCAoY29kZSwgc2l6ZSwgbmFtZSwgcmVzb2x2YWJsZSwgcGF0aCkge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlc29sdmFibGU6IEJvb2xlYW4ocmVzb2x2YWJsZSksXG4gICAgcGF0aDogQm9vbGVhbihwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvdG9jb2xzXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbWggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuY29uc3QgY29kZWNzID0gcmVxdWlyZSgnbXVsdGljb2RlYy9zcmMvYmFzZS10YWJsZS5qc29uJylcbmNvbnN0IENJRFV0aWwgPSByZXF1aXJlKCcuL2NpZC11dGlsJylcbmNvbnN0IHdpdGhJcyA9IHJlcXVpcmUoJ2NsYXNzLWlzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJpYWxpemVkQ0lEXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNcbiAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKi9cblxuLyoqXG4gKiBUZXN0IGlmIHRoZSBnaXZlbiBpbnB1dCBpcyBhIENJRC5cbiAqIEBmdW5jdGlvbiBpc0NJRFxuICogQG1lbWJlcm9mIENJRFxuICogQHN0YXRpY1xuICogQHBhcmFtIHthbnl9IG90aGVyXG4gKiBAcmV0dXJucyB7Ym9vbH1cbiAqL1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIENJRCBgPG1iYXNlPjx2ZXJzaW9uPjxtY29kZWM+PG1oYXNoPmBcbiAqICwgYXMgZGVmaW5lZCBpbiBbaXBsZC9jaWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvY2lkKS5cbiAqIEBjbGFzcyBDSURcbiAqL1xuY2xhc3MgQ0lEIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDSUQuXG4gICAqXG4gICAqIFRoZSBhbGdvcml0aG0gZm9yIGFyZ3VtZW50IGlucHV0IGlzIHJvdWdobHk6XG4gICAqIGBgYFxuICAgKiBpZiAoY2lkKVxuICAgKiAgIC0+IGNyZWF0ZSBhIGNvcHlcbiAgICogZWxzZSBpZiAoc3RyKVxuICAgKiAgIGlmICgxc3QgY2hhciBpcyBvbiBtdWx0aWJhc2UgdGFibGUpIC0+IENJRCBTdHJpbmdcbiAgICogICBlbHNlIC0+IGJzNTggZW5jb2RlZCBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoQnVmZmVyKVxuICAgKiAgIGlmICgxc3QgYnl0ZSBpcyAwIG9yIDEpIC0+IENJRFxuICAgKiAgIGVsc2UgLT4gbXVsdGloYXNoXG4gICAqIGVsc2UgaWYgKE51bWJlcilcbiAgICogICAtPiBjb25zdHJ1Y3QgQ0lEIGJ5IHBhcnRzXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8Q0lEfSB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZWNdXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBbbXVsdGloYXNoXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW211bHRpYmFzZU5hbWVdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBDSUQoPHZlcnNpb24+LCA8Y29kZWM+LCA8bXVsdGloYXNoPiwgPG11bHRpYmFzZU5hbWU+KVxuICAgKiBuZXcgQ0lEKDxjaWRTdHI+KVxuICAgKiBuZXcgQ0lEKDxjaWQuYnVmZmVyPilcbiAgICogbmV3IENJRCg8bXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8YnM1OCBlbmNvZGVkIG11bHRpaGFzaD4pXG4gICAqIG5ldyBDSUQoPGNpZD4pXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgY29kZWMsIG11bHRpaGFzaCwgbXVsdGliYXNlTmFtZSkge1xuICAgIGlmIChfQ0lELmlzQ0lEKHZlcnNpb24pKSB7XG4gICAgICAvLyB2ZXJzaW9uIGlzIGFuIGV4aXNpbmcgQ0lEIGluc3RhbmNlXG4gICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICB0aGlzLnZlcnNpb24gPSBjaWQudmVyc2lvblxuICAgICAgdGhpcy5jb2RlYyA9IGNpZC5jb2RlY1xuICAgICAgdGhpcy5tdWx0aWhhc2ggPSBCdWZmZXIuZnJvbShjaWQubXVsdGloYXNoKVxuICAgICAgLy8gRGVmYXVsdCBndWFyZCBmb3Igd2hlbiBhIENJRCA8IDAuNyBpcyBwYXNzZWQgd2l0aCBubyBtdWx0aWJhc2VOYW1lXG4gICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBjaWQubXVsdGliYXNlTmFtZSB8fCAoY2lkLnZlcnNpb24gPT09IDAgPyAnYmFzZTU4YnRjJyA6ICdiYXNlMzInKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZS5nLiAnYmFzZTMyJyBvciBmYWxzZVxuICAgICAgY29uc3QgYmFzZU5hbWUgPSBtdWx0aWJhc2UuaXNFbmNvZGVkKHZlcnNpb24pXG4gICAgICBpZiAoYmFzZU5hbWUpIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIENJRCBTdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSwgc28gdjFcbiAgICAgICAgY29uc3QgY2lkID0gbXVsdGliYXNlLmRlY29kZSh2ZXJzaW9uKVxuICAgICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZUludChjaWQuc2xpY2UoMCwgMSkudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBiYXNlTmFtZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIGJhc2U1OGJ0YyBzdHJpbmcgbXVsdGloYXNoLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG1oLmZyb21CNThTdHJpbmcodmVyc2lvbilcbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiB2ZXJzaW9uIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZlcnNpb24pKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGUgPSB2ZXJzaW9uLnNsaWNlKDAsIDEpXG4gICAgICBjb25zdCB2ID0gcGFyc2VJbnQoZmlyc3RCeXRlLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG4gICAgICBpZiAodiA9PT0gMSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIGJ1ZmZlclxuICAgICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTMyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIHJhdyBtdWx0aWhhc2ggYnVmZmVyLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBhc3NlbWJsZSB0aGUgQ0lEIGZyb20gdGhlIHBhcmFtZXRlcnNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvblxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmNvZGVjID0gY29kZWNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWhhc2ggPSBtdWx0aWhhc2hcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gbXVsdGliYXNlTmFtZSB8fCAodmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG5cbiAgICBDSUQudmFsaWRhdGVDSUQodGhpcylcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQ0lEIGFzIGEgYEJ1ZmZlcmBcbiAgICpcbiAgICogQHJldHVybiB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICpcbiAgICogQG1lbWJlck9mIENJRFxuICAgKi9cbiAgZ2V0IGJ1ZmZlciAoKSB7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuX2J1ZmZlclxuXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDApIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5tdWx0aWhhc2hcbiAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKCcwMScsICdoZXgnKSxcbiAgICAgICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICAgICAgdGhpcy5tdWx0aWhhc2hcbiAgICAgICAgXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgICB9XG5cbiAgICAgIC8vIENhY2hlIHRoaXMgYnVmZmVyIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSByZWNyZWF0ZWRcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2J1ZmZlcicsIHsgdmFsdWU6IGJ1ZmZlciB9KVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZWZpeCBvZiB0aGUgQ0lELlxuICAgKlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGdldCBwcmVmaXggKCkge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKGAwJHt0aGlzLnZlcnNpb259YCwgJ2hleCcpLFxuICAgICAgbXVsdGljb2RlYy5nZXRDb2RlVmFyaW50KHRoaXMuY29kZWMpLFxuICAgICAgbWgucHJlZml4KHRoaXMubXVsdGloYXNoKVxuICAgIF0pXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBhIENJRCBvZiB2ZXJzaW9uIGAwYC5cbiAgICpcbiAgICogQHJldHVybnMge0NJRH1cbiAgICovXG4gIHRvVjAgKCkge1xuICAgIGlmICh0aGlzLmNvZGVjICE9PSAnZGFnLXBiJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBhIG5vbiBkYWctcGIgQ0lEIHRvIENJRHYwJylcbiAgICB9XG5cbiAgICBjb25zdCB7IG5hbWUsIGxlbmd0aCB9ID0gbWguZGVjb2RlKHRoaXMubXVsdGloYXNoKVxuXG4gICAgaWYgKG5hbWUgIT09ICdzaGEyLTI1NicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIHNoYTItMjU2IG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGlmIChsZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IG5vbiAzMiBieXRlIG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgX0NJRCgwLCB0aGlzLmNvZGVjLCB0aGlzLm11bHRpaGFzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDFgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMSAoKSB7XG4gICAgcmV0dXJuIG5ldyBfQ0lEKDEsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSB0aGUgQ0lEIGludG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZT10aGlzLm11bHRpYmFzZU5hbWVdIC0gQmFzZSBlbmNvZGluZyB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0b0Jhc2VFbmNvZGVkU3RyaW5nIChiYXNlID0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKHRoaXMuc3RyaW5nICYmIGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nXG4gICAgfVxuICAgIGxldCBzdHIgPSBudWxsXG4gICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgaWYgKGJhc2UgIT09ICdiYXNlNThidGMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHN1cHBvcnRlZCB3aXRoIENJRHYwLCB0byBzdXBwb3J0IGRpZmZlcmVudCBiYXNlcywgcGxlYXNlIG1pZ3JhdGUgdGhlIGluc3RhbmNlIGRvIENJRHYxLCB5b3UgY2FuIGRvIHRoYXQgdGhyb3VnaCBjaWQudG9WMSgpJylcbiAgICAgIH1cbiAgICAgIHN0ciA9IG1oLnRvQjU4U3RyaW5nKHRoaXMubXVsdGloYXNoKVxuICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICBzdHIgPSBtdWx0aWJhc2UuZW5jb2RlKGJhc2UsIHRoaXMuYnVmZmVyKS50b1N0cmluZygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgfVxuICAgIGlmIChiYXNlID09PSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICAgIC8vIGNhY2hlIHRoZSBzdHJpbmcgdmFsdWVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RyaW5nJywgeyB2YWx1ZTogc3RyIH0pXG4gICAgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIHRvU3RyaW5nIChiYXNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9CYXNlRW5jb2RlZFN0cmluZyhiYXNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBhIHBsYWluIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge1NlcmlhbGl6ZWRDSUR9XG4gICAqL1xuICB0b0pTT04gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlYzogdGhpcy5jb2RlYyxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIGhhc2g6IHRoaXMubXVsdGloYXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZXF1YWxpdHkgd2l0aCBhbm90aGVyIENJRC5cbiAgICpcbiAgICogQHBhcmFtIHtDSUR9IG90aGVyXG4gICAqIEByZXR1cm5zIHtib29sfVxuICAgKi9cbiAgZXF1YWxzIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmNvZGVjID09PSBvdGhlci5jb2RlYyAmJlxuICAgICAgdGhpcy52ZXJzaW9uID09PSBvdGhlci52ZXJzaW9uICYmXG4gICAgICB0aGlzLm11bHRpaGFzaC5lcXVhbHMob3RoZXIubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogVGhyb3dzIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG90aGVyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQ0lEIChvdGhlcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gQ0lEVXRpbC5jaGVja0NJRENvbXBvbmVudHMob3RoZXIpXG4gICAgaWYgKGVycm9yTXNnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IF9DSUQgPSB3aXRoSXMoQ0lELCB7XG4gIGNsYXNzTmFtZTogJ0NJRCcsXG4gIHN5bWJvbE5hbWU6ICdAaXBsZC9qcy1jaWQvQ0lEJ1xufSlcblxuX0NJRC5jb2RlY3MgPSBjb2RlY3NcblxubW9kdWxlLmV4cG9ydHMgPSBfQ0lEXG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cblxuLyoqXG4gKiBSZWFkIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5c30gZGlycyAmIGZpbGVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucmVhZGRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHZhciBkaXJzID0gW10sIGZpbGVzID0gW11cbiAgZGlycy5wdXNoKGRwYXRoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IobnVsbCwgZGlycywgZmlsZXMpXG4gICAgZnMucmVhZGRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVyciwgX2ZpbGVzKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZ2V0c3RhdChkaXJzW2luZGV4XSwgX2ZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcblxuICAvKipcbiAgICogR2V0IHN0YXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdG9yeSBwYXRoXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0c3RhdCAoZHBhdGgsIF9maWxlcywgY2IpIHtcbiAgICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT0gX2ZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICAgIHZhciBmcGF0aCA9IHBhdGguam9pbihkcGF0aCwgX2ZpbGVzW2luZGV4XSlcbiAgICAgIGZzLnN0YXQoZnBhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgZGlycy5wdXNoKGZwYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVzLnB1c2goZnBhdGgpXG4gICAgICAgIH1cbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KDApKVxuICB9XG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciByZWFkZGlyciA9IHJlcXVpcmUoJy4vcmVhZGRpcnInKS5yZWFkZGlyclxuXG5cbi8qKlxuICogUmVtb3ZlIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHJlYWRkaXJyKGRwYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgZXhwb3J0cy5ybWZpbGVzKGZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZXhwb3J0cy5ybWRpcnMoZGlycywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGZpbGVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1maWxlcyA9IGZ1bmN0aW9uIChmaWxlcywgY2IpIHtcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBmaWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMudW5saW5rKGZpbGVzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFJlbW92ZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkaXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZGlycyA9IGZ1bmN0aW9uIChkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoZGVzYylcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5ybWRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhXG4gKiBAcGFyYW0ge1N0cmluZ30gYlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gIGlmIChhID4gYikgcmV0dXJuIC0xXG4gIGlmIChhIDwgYikgcmV0dXJuICAxXG4gIHJldHVybiAwXG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIENvcHkgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJyID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgY2IpIHtcbiAgcmVhZGRpcnIoc3BhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBleHBvcnRzLmNwZGlycyhzcGF0aCwgdHBhdGgsIGRpcnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBleHBvcnRzLmNwZmlsZXMoc3BhdGgsIHRwYXRoLCBmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBjYigpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGRpcnMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIHZhciBycGF0aCA9IHBhdGgucmVsYXRpdmUoc3BhdGgsIGRpcnNbaW5kZXhdKVxuICAgIHJwYXRoID0gcGF0aC5qb2luKHRwYXRoLCBycGF0aClcbiAgICBmcy5leGlzdHMocnBhdGgsIGZ1bmN0aW9uIChleGlzdHMpIHtcbiAgICAgIGlmIChleGlzdHMpIHJldHVybiBsb29wKCsraW5kZXgpXG4gICAgICBmcy5ta2RpcihycGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZmlsZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BmaWxlcyA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGZpbGVzLCBjYikge1xuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5yZWFkRmlsZShmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBmaWxlc1tpbmRleF0pXG4gICAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgICBmcy53cml0ZUZpbGUocnBhdGgsIGRhdGEsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogTWF0aC5sb2coMSArIHgpO1xufTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBFUFNJTE9OID0gcG93KDIsIC01Mik7XG52YXIgRVBTSUxPTjMyID0gcG93KDIsIC0yMyk7XG52YXIgTUFYMzIgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKTtcbnZhciBNSU4zMiA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uIChuKSB7XG4gIHJldHVybiBuICsgMSAvIEVQU0lMT04gLSAxIC8gRVBTSUxPTjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBNYXRoLmFicyh4KTtcbiAgdmFyICRzaWduID0gc2lnbih4KTtcbiAgdmFyIGEsIHJlc3VsdDtcbiAgaWYgKCRhYnMgPCBNSU4zMikgcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgYSA9ICgxICsgRVBTSUxPTjMyIC8gRVBTSUxPTikgKiAkYWJzO1xuICByZXN1bHQgPSBhIC0gKGEgLSAkYWJzKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIC8vIE5vdGU6IHN0YXR1cyBpcyBub3QgZXhwb3NlZCBieSBYRG9tYWluUmVxdWVzdFxuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG5cbi8vIFJGQzcyMzHCpzQuMi4xOiBPZiB0aGUgcmVxdWVzdCBtZXRob2RzIGRlZmluZWQgYnkgdGhpcyBzcGVjaWZpY2F0aW9uLFxuLy8gdGhlIEdFVCwgSEVBRCwgT1BUSU9OUywgYW5kIFRSQUNFIG1ldGhvZHMgYXJlIGRlZmluZWQgdG8gYmUgc2FmZS5cbnZhciBTQUZFX01FVEhPRFMgPSB7IEdFVDogdHJ1ZSwgSEVBRDogdHJ1ZSwgT1BUSU9OUzogdHJ1ZSwgVFJBQ0U6IHRydWUgfTtcblxuLy8gQ3JlYXRlIGhhbmRsZXJzIHRoYXQgcGFzcyBldmVudHMgZnJvbSBuYXRpdmUgcmVxdWVzdHNcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbltcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB0aGlzLl9yZWRpcmVjdGFibGUuZW1pdChldmVudCwgYXJnKTtcbiAgfTtcbn0pO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChyZXNwb25zZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInJlc3BvbnNlXCIsIHJlc3BvbnNlQ2FsbGJhY2spO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gcmVzcG9uc2VzIG9mIG5hdGl2ZSByZXF1ZXN0c1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBzZWxmLl9wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9O1xuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBWYWxpZGF0ZSBpbnB1dCBhbmQgc2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKCEodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgKFwibGVuZ3RoXCIgaW4gZGF0YSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXRcIikpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGFuZCBlbmRcbiAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gIHRoaXMud3JpdGUoZGF0YSB8fCBcIlwiLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgIGN1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gIH0pO1xufTtcblxuLy8gU2V0cyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xufTtcblxuLy8gQ2xlYXJzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWxldGUgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVIZWFkZXIobmFtZSk7XG59O1xuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImFib3J0XCIsIFwiZmx1c2hIZWFkZXJzXCIsIFwiZ2V0SGVhZGVyXCIsXG4gIFwic2V0Tm9EZWxheVwiLCBcInNldFNvY2tldEtlZXBBbGl2ZVwiLCBcInNldFRpbWVvdXRcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cbi8vIEV4ZWN1dGVzIHRoZSBuZXh0IG5hdGl2ZSByZXF1ZXN0IChpbml0aWFsIG9yIHJlZGlyZWN0KVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3BlcmZvcm1SZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBMb2FkIHRoZSBuYXRpdmUgcHJvdG9jb2xcbiAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5wcm90b2NvbDtcbiAgdmFyIG5hdGl2ZVByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5uYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdO1xuICBpZiAoIW5hdGl2ZVByb3RvY29sKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHNwZWNpZmllZCwgdXNlIHRoZSBhZ2VudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90b2NvbFxuICAvLyAoSFRUUCBhbmQgSFRUUFMgdXNlIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMpXG4gIGlmICh0aGlzLl9vcHRpb25zLmFnZW50cykge1xuICAgIHZhciBzY2hlbWUgPSBwcm90b2NvbC5zdWJzdHIoMCwgcHJvdG9jb2wubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5fb3B0aW9ucy5hZ2VudCA9IHRoaXMuX29wdGlvbnMuYWdlbnRzW3NjaGVtZV07XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5hdGl2ZSByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3QgPVxuICAgICAgICBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0KHRoaXMuX29wdGlvbnMsIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UpO1xuICB0aGlzLl9jdXJyZW50VXJsID0gdXJsLmZvcm1hdCh0aGlzLl9vcHRpb25zKTtcblxuICAvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnNcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgaW4gZXZlbnRIYW5kbGVycykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICByZXF1ZXN0Lm9uKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZC5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dCgpIHtcbiAgICAgIGlmIChpIDwgYnVmZmVycy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICB9XG4gICAgfSgpKTtcbiAgfVxufTtcblxuLy8gUHJvY2Vzc2VzIGEgcmVzcG9uc2UgZnJvbSB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Byb2Nlc3NSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAvLyBTdG9yZSB0aGUgcmVkaXJlY3RlZCByZXNwb25zZVxuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAobG9jYXRpb24gJiYgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgIT09IGZhbHNlICYmXG4gICAgICByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDwgNDAwKSB7XG4gICAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgICAvLyBpbiBjeWNsaWNhbCByZWRpcmVjdGlvbnMgKGkuZS4sIFwiaW5maW5pdGVcIiByZWRpcmVjdGlvbiBsb29wcykuXG4gICAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IoXCJNYXggcmVkaXJlY3RzIGV4Y2VlZGVkLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gICAgLy8gY2FyZSBmb3IgbWV0aG9kcyBub3Qga25vd24gdG8gYmUgc2FmZSBb4oCmXSxcbiAgICAvLyBzaW5jZSB0aGUgdXNlciBtaWdodCBub3Qgd2lzaCB0byByZWRpcmVjdCBhbiB1bnNhZmUgcmVxdWVzdC5cbiAgICAvLyBSRkM3MjMxwqc2LjQuNzogVGhlIDMwNyAoVGVtcG9yYXJ5IFJlZGlyZWN0KSBzdGF0dXMgY29kZSBpbmRpY2F0ZXNcbiAgICAvLyB0aGF0IHRoZSB0YXJnZXQgcmVzb3VyY2UgcmVzaWRlcyB0ZW1wb3JhcmlseSB1bmRlciBhIGRpZmZlcmVudCBVUklcbiAgICAvLyBhbmQgdGhlIHVzZXIgYWdlbnQgTVVTVCBOT1QgY2hhbmdlIHRoZSByZXF1ZXN0IG1ldGhvZFxuICAgIC8vIGlmIGl0IHBlcmZvcm1zIGFuIGF1dG9tYXRpYyByZWRpcmVjdGlvbiB0byB0aGF0IFVSSS5cbiAgICB2YXIgaGVhZGVyO1xuICAgIHZhciBoZWFkZXJzID0gdGhpcy5fb3B0aW9ucy5oZWFkZXJzO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAzMDcgJiYgISh0aGlzLl9vcHRpb25zLm1ldGhvZCBpbiBTQUZFX01FVEhPRFMpKSB7XG4gICAgICB0aGlzLl9vcHRpb25zLm1ldGhvZCA9IFwiR0VUXCI7XG4gICAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoL15jb250ZW50LS9pLnRlc3QoaGVhZGVyKSkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wIHRoZSBIb3N0IGhlYWRlciwgYXMgdGhlIHJlZGlyZWN0IG1pZ2h0IGxlYWQgdG8gYSBkaWZmZXJlbnQgaG9zdFxuICAgIGlmICghdGhpcy5faXNSZWRpcmVjdCkge1xuICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoL15ob3N0JC9pLnRlc3QoaGVhZGVyKSkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgICB2YXIgcmVkaXJlY3RVcmwgPSB1cmwucmVzb2x2ZSh0aGlzLl9jdXJyZW50VXJsLCBsb2NhdGlvbik7XG4gICAgZGVidWcoXCJyZWRpcmVjdGluZyB0b1wiLCByZWRpcmVjdFVybCk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB1cmwucGFyc2UocmVkaXJlY3RVcmwpKTtcbiAgICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xuXG4gICAgLy8gRGlzY2FyZCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXNwb25zZSB0byBhdm9pZCB3YWl0aW5nIGZvciBkYXRhXG4gICAgcmVzcG9uc2UuZGVzdHJveSgpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIFRoZSByZXNwb25zZSBpcyBub3QgYSByZWRpcmVjdDsgcmV0dXJuIGl0IGFzLWlzXG4gICAgcmVzcG9uc2UucmVzcG9uc2VVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xuICAgIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0cztcbiAgICB0aGlzLmVtaXQoXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICB9XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG9wdGlvbnMgPSB1cmwucGFyc2Uob3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMubWF4UmVkaXJlY3RzID0gZXhwb3J0cy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICBtYXhSZWRpcmVjdHM6IGV4cG9ydHMubWF4UmVkaXJlY3RzLFxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zLm5hdGl2ZVByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scztcbiAgICAgIGFzc2VydC5lcXVhbChvcHRpb25zLnByb3RvY29sLCBwcm90b2NvbCwgXCJwcm90b2NvbCBtaXNtYXRjaFwiKTtcbiAgICAgIGRlYnVnKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICB3cmFwcGVkUHJvdG9jb2wuZ2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IHdyYXBwZWRQcm90b2NvbC5yZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWdbJ2RlZmF1bHQnXSA9IGNyZWF0ZURlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogQWN0aXZlIGBkZWJ1Z2AgaW5zdGFuY2VzLlxuICovXG5leHBvcnRzLmluc3RhbmNlcyA9IFtdO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuICovXG5cbmV4cG9ydHMubmFtZXMgPSBbXTtcbmV4cG9ydHMuc2tpcHMgPSBbXTtcblxuLyoqXG4gKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gKlxuICogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycyA9IHt9O1xuXG4vKipcbiAqIFNlbGVjdCBhIGNvbG9yLlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG4gIHZhciBoYXNoID0gMCwgaTtcblxuICBmb3IgKGkgaW4gbmFtZXNwYWNlKSB7XG4gICAgaGFzaCAgPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBleHBvcnRzLmNvbG9ycy5sZW5ndGhdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblxuICB2YXIgcHJldlRpbWU7XG5cbiAgZnVuY3Rpb24gZGVidWcoKSB7XG4gICAgLy8gZGlzYWJsZWQ/XG4gICAgaWYgKCFkZWJ1Zy5lbmFibGVkKSByZXR1cm47XG5cbiAgICB2YXIgc2VsZiA9IGRlYnVnO1xuXG4gICAgLy8gc2V0IGBkaWZmYCB0aW1lc3RhbXBcbiAgICB2YXIgY3VyciA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgc2VsZi5kaWZmID0gbXM7XG4gICAgc2VsZi5wcmV2ID0gcHJldlRpbWU7XG4gICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICBwcmV2VGltZSA9IGN1cnI7XG5cbiAgICAvLyB0dXJuIHRoZSBgYXJndW1lbnRzYCBpbnRvIGEgcHJvcGVyIEFycmF5XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGFyZ3NbMF0gPSBleHBvcnRzLmNvZXJjZShhcmdzWzBdKTtcblxuICAgIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGFyZ3NbMF0pIHtcbiAgICAgIC8vIGFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG4gICAgICBhcmdzLnVuc2hpZnQoJyVPJyk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCBmdW5jdGlvbihtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAvLyBpZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG4gICAgICBpZiAobWF0Y2ggPT09ICclJScpIHJldHVybiBtYXRjaDtcbiAgICAgIGluZGV4Kys7XG4gICAgICB2YXIgZm9ybWF0dGVyID0gZXhwb3J0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZvcm1hdHRlcikge1xuICAgICAgICB2YXIgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuICAgICAgICAvLyBub3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG4gICAgZXhwb3J0cy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cbiAgICB2YXIgbG9nRm4gPSBkZWJ1Zy5sb2cgfHwgZXhwb3J0cy5sb2cgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICBsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgZGVidWcuZW5hYmxlZCA9IGV4cG9ydHMuZW5hYmxlZChuYW1lc3BhY2UpO1xuICBkZWJ1Zy51c2VDb2xvcnMgPSBleHBvcnRzLnVzZUNvbG9ycygpO1xuICBkZWJ1Zy5jb2xvciA9IHNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG4gIGRlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG4gIC8vIGVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5pbml0KSB7XG4gICAgZXhwb3J0cy5pbml0KGRlYnVnKTtcbiAgfVxuXG4gIGV4cG9ydHMuaW5zdGFuY2VzLnB1c2goZGVidWcpO1xuXG4gIHJldHVybiBkZWJ1Zztcbn1cblxuZnVuY3Rpb24gZGVzdHJveSAoKSB7XG4gIHZhciBpbmRleCA9IGV4cG9ydHMuaW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBleHBvcnRzLmluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcbiAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcbiAgZXhwb3J0cy5zYXZlKG5hbWVzcGFjZXMpO1xuXG4gIGV4cG9ydHMubmFtZXMgPSBbXTtcbiAgZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4gIHZhciBpO1xuICB2YXIgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuICB2YXIgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICghc3BsaXRbaV0pIGNvbnRpbnVlOyAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgIG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgIGV4cG9ydHMuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgZXhwb3J0cy5pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBleHBvcnRzLmluc3RhbmNlc1tpXTtcbiAgICBpbnN0YW5jZS5lbmFibGVkID0gZXhwb3J0cy5lbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gIGV4cG9ydHMuZW5hYmxlKCcnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuICBpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaSwgbGVuO1xuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMubmFtZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYHZhbGAuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gKiBAcmV0dXJuIHtNaXhlZH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuICByZXR1cm4gdmFsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3NcIik7IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0J1xuLy8gYmFzZS14IGVuY29kaW5nIC8gZGVjb2Rpbmdcbi8vIENvcHlyaWdodCAoYykgMjAxOCBiYXNlLXggY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBUaGUgQml0Y29pbiBDb3JlIGRldmVsb3BlcnMgKGJhc2U1OC5jcHApXG4vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSB0aGUgYWNjb21wYW55aW5nXG4vLyBmaWxlIExJQ0VOU0Ugb3IgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAuXG4vLyBAdHMtaWdub3JlXG52YXIgX0J1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5mdW5jdGlvbiBiYXNlIChBTFBIQUJFVCkge1xuICBpZiAoQUxQSEFCRVQubGVuZ3RoID49IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHBoYWJldCB0b28gbG9uZycpIH1cbiAgdmFyIEJBU0VfTUFQID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfTUFQLmxlbmd0aDsgaisrKSB7XG4gICAgQkFTRV9NQVBbal0gPSAyNTVcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IEFMUEhBQkVULmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHggPSBBTFBIQUJFVC5jaGFyQXQoaSlcbiAgICB2YXIgeGMgPSB4LmNoYXJDb2RlQXQoMClcbiAgICBpZiAoQkFTRV9NQVBbeGNdICE9PSAyNTUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBhbWJpZ3VvdXMnKSB9XG4gICAgQkFTRV9NQVBbeGNdID0gaVxuICB9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcbiAgdmFyIEZBQ1RPUiA9IE1hdGgubG9nKEJBU0UpIC8gTWF0aC5sb2coMjU2KSAvLyBsb2coQkFTRSkgLyBsb2coMjU2KSwgcm91bmRlZCB1cFxuICB2YXIgaUZBQ1RPUiA9IE1hdGgubG9nKDI1NikgLyBNYXRoLmxvZyhCQVNFKSAvLyBsb2coMjU2KSAvIGxvZyhCQVNFKSwgcm91bmRlZCB1cFxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkgeyBzb3VyY2UgPSBfQnVmZmVyLmZyb20oc291cmNlKSB9XG4gICAgaWYgKCFfQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQnVmZmVyJykgfVxuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJyB9XG4gICAgICAgIC8vIFNraXAgJiBjb3VudCBsZWFkaW5nIHplcm9lcy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgdmFyIHBiZWdpbiA9IDBcbiAgICB2YXIgcGVuZCA9IHNvdXJjZS5sZW5ndGhcbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kICYmIHNvdXJjZVtwYmVnaW5dID09PSAwKSB7XG4gICAgICBwYmVnaW4rK1xuICAgICAgemVyb2VzKytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2U1OCByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgocGVuZCAtIHBiZWdpbikgKiBpRkFDVE9SICsgMSkgPj4+IDBcbiAgICB2YXIgYjU4ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnl0ZXMuXG4gICAgd2hpbGUgKHBiZWdpbiAhPT0gcGVuZCkge1xuICAgICAgdmFyIGNhcnJ5ID0gc291cmNlW3BiZWdpbl1cbiAgICAgICAgICAgIC8vIEFwcGx5IFwiYjU4ID0gYjU4ICogMjU2ICsgY2hcIi5cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQxID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQxICE9PSAtMSk7IGl0MS0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKDI1NiAqIGI1OFtpdDFdKSA+Pj4gMFxuICAgICAgICBiNThbaXQxXSA9IChjYXJyeSAlIEJBU0UpID4+PiAwXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gQkFTRSkgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcGJlZ2luKytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYmFzZTU4IHJlc3VsdC5cbiAgICB2YXIgaXQyID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDIgIT09IHNpemUgJiYgYjU4W2l0Ml0gPT09IDApIHtcbiAgICAgIGl0MisrXG4gICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHJlc3VsdCBpbnRvIGEgc3RyaW5nLlxuICAgIHZhciBzdHIgPSBMRUFERVIucmVwZWF0KHplcm9lcylcbiAgICBmb3IgKDsgaXQyIDwgc2l6ZTsgKytpdDIpIHsgc3RyICs9IEFMUEhBQkVULmNoYXJBdChiNThbaXQyXSkgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuICBmdW5jdGlvbiBkZWNvZGVVbnNhZmUgKHNvdXJjZSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBTdHJpbmcnKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuIF9CdWZmZXIuYWxsb2MoMCkgfVxuICAgIHZhciBwc3ogPSAwXG4gICAgICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMuXG4gICAgaWYgKHNvdXJjZVtwc3pdID09PSAnICcpIHsgcmV0dXJuIH1cbiAgICAgICAgLy8gU2tpcCBhbmQgY291bnQgbGVhZGluZyAnMSdzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB3aGlsZSAoc291cmNlW3Bzel0gPT09IExFQURFUikge1xuICAgICAgemVyb2VzKytcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW4gYmlnLWVuZGlhbiBiYXNlMjU2IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKCgoc291cmNlLmxlbmd0aCAtIHBzeikgKiBGQUNUT1IpICsgMSkgPj4+IDAgLy8gbG9nKDU4KSAvIGxvZygyNTYpLCByb3VuZGVkIHVwLlxuICAgIHZhciBiMjU2ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgY2hhcmFjdGVycy5cbiAgICB3aGlsZSAoc291cmNlW3Bzel0pIHtcbiAgICAgICAgICAgIC8vIERlY29kZSBjaGFyYWN0ZXJcbiAgICAgIHZhciBjYXJyeSA9IEJBU0VfTUFQW3NvdXJjZS5jaGFyQ29kZUF0KHBzeildXG4gICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlclxuICAgICAgaWYgKGNhcnJ5ID09PSAyNTUpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQzID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQzICE9PSAtMSk7IGl0My0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKEJBU0UgKiBiMjU2W2l0M10pID4+PiAwXG4gICAgICAgIGIyNTZbaXQzXSA9IChjYXJyeSAlIDI1NikgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyAyNTYpID4+PiAwXG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdOb24temVybyBjYXJyeScpIH1cbiAgICAgIGxlbmd0aCA9IGlcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBTa2lwIHRyYWlsaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzIGluIGIyNTYuXG4gICAgdmFyIGl0NCA9IHNpemUgLSBsZW5ndGhcbiAgICB3aGlsZSAoaXQ0ICE9PSBzaXplICYmIGIyNTZbaXQ0XSA9PT0gMCkge1xuICAgICAgaXQ0KytcbiAgICB9XG4gICAgdmFyIHZjaCA9IF9CdWZmZXIuYWxsb2NVbnNhZmUoemVyb2VzICsgKHNpemUgLSBpdDQpKVxuICAgIHZjaC5maWxsKDB4MDAsIDAsIHplcm9lcylcbiAgICB2YXIgaiA9IHplcm9lc1xuICAgIHdoaWxlIChpdDQgIT09IHNpemUpIHtcbiAgICAgIHZjaFtqKytdID0gYjI1NltpdDQrK11cbiAgICB9XG4gICAgcmV0dXJuIHZjaFxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGRlY29kZVVuc2FmZShzdHJpbmcpXG4gICAgaWYgKGJ1ZmZlcikgeyByZXR1cm4gYnVmZmVyIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGVVbnNhZmU6IGRlY29kZVVuc2FmZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJ1ZmZlclwiKTsiLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbbXVsdGliYXNlXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYmFzZSkgc3BlY2lmaWNhdGlvbi5cbiAqIEBtb2R1bGUgTXVsdGliYXNlXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IG11bHRpYmFzZVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGVcbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlXG5leHBvcnRzLmlzRW5jb2RlZCA9IGlzRW5jb2RlZFxuZXhwb3J0cy5uYW1lcyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoY29uc3RhbnRzLm5hbWVzKSlcbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5jb2RlcykpXG5cbmNvbnN0IGVyck5vdFN1cHBvcnRlZCA9IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2RpbmcnKVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBidWZmZXIgd2l0aCB0aGUgbXVsdGliYXNlIHZhcmludCtjb2RlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZU9yQ29kZSAtIFRoZSBtdWx0aWJhc2UgbmFtZSBvciBjb2RlIG51bWJlci5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWYgLSBUaGUgZGF0YSB0byBiZSBwcmVmaXhlZCB3aXRoIG11bHRpYmFzZS5cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIG11bHRpYmFzZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGlmICghYnVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyBhbiBlbmNvZGVkIGJ1ZmZlcicpXG4gIH1cbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZU9yQ29kZSlcbiAgY29uc3QgY29kZUJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UuY29kZSlcblxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG4gIHZhbGlkRW5jb2RlKG5hbWUsIGJ1ZilcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2NvZGVCdWYsIGJ1Zl0pXG59XG5cbi8qKlxuICogRW5jb2RlIGRhdGEgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2UgYW5kIGFkZCB0aGUgbXVsdGliYXNlIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IG5hbWUgPSBiYXNlLm5hbWVcblxuICByZXR1cm4gbXVsdGliYXNlKG5hbWUsIEJ1ZmZlci5mcm9tKGJhc2UuZW5jb2RlKGJ1ZikpKVxufVxuXG4vKipcbiAqIFRha2VzIGEgYnVmZmVyIG9yIHN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlIGhlYWRlciwgZGVjb2RlcyBpdCBhbmRcbiAqIHJldHVybnMgdGhlIGRlY29kZWQgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge0J1ZmZlcn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMSwgYnVmT3JTdHJpbmcubGVuZ3RoKVxuXG4gIGlmICh0eXBlb2YgYnVmT3JTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBCdWZmZXIuZnJvbShidWZPclN0cmluZylcbiAgfVxuXG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gIHJldHVybiBCdWZmZXIuZnJvbShiYXNlLmRlY29kZShidWZPclN0cmluZy50b1N0cmluZygpKSlcbn1cblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0YSBtdWx0aWJhc2UgZW5jb2RlZD9cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGJ1Zk9yU3RyaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqL1xuZnVuY3Rpb24gaXNFbmNvZGVkIChidWZPclN0cmluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1Zk9yU3RyaW5nKSkge1xuICAgIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gRW5zdXJlIGJ1Zk9yU3RyaW5nIGlzIGEgc3RyaW5nXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYnVmT3JTdHJpbmcpICE9PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29kZSA9IGJ1Zk9yU3RyaW5nLnN1YnN0cmluZygwLCAxKVxuICB0cnkge1xuICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gICAgcmV0dXJuIGJhc2UubmFtZVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRFbmNvZGUgKG5hbWUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lKVxuICBiYXNlLmRlY29kZShidWYudG9TdHJpbmcoKSlcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZSAobmFtZU9yQ29kZSkge1xuICBsZXQgYmFzZVxuXG4gIGlmIChjb25zdGFudHMubmFtZXNbbmFtZU9yQ29kZV0pIHtcbiAgICBiYXNlID0gY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdXG4gIH0gZWxzZSBpZiAoY29uc3RhbnRzLmNvZGVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXVxuICB9IGVsc2Uge1xuICAgIHRocm93IGVyck5vdFN1cHBvcnRlZFxuICB9XG5cbiAgaWYgKCFiYXNlLmlzSW1wbGVtZW50ZWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmFzZSAnICsgbmFtZU9yQ29kZSArICcgaXMgbm90IGltcGxlbWVudGVkIHlldCcpXG4gIH1cblxuICByZXR1cm4gYmFzZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvZGVjID0gcmVxdWlyZSgnLi9jb2RlYycpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCB3aXRoSXMgPSByZXF1aXJlKCdjbGFzcy1pcycpXG5jb25zdCBpbnNwZWN0ID0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKVxuXG4vKipcbiAqIENyZWF0ZXMgYSBbbXVsdGlhZGRyXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkcikgZnJvbVxuICogYSBCdWZmZXIsIFN0cmluZyBvciBhbm90aGVyIE11bHRpYWRkciBpbnN0YW5jZVxuICogcHVibGljIGtleS5cbiAqIEBjbGFzcyBNdWx0aWFkZHJcbiAqIEBwYXJhbSB7KFN0cmluZ3xCdWZmZXJ8TXVsdGlhZGRyKX0gYWRkciAtIElmIFN0cmluZyBvciBCdWZmZXIsIG5lZWRzIHRvIGFkaGVyZVxuICogdG8gdGhlIGFkZHJlc3MgZm9ybWF0IG9mIGEgW211bHRpYWRkcl0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIjc3RyaW5nLWZvcm1hdClcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICovXG5jb25zdCBNdWx0aWFkZHIgPSB3aXRoSXMucHJvdG8oZnVuY3Rpb24gKGFkZHIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE11bHRpYWRkcikpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpYWRkcihhZGRyKVxuICB9XG5cbiAgLy8gZGVmYXVsdFxuICBpZiAoYWRkciA9PSBudWxsKSB7XG4gICAgYWRkciA9ICcnXG4gIH1cblxuICBpZiAoYWRkciBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9IC0gVGhlIHJhdyBieXRlcyByZXByZXNlbnRpbmcgdGhpcyBtdWx0aWFkZHJlc3NcbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21CdWZmZXIoYWRkcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRkciA9PT0gJ3N0cmluZycgfHwgYWRkciBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIGlmIChhZGRyLmxlbmd0aCA+IDAgJiYgYWRkci5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWFkZHIgXCIke2FkZHJ9XCIgbXVzdCBzdGFydCB3aXRoIGEgXCIvXCJgKVxuICAgIH1cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21TdHJpbmcoYWRkcilcbiAgfSBlbHNlIGlmIChhZGRyLmJ1ZmZlciAmJiBhZGRyLnByb3RvcyAmJiBhZGRyLnByb3RvQ29kZXMpIHsgLy8gTXVsdGlhZGRyXG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tQnVmZmVyKGFkZHIuYnVmZmVyKSAvLyB2YWxpZGF0ZSArIGNvcHkgYnVmZmVyXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhZGRyIG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgb3IgYW5vdGhlciBNdWx0aWFkZHInKVxuICB9XG59LCB7IGNsYXNzTmFtZTogJ011bHRpYWRkcicsIHN5bWJvbE5hbWU6ICdAbXVsdGlmb3JtYXRzL2pzLW11bHRpYWRkci9tdWx0aWFkZHInIH0pXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBTdHJpbmdcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIEpTT04gZW5jb2RlZCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIEpTT04uc3RyaW5naWZ5KE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKSlcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b0pTT04gPSBNdWx0aWFkZHIucHJvdG90eXBlLnRvU3RyaW5nXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBjb252aW5pZW50IG9wdGlvbnMgb2JqZWN0IHRvIGJlIHVzZWQgd2l0aCBuZXQuY3JlYXRlQ29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIHt7ZmFtaWx5OiBTdHJpbmcsIGhvc3Q6IFN0cmluZywgdHJhbnNwb3J0OiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnRvT3B0aW9ucygpXG4gKiAvLyB7IGZhbWlseTogJ2lwdjQnLCBob3N0OiAnMTI3LjAuMC4xJywgdHJhbnNwb3J0OiAndGNwJywgcG9ydDogNDAwMSB9XG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9PcHRpb25zID0gZnVuY3Rpb24gdG9PcHRpb25zICgpIHtcbiAgY29uc3Qgb3B0cyA9IHt9XG4gIGNvbnN0IHBhcnNlZCA9IHRoaXMudG9TdHJpbmcoKS5zcGxpdCgnLycpXG4gIG9wdHMuZmFtaWx5ID0gcGFyc2VkWzFdID09PSAnaXA0JyA/ICdpcHY0JyA6ICdpcHY2J1xuICBvcHRzLmhvc3QgPSBwYXJzZWRbMl1cbiAgb3B0cy50cmFuc3BvcnQgPSBwYXJzZWRbM11cbiAgb3B0cy5wb3J0ID0gcGFyc2VJbnQocGFyc2VkWzRdKVxuICByZXR1cm4gb3B0c1xufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogRm9yIHBvc3QgTm9kZS5qcyB2MTAuMC4wLlxuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDA3OV9jdXN0b21faW5zcGVjdGlvbl9mdW5jdGlvbl9vbl9vYmplY3RzX3ZpYV9pbnNwZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykpXG4gKiAvLyAnPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+J1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlW2luc3BlY3RdID0gZnVuY3Rpb24gaW5zcGVjdEN1c3RvbSAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBGYWxsYmFjayBmb3IgcHJlIE5vZGUuanMgdjEwLjAuMC5cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZGVwcmVjYXRpb25zLmh0bWwjZGVwcmVjYXRpb25zX2RlcDAwNzlfY3VzdG9tX2luc3BlY3Rpb25fZnVuY3Rpb25fb25fb2JqZWN0c192aWFfaW5zcGVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLmluc3BlY3QoKVxuICogLy8gJzxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPidcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJvdG9jb2xzIHRoZSBNdWx0aWFkZHIgaXMgZGVmaW5lZCB3aXRoLCBhcyBhbiBhcnJheSBvZiBvYmplY3RzLCBpblxuICogbGVmdC10by1yaWdodCBvcmRlci4gRWFjaCBvYmplY3QgY29udGFpbnMgdGhlIHByb3RvY29sIGNvZGUsIHByb3RvY29sIG5hbWUsXG4gKiBhbmQgdGhlIHNpemUgb2YgaXRzIGFkZHJlc3Mgc3BhY2UgaW4gYml0cy5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybnMge0FycmF5LjxPYmplY3Q+fSBwcm90b2NvbHMgLSBBbGwgdGhlIHByb3RvY29scyB0aGUgYWRkcmVzcyBpcyBjb21wb3NlZCBvZlxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uY29kZVxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uc2l6ZVxuICogQHJldHVybnMge1N0cmluZ30gcHJvdG9jb2xzW10ubmFtZVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b3MoKVxuICogLy8gWyB7IGNvZGU6IDQsIHNpemU6IDMyLCBuYW1lOiAnaXA0JyB9LFxuICogLy8gICB7IGNvZGU6IDYsIHNpemU6IDE2LCBuYW1lOiAndGNwJyB9IF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b3MgPSBmdW5jdGlvbiBwcm90b3MgKCkge1xuICByZXR1cm4gdGhpcy5wcm90b0NvZGVzKCkubWFwKGNvZGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgcHJvdG9jb2xzKGNvZGUpKSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2RlcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48TnVtYmVyPn0gcHJvdG9jb2wgY29kZXNcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9Db2RlcygpXG4gKiAvLyBbIDQsIDYgXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvQ29kZXMgPSBmdW5jdGlvbiBwcm90b0NvZGVzICgpIHtcbiAgY29uc3QgY29kZXMgPSBbXVxuICBjb25zdCBidWYgPSB0aGlzLmJ1ZmZlclxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG4gICAgY29uc3Qgc2l6ZSA9IGNvZGVjLnNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpICs9IChzaXplICsgbilcbiAgICBjb2Rlcy5wdXNoKGNvZGUpXG4gIH1cblxuICByZXR1cm4gY29kZXNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxTdHJpbmc+fSBwcm90b2NvbCBuYW1lc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b05hbWVzKClcbiAqIC8vIFsgJ2lwNCcsICd0Y3AnIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b05hbWVzID0gZnVuY3Rpb24gcHJvdG9OYW1lcyAoKSB7XG4gIHJldHVybiB0aGlzLnByb3RvcygpLm1hcChwcm90byA9PiBwcm90by5uYW1lKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4ge0J1ZmZlcn0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikudHVwbGVzKClcbiAqIC8vIFsgWyA0LCA8QnVmZmVyIDdmIDAwIDAwIDAxPiBdLCBbIDYsIDxCdWZmZXIgMGYgYTE+IF0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnR1cGxlcyA9IGZ1bmN0aW9uIHR1cGxlcyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1R1cGxlcyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2Ygc3RyaW5nL251bWJlciBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4geyhTdHJpbmd8TnVtYmVyKX0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikuc3RyaW5nVHVwbGVzKClcbiAqIC8vIFsgWyA0LCAnMTI3LjAuMC4xJyBdLCBbIDYsIDQwMDEgXSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuc3RyaW5nVHVwbGVzID0gZnVuY3Rpb24gc3RyaW5nVHVwbGVzICgpIHtcbiAgY29uc3QgdCA9IGNvZGVjLmJ1ZmZlclRvVHVwbGVzKHRoaXMuYnVmZmVyKVxuICByZXR1cm4gY29kZWMudHVwbGVzVG9TdHJpbmdUdXBsZXModClcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYSBNdWx0aWFkZHIgaW4gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byBhZGQgaW50byB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5lbmNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGVuY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBNdWx0aWFkZHIoYWRkcilcbiAgcmV0dXJuIE11bHRpYWRkcih0aGlzLnRvU3RyaW5nKCkgKyBhZGRyLnRvU3RyaW5nKCkpXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGVzIGEgTXVsdGlhZGRyIGZyb20gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byByZW1vdmUgZnJvbSB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLmRlY2Fwc3VsYXRlKG1oMikudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvOC44LjguOC90Y3AvMTA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGRlY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBhZGRyLnRvU3RyaW5nKClcbiAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKVxuICBjb25zdCBpID0gcy5sYXN0SW5kZXhPZihhZGRyKVxuICBpZiAoaSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgJyArIHRoaXMgKyAnIGRvZXMgbm90IGNvbnRhaW4gc3ViYWRkcmVzczogJyArIGFkZHIpXG4gIH1cbiAgcmV0dXJuIE11bHRpYWRkcihzLnNsaWNlKDAsIGkpKVxufVxuXG4vKipcbiAqIEEgbW9yZSByZWxpYWJsZSB2ZXJzaW9uIG9mIGBkZWNhcHN1bGF0ZWAgaWYgeW91IGFyZSB0YXJnZXRpbmcgYVxuICogc3BlY2lmaWMgY29kZSwgc3VjaCBhcyA0MjEgKHRoZSBgcDJwYCBwcm90b2NvbCBjb2RlKS4gVGhlIGxhc3QgaW5kZXggb2YgdGhlIGNvZGVcbiAqIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBgTXVsdGlhZGRyYCwgYW5kIGEgbmV3IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgY29kZSBpcyBub3QgcHJlc2VudCwgdGhlIG9yaWdpbmFsIGBNdWx0aWFkZHJgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBwcm90b2NvbCB0byBkZWNhcHN1bGF0ZSBmcm9tIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgYWRkciA9IE11bHRpYWRkcignL2lwNC8wLjAuMC4wL3RjcC84MDgwL3AycC9RbWNncHN5V2dIOFk4YWpKejFDdTcyS25TNXVvMkFhMkxwelU3a2luU3VwTktDJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwMC4uLiAtIC9pcDQvMC4wLjAuMC90Y3AvODA4MC9wMnAvUW1jZ3BzeVdnSDhZOGFqSnoxQ3U3MktuUzV1bzJBYTJMcHpVN2tpblN1cE5LQz5cbiAqXG4gKiBhZGRyLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzAuMC4wLjAvdGNwLzgwODAnXG4gKlxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCcpLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZUNvZGUgPSBmdW5jdGlvbiBkZWNhcHN1bGF0ZUNvZGUgKGNvZGUpIHtcbiAgY29uc3QgdHVwbGVzID0gdGhpcy50dXBsZXMoKVxuICBmb3IgKGxldCBpID0gdHVwbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHR1cGxlc1tpXVswXSA9PT0gY29kZSkge1xuICAgICAgcmV0dXJuIE11bHRpYWRkcihjb2RlYy50dXBsZXNUb0J1ZmZlcih0dXBsZXMuc2xpY2UoMCwgaSkpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBlZXJJZCBpZiB0aGUgbXVsdGlhZGRyIGNvbnRhaW5zIG9uZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSBwZWVySWQgLSBUaGUgaWQgb2YgdGhlIHBlZXIgb3IgbnVsbCBpZiBpbnZhbGlkIG9yIG1pc3NpbmcgZnJvbSB0aGUgbWFcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MC9pcGZzL1FtVmFsaWRCYXNlNThzdHJpbmcnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwZnMvUW1WYWxpZEJhc2U1OHN0cmluZz5cbiAqXG4gKiAvLyBzaG91bGQgcmV0dXJuIFFtVmFsaWRCYXNlNThzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwZWVySWQgPSBtaDEuZ2V0UGVlcklkKClcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5nZXRQZWVySWQgPSBmdW5jdGlvbiBnZXRQZWVySWQgKCkge1xuICBsZXQgYjU4c3RyID0gbnVsbFxuICB0cnkge1xuICAgIGNvbnN0IHR1cGxlcyA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgaWYgKHR1cGxlWzBdID09PSBwcm90b2NvbHMubmFtZXMuaXBmcy5jb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEdldCB0aGUgbGFzdCBpZFxuICAgIGI1OHN0ciA9IHR1cGxlcy5wb3AoKVsxXVxuICAgIC8vIEdldCBtdWx0aWhhc2gsIHVud3JhcCBmcm9tIENJRCBpZiBuZWVkZWRcbiAgICBiNThzdHIgPSBiczU4LmVuY29kZShuZXcgQ0lEKGI1OHN0cikubXVsdGloYXNoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgYjU4c3RyID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGI1OHN0clxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBhdGggaWYgdGhlIG11bHRpYWRkciBjb250YWlucyBvbmVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd8bnVsbH0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBtdWx0aWFkZHIsIG9yIG51bGwgaWYgbm8gcGF0aCBwcm90b2NvbCBpcyBwcmVzZW50XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAvdW5peC90bXAvcDJwLnNvY2snKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL3VuaXgvdG1wL3AycC5zb2NrPlxuICpcbiAqIC8vIHNob3VsZCByZXR1cm4gdXRmOCBzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwYXRoID0gbWgxLmdldFBhdGgoKVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoICgpIHtcbiAgbGV0IHBhdGggPSBudWxsXG4gIHRyeSB7XG4gICAgcGF0aCA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHModHVwbGVbMF0pXG4gICAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pWzBdWzFdXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXRoID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHBhdGhcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdHdvIE11bHRpYWRkcnMgYXJlIHRoZSBzYW1lXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge0Jvb2x9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgxLmVxdWFscyhtaDEpXG4gKiAvLyB0cnVlXG4gKlxuICogbWgxLmVxdWFscyhtaDIpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYWRkcikge1xuICByZXR1cm4gdGhpcy5idWZmZXIuZXF1YWxzKGFkZHIuYnVmZmVyKVxufVxuXG4vKipcbiAqIEdldHMgYSBNdWx0aWFkZHJzIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3QuIE5vdGUgdGhhdCBwcm90b2NvbCBpbmZvcm1hdGlvblxuICogaXMgbGVmdCBvdXQ6IGluIE5vZGUgKGFuZCBtb3N0IG5ldHdvcmsgc3lzdGVtcykgdGhlIHByb3RvY29sIGlzIHVua25vd2FibGVcbiAqIGdpdmVuIG9ubHkgdGhlIGFkZHJlc3MuXG4gKlxuICogSGFzIHRvIGJlIGEgVGhpbldhaXN0IEFkZHJlc3MsIG90aGVyd2lzZSB0aHJvd3MgZXJyb3JcbiAqXG4gKiBAcmV0dXJucyB7e2ZhbWlseTogU3RyaW5nLCBhZGRyZXNzOiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIE11bHRpYWRkciBpcyBub3QgYSBUaGluIFdhaXN0IGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykubm9kZUFkZHJlc3MoKVxuICogLy8ge2ZhbWlseTogJ0lQdjQnLCBhZGRyZXNzOiAnMTI3LjAuMC4xJywgcG9ydDogJzQwMDEnfVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLm5vZGVBZGRyZXNzID0gZnVuY3Rpb24gbm9kZUFkZHJlc3MgKCkge1xuICBjb25zdCBjb2RlcyA9IHRoaXMucHJvdG9Db2RlcygpXG4gIGNvbnN0IG5hbWVzID0gdGhpcy5wcm90b05hbWVzKClcbiAgY29uc3QgcGFydHMgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJy8nKS5zbGljZSgxKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWFkZHIgbXVzdCBoYXZlIGEgdmFsaWQgZm9ybWF0OiBcIi97aXA0LCBpcDYsIGRuczQsIGRuczZ9L3thZGRyZXNzfS97dGNwLCB1ZHB9L3twb3J0fVwiLicpXG4gIH0gZWxzZSBpZiAoY29kZXNbMF0gIT09IDQgJiYgY29kZXNbMF0gIT09IDQxICYmIGNvZGVzWzBdICE9PSA1NCAmJiBjb2Rlc1swXSAhPT0gNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1swXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIGZhbWlseSBuYW1lOiBcIntpcDQsIGlwNiwgZG5zNCwgZG5zNn1cIi5gKVxuICB9IGVsc2UgaWYgKHBhcnRzWzJdICE9PSAndGNwJyAmJiBwYXJ0c1syXSAhPT0gJ3VkcCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1sxXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIHRyYW5zcG9ydCBwcm90b2NvbDogXCJ7dGNwLCB1ZHB9XCIuYClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmFtaWx5OiAoY29kZXNbMF0gPT09IDQxIHx8IGNvZGVzWzBdID09PSA1NSkgPyA2IDogNCxcbiAgICBhZGRyZXNzOiBwYXJ0c1sxXSwgLy8gaXAgYWRkclxuICAgIHBvcnQ6IHBhcnNlSW50KHBhcnRzWzNdKSAvLyB0Y3Agb3IgdWRwIHBvcnRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBNdWx0aWFkZHIgZnJvbSBhIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3tmYW1pbHk6IFN0cmluZywgYWRkcmVzczogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fSBhZGRyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHJhbnNwb3J0XG4gKiBAcmV0dXJucyB7TXVsdGlhZGRyfSBtdWx0aWFkZHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgYWRkciBpcyBub3QgdHJ1dGh5XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIHRyYW5zcG9ydCBpcyBub3QgdHJ1dGh5XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyLmZyb21Ob2RlQWRkcmVzcyh7YWRkcmVzczogJzEyNy4wLjAuMScsIHBvcnQ6ICc0MDAxJ30sICd0Y3AnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKi9cbk11bHRpYWRkci5mcm9tTm9kZUFkZHJlc3MgPSBmdW5jdGlvbiBmcm9tTm9kZUFkZHJlc3MgKGFkZHIsIHRyYW5zcG9ydCkge1xuICBpZiAoIWFkZHIpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgbm9kZSBhZGRyZXNzIG9iamVjdCcpXG4gIGlmICghdHJhbnNwb3J0KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIHRyYW5zcG9ydCBwcm90b2NvbCcpXG4gIGNvbnN0IGlwID0gKGFkZHIuZmFtaWx5ID09PSAnSVB2NicpID8gJ2lwNicgOiAnaXA0J1xuICByZXR1cm4gTXVsdGlhZGRyKCcvJyArIFtpcCwgYWRkci5hZGRyZXNzLCB0cmFuc3BvcnQsIGFkZHIucG9ydF0uam9pbignLycpKVxufVxuXG4vLyBUT0RPIGZpbmQgYSBiZXR0ZXIgZXhhbXBsZSwgbm90IHN1cmUgYWJvdXQgaXQncyBnb29kIGVub3VnaFxuLyoqXG4gKiBSZXR1cm5zIGlmIGEgTXVsdGlhZGRyIGlzIGEgVGhpbiBXYWlzdCBhZGRyZXNzIG9yIG5vdC5cbiAqXG4gKiBUaGluIFdhaXN0IGlzIGlmIGEgTXVsdGlhZGRyIGFkaGVyZXMgdG8gdGhlIHN0YW5kYXJkIGNvbWJpbmF0aW9uIG9mOlxuICpcbiAqIGB7SVB2NCwgSVB2Nn0ve1RDUCwgVURQfWBcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gW2FkZHJdIC0gRGVmYXVsdHMgdG8gdXNpbmcgYHRoaXNgIGluc3RhbmNlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNUaGluV2Fpc3RBZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxPlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMTA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMS9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDE+XG4gKiBtaDEuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIHRydWVcbiAqIG1oMi5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gdHJ1ZVxuICogbWgzLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmlzVGhpbldhaXN0QWRkcmVzcyA9IGZ1bmN0aW9uIGlzVGhpbldhaXN0QWRkcmVzcyAoYWRkcikge1xuICBjb25zdCBwcm90b3MgPSAoYWRkciB8fCB0aGlzKS5wcm90b3MoKVxuXG4gIGlmIChwcm90b3MubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocHJvdG9zWzBdLmNvZGUgIT09IDQgJiYgcHJvdG9zWzBdLmNvZGUgIT09IDQxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKHByb3Rvc1sxXS5jb2RlICE9PSA2ICYmIHByb3Rvc1sxXS5jb2RlICE9PSAyNzMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIE9iamVjdCBjb250YWluaW5nIHRhYmxlLCBuYW1lcyBhbmQgY29kZXMgb2YgYWxsIHN1cHBvcnRlZCBwcm90b2NvbHMuXG4gKiBUbyBnZXQgdGhlIHByb3RvY29sIHZhbHVlcyBmcm9tIGEgTXVsdGlhZGRyLCB5b3UgY2FuIHVzZVxuICogW2AucHJvdG9zKClgXSgjbXVsdGlhZGRycHJvdG9zKSxcbiAqIFtgLnByb3RvQ29kZXMoKWBdKCNtdWx0aWFkZHJwcm90b2NvZGVzKSBvclxuICogW2AucHJvdG9OYW1lcygpYF0oI211bHRpYWRkcnByb3RvbmFtZXMpXG4gKlxuICogQGluc3RhbmNlXG4gKiBAcmV0dXJucyB7e3RhYmxlOiBBcnJheSwgbmFtZXM6IE9iamVjdCwgY29kZXM6IE9iamVjdH19XG4gKlxuICovXG5NdWx0aWFkZHIucHJvdG9jb2xzID0gcHJvdG9jb2xzXG5cbi8qKlxuICogUmV0dXJucyBpZiBzb21ldGhpbmcgaXMgYSBNdWx0aWFkZHIgdGhhdCBpcyBhIG5hbWVcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7Qm9vbH0gaXNOYW1lXG4gKi9cbk11bHRpYWRkci5pc05hbWUgPSBmdW5jdGlvbiBpc05hbWUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGlmIGEgcGFydCBvZiB0aGUgbXVsdGlhZGRyIGlzIHJlc29sdmFibGUsIHRoZW4gcmV0dXJuIHRydWVcbiAgcmV0dXJuIGFkZHIucHJvdG9zKCkuc29tZSgocHJvdG8pID0+IHByb3RvLnJlc29sdmFibGUpXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtdWx0aWFkZHJzLCBieSByZXNvbHZpbmcgdGhlIG11bHRpYWRkciB0aGF0IGlzIGEgbmFtZVxuICpcbiAqIEBhc3luY1xuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcltdfVxuICovXG5NdWx0aWFkZHIucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikgfHwgIU11bHRpYWRkci5pc05hbWUoYWRkcikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoJ25vdCBhIHZhbGlkIG5hbWUnKSlcbiAgfVxuXG4gIC8qXG4gICAqIE5lZWRzIG1vcmUgY29uc2lkZXJhdGlvbiBmcm9tIHNwZWMgZGVzaWduOlxuICAgKiAgIC0gd2hhdCB0byByZXR1cm5cbiAgICogICAtIGhvdyB0byBhY2hpZXZlIGl0IGluIHRoZSBicm93c2VyP1xuICAgKi9cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkIHlldCcpKVxufVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBNdWx0aWFkZHJcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG51bWJlclRvQnVmZmVyLFxuICBidWZmZXJUb051bWJlcixcbiAgdmFyaW50QnVmZmVyRW5jb2RlLFxuICB2YXJpbnRCdWZmZXJEZWNvZGUsXG4gIHZhcmludEVuY29kZVxufVxuXG5mdW5jdGlvbiBidWZmZXJUb051bWJlciAoYnVmKSB7XG4gIHJldHVybiBwYXJzZUludChidWYudG9TdHJpbmcoJ2hleCcpLCAxNilcbn1cblxuZnVuY3Rpb24gbnVtYmVyVG9CdWZmZXIgKG51bSkge1xuICBsZXQgaGV4U3RyaW5nID0gbnVtLnRvU3RyaW5nKDE2KVxuICBpZiAoaGV4U3RyaW5nLmxlbmd0aCAlIDIgPT09IDEpIHtcbiAgICBoZXhTdHJpbmcgPSAnMCcgKyBoZXhTdHJpbmdcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jylcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRW5jb2RlIChpbnB1dCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWZmZXJUb051bWJlcihpbnB1dCkpKVxufVxuXG5mdW5jdGlvbiB2YXJpbnRCdWZmZXJEZWNvZGUgKGlucHV0KSB7XG4gIHJldHVybiBudW1iZXJUb0J1ZmZlcih2YXJpbnQuZGVjb2RlKGlucHV0KSlcbn1cblxuZnVuY3Rpb24gdmFyaW50RW5jb2RlIChudW0pIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobnVtKSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gd2l0aElzKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIGNvbnN0IENsYXNzSXNXcmFwcGVyID0ge1xuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3NpZ25zIHRoZSBjbGFzcyB3cmFwcGVyIHRvIGFuIG9iamVjdCB0byB0cmlja1xuICAgICAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZXMgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgY2xhc3Mgd2hlblxuICAgICAgICAvLyBsb2dnaW5nIGFuIGluc3RhbmNlcy5cbiAgICAgICAgLy8gV2UgYXJlIGFzc2lnbmluZyBhbiBhbm9ueW1vdXMgY2xhc3MgKGNsYXNzIHdyYXBwZXIpIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gd2l0aCBrZXkgYGNsYXNzTmFtZWAgdG8ga2VlcCB0aGUgY29ycmVjdCBuYW1lLlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaXQgZmFsbHMgYmFjayB0byBsb2dnaW5nIGBDbGFzc0lzV3JhcHBlcmAuXG4gICAgICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHdpdGhJc1Byb3RvKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSwgd2l0aG91dE5ldyB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1zaG9ydGhhbmQgKi9cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAod2l0aG91dE5ldyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBDbGFzc0lzV3JhcHBlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzSXNXcmFwcGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IENsYXNzLmNhbGwodGhpcywgLi4uYXJncykgfHwgdGhpcztcblxuICAgICAgICAgICAgaWYgKF90aGlzICYmICFfdGhpc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG4gICAgLyogZXNsaW50LWVuYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG5cbiAgICBDbGFzc0lzV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSk7XG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3NJc1dyYXBwZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIENsYXNzSXNXcmFwcGVyW2BpcyR7Y2xhc3NOYW1lfWBdID0gKG9iaikgPT4gISEob2JqICYmIG9ialtzeW1ib2xdKTtcblxuICAgIHJldHVybiBDbGFzc0lzV3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoSXM7XG5tb2R1bGUuZXhwb3J0cy5wcm90byA9IHdpdGhJc1Byb3RvO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJyk7XG52YXIgYXN5bmNraXQgPSByZXF1aXJlKCdhc3luY2tpdCcpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKCk7XG4gIH1cblxuICB0aGlzLl9vdmVyaGVhZExlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlID0gW107XG5cbiAgQ29tYmluZWRTdHJlYW0uY2FsbCh0aGlzKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cbn1cblxuRm9ybURhdGEuTElORV9CUkVBSyA9ICdcXHJcXG4nO1xuRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGFsbG93IGZpbGVuYW1lIGFzIHNpbmdsZSBvcHRpb25cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtmaWxlbmFtZTogb3B0aW9uc307XG4gIH1cblxuICB2YXIgYXBwZW5kID0gQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZC5iaW5kKHRoaXMpO1xuXG4gIC8vIGFsbCB0aGF0IHN0cmVhbXkgYnVzaW5lc3MgY2FuJ3QgaGFuZGxlIG51bWJlcnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtZm9ybS1kYXRhL2lzc3Vlcy8zOFxuICBpZiAodXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFBsZWFzZSBjb252ZXJ0IHlvdXIgYXJyYXkgaW50byBzdHJpbmdcbiAgICAvLyB0aGUgd2F5IHdlYiBzZXJ2ZXIgZXhwZWN0cyBpdFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGVhZGVyID0gdGhpcy5fbXVsdGlQYXJ0SGVhZGVyKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBmb290ZXIgPSB0aGlzLl9tdWx0aVBhcnRGb290ZXIoKTtcblxuICBhcHBlbmQoaGVhZGVyKTtcbiAgYXBwZW5kKHZhbHVlKTtcbiAgYXBwZW5kKGZvb3Rlcik7XG5cbiAgLy8gcGFzcyBhbG9uZyBvcHRpb25zLmtub3duTGVuZ3RoXG4gIHRoaXMuX3RyYWNrTGVuZ3RoKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl90cmFja0xlbmd0aCA9IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gMDtcblxuICAvLyB1c2VkIHcvIGdldExlbmd0aFN5bmMoKSwgd2hlbiBsZW5ndGggaXMga25vd24uXG4gIC8vIGUuZy4gZm9yIHN0cmVhbWluZyBkaXJlY3RseSBmcm9tIGEgcmVtb3RlIHNlcnZlcixcbiAgLy8gdy8gYSBrbm93biBmaWxlIGEgc2l6ZSwgYW5kIG5vdCB3YW50aW5nIHRvIHdhaXQgZm9yXG4gIC8vIGluY29taW5nIGZpbGUgdG8gZmluaXNoIHRvIGdldCBpdHMgc2l6ZS5cbiAgaWYgKG9wdGlvbnMua25vd25MZW5ndGggIT0gbnVsbCkge1xuICAgIHZhbHVlTGVuZ3RoICs9ICtvcHRpb25zLmtub3duTGVuZ3RoO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICB0aGlzLl92YWx1ZUxlbmd0aCArPSB2YWx1ZUxlbmd0aDtcblxuICAvLyBAY2hlY2sgd2h5IGFkZCBDUkxGPyBkb2VzIHRoaXMgYWNjb3VudCBmb3IgY3VzdG9tL211bHRpcGxlIENSTEZzP1xuICB0aGlzLl9vdmVyaGVhZExlbmd0aCArPVxuICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGhlYWRlcikgK1xuICAgIEZvcm1EYXRhLkxJTkVfQlJFQUsubGVuZ3RoO1xuXG4gIC8vIGVtcHR5IG9yIGVpdGhlciBkb2Vzbid0IGhhdmUgcGF0aCBvciBub3QgYW4gaHR0cCByZXNwb25zZVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vIG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGxlbmd0aFxuICBpZiAoIW9wdGlvbnMua25vd25MZW5ndGgpIHtcbiAgICB0aGlzLl92YWx1ZXNUb01lYXN1cmUucHVzaCh2YWx1ZSk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGVuZ3RoUmV0cmlldmVyID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG5cbiAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdmZCcpKSB7XG5cbiAgICAvLyB0YWtlIHJlYWQgcmFuZ2UgaW50byBhIGFjY291bnRcbiAgICAvLyBgZW5kYCA9IEluZmluaXR5IOKAkz4gcmVhZCBmaWxlIHRpbGwgdGhlIGVuZFxuICAgIC8vXG4gICAgLy8gVE9ETzogTG9va3MgbGlrZSB0aGVyZSBpcyBidWcgaW4gTm9kZSBmcy5jcmVhdGVSZWFkU3RyZWFtXG4gICAgLy8gaXQgZG9lc24ndCByZXNwZWN0IGBlbmRgIG9wdGlvbnMgd2l0aG91dCBgc3RhcnRgIG9wdGlvbnNcbiAgICAvLyBGaXggaXQgd2hlbiBub2RlIGZpeGVzIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvNzgxOVxuICAgIGlmICh2YWx1ZS5lbmQgIT0gdW5kZWZpbmVkICYmIHZhbHVlLmVuZCAhPSBJbmZpbml0eSAmJiB2YWx1ZS5zdGFydCAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgLy8gd2hlbiBlbmQgc3BlY2lmaWVkXG4gICAgICAvLyBubyBuZWVkIHRvIGNhbGN1bGF0ZSByYW5nZVxuICAgICAgLy8gaW5jbHVzaXZlLCBzdGFydHMgd2l0aCAwXG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZS5lbmQgKyAxIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKSk7XG5cbiAgICAvLyBub3QgdGhhdCBmYXN0IHNub29weVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIGZldGNoIGZpbGUgc2l6ZSBmcm9tIGZzXG4gICAgICBmcy5zdGF0KHZhbHVlLnBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuXG4gICAgICAgIHZhciBmaWxlU2l6ZTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZmluYWwgc2l6ZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugb3B0aW9uc1xuICAgICAgICBmaWxlU2l6ZSA9IHN0YXQuc2l6ZSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAvLyBvciBodHRwIHJlc3BvbnNlXG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cE1vZHVsZScpKSB7XG4gICAgLy8gd2FpdCB0aWxsIHJlc3BvbnNlIGNvbWUgYmFja1xuICAgIHZhbHVlLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB2YWx1ZS5wYXVzZSgpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgK3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuICAgIH0pO1xuICAgIHZhbHVlLnJlc3VtZSgpO1xuXG4gIC8vIHNvbWV0aGluZyBlbHNlXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soJ1Vua25vd24gc3RyZWFtJyk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIGN1c3RvbSBoZWFkZXIgc3BlY2lmaWVkIChhcyBzdHJpbmcpP1xuICAvLyBpdCBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciBib3VuZGFyeVxuICAvLyAoZS5nLiB0byBoYW5kbGUgZXh0cmEgQ1JMRnMgb24gLk5FVCBzZXJ2ZXJzKVxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuaGVhZGVyO1xuICB9XG5cbiAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHRoaXMuX2dldENvbnRlbnREaXNwb3NpdGlvbih2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBjb250ZW50VHlwZSA9IHRoaXMuX2dldENvbnRlbnRUeXBlKHZhbHVlLCBvcHRpb25zKTtcblxuICB2YXIgY29udGVudHMgPSAnJztcbiAgdmFyIGhlYWRlcnMgID0ge1xuICAgIC8vIGFkZCBjdXN0b20gZGlzcG9zaXRpb24gYXMgdGhpcmQgZWxlbWVudCBvciBrZWVwIGl0IHR3byBlbGVtZW50cyBpZiBub3RcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IFsnZm9ybS1kYXRhJywgJ25hbWU9XCInICsgZmllbGQgKyAnXCInXS5jb25jYXQoY29udGVudERpc3Bvc2l0aW9uIHx8IFtdKSxcbiAgICAvLyBpZiBubyBjb250ZW50IHR5cGUuIGFsbG93IGl0IHRvIGJlIGVtcHR5IGFycmF5XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFtdLmNvbmNhdChjb250ZW50VHlwZSB8fCBbXSlcbiAgfTtcblxuICAvLyBhbGxvdyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnb2JqZWN0Jykge1xuICAgIHBvcHVsYXRlKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVyKTtcbiAgfVxuXG4gIHZhciBoZWFkZXI7XG4gIGZvciAodmFyIHByb3AgaW4gaGVhZGVycykge1xuICAgIGlmICghaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgIC8vIHNraXAgbnVsbGlzaCBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbGwgaGVhZGVycyB0byBhcnJheXMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlciA9IFtoZWFkZXJdO1xuICAgIH1cblxuICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyLmxlbmd0aCkge1xuICAgICAgY29udGVudHMgKz0gcHJvcCArICc6ICcgKyBoZWFkZXIuam9pbignOyAnKSArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyBGb3JtRGF0YS5MSU5FX0JSRUFLICsgY29udGVudHMgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50RGlzcG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIHZhciBmaWxlbmFtZVxuICAgICwgY29udGVudERpc3Bvc2l0aW9uXG4gICAgO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5maWxlcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBjdXN0b20gZmlsZXBhdGggZm9yIHJlbGF0aXZlIHBhdGhzXG4gICAgZmlsZW5hbWUgPSBwYXRoLm5vcm1hbGl6ZShvcHRpb25zLmZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpIHtcbiAgICAvLyBjdXN0b20gZmlsZW5hbWUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gZm9ybWlkYWJsZSBhbmQgdGhlIGJyb3dzZXIgYWRkIGEgbmFtZSBwcm9wZXJ0eVxuICAgIC8vIGZzLSBhbmQgcmVxdWVzdC0gc3RyZWFtcyBoYXZlIHBhdGggcHJvcGVydHlcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpO1xuICB9IGVsc2UgaWYgKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjb250ZW50VHlwZSA9IHZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICB9XG5cbiAgLy8gb3IgZ3Vlc3MgaXQgZnJvbSB0aGUgZmlsZXBhdGggb3IgZmlsZW5hbWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBgdmFsdWVgIGlzIG5vdCBzaW1wbGUgdmFsdWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICBjb250ZW50VHlwZSA9IEZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRUeXBlO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRGb290ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5leHQpIHtcbiAgICB2YXIgZm9vdGVyID0gRm9ybURhdGEuTElORV9CUkVBSztcblxuICAgIHZhciBsYXN0UGFydCA9ICh0aGlzLl9zdHJlYW1zLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGxhc3RQYXJ0KSB7XG4gICAgICBmb290ZXIgKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgbmV4dChmb290ZXIpO1xuICB9LmJpbmQodGhpcyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xhc3RCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArICctLScgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEhlYWRlcnMgPSBmdW5jdGlvbih1c2VySGVhZGVycykge1xuICB2YXIgaGVhZGVyO1xuICB2YXIgZm9ybUhlYWRlcnMgPSB7XG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgdGhpcy5nZXRCb3VuZGFyeSgpXG4gIH07XG5cbiAgZm9yIChoZWFkZXIgaW4gdXNlckhlYWRlcnMpIHtcbiAgICBpZiAodXNlckhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgZm9ybUhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdXNlckhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybUhlYWRlcnM7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIGNvbnRlbnQgbGVuZ3RoXG4gICAgcmVxdWVzdC5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcblxuICAgIHRoaXMucGlwZShyZXF1ZXN0KTtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgY2IpO1xuICAgICAgcmVxdWVzdC5vbigncmVzcG9uc2UnLCBjYi5iaW5kKHRoaXMsIG51bGwpKTtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmICghdGhpcy5lcnJvcikge1xuICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnW29iamVjdCBGb3JtRGF0YV0nO1xufTtcbiIsInZhciBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICAsIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdGU7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlYWNoIGpvYiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBqb2Igc3RhdHVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBjYWxsYmFjaylcbntcbiAgLy8gc3RvcmUgY3VycmVudCBpbmRleFxuICB2YXIga2V5ID0gc3RhdGVbJ2tleWVkTGlzdCddID8gc3RhdGVbJ2tleWVkTGlzdCddW3N0YXRlLmluZGV4XSA6IHN0YXRlLmluZGV4O1xuXG4gIHN0YXRlLmpvYnNba2V5XSA9IHJ1bkpvYihpdGVyYXRvciwga2V5LCBsaXN0W2tleV0sIGZ1bmN0aW9uKGVycm9yLCBvdXRwdXQpXG4gIHtcbiAgICAvLyBkb24ndCByZXBlYXQgeW91cnNlbGZcbiAgICAvLyBza2lwIHNlY29uZGFyeSBjYWxsYmFja3NcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuam9icykpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIGpvYnNcbiAgICBkZWxldGUgc3RhdGUuam9ic1trZXldO1xuXG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIC8vIGRvbid0IHByb2Nlc3MgcmVzdCBvZiB0aGUgcmVzdWx0c1xuICAgICAgLy8gc3RvcCBzdGlsbCBhY3RpdmUgam9ic1xuICAgICAgLy8gYW5kIHJlc2V0IHRoZSBsaXN0XG4gICAgICBhYm9ydChzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBzdGF0ZS5yZXN1bHRzW2tleV0gPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHNhbHZhZ2VkIHJlc3VsdHNcbiAgICBjYWxsYmFjayhlcnJvciwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBqb2IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBpbnZva2VcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBrZXkvaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2Ygam9ic1xuICogQHBhcmFtICAge21peGVkfSBpdGVtIC0gam9iIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCBhZnRlciBpdGVyYXRvciBpcyBkb25lIHdpdGggdGhlIGpvYlxuICogQHJldHVybnMge2Z1bmN0aW9ufG1peGVkfSAtIGpvYiBhYm9ydCBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZVxuICovXG5mdW5jdGlvbiBydW5Kb2IoaXRlcmF0b3IsIGtleSwgaXRlbSwgY2FsbGJhY2spXG57XG4gIHZhciBhYm9ydGVyO1xuXG4gIC8vIGFsbG93IHNob3J0Y3V0IGlmIGl0ZXJhdG9yIGV4cGVjdHMgb25seSB0d28gYXJndW1lbnRzXG4gIGlmIChpdGVyYXRvci5sZW5ndGggPT0gMilcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG4gIC8vIG90aGVyd2lzZSBnbyB3aXRoIGZ1bGwgdGhyZWUgYXJndW1lbnRzXG4gIGVsc2VcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBrZXksIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXR1cm4gYWJvcnRlcjtcbn1cbiIsInZhciBkZWZlciA9IHJlcXVpcmUoJy4vZGVmZXIuanMnKTtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHlcbiAqIGV2ZW4gaWYgY2FsbGJhY2sgaXRzZWxmIGlzIG5vdFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBpbnZva2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhdWdtZW50ZWQgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYXN5bmMoY2FsbGJhY2spXG57XG4gIHZhciBpc0FzeW5jID0gZmFsc2U7XG5cbiAgLy8gY2hlY2sgaWYgYXN5bmMgaGFwcGVuZWRcbiAgZGVmZXIoZnVuY3Rpb24oKSB7IGlzQXN5bmMgPSB0cnVlOyB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYXN5bmNfY2FsbGJhY2soZXJyLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoaXNBc3luYylcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBkZWZlcihmdW5jdGlvbiBuZXh0VGlja19jYWxsYmFjaygpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMTguMi41IHBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUludCAhPSAkcGFyc2VJbnQpLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmlnJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSksICdEYXRlJywge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSByZXF1aXJlKCcuL19oaWRlJykocHJvdG8sIFRPX1BSSU1JVElWRSwgcmVxdWlyZSgnLi9fZGF0ZS10by1wcmltaXRpdmUnKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkbWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsImltcG9ydCBhZGRIYXNoVG9QaW5RdWV1ZSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvYWRkSGFzaFRvUGluUXVldWUnO1xuaW1wb3J0IHBpbkZpbGVUb0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMnO1xuaW1wb3J0IHBpbkZyb21GUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRnJvbUZTJztcbmltcG9ydCBwaW5KU09OVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5KU09OVG9JUEZTJztcbmltcG9ydCBwaW5IYXNoVG9JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5IYXNoVG9JUEZTJztcbmltcG9ydCBwaW5Kb2JzIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Kb2JzL3BpbkpvYnMnO1xuaW1wb3J0IHJlbW92ZVBpbkZyb21JUEZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9yZW1vdmVQaW5Gcm9tSVBGUyc7XG5pbXBvcnQgdGVzdEF1dGhlbnRpY2F0aW9uIGZyb20gJy4vY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHBpbkxpc3QgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcGluTGlzdCc7XG5pbXBvcnQgdXNlclBpbkxpc3QgZnJvbSAnLi9jb21tYW5kcy9kYXRhL3VzZXJQaW5MaXN0L3VzZXJQaW5MaXN0JztcbmltcG9ydCB1c2VyUGlubmVkRGF0YVRvdGFsIGZyb20gJy4vY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluYXRhQ2xpZW50KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgbGV0IGNsaWVudCA9IHt9O1xuXG4gICAgLy8gIHNldHRpbmcgdXAgdGhlIGFjdHVhbCBjYWxscyB5b3UgY2FuIG1ha2UgdXNpbmcgdGhpcyBwYWNrYWdlXG4gICAgY2xpZW50LmFkZEhhc2hUb1BpblF1ZXVlID0gZnVuY3Rpb24gKGhhc2hUb1Bpbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYWRkSGFzaFRvUGluUXVldWUocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1Bpbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluRmlsZVRvSVBGUyA9IGZ1bmN0aW9uIChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRmlsZVRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgcmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZyb21GUyA9IGZ1bmN0aW9uIChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5Gcm9tRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHNvdXJjZVBhdGgsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpTT05Ub0lQRlMgPSBmdW5jdGlvbiAoYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluSGFzaFRvSVBGUyA9IGZ1bmN0aW9uIChoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkhhc2hUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1Bpbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluSm9icyA9IGZ1bmN0aW9uIChmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBwaW5Kb2JzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKTtcbiAgICB9O1xuICAgIGNsaWVudC5yZW1vdmVQaW5Gcm9tSVBGUyA9IGZ1bmN0aW9uIChpcGZzUGluSGFzaCkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlUGluRnJvbUlQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoKTtcbiAgICB9O1xuICAgIGNsaWVudC50ZXN0QXV0aGVudGljYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0ZXN0QXV0aGVudGljYXRpb24ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkxpc3QgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluTGlzdChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpbkxpc3QgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gdXNlclBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpO1xuICAgIH07XG4gICAgY2xpZW50LnVzZXJQaW5uZWREYXRhVG90YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB1c2VyUGlubmVkRGF0YVRvdGFsKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB9O1xuICAgIHJldHVybiBjbGllbnQ7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVIb3N0Tm9kZXMsIHZhbGlkYXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkSGFzaFRvUGluUXVldWUocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1Bpbiwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBpZiAoIWhhc2hUb1Bpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhc2hUb1BpbiB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYWRkaW5nIGEgaGFzaCB0byB0aGUgcGluIHF1ZXVlJyk7XG4gICAgfVxuICAgIGlmICghaXNJUEZTLmNpZChoYXNoVG9QaW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaFRvUGluIHZhbHVlIGlzIGFuIGludmFsaWQgSVBGUyBDSUQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvYWRkSGFzaFRvUGluUXVldWVgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGhhc2hUb1BpbjogaGFzaFRvUGluXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmhvc3Rfbm9kZXMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlSG9zdE5vZGVzKG9wdGlvbnMuaG9zdF9ub2Rlcyk7XG4gICAgICAgICAgICBib2R5Lmhvc3Rfbm9kZXMgPSBvcHRpb25zLmhvc3Rfbm9kZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICBib2R5LnBpbmF0YU1ldGFkYXRhID0gb3B0aW9ucy5waW5hdGFNZXRhZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYWRkaW5nIHRvIHBpbiBxdWV1ZTogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UodXRpbHMubWVyZ2UoZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IHV0aWxzLm1lcmdlKHtcbiAgICAgIHVybDogYXJndW1lbnRzWzBdXG4gICAgfSwgYXJndW1lbnRzWzFdKTtcbiAgfVxuXG4gIGNvbmZpZyA9IHV0aWxzLm1lcmdlKGRlZmF1bHRzLCB7bWV0aG9kOiAnZ2V0J30sIHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgZGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciBoZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG4gICAgdmFyIHRpbWVyO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCFoZWFkZXJzWydVc2VyLUFnZW50J10gJiYgIWhlYWRlcnNbJ3VzZXItYWdlbnQnXSkge1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBwa2cudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiBkYXRhIGV4aXN0c1xuICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICB2YXIgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICBhdXRoID0gdXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKGNvbmZpZy51cmwpO1xuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonO1xuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC5hdXRoKSB7XG4gICAgICB2YXIgdXJsQXV0aCA9IHBhcnNlZC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgdXJsVXNlcm5hbWUgPSB1cmxBdXRoWzBdIHx8ICcnO1xuICAgICAgdmFyIHVybFBhc3N3b3JkID0gdXJsQXV0aFsxXSB8fCAnJztcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmIChhdXRoKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIHZhciBpc0h0dHBzID0gcHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIHZhciBhZ2VudCA9IGlzSHR0cHMgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogYWdlbnQsXG4gICAgICBhdXRoOiBhdXRoXG4gICAgfTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG5cbiAgICB2YXIgcHJveHkgPSBjb25maWcucHJveHk7XG4gICAgaWYgKCFwcm94eSAmJiBwcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcm94eUVudiA9IHByb3RvY29sLnNsaWNlKDAsIC0xKSArICdfcHJveHknO1xuICAgICAgdmFyIHByb3h5VXJsID0gcHJvY2Vzcy5lbnZbcHJveHlFbnZdIHx8IHByb2Nlc3MuZW52W3Byb3h5RW52LnRvVXBwZXJDYXNlKCldO1xuICAgICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICAgIHZhciBwYXJzZWRQcm94eVVybCA9IHVybC5wYXJzZShwcm94eVVybCk7XG4gICAgICAgIHByb3h5ID0ge1xuICAgICAgICAgIGhvc3Q6IHBhcnNlZFByb3h5VXJsLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGFyc2VkUHJveHlVcmwuYXV0aCkge1xuICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgcHJveHkuYXV0aCA9IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBwcm94eVVybEF1dGhbMF0sXG4gICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHByb3h5Lmhvc3Q7XG4gICAgICBvcHRpb25zLmhvc3QgPSBwcm94eS5ob3N0O1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHByb3h5LnBvcnQ7XG4gICAgICBvcHRpb25zLnBhdGggPSBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aDtcblxuICAgICAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICAgICAgaWYgKHByb3h5LmF1dGgpIHtcbiAgICAgICAgdmFyIGJhc2U2NCA9IG5ldyBCdWZmZXIocHJveHkuYXV0aC51c2VybmFtZSArICc6JyArIHByb3h5LmF1dGgucGFzc3dvcmQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0cmFuc3BvcnQ7XG4gICAgaWYgKGNvbmZpZy50cmFuc3BvcnQpIHtcbiAgICAgIHRyYW5zcG9ydCA9IGNvbmZpZy50cmFuc3BvcnQ7XG4gICAgfSBlbHNlIGlmIChjb25maWcubWF4UmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCAmJiBjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Q29udGVudExlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICB2YXIgcmVxID0gdHJhbnNwb3J0LnJlcXVlc3Qob3B0aW9ucywgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UocmVzKSB7XG4gICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgLy8gUmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQgc28ga2lsbCB0aW1lciB0aGF0IGhhbmRsZXMgcmVxdWVzdCB0aW1lb3V0XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG4gICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgIC8qZXNsaW50IGRlZmF1bHQtY2FzZTowKi9cbiAgICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgY2FzZSAnZGVmbGF0ZSc6XG4gICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgc3RyZWFtID0gc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHJlcXVlc3QgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgIHZhciBsYXN0UmVxdWVzdCA9IHJlcy5yZXEgfHwgcmVxO1xuXG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHN0cmVhbTtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbURhdGEoY2h1bmspIHtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29udGVudCBsZW5ndGggaXMgbm90IG92ZXIgdGhlIG1heENvbnRlbnRMZW5ndGggaWYgc3BlY2lmaWVkXG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoID4gLTEgJiYgQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcikubGVuZ3RoID4gY29uZmlnLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRW5kKCkge1xuICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGVycm9yc1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0RXJyb3IoZXJyKSB7XG4gICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHJlcXVlc3QgdGltZW91dFxuICAgIGlmIChjb25maWcudGltZW91dCAmJiAhdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXEpKTtcbiAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXNzZXJ0XCIpOyIsIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZVxuICAgICAgICAgICAgICAgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZS5zdG9yYWdlXG4gICAgICAgICAgICAgICAgICA/IGNocm9tZS5zdG9yYWdlLmxvY2FsXG4gICAgICAgICAgICAgICAgICA6IGxvY2Fsc3RvcmFnZSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcbiAgJyMwMDAwQ0MnLCAnIzAwMDBGRicsICcjMDAzM0NDJywgJyMwMDMzRkYnLCAnIzAwNjZDQycsICcjMDA2NkZGJywgJyMwMDk5Q0MnLFxuICAnIzAwOTlGRicsICcjMDBDQzAwJywgJyMwMENDMzMnLCAnIzAwQ0M2NicsICcjMDBDQzk5JywgJyMwMENDQ0MnLCAnIzAwQ0NGRicsXG4gICcjMzMwMENDJywgJyMzMzAwRkYnLCAnIzMzMzNDQycsICcjMzMzM0ZGJywgJyMzMzY2Q0MnLCAnIzMzNjZGRicsICcjMzM5OUNDJyxcbiAgJyMzMzk5RkYnLCAnIzMzQ0MwMCcsICcjMzNDQzMzJywgJyMzM0NDNjYnLCAnIzMzQ0M5OScsICcjMzNDQ0NDJywgJyMzM0NDRkYnLFxuICAnIzY2MDBDQycsICcjNjYwMEZGJywgJyM2NjMzQ0MnLCAnIzY2MzNGRicsICcjNjZDQzAwJywgJyM2NkNDMzMnLCAnIzk5MDBDQycsXG4gICcjOTkwMEZGJywgJyM5OTMzQ0MnLCAnIzk5MzNGRicsICcjOTlDQzAwJywgJyM5OUNDMzMnLCAnI0NDMDAwMCcsICcjQ0MwMDMzJyxcbiAgJyNDQzAwNjYnLCAnI0NDMDA5OScsICcjQ0MwMENDJywgJyNDQzAwRkYnLCAnI0NDMzMwMCcsICcjQ0MzMzMzJywgJyNDQzMzNjYnLFxuICAnI0NDMzM5OScsICcjQ0MzM0NDJywgJyNDQzMzRkYnLCAnI0NDNjYwMCcsICcjQ0M2NjMzJywgJyNDQzk5MDAnLCAnI0NDOTkzMycsXG4gICcjQ0NDQzAwJywgJyNDQ0NDMzMnLCAnI0ZGMDAwMCcsICcjRkYwMDMzJywgJyNGRjAwNjYnLCAnI0ZGMDA5OScsICcjRkYwMENDJyxcbiAgJyNGRjAwRkYnLCAnI0ZGMzMwMCcsICcjRkYzMzMzJywgJyNGRjMzNjYnLCAnI0ZGMzM5OScsICcjRkYzM0NDJywgJyNGRjMzRkYnLFxuICAnI0ZGNjYwMCcsICcjRkY2NjMzJywgJyNGRjk5MDAnLCAnI0ZGOTkzMycsICcjRkZDQzAwJywgJyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuICAvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuICAvLyBleHBsaWNpdGx5XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gIHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuICAgIC8vIGRvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnIubWVzc2FnZTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm47XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKVxuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cblxuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG4gIGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuICAgIHIgPSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oKD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICBpZiAobXMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtcyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgcmV0dXJuIHBsdXJhbChtcywgZCwgJ2RheScpIHx8XG4gICAgcGx1cmFsKG1zLCBoLCAnaG91cicpIHx8XG4gICAgcGx1cmFsKG1zLCBtLCAnbWludXRlJykgfHxcbiAgICBwbHVyYWwobXMsIHMsICdzZWNvbmQnKSB8fFxuICAgIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBuLCBuYW1lKSB7XG4gIGlmIChtcyA8IG4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1zIDwgbiAqIDEuNSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICB9XG4gIHJldHVybiBNYXRoLmNlaWwobXMgLyBuKSArICcgJyArIG5hbWUgKyAncyc7XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFsgNiwgMiwgMywgNCwgNSwgMSBdO1xuXG50cnkge1xuICB2YXIgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG4gIGlmIChzdXBwb3J0c0NvbG9yICYmIHN1cHBvcnRzQ29sb3IubGV2ZWwgPj0gMikge1xuICAgIGV4cG9ydHMuY29sb3JzID0gW1xuICAgICAgMjAsIDIxLCAyNiwgMjcsIDMyLCAzMywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA1NiwgNTcsIDYyLCA2MywgNjgsXG4gICAgICA2OSwgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA5MiwgOTMsIDk4LCA5OSwgMTEyLCAxMTMsIDEyOCwgMTI5LCAxMzQsXG4gICAgICAxMzUsIDE0OCwgMTQ5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLFxuICAgICAgMTcyLCAxNzMsIDE3OCwgMTc5LCAxODQsIDE4NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCxcbiAgICAgIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTQsIDIxNSwgMjIwLCAyMjFcbiAgICBdO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLy8gc3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZShmdW5jdGlvbiAob2JqLCBrZXkpIHtcbiAgLy8gY2FtZWwtY2FzZVxuICB2YXIgcHJvcCA9IGtleVxuICAgIC5zdWJzdHJpbmcoNilcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9fKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgaykgeyByZXR1cm4gay50b1VwcGVyQ2FzZSgpIH0pO1xuXG4gIC8vIGNvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuICB2YXIgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgaWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkgdmFsID0gdHJ1ZTtcbiAgZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHZhbCA9IGZhbHNlO1xuICBlbHNlIGlmICh2YWwgPT09ICdudWxsJykgdmFsID0gbnVsbDtcbiAgZWxzZSB2YWwgPSBOdW1iZXIodmFsKTtcblxuICBvYmpbcHJvcF0gPSB2YWw7XG4gIHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgcmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHNcbiAgICA/IEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpXG4gICAgOiB0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLm8gPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG4gIHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcbiAgICAuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBzdHIudHJpbSgpXG4gICAgfSkuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24odikge1xuICB0aGlzLmluc3BlY3RPcHRzLmNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuICByZXR1cm4gdXRpbC5pbnNwZWN0KHYsIHRoaXMuaW5zcGVjdE9wdHMpO1xufTtcblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLm5hbWVzcGFjZTtcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGlmICh1c2VDb2xvcnMpIHtcbiAgICB2YXIgYyA9IHRoaXMuY29sb3I7XG4gICAgdmFyIGNvbG9yQ29kZSA9ICdcXHUwMDFiWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuICAgIHZhciBwcmVmaXggPSAnICAnICsgY29sb3JDb2RlICsgJzsxbScgKyBuYW1lICsgJyAnICsgJ1xcdTAwMWJbMG0nO1xuXG4gICAgYXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuICAgIGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMWJbMG0nKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcbiAgaWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0KClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICByZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcbiAgICAvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdCAoZGVidWcpIHtcbiAgZGVidWcuaW5zcGVjdE9wdHMgPSB7fTtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG4gIH1cbn1cblxuLyoqXG4gKiBFbmFibGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gYHByb2Nlc3MuZW52LkRFQlVHYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInR0eVwiKTsiLCIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSkge1xuXHRmb3JjZUNvbG9yID0gZmFsc2U7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSB0cnVlO1xufVxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwIHx8IHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApICE9PSAwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihzdHJlYW0pIHtcblx0aWYgKGZvcmNlQ29sb3IgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoc3RyZWFtICYmICFzdHJlYW0uaXNUVFkgJiYgZm9yY2VDb2xvciAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciA/IDEgOiAwO1xuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gTm9kZS5qcyA3LjUuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiBvZiBOb2RlLmpzIHRvIGluY2x1ZGUgYSBwYXRjaCB0b1xuXHRcdC8vIGxpYnV2IHRoYXQgZW5hYmxlcyAyNTYgY29sb3Igb3V0cHV0IG9uIFdpbmRvd3MuIEFueXRoaW5nIGVhcmxpZXIgYW5kIGl0XG5cdFx0Ly8gd29uJ3Qgd29yay4gSG93ZXZlciwgaGVyZSB3ZSB0YXJnZXQgTm9kZS5qcyA4IGF0IG1pbmltdW0gYXMgaXQgaXMgYW4gTFRTXG5cdFx0Ly8gcmVsZWFzZSwgYW5kIE5vZGUuanMgNyBpcyBub3QuIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3Ncblx0XHQvLyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy4gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZVxuXHRcdC8vIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJylbMF0pID49IDggJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IHBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzpcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0pIHtcblx0Y29uc3QgbGV2ZWwgPSBzdXBwb3J0c0NvbG9yKHN0cmVhbSk7XG5cdHJldHVybiB0cmFuc2xhdGVMZXZlbChsZXZlbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdXBwb3J0c0NvbG9yOiBnZXRTdXBwb3J0TGV2ZWwsXG5cdHN0ZG91dDogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3Rkb3V0KSxcblx0c3RkZXJyOiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRlcnIpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gU3VwcG9ydCBiYXNlVVJMIGNvbmZpZ1xuICBpZiAoY29uZmlnLmJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcbiAgICBjb25maWcudXJsID0gY29tYmluZVVSTHMoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICB9XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVycyB8fCB7fVxuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCdWZmZXIucHJvdG90eXBlKVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogb2ZmICovXG4vKiBlc2xpbnQga2V5LXNwYWNpbmc6IG9mZiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgJ2lkZW50aXR5JzogICAweDAsXG4gICdzaGExJzogICAgICAgMHgxMSxcbiAgJ3NoYTItMjU2JzogICAweDEyLFxuICAnc2hhMi01MTInOiAgIDB4MTMsXG4gICdkYmwtc2hhMi0yNTYnOiAweDU2LFxuICAnc2hhMy0yMjQnOiAgIDB4MTcsXG4gICdzaGEzLTI1Nic6ICAgMHgxNixcbiAgJ3NoYTMtMzg0JzogICAweDE1LFxuICAnc2hhMy01MTInOiAgIDB4MTQsXG4gICdzaGFrZS0xMjgnOiAgMHgxOCxcbiAgJ3NoYWtlLTI1Nic6ICAweDE5LFxuICAna2VjY2FrLTIyNCc6IDB4MUEsXG4gICdrZWNjYWstMjU2JzogMHgxQixcbiAgJ2tlY2Nhay0zODQnOiAweDFDLFxuICAna2VjY2FrLTUxMic6IDB4MUQsXG4gICdtdXJtdXIzLTEyOCc6IDB4MjIsXG4gICdtdXJtdXIzLTMyJzogIDB4MjMsXG4gICdibGFrZTJiLTgnOiAgIDB4YjIwMSxcbiAgJ2JsYWtlMmItMTYnOiAgMHhiMjAyLFxuICAnYmxha2UyYi0yNCc6ICAweGIyMDMsXG4gICdibGFrZTJiLTMyJzogIDB4YjIwNCxcbiAgJ2JsYWtlMmItNDAnOiAgMHhiMjA1LFxuICAnYmxha2UyYi00OCc6ICAweGIyMDYsXG4gICdibGFrZTJiLTU2JzogIDB4YjIwNyxcbiAgJ2JsYWtlMmItNjQnOiAgMHhiMjA4LFxuICAnYmxha2UyYi03Mic6ICAweGIyMDksXG4gICdibGFrZTJiLTgwJzogIDB4YjIwYSxcbiAgJ2JsYWtlMmItODgnOiAgMHhiMjBiLFxuICAnYmxha2UyYi05Nic6ICAweGIyMGMsXG4gICdibGFrZTJiLTEwNCc6IDB4YjIwZCxcbiAgJ2JsYWtlMmItMTEyJzogMHhiMjBlLFxuICAnYmxha2UyYi0xMjAnOiAweGIyMGYsXG4gICdibGFrZTJiLTEyOCc6IDB4YjIxMCxcbiAgJ2JsYWtlMmItMTM2JzogMHhiMjExLFxuICAnYmxha2UyYi0xNDQnOiAweGIyMTIsXG4gICdibGFrZTJiLTE1Mic6IDB4YjIxMyxcbiAgJ2JsYWtlMmItMTYwJzogMHhiMjE0LFxuICAnYmxha2UyYi0xNjgnOiAweGIyMTUsXG4gICdibGFrZTJiLTE3Nic6IDB4YjIxNixcbiAgJ2JsYWtlMmItMTg0JzogMHhiMjE3LFxuICAnYmxha2UyYi0xOTInOiAweGIyMTgsXG4gICdibGFrZTJiLTIwMCc6IDB4YjIxOSxcbiAgJ2JsYWtlMmItMjA4JzogMHhiMjFhLFxuICAnYmxha2UyYi0yMTYnOiAweGIyMWIsXG4gICdibGFrZTJiLTIyNCc6IDB4YjIxYyxcbiAgJ2JsYWtlMmItMjMyJzogMHhiMjFkLFxuICAnYmxha2UyYi0yNDAnOiAweGIyMWUsXG4gICdibGFrZTJiLTI0OCc6IDB4YjIxZixcbiAgJ2JsYWtlMmItMjU2JzogMHhiMjIwLFxuICAnYmxha2UyYi0yNjQnOiAweGIyMjEsXG4gICdibGFrZTJiLTI3Mic6IDB4YjIyMixcbiAgJ2JsYWtlMmItMjgwJzogMHhiMjIzLFxuICAnYmxha2UyYi0yODgnOiAweGIyMjQsXG4gICdibGFrZTJiLTI5Nic6IDB4YjIyNSxcbiAgJ2JsYWtlMmItMzA0JzogMHhiMjI2LFxuICAnYmxha2UyYi0zMTInOiAweGIyMjcsXG4gICdibGFrZTJiLTMyMCc6IDB4YjIyOCxcbiAgJ2JsYWtlMmItMzI4JzogMHhiMjI5LFxuICAnYmxha2UyYi0zMzYnOiAweGIyMmEsXG4gICdibGFrZTJiLTM0NCc6IDB4YjIyYixcbiAgJ2JsYWtlMmItMzUyJzogMHhiMjJjLFxuICAnYmxha2UyYi0zNjAnOiAweGIyMmQsXG4gICdibGFrZTJiLTM2OCc6IDB4YjIyZSxcbiAgJ2JsYWtlMmItMzc2JzogMHhiMjJmLFxuICAnYmxha2UyYi0zODQnOiAweGIyMzAsXG4gICdibGFrZTJiLTM5Mic6IDB4YjIzMSxcbiAgJ2JsYWtlMmItNDAwJzogMHhiMjMyLFxuICAnYmxha2UyYi00MDgnOiAweGIyMzMsXG4gICdibGFrZTJiLTQxNic6IDB4YjIzNCxcbiAgJ2JsYWtlMmItNDI0JzogMHhiMjM1LFxuICAnYmxha2UyYi00MzInOiAweGIyMzYsXG4gICdibGFrZTJiLTQ0MCc6IDB4YjIzNyxcbiAgJ2JsYWtlMmItNDQ4JzogMHhiMjM4LFxuICAnYmxha2UyYi00NTYnOiAweGIyMzksXG4gICdibGFrZTJiLTQ2NCc6IDB4YjIzYSxcbiAgJ2JsYWtlMmItNDcyJzogMHhiMjNiLFxuICAnYmxha2UyYi00ODAnOiAweGIyM2MsXG4gICdibGFrZTJiLTQ4OCc6IDB4YjIzZCxcbiAgJ2JsYWtlMmItNDk2JzogMHhiMjNlLFxuICAnYmxha2UyYi01MDQnOiAweGIyM2YsXG4gICdibGFrZTJiLTUxMic6IDB4YjI0MCxcbiAgJ2JsYWtlMnMtOCc6ICAgMHhiMjQxLFxuICAnYmxha2Uycy0xNic6ICAweGIyNDIsXG4gICdibGFrZTJzLTI0JzogIDB4YjI0MyxcbiAgJ2JsYWtlMnMtMzInOiAgMHhiMjQ0LFxuICAnYmxha2Uycy00MCc6ICAweGIyNDUsXG4gICdibGFrZTJzLTQ4JzogIDB4YjI0NixcbiAgJ2JsYWtlMnMtNTYnOiAgMHhiMjQ3LFxuICAnYmxha2Uycy02NCc6ICAweGIyNDgsXG4gICdibGFrZTJzLTcyJzogIDB4YjI0OSxcbiAgJ2JsYWtlMnMtODAnOiAgMHhiMjRhLFxuICAnYmxha2Uycy04OCc6ICAweGIyNGIsXG4gICdibGFrZTJzLTk2JzogIDB4YjI0YyxcbiAgJ2JsYWtlMnMtMTA0JzogMHhiMjRkLFxuICAnYmxha2Uycy0xMTInOiAweGIyNGUsXG4gICdibGFrZTJzLTEyMCc6IDB4YjI0ZixcbiAgJ2JsYWtlMnMtMTI4JzogMHhiMjUwLFxuICAnYmxha2Uycy0xMzYnOiAweGIyNTEsXG4gICdibGFrZTJzLTE0NCc6IDB4YjI1MixcbiAgJ2JsYWtlMnMtMTUyJzogMHhiMjUzLFxuICAnYmxha2Uycy0xNjAnOiAweGIyNTQsXG4gICdibGFrZTJzLTE2OCc6IDB4YjI1NSxcbiAgJ2JsYWtlMnMtMTc2JzogMHhiMjU2LFxuICAnYmxha2Uycy0xODQnOiAweGIyNTcsXG4gICdibGFrZTJzLTE5Mic6IDB4YjI1OCxcbiAgJ2JsYWtlMnMtMjAwJzogMHhiMjU5LFxuICAnYmxha2Uycy0yMDgnOiAweGIyNWEsXG4gICdibGFrZTJzLTIxNic6IDB4YjI1YixcbiAgJ2JsYWtlMnMtMjI0JzogMHhiMjVjLFxuICAnYmxha2Uycy0yMzInOiAweGIyNWQsXG4gICdibGFrZTJzLTI0MCc6IDB4YjI1ZSxcbiAgJ2JsYWtlMnMtMjQ4JzogMHhiMjVmLFxuICAnYmxha2Uycy0yNTYnOiAweGIyNjAsXG4gICdTa2VpbjI1Ni04JzogMHhiMzAxLFxuICAnU2tlaW4yNTYtMTYnOiAweGIzMDIsXG4gICdTa2VpbjI1Ni0yNCc6IDB4YjMwMyxcbiAgJ1NrZWluMjU2LTMyJzogMHhiMzA0LFxuICAnU2tlaW4yNTYtNDAnOiAweGIzMDUsXG4gICdTa2VpbjI1Ni00OCc6IDB4YjMwNixcbiAgJ1NrZWluMjU2LTU2JzogMHhiMzA3LFxuICAnU2tlaW4yNTYtNjQnOiAweGIzMDgsXG4gICdTa2VpbjI1Ni03Mic6IDB4YjMwOSxcbiAgJ1NrZWluMjU2LTgwJzogMHhiMzBhLFxuICAnU2tlaW4yNTYtODgnOiAweGIzMGIsXG4gICdTa2VpbjI1Ni05Nic6IDB4YjMwYyxcbiAgJ1NrZWluMjU2LTEwNCc6IDB4YjMwZCxcbiAgJ1NrZWluMjU2LTExMic6IDB4YjMwZSxcbiAgJ1NrZWluMjU2LTEyMCc6IDB4YjMwZixcbiAgJ1NrZWluMjU2LTEyOCc6IDB4YjMxMCxcbiAgJ1NrZWluMjU2LTEzNic6IDB4YjMxMSxcbiAgJ1NrZWluMjU2LTE0NCc6IDB4YjMxMixcbiAgJ1NrZWluMjU2LTE1Mic6IDB4YjMxMyxcbiAgJ1NrZWluMjU2LTE2MCc6IDB4YjMxNCxcbiAgJ1NrZWluMjU2LTE2OCc6IDB4YjMxNSxcbiAgJ1NrZWluMjU2LTE3Nic6IDB4YjMxNixcbiAgJ1NrZWluMjU2LTE4NCc6IDB4YjMxNyxcbiAgJ1NrZWluMjU2LTE5Mic6IDB4YjMxOCxcbiAgJ1NrZWluMjU2LTIwMCc6IDB4YjMxOSxcbiAgJ1NrZWluMjU2LTIwOCc6IDB4YjMxYSxcbiAgJ1NrZWluMjU2LTIxNic6IDB4YjMxYixcbiAgJ1NrZWluMjU2LTIyNCc6IDB4YjMxYyxcbiAgJ1NrZWluMjU2LTIzMic6IDB4YjMxZCxcbiAgJ1NrZWluMjU2LTI0MCc6IDB4YjMxZSxcbiAgJ1NrZWluMjU2LTI0OCc6IDB4YjMxZixcbiAgJ1NrZWluMjU2LTI1Nic6IDB4YjMyMCxcbiAgJ1NrZWluNTEyLTgnOiAweGIzMjEsXG4gICdTa2VpbjUxMi0xNic6IDB4YjMyMixcbiAgJ1NrZWluNTEyLTI0JzogMHhiMzIzLFxuICAnU2tlaW41MTItMzInOiAweGIzMjQsXG4gICdTa2VpbjUxMi00MCc6IDB4YjMyNSxcbiAgJ1NrZWluNTEyLTQ4JzogMHhiMzI2LFxuICAnU2tlaW41MTItNTYnOiAweGIzMjcsXG4gICdTa2VpbjUxMi02NCc6IDB4YjMyOCxcbiAgJ1NrZWluNTEyLTcyJzogMHhiMzI5LFxuICAnU2tlaW41MTItODAnOiAweGIzMmEsXG4gICdTa2VpbjUxMi04OCc6IDB4YjMyYixcbiAgJ1NrZWluNTEyLTk2JzogMHhiMzJjLFxuICAnU2tlaW41MTItMTA0JzogMHhiMzJkLFxuICAnU2tlaW41MTItMTEyJzogMHhiMzJlLFxuICAnU2tlaW41MTItMTIwJzogMHhiMzJmLFxuICAnU2tlaW41MTItMTI4JzogMHhiMzMwLFxuICAnU2tlaW41MTItMTM2JzogMHhiMzMxLFxuICAnU2tlaW41MTItMTQ0JzogMHhiMzMyLFxuICAnU2tlaW41MTItMTUyJzogMHhiMzMzLFxuICAnU2tlaW41MTItMTYwJzogMHhiMzM0LFxuICAnU2tlaW41MTItMTY4JzogMHhiMzM1LFxuICAnU2tlaW41MTItMTc2JzogMHhiMzM2LFxuICAnU2tlaW41MTItMTg0JzogMHhiMzM3LFxuICAnU2tlaW41MTItMTkyJzogMHhiMzM4LFxuICAnU2tlaW41MTItMjAwJzogMHhiMzM5LFxuICAnU2tlaW41MTItMjA4JzogMHhiMzNhLFxuICAnU2tlaW41MTItMjE2JzogMHhiMzNiLFxuICAnU2tlaW41MTItMjI0JzogMHhiMzNjLFxuICAnU2tlaW41MTItMjMyJzogMHhiMzNkLFxuICAnU2tlaW41MTItMjQwJzogMHhiMzNlLFxuICAnU2tlaW41MTItMjQ4JzogMHhiMzNmLFxuICAnU2tlaW41MTItMjU2JzogMHhiMzQwLFxuICAnU2tlaW41MTItMjY0JzogMHhiMzQxLFxuICAnU2tlaW41MTItMjcyJzogMHhiMzQyLFxuICAnU2tlaW41MTItMjgwJzogMHhiMzQzLFxuICAnU2tlaW41MTItMjg4JzogMHhiMzQ0LFxuICAnU2tlaW41MTItMjk2JzogMHhiMzQ1LFxuICAnU2tlaW41MTItMzA0JzogMHhiMzQ2LFxuICAnU2tlaW41MTItMzEyJzogMHhiMzQ3LFxuICAnU2tlaW41MTItMzIwJzogMHhiMzQ4LFxuICAnU2tlaW41MTItMzI4JzogMHhiMzQ5LFxuICAnU2tlaW41MTItMzM2JzogMHhiMzRhLFxuICAnU2tlaW41MTItMzQ0JzogMHhiMzRiLFxuICAnU2tlaW41MTItMzUyJzogMHhiMzRjLFxuICAnU2tlaW41MTItMzYwJzogMHhiMzRkLFxuICAnU2tlaW41MTItMzY4JzogMHhiMzRlLFxuICAnU2tlaW41MTItMzc2JzogMHhiMzRmLFxuICAnU2tlaW41MTItMzg0JzogMHhiMzUwLFxuICAnU2tlaW41MTItMzkyJzogMHhiMzUxLFxuICAnU2tlaW41MTItNDAwJzogMHhiMzUyLFxuICAnU2tlaW41MTItNDA4JzogMHhiMzUzLFxuICAnU2tlaW41MTItNDE2JzogMHhiMzU0LFxuICAnU2tlaW41MTItNDI0JzogMHhiMzU1LFxuICAnU2tlaW41MTItNDMyJzogMHhiMzU2LFxuICAnU2tlaW41MTItNDQwJzogMHhiMzU3LFxuICAnU2tlaW41MTItNDQ4JzogMHhiMzU4LFxuICAnU2tlaW41MTItNDU2JzogMHhiMzU5LFxuICAnU2tlaW41MTItNDY0JzogMHhiMzVhLFxuICAnU2tlaW41MTItNDcyJzogMHhiMzViLFxuICAnU2tlaW41MTItNDgwJzogMHhiMzVjLFxuICAnU2tlaW41MTItNDg4JzogMHhiMzVkLFxuICAnU2tlaW41MTItNDk2JzogMHhiMzVlLFxuICAnU2tlaW41MTItNTA0JzogMHhiMzVmLFxuICAnU2tlaW41MTItNTEyJzogMHhiMzYwLFxuICAnU2tlaW4xMDI0LTgnOiAweGIzNjEsXG4gICdTa2VpbjEwMjQtMTYnOiAweGIzNjIsXG4gICdTa2VpbjEwMjQtMjQnOiAweGIzNjMsXG4gICdTa2VpbjEwMjQtMzInOiAweGIzNjQsXG4gICdTa2VpbjEwMjQtNDAnOiAweGIzNjUsXG4gICdTa2VpbjEwMjQtNDgnOiAweGIzNjYsXG4gICdTa2VpbjEwMjQtNTYnOiAweGIzNjcsXG4gICdTa2VpbjEwMjQtNjQnOiAweGIzNjgsXG4gICdTa2VpbjEwMjQtNzInOiAweGIzNjksXG4gICdTa2VpbjEwMjQtODAnOiAweGIzNmEsXG4gICdTa2VpbjEwMjQtODgnOiAweGIzNmIsXG4gICdTa2VpbjEwMjQtOTYnOiAweGIzNmMsXG4gICdTa2VpbjEwMjQtMTA0JzogMHhiMzZkLFxuICAnU2tlaW4xMDI0LTExMic6IDB4YjM2ZSxcbiAgJ1NrZWluMTAyNC0xMjAnOiAweGIzNmYsXG4gICdTa2VpbjEwMjQtMTI4JzogMHhiMzcwLFxuICAnU2tlaW4xMDI0LTEzNic6IDB4YjM3MSxcbiAgJ1NrZWluMTAyNC0xNDQnOiAweGIzNzIsXG4gICdTa2VpbjEwMjQtMTUyJzogMHhiMzczLFxuICAnU2tlaW4xMDI0LTE2MCc6IDB4YjM3NCxcbiAgJ1NrZWluMTAyNC0xNjgnOiAweGIzNzUsXG4gICdTa2VpbjEwMjQtMTc2JzogMHhiMzc2LFxuICAnU2tlaW4xMDI0LTE4NCc6IDB4YjM3NyxcbiAgJ1NrZWluMTAyNC0xOTInOiAweGIzNzgsXG4gICdTa2VpbjEwMjQtMjAwJzogMHhiMzc5LFxuICAnU2tlaW4xMDI0LTIwOCc6IDB4YjM3YSxcbiAgJ1NrZWluMTAyNC0yMTYnOiAweGIzN2IsXG4gICdTa2VpbjEwMjQtMjI0JzogMHhiMzdjLFxuICAnU2tlaW4xMDI0LTIzMic6IDB4YjM3ZCxcbiAgJ1NrZWluMTAyNC0yNDAnOiAweGIzN2UsXG4gICdTa2VpbjEwMjQtMjQ4JzogMHhiMzdmLFxuICAnU2tlaW4xMDI0LTI1Nic6IDB4YjM4MCxcbiAgJ1NrZWluMTAyNC0yNjQnOiAweGIzODEsXG4gICdTa2VpbjEwMjQtMjcyJzogMHhiMzgyLFxuICAnU2tlaW4xMDI0LTI4MCc6IDB4YjM4MyxcbiAgJ1NrZWluMTAyNC0yODgnOiAweGIzODQsXG4gICdTa2VpbjEwMjQtMjk2JzogMHhiMzg1LFxuICAnU2tlaW4xMDI0LTMwNCc6IDB4YjM4NixcbiAgJ1NrZWluMTAyNC0zMTInOiAweGIzODcsXG4gICdTa2VpbjEwMjQtMzIwJzogMHhiMzg4LFxuICAnU2tlaW4xMDI0LTMyOCc6IDB4YjM4OSxcbiAgJ1NrZWluMTAyNC0zMzYnOiAweGIzOGEsXG4gICdTa2VpbjEwMjQtMzQ0JzogMHhiMzhiLFxuICAnU2tlaW4xMDI0LTM1Mic6IDB4YjM4YyxcbiAgJ1NrZWluMTAyNC0zNjAnOiAweGIzOGQsXG4gICdTa2VpbjEwMjQtMzY4JzogMHhiMzhlLFxuICAnU2tlaW4xMDI0LTM3Nic6IDB4YjM4ZixcbiAgJ1NrZWluMTAyNC0zODQnOiAweGIzOTAsXG4gICdTa2VpbjEwMjQtMzkyJzogMHhiMzkxLFxuICAnU2tlaW4xMDI0LTQwMCc6IDB4YjM5MixcbiAgJ1NrZWluMTAyNC00MDgnOiAweGIzOTMsXG4gICdTa2VpbjEwMjQtNDE2JzogMHhiMzk0LFxuICAnU2tlaW4xMDI0LTQyNCc6IDB4YjM5NSxcbiAgJ1NrZWluMTAyNC00MzInOiAweGIzOTYsXG4gICdTa2VpbjEwMjQtNDQwJzogMHhiMzk3LFxuICAnU2tlaW4xMDI0LTQ0OCc6IDB4YjM5OCxcbiAgJ1NrZWluMTAyNC00NTYnOiAweGIzOTksXG4gICdTa2VpbjEwMjQtNDY0JzogMHhiMzlhLFxuICAnU2tlaW4xMDI0LTQ3Mic6IDB4YjM5YixcbiAgJ1NrZWluMTAyNC00ODAnOiAweGIzOWMsXG4gICdTa2VpbjEwMjQtNDg4JzogMHhiMzlkLFxuICAnU2tlaW4xMDI0LTQ5Nic6IDB4YjM5ZSxcbiAgJ1NrZWluMTAyNC01MDQnOiAweGIzOWYsXG4gICdTa2VpbjEwMjQtNTEyJzogMHhiM2EwLFxuICAnU2tlaW4xMDI0LTUyMCc6IDB4YjNhMSxcbiAgJ1NrZWluMTAyNC01MjgnOiAweGIzYTIsXG4gICdTa2VpbjEwMjQtNTM2JzogMHhiM2EzLFxuICAnU2tlaW4xMDI0LTU0NCc6IDB4YjNhNCxcbiAgJ1NrZWluMTAyNC01NTInOiAweGIzYTUsXG4gICdTa2VpbjEwMjQtNTYwJzogMHhiM2E2LFxuICAnU2tlaW4xMDI0LTU2OCc6IDB4YjNhNyxcbiAgJ1NrZWluMTAyNC01NzYnOiAweGIzYTgsXG4gICdTa2VpbjEwMjQtNTg0JzogMHhiM2E5LFxuICAnU2tlaW4xMDI0LTU5Mic6IDB4YjNhYSxcbiAgJ1NrZWluMTAyNC02MDAnOiAweGIzYWIsXG4gICdTa2VpbjEwMjQtNjA4JzogMHhiM2FjLFxuICAnU2tlaW4xMDI0LTYxNic6IDB4YjNhZCxcbiAgJ1NrZWluMTAyNC02MjQnOiAweGIzYWUsXG4gICdTa2VpbjEwMjQtNjMyJzogMHhiM2FmLFxuICAnU2tlaW4xMDI0LTY0MCc6IDB4YjNiMCxcbiAgJ1NrZWluMTAyNC02NDgnOiAweGIzYjEsXG4gICdTa2VpbjEwMjQtNjU2JzogMHhiM2IyLFxuICAnU2tlaW4xMDI0LTY2NCc6IDB4YjNiMyxcbiAgJ1NrZWluMTAyNC02NzInOiAweGIzYjQsXG4gICdTa2VpbjEwMjQtNjgwJzogMHhiM2I1LFxuICAnU2tlaW4xMDI0LTY4OCc6IDB4YjNiNixcbiAgJ1NrZWluMTAyNC02OTYnOiAweGIzYjcsXG4gICdTa2VpbjEwMjQtNzA0JzogMHhiM2I4LFxuICAnU2tlaW4xMDI0LTcxMic6IDB4YjNiOSxcbiAgJ1NrZWluMTAyNC03MjAnOiAweGIzYmEsXG4gICdTa2VpbjEwMjQtNzI4JzogMHhiM2JiLFxuICAnU2tlaW4xMDI0LTczNic6IDB4YjNiYyxcbiAgJ1NrZWluMTAyNC03NDQnOiAweGIzYmQsXG4gICdTa2VpbjEwMjQtNzUyJzogMHhiM2JlLFxuICAnU2tlaW4xMDI0LTc2MCc6IDB4YjNiZixcbiAgJ1NrZWluMTAyNC03NjgnOiAweGIzYzAsXG4gICdTa2VpbjEwMjQtNzc2JzogMHhiM2MxLFxuICAnU2tlaW4xMDI0LTc4NCc6IDB4YjNjMixcbiAgJ1NrZWluMTAyNC03OTInOiAweGIzYzMsXG4gICdTa2VpbjEwMjQtODAwJzogMHhiM2M0LFxuICAnU2tlaW4xMDI0LTgwOCc6IDB4YjNjNSxcbiAgJ1NrZWluMTAyNC04MTYnOiAweGIzYzYsXG4gICdTa2VpbjEwMjQtODI0JzogMHhiM2M3LFxuICAnU2tlaW4xMDI0LTgzMic6IDB4YjNjOCxcbiAgJ1NrZWluMTAyNC04NDAnOiAweGIzYzksXG4gICdTa2VpbjEwMjQtODQ4JzogMHhiM2NhLFxuICAnU2tlaW4xMDI0LTg1Nic6IDB4YjNjYixcbiAgJ1NrZWluMTAyNC04NjQnOiAweGIzY2MsXG4gICdTa2VpbjEwMjQtODcyJzogMHhiM2NkLFxuICAnU2tlaW4xMDI0LTg4MCc6IDB4YjNjZSxcbiAgJ1NrZWluMTAyNC04ODgnOiAweGIzY2YsXG4gICdTa2VpbjEwMjQtODk2JzogMHhiM2QwLFxuICAnU2tlaW4xMDI0LTkwNCc6IDB4YjNkMSxcbiAgJ1NrZWluMTAyNC05MTInOiAweGIzZDIsXG4gICdTa2VpbjEwMjQtOTIwJzogMHhiM2QzLFxuICAnU2tlaW4xMDI0LTkyOCc6IDB4YjNkNCxcbiAgJ1NrZWluMTAyNC05MzYnOiAweGIzZDUsXG4gICdTa2VpbjEwMjQtOTQ0JzogMHhiM2Q2LFxuICAnU2tlaW4xMDI0LTk1Mic6IDB4YjNkNyxcbiAgJ1NrZWluMTAyNC05NjAnOiAweGIzZDgsXG4gICdTa2VpbjEwMjQtOTY4JzogMHhiM2Q5LFxuICAnU2tlaW4xMDI0LTk3Nic6IDB4YjNkYSxcbiAgJ1NrZWluMTAyNC05ODQnOiAweGIzZGIsXG4gICdTa2VpbjEwMjQtOTkyJzogMHhiM2RjLFxuICAnU2tlaW4xMDI0LTEwMDAnOiAweGIzZGQsXG4gICdTa2VpbjEwMjQtMTAwOCc6IDB4YjNkZSxcbiAgJ1NrZWluMTAyNC0xMDE2JzogMHhiM2RmLFxuICAnU2tlaW4xMDI0LTEwMjQnOiAweGIzZTBcbn0pXG5cbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgwOiAnaWRlbnRpdHknLFxuXG4gIC8vIHNoYSBmYW1pbHlcbiAgMHgxMTogJ3NoYTEnLFxuICAweDEyOiAnc2hhMi0yNTYnLFxuICAweDEzOiAnc2hhMi01MTInLFxuICAweDU2OiAnZGJsLXNoYTItMjU2JyxcbiAgMHgxNzogJ3NoYTMtMjI0JyxcbiAgMHgxNjogJ3NoYTMtMjU2JyxcbiAgMHgxNTogJ3NoYTMtMzg0JyxcbiAgMHgxNDogJ3NoYTMtNTEyJyxcbiAgMHgxODogJ3NoYWtlLTEyOCcsXG4gIDB4MTk6ICdzaGFrZS0yNTYnLFxuICAweDFBOiAna2VjY2FrLTIyNCcsXG4gIDB4MUI6ICdrZWNjYWstMjU2JyxcbiAgMHgxQzogJ2tlY2Nhay0zODQnLFxuICAweDFEOiAna2VjY2FrLTUxMicsXG5cbiAgMHgyMjogJ211cm11cjMtMTI4JyxcbiAgMHgyMzogJ211cm11cjMtMzInLFxuXG4gIC8vIGJsYWtlMlxuICAweGIyMDE6ICdibGFrZTJiLTgnLFxuICAweGIyMDI6ICdibGFrZTJiLTE2JyxcbiAgMHhiMjAzOiAnYmxha2UyYi0yNCcsXG4gIDB4YjIwNDogJ2JsYWtlMmItMzInLFxuICAweGIyMDU6ICdibGFrZTJiLTQwJyxcbiAgMHhiMjA2OiAnYmxha2UyYi00OCcsXG4gIDB4YjIwNzogJ2JsYWtlMmItNTYnLFxuICAweGIyMDg6ICdibGFrZTJiLTY0JyxcbiAgMHhiMjA5OiAnYmxha2UyYi03MicsXG4gIDB4YjIwYTogJ2JsYWtlMmItODAnLFxuICAweGIyMGI6ICdibGFrZTJiLTg4JyxcbiAgMHhiMjBjOiAnYmxha2UyYi05NicsXG4gIDB4YjIwZDogJ2JsYWtlMmItMTA0JyxcbiAgMHhiMjBlOiAnYmxha2UyYi0xMTInLFxuICAweGIyMGY6ICdibGFrZTJiLTEyMCcsXG4gIDB4YjIxMDogJ2JsYWtlMmItMTI4JyxcbiAgMHhiMjExOiAnYmxha2UyYi0xMzYnLFxuICAweGIyMTI6ICdibGFrZTJiLTE0NCcsXG4gIDB4YjIxMzogJ2JsYWtlMmItMTUyJyxcbiAgMHhiMjE0OiAnYmxha2UyYi0xNjAnLFxuICAweGIyMTU6ICdibGFrZTJiLTE2OCcsXG4gIDB4YjIxNjogJ2JsYWtlMmItMTc2JyxcbiAgMHhiMjE3OiAnYmxha2UyYi0xODQnLFxuICAweGIyMTg6ICdibGFrZTJiLTE5MicsXG4gIDB4YjIxOTogJ2JsYWtlMmItMjAwJyxcbiAgMHhiMjFhOiAnYmxha2UyYi0yMDgnLFxuICAweGIyMWI6ICdibGFrZTJiLTIxNicsXG4gIDB4YjIxYzogJ2JsYWtlMmItMjI0JyxcbiAgMHhiMjFkOiAnYmxha2UyYi0yMzInLFxuICAweGIyMWU6ICdibGFrZTJiLTI0MCcsXG4gIDB4YjIxZjogJ2JsYWtlMmItMjQ4JyxcbiAgMHhiMjIwOiAnYmxha2UyYi0yNTYnLFxuICAweGIyMjE6ICdibGFrZTJiLTI2NCcsXG4gIDB4YjIyMjogJ2JsYWtlMmItMjcyJyxcbiAgMHhiMjIzOiAnYmxha2UyYi0yODAnLFxuICAweGIyMjQ6ICdibGFrZTJiLTI4OCcsXG4gIDB4YjIyNTogJ2JsYWtlMmItMjk2JyxcbiAgMHhiMjI2OiAnYmxha2UyYi0zMDQnLFxuICAweGIyMjc6ICdibGFrZTJiLTMxMicsXG4gIDB4YjIyODogJ2JsYWtlMmItMzIwJyxcbiAgMHhiMjI5OiAnYmxha2UyYi0zMjgnLFxuICAweGIyMmE6ICdibGFrZTJiLTMzNicsXG4gIDB4YjIyYjogJ2JsYWtlMmItMzQ0JyxcbiAgMHhiMjJjOiAnYmxha2UyYi0zNTInLFxuICAweGIyMmQ6ICdibGFrZTJiLTM2MCcsXG4gIDB4YjIyZTogJ2JsYWtlMmItMzY4JyxcbiAgMHhiMjJmOiAnYmxha2UyYi0zNzYnLFxuICAweGIyMzA6ICdibGFrZTJiLTM4NCcsXG4gIDB4YjIzMTogJ2JsYWtlMmItMzkyJyxcbiAgMHhiMjMyOiAnYmxha2UyYi00MDAnLFxuICAweGIyMzM6ICdibGFrZTJiLTQwOCcsXG4gIDB4YjIzNDogJ2JsYWtlMmItNDE2JyxcbiAgMHhiMjM1OiAnYmxha2UyYi00MjQnLFxuICAweGIyMzY6ICdibGFrZTJiLTQzMicsXG4gIDB4YjIzNzogJ2JsYWtlMmItNDQwJyxcbiAgMHhiMjM4OiAnYmxha2UyYi00NDgnLFxuICAweGIyMzk6ICdibGFrZTJiLTQ1NicsXG4gIDB4YjIzYTogJ2JsYWtlMmItNDY0JyxcbiAgMHhiMjNiOiAnYmxha2UyYi00NzInLFxuICAweGIyM2M6ICdibGFrZTJiLTQ4MCcsXG4gIDB4YjIzZDogJ2JsYWtlMmItNDg4JyxcbiAgMHhiMjNlOiAnYmxha2UyYi00OTYnLFxuICAweGIyM2Y6ICdibGFrZTJiLTUwNCcsXG4gIDB4YjI0MDogJ2JsYWtlMmItNTEyJyxcbiAgMHhiMjQxOiAnYmxha2Uycy04JyxcbiAgMHhiMjQyOiAnYmxha2Uycy0xNicsXG4gIDB4YjI0MzogJ2JsYWtlMnMtMjQnLFxuICAweGIyNDQ6ICdibGFrZTJzLTMyJyxcbiAgMHhiMjQ1OiAnYmxha2Uycy00MCcsXG4gIDB4YjI0NjogJ2JsYWtlMnMtNDgnLFxuICAweGIyNDc6ICdibGFrZTJzLTU2JyxcbiAgMHhiMjQ4OiAnYmxha2Uycy02NCcsXG4gIDB4YjI0OTogJ2JsYWtlMnMtNzInLFxuICAweGIyNGE6ICdibGFrZTJzLTgwJyxcbiAgMHhiMjRiOiAnYmxha2Uycy04OCcsXG4gIDB4YjI0YzogJ2JsYWtlMnMtOTYnLFxuICAweGIyNGQ6ICdibGFrZTJzLTEwNCcsXG4gIDB4YjI0ZTogJ2JsYWtlMnMtMTEyJyxcbiAgMHhiMjRmOiAnYmxha2Uycy0xMjAnLFxuICAweGIyNTA6ICdibGFrZTJzLTEyOCcsXG4gIDB4YjI1MTogJ2JsYWtlMnMtMTM2JyxcbiAgMHhiMjUyOiAnYmxha2Uycy0xNDQnLFxuICAweGIyNTM6ICdibGFrZTJzLTE1MicsXG4gIDB4YjI1NDogJ2JsYWtlMnMtMTYwJyxcbiAgMHhiMjU1OiAnYmxha2Uycy0xNjgnLFxuICAweGIyNTY6ICdibGFrZTJzLTE3NicsXG4gIDB4YjI1NzogJ2JsYWtlMnMtMTg0JyxcbiAgMHhiMjU4OiAnYmxha2Uycy0xOTInLFxuICAweGIyNTk6ICdibGFrZTJzLTIwMCcsXG4gIDB4YjI1YTogJ2JsYWtlMnMtMjA4JyxcbiAgMHhiMjViOiAnYmxha2Uycy0yMTYnLFxuICAweGIyNWM6ICdibGFrZTJzLTIyNCcsXG4gIDB4YjI1ZDogJ2JsYWtlMnMtMjMyJyxcbiAgMHhiMjVlOiAnYmxha2Uycy0yNDAnLFxuICAweGIyNWY6ICdibGFrZTJzLTI0OCcsXG4gIDB4YjI2MDogJ2JsYWtlMnMtMjU2JyxcblxuICAvLyBza2VpblxuICAweGIzMDE6ICdTa2VpbjI1Ni04JyxcbiAgMHhiMzAyOiAnU2tlaW4yNTYtMTYnLFxuICAweGIzMDM6ICdTa2VpbjI1Ni0yNCcsXG4gIDB4YjMwNDogJ1NrZWluMjU2LTMyJyxcbiAgMHhiMzA1OiAnU2tlaW4yNTYtNDAnLFxuICAweGIzMDY6ICdTa2VpbjI1Ni00OCcsXG4gIDB4YjMwNzogJ1NrZWluMjU2LTU2JyxcbiAgMHhiMzA4OiAnU2tlaW4yNTYtNjQnLFxuICAweGIzMDk6ICdTa2VpbjI1Ni03MicsXG4gIDB4YjMwYTogJ1NrZWluMjU2LTgwJyxcbiAgMHhiMzBiOiAnU2tlaW4yNTYtODgnLFxuICAweGIzMGM6ICdTa2VpbjI1Ni05NicsXG4gIDB4YjMwZDogJ1NrZWluMjU2LTEwNCcsXG4gIDB4YjMwZTogJ1NrZWluMjU2LTExMicsXG4gIDB4YjMwZjogJ1NrZWluMjU2LTEyMCcsXG4gIDB4YjMxMDogJ1NrZWluMjU2LTEyOCcsXG4gIDB4YjMxMTogJ1NrZWluMjU2LTEzNicsXG4gIDB4YjMxMjogJ1NrZWluMjU2LTE0NCcsXG4gIDB4YjMxMzogJ1NrZWluMjU2LTE1MicsXG4gIDB4YjMxNDogJ1NrZWluMjU2LTE2MCcsXG4gIDB4YjMxNTogJ1NrZWluMjU2LTE2OCcsXG4gIDB4YjMxNjogJ1NrZWluMjU2LTE3NicsXG4gIDB4YjMxNzogJ1NrZWluMjU2LTE4NCcsXG4gIDB4YjMxODogJ1NrZWluMjU2LTE5MicsXG4gIDB4YjMxOTogJ1NrZWluMjU2LTIwMCcsXG4gIDB4YjMxYTogJ1NrZWluMjU2LTIwOCcsXG4gIDB4YjMxYjogJ1NrZWluMjU2LTIxNicsXG4gIDB4YjMxYzogJ1NrZWluMjU2LTIyNCcsXG4gIDB4YjMxZDogJ1NrZWluMjU2LTIzMicsXG4gIDB4YjMxZTogJ1NrZWluMjU2LTI0MCcsXG4gIDB4YjMxZjogJ1NrZWluMjU2LTI0OCcsXG4gIDB4YjMyMDogJ1NrZWluMjU2LTI1NicsXG4gIDB4YjMyMTogJ1NrZWluNTEyLTgnLFxuICAweGIzMjI6ICdTa2VpbjUxMi0xNicsXG4gIDB4YjMyMzogJ1NrZWluNTEyLTI0JyxcbiAgMHhiMzI0OiAnU2tlaW41MTItMzInLFxuICAweGIzMjU6ICdTa2VpbjUxMi00MCcsXG4gIDB4YjMyNjogJ1NrZWluNTEyLTQ4JyxcbiAgMHhiMzI3OiAnU2tlaW41MTItNTYnLFxuICAweGIzMjg6ICdTa2VpbjUxMi02NCcsXG4gIDB4YjMyOTogJ1NrZWluNTEyLTcyJyxcbiAgMHhiMzJhOiAnU2tlaW41MTItODAnLFxuICAweGIzMmI6ICdTa2VpbjUxMi04OCcsXG4gIDB4YjMyYzogJ1NrZWluNTEyLTk2JyxcbiAgMHhiMzJkOiAnU2tlaW41MTItMTA0JyxcbiAgMHhiMzJlOiAnU2tlaW41MTItMTEyJyxcbiAgMHhiMzJmOiAnU2tlaW41MTItMTIwJyxcbiAgMHhiMzMwOiAnU2tlaW41MTItMTI4JyxcbiAgMHhiMzMxOiAnU2tlaW41MTItMTM2JyxcbiAgMHhiMzMyOiAnU2tlaW41MTItMTQ0JyxcbiAgMHhiMzMzOiAnU2tlaW41MTItMTUyJyxcbiAgMHhiMzM0OiAnU2tlaW41MTItMTYwJyxcbiAgMHhiMzM1OiAnU2tlaW41MTItMTY4JyxcbiAgMHhiMzM2OiAnU2tlaW41MTItMTc2JyxcbiAgMHhiMzM3OiAnU2tlaW41MTItMTg0JyxcbiAgMHhiMzM4OiAnU2tlaW41MTItMTkyJyxcbiAgMHhiMzM5OiAnU2tlaW41MTItMjAwJyxcbiAgMHhiMzNhOiAnU2tlaW41MTItMjA4JyxcbiAgMHhiMzNiOiAnU2tlaW41MTItMjE2JyxcbiAgMHhiMzNjOiAnU2tlaW41MTItMjI0JyxcbiAgMHhiMzNkOiAnU2tlaW41MTItMjMyJyxcbiAgMHhiMzNlOiAnU2tlaW41MTItMjQwJyxcbiAgMHhiMzNmOiAnU2tlaW41MTItMjQ4JyxcbiAgMHhiMzQwOiAnU2tlaW41MTItMjU2JyxcbiAgMHhiMzQxOiAnU2tlaW41MTItMjY0JyxcbiAgMHhiMzQyOiAnU2tlaW41MTItMjcyJyxcbiAgMHhiMzQzOiAnU2tlaW41MTItMjgwJyxcbiAgMHhiMzQ0OiAnU2tlaW41MTItMjg4JyxcbiAgMHhiMzQ1OiAnU2tlaW41MTItMjk2JyxcbiAgMHhiMzQ2OiAnU2tlaW41MTItMzA0JyxcbiAgMHhiMzQ3OiAnU2tlaW41MTItMzEyJyxcbiAgMHhiMzQ4OiAnU2tlaW41MTItMzIwJyxcbiAgMHhiMzQ5OiAnU2tlaW41MTItMzI4JyxcbiAgMHhiMzRhOiAnU2tlaW41MTItMzM2JyxcbiAgMHhiMzRiOiAnU2tlaW41MTItMzQ0JyxcbiAgMHhiMzRjOiAnU2tlaW41MTItMzUyJyxcbiAgMHhiMzRkOiAnU2tlaW41MTItMzYwJyxcbiAgMHhiMzRlOiAnU2tlaW41MTItMzY4JyxcbiAgMHhiMzRmOiAnU2tlaW41MTItMzc2JyxcbiAgMHhiMzUwOiAnU2tlaW41MTItMzg0JyxcbiAgMHhiMzUxOiAnU2tlaW41MTItMzkyJyxcbiAgMHhiMzUyOiAnU2tlaW41MTItNDAwJyxcbiAgMHhiMzUzOiAnU2tlaW41MTItNDA4JyxcbiAgMHhiMzU0OiAnU2tlaW41MTItNDE2JyxcbiAgMHhiMzU1OiAnU2tlaW41MTItNDI0JyxcbiAgMHhiMzU2OiAnU2tlaW41MTItNDMyJyxcbiAgMHhiMzU3OiAnU2tlaW41MTItNDQwJyxcbiAgMHhiMzU4OiAnU2tlaW41MTItNDQ4JyxcbiAgMHhiMzU5OiAnU2tlaW41MTItNDU2JyxcbiAgMHhiMzVhOiAnU2tlaW41MTItNDY0JyxcbiAgMHhiMzViOiAnU2tlaW41MTItNDcyJyxcbiAgMHhiMzVjOiAnU2tlaW41MTItNDgwJyxcbiAgMHhiMzVkOiAnU2tlaW41MTItNDg4JyxcbiAgMHhiMzVlOiAnU2tlaW41MTItNDk2JyxcbiAgMHhiMzVmOiAnU2tlaW41MTItNTA0JyxcbiAgMHhiMzYwOiAnU2tlaW41MTItNTEyJyxcbiAgMHhiMzYxOiAnU2tlaW4xMDI0LTgnLFxuICAweGIzNjI6ICdTa2VpbjEwMjQtMTYnLFxuICAweGIzNjM6ICdTa2VpbjEwMjQtMjQnLFxuICAweGIzNjQ6ICdTa2VpbjEwMjQtMzInLFxuICAweGIzNjU6ICdTa2VpbjEwMjQtNDAnLFxuICAweGIzNjY6ICdTa2VpbjEwMjQtNDgnLFxuICAweGIzNjc6ICdTa2VpbjEwMjQtNTYnLFxuICAweGIzNjg6ICdTa2VpbjEwMjQtNjQnLFxuICAweGIzNjk6ICdTa2VpbjEwMjQtNzInLFxuICAweGIzNmE6ICdTa2VpbjEwMjQtODAnLFxuICAweGIzNmI6ICdTa2VpbjEwMjQtODgnLFxuICAweGIzNmM6ICdTa2VpbjEwMjQtOTYnLFxuICAweGIzNmQ6ICdTa2VpbjEwMjQtMTA0JyxcbiAgMHhiMzZlOiAnU2tlaW4xMDI0LTExMicsXG4gIDB4YjM2ZjogJ1NrZWluMTAyNC0xMjAnLFxuICAweGIzNzA6ICdTa2VpbjEwMjQtMTI4JyxcbiAgMHhiMzcxOiAnU2tlaW4xMDI0LTEzNicsXG4gIDB4YjM3MjogJ1NrZWluMTAyNC0xNDQnLFxuICAweGIzNzM6ICdTa2VpbjEwMjQtMTUyJyxcbiAgMHhiMzc0OiAnU2tlaW4xMDI0LTE2MCcsXG4gIDB4YjM3NTogJ1NrZWluMTAyNC0xNjgnLFxuICAweGIzNzY6ICdTa2VpbjEwMjQtMTc2JyxcbiAgMHhiMzc3OiAnU2tlaW4xMDI0LTE4NCcsXG4gIDB4YjM3ODogJ1NrZWluMTAyNC0xOTInLFxuICAweGIzNzk6ICdTa2VpbjEwMjQtMjAwJyxcbiAgMHhiMzdhOiAnU2tlaW4xMDI0LTIwOCcsXG4gIDB4YjM3YjogJ1NrZWluMTAyNC0yMTYnLFxuICAweGIzN2M6ICdTa2VpbjEwMjQtMjI0JyxcbiAgMHhiMzdkOiAnU2tlaW4xMDI0LTIzMicsXG4gIDB4YjM3ZTogJ1NrZWluMTAyNC0yNDAnLFxuICAweGIzN2Y6ICdTa2VpbjEwMjQtMjQ4JyxcbiAgMHhiMzgwOiAnU2tlaW4xMDI0LTI1NicsXG4gIDB4YjM4MTogJ1NrZWluMTAyNC0yNjQnLFxuICAweGIzODI6ICdTa2VpbjEwMjQtMjcyJyxcbiAgMHhiMzgzOiAnU2tlaW4xMDI0LTI4MCcsXG4gIDB4YjM4NDogJ1NrZWluMTAyNC0yODgnLFxuICAweGIzODU6ICdTa2VpbjEwMjQtMjk2JyxcbiAgMHhiMzg2OiAnU2tlaW4xMDI0LTMwNCcsXG4gIDB4YjM4NzogJ1NrZWluMTAyNC0zMTInLFxuICAweGIzODg6ICdTa2VpbjEwMjQtMzIwJyxcbiAgMHhiMzg5OiAnU2tlaW4xMDI0LTMyOCcsXG4gIDB4YjM4YTogJ1NrZWluMTAyNC0zMzYnLFxuICAweGIzOGI6ICdTa2VpbjEwMjQtMzQ0JyxcbiAgMHhiMzhjOiAnU2tlaW4xMDI0LTM1MicsXG4gIDB4YjM4ZDogJ1NrZWluMTAyNC0zNjAnLFxuICAweGIzOGU6ICdTa2VpbjEwMjQtMzY4JyxcbiAgMHhiMzhmOiAnU2tlaW4xMDI0LTM3NicsXG4gIDB4YjM5MDogJ1NrZWluMTAyNC0zODQnLFxuICAweGIzOTE6ICdTa2VpbjEwMjQtMzkyJyxcbiAgMHhiMzkyOiAnU2tlaW4xMDI0LTQwMCcsXG4gIDB4YjM5MzogJ1NrZWluMTAyNC00MDgnLFxuICAweGIzOTQ6ICdTa2VpbjEwMjQtNDE2JyxcbiAgMHhiMzk1OiAnU2tlaW4xMDI0LTQyNCcsXG4gIDB4YjM5NjogJ1NrZWluMTAyNC00MzInLFxuICAweGIzOTc6ICdTa2VpbjEwMjQtNDQwJyxcbiAgMHhiMzk4OiAnU2tlaW4xMDI0LTQ0OCcsXG4gIDB4YjM5OTogJ1NrZWluMTAyNC00NTYnLFxuICAweGIzOWE6ICdTa2VpbjEwMjQtNDY0JyxcbiAgMHhiMzliOiAnU2tlaW4xMDI0LTQ3MicsXG4gIDB4YjM5YzogJ1NrZWluMTAyNC00ODAnLFxuICAweGIzOWQ6ICdTa2VpbjEwMjQtNDg4JyxcbiAgMHhiMzllOiAnU2tlaW4xMDI0LTQ5NicsXG4gIDB4YjM5ZjogJ1NrZWluMTAyNC01MDQnLFxuICAweGIzYTA6ICdTa2VpbjEwMjQtNTEyJyxcbiAgMHhiM2ExOiAnU2tlaW4xMDI0LTUyMCcsXG4gIDB4YjNhMjogJ1NrZWluMTAyNC01MjgnLFxuICAweGIzYTM6ICdTa2VpbjEwMjQtNTM2JyxcbiAgMHhiM2E0OiAnU2tlaW4xMDI0LTU0NCcsXG4gIDB4YjNhNTogJ1NrZWluMTAyNC01NTInLFxuICAweGIzYTY6ICdTa2VpbjEwMjQtNTYwJyxcbiAgMHhiM2E3OiAnU2tlaW4xMDI0LTU2OCcsXG4gIDB4YjNhODogJ1NrZWluMTAyNC01NzYnLFxuICAweGIzYTk6ICdTa2VpbjEwMjQtNTg0JyxcbiAgMHhiM2FhOiAnU2tlaW4xMDI0LTU5MicsXG4gIDB4YjNhYjogJ1NrZWluMTAyNC02MDAnLFxuICAweGIzYWM6ICdTa2VpbjEwMjQtNjA4JyxcbiAgMHhiM2FkOiAnU2tlaW4xMDI0LTYxNicsXG4gIDB4YjNhZTogJ1NrZWluMTAyNC02MjQnLFxuICAweGIzYWY6ICdTa2VpbjEwMjQtNjMyJyxcbiAgMHhiM2IwOiAnU2tlaW4xMDI0LTY0MCcsXG4gIDB4YjNiMTogJ1NrZWluMTAyNC02NDgnLFxuICAweGIzYjI6ICdTa2VpbjEwMjQtNjU2JyxcbiAgMHhiM2IzOiAnU2tlaW4xMDI0LTY2NCcsXG4gIDB4YjNiNDogJ1NrZWluMTAyNC02NzInLFxuICAweGIzYjU6ICdTa2VpbjEwMjQtNjgwJyxcbiAgMHhiM2I2OiAnU2tlaW4xMDI0LTY4OCcsXG4gIDB4YjNiNzogJ1NrZWluMTAyNC02OTYnLFxuICAweGIzYjg6ICdTa2VpbjEwMjQtNzA0JyxcbiAgMHhiM2I5OiAnU2tlaW4xMDI0LTcxMicsXG4gIDB4YjNiYTogJ1NrZWluMTAyNC03MjAnLFxuICAweGIzYmI6ICdTa2VpbjEwMjQtNzI4JyxcbiAgMHhiM2JjOiAnU2tlaW4xMDI0LTczNicsXG4gIDB4YjNiZDogJ1NrZWluMTAyNC03NDQnLFxuICAweGIzYmU6ICdTa2VpbjEwMjQtNzUyJyxcbiAgMHhiM2JmOiAnU2tlaW4xMDI0LTc2MCcsXG4gIDB4YjNjMDogJ1NrZWluMTAyNC03NjgnLFxuICAweGIzYzE6ICdTa2VpbjEwMjQtNzc2JyxcbiAgMHhiM2MyOiAnU2tlaW4xMDI0LTc4NCcsXG4gIDB4YjNjMzogJ1NrZWluMTAyNC03OTInLFxuICAweGIzYzQ6ICdTa2VpbjEwMjQtODAwJyxcbiAgMHhiM2M1OiAnU2tlaW4xMDI0LTgwOCcsXG4gIDB4YjNjNjogJ1NrZWluMTAyNC04MTYnLFxuICAweGIzYzc6ICdTa2VpbjEwMjQtODI0JyxcbiAgMHhiM2M4OiAnU2tlaW4xMDI0LTgzMicsXG4gIDB4YjNjOTogJ1NrZWluMTAyNC04NDAnLFxuICAweGIzY2E6ICdTa2VpbjEwMjQtODQ4JyxcbiAgMHhiM2NiOiAnU2tlaW4xMDI0LTg1NicsXG4gIDB4YjNjYzogJ1NrZWluMTAyNC04NjQnLFxuICAweGIzY2Q6ICdTa2VpbjEwMjQtODcyJyxcbiAgMHhiM2NlOiAnU2tlaW4xMDI0LTg4MCcsXG4gIDB4YjNjZjogJ1NrZWluMTAyNC04ODgnLFxuICAweGIzZDA6ICdTa2VpbjEwMjQtODk2JyxcbiAgMHhiM2QxOiAnU2tlaW4xMDI0LTkwNCcsXG4gIDB4YjNkMjogJ1NrZWluMTAyNC05MTInLFxuICAweGIzZDM6ICdTa2VpbjEwMjQtOTIwJyxcbiAgMHhiM2Q0OiAnU2tlaW4xMDI0LTkyOCcsXG4gIDB4YjNkNTogJ1NrZWluMTAyNC05MzYnLFxuICAweGIzZDY6ICdTa2VpbjEwMjQtOTQ0JyxcbiAgMHhiM2Q3OiAnU2tlaW4xMDI0LTk1MicsXG4gIDB4YjNkODogJ1NrZWluMTAyNC05NjAnLFxuICAweGIzZDk6ICdTa2VpbjEwMjQtOTY4JyxcbiAgMHhiM2RhOiAnU2tlaW4xMDI0LTk3NicsXG4gIDB4YjNkYjogJ1NrZWluMTAyNC05ODQnLFxuICAweGIzZGM6ICdTa2VpbjEwMjQtOTkyJyxcbiAgMHhiM2RkOiAnU2tlaW4xMDI0LTEwMDAnLFxuICAweGIzZGU6ICdTa2VpbjEwMjQtMTAwOCcsXG4gIDB4YjNkZjogJ1NrZWluMTAyNC0xMDE2JyxcbiAgMHhiM2UwOiAnU2tlaW4xMDI0LTEwMjQnXG59KVxuXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIDB4MTE6IDIwLFxuICAweDEyOiAzMixcbiAgMHgxMzogNjQsXG4gIDB4NTY6IDMyLFxuICAweDE3OiAyOCxcbiAgMHgxNjogMzIsXG4gIDB4MTU6IDQ4LFxuICAweDE0OiA2NCxcbiAgMHgxODogMzIsXG4gIDB4MTk6IDY0LFxuICAweDFBOiAyOCxcbiAgMHgxQjogMzIsXG4gIDB4MUM6IDQ4LFxuICAweDFEOiA2NCxcbiAgMHgyMjogMzIsXG5cbiAgMHhiMjAxOiAweDAxLFxuICAweGIyMDI6IDB4MDIsXG4gIDB4YjIwMzogMHgwMyxcbiAgMHhiMjA0OiAweDA0LFxuICAweGIyMDU6IDB4MDUsXG4gIDB4YjIwNjogMHgwNixcbiAgMHhiMjA3OiAweDA3LFxuICAweGIyMDg6IDB4MDgsXG4gIDB4YjIwOTogMHgwOSxcbiAgMHhiMjBhOiAweDBhLFxuICAweGIyMGI6IDB4MGIsXG4gIDB4YjIwYzogMHgwYyxcbiAgMHhiMjBkOiAweDBkLFxuICAweGIyMGU6IDB4MGUsXG4gIDB4YjIwZjogMHgwZixcbiAgMHhiMjEwOiAweDEwLFxuICAweGIyMTE6IDB4MTEsXG4gIDB4YjIxMjogMHgxMixcbiAgMHhiMjEzOiAweDEzLFxuICAweGIyMTQ6IDB4MTQsXG4gIDB4YjIxNTogMHgxNSxcbiAgMHhiMjE2OiAweDE2LFxuICAweGIyMTc6IDB4MTcsXG4gIDB4YjIxODogMHgxOCxcbiAgMHhiMjE5OiAweDE5LFxuICAweGIyMWE6IDB4MWEsXG4gIDB4YjIxYjogMHgxYixcbiAgMHhiMjFjOiAweDFjLFxuICAweGIyMWQ6IDB4MWQsXG4gIDB4YjIxZTogMHgxZSxcbiAgMHhiMjFmOiAweDFmLFxuICAweGIyMjA6IDB4MjAsXG4gIDB4YjIyMTogMHgyMSxcbiAgMHhiMjIyOiAweDIyLFxuICAweGIyMjM6IDB4MjMsXG4gIDB4YjIyNDogMHgyNCxcbiAgMHhiMjI1OiAweDI1LFxuICAweGIyMjY6IDB4MjYsXG4gIDB4YjIyNzogMHgyNyxcbiAgMHhiMjI4OiAweDI4LFxuICAweGIyMjk6IDB4MjksXG4gIDB4YjIyYTogMHgyYSxcbiAgMHhiMjJiOiAweDJiLFxuICAweGIyMmM6IDB4MmMsXG4gIDB4YjIyZDogMHgyZCxcbiAgMHhiMjJlOiAweDJlLFxuICAweGIyMmY6IDB4MmYsXG4gIDB4YjIzMDogMHgzMCxcbiAgMHhiMjMxOiAweDMxLFxuICAweGIyMzI6IDB4MzIsXG4gIDB4YjIzMzogMHgzMyxcbiAgMHhiMjM0OiAweDM0LFxuICAweGIyMzU6IDB4MzUsXG4gIDB4YjIzNjogMHgzNixcbiAgMHhiMjM3OiAweDM3LFxuICAweGIyMzg6IDB4MzgsXG4gIDB4YjIzOTogMHgzOSxcbiAgMHhiMjNhOiAweDNhLFxuICAweGIyM2I6IDB4M2IsXG4gIDB4YjIzYzogMHgzYyxcbiAgMHhiMjNkOiAweDNkLFxuICAweGIyM2U6IDB4M2UsXG4gIDB4YjIzZjogMHgzZixcbiAgMHhiMjQwOiAweDQwLFxuICAweGIyNDE6IDB4MDEsXG4gIDB4YjI0MjogMHgwMixcbiAgMHhiMjQzOiAweDAzLFxuICAweGIyNDQ6IDB4MDQsXG4gIDB4YjI0NTogMHgwNSxcbiAgMHhiMjQ2OiAweDA2LFxuICAweGIyNDc6IDB4MDcsXG4gIDB4YjI0ODogMHgwOCxcbiAgMHhiMjQ5OiAweDA5LFxuICAweGIyNGE6IDB4MGEsXG4gIDB4YjI0YjogMHgwYixcbiAgMHhiMjRjOiAweDBjLFxuICAweGIyNGQ6IDB4MGQsXG4gIDB4YjI0ZTogMHgwZSxcbiAgMHhiMjRmOiAweDBmLFxuICAweGIyNTA6IDB4MTAsXG4gIDB4YjI1MTogMHgxMSxcbiAgMHhiMjUyOiAweDEyLFxuICAweGIyNTM6IDB4MTMsXG4gIDB4YjI1NDogMHgxNCxcbiAgMHhiMjU1OiAweDE1LFxuICAweGIyNTY6IDB4MTYsXG4gIDB4YjI1NzogMHgxNyxcbiAgMHhiMjU4OiAweDE4LFxuICAweGIyNTk6IDB4MTksXG4gIDB4YjI1YTogMHgxYSxcbiAgMHhiMjViOiAweDFiLFxuICAweGIyNWM6IDB4MWMsXG4gIDB4YjI1ZDogMHgxZCxcbiAgMHhiMjVlOiAweDFlLFxuICAweGIyNWY6IDB4MWYsXG4gIDB4YjI2MDogMHgyMCxcbiAgMHhiMzAxOiAweDAxLFxuICAweGIzMDI6IDB4MDIsXG4gIDB4YjMwMzogMHgwMyxcbiAgMHhiMzA0OiAweDA0LFxuICAweGIzMDU6IDB4MDUsXG4gIDB4YjMwNjogMHgwNixcbiAgMHhiMzA3OiAweDA3LFxuICAweGIzMDg6IDB4MDgsXG4gIDB4YjMwOTogMHgwOSxcbiAgMHhiMzBhOiAweDBhLFxuICAweGIzMGI6IDB4MGIsXG4gIDB4YjMwYzogMHgwYyxcbiAgMHhiMzBkOiAweDBkLFxuICAweGIzMGU6IDB4MGUsXG4gIDB4YjMwZjogMHgwZixcbiAgMHhiMzEwOiAweDEwLFxuICAweGIzMTE6IDB4MTEsXG4gIDB4YjMxMjogMHgxMixcbiAgMHhiMzEzOiAweDEzLFxuICAweGIzMTQ6IDB4MTQsXG4gIDB4YjMxNTogMHgxNSxcbiAgMHhiMzE2OiAweDE2LFxuICAweGIzMTc6IDB4MTcsXG4gIDB4YjMxODogMHgxOCxcbiAgMHhiMzE5OiAweDE5LFxuICAweGIzMWE6IDB4MWEsXG4gIDB4YjMxYjogMHgxYixcbiAgMHhiMzFjOiAweDFjLFxuICAweGIzMWQ6IDB4MWQsXG4gIDB4YjMxZTogMHgxZSxcbiAgMHhiMzFmOiAweDFmLFxuICAweGIzMjA6IDB4MjAsXG4gIDB4YjMyMTogMHgwMSxcbiAgMHhiMzIyOiAweDAyLFxuICAweGIzMjM6IDB4MDMsXG4gIDB4YjMyNDogMHgwNCxcbiAgMHhiMzI1OiAweDA1LFxuICAweGIzMjY6IDB4MDYsXG4gIDB4YjMyNzogMHgwNyxcbiAgMHhiMzI4OiAweDA4LFxuICAweGIzMjk6IDB4MDksXG4gIDB4YjMyYTogMHgwYSxcbiAgMHhiMzJiOiAweDBiLFxuICAweGIzMmM6IDB4MGMsXG4gIDB4YjMyZDogMHgwZCxcbiAgMHhiMzJlOiAweDBlLFxuICAweGIzMmY6IDB4MGYsXG4gIDB4YjMzMDogMHgxMCxcbiAgMHhiMzMxOiAweDExLFxuICAweGIzMzI6IDB4MTIsXG4gIDB4YjMzMzogMHgxMyxcbiAgMHhiMzM0OiAweDE0LFxuICAweGIzMzU6IDB4MTUsXG4gIDB4YjMzNjogMHgxNixcbiAgMHhiMzM3OiAweDE3LFxuICAweGIzMzg6IDB4MTgsXG4gIDB4YjMzOTogMHgxOSxcbiAgMHhiMzNhOiAweDFhLFxuICAweGIzM2I6IDB4MWIsXG4gIDB4YjMzYzogMHgxYyxcbiAgMHhiMzNkOiAweDFkLFxuICAweGIzM2U6IDB4MWUsXG4gIDB4YjMzZjogMHgxZixcbiAgMHhiMzQwOiAweDIwLFxuICAweGIzNDE6IDB4MjEsXG4gIDB4YjM0MjogMHgyMixcbiAgMHhiMzQzOiAweDIzLFxuICAweGIzNDQ6IDB4MjQsXG4gIDB4YjM0NTogMHgyNSxcbiAgMHhiMzQ2OiAweDI2LFxuICAweGIzNDc6IDB4MjcsXG4gIDB4YjM0ODogMHgyOCxcbiAgMHhiMzQ5OiAweDI5LFxuICAweGIzNGE6IDB4MmEsXG4gIDB4YjM0YjogMHgyYixcbiAgMHhiMzRjOiAweDJjLFxuICAweGIzNGQ6IDB4MmQsXG4gIDB4YjM0ZTogMHgyZSxcbiAgMHhiMzRmOiAweDJmLFxuICAweGIzNTA6IDB4MzAsXG4gIDB4YjM1MTogMHgzMSxcbiAgMHhiMzUyOiAweDMyLFxuICAweGIzNTM6IDB4MzMsXG4gIDB4YjM1NDogMHgzNCxcbiAgMHhiMzU1OiAweDM1LFxuICAweGIzNTY6IDB4MzYsXG4gIDB4YjM1NzogMHgzNyxcbiAgMHhiMzU4OiAweDM4LFxuICAweGIzNTk6IDB4MzksXG4gIDB4YjM1YTogMHgzYSxcbiAgMHhiMzViOiAweDNiLFxuICAweGIzNWM6IDB4M2MsXG4gIDB4YjM1ZDogMHgzZCxcbiAgMHhiMzVlOiAweDNlLFxuICAweGIzNWY6IDB4M2YsXG4gIDB4YjM2MDogMHg0MCxcbiAgMHhiMzYxOiAweDAxLFxuICAweGIzNjI6IDB4MDIsXG4gIDB4YjM2MzogMHgwMyxcbiAgMHhiMzY0OiAweDA0LFxuICAweGIzNjU6IDB4MDUsXG4gIDB4YjM2NjogMHgwNixcbiAgMHhiMzY3OiAweDA3LFxuICAweGIzNjg6IDB4MDgsXG4gIDB4YjM2OTogMHgwOSxcbiAgMHhiMzZhOiAweDBhLFxuICAweGIzNmI6IDB4MGIsXG4gIDB4YjM2YzogMHgwYyxcbiAgMHhiMzZkOiAweDBkLFxuICAweGIzNmU6IDB4MGUsXG4gIDB4YjM2ZjogMHgwZixcbiAgMHhiMzcwOiAweDEwLFxuICAweGIzNzE6IDB4MTEsXG4gIDB4YjM3MjogMHgxMixcbiAgMHhiMzczOiAweDEzLFxuICAweGIzNzQ6IDB4MTQsXG4gIDB4YjM3NTogMHgxNSxcbiAgMHhiMzc2OiAweDE2LFxuICAweGIzNzc6IDB4MTcsXG4gIDB4YjM3ODogMHgxOCxcbiAgMHhiMzc5OiAweDE5LFxuICAweGIzN2E6IDB4MWEsXG4gIDB4YjM3YjogMHgxYixcbiAgMHhiMzdjOiAweDFjLFxuICAweGIzN2Q6IDB4MWQsXG4gIDB4YjM3ZTogMHgxZSxcbiAgMHhiMzdmOiAweDFmLFxuICAweGIzODA6IDB4MjAsXG4gIDB4YjM4MTogMHgyMSxcbiAgMHhiMzgyOiAweDIyLFxuICAweGIzODM6IDB4MjMsXG4gIDB4YjM4NDogMHgyNCxcbiAgMHhiMzg1OiAweDI1LFxuICAweGIzODY6IDB4MjYsXG4gIDB4YjM4NzogMHgyNyxcbiAgMHhiMzg4OiAweDI4LFxuICAweGIzODk6IDB4MjksXG4gIDB4YjM4YTogMHgyYSxcbiAgMHhiMzhiOiAweDJiLFxuICAweGIzOGM6IDB4MmMsXG4gIDB4YjM4ZDogMHgyZCxcbiAgMHhiMzhlOiAweDJlLFxuICAweGIzOGY6IDB4MmYsXG4gIDB4YjM5MDogMHgzMCxcbiAgMHhiMzkxOiAweDMxLFxuICAweGIzOTI6IDB4MzIsXG4gIDB4YjM5MzogMHgzMyxcbiAgMHhiMzk0OiAweDM0LFxuICAweGIzOTU6IDB4MzUsXG4gIDB4YjM5NjogMHgzNixcbiAgMHhiMzk3OiAweDM3LFxuICAweGIzOTg6IDB4MzgsXG4gIDB4YjM5OTogMHgzOSxcbiAgMHhiMzlhOiAweDNhLFxuICAweGIzOWI6IDB4M2IsXG4gIDB4YjM5YzogMHgzYyxcbiAgMHhiMzlkOiAweDNkLFxuICAweGIzOWU6IDB4M2UsXG4gIDB4YjM5ZjogMHgzZixcbiAgMHhiM2EwOiAweDQwLFxuICAweGIzYTE6IDB4NDEsXG4gIDB4YjNhMjogMHg0MixcbiAgMHhiM2EzOiAweDQzLFxuICAweGIzYTQ6IDB4NDQsXG4gIDB4YjNhNTogMHg0NSxcbiAgMHhiM2E2OiAweDQ2LFxuICAweGIzYTc6IDB4NDcsXG4gIDB4YjNhODogMHg0OCxcbiAgMHhiM2E5OiAweDQ5LFxuICAweGIzYWE6IDB4NGEsXG4gIDB4YjNhYjogMHg0YixcbiAgMHhiM2FjOiAweDRjLFxuICAweGIzYWQ6IDB4NGQsXG4gIDB4YjNhZTogMHg0ZSxcbiAgMHhiM2FmOiAweDRmLFxuICAweGIzYjA6IDB4NTAsXG4gIDB4YjNiMTogMHg1MSxcbiAgMHhiM2IyOiAweDUyLFxuICAweGIzYjM6IDB4NTMsXG4gIDB4YjNiNDogMHg1NCxcbiAgMHhiM2I1OiAweDU1LFxuICAweGIzYjY6IDB4NTYsXG4gIDB4YjNiNzogMHg1NyxcbiAgMHhiM2I4OiAweDU4LFxuICAweGIzYjk6IDB4NTksXG4gIDB4YjNiYTogMHg1YSxcbiAgMHhiM2JiOiAweDViLFxuICAweGIzYmM6IDB4NWMsXG4gIDB4YjNiZDogMHg1ZCxcbiAgMHhiM2JlOiAweDVlLFxuICAweGIzYmY6IDB4NWYsXG4gIDB4YjNjMDogMHg2MCxcbiAgMHhiM2MxOiAweDYxLFxuICAweGIzYzI6IDB4NjIsXG4gIDB4YjNjMzogMHg2MyxcbiAgMHhiM2M0OiAweDY0LFxuICAweGIzYzU6IDB4NjUsXG4gIDB4YjNjNjogMHg2NixcbiAgMHhiM2M3OiAweDY3LFxuICAweGIzYzg6IDB4NjgsXG4gIDB4YjNjOTogMHg2OSxcbiAgMHhiM2NhOiAweDZhLFxuICAweGIzY2I6IDB4NmIsXG4gIDB4YjNjYzogMHg2YyxcbiAgMHhiM2NkOiAweDZkLFxuICAweGIzY2U6IDB4NmUsXG4gIDB4YjNjZjogMHg2ZixcbiAgMHhiM2QwOiAweDcwLFxuICAweGIzZDE6IDB4NzEsXG4gIDB4YjNkMjogMHg3MixcbiAgMHhiM2QzOiAweDczLFxuICAweGIzZDQ6IDB4NzQsXG4gIDB4YjNkNTogMHg3NSxcbiAgMHhiM2Q2OiAweDc2LFxuICAweGIzZDc6IDB4NzcsXG4gIDB4YjNkODogMHg3OCxcbiAgMHhiM2Q5OiAweDc5LFxuICAweGIzZGE6IDB4N2EsXG4gIDB4YjNkYjogMHg3YixcbiAgMHhiM2RjOiAweDdjLFxuICAweGIzZGQ6IDB4N2QsXG4gIDB4YjNkZTogMHg3ZSxcbiAgMHhiM2RmOiAweDdmLFxuICAweGIzZTA6IDB4ODBcbn0pXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGVuY29kZVxuXG52YXIgTVNCID0gMHg4MFxuICAsIFJFU1QgPSAweDdGXG4gICwgTVNCQUxMID0gflJFU1RcbiAgLCBJTlQgPSBNYXRoLnBvdygyLCAzMSlcblxuZnVuY3Rpb24gZW5jb2RlKG51bSwgb3V0LCBvZmZzZXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdXG4gIG9mZnNldCA9IG9mZnNldCB8fCAwXG4gIHZhciBvbGRPZmZzZXQgPSBvZmZzZXRcblxuICB3aGlsZShudW0gPj0gSU5UKSB7XG4gICAgb3V0W29mZnNldCsrXSA9IChudW0gJiAweEZGKSB8IE1TQlxuICAgIG51bSAvPSAxMjhcbiAgfVxuICB3aGlsZShudW0gJiBNU0JBTEwpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtID4+Pj0gN1xuICB9XG4gIG91dFtvZmZzZXRdID0gbnVtIHwgMFxuICBcbiAgZW5jb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0ICsgMVxuICBcbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZWFkXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcblxuZnVuY3Rpb24gcmVhZChidWYsIG9mZnNldCkge1xuICB2YXIgcmVzICAgID0gMFxuICAgICwgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgICAsIHNoaWZ0ICA9IDBcbiAgICAsIGNvdW50ZXIgPSBvZmZzZXRcbiAgICAsIGJcbiAgICAsIGwgPSBidWYubGVuZ3RoXG5cbiAgZG8ge1xuICAgIGlmIChjb3VudGVyID49IGwpIHtcbiAgICAgIHJlYWQuYnl0ZXMgPSAwXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ291bGQgbm90IGRlY29kZSB2YXJpbnQnKVxuICAgIH1cbiAgICBiID0gYnVmW2NvdW50ZXIrK11cbiAgICByZXMgKz0gc2hpZnQgPCAyOFxuICAgICAgPyAoYiAmIFJFU1QpIDw8IHNoaWZ0XG4gICAgICA6IChiICYgUkVTVCkgKiBNYXRoLnBvdygyLCBzaGlmdClcbiAgICBzaGlmdCArPSA3XG4gIH0gd2hpbGUgKGIgPj0gTVNCKVxuXG4gIHJlYWQuYnl0ZXMgPSBjb3VudGVyIC0gb2Zmc2V0XG5cbiAgcmV0dXJuIHJlc1xufVxuIiwiXG52YXIgTjEgPSBNYXRoLnBvdygyLCAgNylcbnZhciBOMiA9IE1hdGgucG93KDIsIDE0KVxudmFyIE4zID0gTWF0aC5wb3coMiwgMjEpXG52YXIgTjQgPSBNYXRoLnBvdygyLCAyOClcbnZhciBONSA9IE1hdGgucG93KDIsIDM1KVxudmFyIE42ID0gTWF0aC5wb3coMiwgNDIpXG52YXIgTjcgPSBNYXRoLnBvdygyLCA0OSlcbnZhciBOOCA9IE1hdGgucG93KDIsIDU2KVxudmFyIE45ID0gTWF0aC5wb3coMiwgNjMpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPCBOMSA/IDFcbiAgOiB2YWx1ZSA8IE4yID8gMlxuICA6IHZhbHVlIDwgTjMgPyAzXG4gIDogdmFsdWUgPCBONCA/IDRcbiAgOiB2YWx1ZSA8IE41ID8gNVxuICA6IHZhbHVlIDwgTjYgPyA2XG4gIDogdmFsdWUgPCBONyA/IDdcbiAgOiB2YWx1ZSA8IE44ID8gOFxuICA6IHZhbHVlIDwgTjkgPyA5XG4gIDogICAgICAgICAgICAgIDEwXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBCYXNlID0gcmVxdWlyZSgnLi9iYXNlLmpzJylcbmNvbnN0IGJhc2VYID0gcmVxdWlyZSgnYmFzZS14JylcbmNvbnN0IGJhc2UxNiA9IHJlcXVpcmUoJy4vYmFzZTE2JylcbmNvbnN0IGJhc2UzMiA9IHJlcXVpcmUoJy4vYmFzZTMyJylcbmNvbnN0IGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0JylcblxuLy8gbmFtZSwgY29kZSwgaW1wbGVtZW50YXRpb24sIGFscGhhYmV0XG5jb25zdCBjb25zdGFudHMgPSBbXG4gIFsnYmFzZTEnLCAnMScsICcnLCAnMSddLFxuICBbJ2Jhc2UyJywgJzAnLCBiYXNlWCwgJzAxJ10sXG4gIFsnYmFzZTgnLCAnNycsIGJhc2VYLCAnMDEyMzQ1NjcnXSxcbiAgWydiYXNlMTAnLCAnOScsIGJhc2VYLCAnMDEyMzQ1Njc4OSddLFxuICBbJ2Jhc2UxNicsICdmJywgYmFzZTE2LCAnMDEyMzQ1Njc4OWFiY2RlZiddLFxuICBbJ2Jhc2UzMicsICdiJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjcnXSxcbiAgWydiYXNlMzJwYWQnLCAnYycsIGJhc2UzMiwgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3PSddLFxuICBbJ2Jhc2UzMmhleCcsICd2JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXYnXSxcbiAgWydiYXNlMzJoZXhwYWQnLCAndCcsIGJhc2UzMiwgJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2PSddLFxuICBbJ2Jhc2UzMnonLCAnaCcsIGJhc2UzMiwgJ3libmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5J10sXG4gIFsnYmFzZTU4ZmxpY2tyJywgJ1onLCBiYXNlWCwgJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonXSxcbiAgWydiYXNlNThidGMnLCAneicsIGJhc2VYLCAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eiddLFxuICBbJ2Jhc2U2NCcsICdtJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyddLFxuICBbJ2Jhc2U2NHBhZCcsICdNJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXSxcbiAgWydiYXNlNjR1cmwnLCAndScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nXSxcbiAgWydiYXNlNjR1cmxwYWQnLCAnVScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89J11cbl1cblxuY29uc3QgbmFtZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMF1dID0gbmV3IEJhc2UodHVwcGxlWzBdLCB0dXBwbGVbMV0sIHR1cHBsZVsyXSwgdHVwcGxlWzNdKVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbmNvbnN0IGNvZGVzID0gY29uc3RhbnRzLnJlZHVjZSgocHJldiwgdHVwcGxlKSA9PiB7XG4gIHByZXZbdHVwcGxlWzFdXSA9IG5hbWVzW3R1cHBsZVswXV1cbiAgcmV0dXJuIHByZXZcbn0sIHt9KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmFtZXM6IG5hbWVzLFxuICBjb2RlczogY29kZXNcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBCYXNlIHtcbiAgY29uc3RydWN0b3IgKG5hbWUsIGNvZGUsIGltcGxlbWVudGF0aW9uLCBhbHBoYWJldCkge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmNvZGUgPSBjb2RlXG4gICAgdGhpcy5hbHBoYWJldCA9IGFscGhhYmV0XG4gICAgaWYgKGltcGxlbWVudGF0aW9uICYmIGFscGhhYmV0KSB7XG4gICAgICB0aGlzLmVuZ2luZSA9IGltcGxlbWVudGF0aW9uKGFscGhhYmV0KVxuICAgIH1cbiAgfVxuXG4gIGVuY29kZSAoc3RyaW5nT3JCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuZW5jb2RlKHN0cmluZ09yQnVmZmVyKVxuICB9XG5cbiAgZGVjb2RlIChzdHJpbmdPckJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5kZWNvZGUoc3RyaW5nT3JCdWZmZXIpXG4gIH1cblxuICBpc0ltcGxlbWVudGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VcbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UxNiAoYWxwaGFiZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCdoZXgnKVxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTE2IGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2hleCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gZGVjb2RlIChpbnB1dCwgYWxwaGFiZXQpIHtcbiAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKG5ldyBSZWdFeHAoJz0nLCAnZycpLCAnJylcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aFxuXG4gIGxldCBiaXRzID0gMFxuICBsZXQgdmFsdWUgPSAwXG5cbiAgbGV0IGluZGV4ID0gMFxuICBsZXQgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbmd0aCAqIDUgLyA4KSB8IDApXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDUpIHwgYWxwaGFiZXQuaW5kZXhPZihpbnB1dFtpXSlcbiAgICBiaXRzICs9IDVcblxuICAgIGlmIChiaXRzID49IDgpIHtcbiAgICAgIG91dHB1dFtpbmRleCsrXSA9ICh2YWx1ZSA+Pj4gKGJpdHMgLSA4KSkgJiAyNTVcbiAgICAgIGJpdHMgLT0gOFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGVuY29kZSAoYnVmZmVyLCBhbHBoYWJldCkge1xuICBsZXQgbGVuZ3RoID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG4gIGxldCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID09PSBhbHBoYWJldC5sZW5ndGggLSAxXG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICBhbHBoYWJldCA9IGFscGhhYmV0LnN1YnN0cmluZygwLCBhbHBoYWJldC5sZW5ndGggLSAyKVxuICB9XG5cbiAgbGV0IGJpdHMgPSAwXG4gIGxldCB2YWx1ZSA9IDBcbiAgbGV0IG91dHB1dCA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpIHwgdmlld1tpXVxuICAgIGJpdHMgKz0gOFxuXG4gICAgd2hpbGUgKGJpdHMgPj0gNSkge1xuICAgICAgb3V0cHV0ICs9IGFscGhhYmV0Wyh2YWx1ZSA+Pj4gKGJpdHMgLSA1KSkgJiAzMV1cbiAgICAgIGJpdHMgLT0gNVxuICAgIH1cbiAgfVxuXG4gIGlmIChiaXRzID4gMCkge1xuICAgIG91dHB1dCArPSBhbHBoYWJldFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAzMV1cbiAgfVxuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgd2hpbGUgKChvdXRwdXQubGVuZ3RoICUgOCkgIT09IDApIHtcbiAgICAgIG91dHB1dCArPSAnPSdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTMyIChhbHBoYWJldCkge1xuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQpLCBhbHBoYWJldClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVuY29kZShpbnB1dCwgYWxwaGFiZXQpXG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlMzIgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVjb2RlKGlucHV0LCBhbHBoYWJldClcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2U2NCAoYWxwaGFiZXQpIHtcbiAgLy8gVGhlIGFscGhhYmV0IGlzIG9ubHkgdXNlZCB0byBrbm93OlxuICAvLyAgIDEuIElmIHBhZGRpbmcgaXMgZW5hYmxlZCAobXVzdCBjb250YWluICc9JylcbiAgLy8gICAyLiBJZiB0aGUgb3V0cHV0IG11c3QgYmUgdXJsLXNhZmUgKG11c3QgY29udGFpbiAnLScgYW5kICdfJylcbiAgLy8gICAzLiBJZiB0aGUgaW5wdXQgb2YgdGhlIG91dHB1dCBmdW5jdGlvbiBpcyB2YWxpZFxuICAvLyBUaGUgYWxwaGFiZXRzIGZyb20gUkZDIDQ2NDggYXJlIGFsd2F5cyB1c2VkLlxuICBjb25zdCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID4gLTFcbiAgY29uc3QgdXJsID0gYWxwaGFiZXQuaW5kZXhPZignLScpID4gLTEgJiYgYWxwaGFiZXQuaW5kZXhPZignXycpID4gLTFcblxuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGxldCBvdXRwdXQgPSAnJ1xuXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdXRwdXQgPSBCdWZmZXIuZnJvbShpbnB1dCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQgPSBpbnB1dC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkID0gb3V0cHV0LmluZGV4T2YoJz0nKVxuICAgICAgaWYgKHBhZCA+IDAgJiYgIXBhZGRpbmcpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnN1YnN0cmluZygwLCBwYWQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2U2NCBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgY29udmVydCA9IHJlcXVpcmUoJy4vY29udmVydCcpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vLyBleHBvcnQgY29kZWNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHJpbmdUb1N0cmluZ1R1cGxlczogc3RyaW5nVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvU3RyaW5nOiBzdHJpbmdUdXBsZXNUb1N0cmluZyxcblxuICB0dXBsZXNUb1N0cmluZ1R1cGxlczogdHVwbGVzVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvVHVwbGVzOiBzdHJpbmdUdXBsZXNUb1R1cGxlcyxcblxuICBidWZmZXJUb1R1cGxlczogYnVmZmVyVG9UdXBsZXMsXG4gIHR1cGxlc1RvQnVmZmVyOiB0dXBsZXNUb0J1ZmZlcixcblxuICBidWZmZXJUb1N0cmluZzogYnVmZmVyVG9TdHJpbmcsXG4gIHN0cmluZ1RvQnVmZmVyOiBzdHJpbmdUb0J1ZmZlcixcblxuICBmcm9tU3RyaW5nOiBmcm9tU3RyaW5nLFxuICBmcm9tQnVmZmVyOiBmcm9tQnVmZmVyLFxuICB2YWxpZGF0ZUJ1ZmZlcjogdmFsaWRhdGVCdWZmZXIsXG4gIGlzVmFsaWRCdWZmZXI6IGlzVmFsaWRCdWZmZXIsXG4gIGNsZWFuUGF0aDogY2xlYW5QYXRoLFxuXG4gIFBhcnNlRXJyb3I6IFBhcnNlRXJyb3IsXG4gIHByb3RvRnJvbVR1cGxlOiBwcm90b0Zyb21UdXBsZSxcblxuICBzaXplRm9yQWRkcjogc2l6ZUZvckFkZHJcbn1cblxuLy8gc3RyaW5nIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUb1N0cmluZ1R1cGxlcyAoc3RyKSB7XG4gIGNvbnN0IHR1cGxlcyA9IFtdXG4gIGNvbnN0IHBhcnRzID0gc3RyLnNwbGl0KCcvJykuc2xpY2UoMSkgLy8gc2tpcCBmaXJzdCBlbXB0eSBlbGVtXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEgJiYgcGFydHNbMF0gPT09ICcnKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBmb3IgKGxldCBwID0gMDsgcCA8IHBhcnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW3BdXG4gICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHMocGFydClcblxuICAgIGlmIChwcm90by5zaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbcGFydF0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHArKyAvLyBhZHZhbmNlIGFkZHIgcGFydFxuICAgIGlmIChwID49IHBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgUGFyc2VFcnJvcignaW52YWxpZCBhZGRyZXNzOiAnICsgc3RyKVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3MgYSBwYXRoIHByb3RvLCB0YWtlIHRoZSByZXN0XG4gICAgaWYgKHByb3RvLnBhdGgpIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtcbiAgICAgICAgcGFydCxcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIG5lZWQgdG8gY2hlY2sgZWFjaCBwYXRoIHBhcnQgdG8gc2VlIGlmIGl0J3MgYSBwcm90bz9cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBhbGxvdyBmb3Igb3RoZXIgcHJvdG9jb2xzIHRvIGJlIGFkZGVkIGFmdGVyIGEgdW5peCBwYXRoLFxuICAgICAgICAvLyBob3dldmVyIGl0IHdvdWxkIGhhdmUgaXNzdWVzIGlmIHRoZSBwYXRoIGhhZCBhIHByb3RvY29sIG5hbWUgaW4gdGhlIHBhdGhcbiAgICAgICAgY2xlYW5QYXRoKHBhcnRzLnNsaWNlKHApLmpvaW4oJy8nKSlcbiAgICAgIF0pXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIHR1cGxlcy5wdXNoKFtwYXJ0LCBwYXJ0c1twXV0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IHN0cmluZ1xuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9TdHJpbmcgKHR1cGxlcykge1xuICBjb25zdCBwYXJ0cyA9IFtdXG4gIHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBwYXJ0cy5wdXNoKHByb3RvLm5hbWUpXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICBwYXJ0cy5wdXNoKHR1cFsxXSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNsZWFuUGF0aChwYXJ0cy5qb2luKCcvJykpXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXVxuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9UdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0dXApKSB7XG4gICAgICB0dXAgPSBbdHVwXVxuICAgIH1cbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiBbcHJvdG8uY29kZSwgY29udmVydC50b0J1ZmZlcihwcm90by5jb2RlLCB0dXBbMV0pXVxuICAgIH1cbiAgICByZXR1cm4gW3Byb3RvLmNvZGVdXG4gIH0pXG59XG5cbi8vIFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXSAtPiBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXVxuZnVuY3Rpb24gdHVwbGVzVG9TdHJpbmdUdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvU3RyaW5nKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXSAtPiBCdWZmZXJcbmZ1bmN0aW9uIHR1cGxlc1RvQnVmZmVyICh0dXBsZXMpIHtcbiAgcmV0dXJuIGZyb21CdWZmZXIoQnVmZmVyLmNvbmNhdCh0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUocHJvdG8uY29kZSkpXG5cbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgdHVwWzFdXSkgLy8gYWRkIGFkZHJlc3MgYnVmZmVyXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZlxuICB9KSkpXG59XG5cbmZ1bmN0aW9uIHNpemVGb3JBZGRyIChwLCBhZGRyKSB7XG4gIGlmIChwLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIHAuc2l6ZSAvIDhcbiAgfSBlbHNlIGlmIChwLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNpemUgPSB2YXJpbnQuZGVjb2RlKGFkZHIpXG4gICAgcmV0dXJuIHNpemUgKyB2YXJpbnQuZGVjb2RlLmJ5dGVzXG4gIH1cbn1cblxuLy8gQnVmZmVyIC0+IFtbaW50IGNvZGUsIEJ1ZmZlciBdLi4uIF1cbmZ1bmN0aW9uIGJ1ZmZlclRvVHVwbGVzIChidWYpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZiwgaSlcbiAgICBjb25zdCBuID0gdmFyaW50LmRlY29kZS5ieXRlc1xuXG4gICAgY29uc3QgcCA9IHByb3RvY29scyhjb2RlKVxuXG4gICAgY29uc3Qgc2l6ZSA9IHNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgdHVwbGVzLnB1c2goW2NvZGVdKVxuICAgICAgaSArPSBuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGFkZHIgPSBidWYuc2xpY2UoaSArIG4sIGkgKyBuICsgc2l6ZSlcblxuICAgIGkgKz0gKHNpemUgKyBuKVxuXG4gICAgaWYgKGkgPiBidWYubGVuZ3RoKSB7IC8vIGRpZCBub3QgZW5kIF9leGFjdGx5XyBhdCBidWZmZXIubGVuZ3RoXG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MgYnVmZmVyOiAnICsgYnVmLnRvU3RyaW5nKCdoZXgnKSlcbiAgICB9XG5cbiAgICAvLyBvaywgdHVwbGUgc2VlbXMgZ29vZC5cbiAgICB0dXBsZXMucHVzaChbY29kZSwgYWRkcl0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIEJ1ZmZlciAtPiBTdHJpbmdcbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nIChidWYpIHtcbiAgY29uc3QgYSA9IGJ1ZmZlclRvVHVwbGVzKGJ1ZilcbiAgY29uc3QgYiA9IHR1cGxlc1RvU3RyaW5nVHVwbGVzKGEpXG4gIHJldHVybiBzdHJpbmdUdXBsZXNUb1N0cmluZyhiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlciAoc3RyKSB7XG4gIHN0ciA9IGNsZWFuUGF0aChzdHIpXG4gIGNvbnN0IGEgPSBzdHJpbmdUb1N0cmluZ1R1cGxlcyhzdHIpXG4gIGNvbnN0IGIgPSBzdHJpbmdUdXBsZXNUb1R1cGxlcyhhKVxuXG4gIHJldHVybiB0dXBsZXNUb0J1ZmZlcihiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0cmluZ1RvQnVmZmVyKHN0cilcbn1cblxuLy8gQnVmZmVyIC0+IEJ1ZmZlclxuZnVuY3Rpb24gZnJvbUJ1ZmZlciAoYnVmKSB7XG4gIGNvbnN0IGVyciA9IHZhbGlkYXRlQnVmZmVyKGJ1ZilcbiAgaWYgKGVycikgdGhyb3cgZXJyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWYpIC8vIGNvcHlcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCdWZmZXIgKGJ1Zikge1xuICB0cnkge1xuICAgIGJ1ZmZlclRvVHVwbGVzKGJ1ZikgLy8gdHJ5IHRvIHBhcnNlLiB3aWxsIHRocm93IGlmIGJyZWFrc1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZXJyXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZEJ1ZmZlciAoYnVmKSB7XG4gIHJldHVybiB2YWxpZGF0ZUJ1ZmZlcihidWYpID09PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChzdHIpIHtcbiAgcmV0dXJuICcvJyArIHN0ci50cmltKCkuc3BsaXQoJy8nKS5maWx0ZXIoYSA9PiBhKS5qb2luKCcvJylcbn1cblxuZnVuY3Rpb24gUGFyc2VFcnJvciAoc3RyKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0Vycm9yIHBhcnNpbmcgYWRkcmVzczogJyArIHN0cilcbn1cblxuZnVuY3Rpb24gcHJvdG9Gcm9tVHVwbGUgKHR1cCkge1xuICBjb25zdCBwcm90byA9IHByb3RvY29scyh0dXBbMF0pXG4gIHJldHVybiBwcm90b1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGlwID0gcmVxdWlyZSgnaXAnKVxuY29uc3QgaXNJcCA9IHJlcXVpcmUoJ2lzLWlwJylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnaGktYmFzZTMyJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0gQ29udmVydFxuXG4vLyBjb252ZXJ0cyAoc2VyaWFsaXplcykgYWRkcmVzc2VzXG5mdW5jdGlvbiBDb252ZXJ0IChwcm90bywgYSkge1xuICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBDb252ZXJ0LnRvU3RyaW5nKHByb3RvLCBhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBDb252ZXJ0LnRvQnVmZmVyKHByb3RvLCBhKVxuICB9XG59XG5cbkNvbnZlcnQudG9TdHJpbmcgPSBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcgKHByb3RvLCBidWYpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgIGNhc2UgNDE6IC8vIGlwdjZcbiAgICAgIHJldHVybiBidWYyaXAoYnVmKVxuXG4gICAgY2FzZSA2OiAvLyB0Y3BcbiAgICBjYXNlIDI3MzogLy8gdWRwXG4gICAgY2FzZSAzMzogLy8gZGNjcFxuICAgIGNhc2UgMTMyOiAvLyBzY3RwXG4gICAgICByZXR1cm4gYnVmMnBvcnQoYnVmKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBidWYyc3RyKGJ1ZilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gYnVmMm1oKGJ1ZilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IHRvIGhleFxuICB9XG59XG5cbkNvbnZlcnQudG9CdWZmZXIgPSBmdW5jdGlvbiBjb252ZXJ0VG9CdWZmZXIgKHByb3RvLCBzdHIpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBwb3J0MmJ1ZihwYXJzZUludChzdHIsIDEwKSlcblxuICAgIGNhc2UgNTM6IC8vIGRuc1xuICAgIGNhc2UgNTQ6IC8vIGRuczRcbiAgICBjYXNlIDU1OiAvLyBkbnM2XG4gICAgY2FzZSA1NjogLy8gZG5zYWRkclxuICAgIGNhc2UgNDAwOiAvLyB1bml4XG4gICAgICByZXR1cm4gc3RyMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDQyMTogLy8gaXBmc1xuICAgICAgcmV0dXJuIG1oMmJ1ZihzdHIpXG4gICAgY2FzZSA0NDQ6IC8vIG9uaW9uXG4gICAgICByZXR1cm4gb25pb24yYnVmKHN0cilcbiAgICBjYXNlIDQ0NTogLy8gb25pb24zXG4gICAgICByZXR1cm4gb25pb24zMmJ1ZihzdHIpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsICdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IGZyb20gaGV4XG4gIH1cbn1cblxuZnVuY3Rpb24gaXAyYnVmIChpcFN0cmluZykge1xuICBpZiAoIWlzSXAoaXBTdHJpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlwIGFkZHJlc3MnKVxuICB9XG4gIHJldHVybiBpcC50b0J1ZmZlcihpcFN0cmluZylcbn1cblxuZnVuY3Rpb24gYnVmMmlwIChpcEJ1ZmYpIHtcbiAgY29uc3QgaXBTdHJpbmcgPSBpcC50b1N0cmluZyhpcEJ1ZmYpXG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwU3RyaW5nXG59XG5cbmZ1bmN0aW9uIHBvcnQyYnVmIChwb3J0KSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKVxuICBidWYud3JpdGVVSW50MTZCRShwb3J0LCAwKVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGJ1ZjJwb3J0IChidWYpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoMClcbn1cblxuZnVuY3Rpb24gc3RyMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0cilcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmLmxlbmd0aCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtzaXplLCBidWZdKVxufVxuXG5mdW5jdGlvbiBidWYyc3RyIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYnVmLmxlbmd0aCAhPT0gc2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb25zaXN0ZW50IGxlbmd0aHMnKVxuICB9XG5cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIG1oMmJ1ZiAoaGFzaCkge1xuICAvLyB0aGUgYWRkcmVzcyBpcyBhIHZhcmludCBwcmVmaXhlZCBtdWx0aWhhc2ggc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gIGNvbnN0IG1oID0gbmV3IENJRChoYXNoKS5tdWx0aWhhc2hcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobWgubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIG1oXSlcbn1cblxuZnVuY3Rpb24gYnVmMm1oIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBjb25zdCBhZGRyZXNzID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoYWRkcmVzcylcbn1cblxuZnVuY3Rpb24gb25pb24yYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gMTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uIGFkZHJlc3MuJylcbiAgfVxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShiYXNlMzIuZGVjb2RlLmFzQnl0ZXMoYWRkclswXS50b1VwcGVyQ2FzZSgpKSlcblxuICAvLyBvbmlvbiBwb3J0IG51bWJlclxuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoYWRkclsxXSwgMTApXG4gIGlmIChwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgbnVtYmVyIGlzIG5vdCBpbiByYW5nZSgxLCA2NTUzNiknKVxuICB9XG4gIGNvbnN0IHBvcnRCdWYgPSBwb3J0MmJ1Zihwb3J0KVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBwb3J0QnVmXSlcbn1cblxuZnVuY3Rpb24gb25pb24zMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGFkZHIgPSBzdHIuc3BsaXQoJzonKVxuICBpZiAoYWRkci5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkciArICcgZG9lcyBub3QgY29udGFpbiBhIHBvcnQgbnVtYmVyJylcbiAgfVxuICBpZiAoYWRkclswXS5sZW5ndGggIT09IDU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHJbMF0gKyAnIG5vdCBhIFRvciBvbmlvbjMgYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBidWYyb25pb24gKGJ1Zikge1xuICBjb25zdCBhZGRyQnl0ZXMgPSBidWYuc2xpY2UoMCwgYnVmLmxlbmd0aCAtIDIpXG4gIGNvbnN0IHBvcnRCeXRlcyA9IGJ1Zi5zbGljZShidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgYWRkciA9IGJhc2UzMi5lbmNvZGUoYWRkckJ5dGVzKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHBvcnQgPSBidWYycG9ydChwb3J0Qnl0ZXMpXG4gIHJldHVybiBhZGRyICsgJzonICsgcG9ydFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXAgPSBleHBvcnRzO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5cbmlwLnRvQnVmZmVyID0gZnVuY3Rpb24oaXAsIGJ1ZmYsIG9mZnNldCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcblxuICB2YXIgcmVzdWx0O1xuXG4gIGlmICh0aGlzLmlzVjRGb3JtYXQoaXApKSB7XG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDQpO1xuICAgIGlwLnNwbGl0KC9cXC4vZykubWFwKGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSBwYXJzZUludChieXRlLCAxMCkgJiAweGZmO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNWNkZvcm1hdChpcCkpIHtcbiAgICB2YXIgc2VjdGlvbnMgPSBpcC5zcGxpdCgnOicsIDgpO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXN2NCA9IHRoaXMuaXNWNEZvcm1hdChzZWN0aW9uc1tpXSk7XG4gICAgICB2YXIgdjRCdWZmZXI7XG5cbiAgICAgIGlmIChpc3Y0KSB7XG4gICAgICAgIHY0QnVmZmVyID0gdGhpcy50b0J1ZmZlcihzZWN0aW9uc1tpXSk7XG4gICAgICAgIHNlY3Rpb25zW2ldID0gdjRCdWZmZXIuc2xpY2UoMCwgMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodjRCdWZmZXIgJiYgKytpIDwgOCkge1xuICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaSwgMCwgdjRCdWZmZXIuc2xpY2UoMiwgNCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VjdGlvbnNbMF0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMudW5zaGlmdCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMucHVzaCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnMubGVuZ3RoIDwgOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9uc1tpXSAhPT0gJyc7IGkrKyk7XG4gICAgICB2YXIgYXJndiA9IFsgaSwgMSBdO1xuICAgICAgZm9yIChpID0gOSAtIHNlY3Rpb25zLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICBhcmd2LnB1c2goJzAnKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25zLnNwbGljZS5hcHBseShzZWN0aW9ucywgYXJndik7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDE2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gcGFyc2VJbnQoc2VjdGlvbnNbaV0sIDE2KTtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gd29yZCAmIDB4ZmY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCBpcCBhZGRyZXNzOiAnICsgaXApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmlwLnRvU3RyaW5nID0gZnVuY3Rpb24oYnVmZiwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gfn5vZmZzZXQ7XG4gIGxlbmd0aCA9IGxlbmd0aCB8fCAoYnVmZi5sZW5ndGggLSBvZmZzZXQpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKGxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChidWZmW29mZnNldCArIGldKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJy4nKTtcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IDE2KSB7XG4gICAgLy8gSVB2NlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmYucmVhZFVJbnQxNkJFKG9mZnNldCArIGkpLnRvU3RyaW5nKDE2KSk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5qb2luKCc6Jyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyhefDopMCg6MCkqOjAoOnwkKS8sICckMTo6JDMnKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOnszLDR9LywgJzo6Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGlwdjRSZWdleCA9IC9eKFxcZHsxLDN9XFwuKXszLDN9XFxkezEsM30kLztcbnZhciBpcHY2UmVnZXggPVxuICAgIC9eKDo6KT8oKChcXGR7MSwzfVxcLil7M30oXFxkezEsM30pezF9KT8oWzAtOWEtZl0pezAsNH06ezAsMn0pezEsOH0oOjopPyQvaTtcblxuaXAuaXNWNEZvcm1hdCA9IGZ1bmN0aW9uKGlwKSB7XG4gIHJldHVybiBpcHY0UmVnZXgudGVzdChpcCk7XG59O1xuXG5pcC5pc1Y2Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjZSZWdleC50ZXN0KGlwKTtcbn07XG5mdW5jdGlvbiBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSkge1xuICByZXR1cm4gZmFtaWx5ID8gZmFtaWx5LnRvTG93ZXJDYXNlKCkgOiAnaXB2NCc7XG59XG5cbmlwLmZyb21QcmVmaXhMZW4gPSBmdW5jdGlvbihwcmVmaXhsZW4sIGZhbWlseSkge1xuICBpZiAocHJlZml4bGVuID4gMzIpIHtcbiAgICBmYW1pbHkgPSAnaXB2Nic7XG4gIH0gZWxzZSB7XG4gICAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuICB9XG5cbiAgdmFyIGxlbiA9IDQ7XG4gIGlmIChmYW1pbHkgPT09ICdpcHY2Jykge1xuICAgIGxlbiA9IDE2O1xuICB9XG4gIHZhciBidWZmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gYnVmZi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgYml0cyA9IDg7XG4gICAgaWYgKHByZWZpeGxlbiA8IDgpIHtcbiAgICAgIGJpdHMgPSBwcmVmaXhsZW47XG4gICAgfVxuICAgIHByZWZpeGxlbiAtPSBiaXRzO1xuXG4gICAgYnVmZltpXSA9IH4oMHhmZiA+PiBiaXRzKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG59O1xuXG5pcC5tYXNrID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICBhZGRyID0gaXAudG9CdWZmZXIoYWRkcik7XG4gIG1hc2sgPSBpcC50b0J1ZmZlcihtYXNrKTtcblxuICB2YXIgcmVzdWx0ID0gbmV3IEJ1ZmZlcihNYXRoLm1heChhZGRyLmxlbmd0aCwgbWFzay5sZW5ndGgpKTtcblxuICB2YXIgaSA9IDA7XG4gIC8vIFNhbWUgcHJvdG9jb2wgLSBkbyBiaXR3aXNlIGFuZFxuICBpZiAoYWRkci5sZW5ndGggPT09IG1hc2subGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGFkZHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXNrLmxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjYgYWRkcmVzcyBhbmQgSVB2NCBtYXNrXG4gICAgLy8gKE1hc2sgbG93IGJpdHMpXG4gICAgZm9yIChpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbYWRkci5sZW5ndGggLSA0ICArIGldICYgbWFza1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSVB2NiBtYXNrIGFuZCBJUHY0IGFkZHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGggLSA2OyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gOjpmZmZmOmlwdjRcbiAgICByZXN1bHRbMTBdID0gMHhmZjtcbiAgICByZXN1bHRbMTFdID0gMHhmZjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2kgKyAxMl0gPSBhZGRyW2ldICYgbWFza1tpICsgMTJdO1xuICAgIH1cbiAgICBpID0gaSArIDEyO1xuICB9XG4gIGZvciAoOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKVxuICAgIHJlc3VsdFtpXSA9IDA7XG5cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKHJlc3VsdCk7XG59O1xuXG5pcC5jaWRyID0gZnVuY3Rpb24oY2lkclN0cmluZykge1xuICB2YXIgY2lkclBhcnRzID0gY2lkclN0cmluZy5zcGxpdCgnLycpO1xuXG4gIHZhciBhZGRyID0gY2lkclBhcnRzWzBdO1xuICBpZiAoY2lkclBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ0lEUiBzdWJuZXQ6ICcgKyBhZGRyKTtcblxuICB2YXIgbWFzayA9IGlwLmZyb21QcmVmaXhMZW4ocGFyc2VJbnQoY2lkclBhcnRzWzFdLCAxMCkpO1xuXG4gIHJldHVybiBpcC5tYXNrKGFkZHIsIG1hc2spO1xufTtcblxuaXAuc3VibmV0ID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICB2YXIgbmV0d29ya0FkZHJlc3MgPSBpcC50b0xvbmcoaXAubWFzayhhZGRyLCBtYXNrKSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBtYXNrJ3MgbGVuZ3RoLlxuICB2YXIgbWFza0J1ZmZlciA9IGlwLnRvQnVmZmVyKG1hc2spO1xuICB2YXIgbWFza0xlbmd0aCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1hc2tCdWZmZXJbaV0gPT09IDB4ZmYpIHtcbiAgICAgIG1hc2tMZW5ndGggKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9jdGV0ID0gbWFza0J1ZmZlcltpXSAmIDB4ZmY7XG4gICAgICB3aGlsZSAob2N0ZXQpIHtcbiAgICAgICAgb2N0ZXQgPSAob2N0ZXQgPDwgMSkgJiAweGZmO1xuICAgICAgICBtYXNrTGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG51bWJlck9mQWRkcmVzc2VzID0gTWF0aC5wb3coMiwgMzIgLSBtYXNrTGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIG5ldHdvcmtBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyksXG4gICAgZmlyc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyAxKSxcbiAgICBsYXN0QWRkcmVzczogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAyKSxcbiAgICBicm9hZGNhc3RBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMSksXG4gICAgc3VibmV0TWFzazogbWFzayxcbiAgICBzdWJuZXRNYXNrTGVuZ3RoOiBtYXNrTGVuZ3RoLFxuICAgIG51bUhvc3RzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICBudW1iZXJPZkFkZHJlc3NlcyA6IG51bWJlck9mQWRkcmVzc2VzIC0gMixcbiAgICBsZW5ndGg6IG51bWJlck9mQWRkcmVzc2VzLFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgcmV0dXJuIG5ldHdvcmtBZGRyZXNzID09PSBpcC50b0xvbmcoaXAubWFzayhvdGhlciwgbWFzaykpO1xuICAgIH1cbiAgfTtcbn07XG5cbmlwLmNpZHJTdWJuZXQgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLnN1Ym5ldChhZGRyLCBtYXNrKTtcbn07XG5cbmlwLm5vdCA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgdmFyIGJ1ZmYgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgYnVmZltpXSA9IDB4ZmYgXiBidWZmW2ldO1xuICB9XG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm9yID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBzYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFbaV0gfD0gYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGEpO1xuXG4gIC8vIG1peGVkIHByb3RvY29sc1xuICB9IGVsc2Uge1xuICAgIHZhciBidWZmID0gYTtcbiAgICB2YXIgb3RoZXIgPSBiO1xuICAgIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICBidWZmID0gYjtcbiAgICAgIG90aGVyID0gYTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBvdGhlci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGJ1ZmYubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZbaV0gfD0gb3RoZXJbaSAtIG9mZnNldF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xuICB9XG59O1xuXG5pcC5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBTYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3dhcFxuICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgdCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICAvLyBhIC0gSVB2NCwgYiAtIElQdjZcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKGJbaV0gIT09IDApIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB3b3JkID0gYi5yZWFkVUludDE2QkUoMTApO1xuICBpZiAod29yZCAhPT0gMCAmJiB3b3JkICE9PSAweGZmZmYpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2kgKyAxMl0pIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuaXAuaXNQcml2YXRlID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTBcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTkyXFwuMTY4XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNzJcXC4oMVs2LTldfDJcXGR8MzB8MzEpXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTY5XFwuMjU0XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXmZbY2RdWzAtOWEtZl17Mn06L2kudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDovaS50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5pc1B1YmxpYyA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuICFpcC5pc1ByaXZhdGUoYWRkcik7XG59O1xuXG5pcC5pc0xvb3BiYWNrID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pL1xuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXmZlODA6OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5sb29wYmFjayA9IGZ1bmN0aW9uKGZhbWlseSkge1xuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgaWYgKGZhbWlseSAhPT0gJ2lwdjQnICYmIGZhbWlseSAhPT0gJ2lwdjYnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYW1pbHkgbXVzdCBiZSBpcHY0IG9yIGlwdjYnKTtcbiAgfVxuXG4gIHJldHVybiBmYW1pbHkgPT09ICdpcHY0JyA/ICcxMjcuMC4wLjEnIDogJ2ZlODA6OjEnO1xufTtcblxuLy9cbi8vICMjIyBmdW5jdGlvbiBhZGRyZXNzIChuYW1lLCBmYW1pbHkpXG4vLyAjIyMjIEBuYW1lIHtzdHJpbmd8J3B1YmxpYyd8J3ByaXZhdGUnfSAqKk9wdGlvbmFsKiogTmFtZSBvciBzZWN1cml0eVxuLy8gICAgICBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UuXG4vLyAjIyMjIEBmYW1pbHkge2lwdjR8aXB2Nn0gKipPcHRpb25hbCoqIElQIGZhbWlseSBvZiB0aGUgYWRkcmVzcyAoZGVmYXVsdHNcbi8vICAgICAgdG8gaXB2NCkuXG4vL1xuLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB3aXRoXG4vLyB0aGUgc3BlY2lmaWVkIGBuYW1lYDpcbi8vICAgKiBTdHJpbmc6IEZpcnN0IGBmYW1pbHlgIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS5cbi8vICAgICAgICAgICAgIElmIG5vdCBmb3VuZCBzZWUgYHVuZGVmaW5lZGAuXG4vLyAgICogJ3B1YmxpYyc6IHRoZSBmaXJzdCBwdWJsaWMgaXAgYWRkcmVzcyBvZiBmYW1pbHkuXG4vLyAgICogJ3ByaXZhdGUnOiB0aGUgZmlyc3QgcHJpdmF0ZSBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiB1bmRlZmluZWQ6IEZpcnN0IGFkZHJlc3Mgd2l0aCBgaXB2NGAgb3IgbG9vcGJhY2sgYWRkcmVzcyBgMTI3LjAuMC4xYC5cbi8vXG5pcC5hZGRyZXNzID0gZnVuY3Rpb24obmFtZSwgZmFtaWx5KSB7XG4gIHZhciBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTtcbiAgdmFyIGFsbDtcblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgLy9cbiAgLy8gSWYgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBoYXMgYmVlbiBuYW1lZCxcbiAgLy8gcmV0dXJuIHRoZSBhZGRyZXNzLlxuICAvL1xuICBpZiAobmFtZSAmJiBuYW1lICE9PSAncHJpdmF0ZScgJiYgbmFtZSAhPT0gJ3B1YmxpYycpIHtcbiAgICB2YXIgcmVzID0gaW50ZXJmYWNlc1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24oZGV0YWlscykge1xuICAgICAgdmFyIGl0ZW1GYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGl0ZW1GYW1pbHkgPT09IGZhbWlseTtcbiAgICB9KTtcbiAgICBpZiAocmVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc1swXS5hZGRyZXNzO1xuICB9XG5cbiAgdmFyIGFsbCA9IE9iamVjdC5rZXlzKGludGVyZmFjZXMpLm1hcChmdW5jdGlvbiAobmljKSB7XG4gICAgLy9cbiAgICAvLyBOb3RlOiBuYW1lIHdpbGwgb25seSBiZSBgcHVibGljYCBvciBgcHJpdmF0ZWBcbiAgICAvLyB3aGVuIHRoaXMgaXMgY2FsbGVkLlxuICAgIC8vXG4gICAgdmFyIGFkZHJlc3NlcyA9IGludGVyZmFjZXNbbmljXS5maWx0ZXIoZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMuZmFtaWx5ID0gZGV0YWlscy5mYW1pbHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChkZXRhaWxzLmZhbWlseSAhPT0gZmFtaWx5IHx8IGlwLmlzTG9vcGJhY2soZGV0YWlscy5hZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZSA9PT0gJ3B1YmxpYycgPyBpcC5pc1ByaXZhdGUoZGV0YWlscy5hZGRyZXNzKSA6XG4gICAgICAgICAgaXAuaXNQdWJsaWMoZGV0YWlscy5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhZGRyZXNzZXMubGVuZ3RoID8gYWRkcmVzc2VzWzBdLmFkZHJlc3MgOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4gIWFsbC5sZW5ndGggPyBpcC5sb29wYmFjayhmYW1pbHkpIDogYWxsWzBdO1xufTtcblxuaXAudG9Mb25nID0gZnVuY3Rpb24oaXApIHtcbiAgdmFyIGlwbCA9IDA7XG4gIGlwLnNwbGl0KCcuJykuZm9yRWFjaChmdW5jdGlvbihvY3RldCkge1xuICAgIGlwbCA8PD0gODtcbiAgICBpcGwgKz0gcGFyc2VJbnQob2N0ZXQpO1xuICB9KTtcbiAgcmV0dXJuKGlwbCA+Pj4gMCk7XG59O1xuXG5pcC5mcm9tTG9uZyA9IGZ1bmN0aW9uKGlwbCkge1xuICByZXR1cm4gKChpcGwgPj4+IDI0KSArICcuJyArXG4gICAgICAoaXBsID4+IDE2ICYgMjU1KSArICcuJyArXG4gICAgICAoaXBsID4+IDggJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgJiAyNTUpICk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgaXBSZWdleCA9IHJlcXVpcmUoJ2lwLXJlZ2V4Jyk7XG5cbmNvbnN0IGlzSXAgPSBzdHJpbmcgPT4gaXBSZWdleCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY0ID0gc3RyaW5nID0+IGlwUmVnZXgudjQoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52NiA9IHN0cmluZyA9PiBpcFJlZ2V4LnY2KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudmVyc2lvbiA9IHN0cmluZyA9PiBpc0lwKHN0cmluZykgPyAoaXNJcC52NChzdHJpbmcpID8gNCA6IDYpIDogdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXA7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdvcmQgPSAnW2EtZkEtRlxcXFxkOl0nO1xuY29uc3QgYiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmluY2x1ZGVCb3VuZGFyaWVzID9cblx0YCg/Oig/PD1cXFxcc3xeKSg/PSR7d29yZH0pfCg/PD0ke3dvcmR9KSg/PVxcXFxzfCQpKWAgOlxuXHQnJztcblxuY29uc3QgdjQgPSAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuXG5jb25zdCB2NnNlZyA9ICdbYS1mQS1GXFxcXGRdezEsNH0nO1xuY29uc3QgdjYgPSBgXG4oXG4oPzoke3Y2c2VnfTopezd9KD86JHt2NnNlZ318Oil8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo3OjogIDE6MjozOjQ6NTo2Ojc6OFxuKD86JHt2NnNlZ306KXs2fSg/OiR7djR9fDoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjY6OiAgICAxOjI6Mzo0OjU6Njo6OCAgIDE6MjozOjQ6NTo2Ojo4ICAxOjI6Mzo0OjU6Njo6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs1fSg/Ojoke3Y0fXwoOiR7djZzZWd9KXsxLDJ9fDopfCAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjogICAgICAxOjI6Mzo0OjU6Ojc6OCAgIDE6MjozOjQ6NTo6OCAgICAxOjI6Mzo0OjU6Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs0fSg/Oig6JHt2NnNlZ30pezAsMX06JHt2NH18KDoke3Y2c2VnfSl7MSwzfXw6KXwgLy8gMToyOjM6NDo6ICAgICAgICAxOjI6Mzo0Ojo2Ojc6OCAgIDE6MjozOjQ6OjggICAgICAxOjI6Mzo0Ojo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXszfSg/Oig6JHt2NnNlZ30pezAsMn06JHt2NH18KDoke3Y2c2VnfSl7MSw0fXw6KXwgLy8gMToyOjM6OiAgICAgICAgICAxOjI6Mzo6NTo2Ojc6OCAgIDE6MjozOjo4ICAgICAgICAxOjI6Mzo6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsyfSg/Oig6JHt2NnNlZ30pezAsM306JHt2NH18KDoke3Y2c2VnfSl7MSw1fXw6KXwgLy8gMToyOjogICAgICAgICAgICAxOjI6OjQ6NTo2Ojc6OCAgIDE6Mjo6OCAgICAgICAgICAxOjI6OjQ6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsxfSg/Oig6JHt2NnNlZ30pezAsNH06JHt2NH18KDoke3Y2c2VnfSl7MSw2fXw6KXwgLy8gMTo6ICAgICAgICAgICAgICAxOjozOjQ6NTo2Ojc6OCAgIDE6OjggICAgICAgICAgICAxOjozOjQ6NTo2Ojc6MS4yLjMuNFxuKD86OigoPzo6JHt2NnNlZ30pezAsNX06JHt2NH18KD86OiR7djZzZWd9KXsxLDd9fDopKSAgICAgICAgICAgLy8gOjoyOjM6NDo1OjY6Nzo4ICA6OjI6Mzo0OjU6Njo3OjggIDo6OCAgICAgICAgICAgICA6OjEuMi4zLjRcbikoJVswLTlhLXpBLVpdezEsfSk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICVldGgwICAgICAgICAgICAgJTFcbmAucmVwbGFjZSgvXFxzKlxcL1xcLy4qJC9nbSwgJycpLnJlcGxhY2UoL1xcbi9nLCAnJykudHJpbSgpO1xuXG5jb25zdCBpcCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID9cblx0bmV3IFJlZ0V4cChgKD86XiR7djR9JCl8KD86XiR7djZ9JClgKSA6XG5cdG5ldyBSZWdFeHAoYCg/OiR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX0pfCg/OiR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX0pYCwgJ2cnKTtcblxuaXAudjQgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y0fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX1gLCAnZycpO1xuaXAudjYgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y2fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX1gLCAnZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlwO1xuIiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXVsdGljb2RlYyBzcGVjaWZpY2F0aW9uLlxuICpcbiAqIEBtb2R1bGUgbXVsdGljb2RlY1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG11bHRpY29kZWMgPSByZXF1aXJlKCdtdWx0aWNvZGVjJylcbiAqXG4gKiBjb25zdCBwcmVmaXhlZFByb3RvYnVmID0gbXVsdGljb2RlYy5hZGRQcmVmaXgoJ3Byb3RvYnVmJywgcHJvdG9idWZCdWZmZXIpXG4gKiAvLyBwcmVmaXhlZFByb3RvYnVmIDB4NTAuLi5cbiAqXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgaW50VGFibGUgPSByZXF1aXJlKCcuL2ludC10YWJsZScpXG5jb25zdCBjb2RlY05hbWVUb0NvZGVWYXJpbnQgPSByZXF1aXJlKCcuL3ZhcmludC10YWJsZScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzXG5cbi8qKlxuICogUHJlZml4IGEgYnVmZmVyIHdpdGggYSBtdWx0aWNvZGVjLXBhY2tlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG11bHRpY29kZWNTdHJPckNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmFkZFByZWZpeCA9IChtdWx0aWNvZGVjU3RyT3JDb2RlLCBkYXRhKSA9PiB7XG4gIGxldCBwcmVmaXhcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG11bHRpY29kZWNTdHJPckNvZGUpKSB7XG4gICAgcHJlZml4ID0gdXRpbC52YXJpbnRCdWZmZXJFbmNvZGUobXVsdGljb2RlY1N0ck9yQ29kZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29kZWNOYW1lVG9Db2RlVmFyaW50W211bHRpY29kZWNTdHJPckNvZGVdKSB7XG4gICAgICBwcmVmaXggPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWNvZGVjIG5vdCByZWNvZ25pemVkJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3ByZWZpeCwgZGF0YV0pXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGUgdGhlIG11bHRpY29kZWMtcGFja2VkIHByZWZpeCBmcm9tIHRoZSBkYXRhLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLnJtUHJlZml4ID0gKGRhdGEpID0+IHtcbiAgdmFyaW50LmRlY29kZShkYXRhKVxuICByZXR1cm4gZGF0YS5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZWMgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldENvZGVjID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG4gIGNvbnN0IGNvZGVjTmFtZSA9IGludFRhYmxlLmdldChjb2RlKVxuICBpZiAoY29kZWNOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGUgJHtjb2RlfSBub3QgZm91bmRgKVxuICB9XG4gIHJldHVybiBjb2RlY05hbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGNvZGVjLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVjXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldE5hbWUgPSAoY29kZWMpID0+IHtcbiAgcmV0dXJuIGludFRhYmxlLmdldChjb2RlYylcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIGNvZGVjXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXROdW1iZXIgPSAobmFtZSkgPT4ge1xuICBjb25zdCBjb2RlID0gY29kZWNOYW1lVG9Db2RlVmFyaW50W25hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgbmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIHV0aWwudmFyaW50QnVmZmVyRGVjb2RlKGNvZGUpWzBdXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIG9mIHRoZSBwcmVmaXhlZCBkYXRhLlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeGVkRGF0YVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXRDb2RlID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICByZXR1cm4gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIGFzIHZhcmludCBvZiBhIGNvZGVjIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNOYW1lXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmdldENvZGVWYXJpbnQgPSAoY29kZWNOYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbY29kZWNOYW1lXVxuICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlYyBgJyArIGNvZGVjTmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIGNvZGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhcmludCBvZiBhIGNvZGUuXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICovXG5leHBvcnRzLmdldFZhcmludCA9IChjb2RlKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZW5jb2RlKGNvZGUpXG59XG5cbi8vIE1ha2UgdGhlIGNvbnN0YW50cyB0b3AtbGV2ZWwgY29uc3RhbnRzXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIGNvbnN0YW50cylcblxuLy8gSHVtYW4gZnJpZW5kbHkgbmFtZXMgZm9yIHByaW50aW5nLCBlLmcuIGluIGVycm9yIG1lc3NhZ2VzXG5leHBvcnRzLnByaW50ID0gcmVxdWlyZSgnLi9wcmludCcpXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IGJhc2VUYWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBoZXhTdHJpbmcgLT4gY29kZWNOYW1lXG5jb25zdCBuYW1lVGFibGUgPSBuZXcgTWFwKClcblxuZm9yIChjb25zdCBlbmNvZGluZ05hbWUgaW4gYmFzZVRhYmxlKSB7XG4gIGNvbnN0IGNvZGUgPSBiYXNlVGFibGVbZW5jb2RpbmdOYW1lXVxuICBuYW1lVGFibGUuc2V0KGNvZGUsIGVuY29kaW5nTmFtZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKG5hbWVUYWJsZSlcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlVGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5jb25zdCB2YXJpbnRFbmNvZGUgPSByZXF1aXJlKCcuL3V0aWwnKS52YXJpbnRFbmNvZGVcblxuLy8gbWFwIGZvciBjb2RlY05hbWUgLT4gY29kZVZhcmludEJ1ZmZlclxuY29uc3QgdmFyaW50VGFibGUgPSB7fVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIHZhcmludFRhYmxlW2VuY29kaW5nTmFtZV0gPSB2YXJpbnRFbmNvZGUoY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHZhcmludFRhYmxlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGVjQ29uc3RhbnQgLT4gY29kZVxuY29uc3QgY29uc3RhbnRzID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGNvbnN0YW50c1tuYW1lLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLS9nLCAnXycpXSA9IGNvZGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKGNvbnN0YW50cylcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB0YWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBjb2RlIC0+IHByaW50IGZyaWVuZGx5IG5hbWVcbmNvbnN0IHRhYmxlQnlDb2RlID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGlmICh0YWJsZUJ5Q29kZVtjb2RlXSA9PT0gdW5kZWZpbmVkKSB0YWJsZUJ5Q29kZVtjb2RlXSA9IG5hbWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHRhYmxlQnlDb2RlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuXG52YXIgQ0lEVXRpbCA9IHtcbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGlzIG5vdC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgaXQgaXMgYSB2YWxpZCBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tDSURDb21wb25lbnRzOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsIHZhbHVlcyBhcmUgbm90IHZhbGlkIENJRHMnXG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIudmVyc2lvbiA9PT0gMCB8fCBvdGhlci52ZXJzaW9uID09PSAxKSkge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIHZlcnNpb24sIG11c3QgYmUgYSBudW1iZXIgZXF1YWwgdG8gMSBvciAwJ1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3RoZXIuY29kZWMgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ2NvZGVjIG11c3QgYmUgc3RyaW5nJ1xuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAob3RoZXIuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICAgIHJldHVybiBcImNvZGVjIG11c3QgYmUgJ2RhZy1wYicgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlci5tdWx0aWJhc2VOYW1lICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICByZXR1cm4gXCJtdWx0aWJhc2VOYW1lIG11c3QgYmUgJ2Jhc2U1OGJ0YycgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlci5tdWx0aWhhc2gpKSB7XG4gICAgICByZXR1cm4gJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBtaC52YWxpZGF0ZShvdGhlci5tdWx0aWhhc2gpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgZXJyb3JNc2cgPSBlcnIubWVzc2FnZVxuICAgICAgaWYgKCFlcnJvck1zZykgeyAvLyBKdXN0IGluIGNhc2UgbWgudmFsaWRhdGUoKSB0aHJvd3MgYW4gZXJyb3Igd2l0aCBlbXB0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGVycm9yTXNnID0gJ011bHRpaGFzaCB2YWxpZGF0aW9uIGZhaWxlZCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvck1zZ1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENJRFV0aWxcbiIsIi8qXG4gKiBbaGktYmFzZTMyXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2hpLWJhc2UzMn1cbiAqXG4gKiBAdmVyc2lvbiAwLjUuMFxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE4XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB7fTtcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fTk9ERV9KUyAmJiB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gIGlmIChOT0RFX0pTKSB7XG4gICAgcm9vdCA9IGdsb2JhbDtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSElfQkFTRTMyX05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEJBU0UzMl9FTkNPREVfQ0hBUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nycuc3BsaXQoJycpO1xuICB2YXIgQkFTRTMyX0RFQ09ERV9DSEFSID0ge1xuICAgICdBJzogMCwgJ0InOiAxLCAnQyc6IDIsICdEJzogMywgJ0UnOiA0LCAnRic6IDUsICdHJzogNiwgJ0gnOiA3LCAnSSc6IDgsXG4gICAgJ0onOiA5LCAnSyc6IDEwLCAnTCc6IDExLCAnTSc6IDEyLCAnTic6IDEzLCAnTyc6IDE0LCAnUCc6IDE1LCAnUSc6IDE2LFxuICAgICdSJzogMTcsICdTJzogMTgsICdUJzogMTksICdVJzogMjAsICdWJzogMjEsICdXJzogMjIsICdYJzogMjMsICdZJzogMjQsXG4gICAgJ1onOiAyNSwgJzInOiAyNiwgJzMnOiAyNywgJzQnOiAyOCwgJzUnOiAyOSwgJzYnOiAzMCwgJzcnOiAzMVxuICB9O1xuXG4gIHZhciBibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgdmFyIHRocm93SW52YWxpZFV0ZjggPSBmdW5jdGlvbiAocG9zaXRpb24sIHBhcnRpYWwpIHtcbiAgICBpZiAocGFydGlhbC5sZW5ndGggPiAxMCkge1xuICAgICAgcGFydGlhbCA9ICcuLi4nICsgcGFydGlhbC5zdWJzdHIoLTEwKTtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignRGVjb2RlZCBkYXRhIGlzIG5vdCB2YWxpZCBVVEYtOC4nXG4gICAgICArICcgTWF5YmUgdHJ5IGJhc2UzMi5kZWNvZGUuYXNCeXRlcygpPydcbiAgICAgICsgJyBQYXJ0aWFsIGRhdGEgYWZ0ZXIgcmVhZGluZyAnICsgcG9zaXRpb24gKyAnIGJ5dGVzOiAnICsgcGFydGlhbCArICcgPC0nKTtcbiAgICBlcnIucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aHJvdyBlcnI7XG4gIH07XG5cbiAgdmFyIHRvVXRmOFN0cmluZyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoLCBpID0gMCwgZm9sbG93aW5nQ2hhcnMgPSAwLCBiLCBjO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgIGlmIChiIDw9IDB4N0YpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChiID4gMHhCRiAmJiBiIDw9IDB4REYpIHtcbiAgICAgICAgYyA9IGIgJiAweDFGO1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGIgPD0gMHhFRikge1xuICAgICAgICBjID0gYiAmIDB4MEY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEY3KSB7XG4gICAgICAgIGMgPSBiICYgMHgwNztcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGxvd2luZ0NoYXJzOyArK2opIHtcbiAgICAgICAgYiA9IGJ5dGVzW2krK107XG4gICAgICAgIGlmIChiIDwgMHg4MCB8fCBiID4gMHhCRikge1xuICAgICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjIDw8PSA2O1xuICAgICAgICBjICs9IGIgJiAweDNGO1xuICAgICAgfVxuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjID4gMHgxMEZGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEwKSArIDB4RDgwMCk7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZGVjb2RlQXNCeXRlcyA9IGZ1bmN0aW9uIChiYXNlMzJTdHIpIHtcbiAgICBpZiAoIS9eW0EtWjItNz1dKyQvLnRlc3QoYmFzZTMyU3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGJhc2UzMlN0ciA9IGJhc2UzMlN0ci5yZXBsYWNlKC89L2csICcnKTtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBieXRlcyA9IFtdLCBpbmRleCA9IDAsIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG5cbiAgICAvLyA0IGNoYXIgdG8gMyBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjcgPDwgNSB8IHY4KSAmIDI1NTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfTtcblxuICB2YXIgZW5jb2RlQXNjaWkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gcGFyc2VJbnQobGVuZ3RoIC8gNSkgKiA1OyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGNoYXJcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMSkge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICc9PT09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAnPT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDMpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICc9PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlVXRmOCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBjb2RlLCBlbmQgPSBmYWxzZSwgYmFzZTMyU3RyID0gJycsXG4gICAgICBpbmRleCA9IDAsIGksIHN0YXJ0ID0gMCwgYnl0ZXMgPSAwLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGRvIHtcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1s1XTtcbiAgICAgIGJsb2Nrc1sxXSA9IGJsb2Nrc1s2XTtcbiAgICAgIGJsb2Nrc1syXSA9IGJsb2Nrc1s3XTtcbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNTsgKytpbmRleCkge1xuICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGMwIHwgKGNvZGUgPj4gNik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGUwIHwgKGNvZGUgPj4gMTIpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2luZGV4KSAmIDB4M2ZmKSk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGYwIHwgKGNvZGUgPj4gMTgpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBieXRlcyArPSBpIC0gc3RhcnQ7XG4gICAgICBzdGFydCA9IGkgLSA1O1xuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IGxlbmd0aCAmJiBpIDwgNikge1xuICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdjEgPSBibG9ja3NbMF07XG4gICAgICBpZiAoaSA+IDQpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgdjUgPSBibG9ja3NbNF07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAxKSB7XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgICAnPT09PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAgICc9PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAgICc9PT0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICAgJz0nO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKCFlbmQpO1xuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZUJ5dGVzID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY1ID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQsIGFzY2lpT25seSkge1xuICAgIHZhciBub3RTdHJpbmcgPSB0eXBlb2YoaW5wdXQpICE9PSAnc3RyaW5nJztcbiAgICBpZiAobm90U3RyaW5nICYmIGlucHV0LmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgaW5wdXQgPSBuZXcgVWludDhBcnJheShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyhpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiBlbmNvZGVBc2NpaShpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVVdGY4KGlucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChiYXNlMzJTdHIsIGFzY2lpT25seSkge1xuICAgIGlmICghYXNjaWlPbmx5KSB7XG4gICAgICByZXR1cm4gdG9VdGY4U3RyaW5nKGRlY29kZUFzQnl0ZXMoYmFzZTMyU3RyKSk7XG4gICAgfVxuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgc3RyID0gJycsIGxlbmd0aCA9IGJhc2UzMlN0ci5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gLTEpIHtcbiAgICAgIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gOCBjaGFyIHRvIDUgYnl0ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBsZW5ndGggPj4gMyA8PCAzOyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjggPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjcgPDwgNSB8IHY4KSAmIDI1NSk7XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGJ5dGVzXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA3KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlOiBkZWNvZGVcbiAgfTtcbiAgZGVjb2RlLmFzQnl0ZXMgPSBkZWNvZGVBc0J5dGVzO1xuXG4gIGlmIChDT01NT05fSlMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5iYXNlMzIgPSBleHBvcnRzO1xuICAgIGlmIChBTUQpIHtcbiAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5cbi8qXG4gKiBWYWxpZCBjb21iaW5hdGlvbnNcbiAqL1xuY29uc3QgRE5TNCA9IGJhc2UoJ2RuczQnKVxuY29uc3QgRE5TNiA9IGJhc2UoJ2RuczYnKVxuY29uc3QgRE5TID0gb3IoXG4gIGJhc2UoJ2RucycpLFxuICBiYXNlKCdkbnNhZGRyJyksXG4gIEROUzQsXG4gIEROUzZcbilcblxuY29uc3QgSVAgPSBvcihiYXNlKCdpcDQnKSwgYmFzZSgnaXA2JykpXG5jb25zdCBUQ1AgPSBvcihcbiAgYW5kKElQLCBiYXNlKCd0Y3AnKSksXG4gIGFuZChETlMsIGJhc2UoJ3RjcCcpKVxuKVxuY29uc3QgVURQID0gYW5kKElQLCBiYXNlKCd1ZHAnKSlcbmNvbnN0IFVUUCA9IGFuZChVRFAsIGJhc2UoJ3V0cCcpKVxuXG5jb25zdCBXZWJTb2NrZXRzID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzJykpLFxuICBhbmQoRE5TLCBiYXNlKCd3cycpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRzU2VjdXJlID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzcycpKSxcbiAgYW5kKEROUywgYmFzZSgnd3NzJykpXG4pXG5cbmNvbnN0IEhUVFAgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnaHR0cCcpKSxcbiAgYW5kKElQLCBiYXNlKCdodHRwJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwJykpXG4pXG5cbmNvbnN0IEhUVFBTID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoSVAsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwcycpKVxuKVxuXG5jb25zdCBXZWJSVENTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJSVENEaXJlY3QgPSBvcihcbiAgYW5kKEhUVFAsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpLFxuICBhbmQoSFRUUFMsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpXG4pXG5cbmNvbnN0IFJlbGlhYmxlID0gb3IoXG4gIFdlYlNvY2tldHMsXG4gIFdlYlNvY2tldHNTZWN1cmUsXG4gIEhUVFAsXG4gIEhUVFBTLFxuICBXZWJSVENTdGFyLFxuICBXZWJSVENEaXJlY3QsXG4gIFRDUCxcbiAgVVRQXG4pXG5cbi8vIFVubGlrZSB3cy1zdGFyLCBzdGFyZHVzdCBjYW4gcnVuIG92ZXIgYW55IHRyYW5zcG9ydCB0aHVzIHJlbW92aW5nIHRoZSByZXF1aXJlbWVudCBmb3Igd2Vic29ja2V0cyAoYnV0IGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQgcnVubmluZyBhIHN0YXJkdXN0IHNlcnZlciBvdmVyIHdlYnJ0Yy1zdGFyIDspIClcbmNvbnN0IFN0YXJkdXN0ID0gb3IoXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLXN0YXJkdXN0JyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtc3RhcmR1c3QnKSlcbilcblxuY29uc3QgX1AyUCA9IG9yKFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycCcpKSxcbiAgV2ViUlRDU3RhcixcbiAgYmFzZSgncDJwJylcbilcblxuY29uc3QgX0NpcmN1aXQgPSBvcihcbiAgYW5kKF9QMlAsIGJhc2UoJ3AycC1jaXJjdWl0JyksIF9QMlApLFxuICBhbmQoX1AyUCwgYmFzZSgncDJwLWNpcmN1aXQnKSksXG4gIGFuZChiYXNlKCdwMnAtY2lyY3VpdCcpLCBfUDJQKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtY2lyY3VpdCcpKSxcbiAgYW5kKGJhc2UoJ3AycC1jaXJjdWl0JyksIFJlbGlhYmxlKSxcbiAgYmFzZSgncDJwLWNpcmN1aXQnKVxuKVxuXG5jb25zdCBDaXJjdWl0UmVjdXJzaXZlID0gKCkgPT4gb3IoXG4gIGFuZChfQ2lyY3VpdCwgQ2lyY3VpdFJlY3Vyc2l2ZSksXG4gIF9DaXJjdWl0XG4pXG5cbmNvbnN0IENpcmN1aXQgPSBDaXJjdWl0UmVjdXJzaXZlKClcblxuY29uc3QgUDJQID0gb3IoXG4gIGFuZChDaXJjdWl0LCBfUDJQLCBDaXJjdWl0KSxcbiAgYW5kKF9QMlAsIENpcmN1aXQpLFxuICBhbmQoQ2lyY3VpdCwgX1AyUCksXG4gIENpcmN1aXQsXG4gIF9QMlBcbilcblxuZXhwb3J0cy5ETlMgPSBETlNcbmV4cG9ydHMuRE5TNCA9IEROUzRcbmV4cG9ydHMuRE5TNiA9IEROUzZcbmV4cG9ydHMuSVAgPSBJUFxuZXhwb3J0cy5UQ1AgPSBUQ1BcbmV4cG9ydHMuVURQID0gVURQXG5leHBvcnRzLlVUUCA9IFVUUFxuZXhwb3J0cy5IVFRQID0gSFRUUFxuZXhwb3J0cy5IVFRQUyA9IEhUVFBTXG5leHBvcnRzLldlYlNvY2tldHMgPSBXZWJTb2NrZXRzXG5leHBvcnRzLldlYlNvY2tldHNTZWN1cmUgPSBXZWJTb2NrZXRzU2VjdXJlXG5leHBvcnRzLldlYlNvY2tldFN0YXIgPSBXZWJTb2NrZXRTdGFyXG5leHBvcnRzLldlYlJUQ1N0YXIgPSBXZWJSVENTdGFyXG5leHBvcnRzLldlYlJUQ0RpcmVjdCA9IFdlYlJUQ0RpcmVjdFxuZXhwb3J0cy5SZWxpYWJsZSA9IFJlbGlhYmxlXG5leHBvcnRzLlN0YXJkdXN0ID0gU3RhcmR1c3RcbmV4cG9ydHMuQ2lyY3VpdCA9IENpcmN1aXRcbmV4cG9ydHMuUDJQID0gUDJQXG5leHBvcnRzLklQRlMgPSBQMlBcblxuLypcbiAqIFZhbGlkYXRpb24gZnVuY3NcbiAqL1xuXG5mdW5jdGlvbiBtYWtlTWF0Y2hlc0Z1bmN0aW9uIChwYXJ0aWFsTWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAoIW11bHRpYWRkci5pc011bHRpYWRkcihhKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IG11bHRpYWRkcihhKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7IC8vIGNhdGNoIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZSAvLyBhbHNvIGlmIGl0J3MgaW52YWxpZCBpdCdzIHByb3BhYmx5IG5vdCBtYXRjaGluZyBhcyB3ZWxsIHNvIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvdXQgPSBwYXJ0aWFsTWF0Y2goYS5wcm90b05hbWVzKCkpXG4gICAgaWYgKG91dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBvdXQubGVuZ3RoID09PSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gYW5kICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKGEpIHtcbiAgICBpZiAoYS5sZW5ndGggPCBhcmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGEgPSB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYXJnKCkucGFydGlhbE1hdGNoKGEpXG4gICAgICAgIDogYXJnLnBhcnRpYWxNYXRjaChhKVxuXG4gICAgICBpZiAoYSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gYVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ3sgJyArIGFyZ3Muam9pbignICcpICsgJyB9JyB9LFxuICAgIGlucHV0OiBhcmdzLFxuICAgIG1hdGNoZXM6IG1ha2VNYXRjaGVzRnVuY3Rpb24ocGFydGlhbE1hdGNoKSxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG5cbmZ1bmN0aW9uIG9yICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAoYSkge1xuICAgIGxldCBvdXQgPSBudWxsXG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBhcmcoKS5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgICAgOiBhcmcucGFydGlhbE1hdGNoKGEpXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIG91dCA9IHJlc1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd7ICcgKyBhcmdzLmpvaW4oJyAnKSArICcgfScgfSxcbiAgICBpbnB1dDogYXJncyxcbiAgICBtYXRjaGVzOiBtYWtlTWF0Y2hlc0Z1bmN0aW9uKHBhcnRpYWxNYXRjaCksXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYmFzZSAobikge1xuICBjb25zdCBuYW1lID0gblxuXG4gIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gbXVsdGlhZGRyKGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHsgLy8gY2F0Y2ggZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vIGFsc28gaWYgaXQncyBpbnZhbGlkIGl0J3MgcHJvcGFibHkgbm90IG1hdGNoaW5nIGFzIHdlbGwgc28gcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG5hbWVzID0gYS5wcm90b05hbWVzKClcbiAgICBpZiAocG5hbWVzLmxlbmd0aCA9PT0gMSAmJiBwbmFtZXNbMF0gPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChwcm90b3MpIHtcbiAgICBpZiAocHJvdG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocHJvdG9zWzBdID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gcHJvdG9zLnNsaWNlKDEpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYW1lIH0sXG4gICAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IE5vZGVGb3JtRGF0YSgpO1xuXG4gICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgcmVhZFN0cmVhbSk7XG5cbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkZpbGVUb0lQRlNgO1xuXG4gICAgICAgIGlmICghKHJlYWRTdHJlYW0gaW5zdGFuY2VvZiBzdHJlYW0uUmVhZGFibGUpKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdyZWFkU3RyZWFtIGlzIG5vdCBhIHJlYWRhYmxlIHN0cmVhbScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBmaWxlc1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsIi8qIVxuICogbWltZS10eXBlc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRiID0gcmVxdWlyZSgnbWltZS1kYicpXG52YXIgZXh0bmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5leHRuYW1lXG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEVYVFJBQ1RfVFlQRV9SRUdFWFAgPSAvXlxccyooW147XFxzXSopKD86O3xcXHN8JCkvXG52YXIgVEVYVF9UWVBFX1JFR0VYUCA9IC9edGV4dFxcLy9pXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0cy5jaGFyc2V0ID0gY2hhcnNldFxuZXhwb3J0cy5jaGFyc2V0cyA9IHsgbG9va3VwOiBjaGFyc2V0IH1cbmV4cG9ydHMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuZXhwb3J0cy5leHRlbnNpb24gPSBleHRlbnNpb25cbmV4cG9ydHMuZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbClcbmV4cG9ydHMubG9va3VwID0gbG9va3VwXG5leHBvcnRzLnR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucy90eXBlcyBtYXBzXG5wb3B1bGF0ZU1hcHMoZXhwb3J0cy5leHRlbnNpb25zLCBleHBvcnRzLnR5cGVzKVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY2hhcnNldCAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG4gIHZhciBtaW1lID0gbWF0Y2ggJiYgZGJbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAobWltZSAmJiBtaW1lLmNoYXJzZXQpIHtcbiAgICByZXR1cm4gbWltZS5jaGFyc2V0XG4gIH1cblxuICAvLyBkZWZhdWx0IHRleHQvKiB0byB1dGYtOFxuICBpZiAobWF0Y2ggJiYgVEVYVF9UWVBFX1JFR0VYUC50ZXN0KG1hdGNoWzFdKSkge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmdWxsIENvbnRlbnQtVHlwZSBoZWFkZXIgZ2l2ZW4gYSBNSU1FIHR5cGUgb3IgZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlIChzdHIpIHtcbiAgLy8gVE9ETzogc2hvdWxkIHRoaXMgZXZlbiBiZSBpbiB0aGlzIG1vZHVsZT9cbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBtaW1lID0gc3RyLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IGV4cG9ydHMubG9va3VwKHN0cilcbiAgICA6IHN0clxuXG4gIGlmICghbWltZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIGNvbnRlbnQtdHlwZSBvciBvdGhlciBtb2R1bGVcbiAgaWYgKG1pbWUuaW5kZXhPZignY2hhcnNldCcpID09PSAtMSkge1xuICAgIHZhciBjaGFyc2V0ID0gZXhwb3J0cy5jaGFyc2V0KG1pbWUpXG4gICAgaWYgKGNoYXJzZXQpIG1pbWUgKz0gJzsgY2hhcnNldD0nICsgY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gbWltZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBleHRlbnNpb24gKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuXG4gIC8vIGdldCBleHRlbnNpb25zXG4gIHZhciBleHRzID0gbWF0Y2ggJiYgZXhwb3J0cy5leHRlbnNpb25zW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4dHNbMF1cbn1cblxuLyoqXG4gKiBMb29rdXAgdGhlIE1JTUUgdHlwZSBmb3IgYSBmaWxlIHBhdGgvZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBsb29rdXAgKHBhdGgpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gZ2V0IHRoZSBleHRlbnNpb24gKFwiZXh0XCIgb3IgXCIuZXh0XCIgb3IgZnVsbCBwYXRoKVxuICB2YXIgZXh0ZW5zaW9uID0gZXh0bmFtZSgneC4nICsgcGF0aClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zdWJzdHIoMSlcblxuICBpZiAoIWV4dGVuc2lvbikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMudHlwZXNbZXh0ZW5zaW9uXSB8fCBmYWxzZVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zIGFuZCB0eXBlcyBtYXBzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZU1hcHMgKGV4dGVuc2lvbnMsIHR5cGVzKSB7XG4gIC8vIHNvdXJjZSBwcmVmZXJlbmNlIChsZWFzdCAtPiBtb3N0KVxuICB2YXIgcHJlZmVyZW5jZSA9IFsnbmdpbngnLCAnYXBhY2hlJywgdW5kZWZpbmVkLCAnaWFuYSddXG5cbiAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaE1pbWVUeXBlICh0eXBlKSB7XG4gICAgdmFyIG1pbWUgPSBkYlt0eXBlXVxuICAgIHZhciBleHRzID0gbWltZS5leHRlbnNpb25zXG5cbiAgICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBtaW1lIC0+IGV4dGVuc2lvbnNcbiAgICBleHRlbnNpb25zW3R5cGVdID0gZXh0c1xuXG4gICAgLy8gZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBleHRzW2ldXG5cbiAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dKSB7XG4gICAgICAgIHZhciBmcm9tID0gcHJlZmVyZW5jZS5pbmRleE9mKGRiW3R5cGVzW2V4dGVuc2lvbl1dLnNvdXJjZSlcbiAgICAgICAgdmFyIHRvID0gcHJlZmVyZW5jZS5pbmRleE9mKG1pbWUuc291cmNlKVxuXG4gICAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dICE9PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyAmJlxuICAgICAgICAgIChmcm9tID4gdG8gfHwgKGZyb20gPT09IHRvICYmIHR5cGVzW2V4dGVuc2lvbl0uc3Vic3RyKDAsIDEyKSA9PT0gJ2FwcGxpY2F0aW9uLycpKSkge1xuICAgICAgICAgIC8vIHNraXAgdGhlIHJlbWFwcGluZ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHRoZSBleHRlbnNpb24gLT4gbWltZVxuICAgICAgdHlwZXNbZXh0ZW5zaW9uXSA9IHR5cGVcbiAgICB9XG4gIH0pXG59XG4iLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gcGFyYWxsZWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHBhcmFsbGVsXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gcGFyYWxsZWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCk7XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gIHtcbiAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdClcbiAgICB7XG4gICAgICBpZiAoZXJyb3IpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGxvb2tzIGxpa2UgaXQncyB0aGUgbGFzdCBvbmVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5sZW5ndGggPT09IDApXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgc2VyaWFsT3JkZXJlZCA9IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgcmV0dXJuIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIG51bGwsIGNhbGxiYWNrKTtcbn1cbiIsIi8vIHBvcHVsYXRlcyBtaXNzaW5nIHZhbHVlc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkc3QsIHNyYykge1xuXG4gIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihwcm9wKVxuICB7XG4gICAgZHN0W3Byb3BdID0gZHN0W3Byb3BdIHx8IHNyY1twcm9wXTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRzdDtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgYmFzZVBhdGhDb252ZXJ0ZXIgZnJvbSAnYmFzZS1wYXRoLWNvbnZlcnRlcic7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCByZWN1cnNpdmUgPSByZXF1aXJlKCdyZWN1cnNpdmUtZnMnKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5GaWxlVG9JUEZTYDtcblxuICAgICAgICByZWN1cnNpdmUucmVhZGRpcnIoc291cmNlUGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vZm9yIGVhY2ggZmlsZSBzdHJlYW0sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgY29ycmVjdCByZWxhdGl2ZSBmaWxlIHBhdGhcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnZmlsZScsIGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSksIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGg6IGJhc2VQYXRoQ29udmVydGVyKHNvdXJjZVBhdGgsIGZpbGUpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6ICdJbmZpbml0eScsIC8vdGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBheGlvcyBmcm9tIGVycm9yaW5nIG91dCB3aXRoIGxhcmdlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9ICR7ZGF0YS5fYm91bmRhcnl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBGaWxlIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZnVuY3Rpb24gY29udmVydEZpbGVQYXRoVG9CYXNlRGlyZWN0b3J5UGF0aChzb3VyY2VQYXRoLCBmaWxlUGF0aCkge1xuICAgIGxldCBuZXdTdHJpbmcgPSBzb3VyY2VQYXRoO1xuICAgIC8vbWFrZSBzdXJlIHRoZXJlIGlzbid0IGEgZGFuZ2xpbmcgLyB0byB0aHJvdyBhIGZhbHNlIHBvc2l0aXZlIGludG8gdGhlIG1peFxuICAgIGNvbnN0IGxhc3RJbmRleE9mRGlyZWN0b3J5ID0gc291cmNlUGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgIGNvbnN0IGxlbmd0aE9mU291cmNlID0gc291cmNlUGF0aC5sZW5ndGg7XG4gICAgLy9vbmx5IHRyaW0gaWYgdGhlIC8gaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmdcbiAgICBpZiAobGFzdEluZGV4T2ZEaXJlY3RvcnkgPT09IChsZW5ndGhPZlNvdXJjZSAtIDEpKSB7XG4gICAgICAgIG5ld1N0cmluZyA9IHNvdXJjZVBhdGguc2xpY2UoMCwtMSk7XG4gICAgfVxuXG4gICAgLy9ub3cgdGhhdCB3ZSdyZSBzdXJlIG9mIG5vIGZhbHNlIHBvc2l0aXZlLCBsZXQncyBjaGVjayBhbmQgc2VlIHdoZXJlIHRoZSBcInJvb3RcIiBkaXJlY3RvcnkgaXNcbiAgICBjb25zdCBuZXdMYXN0SW5kZXggPSBuZXdTdHJpbmcubGFzdEluZGV4T2YoJy8nKTtcbiAgICBpZiAoIG5ld0xhc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXRoR2FyYmFnZSA9IG5ld1N0cmluZy5zdWJzdHJpbmcoMCwgbmV3TGFzdEluZGV4ICsgMSk7XG4gICAgICAgIG5ld1N0cmluZyA9IGZpbGVQYXRoLnNwbGl0KHBhdGhHYXJiYWdlKVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3U3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnRGaWxlUGF0aFRvQmFzZURpcmVjdG9yeVBhdGgiLCJcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkZGlycjogcmVxdWlyZSgnLi9saWIvcmVhZGRpcnInKS5yZWFkZGlycixcblxuICBybWRpcnI6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycixcbiAgcm1kaXJzOiByZXF1aXJlKCcuL2xpYi9ybWRpcnInKS5ybWRpcnMsXG4gIHJtZmlsZXM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZmlsZXMsXG5cbiAgY3BkaXJyOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnIsXG4gIGNwZGlyczogcmVxdWlyZSgnLi9saWIvY3BkaXJyJykuY3BkaXJzLFxuICBjcGZpbGVzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGZpbGVzXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgcmVxdWVzdEJvZHkgPSBib2R5O1xuXG4gICAgaWYgKHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBwaW5hdGFDb250ZW50OiBib2R5XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5KU09OVG9JUEZTYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgSlNPTiB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVIb3N0Tm9kZXMsIHZhbGlkYXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSGFzaFRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvUGluLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGlmICghaGFzaFRvUGluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaFRvUGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBhZGRpbmcgYSBoYXNoIHRvIHRoZSBwaW4gcXVldWUnKTtcbiAgICB9XG4gICAgaWYgKCFpc0lQRlMuY2lkKGhhc2hUb1BpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgYW4gaW52YWxpZCBJUEZTIENJRCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5IYXNoVG9JUEZTYDtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBoYXNoVG9QaW46IGhhc2hUb1BpblxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5ob3N0X25vZGVzKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUhvc3ROb2RlcyhvcHRpb25zLmhvc3Rfbm9kZXMpO1xuICAgICAgICAgICAgYm9keS5ob3N0X25vZGVzID0gb3B0aW9ucy5ob3N0X25vZGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgYm9keS5waW5hdGFNZXRhZGF0YSA9IG9wdGlvbnMucGluYXRhTWV0YWRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgaGFzaCB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgcXVlcnlCdWlsZGVyIGZyb20gJy4vcXVlcnlCdWlsZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkpvYnNgO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgICAgZW5kcG9pbnQgPSBxdWVyeUJ1aWxkZXIoZW5kcG9pbnQsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgcGluIGpvYnM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1ZXJ5QnVpbGRlcihiYXNlVXJsLCBmaWx0ZXJzKSB7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gYmFzZVVybCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVycykge1xuICAgICAgICByZXR1cm4gYmFzZVVybDtcbiAgICB9XG5cbiAgICBsZXQgbmV3VXJsID0gYmFzZVVybDtcblxuICAgIGxldCBmaXJzdEZpbHRlckFwcGxpZWQgPSBmYWxzZTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgXCI/XCIgY2hhcmFjdGVyIGlzIG9ubHkgYXBwbGllZCBvbmNlXG5cbiAgICBmdW5jdGlvbiBhZGRGaWx0ZXIobmV3RmlsdGVyKSB7XG4gICAgICAgIGlmIChmaXJzdEZpbHRlckFwcGxpZWQpIHtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0mJHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcnN0RmlsdGVyQXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgICBuZXdVcmwgPSBgJHtuZXdVcmx9PyR7bmV3RmlsdGVyfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAvLyAgbm93IHdlIG5lZWQgdG8gY29uc3RydWN0IHRoZSBhY3R1YWwgVVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBmaWx0ZXJzIHByb3ZpZGVkXG4gICAgICAgIGlmIChmaWx0ZXJzLnNvcnQpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLnNvcnQgPT09ICdBU0MnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zb3J0ID09PSAnREVTQycpIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYHNvcnQ9JHtmaWx0ZXJzLnNvcnR9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzb3J0IHZhbHVlOiAke2ZpbHRlcnMuc29ydH0gcHJvdmlkZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzID09PSAnc2VhcmNoaW5nJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnZXhwaXJlZCcgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ292ZXJfZnJlZV9saW1pdCcgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ292ZXJfbWF4X3NpemUnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdpbnZhbGlkX29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2JhZF9ob3N0X25vZGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYHN0YXR1cz0ke2ZpbHRlcnMuc3RhdHVzfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdHVzIHZhbHVlOiAke2ZpbHRlcnMuc3RhdHVzfSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuaXBmc19waW5faGFzaCkge1xuICAgICAgICAgICAgaWYgKGlzSVBGUy5jaWQoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgaXBmc19waW5faGFzaD0ke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIElQRlMgaGFzaDogJHtmaWx0ZXJzLmlwZnNfcGluX2hhc2h9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5saW1pdCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5saW1pdCkgJiYgKGZpbHRlcnMubGltaXQgPiAwKSAmJiAoZmlsdGVycy5saW1pdCA8IDEwMCkpIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYGxpbWl0PSR7ZmlsdGVycy5saW1pdH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpbWl0OiAke2ZpbHRlcnMubGltaXR9LiBWYWxpZCBsaW1pdHMgYXJlIDEtMTAwYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5vZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGZpbHRlcnMub2Zmc2V0KSAmJiAoZmlsdGVycy5vZmZzZXQgPiAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgb2Zmc2V0PSR7ZmlsdGVycy5vZmZzZXR9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvZmZzZXQ6ICR7ZmlsdGVycy5vZmZzZXR9LiBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIGludGVnZXIgZm9yIHRoZSBvZmZzZXRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXJsO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlUGluRnJvbUlQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGlwZnNQaW5IYXNoKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGlmICghaXBmc1Bpbkhhc2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgcmVtb3ZpbmcgYSBwaW4gZnJvbSBQaW5hdGEnKTtcbiAgICB9XG4gICAgaWYgKCFpc0lQRlMuY2lkKGlwZnNQaW5IYXNoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBmc1Bpbkhhc2h9IGlzIGFuIGludmFsaWQgSVBGUyBDSURgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvcmVtb3ZlUGluRnJvbUlQRlNgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGlwZnNfcGluX2hhc2g6IGlwZnNQaW5IYXNoXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcmVtb3ZpbmcgcGluIGZyb20gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3ZhbGlkYXRlQXBpS2V5c30gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGVzdEF1dGhlbnRpY2F0aW9uKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIC8vICB0ZXN0IGF1dGhlbnRpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB1c2VyJ3MgcHJvdmlkZWQga2V5cyBhcmUgbGVnaXRcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvdGVzdEF1dGhlbnRpY2F0aW9uYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF1dGhlbnRpY2F0aW5nOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBxdWVyeUJ1aWxkZXIgZnJvbSAnLi9xdWVyeUJ1aWxkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaW5MaXN0KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGNvbnN0IGJhc2VFbmRwb2ludCA9IGAke2Jhc2VVcmx9L2RhdGEvcGluTGlzdGA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBxdWVyeUJ1aWxkZXIoYmFzZUVuZHBvaW50LCBmaWx0ZXJzKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgdXNlciBwaW4gbGlzdDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZnVuY3Rpb24gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGRhdGVUb1ZhbGlkYXRlKSB7XG4gICAgbGV0IGRhdGVQYXJzZWQgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGRhdGVUb1ZhbGlkYXRlKSk7XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoZGF0ZVBhcnNlZC50b0lTT1N0cmluZygpID09PSBkYXRlVG9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVUb1ZhbGlkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0ZXMgbXVzdCBiZSBpbiB2YWxpZCBJU09fODYwMSBmb3JtYXQnKTtcblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRlcyBtdXN0IGJlIGluIHZhbGlkIElTT184NjAxIGZvcm1hdCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gIHByZXNldCBmaWx0ZXIgdmFsdWVzXG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gJz8nO1xuXG4gICAgbGV0IG1ldGFkYXRhUXVlcnkgPSAnJztcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuaGFzaENvbnRhaW5zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMuaGFzaENvbnRhaW5zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaENvbnRhaW5zIHZhbHVlIGlzIG5vdCBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBoYXNoQ29udGFpbnM9JHtmaWx0ZXJzLmhhc2hDb250YWluc30mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TdGFydCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TdGFydD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5FbmQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluRW5kPSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpblN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHVucGluU3RhcnQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy51bnBpblN0YXJ0KX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpbkVuZCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGB1bnBpbkVuZD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnVucGluRW5kKX0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5waW5TaXplTWluKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5waW5TaXplTWluKSB8fCBmaWx0ZXJzLnBpblNpemVNaW4gPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwaW5TaXplTWluIGlzIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5TaXplTWluPSR7ZmlsdGVycy5waW5TaXplTWlufSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNYXgpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNYXgpIHx8IGZpbHRlcnMucGluU2l6ZU1heCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNYXggaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpblNpemVNYXg9JHtmaWx0ZXJzLnBpblNpemVNYXh9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMgIT09ICdhbGwnICYmIGZpbHRlcnMuc3RhdHVzICE9PSAncGlubmVkJyAmJiBmaWx0ZXJzLnN0YXR1cyAhPT0gJ3VucGlubmVkJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdHVzIHZhbHVlIG11c3QgYmUgZWl0aGVyOiBhbGwsIHBpbm5lZCwgb3IgdW5waW5uZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgc3RhdHVzPSR7ZmlsdGVycy5zdGF0dXN9JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZUxpbWl0KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5wYWdlTGltaXQpIHx8IGZpbHRlcnMucGFnZUxpbWl0IDw9IDAgfHwgZmlsdGVycy5wYWdlTGltaXQgPiAxMDAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYWdlTGltaXQgaXMgYSB2YWxpZCBpbnRlZ2VyIGJldHdlZW4gMS0xMDAwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VMaW1pdD0ke3BhcnNlSW50KGZpbHRlcnMucGFnZUxpbWl0KX0mYDsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZU9mZnNldCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZU9mZnNldCkgfHwgZmlsdGVycy5wYWdlT2Zmc2V0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VPZmZzZXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBhZ2VPZmZzZXQ9JHtwYXJzZUludChmaWx0ZXJzLnBhZ2VPZmZzZXQpfSZgOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGRlY2ltYWxzIGdldCByb3VuZGVkIHRvIGludGVnZXJzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IGBtZXRhZGF0YVtuYW1lXT0ke2ZpbHRlcnMubWV0YWRhdGEubmFtZX0mYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHBydW5lZEtleVZhbHVlcyA9IHt9OyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSdyZSBvbmx5IGdyYWJiaW5nIHRoZSB2YWx1ZXMgd2Ugd2FudCBmb3IgdGhlIHF1ZXJ5LCBhbmQgbm90aGluZyBleHRyYVxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmlsdGVycy5tZXRhZGF0YS5rZXl2YWx1ZXMpLmZvckVhY2goKGtleVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleVZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGtleVZhbHVlWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlOiAke2tleX0gaXMgbm90IGFuIG9iamVjdGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLnZhbHVlIHx8ICF2YWx1ZS5vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZTogJHtrZXl9IG11c3QgaGF2ZSBib3RoIHZhbHVlIGFuZCBvcCBhdHRyaWJ1dGVzYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBib29sZWFucywgb3IgbnVtYmVycycpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGNoZWNrcyB0byBtYWtlIHN1cmUgYWxsIG9mIHRoZSBrZXl2YWx1ZXMgYXJlIHZhbGlkXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9ncmVhdGVyIHRoYW4gb3IgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gb3IgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBlcXVhbCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlcXVhbCB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZXEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZXR3ZWVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnNlY29uZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmVjYXVzZSBiZXR3ZWVuIG9wIGNvZGUgd2FzIHBhc3NlZCBpbiwga2V5VmFsdWU6ICR7a2V5VmFsdWVbMF19IG11c3QgaGF2ZSBib3RoIGFsc28gaW5jbHVkZSBhIHNlY29uZFZhbHVlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSBzZWNvbmRWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nLCBib29sZWFuLCBvciBudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdEJldHdlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWNhdXNlIG5vdEJldHdlZW4gb3AgY29kZSB3YXMgcGFzc2VkIGluLCBrZXlWYWx1ZTogJHtrZXlWYWx1ZVswXX0gbXVzdCBoYXZlIGJvdGggYWxzbyBpbmNsdWRlIGEgc2Vjb25kVmFsdWVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHNlY29uZFZhbHVlIG11c3QgYmUgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIG51bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlOiB2YWx1ZS5zZWNvbmRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdExpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBub3QgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90SUxpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSByZWdleFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaVJlZ2V4cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZSBvcDogJHt2YWx1ZS5vcH0gaXMgbm90IGEgdmFsaWQgb3AgY29kZWApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGFRdWVyeSA9IG1ldGFkYXRhUXVlcnkgKyBgbWV0YWRhdGFba2V5dmFsdWVzXT0ke0pTT04uc3RyaW5naWZ5KHBydW5lZEtleVZhbHVlcyl9YDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYCR7YmFzZVVybH0ke2ZpbHRlclF1ZXJ5fSR7bWV0YWRhdGFRdWVyeX1gO1xufVxuXG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgcXVlcnlCdWlsZGVyIGZyb20gJy4vcXVlcnlCdWlsZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgY29uc3QgYmFzZUVuZHBvaW50ID0gYCR7YmFzZVVybH0vZGF0YS91c2VyUGluTGlzdGA7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBxdWVyeUJ1aWxkZXIoYmFzZUVuZHBvaW50LCBmaWx0ZXJzKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgdXNlciBwaW4gbGlzdDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZnVuY3Rpb24gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGRhdGVUb1ZhbGlkYXRlKSB7XG4gICAgbGV0IGRhdGVQYXJzZWQgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGRhdGVUb1ZhbGlkYXRlKSk7XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoZGF0ZVBhcnNlZC50b0lTT1N0cmluZygpID09PSBkYXRlVG9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVUb1ZhbGlkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0ZXMgbXVzdCBiZSBpbiB2YWxpZCBJU09fODYwMSBmb3JtYXQnKTtcblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRlcyBtdXN0IGJlIGluIHZhbGlkIElTT184NjAxIGZvcm1hdCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVlcnlCdWlsZGVyKGJhc2VVcmwsIGZpbHRlcnMpIHtcbiAgICBpZiAoIWJhc2VVcmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBiYXNlVXJsIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgLy8gIHByZXNldCBmaWx0ZXIgdmFsdWVzXG4gICAgbGV0IGhhc2hDb250YWlucyA9ICcqJztcblxuICAgIGxldCBwaW5TdGFydCA9ICcqJztcblxuICAgIGxldCBwaW5FbmQgPSAnKic7XG5cbiAgICBsZXQgdW5waW5TdGFydCA9ICcqJztcblxuICAgIGxldCB1bnBpbkVuZCA9ICcqJztcblxuICAgIGxldCBwaW5TaXplTWluID0gJyonO1xuXG4gICAgbGV0IHBpblNpemVNYXggPSAnKic7XG5cbiAgICBsZXQgcGluRmlsdGVyID0gJyonO1xuXG4gICAgbGV0IHBhZ2VMaW1pdCA9IDEwO1xuXG4gICAgbGV0IHBhZ2VPZmZzZXQgPSAwO1xuXG4gICAgbGV0IG1ldGFkYXRhUXVlcnkgPSAnJztcblxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAgIC8vICBub3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBVUkwgYmFzZWQgb24gdGhlIGdpdmVuIGZpbHRlcnMgcHJvdmlkZWRcbiAgICAgICAgaWYgKGZpbHRlcnMuaGFzaENvbnRhaW5zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlcnMuaGFzaENvbnRhaW5zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaENvbnRhaW5zIHZhbHVlIGlzIG5vdCBhIHN0cmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzaENvbnRhaW5zID0gZmlsdGVycy5oYXNoQ29udGFpbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU3RhcnQpIHtcbiAgICAgICAgICAgIHBpblN0YXJ0ID0gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluU3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpbkVuZCkge1xuICAgICAgICAgICAgcGluRW5kID0gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluRW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy51bnBpblN0YXJ0KSB7XG4gICAgICAgICAgICB1bnBpblN0YXJ0ID0gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMudW5waW5TdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMudW5waW5FbmQpIHtcbiAgICAgICAgICAgIHVucGluRW5kID0gdmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMudW5waW5FbmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNaW4pIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNaW4pIHx8IGZpbHRlcnMucGluU2l6ZU1pbiA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNaW4gaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaW5TaXplTWluID0gZmlsdGVycy5waW5TaXplTWluO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNYXgpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNYXgpIHx8IGZpbHRlcnMucGluU2l6ZU1heCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNYXggaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaW5TaXplTWF4ID0gZmlsdGVycy5waW5TaXplTWF4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpbkZpbHRlcikge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMucGluRmlsdGVyICE9PSAnYWxsJyAmJiBmaWx0ZXJzLnBpbkZpbHRlciAhPT0gJ3Bpbm5lZCcgJiYgZmlsdGVycy5waW5GaWx0ZXIgIT09ICd1bnBpbm5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BpbkZpbHRlciB2YWx1ZSBtdXN0IGJlIGVpdGhlcjogYWxsLCBwaW5uZWQsIG9yIHVucGlubmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaW5GaWx0ZXIgPSBmaWx0ZXJzLnBpbkZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5wYWdlTGltaXQpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBhZ2VMaW1pdCkgfHwgZmlsdGVycy5wYWdlTGltaXQgPD0gMCB8fCBmaWx0ZXJzLnBhZ2VMaW1pdCA+IDEwMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VMaW1pdCBpcyBhIHZhbGlkIGludGVnZXIgYmV0d2VlbiAxLTEwMDAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VMaW1pdCA9IHBhcnNlSW50KGZpbHRlcnMucGFnZUxpbWl0KTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMucGFnZU9mZnNldCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGFnZU9mZnNldCkgfHwgZmlsdGVycy5wYWdlT2Zmc2V0IDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VPZmZzZXQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWdlT2Zmc2V0ID0gcGFyc2VJbnQoZmlsdGVycy5wYWdlT2Zmc2V0KTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBkZWNpbWFscyBnZXQgcm91bmRlZCB0byBpbnRlZ2Vyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbHRlcnMubWV0YWRhdGEubmFtZSkge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBgP21ldGFkYXRhW25hbWVdPSR7ZmlsdGVycy5tZXRhZGF0YS5uYW1lfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykge1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YSBrZXl2YWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcnVuZWRLZXlWYWx1ZXMgPSB7fTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UncmUgb25seSBncmFiYmluZyB0aGUgdmFsdWVzIHdlIHdhbnQgZm9yIHRoZSBxdWVyeSwgYW5kIG5vdGhpbmcgZXh0cmFcblxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMubWV0YWRhdGEua2V5dmFsdWVzKS5mb3JFYWNoKChrZXlWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBrZXlWYWx1ZVsxXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlWYWx1ZTogJHtrZXl9IGlzIG5vdCBhbiBvYmplY3RgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS52YWx1ZSB8fCAhdmFsdWUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBtdXN0IGhhdmUgYm90aCB2YWx1ZSBhbmQgb3AgYXR0cmlidXRlc2ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgdmFsdWVzIG11c3QgYmUgc3RyaW5ncywgYm9vbGVhbnMsIG9yIG51bWJlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJ1biBjaGVja3MgdG8gbWFrZSBzdXJlIGFsbCBvZiB0aGUga2V5dmFsdWVzIGFyZSB2YWxpZFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3JlYXRlciB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdndGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXF1YWwgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2UgYmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RCZXR3ZWVuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLnNlY29uZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmVjYXVzZSBub3RCZXR3ZWVuIG9wIGNvZGUgd2FzIHBhc3NlZCBpbiwga2V5VmFsdWU6ICR7a2V5VmFsdWVbMF19IG11c3QgaGF2ZSBib3RoIGFsc28gaW5jbHVkZSBhIHNlY29uZFZhbHVlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnc3RyaW5nJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ2Jvb2xlYW4nKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXRhZGF0YSBrZXl2YWx1ZSBzZWNvbmRWYWx1ZSBtdXN0IGJlIGEgc3RyaW5nLCBib29sZWFuLCBvciBudW1iZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRWYWx1ZTogdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbm90IGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vdElMaWtlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgcmVnZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lSZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWUgb3A6ICR7dmFsdWUub3B9IGlzIG5vdCBhIHZhbGlkIG9wIGNvZGVgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhUXVlcnkgPSBgJHttZXRhZGF0YVF1ZXJ5fSR7ZmlsdGVycy5tZXRhZGF0YS5uYW1lID8gJyYnIDogJz8nfW1ldGFkYXRhW2tleXZhbHVlc109JHtKU09OLnN0cmluZ2lmeShwcnVuZWRLZXlWYWx1ZXMpfWA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9L2hhc2hDb250YWlucy8ke2hhc2hDb250YWluc30vcGluU3RhcnQvJHtwaW5TdGFydH0vcGluRW5kLyR7cGluRW5kfS91bnBpblN0YXJ0LyR7dW5waW5TdGFydH0vdW5waW5FbmQvJHt1bnBpbkVuZH0vcGluU2l6ZU1pbi8ke3BpblNpemVNaW59L3BpblNpemVNYXgvJHtwaW5TaXplTWF4fS9waW5GaWx0ZXIvJHtwaW5GaWx0ZXJ9L3BhZ2VMaW1pdC8ke3BhZ2VMaW1pdH0vcGFnZU9mZnNldC8ke3BhZ2VPZmZzZXR9JHttZXRhZGF0YVF1ZXJ5fWA7XG59XG5cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +e.exports=i(435)},function(e){e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma","es"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","compressible":true},"application/fhir+xml":{"source":"iana","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/mrb-publish+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/msc-ivr+xml":{"source":"iana","compressible":true},"application/msc-mixer+xml":{"source":"iana","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana"},"application/news-groupinfo":{"source":"iana"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana"},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","compressible":true},"application/pidf-diff+xml":{"source":"iana","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["keynote"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"apache","extensions":["der","crt","pem"]},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana"},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')},function(e,n,i){e.exports={parallel:i(437),serial:i(439),serialOrdered:i(173)}},function(e,n,i){var t=i(168),a=i(171),o=i(172);e.exports=function(e,n,i){var r=a(e);for(;r.index<(r.keyedList||e).length;)t(e,n,r,(function(e,n){e?i(e,n):0!==Object.keys(r.jobs).length||i(null,r.results)})),r.index++;return o.bind(r,i)}},function(e,n){e.exports=function(e){var n="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;n?n(e):setTimeout(e,0)}},function(e,n,i){var t=i(173);e.exports=function(e,n,i){return t(e,n,null,i)}},function(e,n){e.exports=function(e,n){return Object.keys(n).forEach((function(i){e[i]=e[i]||n[i]})),e}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i,c){return(0,r.validateApiKeys)(e,n),new Promise((function(l,f){var d="".concat(a.baseUrl,"/pinning/pinFileToIPFS");u.readdirr(i,(function(a,u,m){a&&f(new Error(a));var v=new o.default;m.forEach((function(e){v.append("file",p.createReadStream(e),{filepath:(0,s.default)(i,e)})})),c&&(c.pinataMetadata&&((0,r.validateMetadata)(c.pinataMetadata),v.append("pinataMetadata",JSON.stringify(c.pinataMetadata))),c.pinataOptions&&((0,r.validatePinataOptions)(c.pinataOptions),v.append("pinataOptions",JSON.stringify(c.pinataOptions)))),t.default.post(d,v,{withCredentials:!0,maxContentLength:"Infinity",headers:{"Content-type":"multipart/form-data; boundary= ".concat(v._boundary),pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&f(new Error("unknown server response while pinning File to IPFS: ".concat(e))),l(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?f(new Error(e.response.data.error)):f(e)}))}))}))};var t=c(i(24)),a=i(25),o=c(i(167)),r=i(26),s=c(i(442));function c(e){return e&&e.__esModule?e:{default:e}}var p=i(59),u=i(443);e.exports=n.default},function(e,n){e.exports=function(e,n){let i=e.startsWith("./")?e.substring(2):e;const t=i.lastIndexOf("/");if(-1===t)return n;t===e.length-1&&(i=e.slice(0,-1));const a=i.lastIndexOf("/");if(-1===a)return i;{const e=i.substring(0,a+1);i=n.split(e)[1]}return i}},function(e,n,i){e.exports={readdirr:i(113).readdirr,rmdirr:i(114).rmdirr,rmdirs:i(114).rmdirs,rmfiles:i(114).rmfiles,cpdirr:i(115).cpdirr,cpdirs:i(115).cpdirs,cpfiles:i(115).cpfiles}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i,t){(0,r.validateApiKeys)(e,n);var c=i;if("object"!==s(i))throw new Error("body must be a valid JSON object");t&&(c={pinataContent:i},t.pinataMetadata&&((0,r.validateMetadata)(t.pinataMetadata),c.pinataMetadata=t.pinataMetadata),t.pinataOptions&&((0,r.validatePinataOptions)(t.pinataOptions),c.pinataOptions=t.pinataOptions));var p="".concat(o.baseUrl,"/pinning/pinJSONToIPFS");return new Promise((function(i,t){a.default.post(p,c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&t(new Error("unknown server response while pinning JSON to IPFS: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?t(new Error(e.response.data.error)):t(e)}))}))};var t,a=(t=i(24))&&t.__esModule?t:{default:t},o=i(25),r=i(26);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i){(0,o.validateApiKeys)(e,n);var s="".concat(a.baseUrl,"/pinning/pinJobs");i&&(s=(0,r.default)(s,i));return new Promise((function(i,a){t.default.get(s,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve pin jobs: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var t=s(i(24)),a=i(25),o=i(26),r=s(i(446));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");if(!n)return e;var i=e,t=!1;function o(e){t?i="".concat(i,"&").concat(e):(t=!0,i="".concat(i,"?").concat(e))}if(n){if(n.sort){if("ASC"!==n.sort&&"DESC"!==n.sort)throw new Error("Unknown sort value: ".concat(n.sort," provided"));o("sort=".concat(n.sort))}if(n.status){if("searching"!==n.status&&"expired"!==n.status&&"over_free_limit"!==n.status&&"over_max_size"!==n.status&&"invalid_object"!==n.status&&"bad_host_node"!==n.status)throw new Error("Unknown status value: ".concat(n.status," provided"));o("status=".concat(n.status))}if(n.ipfs_pin_hash){if(!a.default.cid(n.ipfs_pin_hash))throw new Error("Invalid IPFS hash: ".concat(n.ipfs_pin_hash));o("ipfs_pin_hash=".concat(n.ipfs_pin_hash))}if(n.limit){if(!(Number.isInteger(n.limit)&&n.limit>0&&n.limit<100))throw new Error("Invalid limit: ".concat(n.limit,". Valid limits are 1-100"));o("limit=".concat(n.limit))}if(n.offset){if(!(Number.isInteger(n.offset)&&n.offset>0))throw new Error("Invalid offset: ".concat(n.offset,". Please provide a positive integer for the offset"));o("offset=".concat(n.offset))}}return i};var t,a=(t=i(57))&&t.__esModule?t:{default:t};e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i){if((0,o.validateApiKeys)(e,n),!i)throw new Error("hashToUnpin value is required for removing a pin from Pinata");if(!r.default.cid(i))throw new Error("".concat(i," is an invalid IPFS CID"));var s="".concat(a.baseUrl,"/pinning/unpin/").concat(i);return new Promise((function(i,a){t.default.delete(s,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while removing pin from IPFS: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var t=s(i(24)),a=i(25),o=i(26),r=s(i(57));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i){if((0,r.validateApiKeys)(e,n),(0,r.validatePinPolicyStructure)(i),!i)throw new Error("newPinPolicy is required for changing the pin policy of a pin");var t="".concat(o.baseUrl,"/pinning/userPinPolicy"),s={newPinPolicy:i};return new Promise((function(i,o){a.default.put(t,s,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while changing pin policy for user: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?o(new Error(e.response.data.error)):o(e)}))}))};var t,a=(t=i(24))&&t.__esModule?t:{default:t},o=i(25),r=i(26);e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){(0,r.validateApiKeys)(e,n);var i="".concat(o.baseUrl,"/data/testAuthentication");return new Promise((function(t,o){a.default.get(i,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while authenticating: ".concat(e))),t({authenticated:!0})})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?o(new Error(e.response.data.error)):o(e)}))}))};var t,a=(t=i(24))&&t.__esModule?t:{default:t},o=i(25),r=i(26);e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n,i){(0,o.validateApiKeys)(e,n);var s="".concat(a.baseUrl,"/data/pinList"),c=(0,r.default)(s,i);return new Promise((function(i,a){t.default.get(c,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&a(new Error("unknown server response while attempting to retrieve user pin list: ".concat(e))),i(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?a(new Error(e.response.data.error)):a(e)}))}))};var t=s(i(24)),a=i(25),o=i(26),r=s(i(451));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default},function(e,n,i){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e){var n=new Date(Date.parse(e));try{if(n.toISOString()===e)return e;throw new Error("dates must be in valid ISO_8601 format")}catch(e){throw new Error("dates must be in valid ISO_8601 format")}}Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){if(!e)throw new Error("no baseUrl provided");var i="?",o="";if(n){if(n.hashContains){if("string"!=typeof n.hashContains)throw new Error("hashContains value is not a string");i+="hashContains=".concat(n.hashContains,"&")}if(n.pinStart&&(i+="pinStart=".concat(a(n.pinStart),"&")),n.pinEnd&&(i+="pinEnd=".concat(a(n.pinEnd),"&")),n.unpinStart&&(i+="unpinStart=".concat(a(n.unpinStart),"&")),n.unpinEnd&&(i+="unpinEnd=".concat(a(n.unpinEnd),"&")),n.pinSizeMin){if(isNaN(n.pinSizeMin)||n.pinSizeMin<0)throw new Error("Please make sure the pinSizeMin is a valid positive integer");i+="pinSizeMin=".concat(n.pinSizeMin,"&")}if(n.pinSizeMax){if(isNaN(n.pinSizeMax)||n.pinSizeMax<0)throw new Error("Please make sure the pinSizeMax is a valid positive integer");i+="pinSizeMax=".concat(n.pinSizeMax,"&")}if(n.status){if("all"!==n.status&&"pinned"!==n.status&&"unpinned"!==n.status)throw new Error("status value must be either: all, pinned, or unpinned");i+="status=".concat(n.status,"&")}if(n.pageLimit){if(isNaN(n.pageLimit)||n.pageLimit<=0||n.pageLimit>1e3)throw new Error("Please make sure the pageLimit is a valid integer between 1-1000");i+="pageLimit=".concat(parseInt(n.pageLimit),"&")}if(n.pageOffset){if(isNaN(n.pageOffset)||n.pageOffset<=0)throw new Error("Please make sure the pageOffset is a positive integer");i+="pageOffset=".concat(parseInt(n.pageOffset),"&")}if(n.metadata){if("object"!==t(n.metadata))throw new Error("metadata value must be an object");if(n.metadata.name&&(o="metadata[name]=".concat(n.metadata.name,"&")),n.metadata.keyvalues){if("object"!==t(n.metadata.keyvalues))throw new Error("metadata keyvalues must be an object");var r={};Object.entries(n.metadata.keyvalues).forEach((function(e){var n=e[0],i=e[1];if("object"!==t(i))throw new Error("keyValue: ".concat(n," is not an object"));if(!i||!i.value||!i.op)throw new Error("keyValue: ".concat(n," must have both value and op attributes"));if("string"!=typeof i.value&&"boolean"!=typeof i.value&&"number"!=typeof i.value)throw new Error("Metadata keyvalue values must be strings, booleans, or numbers");switch(i.op){case"gt":case"gte":case"lt":case"lte":case"ne":case"eq":r[n]={value:i.value,op:i.op};break;case"between":if(!i.secondValue)throw new Error("Because between op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof i.secondValue&&"boolean"!=typeof i.secondValue&&"number"!=typeof i.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");r[n]={value:i.value,op:i.op,secondValue:i.secondValue};break;case"notBetween":if(!i.secondValue)throw new Error("Because notBetween op code was passed in, keyValue: ".concat(e[0]," must have both also include a secondValue"));if("string"!=typeof i.secondValue&&"boolean"!=typeof i.secondValue&&"number"!=typeof i.secondValue)throw new Error("Metadata keyvalue secondValue must be a string, boolean, or number");r[n]={value:i.value,op:i.op,secondValue:i.secondValue};break;case"like":case"notLike":case"iLike":case"notILike":case"regexp":case"iRegexp":r[n]={value:i.value,op:i.op};break;default:throw new Error("keyValue op: ".concat(i.op," is not a valid op code"))}o+="metadata[keyvalues]=".concat(JSON.stringify(r))}))}}}return"".concat(e).concat(i).concat(o)},e.exports=n.default},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){(0,r.validateApiKeys)(e,n);var i="".concat(o.baseUrl,"/data/userPinnedDataTotal");return new Promise((function(t,o){a.default.get(i,{withCredentials:!0,headers:{pinata_api_key:e,pinata_secret_api_key:n}}).then((function(e){200!==e.status&&o(new Error("unknown server response while attempting to retrieve pinned data total: ".concat(e))),t(e.data)})).catch((function(e){e&&e.response&&e.response&&e.response.data&&e.response.data.error?o(new Error(e.response.data.error)):o(e)}))}))};var t,a=(t=i(24))&&t.__esModule?t:{default:t},o=i(25),r=i(26);e.exports=n.default}])})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy91dGlsL3ZhbGlkYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcy1pcGZzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwic3RyZWFtXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInV0aWxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JzNTgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrL2V4dGVybmFsIFwiaHR0cFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJodHRwc1wiIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ1cmxcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpaGFzaGVzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYWRkci9zcmMvcHJvdG9jb2xzLXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY2lkcy9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL3JlYWRkaXJyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvcmVjdXJzaXZlLWZzL2xpYi9ybWRpcnIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvbGliL2NwZGlyci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtbG9nMXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZnJvdW5kLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvZGVidWcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcIm9zXCIiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9iYXNlLXgvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJidWZmZXJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdXRpbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NsYXNzLWlzL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9hc3luYy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9hYm9ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yYXcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy50cmltLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5qb2luLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQub2YuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgudW11bGguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkJ5SGFzaC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2h0dHAuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcImFzc2VydFwiIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvZXh0ZXJuYWwgXCJ0dHlcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay9leHRlcm5hbCBcInpsaWJcIiIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWhhc2hlcy9zcmMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvdmFyaW50L2VuY29kZS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL3ZhcmludC9kZWNvZGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy92YXJpbnQvbGVuZ3RoLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWJhc2Uvc3JjL2Jhc2UxNi5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpYmFzZS9zcmMvYmFzZTMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGliYXNlL3NyYy9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tdWx0aWFkZHIvc3JjL2NvZGVjLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGlhZGRyL3NyYy9jb252ZXJ0LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXAvbGliL2lwLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvaXMtaXAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9pcC1yZWdleC9pbmRleC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL211bHRpY29kZWMvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvaW50LXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvdmFyaW50LXRhYmxlLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvbXVsdGljb2RlYy9zcmMvcHJpbnQuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jaWRzL3NyYy9jaWQtdXRpbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2hpLWJhc2UzMi9zcmMvYmFzZTMyLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9tYWZtdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL2hhc2hQaW5Qb2xpY3kuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkZpbGVUb0lQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2RlbGF5ZWQtc3RyZWFtL2xpYi9kZWxheWVkX3N0cmVhbS5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9wYXJhbGxlbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9kZWZlci5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3NlcmlhbC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkZyb21GUy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vbm9kZV9tb2R1bGVzL2Jhc2UtcGF0aC1jb252ZXJ0ZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL25vZGVfbW9kdWxlcy9yZWN1cnNpdmUtZnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpTT05Ub0lQRlMuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcGluSm9icy5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL3Bpbm5pbmcvcGluSm9icy9xdWVyeUJ1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9waW5uaW5nL3VucGluLmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvcGlubmluZy91c2VyUGluUG9saWN5LmpzIiwid2VicGFjazovL3BpbmF0YS1zZGsvLi9zcmMvY29tbWFuZHMvZGF0YS90ZXN0QXV0aGVudGljYXRpb24uanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3Bpbkxpc3QvcGluTGlzdC5qcyIsIndlYnBhY2s6Ly9waW5hdGEtc2RrLy4vc3JjL2NvbW1hbmRzL2RhdGEvcGluTGlzdC9xdWVyeUJ1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vcGluYXRhLXNkay8uL3NyYy9jb21tYW5kcy9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWwuanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZ2xvYmFsIiwiY29yZSIsImhpZGUiLCJyZWRlZmluZSIsImN0eCIsIiRleHBvcnQiLCJ0eXBlIiwic291cmNlIiwib3duIiwib3V0IiwiZXhwIiwiSVNfRk9SQ0VEIiwiRiIsIklTX0dMT0JBTCIsIkciLCJJU19TVEFUSUMiLCJTIiwiSVNfUFJPVE8iLCJQIiwiSVNfQklORCIsIkIiLCJ0YXJnZXQiLCJleHBQcm90byIsInVuZGVmaW5lZCIsIkZ1bmN0aW9uIiwiVSIsIlciLCJSIiwiaXNPYmplY3QiLCJpdCIsIlR5cGVFcnJvciIsIndpbmRvdyIsIk1hdGgiLCJfX2ciLCJleGVjIiwiZSIsInN0b3JlIiwidWlkIiwiVVNFX1NZTUJPTCIsInRvSW50ZWdlciIsIm1pbiIsImEiLCJhbk9iamVjdCIsIklFOF9ET01fREVGSU5FIiwidG9QcmltaXRpdmUiLCJkUCIsImYiLCJPIiwiQXR0cmlidXRlcyIsImRlZmluZWQiLCJjcmVhdGVEZXNjIiwiaGFzIiwiU1JDIiwiJHRvU3RyaW5nIiwiVFBMIiwic3BsaXQiLCJpbnNwZWN0U291cmNlIiwidmFsIiwic2FmZSIsImlzRnVuY3Rpb24iLCJqb2luIiwiU3RyaW5nIiwiZmFpbHMiLCJxdW90IiwiY3JlYXRlSFRNTCIsInN0cmluZyIsInRhZyIsImF0dHJpYnV0ZSIsInAxIiwicmVwbGFjZSIsIk5BTUUiLCJ0ZXN0IiwidG9Mb3dlckNhc2UiLCJsZW5ndGgiLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwiaXNBcnJheSIsImZvckVhY2giLCJvYmoiLCJmbiIsImlzQXJyYXlCdWZmZXIiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzVW5kZWZpbmVkIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNTdHJlYW0iLCJwaXBlIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsIm5hdmlnYXRvciIsInByb2R1Y3QiLCJkb2N1bWVudCIsIm1lcmdlIiwicmVzdWx0IiwiYXNzaWduVmFsdWUiLCJhcmd1bWVudHMiLCJleHRlbmQiLCJiIiwidGhpc0FyZyIsInRyaW0iLCJzdHIiLCJJT2JqZWN0IiwicElFIiwidG9JT2JqZWN0IiwiZ09QRCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInRvT2JqZWN0IiwiSUVfUFJPVE8iLCJPYmplY3RQcm90byIsImdldFByb3RvdHlwZU9mIiwiY29uc3RydWN0b3IiLCJ2ZXJzaW9uIiwiX19lIiwiYUZ1bmN0aW9uIiwidGhhdCIsImFwcGx5Iiwic2xpY2UiLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsIm1ldGhvZCIsImFyZyIsInBpbmF0YUFwaUtleSIsInBpbmF0YVNlY3JldEFwaUtleSIsIkVycm9yIiwibWV0YWRhdGEiLCJrZXl2YWx1ZXMiLCJlbnRyaWVzIiwia2V5VmFsdWUiLCJvcHRpb25zIiwiY2lkVmVyc2lvbiIsIndyYXBXaXRoRGlyZWN0b3J5IiwiaG9zdE5vZGVzIiwidmFsaWRhdGVIb3N0Tm9kZXMiLCJjdXN0b21QaW5Qb2xpY3kiLCJ2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZSIsIkFycmF5Iiwibm9kZSIsImlzSVBGUyIsInBlZXJNdWx0aWFkZHIiLCJwaW5Qb2xpY3kiLCJyZWdpb25zIiwicmVnaW9uIiwiaWQiLCJkZXNpcmVkUmVwbGljYXRpb25Db3VudCIsIk51bWJlciIsImlzSW50ZWdlciIsInZhbHVlT2YiLCJLRVkiLCJ0b0xlbmd0aCIsImFzYyIsIlRZUEUiLCIkY3JlYXRlIiwiSVNfTUFQIiwiSVNfRklMVEVSIiwiSVNfU09NRSIsIklTX0VWRVJZIiwiSVNfRklORF9JTkRFWCIsIk5PX0hPTEVTIiwiJHRoaXMiLCJjYWxsYmFja2ZuIiwicmVzIiwiaW5kZXgiLCJwdXNoIiwiTElCUkFSWSIsIiR0eXBlZCIsIiRidWZmZXIiLCJhbkluc3RhbmNlIiwicHJvcGVydHlEZXNjIiwicmVkZWZpbmVBbGwiLCJ0b0luZGV4IiwidG9BYnNvbHV0ZUluZGV4IiwiY2xhc3NvZiIsImlzQXJyYXlJdGVyIiwiZ09QTiIsImdldEl0ZXJGbiIsIndrcyIsImNyZWF0ZUFycmF5TWV0aG9kIiwiY3JlYXRlQXJyYXlJbmNsdWRlcyIsInNwZWNpZXNDb25zdHJ1Y3RvciIsIkFycmF5SXRlcmF0b3JzIiwiSXRlcmF0b3JzIiwiJGl0ZXJEZXRlY3QiLCJzZXRTcGVjaWVzIiwiYXJyYXlGaWxsIiwiYXJyYXlDb3B5V2l0aGluIiwiJERQIiwiJEdPUEQiLCJSYW5nZUVycm9yIiwiVWludDhBcnJheSIsIkFycmF5UHJvdG8iLCIkQXJyYXlCdWZmZXIiLCIkRGF0YVZpZXciLCJEYXRhVmlldyIsImFycmF5Rm9yRWFjaCIsImFycmF5RmlsdGVyIiwiYXJyYXlTb21lIiwiYXJyYXlFdmVyeSIsImFycmF5RmluZCIsImFycmF5RmluZEluZGV4IiwiYXJyYXlJbmNsdWRlcyIsImFycmF5SW5kZXhPZiIsImFycmF5VmFsdWVzIiwidmFsdWVzIiwiYXJyYXlLZXlzIiwia2V5cyIsImFycmF5RW50cmllcyIsImFycmF5TGFzdEluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImFycmF5UmVkdWNlIiwicmVkdWNlIiwiYXJyYXlSZWR1Y2VSaWdodCIsInJlZHVjZVJpZ2h0IiwiYXJyYXlKb2luIiwiYXJyYXlTb3J0Iiwic29ydCIsImFycmF5U2xpY2UiLCJhcnJheVRvU3RyaW5nIiwiYXJyYXlUb0xvY2FsZVN0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwiSVRFUkFUT1IiLCJUQUciLCJUWVBFRF9DT05TVFJVQ1RPUiIsIkRFRl9DT05TVFJVQ1RPUiIsIkFMTF9DT05TVFJVQ1RPUlMiLCJDT05TVFIiLCJUWVBFRF9BUlJBWSIsIlRZUEVEIiwiVklFVyIsIiRtYXAiLCJhbGxvY2F0ZSIsIkxJVFRMRV9FTkRJQU4iLCJVaW50MTZBcnJheSIsIkZPUkNFRF9TRVQiLCJzZXQiLCJ0b09mZnNldCIsIkJZVEVTIiwib2Zmc2V0IiwidmFsaWRhdGUiLCJDIiwic3BlY2llc0Zyb21MaXN0IiwibGlzdCIsImZyb21MaXN0IiwiYWRkR2V0dGVyIiwiaW50ZXJuYWwiLCJfZCIsIiRmcm9tIiwic3RlcCIsIml0ZXJhdG9yIiwiYUxlbiIsIm1hcGZuIiwibWFwcGluZyIsIml0ZXJGbiIsIm5leHQiLCJkb25lIiwiJG9mIiwiVE9fTE9DQUxFX0JVRyIsIiR0b0xvY2FsZVN0cmluZyIsInByb3RvIiwiY29weVdpdGhpbiIsInN0YXJ0IiwiZXZlcnkiLCJmaWxsIiwiZmlsdGVyIiwiZmluZCIsInByZWRpY2F0ZSIsImZpbmRJbmRleCIsImluZGV4T2YiLCJzZWFyY2hFbGVtZW50IiwiaW5jbHVkZXMiLCJzZXBhcmF0b3IiLCJtYXAiLCJyZXZlcnNlIiwibWlkZGxlIiwic29tZSIsImNvbXBhcmVmbiIsInN1YmFycmF5IiwiYmVnaW4iLCJlbmQiLCIkYmVnaW4iLCJieXRlT2Zmc2V0IiwiQllURVNfUEVSX0VMRU1FTlQiLCIkc2xpY2UiLCIkc2V0IiwiYXJyYXlMaWtlIiwic3JjIiwibGVuIiwiJGl0ZXJhdG9ycyIsImlzVEFJbmRleCIsIiRnZXREZXNjIiwiJHNldERlc2MiLCJkZXNjIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCIkVHlwZWRBcnJheVByb3RvdHlwZSQiLCJ3cmFwcGVyIiwiQ0xBTVBFRCIsIkdFVFRFUiIsIlNFVFRFUiIsIlR5cGVkQXJyYXkiLCJCYXNlIiwiVEFDIiwiRk9SQ0VEIiwiQUJWIiwiVHlwZWRBcnJheVByb3RvdHlwZSIsImFkZEVsZW1lbnQiLCJkYXRhIiwidiIsInJvdW5kIiwic2V0dGVyIiwiJG9mZnNldCIsIiRsZW5ndGgiLCJieXRlTGVuZ3RoIiwia2xhc3MiLCIkbGVuIiwiaXRlciIsImNvbmNhdCIsIiRuYXRpdmVJdGVyYXRvciIsIkNPUlJFQ1RfSVRFUl9OQU1FIiwiJGl0ZXJhdG9yIiwib2YiLCJmcm9tIiwiTWFwIiwic2hhcmVkIiwiZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCIsInRhcmdldEtleSIsInRhcmdldE1ldGFkYXRhIiwia2V5TWV0YWRhdGEiLCJNZXRhZGF0YUtleSIsIm1ldGFkYXRhTWFwIiwiTWV0YWRhdGFWYWx1ZSIsIl8iLCJNRVRBIiwic2V0RGVzYyIsImlzRXh0ZW5zaWJsZSIsIkZSRUVaRSIsInByZXZlbnRFeHRlbnNpb25zIiwic2V0TWV0YSIsInciLCJtZXRhIiwiTkVFRCIsImZhc3RLZXkiLCJnZXRXZWFrIiwib25GcmVlemUiLCJVTlNDT1BBQkxFUyIsImJpdG1hcCIsInB4IiwicmFuZG9tIiwiJGtleXMiLCJlbnVtQnVnS2V5cyIsIm1heCIsImRQcyIsIkVtcHR5IiwiY3JlYXRlRGljdCIsImlmcmFtZURvY3VtZW50IiwiaWZyYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93Iiwib3BlbiIsIndyaXRlIiwibHQiLCJjbG9zZSIsIlByb3BlcnRpZXMiLCJoaWRkZW5LZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIkRFU0NSSVBUT1JTIiwiU1BFQ0lFUyIsIkNvbnN0cnVjdG9yIiwiZm9yYmlkZGVuRmllbGQiLCJCUkVBSyIsIlJFVFVSTiIsIml0ZXJhYmxlIiwiX3QiLCJkZWYiLCJzdGF0IiwiY29mIiwiQVJHIiwiVCIsInRyeUdldCIsImNhbGxlZSIsInNwYWNlcyIsInNwYWNlIiwibHRyaW0iLCJSZWdFeHAiLCJydHJpbSIsImV4cG9ydGVyIiwiQUxJQVMiLCJGT1JDRSIsImVuY29kZSIsImRlY29kZSIsImVuY29kaW5nTGVuZ3RoIiwiY29weXJpZ2h0IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwidW5pY29kZSIsInN0aWNreSIsIkQiLCJiYXNlNTgiLCJtdWx0aWhhc2giLCJtdWx0aWJhc2UiLCJNdWx0aWFkZHIiLCJtYWZtdCIsIkNJRCIsInVybFBhdHRlcm4iLCJwYXRoUGF0dGVybiIsImZxZG5QYXR0ZXJuIiwiaXNDSUQiLCJoYXNoIiwiaXNNdWx0aWFkZHIiLCJpbnB1dCIsImlzSXBmcyIsInBhdHRlcm4iLCJwcm90b2NvbE1hdGNoIiwiaGFzaE1hdGNoIiwiZm9ybWF0dGVkIiwiY29udmVydFRvU3RyaW5nIiwibWF0Y2giLCJpc0lwbnMiLCJCdWZmZXIiLCJpcGZzU3ViZG9tYWluIiwidXJsIiwiaXBuc1N1YmRvbWFpbiIsIm11bHRpYWRkciIsIklQRlMiLCJtYXRjaGVzIiwiY2lkIiwiYmFzZTMyY2lkIiwiaXNFbmNvZGVkIiwiaXNNdWx0aWJhc2UiLCJzdWJkb21haW4iLCJzdWJkb21haW5QYXR0ZXJuIiwiaXBmc1VybCIsImlwbnNVcmwiLCJpcGZzUGF0aCIsInBhdGgiLCJpcG5zUGF0aCIsInVybE9yUGF0aCIsIngiLCJjaWRQYXRoIiwicmVxdWlyZSIsIklTX0lOQ0xVREVTIiwiZWwiLCJmcm9tSW5kZXgiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJUT19TVFJJTkciLCJwb3MiLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwiTUFUQ0giLCJpc1JlZ0V4cCIsIlNBRkVfQ0xPU0lORyIsInJpdGVyIiwic2tpcENsb3NpbmciLCJhcnIiLCJidWlsdGluRXhlYyIsInJlZ2V4cEV4ZWMiLCJSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyIsInJlIiwiZ3JvdXBzIiwiU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDIiwib3JpZ2luYWxFeGVjIiwiU1lNQk9MIiwiREVMRUdBVEVTX1RPX1NZTUJPTCIsIkRFTEVHQVRFU19UT19FWEVDIiwiZXhlY0NhbGxlZCIsIm5hdGl2ZVJlZ0V4cE1ldGhvZCIsImZucyIsIm5hdGl2ZU1ldGhvZCIsInJlZ2V4cCIsImFyZzIiLCJmb3JjZVN0cmluZ01ldGhvZCIsInN0cmZuIiwicnhmbiIsInVzZXJBZ2VudCIsImZvck9mIiwic2V0VG9TdHJpbmdUYWciLCJpbmhlcml0SWZSZXF1aXJlZCIsIm1ldGhvZHMiLCJjb21tb24iLCJJU19XRUFLIiwiQURERVIiLCJmaXhNZXRob2QiLCJpbnN0YW5jZSIsIkhBU05UX0NIQUlOSU5HIiwiVEhST1dTX09OX1BSSU1JVElWRVMiLCJBQ0NFUFRfSVRFUkFCTEVTIiwiQlVHR1lfWkVSTyIsIiRpbnN0YW5jZSIsImNsZWFyIiwiZ2V0Q29uc3RydWN0b3IiLCJzZXRTdHJvbmciLCJUeXBlZCIsIlR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMiLCJLIiwiX19kZWZpbmVTZXR0ZXJfXyIsIkNPTExFQ1RJT04iLCJBIiwiY2IiLCJtYXBGbiIsIm5leHRJdGVtIiwiYmFzZXgiLCJpcyIsImNyZWF0ZUVsZW1lbnQiLCJ3a3NFeHQiLCIkU3ltYm9sIiwiZG9jdW1lbnRFbGVtZW50IiwiY2hlY2siLCJzZXRQcm90b3R5cGVPZiIsImJ1Z2d5IiwiX19wcm90b19fIiwiY291bnQiLCJJbmZpbml0eSIsInNpZ24iLCIkZXhwbTEiLCJleHBtMSIsIiRpdGVyQ3JlYXRlIiwiQlVHR1kiLCJyZXR1cm5UaGlzIiwiREVGQVVMVCIsIklTX1NFVCIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0TWV0aG9kIiwia2luZCIsIkRFRl9WQUxVRVMiLCJWQUxVRVNfQlVHIiwiJG5hdGl2ZSIsIiRkZWZhdWx0IiwiJGVudHJpZXMiLCIkYW55TmF0aXZlIiwiZGVzY3JpcHRvciIsInNlYXJjaFN0cmluZyIsIiRkZWZpbmVQcm9wZXJ0eSIsImdldEl0ZXJhdG9yTWV0aG9kIiwib3JpZ2luYWwiLCJlbmRQb3MiLCJhZGRUb1Vuc2NvcGFibGVzIiwiaXRlcmF0ZWQiLCJfaSIsIl9rIiwiQXJndW1lbnRzIiwicmUxIiwicmUyIiwicmVnZXhwRmxhZ3MiLCJuYXRpdmVFeGVjIiwibmF0aXZlUmVwbGFjZSIsInBhdGNoZWRFeGVjIiwiVVBEQVRFU19MQVNUX0lOREVYX1dST05HIiwiTlBDR19JTkNMVURFRCIsImxhc3RJbmRleCIsInJlQ29weSIsImF0IiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsImludm9rZSIsImh0bWwiLCJjZWwiLCJwcm9jZXNzIiwic2V0VGFzayIsInNldEltbWVkaWF0ZSIsImNsZWFyVGFzayIsImNsZWFySW1tZWRpYXRlIiwiTWVzc2FnZUNoYW5uZWwiLCJEaXNwYXRjaCIsImNvdW50ZXIiLCJxdWV1ZSIsInJ1biIsImxpc3RlbmVyIiwiZXZlbnQiLCJhcmdzIiwibmV4dFRpY2siLCJub3ciLCJwb3J0MiIsInBvcnQxIiwib25tZXNzYWdlIiwicG9zdE1lc3NhZ2UiLCJhZGRFdmVudExpc3RlbmVyIiwiaW1wb3J0U2NyaXB0cyIsInJlbW92ZUNoaWxkIiwic2V0VGltZW91dCIsIm1hY3JvdGFzayIsIk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJQcm9taXNlIiwiaXNOb2RlIiwiaGVhZCIsImxhc3QiLCJub3RpZnkiLCJmbHVzaCIsInBhcmVudCIsImRvbWFpbiIsImV4aXQiLCJlbnRlciIsInN0YW5kYWxvbmUiLCJyZXNvbHZlIiwicHJvbWlzZSIsInRoZW4iLCJ0b2dnbGUiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwidGFzayIsIlByb21pc2VDYXBhYmlsaXR5IiwicmVqZWN0IiwiJCRyZXNvbHZlIiwiJCRyZWplY3QiLCJCYXNlQnVmZmVyIiwiYWJzIiwicG93IiwibG9nIiwiTE4yIiwiJEJVRkZFUiIsIiRMRU5HVEgiLCIkT0ZGU0VUIiwicGFja0lFRUU3NTQiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsInJ0IiwidW5wYWNrSUVFRTc1NCIsIm5CaXRzIiwiTmFOIiwidW5wYWNrSTMyIiwiYnl0ZXMiLCJwYWNrSTgiLCJwYWNrSTE2IiwicGFja0kzMiIsInBhY2tGNjQiLCJwYWNrRjMyIiwidmlldyIsImlzTGl0dGxlRW5kaWFuIiwiaW50SW5kZXgiLCJfYiIsInBhY2siLCJjb252ZXJzaW9uIiwiQXJyYXlCdWZmZXJQcm90byIsImoiLCIkc2V0SW50OCIsInNldEludDgiLCJnZXRJbnQ4Iiwic2V0VWludDgiLCJidWZmZXJMZW5ndGgiLCJnZXRVaW50OCIsImdldEludDE2IiwiZ2V0VWludDE2IiwiZ2V0SW50MzIiLCJnZXRVaW50MzIiLCJnZXRGbG9hdDMyIiwiZ2V0RmxvYXQ2NCIsInNldEludDE2Iiwic2V0VWludDE2Iiwic2V0SW50MzIiLCJzZXRVaW50MzIiLCJzZXRGbG9hdDMyIiwic2V0RmxvYXQ2NCIsInV0aWxzIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsIlhNTEh0dHBSZXF1ZXN0IiwidHJhbnNmb3JtUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInBhcnNlIiwidGltZW91dCIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJzdGF0dXMiLCJlbmhhbmNlRXJyb3IiLCJtZXNzYWdlIiwiY29uZmlnIiwiY29kZSIsInJlcXVlc3QiLCJyZXNwb25zZSIsImVycm9yIiwiYnM1OCIsImNzIiwibmFtZXMiLCJjb2RlcyIsImRlZmF1bHRMZW5ndGhzIiwidmFyaW50IiwidG9IZXhTdHJpbmciLCJmcm9tSGV4U3RyaW5nIiwidG9CNThTdHJpbmciLCJmcm9tQjU4U3RyaW5nIiwiZW5jb2RlZCIsImJ1ZiIsImlzVmFsaWRDb2RlIiwiZGlnZXN0IiwiaGFzaGZuIiwiY29lcmNlQ29kZSIsImlzQXBwQ29kZSIsInByZWZpeCIsIlByb3RvY29scyIsIlYiLCJzaXplIiwicmVzb2x2YWJsZSIsIkJvb2xlYW4iLCJsZW5ndGhQcmVmaXhlZFZhclNpemUiLCJ0YWJsZSIsInJvdyIsIm1oIiwibXVsdGljb2RlYyIsImNvZGVjcyIsIkNJRFV0aWwiLCJjb2RlYyIsIm11bHRpYmFzZU5hbWUiLCJfQ0lEIiwiYmFzZU5hbWUiLCJwYXJzZUludCIsImdldENvZGVjIiwicm1QcmVmaXgiLCJ2YWxpZGF0ZUNJRCIsImZpcnN0Qnl0ZSIsIl9idWZmZXIiLCJnZXRDb2RlVmFyaW50IiwiYmFzZSIsInRvQmFzZUVuY29kZWRTdHJpbmciLCJvdGhlciIsImVxdWFscyIsImVycm9yTXNnIiwiY2hlY2tDSURDb21wb25lbnRzIiwid2l0aElzIiwiY2xhc3NOYW1lIiwic3ltYm9sTmFtZSIsImZzIiwicmVhZGRpcnIiLCJkcGF0aCIsImRpcnMiLCJmaWxlcyIsImxvb3AiLCJyZWFkZGlyIiwiZXJyIiwiX2ZpbGVzIiwiZnBhdGgiLCJzdGF0cyIsImlzRGlyZWN0b3J5IiwiZ2V0c3RhdCIsInJtZGlyciIsInJtZmlsZXMiLCJybWRpcnMiLCJ1bmxpbmsiLCJybWRpciIsImNwZGlyciIsInNwYXRoIiwidHBhdGgiLCJjcGRpcnMiLCJjcGZpbGVzIiwicnBhdGgiLCJyZWxhdGl2ZSIsImV4aXN0cyIsIm1rZGlyIiwicmVhZEZpbGUiLCJ3cml0ZUZpbGUiLCJnZXRLZXlzIiwiZGVmaW5lUHJvcGVydGllcyIsIndpbmRvd05hbWVzIiwiZ2V0V2luZG93TmFtZXMiLCJnT1BTIiwiJGFzc2lnbiIsImFzc2lnbiIsImsiLCJnZXRTeW1ib2xzIiwiaXNFbnVtIiwieSIsImZhY3RvcmllcyIsImNvbnN0cnVjdCIsInBhcnRBcmdzIiwiYm91bmQiLCJ1biIsIiRwYXJzZUludCIsIiR0cmltIiwid3MiLCJoZXgiLCJyYWRpeCIsIiRwYXJzZUZsb2F0IiwicGFyc2VGbG9hdCIsIm1zZyIsImlzRmluaXRlIiwibG9nMXAiLCJFUFNJTE9OIiwiRVBTSUxPTjMyIiwiTUFYMzIiLCJNSU4zMiIsImZyb3VuZCIsIiRhYnMiLCIkc2lnbiIsInJldCIsIm1lbW8iLCJpc1JpZ2h0IiwidG8iLCJpbmMiLCJmb3JjZWQiLCJmbGFncyIsIm5ld1Byb21pc2VDYXBhYmlsaXR5IiwicHJvbWlzZUNhcGFiaWxpdHkiLCJzdHJvbmciLCJlbnRyeSIsImdldEVudHJ5IiwiJGl0ZXJEZWZpbmUiLCJTSVpFIiwiX2YiLCJfbCIsInByZXYiLCJhZGQiLCJJbnRlcm5hbE1hcCIsImVhY2giLCJ3ZWFrIiwiTkFUSVZFX1dFQUtfTUFQIiwiSVNfSUUxMSIsIkFjdGl2ZVhPYmplY3QiLCJ1bmNhdWdodEZyb3plblN0b3JlIiwidWZzdG9yZSIsIiRXZWFrTWFwIiwiJGhhcyIsIlVuY2F1Z2h0RnJvemVuU3RvcmUiLCJmaW5kVW5jYXVnaHRGcm96ZW4iLCJzcGxpY2UiLCJudW1iZXIiLCJSZWZsZWN0Iiwib3duS2V5cyIsIklTX0NPTkNBVF9TUFJFQURBQkxFIiwiZmxhdHRlbkludG9BcnJheSIsInNvdXJjZUxlbiIsImRlcHRoIiwibWFwcGVyIiwiZWxlbWVudCIsInNwcmVhZGFibGUiLCJ0YXJnZXRJbmRleCIsInNvdXJjZUluZGV4IiwicmVwZWF0IiwibWF4TGVuZ3RoIiwiZmlsbFN0cmluZyIsImxlZnQiLCJzdHJpbmdMZW5ndGgiLCJmaWxsU3RyIiwiaW50TWF4TGVuZ3RoIiwiZmlsbExlbiIsInN0cmluZ0ZpbGxlciIsImlzRW50cmllcyIsInNjYWxlIiwiaW5Mb3ciLCJpbkhpZ2giLCJvdXRMb3ciLCJvdXRIaWdoIiwiY3JlYXRlRXJyb3IiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwic2VyaWFsaXplZFBhcmFtcyIsInBhcnRzIiwidG9JU09TdHJpbmciLCJodHRwIiwiaHR0cHMiLCJhc3NlcnQiLCJXcml0YWJsZSIsImRlYnVnIiwiU0FGRV9NRVRIT0RTIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJUUkFDRSIsImV2ZW50SGFuZGxlcnMiLCJSZWRpcmVjdGFibGVSZXF1ZXN0IiwicmVzcG9uc2VDYWxsYmFjayIsIl9vcHRpb25zIiwiX3JlZGlyZWN0Q291bnQiLCJfcmVkaXJlY3RzIiwiX3JlcXVlc3RCb2R5TGVuZ3RoIiwiX3JlcXVlc3RCb2R5QnVmZmVycyIsImhvc3QiLCJob3N0bmFtZSIsIm9uIiwiX29uTmF0aXZlUmVzcG9uc2UiLCJfcHJvY2Vzc1Jlc3BvbnNlIiwicGF0aG5hbWUiLCJzZWFyY2hQb3MiLCJzdWJzdHJpbmciLCJzZWFyY2giLCJfcGVyZm9ybVJlcXVlc3QiLCJ3cmFwIiwicHJvdG9jb2xzIiwibWF4UmVkaXJlY3RzIiwibWF4Qm9keUxlbmd0aCIsIm5hdGl2ZVByb3RvY29scyIsInNjaGVtZSIsInByb3RvY29sIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJjYWxsYmFjayIsImVxdWFsIiwiX3JlZGlyZWN0YWJsZSIsImVtaXQiLCJlbmNvZGluZyIsIl9jdXJyZW50UmVxdWVzdCIsImFib3J0IiwiY3VycmVudFJlcXVlc3QiLCJzZXRIZWFkZXIiLCJyZW1vdmVIZWFkZXIiLCJhZ2VudHMiLCJzdWJzdHIiLCJhZ2VudCIsIl9jdXJyZW50VXJsIiwiZm9ybWF0IiwiX2lzUmVkaXJlY3QiLCJidWZmZXJzIiwid3JpdGVOZXh0IiwidHJhY2tSZWRpcmVjdHMiLCJzdGF0dXNDb2RlIiwibG9jYXRpb24iLCJmb2xsb3dSZWRpcmVjdHMiLCJoZWFkZXIiLCJyZWRpcmVjdFVybCIsImRlc3Ryb3kiLCJyZXNwb25zZVVybCIsInJlZGlyZWN0cyIsImNyZWF0ZURlYnVnIiwibmFtZXNwYWNlIiwicHJldlRpbWUiLCJlbmFibGVkIiwiY3VyciIsIkRhdGUiLCJtcyIsImRpZmYiLCJjb2VyY2UiLCJ1bnNoaWZ0IiwiZm9ybWF0dGVyIiwiZm9ybWF0dGVycyIsImZvcm1hdEFyZ3MiLCJsb2dGbiIsImNvbnNvbGUiLCJ1c2VDb2xvcnMiLCJjb2xvciIsImNvbG9ycyIsInNlbGVjdENvbG9yIiwiaW5pdCIsImluc3RhbmNlcyIsInN0YWNrIiwiZGlzYWJsZSIsImVuYWJsZSIsIm5hbWVzcGFjZXMiLCJzYXZlIiwic2tpcHMiLCJodW1hbml6ZSIsIl9fQ0FOQ0VMX18iLCJDYW5jZWwiLCJfQnVmZmVyIiwiQUxQSEFCRVQiLCJCQVNFX01BUCIsInhjIiwiQkFTRSIsIkxFQURFUiIsIkZBQ1RPUiIsImlGQUNUT1IiLCJkZWNvZGVVbnNhZmUiLCJhbGxvYyIsInBzeiIsInplcm9lcyIsImIyNTYiLCJjYXJyeSIsIml0MyIsIml0NCIsInZjaCIsImFsbG9jVW5zYWZlIiwicGJlZ2luIiwicGVuZCIsImI1OCIsIml0MSIsIml0MiIsImNvbnN0YW50cyIsIm5hbWVPckNvZGUiLCJnZXRCYXNlIiwiYnVmT3JTdHJpbmciLCJmcmVlemUiLCJlcnJOb3RTdXBwb3J0ZWQiLCJjb2RlQnVmIiwidmFsaWRFbmNvZGUiLCJpc0ltcGxlbWVudGVkIiwiaW5zcGVjdCIsImZvciIsImFkZHIiLCJmcm9tQnVmZmVyIiwiZnJvbVN0cmluZyIsInByb3RvcyIsInByb3RvQ29kZXMiLCJidWZmZXJUb1N0cmluZyIsInRvSlNPTiIsInRvT3B0aW9ucyIsIm9wdHMiLCJwYXJzZWQiLCJmYW1pbHkiLCJ0cmFuc3BvcnQiLCJzaXplRm9yQWRkciIsInByb3RvTmFtZXMiLCJ0dXBsZXMiLCJidWZmZXJUb1R1cGxlcyIsInN0cmluZ1R1cGxlcyIsInR1cGxlc1RvU3RyaW5nVHVwbGVzIiwiZW5jYXBzdWxhdGUiLCJkZWNhcHN1bGF0ZSIsImRlY2Fwc3VsYXRlQ29kZSIsInR1cGxlc1RvQnVmZmVyIiwiZ2V0UGVlcklkIiwiYjU4c3RyIiwidHVwbGUiLCJpcGZzIiwicG9wIiwiZ2V0UGF0aCIsIm5vZGVBZGRyZXNzIiwiYWRkcmVzcyIsImZyb21Ob2RlQWRkcmVzcyIsImlwIiwiaXNUaGluV2Fpc3RBZGRyZXNzIiwiaXNOYW1lIiwiYnVmZmVyVG9OdW1iZXIiLCJudW1iZXJUb0J1ZmZlciIsIm51bSIsImhleFN0cmluZyIsInZhcmludEJ1ZmZlckVuY29kZSIsInZhcmludEJ1ZmZlckRlY29kZSIsInZhcmludEVuY29kZSIsIkNsYXNzIiwic3ltYm9sIiwiQ2xhc3NJc1dyYXBwZXIiLCJzdXBlciIsIndpdGhvdXROZXciLCJfdGhpcyIsIkNvbWJpbmVkU3RyZWFtIiwidXRpbCIsInBhcnNlVXJsIiwibWltZSIsImFzeW5ja2l0IiwicG9wdWxhdGUiLCJvcHRpb24iLCJfb3ZlcmhlYWRMZW5ndGgiLCJfdmFsdWVMZW5ndGgiLCJfdmFsdWVzVG9NZWFzdXJlIiwiaW5oZXJpdHMiLCJMSU5FX0JSRUFLIiwiYXBwZW5kIiwiZmllbGQiLCJmaWxlbmFtZSIsIl9lcnJvciIsIl9tdWx0aVBhcnRIZWFkZXIiLCJmb290ZXIiLCJfbXVsdGlQYXJ0Rm9vdGVyIiwiX3RyYWNrTGVuZ3RoIiwidmFsdWVMZW5ndGgiLCJrbm93bkxlbmd0aCIsInJlYWRhYmxlIiwiX2xlbmd0aFJldHJpZXZlciIsImZpbGVTaXplIiwicGF1c2UiLCJyZXN1bWUiLCJjb250ZW50RGlzcG9zaXRpb24iLCJfZ2V0Q29udGVudERpc3Bvc2l0aW9uIiwiY29udGVudFR5cGUiLCJfZ2V0Q29udGVudFR5cGUiLCJjb250ZW50cyIsInByb3AiLCJnZXRCb3VuZGFyeSIsImZpbGVwYXRoIiwibm9ybWFsaXplIiwiYmFzZW5hbWUiLCJjbGllbnQiLCJfaHR0cE1lc3NhZ2UiLCJsb29rdXAiLCJfc3RyZWFtcyIsIl9sYXN0Qm91bmRhcnkiLCJnZXRIZWFkZXJzIiwidXNlckhlYWRlcnMiLCJmb3JtSGVhZGVycyIsIl9ib3VuZGFyeSIsIl9nZW5lcmF0ZUJvdW5kYXJ5IiwiZ2V0QnVmZmVyIiwiZGF0YUJ1ZmZlciIsImJvdW5kYXJ5IiwiZ2V0TGVuZ3RoU3luYyIsImhhc0tub3duTGVuZ3RoIiwiZ2V0TGVuZ3RoIiwicGFyYWxsZWwiLCJzdWJtaXQiLCJhc3luYyIsInN0YXRlIiwiam9icyIsIml0ZW0iLCJhYm9ydGVyIiwicnVuSm9iIiwib3V0cHV0IiwicmVzdWx0cyIsImlzQXN5bmMiLCJjbGVhbiIsInNvcnRNZXRob2QiLCJpc05hbWVkTGlzdCIsImluaXRTdGF0ZSIsImtleWVkTGlzdCIsIml0ZXJhdGUiLCJ0ZXJtaW5hdG9yIiwiYXNjZW5kaW5nIiwiaXRlcmF0b3JIYW5kbGVyIiwiZGVzY2VuZGluZyIsIl9iYWJlbFBvbHlmaWxsIiwicGFkU3RhcnQiLCJwYWRFbmQiLCIkZmFpbHMiLCJ3a3NEZWZpbmUiLCJlbnVtS2V5cyIsIl9jcmVhdGUiLCJnT1BORXh0IiwiJEdPUFMiLCIkSlNPTiIsIl9zdHJpbmdpZnkiLCJISURERU4iLCJUT19QUklNSVRJVkUiLCJTeW1ib2xSZWdpc3RyeSIsIkFsbFN5bWJvbHMiLCJPUFN5bWJvbHMiLCJVU0VfTkFUSVZFIiwiUU9iamVjdCIsImZpbmRDaGlsZCIsInNldFN5bWJvbERlc2MiLCJwcm90b0Rlc2MiLCJzeW0iLCJpc1N5bWJvbCIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwiRSIsIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCIkZ2V0T3duUHJvcGVydHlOYW1lcyIsIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJJU19PUCIsImVzNlN5bWJvbHMiLCJ3ZWxsS25vd25TeW1ib2xzIiwia2V5Rm9yIiwidXNlU2V0dGVyIiwidXNlU2ltcGxlIiwiRkFJTFNfT05fUFJJTUlUSVZFUyIsInJlcGxhY2VyIiwiJHJlcGxhY2VyIiwic3ltYm9scyIsIiRnZXRQcm90b3R5cGVPZiIsIiRmcmVlemUiLCIkc2VhbCIsIiRwcmV2ZW50RXh0ZW5zaW9ucyIsIiRpc0Zyb3plbiIsIiRpc1NlYWxlZCIsIiRpc0V4dGVuc2libGUiLCJGUHJvdG8iLCJuYW1lUkUiLCJIQVNfSU5TVEFOQ0UiLCJGdW5jdGlvblByb3RvIiwiJE51bWJlciIsIkJST0tFTl9DT0YiLCJUUklNIiwidG9OdW1iZXIiLCJhcmd1bWVudCIsInRoaXJkIiwibWF4Q29kZSIsImZpcnN0IiwiZGlnaXRzIiwiYU51bWJlclZhbHVlIiwiJHRvRml4ZWQiLCJ0b0ZpeGVkIiwiRVJST1IiLCJtdWx0aXBseSIsImMyIiwiZGl2aWRlIiwibnVtVG9TdHJpbmciLCJhY2MiLCJmcmFjdGlvbkRpZ2l0cyIsInoiLCJ4MiIsIiR0b1ByZWNpc2lvbiIsInRvUHJlY2lzaW9uIiwicHJlY2lzaW9uIiwiX2lzRmluaXRlIiwiaXNTYWZlSW50ZWdlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJNSU5fU0FGRV9JTlRFR0VSIiwic3FydCIsIiRhY29zaCIsImFjb3NoIiwiTUFYX1ZBTFVFIiwiJGFzaW5oIiwiYXNpbmgiLCIkYXRhbmgiLCJhdGFuaCIsImNicnQiLCJjbHozMiIsIkxPRzJFIiwiY29zaCIsImh5cG90IiwidmFsdWUxIiwidmFsdWUyIiwiZGl2Iiwic3VtIiwibGFyZyIsIiRpbXVsIiwiaW11bCIsInhuIiwieW4iLCJ4bCIsInlsIiwibG9nMTAiLCJMT0cxMEUiLCJsb2cyIiwic2luaCIsInRhbmgiLCJ0cnVuYyIsImZyb21DaGFyQ29kZSIsIiRmcm9tQ29kZVBvaW50IiwiZnJvbUNvZGVQb2ludCIsInJhdyIsImNhbGxTaXRlIiwidHBsIiwiJGF0IiwicG9pbnQiLCJjb2RlUG9pbnRBdCIsImNvbnRleHQiLCIkZW5kc1dpdGgiLCJlbmRzV2l0aCIsImVuZFBvc2l0aW9uIiwiJHN0YXJ0c1dpdGgiLCJzdGFydHNXaXRoIiwiZ2V0VGltZSIsInB2IiwiJHRvSVNPU3RyaW5nIiwibHoiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJEYXRlUHJvdG8iLCJoaW50IiwiY3JlYXRlUHJvcGVydHkiLCJ1cFRvIiwiY2xvbmVkIiwiJHNvcnQiLCIkZm9yRWFjaCIsIlNUUklDVCIsIiRmaWx0ZXIiLCIkc29tZSIsIiRldmVyeSIsIiRyZWR1Y2UiLCIkaW5kZXhPZiIsIk5FR0FUSVZFX1pFUk8iLCIkZmluZCIsIiRmbGFncyIsIiRSZWdFeHAiLCJDT1JSRUNUX05FVyIsInRpUkUiLCJwaVJFIiwiZmlVIiwicHJveHkiLCJhZHZhbmNlU3RyaW5nSW5kZXgiLCJyZWdFeHBFeGVjIiwiJG1hdGNoIiwibWF5YmVDYWxsTmF0aXZlIiwicngiLCJmdWxsVW5pY29kZSIsIm1hdGNoU3RyIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFMiLCJTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCIsIlJFUExBQ0UiLCIkcmVwbGFjZSIsInNlYXJjaFZhbHVlIiwicmVwbGFjZVZhbHVlIiwiZnVuY3Rpb25hbFJlcGxhY2UiLCJhY2N1bXVsYXRlZFJlc3VsdCIsIm5leHRTb3VyY2VQb3NpdGlvbiIsIm1hdGNoZWQiLCJwb3NpdGlvbiIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInJlcGxhY2VyQXJncyIsInJlcGxhY2VtZW50IiwiZ2V0U3Vic3RpdHV0aW9uIiwidGFpbFBvcyIsImNoIiwiY2FwdHVyZSIsInNhbWVWYWx1ZSIsIlNFQVJDSCIsIiRzZWFyY2giLCJwcmV2aW91c0xhc3RJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiJG1pbiIsIiRwdXNoIiwiU1VQUE9SVFNfWSIsIlNQTElUIiwiJHNwbGl0IiwiaW50ZXJuYWxTcGxpdCIsImxpbWl0IiwibGFzdExlbmd0aCIsImxhc3RMYXN0SW5kZXgiLCJzcGxpdExpbWl0Iiwic2VwYXJhdG9yQ29weSIsInNwbGl0dGVyIiwidW5pY29kZU1hdGNoaW5nIiwibGltIiwicSIsIkludGVybmFsIiwibmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5IiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJXcmFwcGVyIiwibWljcm90YXNrIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwicHJvbWlzZVJlc29sdmUiLCJ2ZXJzaW9ucyIsInY4IiwiJFByb21pc2UiLCJlbXB0eSIsIkZha2VQcm9taXNlIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiaXNUaGVuYWJsZSIsImlzUmVqZWN0IiwiX24iLCJjaGFpbiIsIl9jIiwiX3YiLCJvayIsIl9zIiwicmVhY3Rpb24iLCJleGl0ZWQiLCJoYW5kbGVyIiwiZmFpbCIsIl9oIiwib25IYW5kbGVVbmhhbmRsZWQiLCJvblVuaGFuZGxlZCIsInVuaGFuZGxlZCIsImlzVW5oYW5kbGVkIiwib251bmhhbmRsZWRyZWplY3Rpb24iLCJyZWFzb24iLCJfYSIsIm9ucmVqZWN0aW9uaGFuZGxlZCIsIiRyZWplY3QiLCJfdyIsIiRyZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYXBhYmlsaXR5IiwiYWxsIiwicmVtYWluaW5nIiwiJGluZGV4IiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCIkaXNWaWV3IiwiZmluIiwidmlld1MiLCJ2aWV3VCIsInJBcHBseSIsImZBcHBseSIsInRoaXNBcmd1bWVudCIsImFyZ3VtZW50c0xpc3QiLCJMIiwickNvbnN0cnVjdCIsIk5FV19UQVJHRVRfQlVHIiwiQVJHU19CVUciLCJUYXJnZXQiLCJuZXdUYXJnZXQiLCIkYXJncyIsInByb3BlcnR5S2V5IiwiYXR0cmlidXRlcyIsImRlbGV0ZVByb3BlcnR5IiwiRW51bWVyYXRlIiwiZW51bWVyYXRlIiwicmVjZWl2ZXIiLCJnZXRQcm90byIsImV4aXN0aW5nRGVzY3JpcHRvciIsIm93bkRlc2MiLCJzZXRQcm90byIsIiRpbmNsdWRlcyIsImFycmF5U3BlY2llc0NyZWF0ZSIsImZsYXRNYXAiLCJmbGF0dGVuIiwiZGVwdGhBcmciLCIkcGFkIiwiV0VCS0lUX0JVRyIsImdldEZsYWdzIiwiUmVnRXhwUHJvdG8iLCIkUmVnRXhwU3RyaW5nSXRlcmF0b3IiLCJfciIsIm1hdGNoQWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImdldERlc2MiLCIkdmFsdWVzIiwiX19kZWZpbmVHZXR0ZXJfXyIsIl9fbG9va3VwR2V0dGVyX18iLCJfX2xvb2t1cFNldHRlcl9fIiwiaXNFcnJvciIsImNsYW1wIiwibG93ZXIiLCJ1cHBlciIsIkRFR19QRVJfUkFEIiwiUEkiLCJSQURfUEVSX0RFRyIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiZnNjYWxlIiwiaWFkZGgiLCJ4MCIsIngxIiwieTAiLCJ5MSIsIiR4MCIsIiR5MCIsImlzdWJoIiwiaW11bGgiLCJ1IiwiJHUiLCIkdiIsInUwIiwidjAiLCJ1MSIsInYxIiwidW11bGgiLCJzaWduYml0Iiwib25GaW5hbGx5IiwidG9NZXRhS2V5Iiwib3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSIsImRlZmluZU1ldGFkYXRhIiwibWV0YWRhdGFLZXkiLCJtZXRhZGF0YVZhbHVlIiwiZGVsZXRlTWV0YWRhdGEiLCJvcmRpbmFyeUhhc093bk1ldGFkYXRhIiwib3JkaW5hcnlHZXRPd25NZXRhZGF0YSIsIm9yZGluYXJ5R2V0TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsIlNldCIsIm9yZGluYXJ5T3duTWV0YWRhdGFLZXlzIiwib3JkaW5hcnlNZXRhZGF0YUtleXMiLCJvS2V5cyIsInBLZXlzIiwiZ2V0TWV0YWRhdGFLZXlzIiwiZ2V0T3duTWV0YWRhdGEiLCJnZXRPd25NZXRhZGF0YUtleXMiLCJvcmRpbmFyeUhhc01ldGFkYXRhIiwiaGFzTWV0YWRhdGEiLCJoYXNPd25NZXRhZGF0YSIsIiRtZXRhZGF0YSIsImFzYXAiLCJPQlNFUlZBQkxFIiwiY2xlYW51cFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbiIsImNsZWFudXAiLCJzdWJzY3JpcHRpb25DbG9zZWQiLCJfbyIsImNsb3NlU3Vic2NyaXB0aW9uIiwiU3Vic2NyaXB0aW9uIiwib2JzZXJ2ZXIiLCJzdWJzY3JpYmVyIiwiU3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJ1bnN1YnNjcmliZSIsImNvbXBsZXRlIiwiJE9ic2VydmFibGUiLCJzdWJzY3JpYmUiLCJvYnNlcnZhYmxlIiwiaXRlbXMiLCJPYnNlcnZhYmxlIiwiTVNJRSIsInRpbWUiLCJib3VuZEFyZ3MiLCJzZXRJbnRlcnZhbCIsIiR0YXNrIiwiVE9fU1RSSU5HX1RBRyIsIkFycmF5VmFsdWVzIiwiRE9NSXRlcmFibGVzIiwiQ1NTUnVsZUxpc3QiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwiQ1NTVmFsdWVMaXN0IiwiQ2xpZW50UmVjdExpc3QiLCJET01SZWN0TGlzdCIsIkRPTVN0cmluZ0xpc3QiLCJET01Ub2tlbkxpc3QiLCJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsIkZpbGVMaXN0IiwiSFRNTEFsbENvbGxlY3Rpb24iLCJIVE1MQ29sbGVjdGlvbiIsIkhUTUxGb3JtRWxlbWVudCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiTWVkaWFMaXN0IiwiTWltZVR5cGVBcnJheSIsIk5hbWVkTm9kZU1hcCIsIk5vZGVMaXN0IiwiUGFpbnRSZXF1ZXN0TGlzdCIsIlBsdWdpbiIsIlBsdWdpbkFycmF5IiwiU1ZHTGVuZ3RoTGlzdCIsIlNWR051bWJlckxpc3QiLCJTVkdQYXRoU2VnTGlzdCIsIlNWR1BvaW50TGlzdCIsIlNWR1N0cmluZ0xpc3QiLCJTVkdUcmFuc2Zvcm1MaXN0IiwiU291cmNlQnVmZmVyTGlzdCIsIlN0eWxlU2hlZXRMaXN0IiwiVGV4dFRyYWNrQ3VlTGlzdCIsIlRleHRUcmFja0xpc3QiLCJUb3VjaExpc3QiLCJjb2xsZWN0aW9ucyIsImV4cGxpY2l0IiwiQ29sbGVjdGlvbiIsIk9wIiwiaGFzT3duIiwiaXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwiaW5Nb2R1bGUiLCJydW50aW1lIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiQ29udGludWVTZW50aW5lbCIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwiR3AiLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkdlbmVyYXRvciIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJhd3JhcCIsIl9fYXdhaXQiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJBc3luY0l0ZXJhdG9yIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsIkNvbnRleHQiLCJyZXNldCIsInNraXBUZW1wUmVzZXQiLCJzZW50IiwiX3NlbnQiLCJkZWxlZ2F0ZSIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5Iiwic3RvcCIsInJvb3RSZWNvcmQiLCJjb21wbGV0aW9uIiwicnZhbCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwicmVjb3JkIiwidHJ5TG9jIiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWJydXB0IiwiZmluYWxseUVudHJ5IiwiYWZ0ZXJMb2MiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwcm90b0dlbmVyYXRvciIsImdlbmVyYXRvciIsIl9pbnZva2UiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwidHJ5Q2F0Y2giLCJtYWtlSW52b2tlTWV0aG9kIiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXR1cm4iLCJpbmZvIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsIml0ZXJhdG9yTWV0aG9kIiwiZXNjYXBlIiwiJHJlIiwicmVnRXhwIiwicGFydCIsInBpbkJ5SGFzaCIsImhhc2hUb1BpbiIsImhhc2hQaW5Qb2xpY3kiLCJpcGZzUGluSGFzaCIsIm5ld1BpblBvbGljeSIsInBpbkZpbGVUb0lQRlMiLCJyZWFkYWJsZVN0cmVhbSIsInBpbkZyb21GUyIsInNvdXJjZVBhdGgiLCJwaW5KU09OVG9JUEZTIiwiYm9keSIsInBpbkpvYnMiLCJmaWx0ZXJzIiwidW5waW4iLCJoYXNoVG9VbnBpbiIsInVzZXJQaW5Qb2xpY3kiLCJ0ZXN0QXV0aGVudGljYXRpb24iLCJwaW5MaXN0IiwidXNlclBpbm5lZERhdGFUb3RhbCIsInZhbGlkYXRlQXBpS2V5cyIsImVuZHBvaW50IiwiYmFzZVVybCIsInBpbmF0YU9wdGlvbnMiLCJwaW5hdGFNZXRhZGF0YSIsInZhbGlkYXRlTWV0YWRhdGEiLCJheGlvcyIsInBvc3QiLCJ3aXRoQ3JlZGVudGlhbHMiLCJBeGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlQ29uZmlnIiwiQ2FuY2VsVG9rZW4iLCJpc0NhbmNlbCIsInByb21pc2VzIiwic3ByZWFkIiwiZGVmYXVsdCIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsImludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzaGlmdCIsIm5vcm1hbGl6ZWROYW1lIiwidG9VcHBlckNhc2UiLCJzZXR0bGUiLCJidWlsZFVSTCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIkF1dGhvcml6YXRpb24iLCJidG9hIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJvbnRpbWVvdXQiLCJjb29raWVzIiwieHNyZlZhbHVlIiwicmVhZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsVG9rZW4iLCJjYW5jZWwiLCJzZW5kIiwiaWdub3JlRHVwbGljYXRlT2YiLCJsaW5lIiwib3JpZ2luVVJMIiwibXNpZSIsInVybFBhcnNpbmdOb2RlIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJyZXF1ZXN0VVJMIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwiaHR0cEZvbGxvdyIsImh0dHBzRm9sbG93IiwiemxpYiIsInBrZyIsInRpbWVyIiwidXJsQXV0aCIsImlzSHR0cHMiLCJodHRwc0FnZW50IiwiaHR0cEFnZW50Iiwic29ja2V0UGF0aCIsInByb3h5RW52IiwicHJveHlVcmwiLCJlbnYiLCJwYXJzZWRQcm94eVVybCIsInByb3h5VXJsQXV0aCIsImJhc2U2NCIsInJlcSIsImFib3J0ZWQiLCJjbGVhclRpbWVvdXQiLCJzdHJlYW0iLCJjcmVhdGVVbnppcCIsImxhc3RSZXF1ZXN0Iiwic3RhdHVzTWVzc2FnZSIsInJlc3BvbnNlQnVmZmVyIiwiY2h1bmsiLCJyZXNwb25zZURhdGEiLCJsb2FkIiwic3RvcmFnZSIsIkRFQlVHIiwibGFzdEMiLCJyZW1vdmVJdGVtIiwiV2Via2l0QXBwZWFyYW5jZSIsImZpcmVidWciLCIkMSIsImNocm9tZSIsImxvY2FsIiwibG9jYWxTdG9yYWdlIiwibG9jYWxzdG9yYWdlIiwiaCIsInBsdXJhbCIsImxvbmciLCJmbXRTaG9ydCIsInR0eSIsImluc3BlY3RPcHRzIiwic3RkZXJyIiwiY29sb3JDb2RlIiwiaGlkZURhdGUiLCJpc2F0dHkiLCJmZCIsInN1cHBvcnRzQ29sb3IiLCJsZXZlbCIsIm9zIiwiaGFzRmxhZyIsImZvcmNlQ29sb3IiLCJnZXRTdXBwb3J0TGV2ZWwiLCJoYXNCYXNpYyIsImhhczI1NiIsImhhczE2bSIsInRyYW5zbGF0ZUxldmVsIiwiaXNUVFkiLCJwbGF0Zm9ybSIsIm9zUmVsZWFzZSIsInJlbGVhc2UiLCJDSV9OQU1FIiwiVEVBTUNJVFlfVkVSU0lPTiIsIkNPTE9SVEVSTSIsIlRFUk1fUFJPR1JBTV9WRVJTSU9OIiwiVEVSTV9QUk9HUkFNIiwiVEVSTSIsIkZPUkNFX0NPTE9SIiwic3Rkb3V0IiwiZmxhZyIsImFyZ3YiLCJ0ZXJtaW5hdG9yUG9zIiwiaGFuZGxlcnMiLCJ1c2UiLCJlamVjdCIsInRyYW5zZm9ybURhdGEiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsInJlc29sdmVQcm9taXNlIiwidG9rZW4iLCJjb3B5UHJvcHMiLCJkc3QiLCJTYWZlQnVmZmVyIiwiZW5jb2RpbmdPck9mZnNldCIsImFsbG9jVW5zYWZlU2xvdyIsIlNsb3dCdWZmZXIiLCIwIiwib2xkT2Zmc2V0IiwiSU5UIiwiTjEiLCJOMiIsIk4zIiwiTjQiLCJONSIsIk42IiwiTjciLCJOOCIsIk45IiwiYmFzZVgiLCJiYXNlMTYiLCJiYXNlMzIiLCJ0dXBwbGUiLCJpbXBsZW1lbnRhdGlvbiIsImFscGhhYmV0IiwiZW5naW5lIiwic3RyaW5nT3JCdWZmZXIiLCJjaGFyIiwicGFkZGluZyIsImJpdHMiLCJwYWQiLCJjb252ZXJ0Iiwic3RyaW5nVG9TdHJpbmdUdXBsZXMiLCJQYXJzZUVycm9yIiwiY2xlYW5QYXRoIiwic3RyaW5nVHVwbGVzVG9TdHJpbmciLCJ0dXAiLCJwcm90b0Zyb21UdXBsZSIsInN0cmluZ1R1cGxlc1RvVHVwbGVzIiwidG9CdWZmZXIiLCJzdHJpbmdUb0J1ZmZlciIsInZhbGlkYXRlQnVmZmVyIiwiaXNWYWxpZEJ1ZmZlciIsImlzSXAiLCJDb252ZXJ0IiwiaXAyYnVmIiwiaXBTdHJpbmciLCJwb3J0MmJ1ZiIsIndyaXRlVUludDE2QkUiLCJidWYycG9ydCIsInJlYWRVSW50MTZCRSIsImJ1ZjJvbmlvbiIsImFkZHJCeXRlcyIsInBvcnRCeXRlcyIsImlwQnVmZiIsImJ1ZjJpcCIsImJ1ZjJzdHIiLCJidWYybWgiLCJzdHIyYnVmIiwibWgyYnVmIiwiYXNCeXRlcyIsInBvcnRCdWYiLCJvbmlvbjJidWYiLCJvbmlvbjMyYnVmIiwiYnVmZiIsImlzVjRGb3JtYXQiLCJieXRlIiwiaXNWNkZvcm1hdCIsInNlY3Rpb25zIiwidjRCdWZmZXIiLCJ3b3JkIiwiaXB2NFJlZ2V4IiwiaXB2NlJlZ2V4IiwiX25vcm1hbGl6ZUZhbWlseSIsImZyb21QcmVmaXhMZW4iLCJwcmVmaXhsZW4iLCJtYXNrIiwiY2lkciIsImNpZHJTdHJpbmciLCJjaWRyUGFydHMiLCJzdWJuZXQiLCJuZXR3b3JrQWRkcmVzcyIsInRvTG9uZyIsIm1hc2tCdWZmZXIiLCJtYXNrTGVuZ3RoIiwib2N0ZXQiLCJudW1iZXJPZkFkZHJlc3NlcyIsImZyb21Mb25nIiwiZmlyc3RBZGRyZXNzIiwibGFzdEFkZHJlc3MiLCJicm9hZGNhc3RBZGRyZXNzIiwic3VibmV0TWFzayIsInN1Ym5ldE1hc2tMZW5ndGgiLCJudW1Ib3N0cyIsImNvbnRhaW5zIiwiY2lkclN1Ym5ldCIsIm5vdCIsIm9yIiwiaXNFcXVhbCIsImlzUHJpdmF0ZSIsImlzUHVibGljIiwiaXNMb29wYmFjayIsImxvb3BiYWNrIiwiaW50ZXJmYWNlcyIsIm5ldHdvcmtJbnRlcmZhY2VzIiwiZGV0YWlscyIsIm5pYyIsImFkZHJlc3NlcyIsImlwbCIsImlwUmVnZXgiLCJleGFjdCIsInY0IiwidjYiLCJpbmNsdWRlQm91bmRhcmllcyIsInY2c2VnIiwiaW50VGFibGUiLCJjb2RlY05hbWVUb0NvZGVWYXJpbnQiLCJhZGRQcmVmaXgiLCJtdWx0aWNvZGVjU3RyT3JDb2RlIiwicHJlZml4ZWREYXRhIiwiY29kZWNOYW1lIiwiZ2V0TmFtZSIsImdldE51bWJlciIsImdldENvZGUiLCJnZXRWYXJpbnQiLCJwcmludCIsImJhc2VUYWJsZSIsIm5hbWVUYWJsZSIsImVuY29kaW5nTmFtZSIsInZhcmludFRhYmxlIiwidGFibGVCeUNvZGUiLCJISV9CQVNFMzJfTk9fTk9ERV9KUyIsIkNPTU1PTl9KUyIsIkhJX0JBU0UzMl9OT19DT01NT05fSlMiLCJBTUQiLCJCQVNFMzJfRU5DT0RFX0NIQVIiLCJCQVNFMzJfREVDT0RFX0NIQVIiLCJibG9ja3MiLCJ0aHJvd0ludmFsaWRVdGY4IiwicGFydGlhbCIsImRlY29kZUFzQnl0ZXMiLCJiYXNlMzJTdHIiLCJ2MiIsInYzIiwidjUiLCJ2NyIsInJlbWFpbiIsImFzY2lpT25seSIsImZvbGxvd2luZ0NoYXJzIiwidG9VdGY4U3RyaW5nIiwibm90U3RyaW5nIiwiZW5jb2RlQnl0ZXMiLCJlbmNvZGVBc2NpaSIsImVuY29kZVV0ZjgiLCJfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyIsIkROUzQiLCJETlM2IiwiRE5TIiwiSVAiLCJUQ1AiLCJhbmQiLCJVRFAiLCJVVFAiLCJXZWJTb2NrZXRzIiwiV2ViU29ja2V0c1NlY3VyZSIsIkhUVFAiLCJIVFRQUyIsIldlYlJUQ1N0YXIiLCJXZWJTb2NrZXRTdGFyIiwiV2ViUlRDRGlyZWN0IiwiUmVsaWFibGUiLCJTdGFyZHVzdCIsIl9QMlAiLCJfQ2lyY3VpdCIsIkNpcmN1aXRSZWN1cnNpdmUiLCJDaXJjdWl0IiwiUDJQIiwibWFrZU1hdGNoZXNGdW5jdGlvbiIsInBhcnRpYWxNYXRjaCIsInBuYW1lcyIsInB1dCIsInJlYWRTdHJlYW0iLCJOb2RlRm9ybURhdGEiLCJSZWFkYWJsZSIsInZhbGlkYXRlUGluYXRhT3B0aW9ucyIsIlN0cmVhbSIsIkRlbGF5ZWRTdHJlYW0iLCJkYXRhU2l6ZSIsIm1heERhdGFTaXplIiwicGF1c2VTdHJlYW1zIiwiX3JlbGVhc2VkIiwiX2N1cnJlbnRTdHJlYW0iLCJfaW5zaWRlTG9vcCIsIl9wZW5kaW5nTmV4dCIsImNvbWJpbmVkU3RyZWFtIiwiaXNTdHJlYW1MaWtlIiwibmV3U3RyZWFtIiwicGF1c2VTdHJlYW0iLCJfY2hlY2tEYXRhU2l6ZSIsIl9oYW5kbGVFcnJvcnMiLCJkZXN0IiwiX2dldE5leHQiLCJfcmVhbEdldE5leHQiLCJfcGlwZU5leHQiLCJfZW1pdEVycm9yIiwiX3Jlc2V0IiwiX3VwZGF0ZURhdGFTaXplIiwiX21heERhdGFTaXplRXhjZWVkZWQiLCJfYnVmZmVyZWRFdmVudHMiLCJkZWxheWVkU3RyZWFtIiwicmVhbEVtaXQiLCJfaGFuZGxlRW1pdCIsInNldEVuY29kaW5nIiwiX2NoZWNrSWZNYXhEYXRhU2l6ZUV4Y2VlZGVkIiwiZXh0ZW5zaW9ucyIsInR5cGVzIiwicHJlZmVyZW5jZSIsImRiIiwiZXh0bmFtZSIsIkVYVFJBQ1RfVFlQRV9SRUdFWFAiLCJURVhUX1RZUEVfUkVHRVhQIiwiY2hhcnNldCIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInNlcmlhbCIsInNlcmlhbE9yZGVyZWQiLCJyZWN1cnNpdmUiLCJmaWxlIiwiY3JlYXRlUmVhZFN0cmVhbSIsImZpbGVQYXRoIiwibmV3U3RyaW5nIiwibGFzdEluZGV4T2ZEaXJlY3RvcnkiLCJuZXdMYXN0SW5kZXgiLCJwYXRoR2FyYmFnZSIsInJlcXVlc3RCb2R5IiwicGluYXRhQ29udGVudCIsIm5ld1VybCIsImZpcnN0RmlsdGVyQXBwbGllZCIsImFkZEZpbHRlciIsIm5ld0ZpbHRlciIsImlwZnNfcGluX2hhc2giLCJhdXRoZW50aWNhdGVkIiwiYmFzZUVuZHBvaW50IiwidmFsaWRhdGVBbmRSZXR1cm5EYXRlIiwiZGF0ZVRvVmFsaWRhdGUiLCJkYXRlUGFyc2VkIiwiZmlsdGVyUXVlcnkiLCJtZXRhZGF0YVF1ZXJ5IiwiaGFzaENvbnRhaW5zIiwicGluU3RhcnQiLCJwaW5FbmQiLCJ1bnBpblN0YXJ0IiwidW5waW5FbmQiLCJwaW5TaXplTWluIiwicGluU2l6ZU1heCIsInBhZ2VMaW1pdCIsInBhZ2VPZmZzZXQiLCJwcnVuZWRLZXlWYWx1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QUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLElBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxL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ZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsWUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsYUFBZSxNQUNmLGFBQWUsTUFDZixhQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixhQUFjLE1BQ2QsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixhQUFjLE1BQ2QsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixjQUFlLE1BQ2YsY0FBZSxNQUNmLGNBQWUsTUFDZixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixlQUFnQixNQUNoQixjQUFlLE1BQ2YsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZUFBZ0IsTUFDaEIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixLQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGdCQUFpQixNQUNqQixnQkFBaUIsTUFDakIsZ0JBQWlCLE1BQ2pCLGlCQUFrQixNQUNsQixpQkFBa0IsTUFDbEIsaUJBQWtCLE1BQ2xCLGlCQUFrQixRQUdwQjNnQyxFQUFRb3VCLE1BQVFqdEIsT0FBT3cvQixPQUFPLENBQzVCMHhCLEVBQUssV0FHTCxHQUFNLE9BQ04sR0FBTSxXQUNOLEdBQU0sV0FDTixHQUFNLGVBQ04sR0FBTSxXQUNOLEdBQU0sV0FDTixHQUFNLFdBQ04sR0FBTSxXQUNOLEdBQU0sWUFDTixHQUFNLFlBQ04sR0FBTSxhQUNOLEdBQU0sYUFDTixHQUFNLGFBQ04sR0FBTSxhQUVOLEdBQU0sY0FDTixHQUFNLGFBR04sTUFBUSxZQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsWUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsYUFDUixNQUFRLGFBQ1IsTUFBUSxhQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBR1IsTUFBUSxhQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGFBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGNBQ1IsTUFBUSxjQUNSLE1BQVEsY0FDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxjQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxlQUNSLE1BQVEsZUFDUixNQUFRLGVBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixLQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGdCQUNSLE1BQVEsZ0JBQ1IsTUFBUSxnQkFDUixNQUFRLGlCQUNSLE1BQVEsaUJBQ1IsTUFBUSxpQkFDUixNQUFRLG1CQUdWcnlELEVBQVFxdUIsZUFBaUJsdEIsT0FBT3cvQixPQUFPLENBQ3JDLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUVOLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsRUFDUixNQUFRLEVBQ1IsTUFBUSxFQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixLQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsR0FDUixNQUFRLEdBQ1IsTUFBUSxHQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLElBQ1IsTUFBUSxJQUNSLE1BQVEsSUFDUixNQUFRLE8sY0NuZ0NWMWdDLEVBQU9ELFFBT1AsU0FBU3diLEVBQU84bkIsRUFBS3BnQyxFQUFLNk8sR0FDeEI3TyxFQUFNQSxHQUFPLEdBRWIsSUFBSW92RCxFQURKdmdELEVBQVNBLEdBQVUsRUFHbkIsS0FBTXV4QixHQUFPaXZCLEdBQ1hydkQsRUFBSTZPLEtBQW1CLElBQU51eEIsRUFYWCxJQVlOQSxHQUFPLElBRVQsTUFaVyxJQVlMQSxHQUNKcGdDLEVBQUk2TyxLQUFtQixJQUFOdXhCLEVBZlgsSUFnQk5BLEtBQVMsRUFNWCxPQUpBcGdDLEVBQUk2TyxHQUFnQixFQUFOdXhCLEVBRWQ5bkIsRUFBTytPLE1BQVF4WSxFQUFTdWdELEVBQVksRUFFN0JwdkQsR0F0QlQsSUFHSXF2RCxFQUFNOXRELEtBQUs2a0IsSUFBSSxFQUFHLEssY0NMdEJycEIsRUFBT0QsUUFLUCxTQUFTa3JELEVBQUt0OEIsRUFBSzdjLEdBQ2pCLElBSUk1SSxFQUpBZ0UsRUFBUyxFQUVUcThDLEVBQVMsRUFDVC9pQyxFQUZBMVUsRUFBU0EsR0FBVSxFQUluQnJSLEVBQUlrdUIsRUFBSTFuQixPQUVaLEVBQUcsQ0FDRCxHQUFJdWYsR0FBVy9sQixFQUViLE1BREF3cUQsRUFBSzNnQyxNQUFRLEVBQ1AsSUFBSXpiLFdBQVcsMkJBRXZCM0YsRUFBSXlsQixFQUFJbkksS0FDUnRaLEdBQU9xOEMsRUFBUSxJQWhCUixJQWlCRnJnRCxJQUFhcWdELEdBakJYLElBa0JGcmdELEdBQVkxRSxLQUFLNmtCLElBQUksRUFBR2tnQyxHQUM3QkEsR0FBUyxRQUNGcmdELEdBckJELEtBeUJSLE9BRkEraEQsRUFBSzNnQyxNQUFROUQsRUFBVTFVLEVBRWhCNUUsSSxjQzFCVCxJQUFJcWxELEVBQUsvdEQsS0FBSzZrQixJQUFJLEVBQUksR0FDbEJtcEMsRUFBS2h1RCxLQUFLNmtCLElBQUksRUFBRyxJQUNqQm9wQyxFQUFLanVELEtBQUs2a0IsSUFBSSxFQUFHLElBQ2pCcXBDLEVBQUtsdUQsS0FBSzZrQixJQUFJLEVBQUcsSUFDakJzcEMsRUFBS251RCxLQUFLNmtCLElBQUksRUFBRyxJQUNqQnVwQyxFQUFLcHVELEtBQUs2a0IsSUFBSSxFQUFHLElBQ2pCd3BDLEVBQUtydUQsS0FBSzZrQixJQUFJLEVBQUcsSUFDakJ5cEMsRUFBS3R1RCxLQUFLNmtCLElBQUksRUFBRyxJQUNqQjBwQyxFQUFLdnVELEtBQUs2a0IsSUFBSSxFQUFHLElBRXJCcnBCLEVBQU9ELFFBQVUsU0FBVTBCLEdBQ3pCLE9BQ0VBLEVBQVE4d0QsRUFBSyxFQUNiOXdELEVBQVErd0QsRUFBSyxFQUNiL3dELEVBQVFneEQsRUFBSyxFQUNiaHhELEVBQVFpeEQsRUFBSyxFQUNianhELEVBQVFreEQsRUFBSyxFQUNibHhELEVBQVFteEQsRUFBSyxFQUNibnhELEVBQVFveEQsRUFBSyxFQUNicHhELEVBQVFxeEQsRUFBSyxFQUNicnhELEVBQVFzeEQsRUFBSyxFQUNBLEssNkJDcEJqQixNQUFNbDlDLEVBQU8sRUFBUSxLQUNmbTlDLEVBQVEsRUFBUSxLQUNoQkMsRUFBUyxFQUFRLEtBQ2pCQyxFQUFTLEVBQVEsS0FDakIzRixFQUFTLEVBQVEsS0FHakJqdEIsRUFBWSxDQUNoQixDQUFDLFFBQVMsSUFBSyxHQUFJLEtBQ25CLENBQUMsUUFBUyxJQUFLMHlCLEVBQU8sTUFDdEIsQ0FBQyxRQUFTLElBQUtBLEVBQU8sWUFDdEIsQ0FBQyxTQUFVLElBQUtBLEVBQU8sY0FDdkIsQ0FBQyxTQUFVLElBQUtDLEVBQVEsb0JBQ3hCLENBQUMsU0FBVSxJQUFLQyxFQUFRLG9DQUN4QixDQUFDLFlBQWEsSUFBS0EsRUFBUSxxQ0FDM0IsQ0FBQyxZQUFhLElBQUtBLEVBQVEsb0NBQzNCLENBQUMsZUFBZ0IsSUFBS0EsRUFBUSxxQ0FDOUIsQ0FBQyxVQUFXLElBQUtBLEVBQVEsb0NBQ3pCLENBQUMsZUFBZ0IsSUFBS0YsRUFBTyw4REFDN0IsQ0FBQyxZQUFhLElBQUtBLEVBQU8sOERBQzFCLENBQUMsU0FBVSxJQUFLekYsRUFBUSxvRUFDeEIsQ0FBQyxZQUFhLElBQUtBLEVBQVEscUVBQzNCLENBQUMsWUFBYSxJQUFLQSxFQUFRLG9FQUMzQixDQUFDLGVBQWdCLElBQUtBLEVBQVEsc0VBRzFCci9CLEVBQVFvUyxFQUFVbndCLE9BQU8sQ0FBQzZsQixFQUFNbTlCLEtBQ3BDbjlCLEVBQUttOUIsRUFBTyxJQUFNLElBQUl0OUMsRUFBS3M5QyxFQUFPLEdBQUlBLEVBQU8sR0FBSUEsRUFBTyxHQUFJQSxFQUFPLElBQzVEbjlCLEdBQ04sSUFFRzdILEVBQVFtUyxFQUFVbndCLE9BQU8sQ0FBQzZsQixFQUFNbTlCLEtBQ3BDbjlCLEVBQUttOUIsRUFBTyxJQUFNamxDLEVBQU1pbEMsRUFBTyxJQUN4Qm45QixHQUNOLElBRUhoMkIsRUFBT0QsUUFBVSxDQUNmbXVCLE1BQU9BLEVBQ1BDLE1BQU9BLEksNkJDZlRudUIsRUFBT0QsUUF2QlAsTUFDRSxZQUFhZ0IsRUFBTTZzQixFQUFNd2xDLEVBQWdCQyxHQUN2Q2p6RCxLQUFLVyxLQUFPQSxFQUNaWCxLQUFLd3RCLEtBQU9BLEVBQ1p4dEIsS0FBS2l6RCxTQUFXQSxFQUNaRCxHQUFrQkMsSUFDcEJqekQsS0FBS2t6RCxPQUFTRixFQUFlQyxJQUlqQyxPQUFRRSxHQUNOLE9BQU9uekQsS0FBS2t6RCxPQUFPLzNDLE9BQU9nNEMsR0FHNUIsT0FBUUEsR0FDTixPQUFPbnpELEtBQUtrekQsT0FBTzkzQyxPQUFPKzNDLEdBRzVCLGdCQUNFLE9BQU9uekQsS0FBS2t6RCxVLDZCQ25CaEJ0ekQsRUFBT0QsUUFBVSxTQUFpQnN6RCxHQUNoQyxNQUFPLENBQ0w5M0MsT0FBUXNCLEdBQ2UsaUJBQVZBLEVBQ0ZTLE9BQU9wRyxLQUFLMkYsR0FBTzFWLFNBQVMsT0FFOUIwVixFQUFNMVYsU0FBUyxPQUV4QixPQUFRMFYsR0FDTixJQUFLLElBQUkyMkMsS0FBUTMyQyxFQUNmLEdBQUl3MkMsRUFBU3ovQyxRQUFRNC9DLEdBQVEsRUFDM0IsTUFBTSxJQUFJM29ELE1BQU0sNEJBR3BCLE9BQU95UyxPQUFPcEcsS0FBSzJGLEVBQU8sVyw2QkNTaEMsU0FBU3RCLEVBQVF6VCxFQUFRdXJELEdBQ3ZCLElBQUlwc0QsRUFBU2EsRUFBTzJPLFdBQ2hCbVUsRUFBTyxJQUFJOWIsV0FBV2hILEdBQ3RCMnJELEVBQVVKLEVBQVN6L0MsUUFBUSxPQUFTeS9DLEVBQVNwc0QsT0FBUyxFQUV0RHdzRCxJQUNGSixFQUFXQSxFQUFTMzRCLFVBQVUsRUFBRzI0QixFQUFTcHNELE9BQVMsSUFHckQsSUFBSXlzRCxFQUFPLEVBQ1BqeUQsRUFBUSxFQUNSb21DLEVBQVMsR0FFYixJQUFLLElBQUlybkMsRUFBSSxFQUFHQSxFQUFJeUcsRUFBUXpHLElBSTFCLElBSEFpQixFQUFTQSxHQUFTLEVBQUttcEIsRUFBS3BxQixHQUM1Qmt6RCxHQUFRLEVBRURBLEdBQVEsR0FDYjdyQixHQUFVd3JCLEVBQVU1eEQsSUFBV2l5RCxFQUFPLEVBQU0sSUFDNUNBLEdBQVEsRUFRWixHQUpJQSxFQUFPLElBQ1Q3ckIsR0FBVXdyQixFQUFVNXhELEdBQVUsRUFBSWl5RCxFQUFTLEtBR3pDRCxFQUNGLEtBQVE1ckIsRUFBTzVnQyxPQUFTLEdBQU8sR0FDN0I0Z0MsR0FBVSxJQUlkLE9BQU9BLEVBR1Q3bkMsRUFBT0QsUUFBVSxTQUFpQnN6RCxHQUNoQyxNQUFPLENBQ0w5M0MsT0FBUXNCLEdBRUd0QixFQURZLGlCQUFWc0IsRUFDS1MsT0FBT3BHLEtBQUsyRixHQUdkQSxFQUhzQncyQyxHQUt0QyxPQUFReDJDLEdBQ04sSUFBSyxJQUFJMjJDLEtBQVEzMkMsRUFDZixHQUFJdzJDLEVBQVN6L0MsUUFBUTQvQyxHQUFRLEVBQzNCLE1BQU0sSUFBSTNvRCxNQUFNLDRCQUlwQixPQTNFTixTQUFpQmdTLEVBQU93MkMsR0FFdEIsSUFBSXBzRCxHQURKNFYsRUFBUUEsRUFBTWhXLFFBQVEsSUFBSXFVLE9BQU8sSUFBSyxLQUFNLEtBQ3pCalUsT0FFZnlzRCxFQUFPLEVBQ1BqeUQsRUFBUSxFQUVSMEwsRUFBUSxFQUNSMDZCLEVBQVMsSUFBSS80QixXQUFxQixFQUFUN0gsRUFBYSxFQUFLLEdBRS9DLElBQUssSUFBSXpHLEVBQUksRUFBR0EsRUFBSXlHLEVBQVF6RyxJQUMxQmlCLEVBQVNBLEdBQVMsRUFBSzR4RCxFQUFTei9DLFFBQVFpSixFQUFNcmMsSUFDOUNrekQsR0FBUSxFQUVKQSxHQUFRLElBQ1Y3ckIsRUFBTzE2QixLQUFZMUwsSUFBV2l5RCxFQUFPLEVBQU0sSUFDM0NBLEdBQVEsR0FJWixPQUFPN3JCLEVBQU8vL0IsT0F1REgwVCxDQUFPcUIsRUFBT3cyQyxPLDZCQzNFM0JyekQsRUFBT0QsUUFBVSxTQUFpQnN6RCxHQU1oQyxNQUFNSSxFQUFVSixFQUFTei9DLFFBQVEsTUFBUSxFQUNuQzRKLEVBQU02MUMsRUFBU3ovQyxRQUFRLE1BQVEsR0FBS3kvQyxFQUFTei9DLFFBQVEsTUFBUSxFQUVuRSxNQUFPLENBQ0wsT0FBUWlKLEdBQ04sSUFBSWdyQixFQUFTLEdBR1hBLEVBRG1CLGlCQUFWaHJCLEVBQ0FTLE9BQU9wRyxLQUFLMkYsR0FBTzFWLFNBQVMsVUFFNUIwVixFQUFNMVYsU0FBUyxVQUd0QnFXLElBQ0ZxcUIsRUFBU0EsRUFBT2hoQyxRQUFRLE1BQU8sS0FBS0EsUUFBUSxNQUFPLE1BR3JELE1BQU04c0QsRUFBTTlyQixFQUFPajBCLFFBQVEsS0FLM0IsT0FKSSsvQyxFQUFNLElBQU1GLElBQ2Q1ckIsRUFBU0EsRUFBT25OLFVBQVUsRUFBR2k1QixJQUd4QjlyQixHQUVULE9BQVFockIsR0FDTixJQUFLLElBQUkyMkMsS0FBUTMyQyxFQUNmLEdBQUl3MkMsRUFBU3ovQyxRQUFRNC9DLEdBQVEsRUFDM0IsTUFBTSxJQUFJM29ELE1BQU0sNEJBSXBCLE9BQU95UyxPQUFPcEcsS0FBSzJGLEVBQU8sYyw2QkNyQ2hDLE1BQU0rMkMsRUFBVSxFQUFRLEtBQ2xCOTRCLEVBQVksRUFBUSxLQUNwQnpNLEVBQVMsRUFBUSxJQTZCdkIsU0FBU3dsQyxFQUFzQnhxRCxHQUM3QixNQUFNMDRCLEVBQVMsR0FDVGhKLEVBQVExdkIsRUFBSXRELE1BQU0sS0FBS3NFLE1BQU0sR0FDbkMsR0FBcUIsSUFBakIwdUIsRUFBTTl4QixRQUE2QixLQUFiOHhCLEVBQU0sR0FDOUIsTUFBTyxHQUdULElBQUssSUFBSXoyQixFQUFJLEVBQUdBLEVBQUl5MkIsRUFBTTl4QixPQUFRM0UsSUFBSyxDQUNyQyxNQUFNcWtELEVBQU81dEIsRUFBTXoyQixHQUNiNlEsRUFBUTJuQixFQUFVNnJCLEdBRXhCLEdBQW1CLElBQWZ4ekMsRUFBTWljLEtBQVYsQ0FNQSxHQURBOXNCLElBQ0lBLEdBQUt5MkIsRUFBTTl4QixPQUNiLE1BQU02c0QsRUFBVyxvQkFBc0J6cUQsR0FJekMsR0FBSThKLEVBQU1tTCxLQUFNLENBQ2R5akIsRUFBTzMwQixLQUFLLENBQ1Z1NUMsRUFJQW9OLEVBQVVoN0IsRUFBTTF1QixNQUFNL0gsR0FBRzhELEtBQUssUUFFaEMsTUFHRjI3QixFQUFPMzBCLEtBQUssQ0FBQ3U1QyxFQUFNNXRCLEVBQU16MkIsVUFyQnZCeS9CLEVBQU8zMEIsS0FBSyxDQUFDdTVDLElBd0JqQixPQUFPNWtCLEVBSVQsU0FBU2l5QixFQUFzQmp5QixHQUM3QixNQUFNaEosRUFBUSxHQVNkLE9BUkFnSixFQUFPL3RCLElBQUlpZ0QsSUFDVCxNQUFNOWdELEVBQVErZ0QsRUFBZUQsR0FDN0JsN0IsRUFBTTNyQixLQUFLK0YsRUFBTXBTLE1BQ2JrekQsRUFBSWh0RCxPQUFTLEdBQ2Y4eEIsRUFBTTNyQixLQUFLNm1ELEVBQUksTUFJWkYsRUFBVWg3QixFQUFNM3lCLEtBQUssTUFJOUIsU0FBUyt0RCxFQUFzQnB5QixHQUM3QixPQUFPQSxFQUFPL3RCLElBQUlpZ0QsSUFDWHhvRCxNQUFNckUsUUFBUTZzRCxLQUNqQkEsRUFBTSxDQUFDQSxJQUVULE1BQU05Z0QsRUFBUStnRCxFQUFlRCxHQUM3QixPQUFJQSxFQUFJaHRELE9BQVMsRUFDUixDQUFDa00sRUFBTXlhLEtBQU1nbUMsRUFBUVEsU0FBU2poRCxFQUFNeWEsS0FBTXFtQyxFQUFJLEtBRWhELENBQUM5Z0QsRUFBTXlhLFFBS2xCLFNBQVNzVSxFQUFzQkgsR0FDN0IsT0FBT0EsRUFBTy90QixJQUFJaWdELElBQ2hCLE1BQU05Z0QsRUFBUStnRCxFQUFlRCxHQUM3QixPQUFJQSxFQUFJaHRELE9BQVMsRUFDUixDQUFDa00sRUFBTXlhLEtBQU1nbUMsRUFBUXpzRCxTQUFTZ00sRUFBTXlhLEtBQU1xbUMsRUFBSSxLQUVoRCxDQUFDOWdELEVBQU15YSxRQUtsQixTQUFTMFUsRUFBZ0JQLEdBQ3ZCLE9BQU9iLEVBQVc1akIsT0FBT3pHLE9BQU9rckIsRUFBTy90QixJQUFJaWdELElBQ3pDLE1BQU05Z0QsRUFBUStnRCxFQUFlRCxHQUM3QixJQUFJdGxDLEVBQU1yUixPQUFPcEcsS0FBS21YLEVBQU85UyxPQUFPcEksRUFBTXlhLE9BTTFDLE9BSklxbUMsRUFBSWh0RCxPQUFTLElBQ2YwbkIsRUFBTXJSLE9BQU96RyxPQUFPLENBQUM4WCxFQUFLc2xDLEVBQUksTUFHekJ0bEMsTUFJWCxTQUFTa1QsRUFBYXYvQixFQUFHMitCLEdBQ3ZCLEdBQUkzK0IsRUFBRThzQixLQUFPLEVBQ1gsT0FBTzlzQixFQUFFOHNCLEtBQU8sRUFDWCxHQUFlLElBQVg5c0IsRUFBRThzQixLQUNYLE9BQU8sRUFHUCxPQURhZixFQUFPN1MsT0FBT3lsQixHQUNiNVMsRUFBTzdTLE9BQU84TyxNQUtoQyxTQUFTMFgsRUFBZ0JyVCxHQUN2QixNQUFNb1QsRUFBUyxHQUNmLElBQUl2aEMsRUFBSSxFQUNSLEtBQU9BLEVBQUltdUIsRUFBSTFuQixRQUFRLENBQ3JCLE1BQU0ybUIsRUFBT1MsRUFBTzdTLE9BQU9tVCxFQUFLbnVCLEdBQzFCeUIsRUFBSW9zQixFQUFPN1MsT0FBTzhPLE1BSWxCOEUsRUFBT3lTLEVBRkgvRyxFQUFVbE4sR0FFUWUsRUFBSXRrQixNQUFNN0osRUFBSXlCLElBRTFDLEdBQWEsSUFBVG10QixFQUFZLENBQ2QyUyxFQUFPMzBCLEtBQUssQ0FBQ3dnQixJQUNicHRCLEdBQUt5QixFQUNMLFNBR0YsTUFBTWcvQixFQUFPdFMsRUFBSXRrQixNQUFNN0osRUFBSXlCLEVBQUd6QixFQUFJeUIsRUFBSW10QixHQUl0QyxHQUZBNXVCLEdBQU00dUIsRUFBT250QixFQUVUekIsRUFBSW11QixFQUFJMW5CLE9BQ1YsTUFBTTZzRCxFQUFXLDJCQUE2Qm5sQyxFQUFJeG5CLFNBQVMsUUFJN0Q0NkIsRUFBTzMwQixLQUFLLENBQUN3Z0IsRUFBTXFULElBR3JCLE9BQU9jLEVBV1QsU0FBU3N5QixFQUFnQmhyRCxHQUt2QixPQUFPaTVCLEVBRkc2eEIsRUFEQU4sRUFEVnhxRCxFQUFNMHFELEVBQVUxcUQsTUFhbEIsU0FBUzYzQixFQUFZdlMsR0FDbkIsTUFBTThDLEVBQU02aUMsRUFBZTNsQyxHQUMzQixHQUFJOEMsRUFBSyxNQUFNQSxFQUNmLE9BQU9uVSxPQUFPcEcsS0FBS3lYLEdBR3JCLFNBQVMybEMsRUFBZ0IzbEMsR0FDdkIsSUFDRXFULEVBQWVyVCxHQUNmLE1BQU84QyxHQUNQLE9BQU9BLEdBUVgsU0FBU3NpQyxFQUFXMXFELEdBQ2xCLE1BQU8sSUFBTUEsRUFBSUQsT0FBT3JELE1BQU0sS0FBS3lOLE9BQU92TyxHQUFLQSxHQUFHbUIsS0FBSyxLQUd6RCxTQUFTMHRELEVBQVl6cUQsR0FDbkIsT0FBTyxJQUFJd0IsTUFBTSwwQkFBNEJ4QixHQUcvQyxTQUFTNnFELEVBQWdCRCxHQUV2QixPQURjbjVCLEVBQVVtNUIsRUFBSSxJQW5OOUJqMEQsRUFBT0QsUUFBVSxDQUNmOHpELHFCQUFzQkEsRUFDdEJHLHFCQUFzQkEsRUFFdEI5eEIscUJBQXNCQSxFQUN0Qml5QixxQkFBc0JBLEVBRXRCbnlCLGVBQWdCQSxFQUNoQk0sZUFBZ0JBLEVBRWhCaEIsZUF5SkYsU0FBeUIzUyxHQUd2QixPQUFPcWxDLEVBREc5eEIsRUFEQUYsRUFBZXJULE1Bekp6QjBsQyxlQUFnQkEsRUFFaEJsekIsV0FzS0YsU0FBcUI5M0IsR0FDbkIsT0FBT2dyRCxFQUFlaHJELElBdEt0QjYzQixXQUFZQSxFQUNab3pCLGVBQWdCQSxFQUNoQkMsY0FzTEYsU0FBd0I1bEMsR0FDdEIsWUFBK0I1cUIsSUFBeEJ1d0QsRUFBZTNsQyxJQXRMdEJvbEMsVUFBV0EsRUFFWEQsV0FBWUEsRUFDWkksZUFBZ0JBLEVBRWhCcnlCLFlBQWFBLEksNkJDM0JmLE1BQU1tQixFQUFLLEVBQVEsS0FDYnd4QixFQUFPLEVBQVEsS0FDZjE1QixFQUFZLEVBQVEsS0FDcEI5TSxFQUFPLEVBQVEsSUFDZjFSLEVBQU0sRUFBUSxLQUNkNDJDLEVBQVMsRUFBUSxLQUNqQjdrQyxFQUFTLEVBQVEsSUFLdkIsU0FBU29tQyxFQUFTdGhELEVBQU9sTyxHQUN2QixPQUFJQSxhQUFhcVksT0FDUm0zQyxFQUFRdHRELFNBQVNnTSxFQUFPbE8sR0FFeEJ3dkQsRUFBUUwsU0FBU2poRCxFQUFPbE8sR0FtRW5DLFNBQVN5dkQsRUFBUUMsR0FDZixJQUFLSCxFQUFLRyxHQUNSLE1BQU0sSUFBSTlwRCxNQUFNLHNCQUVsQixPQUFPbTRCLEVBQUdveEIsU0FBU08sR0FXckIsU0FBU0MsRUFBVS91QyxHQUNqQixNQUFNOEksRUFBTXJSLE9BQU9raUIsTUFBTSxHQUV6QixPQURBN1EsRUFBSWttQyxjQUFjaHZDLEVBQU0sR0FDakI4SSxFQUdULFNBQVNtbUMsRUFBVW5tQyxHQUNqQixPQUFPQSxFQUFJb21DLGFBQWEsR0E0RTFCLFNBQVNDLEVBQVdybUMsR0FDbEIsTUFBTXNtQyxFQUFZdG1DLEVBQUl0a0IsTUFBTSxFQUFHc2tCLEVBQUkxbkIsT0FBUyxHQUN0Q2l1RCxFQUFZdm1DLEVBQUl0a0IsTUFBTXNrQixFQUFJMW5CLE9BQVMsR0FHekMsT0FGYWlzRCxFQUFPMzNDLE9BQU8wNUMsR0FBV2p1RCxjQUV4QixJQUREOHRELEVBQVNJLEdBaEx4QmwxRCxFQUFPRCxRQUFVMDBELEVBV2pCQSxFQUFRdHRELFNBQVcsU0FBMEJnTSxFQUFPd2IsR0FFbEQsUUFEQXhiLEVBQVEybkIsRUFBVTNuQixJQUNKeWEsTUFDWixLQUFLLEVBQ0wsS0FBSyxHQUNILE9BaUVOLFNBQWlCdW5DLEdBQ2YsTUFBTVIsRUFBVzN4QixFQUFHNzdCLFNBQVNndUQsR0FDN0IsSUFBS1gsRUFBS0csR0FDUixNQUFNLElBQUk5cEQsTUFBTSxzQkFFbEIsT0FBTzhwRCxFQXRFSVMsQ0FBT3ptQyxHQUVoQixLQUFLLEVBQ0wsS0FBSyxJQUNMLEtBQUssR0FDTCxLQUFLLElBQ0gsT0FBT21tQyxFQUFTbm1DLEdBRWxCLEtBQUssR0FDTCxLQUFLLEdBQ0wsS0FBSyxHQUNMLEtBQUssR0FDTCxLQUFLLElBQ0gsT0E0RU4sU0FBa0JBLEdBQ2hCLE1BQU1TLEVBQU9mLEVBQU83UyxPQUFPbVQsR0FHM0IsSUFGQUEsRUFBTUEsRUFBSXRrQixNQUFNZ2tCLEVBQU83UyxPQUFPOE8sUUFFdEJyakIsU0FBV21vQixFQUNqQixNQUFNLElBQUl2a0IsTUFBTSx3QkFHbEIsT0FBTzhqQixFQUFJeG5CLFdBcEZBa3VELENBQVExbUMsR0FFakIsS0FBSyxJQUNILE9BMkZOLFNBQWlCQSxHQUNmLE1BQU1TLEVBQU9mLEVBQU83UyxPQUFPbVQsR0FDckJtVSxFQUFVblUsRUFBSXRrQixNQUFNZ2tCLEVBQU83UyxPQUFPOE8sT0FFeEMsR0FBSXdZLEVBQVE3N0IsU0FBV21vQixFQUNyQixNQUFNLElBQUl2a0IsTUFBTSx3QkFHbEIsT0FBT21qQixFQUFLelMsT0FBT3VuQixHQW5HUnd5QixDQUFPM21DLEdBQ2hCLEtBQUssSUFFTCxLQUFLLElBQ0gsT0FBT3FtQyxFQUFVcm1DLEdBQ25CLFFBQ0UsT0FBT0EsRUFBSXhuQixTQUFTLFNBSTFCc3RELEVBQVFMLFNBQVcsU0FBMEJqaEQsRUFBTzlKLEdBRWxELFFBREE4SixFQUFRMm5CLEVBQVUzbkIsSUFDSnlhLE1BQ1osS0FBSyxFQUVMLEtBQUssR0FDSCxPQUFPOG1DLEVBQU9yckQsR0FFaEIsS0FBSyxFQUNMLEtBQUssSUFDTCxLQUFLLEdBQ0wsS0FBSyxJQUNILE9BQU91ckQsRUFBUzFrQyxTQUFTN21CLEVBQUssS0FFaEMsS0FBSyxHQUNMLEtBQUssR0FDTCxLQUFLLEdBQ0wsS0FBSyxHQUNMLEtBQUssSUFDSCxPQXNDTixTQUFrQkEsR0FDaEIsTUFBTXNsQixFQUFNclIsT0FBT3BHLEtBQUs3TixHQUNsQitsQixFQUFPOVIsT0FBT3BHLEtBQUttWCxFQUFPOVMsT0FBT29ULEVBQUkxbkIsU0FDM0MsT0FBT3FXLE9BQU96RyxPQUFPLENBQUN1WSxFQUFNVCxJQXpDakI0bUMsQ0FBUWxzRCxHQUVqQixLQUFLLElBQ0gsT0FvRE4sU0FBaUJzVCxHQUVmLE1BQU0rUyxFQUFLLElBQUlwVCxFQUFJSyxHQUFNVCxVQUNuQmtULEVBQU85UixPQUFPcEcsS0FBS21YLEVBQU85UyxPQUFPbVUsRUFBR3pvQixTQUMxQyxPQUFPcVcsT0FBT3pHLE9BQU8sQ0FBQ3VZLEVBQU1NLElBeERqQjhsQyxDQUFPbnNELEdBQ2hCLEtBQUssSUFDSCxPQW9FTixTQUFvQkEsR0FDbEIsTUFBTTQzQixFQUFPNTNCLEVBQUl0RCxNQUFNLEtBQ3ZCLEdBQW9CLElBQWhCazdCLEVBQUtoNkIsT0FDUCxNQUFNLElBQUk0RCxNQUFNLCtCQUFpQ28yQixFQUFPLG1DQUUxRCxHQUF1QixLQUFuQkEsRUFBSyxHQUFHaDZCLE9BQ1YsTUFBTSxJQUFJNEQsTUFBTSwrQkFBaUNvMkIsRUFBSyxHQUFLLDZCQUU3RCxNQUFNdFMsRUFBTXJSLE9BQU9wRyxLQUFLZzhDLEVBQU8xM0MsT0FBT2k2QyxRQUFReDBCLEVBQUssR0FBR3dvQixnQkFHaEQ1akMsRUFBT3FLLFNBQVMrUSxFQUFLLEdBQUksSUFDL0IsR0FBSXBiLEVBQU8sR0FBS0EsRUFBTyxNQUNyQixNQUFNLElBQUloYixNQUFNLHlDQUVsQixNQUFNNnFELEVBQVVkLEVBQVMvdUMsR0FDekIsT0FBT3ZJLE9BQU96RyxPQUFPLENBQUM4WCxFQUFLK21DLElBcEZoQkMsQ0FBVXRzRCxHQUNuQixLQUFLLElBQ0gsT0FxRk4sU0FBcUJBLEdBQ25CLE1BQU00M0IsRUFBTzUzQixFQUFJdEQsTUFBTSxLQUN2QixHQUFvQixJQUFoQms3QixFQUFLaDZCLE9BQ1AsTUFBTSxJQUFJNEQsTUFBTSwrQkFBaUNvMkIsRUFBTyxtQ0FFMUQsR0FBdUIsS0FBbkJBLEVBQUssR0FBR2g2QixPQUNWLE1BQU0sSUFBSTRELE1BQU0sK0JBQWlDbzJCLEVBQUssR0FBSyw4QkFFN0QsTUFBTXRTLEVBQU1yUixPQUFPcEcsS0FBS2c4QyxFQUFPMTNDLE9BQU9pNkMsUUFBUXgwQixFQUFLLEdBQUd3b0IsZ0JBR2hENWpDLEVBQU9xSyxTQUFTK1EsRUFBSyxHQUFJLElBQy9CLEdBQUlwYixFQUFPLEdBQUtBLEVBQU8sTUFDckIsTUFBTSxJQUFJaGIsTUFBTSx5Q0FFbEIsTUFBTTZxRCxFQUFVZCxFQUFTL3VDLEdBQ3pCLE9BQU92SSxPQUFPekcsT0FBTyxDQUFDOFgsRUFBSyttQyxJQXJHaEJFLENBQVd2c0QsR0FDcEIsUUFDRSxPQUFPaVUsT0FBT3BHLEtBQUs3TixFQUFLLFUsNkJDOUU5QixJQUFJMjVCLEVBQUtqakMsRUFDTHVkLEVBQVMsRUFBUSxLQUFVQSxPQUMzQnF5QyxFQUFLLEVBQVEsS0FFakIzc0IsRUFBR294QixTQUFXLFNBQVNweEIsRUFBSTZ5QixFQUFNL2pELEdBRy9CLElBQUloSixFQUVKLEdBSkFnSixJQUFXQSxFQUlQMVIsS0FBSzAxRCxXQUFXOXlCLEdBQ2xCbDZCLEVBQVMrc0QsR0FBUSxJQUFJdjRDLEVBQU94TCxFQUFTLEdBQ3JDa3hCLEVBQUdqOUIsTUFBTSxPQUFPaU8sS0FBSSxTQUFTK2hELEdBQzNCanRELEVBQU9nSixLQUFpQyxJQUFyQm9lLFNBQVM2bEMsRUFBTSxZQUUvQixHQUFJMzFELEtBQUs0MUQsV0FBV2h6QixHQUFLLENBQzlCLElBRUl4aUMsRUFGQXkxRCxFQUFXanpCLEVBQUdqOUIsTUFBTSxJQUFLLEdBRzdCLElBQUt2RixFQUFJLEVBQUdBLEVBQUl5MUQsRUFBU2h2RCxPQUFRekcsSUFBSyxDQUNwQyxJQUNJMDFELEVBRE85MUQsS0FBSzAxRCxXQUFXRyxFQUFTejFELE1BSWxDMDFELEVBQVc5MUQsS0FBS2cwRCxTQUFTNkIsRUFBU3oxRCxJQUNsQ3kxRCxFQUFTejFELEdBQUswMUQsRUFBUzdyRCxNQUFNLEVBQUcsR0FBR2xELFNBQVMsUUFHMUMrdUQsS0FBYzExRCxFQUFJLEdBQ3BCeTFELEVBQVNuL0IsT0FBT3QyQixFQUFHLEVBQUcwMUQsRUFBUzdyRCxNQUFNLEVBQUcsR0FBR2xELFNBQVMsUUFJeEQsR0FBb0IsS0FBaEI4dUQsRUFBUyxHQUNYLEtBQU9BLEVBQVNodkQsT0FBUyxHQUFHZ3ZELEVBQVN2NEIsUUFBUSxVQUN4QyxHQUFzQyxLQUFsQ3U0QixFQUFTQSxFQUFTaHZELE9BQVMsR0FDcEMsS0FBT2d2RCxFQUFTaHZELE9BQVMsR0FBR2d2RCxFQUFTN29ELEtBQUssVUFDckMsR0FBSTZvRCxFQUFTaHZELE9BQVMsRUFBRyxDQUM5QixJQUFLekcsRUFBSSxFQUFHQSxFQUFJeTFELEVBQVNodkQsUUFBMEIsS0FBaEJndkQsRUFBU3oxRCxHQUFXQSxLQUN2RCxJQUFJd3dELEVBQU8sQ0FBRXh3RCxFQUFHLEdBQ2hCLElBQUtBLEVBQUksRUFBSXkxRCxFQUFTaHZELE9BQVF6RyxFQUFJLEVBQUdBLElBQ25Dd3dELEVBQUs1akQsS0FBSyxLQUVaNm9ELEVBQVNuL0IsT0FBTzFzQixNQUFNNnJELEVBQVVqRixHQUlsQyxJQURBbG9ELEVBQVMrc0QsR0FBUSxJQUFJdjRDLEVBQU94TCxFQUFTLElBQ2hDdFIsRUFBSSxFQUFHQSxFQUFJeTFELEVBQVNodkQsT0FBUXpHLElBQUssQ0FDcEMsSUFBSTIxRCxFQUFPam1DLFNBQVMrbEMsRUFBU3oxRCxHQUFJLElBQ2pDc0ksRUFBT2dKLEtBQWFxa0QsR0FBUSxFQUFLLElBQ2pDcnRELEVBQU9nSixLQUFtQixJQUFQcWtELEdBSXZCLElBQUtydEQsRUFDSCxNQUFNK0IsTUFBTSx1QkFBeUJtNEIsR0FHdkMsT0FBT2w2QixHQUdUazZCLEVBQUc3N0IsU0FBVyxTQUFTMHVELEVBQU0vakQsRUFBUTdLLEdBQ25DNkssSUFBV0EsRUFHWCxJQUFJaEosRUFBUyxHQUNiLEdBQWUsS0FIZjdCLEVBQVNBLEdBQVc0dUQsRUFBSzV1RCxPQUFTNkssR0FHaEIsQ0FFaEIsSUFBSyxJQUFJdFIsRUFBSSxFQUFHQSxFQUFJeUcsRUFBUXpHLElBQzFCc0ksRUFBT3NFLEtBQUt5b0QsRUFBSy9qRCxFQUFTdFIsSUFFNUJzSSxFQUFTQSxFQUFPMUMsS0FBSyxVQUNoQixHQUFlLEtBQVhhLEVBQWUsQ0FFeEIsSUFBU3pHLEVBQUksRUFBR0EsRUFBSXlHLEVBQVF6RyxHQUFLLEVBQy9Cc0ksRUFBT3NFLEtBQUt5b0QsRUFBS2QsYUFBYWpqRCxFQUFTdFIsR0FBRzJHLFNBQVMsS0FJckQyQixHQURBQSxHQURBQSxFQUFTQSxFQUFPMUMsS0FBSyxNQUNMUyxRQUFRLHFCQUFzQixXQUM5QkEsUUFBUSxTQUFVLE1BR3BDLE9BQU9pQyxHQUdULElBQUlzdEQsRUFBWSw0QkFDWkMsRUFDQSx5RUFTSixTQUFTQyxFQUFpQjMwQixHQUN4QixPQUFPQSxFQUFTQSxFQUFPMzZCLGNBQWdCLE9BUnpDZzhCLEVBQUc4eUIsV0FBYSxTQUFTOXlCLEdBQ3ZCLE9BQU9vekIsRUFBVXJ2RCxLQUFLaThCLElBR3hCQSxFQUFHZ3pCLFdBQWEsU0FBU2h6QixHQUN2QixPQUFPcXpCLEVBQVV0dkQsS0FBS2k4QixJQU14QkEsRUFBR3V6QixjQUFnQixTQUFTQyxFQUFXNzBCLEdBT3JDLElBQUk1c0IsRUFBTSxFQUNLLFVBTmI0c0IsRUFERTYwQixFQUFZLEdBQ0wsT0FFQUYsRUFBaUIzMEIsTUFLMUI1c0IsRUFBTSxJQUlSLElBRkEsSUFBSThnRCxFQUFPLElBQUl2NEMsRUFBT3ZJLEdBRWJ2VSxFQUFJLEVBQUd5QixFQUFJNHpELEVBQUs1dUQsT0FBUXpHLEVBQUl5QixJQUFLekIsRUFBRyxDQUMzQyxJQUFJa3pELEVBQU8sRUFDUDhDLEVBQVksSUFDZDlDLEVBQU84QyxHQUVUQSxHQUFhOUMsRUFFYm1DLEVBQUtyMUQsR0FBdUIsTUFBaEIsS0FBUWt6RCxHQUd0QixPQUFPMXdCLEVBQUc3N0IsU0FBUzB1RCxJQUdyQjd5QixFQUFHeXpCLEtBQU8sU0FBU3gxQixFQUFNdzFCLEdBQ3ZCeDFCLEVBQU8rQixFQUFHb3hCLFNBQVNuekIsR0FDbkJ3MUIsRUFBT3p6QixFQUFHb3hCLFNBQVNxQyxHQUVuQixJQUFJM3RELEVBQVMsSUFBSXdVLEVBQU85WSxLQUFLdVUsSUFBSWtvQixFQUFLaDZCLE9BQVF3dkQsRUFBS3h2RCxTQUUvQ3pHLEVBQUksRUFFUixHQUFJeWdDLEVBQUtoNkIsU0FBV3d2RCxFQUFLeHZELE9BQ3ZCLElBQUt6RyxFQUFJLEVBQUdBLEVBQUl5Z0MsRUFBS2g2QixPQUFRekcsSUFDM0JzSSxFQUFPdEksR0FBS3lnQyxFQUFLemdDLEdBQUtpMkQsRUFBS2oyRCxRQUV4QixHQUFvQixJQUFoQmkyRCxFQUFLeHZELE9BR2QsSUFBS3pHLEVBQUksRUFBR0EsRUFBSWkyRCxFQUFLeHZELE9BQVF6RyxJQUMzQnNJLEVBQU90SSxHQUFLeWdDLEVBQUtBLEVBQUtoNkIsT0FBUyxFQUFLekcsR0FBS2kyRCxFQUFLajJELE9BRTNDLENBRUwsSUFBU0EsRUFBSSxFQUFHQSxFQUFJc0ksRUFBTzdCLE9BQVMsRUFBR3pHLElBQ3JDc0ksRUFBT3RJLEdBQUssRUFNZCxJQUZBc0ksRUFBTyxJQUFNLElBQ2JBLEVBQU8sSUFBTSxJQUNSdEksRUFBSSxFQUFHQSxFQUFJeWdDLEVBQUtoNkIsT0FBUXpHLElBQzNCc0ksRUFBT3RJLEVBQUksSUFBTXlnQyxFQUFLemdDLEdBQUtpMkQsRUFBS2oyRCxFQUFJLElBRXRDQSxHQUFRLEdBRVYsS0FBT0EsRUFBSXNJLEVBQU83QixPQUFRekcsSUFDeEJzSSxFQUFPdEksR0FBSyxFQUVkLE9BQU93aUMsRUFBRzc3QixTQUFTMkIsSUFHckJrNkIsRUFBRzB6QixLQUFPLFNBQVNDLEdBQ2pCLElBQUlDLEVBQVlELEVBQVc1d0QsTUFBTSxLQUU3Qms3QixFQUFPMjFCLEVBQVUsR0FDckIsR0FBeUIsSUFBckJBLEVBQVUzdkQsT0FDWixNQUFNLElBQUk0RCxNQUFNLHdCQUEwQm8yQixHQUU1QyxJQUFJdzFCLEVBQU96ekIsRUFBR3V6QixjQUFjcm1DLFNBQVMwbUMsRUFBVSxHQUFJLEtBRW5ELE9BQU81ekIsRUFBR3l6QixLQUFLeDFCLEVBQU13MUIsSUFHdkJ6ekIsRUFBRzZ6QixPQUFTLFNBQVM1MUIsRUFBTXcxQixHQU96QixJQU5BLElBQUlLLEVBQWlCOXpCLEVBQUcrekIsT0FBTy96QixFQUFHeXpCLEtBQUt4MUIsRUFBTXcxQixJQUd6Q08sRUFBYWgwQixFQUFHb3hCLFNBQVNxQyxHQUN6QlEsRUFBYSxFQUVSejJELEVBQUksRUFBR0EsRUFBSXcyRCxFQUFXL3ZELE9BQVF6RyxJQUNyQyxHQUFzQixNQUFsQncyRCxFQUFXeDJELEdBQ2J5MkQsR0FBYyxPQUdkLElBREEsSUFBSUMsRUFBd0IsSUFBaEJGLEVBQVd4MkQsR0FDaEIwMkQsR0FDTEEsRUFBU0EsR0FBUyxFQUFLLElBQ3ZCRCxJQUtOLElBQUlFLEVBQW9CM3lELEtBQUs2a0IsSUFBSSxFQUFHLEdBQUs0dEMsR0FFekMsTUFBTyxDQUNMSCxlQUFnQjl6QixFQUFHbzBCLFNBQVNOLEdBQzVCTyxhQUFjRixHQUFxQixFQUNuQm4wQixFQUFHbzBCLFNBQVNOLEdBQ1o5ekIsRUFBR28wQixTQUFTTixFQUFpQixHQUM3Q1EsWUFBYUgsR0FBcUIsRUFDbEJuMEIsRUFBR28wQixTQUFTTixFQUFpQkssRUFBb0IsR0FDakRuMEIsRUFBR28wQixTQUFTTixFQUFpQkssRUFBb0IsR0FDakVJLGlCQUFrQnYwQixFQUFHbzBCLFNBQVNOLEVBQWlCSyxFQUFvQixHQUNuRUssV0FBWWYsRUFDWmdCLGlCQUFrQlIsRUFDbEJTLFNBQVVQLEdBQXFCLEVBQ25CQSxFQUFvQkEsRUFBb0IsRUFDcERsd0QsT0FBUWt3RCxFQUNSUSxTQUFVLFNBQVNobkMsR0FDakIsT0FBT21tQyxJQUFtQjl6QixFQUFHK3pCLE9BQU8vekIsRUFBR3l6QixLQUFLOWxDLEVBQU84bEMsT0FLekR6ekIsRUFBRzQwQixXQUFhLFNBQVNqQixHQUN2QixJQUFJQyxFQUFZRCxFQUFXNXdELE1BQU0sS0FFN0JrN0IsRUFBTzIxQixFQUFVLEdBQ3JCLEdBQXlCLElBQXJCQSxFQUFVM3ZELE9BQ1osTUFBTSxJQUFJNEQsTUFBTSx3QkFBMEJvMkIsR0FFNUMsSUFBSXcxQixFQUFPenpCLEVBQUd1ekIsY0FBY3JtQyxTQUFTMG1DLEVBQVUsR0FBSSxLQUVuRCxPQUFPNXpCLEVBQUc2ekIsT0FBTzUxQixFQUFNdzFCLElBR3pCenpCLEVBQUc2MEIsSUFBTSxTQUFTNTJCLEdBRWhCLElBREEsSUFBSTQwQixFQUFPN3lCLEVBQUdveEIsU0FBU256QixHQUNkemdDLEVBQUksRUFBR0EsRUFBSXExRCxFQUFLNXVELE9BQVF6RyxJQUMvQnExRCxFQUFLcjFELEdBQUssSUFBT3ExRCxFQUFLcjFELEdBRXhCLE9BQU93aUMsRUFBRzc3QixTQUFTMHVELElBR3JCN3lCLEVBQUc4MEIsR0FBSyxTQUFTN3lELEVBQUdpRSxHQUtsQixHQUpBakUsRUFBSSs5QixFQUFHb3hCLFNBQVNudkQsR0FDaEJpRSxFQUFJODVCLEVBQUdveEIsU0FBU2xyRCxHQUdaakUsRUFBRWdDLFNBQVdpQyxFQUFFakMsT0FBUSxDQUN6QixJQUFLLElBQUl6RyxFQUFJLEVBQUdBLEVBQUl5RSxFQUFFZ0MsU0FBVXpHLEVBQzlCeUUsRUFBRXpFLElBQU0wSSxFQUFFMUksR0FFWixPQUFPd2lDLEVBQUc3N0IsU0FBU2xDLEdBSW5CLElBQUk0d0QsRUFBTzV3RCxFQUNQMHJCLEVBQVF6bkIsRUFDUkEsRUFBRWpDLE9BQVNoQyxFQUFFZ0MsU0FDZjR1RCxFQUFPM3NELEVBQ1B5bkIsRUFBUTFyQixHQUdWLElBQUk2TSxFQUFTK2pELEVBQUs1dUQsT0FBUzBwQixFQUFNMXBCLE9BQ2pDLElBQVN6RyxFQUFJc1IsRUFBUXRSLEVBQUlxMUQsRUFBSzV1RCxTQUFVekcsRUFDdENxMUQsRUFBS3IxRCxJQUFNbXdCLEVBQU1ud0IsRUFBSXNSLEdBR3ZCLE9BQU9reEIsRUFBRzc3QixTQUFTMHVELElBSXZCN3lCLEVBQUcrMEIsUUFBVSxTQUFTOXlELEVBQUdpRSxHQUt2QixHQUpBakUsRUFBSSs5QixFQUFHb3hCLFNBQVNudkQsR0FDaEJpRSxFQUFJODVCLEVBQUdveEIsU0FBU2xyRCxHQUdaakUsRUFBRWdDLFNBQVdpQyxFQUFFakMsT0FBUSxDQUN6QixJQUFLLElBQUl6RyxFQUFJLEVBQUdBLEVBQUl5RSxFQUFFZ0MsT0FBUXpHLElBQzVCLEdBQUl5RSxFQUFFekUsS0FBTzBJLEVBQUUxSSxHQUFJLE9BQU8sRUFFNUIsT0FBTyxFQUlULEdBQWlCLElBQWIwSSxFQUFFakMsT0FBYyxDQUNsQixJQUFJdkYsRUFBSXdILEVBQ1JBLEVBQUlqRSxFQUNKQSxFQUFJdkQsRUFJTixJQUFTbEIsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ3RCLEdBQWEsSUFBVDBJLEVBQUUxSSxHQUFVLE9BQU8sRUFHekIsSUFBSTIxRCxFQUFPanRELEVBQUU2ckQsYUFBYSxJQUMxQixHQUFhLElBQVRvQixHQUF1QixRQUFUQSxFQUFpQixPQUFPLEVBRTFDLElBQVMzMUQsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQ3JCLEdBQUl5RSxFQUFFekUsS0FBTzBJLEVBQUUxSSxFQUFJLElBQUssT0FBTyxFQUdqQyxPQUFPLEdBR1R3aUMsRUFBR2cxQixVQUFZLFNBQVMvMkIsR0FDdEIsTUFBTyw0REFDRmw2QixLQUFLazZCLElBQ1Isb0RBQW9EbDZCLEtBQUtrNkIsSUFDekQsbUVBQ0dsNkIsS0FBS2s2QixJQUNSLDZEQUE2RGw2QixLQUFLazZCLElBQ2xFLG9EQUFvRGw2QixLQUFLazZCLElBQ3pELHNCQUFzQmw2QixLQUFLazZCLElBQzNCLFVBQVVsNkIsS0FBS2s2QixJQUNmLFFBQVFsNkIsS0FBS2s2QixJQUNiLE9BQU9sNkIsS0FBS2s2QixJQUdoQitCLEVBQUdpMUIsU0FBVyxTQUFTaDNCLEdBQ3JCLE9BQVErQixFQUFHZzFCLFVBQVUvMkIsSUFHdkIrQixFQUFHazFCLFdBQWEsU0FBU2ozQixHQUN2QixNQUFPLDJEQUNGbDZCLEtBQUtrNkIsSUFDUixZQUFZbDZCLEtBQUtrNkIsSUFDakIsUUFBUWw2QixLQUFLazZCLElBQ2IsT0FBT2w2QixLQUFLazZCLElBR2hCK0IsRUFBR20xQixTQUFXLFNBQVN4MkIsR0FNckIsR0FBZSxVQUZmQSxFQUFTMjBCLEVBQWlCMzBCLEtBRVUsU0FBWEEsRUFDdkIsTUFBTSxJQUFJOTJCLE1BQU0sK0JBR2xCLE1BQWtCLFNBQVg4MkIsRUFBb0IsWUFBYyxXQWtCM0NxQixFQUFHRixRQUFVLFNBQVMvaEMsRUFBTTRnQyxHQUMxQixJQXNCSW1XLEVBdEJBc2dCLEVBQWF6SSxFQUFHMEksb0JBWXBCLEdBTkExMkIsRUFBUzIwQixFQUFpQjMwQixHQU10QjVnQyxHQUFpQixZQUFUQSxHQUErQixXQUFUQSxFQUFtQixDQUNuRCxJQUFJbU0sRUFBTWtyRCxFQUFXcjNELEdBQU15UyxRQUFPLFNBQVM4a0QsR0FFekMsT0FEaUJBLEVBQVEzMkIsT0FBTzM2QixnQkFDVjI2QixLQUV4QixHQUFtQixJQUFmejBCLEVBQUlqRyxPQUNOLE9BQ0YsT0FBT2lHLEVBQUksR0FBRzQxQixRQXVCaEIsT0FwQklnVixFQUFNNTJDLE9BQU80TyxLQUFLc29ELEdBQVlwa0QsS0FBSSxTQUFVdWtELEdBSzlDLElBQUlDLEVBQVlKLEVBQVdHLEdBQUsva0QsUUFBTyxTQUFVOGtELEdBRS9DLE9BREFBLEVBQVEzMkIsT0FBUzIyQixFQUFRMzJCLE9BQU8zNkIsY0FDNUJzeEQsRUFBUTMyQixTQUFXQSxJQUFVcUIsRUFBR2sxQixXQUFXSSxFQUFReDFCLFlBRTNDL2hDLElBSUksV0FBVEEsRUFBb0JpaUMsRUFBR2cxQixVQUFVTSxFQUFReDFCLFNBQzVDRSxFQUFHaTFCLFNBQVNLLEVBQVF4MUIsY0FHMUIsT0FBTzAxQixFQUFVdnhELE9BQVN1eEQsRUFBVSxHQUFHMTFCLGFBQVUvK0IsS0FDaER5UCxPQUFPOGIsVUFFRXJvQixPQUErQjZ3QyxFQUFJLEdBQTFCOVUsRUFBR20xQixTQUFTeDJCLElBR25DcUIsRUFBRyt6QixPQUFTLFNBQVMvekIsR0FDbkIsSUFBSXkxQixFQUFNLEVBS1YsT0FKQXoxQixFQUFHajlCLE1BQU0sS0FBS3NCLFNBQVEsU0FBUzZ2RCxHQUM3QnVCLElBQVEsRUFDUkEsR0FBT3ZvQyxTQUFTZ25DLE1BRVh1QixJQUFRLEdBR2pCejFCLEVBQUdvMEIsU0FBVyxTQUFTcUIsR0FDckIsT0FBU0EsSUFBUSxJQUFNLEtBQ2xCQSxHQUFPLEdBQUssS0FBTyxLQUNuQkEsR0FBTyxFQUFJLEtBQU8sS0FDWixJQUFOQSxLLDZCQzdaUCxNQUFNQyxFQUFVLEVBQVEsS0FFbEJsRSxFQUFPL3RELEdBQVVpeUQsRUFBUSxDQUFDQyxPQUFPLElBQU81eEQsS0FBS04sR0FDbkQrdEQsRUFBS29FLEdBQUtueUQsR0FBVWl5RCxFQUFRRSxHQUFHLENBQUNELE9BQU8sSUFBTzV4RCxLQUFLTixHQUNuRCt0RCxFQUFLcUUsR0FBS3B5RCxHQUFVaXlELEVBQVFHLEdBQUcsQ0FBQ0YsT0FBTyxJQUFPNXhELEtBQUtOLEdBQ25EK3RELEVBQUt4cUQsUUFBVXZELEdBQVUrdEQsRUFBSy90RCxHQUFXK3RELEVBQUtvRSxHQUFHbnlELEdBQVUsRUFBSSxPQUFLMUMsRUFFcEUvRCxFQUFPRCxRQUFVeTBELEcsNkJDTmpCLE1BQ010ckQsRUFBSWdDLEdBQVdBLEdBQVdBLEVBQVE0dEQsa0JBQ3ZDLDREQUNBLEdBRUtGLEVBQUssaUdBRUxHLEVBQVEsbUJBQ1JGLEVBQUssV0FFTkUsWUFBZ0JBLGdGQUNoQkEsWUFBZ0JILE1BQU9HLCtHQUN2QkEsYUFBaUJILE9BQVFHLDZHQUN6QkEsY0FBa0JBLFdBQWVILE9BQVFHLDZGQUN6Q0EsY0FBa0JBLFdBQWVILE9BQVFHLDZGQUN6Q0EsY0FBa0JBLFdBQWVILE9BQVFHLDZGQUN6Q0EsY0FBa0JBLFdBQWVILE9BQVFHLG1HQUNuQ0EsV0FBZUgsU0FBVUcsZ0xBRWxDbHlELFFBQVEsZUFBZ0IsSUFBSUEsUUFBUSxNQUFPLElBQUl1QyxPQUUzQzQ1QixFQUFLOTNCLEdBQVdBLEdBQVdBLEVBQVF5dEQsTUFDeEMsSUFBSXo5QyxPQUFPLE9BQU8wOUMsV0FBWUMsT0FDOUIsSUFBSTM5QyxPQUFPLE1BQU1oUyxFQUFFZ0MsS0FBVzB0RCxJQUFLMXZELEVBQUVnQyxVQUFnQmhDLEVBQUVnQyxLQUFXMnRELElBQUszdkQsRUFBRWdDLE1BQWEsS0FFdkY4M0IsRUFBRzQxQixHQUFLMXRELEdBQVdBLEdBQVdBLEVBQVF5dEQsTUFBUSxJQUFJejlDLE9BQU8sSUFBSTA5QyxNQUFTLElBQUkxOUMsT0FBTyxHQUFHaFMsRUFBRWdDLEtBQVcwdEQsSUFBSzF2RCxFQUFFZ0MsS0FBWSxLQUNwSDgzQixFQUFHNjFCLEdBQUszdEQsR0FBV0EsR0FBV0EsRUFBUXl0RCxNQUFRLElBQUl6OUMsT0FBTyxJQUFJMjlDLE1BQVMsSUFBSTM5QyxPQUFPLEdBQUdoUyxFQUFFZ0MsS0FBVzJ0RCxJQUFLM3ZELEVBQUVnQyxLQUFZLEtBRXBIbEwsRUFBT0QsUUFBVWlqQyxHLDZCQ2pCakIsTUFBTTNVLEVBQVMsRUFBUSxJQUNqQjJxQyxFQUFXLEVBQVEsS0FDbkJDLEVBQXdCLEVBQVEsS0FDaENoMUIsRUFBTyxFQUFRLE1BRXJCbGtDLEVBQVVDLEVBQU9ELFNBU1RtNUQsVUFBWSxDQUFDQyxFQUFxQmhqRCxLQUN4QyxJQUFJOFksRUFFSixHQUFJM1IsT0FBT3BXLFNBQVNpeUQsR0FDbEJscUMsRUFBU2dWLEVBQUtWLG1CQUFtQjQxQixPQUM1QixDQUNMLElBQUlGLEVBQXNCRSxHQUd4QixNQUFNLElBQUl0dUQsTUFBTSw2QkFGaEJva0IsRUFBU2dxQyxFQUFzQkUsR0FLbkMsT0FBTzc3QyxPQUFPekcsT0FBTyxDQUFDb1ksRUFBUTlZLEtBU2hDcFcsRUFBUXF3QixTQUFZamEsSUFDbEJrWSxFQUFPN1MsT0FBT3JGLEdBQ1BBLEVBQUs5TCxNQUFNZ2tCLEVBQU83UyxPQUFPOE8sUUFRbEN2cUIsRUFBUW93QixTQUFZaXBDLElBQ2xCLE1BQU14ckMsRUFBT1MsRUFBTzdTLE9BQU80OUMsR0FDckJDLEVBQVlMLEVBQVMzM0QsSUFBSXVzQixHQUMvQixRQUFrQjdwQixJQUFkczFELEVBQ0YsTUFBTSxJQUFJeHVELE1BQU0sUUFBUStpQixlQUUxQixPQUFPeXJDLEdBUVR0NUQsRUFBUXU1RCxRQUFXeHBDLEdBQ1ZrcEMsRUFBUzMzRCxJQUFJeXVCLEdBUXRCL3ZCLEVBQVF3NUQsVUFBYXg0RCxJQUNuQixNQUFNNnNCLEVBQU9xckMsRUFBc0JsNEQsR0FDbkMsUUFBYWdELElBQVQ2cEIsRUFDRixNQUFNLElBQUkvaUIsTUFBTSxVQUFZOUosRUFBTyxlQUVyQyxPQUFPa2pDLEVBQUtULG1CQUFtQjVWLEdBQU0sSUFRdkM3dEIsRUFBUXk1RCxRQUFXSixHQUNWL3FDLEVBQU83UyxPQUFPNDlDLEdBUXZCcjVELEVBQVF5d0IsY0FBaUI2b0MsSUFDdkIsTUFBTXpyQyxFQUFPcXJDLEVBQXNCSSxHQUNuQyxRQUFhdDFELElBQVQ2cEIsRUFDRixNQUFNLElBQUkvaUIsTUFBTSxVQUFZd3VELEVBQVksZUFFMUMsT0FBT3pyQyxHQVFUN3RCLEVBQVEwNUQsVUFBYTdyQyxHQUNaUyxFQUFPOVMsT0FBT3FTLEdBSXZCLE1BQU0wUyxFQUFZLEVBQVEsS0FDMUJwL0IsT0FBT215QixPQUFPdHpCLEVBQVN1Z0MsR0FHdkJ2Z0MsRUFBUTI1RCxNQUFRLEVBQVEsTSw2QkM1SHhCLE1BQU1DLEVBQVksRUFBUSxJQUdwQkMsRUFBWSxJQUFJemlELElBRXRCLElBQUssTUFBTTBpRCxLQUFnQkYsRUFBVyxDQUNwQyxNQUFNL3JDLEVBQU8rckMsRUFBVUUsR0FDdkJELEVBQVVqb0QsSUFBSWljLEVBQU1pc0MsR0FHdEI3NUQsRUFBT0QsUUFBVW1CLE9BQU93L0IsT0FBT2s1QixJLDZCQ1QvQixNQUFNRCxFQUFZLEVBQVEsSUFDcEJsMkIsRUFBZSxFQUFRLEtBQVVBLGFBR2pDcTJCLEVBQWMsR0FFcEIsSUFBSyxNQUFNRCxLQUFnQkYsRUFBVyxDQUNwQyxNQUFNL3JDLEVBQU8rckMsRUFBVUUsR0FDdkJDLEVBQVlELEdBQWdCcDJCLEVBQWE3VixHQUczQzV0QixFQUFPRCxRQUFVbUIsT0FBT3cvQixPQUFPbzVCLEksNkJDWC9CLE1BQU10cUMsRUFBUSxFQUFRLElBR2hCOFEsRUFBWSxHQUVsQixJQUFLLE1BQU92L0IsRUFBTTZzQixLQUFTMXNCLE9BQU84SixRQUFRd2tCLEdBQ3hDOFEsRUFBVXYvQixFQUFLMG9ELGNBQWM1aUQsUUFBUSxLQUFNLE1BQVErbUIsRUFHckQ1dEIsRUFBT0QsUUFBVW1CLE9BQU93L0IsT0FBT0osSSw2QkNUL0IsTUFBTTlRLEVBQVEsRUFBUSxJQUdoQnVxQyxFQUFjLEdBRXBCLElBQUssTUFBT2g1RCxFQUFNNnNCLEtBQVMxc0IsT0FBTzhKLFFBQVF3a0IsUUFDZHpyQixJQUF0QmcyRCxFQUFZbnNDLEtBQXFCbXNDLEVBQVluc0MsR0FBUTdzQixHQUczRGYsRUFBT0QsUUFBVW1CLE9BQU93L0IsT0FBT3E1QixJLDZCQ1QvQixNQUFNcnFDLEVBQUssRUFBUSxLQUVuQixJQUFJRyxFQUFVLENBU1ppQixtQkFBb0IsU0FBVUgsR0FDNUIsR0FBYSxNQUFUQSxFQUNGLE1BQU8saUNBR1QsR0FBd0IsSUFBbEJBLEVBQU0zbUIsU0FBbUMsSUFBbEIybUIsRUFBTTNtQixRQUNqQyxNQUFPLG9EQUdULEdBQTJCLGlCQUFoQjJtQixFQUFNYixNQUNmLE1BQU8sdUJBR1QsR0FBc0IsSUFBbEJhLEVBQU0zbUIsUUFBZSxDQUN2QixHQUFvQixXQUFoQjJtQixFQUFNYixNQUNSLE1BQU8sbUNBRVQsR0FBNEIsY0FBeEJhLEVBQU1aLGNBQ1IsTUFBTyw4Q0FJWCxJQUFLelMsT0FBT3BXLFNBQVN5cEIsRUFBTXpVLFdBQ3pCLE1BQU8sNkJBR1QsSUFDRXdULEVBQUczZCxTQUFTNGUsRUFBTXpVLFdBQ2xCLE1BQU91VixHQUNQLElBQUlaLEVBQVdZLEVBQUkvRCxRQUluQixPQUhLbUQsSUFDSEEsRUFBVywrQkFFTkEsS0FLYjd3QixFQUFPRCxRQUFVOHZCLEcsZ0JDbkRqQjs7Ozs7Ozs7SUFTQSxXQUNFLGFBRUEsSUFBSWh3QixFQUF5QixpQkFBWDBFLE9BQXNCQSxPQUFTLElBQ2xDMUUsRUFBS202RCxzQkFBMkMsaUJBQVovekMsU0FBd0JBLFFBQVEydkIsVUFBWTN2QixRQUFRMnZCLFNBQVNscUMsT0FFOUc3TCxFQUFPMkMsUUFFVCxJQUFJeTNELEdBQWFwNkQsRUFBS3E2RCx3QkFBNEMsaUJBQVhsNkQsR0FBdUJBLEVBQU9ELFFBQ2pGbzZELEVBQXNDLE9BQ3RDQyxFQUFxQixtQ0FBbUNyMEQsTUFBTSxJQUM5RHMwRCxFQUFxQixDQUN2QixFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFBRyxFQUFLLEVBQUcsRUFBSyxFQUFHLEVBQUssRUFDckUsRUFBSyxFQUFHLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FDbkUsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FDcEUsRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxJQUd6REMsRUFBUyxDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FFL0JDLEVBQW1CLFNBQVVobkIsRUFBVWluQixHQUNyQ0EsRUFBUXZ6RCxPQUFTLEtBQ25CdXpELEVBQVUsTUFBUUEsRUFBUXYrQixRQUFRLEtBRXBDLElBQUl4SyxFQUFNLElBQUk1bUIsTUFBTSxrR0FFaUIwb0MsRUFBVyxXQUFhaW5CLEVBQVUsT0FFdkUsTUFEQS9vQyxFQUFJOGhCLFNBQVdBLEVBQ1Q5aEIsR0FpREpncEMsRUFBZ0IsU0FBVUMsR0FDNUIsSUFBSyxlQUFlM3pELEtBQUsyekQsR0FDdkIsTUFBTSxJQUFJN3ZELE1BQU0sNkJBTWxCLElBSEEsSUFBSTB4QyxFQUFJb2UsRUFBSUMsRUFBSWhDLEVBQUlpQyxFQUFJaEMsRUFBSWlDLEVBQUlqbEIsRUFBSXZyQixFQUFRLEdBQUluZCxFQUFRLEVBQUdsRyxHQUQzRHl6RCxFQUFZQSxFQUFVN3pELFFBQVEsS0FBTSxLQUMwQ0ksT0FHckV6RyxFQUFJLEVBQUcwaUIsRUFBUWpjLEdBQVUsR0FBSyxFQUFHekcsRUFBSTBpQixHQUM1Q3E1QixFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q282RCxFQUFLUCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNEQsRUFBS3lCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3E2RCxFQUFLUixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNxNEQsRUFBS3dCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3M2RCxFQUFLVCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNxMUMsRUFBS3drQixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM4cEIsRUFBTW5kLEtBQWtDLEtBQXRCb3ZDLEdBQU0sRUFBSW9lLElBQU8sR0FDbkNyd0MsRUFBTW5kLEtBQTRDLEtBQWhDd3RELEdBQU0sRUFBSUMsR0FBTSxFQUFJaEMsSUFBTyxHQUM3Q3R1QyxFQUFNbmQsS0FBa0MsS0FBdEJ5ckQsR0FBTSxFQUFJaUMsSUFBTyxHQUNuQ3Z3QyxFQUFNbmQsS0FBNEMsS0FBaEMwdEQsR0FBTSxFQUFJaEMsR0FBTSxFQUFJaUMsSUFBTyxHQUM3Q3h3QyxFQUFNbmQsS0FBNEIsS0FBaEIydEQsR0FBTSxFQUFJamxCLEdBSTlCLElBQUlrbEIsRUFBUzl6RCxFQUFTaWMsRUFrQ3RCLE9BakNlLElBQVg2M0MsR0FDRnhlLEVBQUs4ZCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNtNkQsRUFBS04sRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDOHBCLEVBQU1uZCxLQUFrQyxLQUF0Qm92QyxHQUFNLEVBQUlvZSxJQUFPLElBQ2YsSUFBWEksR0FDVHhlLEVBQUs4ZCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNtNkQsRUFBS04sRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbzZELEVBQUtQLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q280RCxFQUFLeUIsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDOHBCLEVBQU1uZCxLQUFrQyxLQUF0Qm92QyxHQUFNLEVBQUlvZSxJQUFPLEdBQ25DcndDLEVBQU1uZCxLQUE0QyxLQUFoQ3d0RCxHQUFNLEVBQUlDLEdBQU0sRUFBSWhDLElBQU8sSUFDekIsSUFBWG1DLEdBQ1R4ZSxFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q282RCxFQUFLUCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNEQsRUFBS3lCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3E2RCxFQUFLUixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM4cEIsRUFBTW5kLEtBQWtDLEtBQXRCb3ZDLEdBQU0sRUFBSW9lLElBQU8sR0FDbkNyd0MsRUFBTW5kLEtBQTRDLEtBQWhDd3RELEdBQU0sRUFBSUMsR0FBTSxFQUFJaEMsSUFBTyxHQUM3Q3R1QyxFQUFNbmQsS0FBa0MsS0FBdEJ5ckQsR0FBTSxFQUFJaUMsSUFBTyxJQUNmLElBQVhFLElBQ1R4ZSxFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q282RCxFQUFLUCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNEQsRUFBS3lCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3E2RCxFQUFLUixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNxNEQsRUFBS3dCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3M2RCxFQUFLVCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM4cEIsRUFBTW5kLEtBQWtDLEtBQXRCb3ZDLEdBQU0sRUFBSW9lLElBQU8sR0FDbkNyd0MsRUFBTW5kLEtBQTRDLEtBQWhDd3RELEdBQU0sRUFBSUMsR0FBTSxFQUFJaEMsSUFBTyxHQUM3Q3R1QyxFQUFNbmQsS0FBa0MsS0FBdEJ5ckQsR0FBTSxFQUFJaUMsSUFBTyxHQUNuQ3Z3QyxFQUFNbmQsS0FBNEMsS0FBaEMwdEQsR0FBTSxFQUFJaEMsR0FBTSxFQUFJaUMsSUFBTyxJQUV4Q3h3QyxHQThOTDlPLEVBQVMsU0FBVWsvQyxFQUFXTSxHQUNoQyxJQUFLQSxFQUNILE9BelVlLFNBQVUxd0MsR0FFM0IsSUFEQSxJQUFnRXBoQixFQUFHckksRUFBL0R3SSxFQUFNLEdBQUlwQyxFQUFTcWpCLEVBQU1yakIsT0FBUXpHLEVBQUksRUFBR3k2RCxFQUFpQixFQUN0RHo2RCxFQUFJeUcsR0FFVCxJQURBaUMsRUFBSW9oQixFQUFNOXBCLE9BQ0QsSUFDUDZJLEdBQU9oRCxPQUFPaXBDLGFBQWFwbUMsT0FEN0IsQ0FHV0EsRUFBSSxLQUFRQSxHQUFLLEtBQzFCckksRUFBUSxHQUFKcUksRUFDSit4RCxFQUFpQixHQUNSL3hELEdBQUssS0FDZHJJLEVBQVEsR0FBSnFJLEVBQ0oreEQsRUFBaUIsR0FDUi94RCxHQUFLLEtBQ2RySSxFQUFRLEVBQUpxSSxFQUNKK3hELEVBQWlCLEdBRWpCVixFQUFpQi81RCxFQUFHNkksR0FHdEIsSUFBSyxJQUFJOGhCLEVBQUksRUFBR0EsRUFBSTh2QyxJQUFrQjl2QyxJQUNwQ2ppQixFQUFJb2hCLEVBQU05cEIsTUFDRixLQUFRMEksRUFBSSxNQUNsQnF4RCxFQUFpQi81RCxFQUFHNkksR0FFdEJ4SSxJQUFNLEVBQ05BLEdBQVMsR0FBSnFJLEVBRUhySSxHQUFLLE9BQVVBLEdBQUssT0FDdEIwNUQsRUFBaUIvNUQsRUFBRzZJLEdBRWxCeEksRUFBSSxTQUNOMDVELEVBQWlCLzVELEVBQUc2SSxHQUdsQnhJLEdBQUssTUFDUHdJLEdBQU9oRCxPQUFPaXBDLGFBQWF6dUMsSUFFM0JBLEdBQUssTUFDTHdJLEdBQU9oRCxPQUFPaXBDLGFBQXlCLE9BQVh6dUMsR0FBSyxLQUNqQ3dJLEdBQU9oRCxPQUFPaXBDLGFBQTJCLE9BQVQsS0FBSnp1QyxLQUdoQyxPQUFPd0ksRUE4UkU2eEQsQ0FBYVQsRUFBY0MsSUFFcEMsSUFBSyxlQUFlM3pELEtBQUsyekQsR0FDdkIsTUFBTSxJQUFJN3ZELE1BQU0sNkJBRWxCLElBQUkweEMsRUFBSW9lLEVBQUlDLEVBQUloQyxFQUFJaUMsRUFBSWhDLEVBQUlpQyxFQUFJamxCLEVBQUl4c0MsRUFBTSxHQUFJcEMsRUFBU3l6RCxFQUFVOW1ELFFBQVEsTUFDekQsSUFBWjNNLElBQ0ZBLEVBQVN5ekQsRUFBVXp6RCxRQUlyQixJQUFLLElBQUl6RyxFQUFJLEVBQUcwaUIsRUFBUWpjLEdBQVUsR0FBSyxFQUFHekcsRUFBSTBpQixHQUM1Q3E1QixFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q282RCxFQUFLUCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNEQsRUFBS3lCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3E2RCxFQUFLUixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNxNEQsRUFBS3dCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3M2RCxFQUFLVCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNxMUMsRUFBS3drQixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM2SSxHQUFPaEQsT0FBT2lwQyxhQUFvQyxLQUF0QmlOLEdBQU0sRUFBSW9lLElBQU8sSUFDM0N0MEQsT0FBT2lwQyxhQUE4QyxLQUFoQ3FyQixHQUFNLEVBQUlDLEdBQU0sRUFBSWhDLElBQU8sSUFDaER2eUQsT0FBT2lwQyxhQUFvQyxLQUF0QnNwQixHQUFNLEVBQUlpQyxJQUFPLElBQ3RDeDBELE9BQU9pcEMsYUFBOEMsS0FBaEN1ckIsR0FBTSxFQUFJaEMsR0FBTSxFQUFJaUMsSUFBTyxJQUNoRHowRCxPQUFPaXBDLGFBQThCLEtBQWhCd3JCLEdBQU0sRUFBSWpsQixJQUluQyxJQUFJa2xCLEVBQVM5ekQsRUFBU2ljLEVBa0N0QixPQWpDZSxJQUFYNjNDLEdBQ0Z4ZSxFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6QzZJLEdBQU9oRCxPQUFPaXBDLGFBQW9DLEtBQXRCaU4sR0FBTSxFQUFJb2UsSUFBTyxLQUN6QixJQUFYSSxHQUNUeGUsRUFBSzhkLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q202RCxFQUFLTixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNkQsRUFBS1AsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbzRELEVBQUt5QixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM2SSxHQUFPaEQsT0FBT2lwQyxhQUFvQyxLQUF0QmlOLEdBQU0sRUFBSW9lLElBQU8sSUFDM0N0MEQsT0FBT2lwQyxhQUE4QyxLQUFoQ3FyQixHQUFNLEVBQUlDLEdBQU0sRUFBSWhDLElBQU8sS0FDOUIsSUFBWG1DLEdBQ1R4ZSxFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q282RCxFQUFLUCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNEQsRUFBS3lCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3E2RCxFQUFLUixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM2SSxHQUFPaEQsT0FBT2lwQyxhQUFvQyxLQUF0QmlOLEdBQU0sRUFBSW9lLElBQU8sSUFDM0N0MEQsT0FBT2lwQyxhQUE4QyxLQUFoQ3FyQixHQUFNLEVBQUlDLEdBQU0sRUFBSWhDLElBQU8sSUFDaER2eUQsT0FBT2lwQyxhQUFvQyxLQUF0QnNwQixHQUFNLEVBQUlpQyxJQUFPLEtBQ3BCLElBQVhFLElBQ1R4ZSxFQUFLOGQsRUFBbUJLLEVBQVV2N0MsT0FBTzNlLE1BQ3pDbTZELEVBQUtOLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q282RCxFQUFLUCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNvNEQsRUFBS3lCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3E2RCxFQUFLUixFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekNxNEQsRUFBS3dCLEVBQW1CSyxFQUFVdjdDLE9BQU8zZSxNQUN6Q3M2RCxFQUFLVCxFQUFtQkssRUFBVXY3QyxPQUFPM2UsTUFDekM2SSxHQUFPaEQsT0FBT2lwQyxhQUFvQyxLQUF0QmlOLEdBQU0sRUFBSW9lLElBQU8sSUFDM0N0MEQsT0FBT2lwQyxhQUE4QyxLQUFoQ3FyQixHQUFNLEVBQUlDLEdBQU0sRUFBSWhDLElBQU8sSUFDaER2eUQsT0FBT2lwQyxhQUFvQyxLQUF0QnNwQixHQUFNLEVBQUlpQyxJQUFPLElBQ3RDeDBELE9BQU9pcEMsYUFBOEMsS0FBaEN1ckIsR0FBTSxFQUFJaEMsR0FBTSxFQUFJaUMsSUFBTyxLQUU3Q3p4RCxHQUdMdEosRUFBVSxDQUNad2IsT0FsRlcsU0FBVXNCLEVBQU9tK0MsR0FDNUIsSUFBSUcsRUFBOEIsaUJBQVosRUFJdEIsT0FISUEsR0FBYXQrQyxFQUFNOVMsY0FBZ0JuQyxjQUNyQ2lWLEVBQVEsSUFBSS9OLFdBQVcrTixJQUVyQnMrQyxFQWpFWSxTQUFVN3dDLEdBRTFCLElBREEsSUFBSWl5QixFQUFJb2UsRUFBSUMsRUFBSWhDLEVBQUlpQyxFQUFJSCxFQUFZLEdBQUl6ekQsRUFBU3FqQixFQUFNcmpCLE9BQzlDekcsRUFBSSxFQUFHMGlCLEVBQStCLEVBQXZCZ04sU0FBU2pwQixFQUFTLEdBQVF6RyxFQUFJMGlCLEdBQ3BEcTVCLEVBQUtqeUIsRUFBTTlwQixLQUNYbTZELEVBQUtyd0MsRUFBTTlwQixLQUNYbzZELEVBQUt0d0MsRUFBTTlwQixLQUNYbzRELEVBQUt0dUMsRUFBTTlwQixLQUNYcTZELEVBQUt2d0MsRUFBTTlwQixLQUNYazZELEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQTBDLElBQXRCN2QsR0FBTSxFQUFJb2UsSUFBTyxJQUNyQ1AsRUFBb0JPLElBQU8sRUFBSyxJQUNoQ1AsRUFBMEMsSUFBdEJPLEdBQU0sRUFBSUMsSUFBTyxJQUNyQ1IsRUFBMEMsSUFBdEJRLEdBQU0sRUFBSWhDLElBQU8sSUFDckN3QixFQUFvQnhCLElBQU8sRUFBSyxJQUNoQ3dCLEVBQTBDLElBQXRCeEIsR0FBTSxFQUFJaUMsSUFBTyxJQUNyQ1QsRUFBd0IsR0FBTFMsR0FJdkIsSUFBSUUsRUFBUzl6RCxFQUFTaWMsRUFzQ3RCLE9BckNlLElBQVg2M0MsR0FDRnhlLEVBQUtqeUIsRUFBTTlwQixHQUNYazZELEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQW9CN2QsR0FBTSxFQUFLLElBQy9CLFVBQ2tCLElBQVh3ZSxHQUNUeGUsRUFBS2p5QixFQUFNOXBCLEtBQ1htNkQsRUFBS3J3QyxFQUFNOXBCLEdBQ1hrNkQsR0FBYU4sRUFBbUI3ZCxJQUFPLEdBQ3JDNmQsRUFBMEMsSUFBdEI3ZCxHQUFNLEVBQUlvZSxJQUFPLElBQ3JDUCxFQUFvQk8sSUFBTyxFQUFLLElBQ2hDUCxFQUFvQk8sR0FBTSxFQUFLLElBQy9CLFFBQ2tCLElBQVhJLEdBQ1R4ZSxFQUFLanlCLEVBQU05cEIsS0FDWG02RCxFQUFLcndDLEVBQU05cEIsS0FDWG82RCxFQUFLdHdDLEVBQU05cEIsR0FDWGs2RCxHQUFhTixFQUFtQjdkLElBQU8sR0FDckM2ZCxFQUEwQyxJQUF0QjdkLEdBQU0sRUFBSW9lLElBQU8sSUFDckNQLEVBQW9CTyxJQUFPLEVBQUssSUFDaENQLEVBQTBDLElBQXRCTyxHQUFNLEVBQUlDLElBQU8sSUFDckNSLEVBQW9CUSxHQUFNLEVBQUssSUFDL0IsT0FDa0IsSUFBWEcsSUFDVHhlLEVBQUtqeUIsRUFBTTlwQixLQUNYbTZELEVBQUtyd0MsRUFBTTlwQixLQUNYbzZELEVBQUt0d0MsRUFBTTlwQixLQUNYbzRELEVBQUt0dUMsRUFBTTlwQixHQUNYazZELEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQTBDLElBQXRCN2QsR0FBTSxFQUFJb2UsSUFBTyxJQUNyQ1AsRUFBb0JPLElBQU8sRUFBSyxJQUNoQ1AsRUFBMEMsSUFBdEJPLEdBQU0sRUFBSUMsSUFBTyxJQUNyQ1IsRUFBMEMsSUFBdEJRLEdBQU0sRUFBSWhDLElBQU8sSUFDckN3QixFQUFvQnhCLElBQU8sRUFBSyxJQUNoQ3dCLEVBQW9CeEIsR0FBTSxFQUFLLElBQy9CLEtBRUc4QixFQVNFVSxDQUFZditDLEdBQ1ZtK0MsRUFwTkssU0FBVTN4RCxHQUUxQixJQURBLElBQUlrekMsRUFBSW9lLEVBQUlDLEVBQUloQyxFQUFJaUMsRUFBSUgsRUFBWSxHQUFJenpELEVBQVNvQyxFQUFJcEMsT0FDNUN6RyxFQUFJLEVBQUcwaUIsRUFBK0IsRUFBdkJnTixTQUFTanBCLEVBQVMsR0FBUXpHLEVBQUkwaUIsR0FDcERxNUIsRUFBS2x6QyxFQUFJNlYsV0FBVzFlLEtBQ3BCbTZELEVBQUt0eEQsRUFBSTZWLFdBQVcxZSxLQUNwQm82RCxFQUFLdnhELEVBQUk2VixXQUFXMWUsS0FDcEJvNEQsRUFBS3Z2RCxFQUFJNlYsV0FBVzFlLEtBQ3BCcTZELEVBQUt4eEQsRUFBSTZWLFdBQVcxZSxLQUNwQms2RCxHQUFhTixFQUFtQjdkLElBQU8sR0FDckM2ZCxFQUEwQyxJQUF0QjdkLEdBQU0sRUFBSW9lLElBQU8sSUFDckNQLEVBQW9CTyxJQUFPLEVBQUssSUFDaENQLEVBQTBDLElBQXRCTyxHQUFNLEVBQUlDLElBQU8sSUFDckNSLEVBQTBDLElBQXRCUSxHQUFNLEVBQUloQyxJQUFPLElBQ3JDd0IsRUFBb0J4QixJQUFPLEVBQUssSUFDaEN3QixFQUEwQyxJQUF0QnhCLEdBQU0sRUFBSWlDLElBQU8sSUFDckNULEVBQXdCLEdBQUxTLEdBSXZCLElBQUlFLEVBQVM5ekQsRUFBU2ljLEVBc0N0QixPQXJDZSxJQUFYNjNDLEdBQ0Z4ZSxFQUFLbHpDLEVBQUk2VixXQUFXMWUsR0FDcEJrNkQsR0FBYU4sRUFBbUI3ZCxJQUFPLEdBQ3JDNmQsRUFBb0I3ZCxHQUFNLEVBQUssSUFDL0IsVUFDa0IsSUFBWHdlLEdBQ1R4ZSxFQUFLbHpDLEVBQUk2VixXQUFXMWUsS0FDcEJtNkQsRUFBS3R4RCxFQUFJNlYsV0FBVzFlLEdBQ3BCazZELEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQTBDLElBQXRCN2QsR0FBTSxFQUFJb2UsSUFBTyxJQUNyQ1AsRUFBb0JPLElBQU8sRUFBSyxJQUNoQ1AsRUFBb0JPLEdBQU0sRUFBSyxJQUMvQixRQUNrQixJQUFYSSxHQUNUeGUsRUFBS2x6QyxFQUFJNlYsV0FBVzFlLEtBQ3BCbTZELEVBQUt0eEQsRUFBSTZWLFdBQVcxZSxLQUNwQm82RCxFQUFLdnhELEVBQUk2VixXQUFXMWUsR0FDcEJrNkQsR0FBYU4sRUFBbUI3ZCxJQUFPLEdBQ3JDNmQsRUFBMEMsSUFBdEI3ZCxHQUFNLEVBQUlvZSxJQUFPLElBQ3JDUCxFQUFvQk8sSUFBTyxFQUFLLElBQ2hDUCxFQUEwQyxJQUF0Qk8sR0FBTSxFQUFJQyxJQUFPLElBQ3JDUixFQUFvQlEsR0FBTSxFQUFLLElBQy9CLE9BQ2tCLElBQVhHLElBQ1R4ZSxFQUFLbHpDLEVBQUk2VixXQUFXMWUsS0FDcEJtNkQsRUFBS3R4RCxFQUFJNlYsV0FBVzFlLEtBQ3BCbzZELEVBQUt2eEQsRUFBSTZWLFdBQVcxZSxLQUNwQm80RCxFQUFLdnZELEVBQUk2VixXQUFXMWUsR0FDcEJrNkQsR0FBYU4sRUFBbUI3ZCxJQUFPLEdBQ3JDNmQsRUFBMEMsSUFBdEI3ZCxHQUFNLEVBQUlvZSxJQUFPLElBQ3JDUCxFQUFvQk8sSUFBTyxFQUFLLElBQ2hDUCxFQUEwQyxJQUF0Qk8sR0FBTSxFQUFJQyxJQUFPLElBQ3JDUixFQUEwQyxJQUF0QlEsR0FBTSxFQUFJaEMsSUFBTyxJQUNyQ3dCLEVBQW9CeEIsSUFBTyxFQUFLLElBQ2hDd0IsRUFBb0J4QixHQUFNLEVBQUssSUFDL0IsS0FFRzhCLEVBNEpFVyxDQUFZeCtDLEdBekpOLFNBQVV4VCxHQUN6QixJQUFJa3pDLEVBQUlvZSxFQUFJQyxFQUFJaEMsRUFBSWlDLEVBQUlqdEMsRUFDWHB0QixFQURpQitULEdBQU0sRUFBT21tRCxFQUFZLEdBQ3JEdnRELEVBQVEsRUFBTWtHLEVBQVEsRUFBY3BNLEVBQVNvQyxFQUFJcEMsT0FDbkQsRUFBRyxDQUlELElBSEFxekQsRUFBTyxHQUFLQSxFQUFPLEdBQ25CQSxFQUFPLEdBQUtBLEVBQU8sR0FDbkJBLEVBQU8sR0FBS0EsRUFBTyxHQUNkOTVELEVBQUk2UyxFQUFPbEcsRUFBUWxHLEdBQVV6RyxFQUFJLElBQUsyTSxHQUN6Q3lnQixFQUFPdmtCLEVBQUk2VixXQUFXL1IsSUFDWCxJQUNUbXRELEVBQU85NUQsS0FBT290QixFQUNMQSxFQUFPLE1BQ2hCMHNDLEVBQU85NUQsS0FBTyxJQUFRb3RCLEdBQVEsRUFDOUIwc0MsRUFBTzk1RCxLQUFPLElBQWUsR0FBUG90QixHQUNiQSxFQUFPLE9BQVVBLEdBQVEsT0FDbEMwc0MsRUFBTzk1RCxLQUFPLElBQVFvdEIsR0FBUSxHQUM5QjBzQyxFQUFPOTVELEtBQU8sSUFBU290QixHQUFRLEVBQUssR0FDcEMwc0MsRUFBTzk1RCxLQUFPLElBQWUsR0FBUG90QixJQUV0QkEsRUFBTyxRQUFvQixLQUFQQSxJQUFpQixHQUFpQyxLQUExQnZrQixFQUFJNlYsYUFBYS9SLElBQzdEbXRELEVBQU85NUQsS0FBTyxJQUFRb3RCLEdBQVEsR0FDOUIwc0MsRUFBTzk1RCxLQUFPLElBQVNvdEIsR0FBUSxHQUFNLEdBQ3JDMHNDLEVBQU85NUQsS0FBTyxJQUFTb3RCLEdBQVEsRUFBSyxHQUNwQzBzQyxFQUFPOTVELEtBQU8sSUFBZSxHQUFQb3RCLEdBR2pCcHRCLEVBQUk2UyxFQUNiQSxFQUFRN1MsRUFBSSxFQUNSMk0sSUFBVWxHLEtBQ1ZrRyxFQUVBQSxFQUFRbEcsR0FBVXpHLEVBQUksSUFDeEIrVCxHQUFNLEdBRVJnb0MsRUFBSytkLEVBQU8sR0FDUjk1RCxFQUFJLEdBQ05tNkQsRUFBS0wsRUFBTyxHQUNaTSxFQUFLTixFQUFPLEdBQ1oxQixFQUFLMEIsRUFBTyxHQUNaTyxFQUFLUCxFQUFPLEdBQ1pJLEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQTBDLElBQXRCN2QsR0FBTSxFQUFJb2UsSUFBTyxJQUNyQ1AsRUFBb0JPLElBQU8sRUFBSyxJQUNoQ1AsRUFBMEMsSUFBdEJPLEdBQU0sRUFBSUMsSUFBTyxJQUNyQ1IsRUFBMEMsSUFBdEJRLEdBQU0sRUFBSWhDLElBQU8sSUFDckN3QixFQUFvQnhCLElBQU8sRUFBSyxJQUNoQ3dCLEVBQTBDLElBQXRCeEIsR0FBTSxFQUFJaUMsSUFBTyxJQUNyQ1QsRUFBd0IsR0FBTFMsSUFDTixJQUFOcjZELEVBQ1RrNkQsR0FBYU4sRUFBbUI3ZCxJQUFPLEdBQ3JDNmQsRUFBb0I3ZCxHQUFNLEVBQUssSUFDL0IsU0FDYSxJQUFOLzdDLEdBQ1RtNkQsRUFBS0wsRUFBTyxHQUNaSSxHQUFhTixFQUFtQjdkLElBQU8sR0FDckM2ZCxFQUEwQyxJQUF0QjdkLEdBQU0sRUFBSW9lLElBQU8sSUFDckNQLEVBQW9CTyxJQUFPLEVBQUssSUFDaENQLEVBQW9CTyxHQUFNLEVBQUssSUFDL0IsUUFDYSxJQUFObjZELEdBQ1RtNkQsRUFBS0wsRUFBTyxHQUNaTSxFQUFLTixFQUFPLEdBQ1pJLEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQTBDLElBQXRCN2QsR0FBTSxFQUFJb2UsSUFBTyxJQUNyQ1AsRUFBb0JPLElBQU8sRUFBSyxJQUNoQ1AsRUFBMEMsSUFBdEJPLEdBQU0sRUFBSUMsSUFBTyxJQUNyQ1IsRUFBb0JRLEdBQU0sRUFBSyxJQUMvQixRQUVGRCxFQUFLTCxFQUFPLEdBQ1pNLEVBQUtOLEVBQU8sR0FDWjFCLEVBQUswQixFQUFPLEdBQ1pJLEdBQWFOLEVBQW1CN2QsSUFBTyxHQUNyQzZkLEVBQTBDLElBQXRCN2QsR0FBTSxFQUFJb2UsSUFBTyxJQUNyQ1AsRUFBb0JPLElBQU8sRUFBSyxJQUNoQ1AsRUFBMEMsSUFBdEJPLEdBQU0sRUFBSUMsSUFBTyxJQUNyQ1IsRUFBMEMsSUFBdEJRLEdBQU0sRUFBSWhDLElBQU8sSUFDckN3QixFQUFvQnhCLElBQU8sRUFBSyxJQUNoQ3dCLEVBQW9CeEIsR0FBTSxFQUFLLElBQy9CLFlBRUlya0QsR0FDVixPQUFPbW1ELEVBeUVFWSxDQUFXeitDLElBeUVwQnJCLE9BQVFBLEdBRVZBLEVBQU9pNkMsUUFBVWdGLEVBRWJSLEVBQ0ZqNkQsRUFBT0QsUUFBVUEsR0FFakJGLEVBQUtxekQsT0FBU256RCxFQUNWbzZELFNBR0QsS0FGRCxhQUNFLE9BQU9wNkQsR0FDUixnQ0F0YlAsSSxlQ1RBLFlBQ0FDLEVBQU9ELFFBQVV3N0QsSSw0Q0NDakIsTUFBTTc5QyxFQUFZLEVBQVEsS0FLcEI4OUMsRUFBTy9xQyxFQUFLLFFBQ1pnckMsRUFBT2hyQyxFQUFLLFFBQ1ppckMsRUFBTTVELEVBQ1ZybkMsRUFBSyxPQUNMQSxFQUFLLFdBQ0wrcUMsRUFDQUMsR0FHSUUsRUFBSzdELEVBQUdybkMsRUFBSyxPQUFRQSxFQUFLLFFBQzFCbXJDLEVBQU05RCxFQUNWK0QsRUFBSUYsRUFBSWxyQyxFQUFLLFFBQ2JvckMsRUFBSUgsRUFBS2pyQyxFQUFLLFNBRVZxckMsRUFBTUQsRUFBSUYsRUFBSWxyQyxFQUFLLFFBQ25Cc3JDLEVBQU1GLEVBQUlDLEVBQUtyckMsRUFBSyxRQUVwQnVyQyxFQUFhbEUsRUFDakIrRCxFQUFJRCxFQUFLbnJDLEVBQUssT0FDZG9yQyxFQUFJSCxFQUFLanJDLEVBQUssUUFHVndyQyxFQUFtQm5FLEVBQ3ZCK0QsRUFBSUQsRUFBS25yQyxFQUFLLFFBQ2RvckMsRUFBSUgsRUFBS2pyQyxFQUFLLFNBR1Z5ckMsRUFBT3BFLEVBQ1grRCxFQUFJRCxFQUFLbnJDLEVBQUssU0FDZG9yQyxFQUFJRixFQUFJbHJDLEVBQUssU0FDYm9yQyxFQUFJSCxFQUFLanJDLEVBQUssVUFHVjByQyxFQUFRckUsRUFDWitELEVBQUlELEVBQUtuckMsRUFBSyxVQUNkb3JDLEVBQUlGLEVBQUlsckMsRUFBSyxVQUNib3JDLEVBQUlILEVBQUtqckMsRUFBSyxXQUdWMnJDLEVBQWF0RSxFQUNqQitELEVBQUlHLEVBQVl2ckMsRUFBSyxtQkFBb0JBLEVBQUssUUFDOUNvckMsRUFBSUksRUFBa0J4ckMsRUFBSyxtQkFBb0JBLEVBQUssUUFDcERvckMsRUFBSUcsRUFBWXZyQyxFQUFLLG9CQUNyQm9yQyxFQUFJSSxFQUFrQnhyQyxFQUFLLHFCQUd2QjRyQyxFQUFnQnZFLEVBQ3BCK0QsRUFBSUcsRUFBWXZyQyxFQUFLLHNCQUF1QkEsRUFBSyxRQUNqRG9yQyxFQUFJSSxFQUFrQnhyQyxFQUFLLHNCQUF1QkEsRUFBSyxRQUN2RG9yQyxFQUFJRyxFQUFZdnJDLEVBQUssdUJBQ3JCb3JDLEVBQUlJLEVBQWtCeHJDLEVBQUssd0JBR3ZCNnJDLEVBQWV4RSxFQUNuQitELEVBQUlLLEVBQU16ckMsRUFBSyxzQkFDZm9yQyxFQUFJTSxFQUFPMXJDLEVBQUssdUJBR1o4ckMsRUFBV3pFLEVBQ2ZrRSxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBRSxFQUNBVixFQUNBRyxHQUlJUyxFQUFXMUUsRUFDZitELEVBQUlVLEVBQVU5ckMsRUFBSyxnQkFBaUJBLEVBQUssUUFDekNvckMsRUFBSVUsRUFBVTlyQyxFQUFLLGtCQUdmZ3NDLEVBQU8zRSxFQUNYK0QsRUFBSVUsRUFBVTlyQyxFQUFLLFFBQ25CMnJDLEVBQ0EzckMsRUFBSyxRQUdEaXNDLEVBQVc1RSxFQUNmK0QsRUFBSVksRUFBTWhzQyxFQUFLLGVBQWdCZ3NDLEdBQy9CWixFQUFJWSxFQUFNaHNDLEVBQUssZ0JBQ2ZvckMsRUFBSXByQyxFQUFLLGVBQWdCZ3NDLEdBQ3pCWixFQUFJVSxFQUFVOXJDLEVBQUssZ0JBQ25Cb3JDLEVBQUlwckMsRUFBSyxlQUFnQjhyQyxHQUN6QjlyQyxFQUFLLGdCQUdEa3NDLEVBQW1CLElBQU03RSxFQUM3QitELEVBQUlhLEVBQVVDLEdBQ2RELEdBR0lFLEVBQVVELElBRVZFLEVBQU0vRSxFQUNWK0QsRUFBSWUsRUFBU0gsRUFBTUcsR0FDbkJmLEVBQUlZLEVBQU1HLEdBQ1ZmLEVBQUllLEVBQVNILEdBQ2JHLEVBQ0FILEdBMkJGLFNBQVNLLEVBQXFCQyxHQUM1QixPQUFPLFNBQWtCOTNELEdBQ3ZCLElBQUt5WSxFQUFVZCxZQUFZM1gsR0FDekIsSUFDRUEsRUFBSXlZLEVBQVV6WSxHQUNkLE1BQU93c0IsR0FDUCxPQUFPLEVBR1gsTUFBTXh1QixFQUFNODVELEVBQWE5M0QsRUFBRTY4QixjQUMzQixPQUFZLE9BQVI3K0IsR0FHa0IsSUFBZkEsRUFBSWdFLFFBSWYsU0FBUzQwRCxJQUNQLE1BQU1oMUMsRUFBT3BiLE1BQU15TCxLQUFLbE8sV0FDeEIsU0FBUyt6RCxFQUFjOTNELEdBQ3JCLE9BQUlBLEVBQUVnQyxPQUFTNGYsRUFBSzVmLE9BQ1gsTUFFVDRmLEVBQUsxUyxLQUFNekosSUFLVCxHQUFVLFFBSlZ6RixFQUFtQixtQkFBUnlGLEVBQ1BBLElBQU1xeUQsYUFBYTkzRCxHQUNuQnlGLEVBQUlxeUQsYUFBYTkzRCxJQUduQixPQUFPLElBSUpBLEdBR1QsTUFBTyxDQUNMa0MsU0FBVSxXQUFjLE1BQU8sS0FBTzBmLEVBQUt6Z0IsS0FBSyxLQUFPLE1BQ3ZEeVcsTUFBT2dLLEVBQ1BqSixRQUFTay9DLEVBQW9CQyxHQUM3QkEsYUFBY0EsR0FJbEIsU0FBU2pGLElBQ1AsTUFBTWp4QyxFQUFPcGIsTUFBTXlMLEtBQUtsTyxXQUV4QixTQUFTK3pELEVBQWM5M0QsR0FDckIsSUFBSWhDLEVBQU0sS0FXVixPQVZBNGpCLEVBQUsxUyxLQUFNekosSUFDVCxNQUFNd0MsRUFBcUIsbUJBQVJ4QyxFQUNmQSxJQUFNcXlELGFBQWE5M0QsR0FDbkJ5RixFQUFJcXlELGFBQWE5M0QsR0FDckIsR0FBSWlJLEVBRUYsT0FEQWpLLEVBQU1pSyxHQUNDLElBSUpqSyxFQUdULE1BQU02RixFQUFTLENBQ2IzQixTQUFVLFdBQWMsTUFBTyxLQUFPMGYsRUFBS3pnQixLQUFLLEtBQU8sTUFDdkR5VyxNQUFPZ0ssRUFDUGpKLFFBQVNrL0MsRUFBb0JDLEdBQzdCQSxhQUFjQSxHQUdoQixPQUFPajBELEVBR1QsU0FBUzJuQixFQUFNeHVCLEdBQ2IsTUFBTWxCLEVBQU9rQixFQTZCYixNQUFPLENBQ0xrRixTQUFVLFdBQWMsT0FBT3BHLEdBQy9CNmMsUUE3QkYsU0FBa0IzWSxHQUNoQixHQUFpQixpQkFBTkEsRUFDVCxJQUNFQSxFQUFJeVksRUFBVXpZLEdBQ2QsTUFBT3dzQixHQUNQLE9BQU8sRUFJWCxNQUFNdXJDLEVBQVMvM0QsRUFBRTY4QixhQUNqQixPQUFzQixJQUFsQms3QixFQUFPLzFELFFBQWdCKzFELEVBQU8sS0FBT2o4RCxHQW9CekNnOEQsYUFkRixTQUF1QjM3QixHQUNyQixPQUFzQixJQUFsQkEsRUFBT242QixPQUNGLEtBR0xtNkIsRUFBTyxLQUFPcmdDLEVBQ1RxZ0MsRUFBTy8yQixNQUFNLEdBRWYsT0EzSFh0SyxFQUFRMjdELElBQU1BLEVBQ2QzN0QsRUFBUXk3RCxLQUFPQSxFQUNmejdELEVBQVEwN0QsS0FBT0EsRUFDZjE3RCxFQUFRNDdELEdBQUtBLEVBQ2I1N0QsRUFBUTY3RCxJQUFNQSxFQUNkNzdELEVBQVErN0QsSUFBTUEsRUFDZC83RCxFQUFRZzhELElBQU1BLEVBQ2RoOEQsRUFBUW04RCxLQUFPQSxFQUNmbjhELEVBQVFvOEQsTUFBUUEsRUFDaEJwOEQsRUFBUWk4RCxXQUFhQSxFQUNyQmo4RCxFQUFRazhELGlCQUFtQkEsRUFDM0JsOEQsRUFBUXM4RCxjQUFnQkEsRUFDeEJ0OEQsRUFBUXE4RCxXQUFhQSxFQUNyQnI4RCxFQUFRdThELGFBQWVBLEVBQ3ZCdjhELEVBQVF3OEQsU0FBV0EsRUFDbkJ4OEQsRUFBUXk4RCxTQUFXQSxFQUNuQno4RCxFQUFRNjhELFFBQVVBLEVBQ2xCNzhELEVBQVE4OEQsSUFBTUEsRUFDZDk4RCxFQUFRNGQsS0FBT2svQyxHLHdGQzdIQSxTQUF1Qmx5RCxFQUFjQyxFQUFvQm04QyxFQUFhQyxHQUlqRixJQUhBLElBQUFlLGlCQUFnQnA5QyxFQUFjQyxJQUM5QixJQUFBWSw0QkFBMkJ3N0MsSUFFdEJELEVBQ0QsTUFBTSxJQUFJbDhDLE1BQU0sc0VBR3BCLElBQUtjLFVBQU9rUyxJQUFJa3BDLEdBQ1osTUFBTSxJQUFJbDhDLE1BQU0sNENBR3BCLElBQUttOEMsRUFDRCxNQUFNLElBQUluOEMsTUFBTSxpRUFHcEIsSUFBTW05QyxFQUFXLEdBQUgsT0FBTUMsVUFBTiwwQkFDUlgsRUFBTyxDQUNUUCxZQUFhQSxFQUNiQyxhQUFjQSxHQUdsQixPQUFPLElBQUlwL0IsU0FBUSxTQUFDVyxFQUFTUyxHQUN6QnEvQixVQUFNNFUsSUFDRmpWLEVBQ0FWLEVBQ0EsQ0FDSWlCLGlCQUFpQixFQUNqQjc3QixRQUFTLENBQ0wsZUFBa0IvaEIsRUFDbEIsc0JBQXlCQyxLQUU5QjZkLE1BQUssU0FBVTNmLEdBQ0ksTUFBbEJBLEVBQU8wa0IsUUFDUHhFLEVBQU8sSUFBSW5lLE1BQUosc0VBQXlFL0IsS0FFcEZ5ZixFQUFRemYsRUFBT3FOLFNBYm5CLE9BY1MsU0FBVTRYLEdBRVhBLEdBQVNBLEVBQU1ELFVBQVlDLEVBQU1ELFVBQVlDLEVBQU1ELFNBQVMzWCxNQUFRNFgsRUFBTUQsU0FBUzNYLEtBQUs0WCxNQUN4Ri9FLEVBQU8sSUFBSW5lLE1BQU1rakIsRUFBTUQsU0FBUzNYLEtBQUs0WCxRQUVyQy9FLEVBQU8rRSxVQS9DdkIsZUFDQSxRQUNBLFFBQ0EsVyxnS0NHZSxTQUF1QnBqQixFQUFjQyxFQUFvQnN5RCxFQUFZaHlELEdBR2hGLE9BRkEsSUFBQTY4QyxpQkFBZ0JwOUMsRUFBY0MsR0FFdkIsSUFBSWdkLFNBQVEsU0FBQ1csRUFBU1MsR0FFekIsSUFBTTdTLEVBQU8sSUFBSWduRCxVQUVqQmhuRCxFQUFLeXVCLE9BQU8sT0FBUXM0QixHQUVwQixJQUFNbFYsRUFBVyxHQUFILE9BQU1DLFVBQU4sMEJBRVJpVixhQUFzQnZQLFVBQU95UCxVQUMvQnAwQyxFQUFPLElBQUluZSxNQUFNLHdDQUdqQkssSUFDSUEsRUFBUWk5QyxrQkFDUixJQUFBQyxrQkFBaUJsOUMsRUFBUWk5QyxnQkFDekJoeUMsRUFBS3l1QixPQUFPLGlCQUFrQjdYLEtBQUtDLFVBQVU5aEIsRUFBUWk5QyxrQkFFckRqOUMsRUFBUWc5QyxpQkFDUixJQUFBbVYsdUJBQXNCbnlELEVBQVFnOUMsZUFDOUIveEMsRUFBS3l1QixPQUFPLGdCQUFpQjdYLEtBQUtDLFVBQVU5aEIsRUFBUWc5QyxrQkFJNURHLFVBQU1DLEtBQ0ZOLEVBQ0E3eEMsRUFDQSxDQUNJb3lDLGlCQUFpQixFQUNqQmo3QixpQkFBa0IsV0FDbEJaLFFBQVMsQ0FDTCx3REFBa0R2VyxFQUFLMHdCLFdBQ3ZELGVBQWtCbDhCLEVBQ2xCLHNCQUF5QkMsS0FFOUI2ZCxNQUFLLFNBQVUzZixHQUNJLE1BQWxCQSxFQUFPMGtCLFFBQ1B4RSxFQUFPLElBQUluZSxNQUFKLDhEQUFpRS9CLEtBRTVFeWYsRUFBUXpmLEVBQU9xTixTQWZuQixPQWdCUyxTQUFVNFgsR0FFWEEsR0FBU0EsRUFBTUQsVUFBWUMsRUFBTUQsVUFBWUMsRUFBTUQsU0FBUzNYLE1BQVE0WCxFQUFNRCxTQUFTM1gsS0FBSzRYLE1BQ3hGL0UsRUFBTyxJQUFJbmUsTUFBTWtqQixFQUFNRCxTQUFTM1gsS0FBSzRYLFFBRXJDL0UsRUFBTytFLFVBckR2QixlQUNBLFFBQ0EsWUFDQSxXQUNBLFEsd0ZDSkEsSUFBSWtXLEVBQU8sRUFBUSxJQUNmcTVCLEVBQVMsRUFBUSxJQUFVQSxPQUMzQkMsRUFBZ0IsRUFBUSxLQUc1QixTQUFTdjVCLElBQ1A1akMsS0FBS2tWLFVBQVcsRUFDaEJsVixLQUFLa2xDLFVBQVcsRUFDaEJsbEMsS0FBS285RCxTQUFXLEVBQ2hCcDlELEtBQUtxOUQsWUFBYyxRQUNuQnI5RCxLQUFLczlELGNBQWUsRUFFcEJ0OUQsS0FBS3U5RCxXQUFZLEVBQ2pCdjlELEtBQUtvbUMsU0FBVyxHQUNoQnBtQyxLQUFLdzlELGVBQWlCLEtBQ3RCeDlELEtBQUt5OUQsYUFBYyxFQUNuQno5RCxLQUFLMDlELGNBQWUsRUFadEI5OUQsRUFBT0QsUUFBVWlrQyxFQWNqQkMsRUFBS1MsU0FBU1YsRUFBZ0JzNUIsR0FFOUJ0NUIsRUFBZWxpQyxPQUFTLFNBQVNvSixHQUMvQixJQUFJNnlELEVBQWlCLElBQUkzOUQsS0FHekIsSUFBSyxJQUFJa2tDLEtBRFRwNUIsRUFBVUEsR0FBVyxHQUVuQjZ5RCxFQUFlejVCLEdBQVVwNUIsRUFBUW81QixHQUduQyxPQUFPeTVCLEdBR1QvNUIsRUFBZWc2QixhQUFlLFNBQVNyUSxHQUNyQyxNQUEwQixtQkFBWEEsR0FDUyxpQkFBWEEsR0FDVyxrQkFBWEEsR0FDVyxpQkFBWEEsSUFDTnJ3QyxPQUFPcFcsU0FBU3ltRCxJQUd6QjNwQixFQUFlNWhDLFVBQVV3aUMsT0FBUyxTQUFTK29CLEdBR3pDLEdBRm1CM3BCLEVBQWVnNkIsYUFBYXJRLEdBRTdCLENBQ2hCLEtBQU1BLGFBQWtCNFAsR0FBZ0IsQ0FDdEMsSUFBSVUsRUFBWVYsRUFBY3o3RCxPQUFPNnJELEVBQVEsQ0FDM0M4UCxZQUFhdDZDLElBQ2IrNkMsWUFBYTk5RCxLQUFLczlELGVBRXBCL1AsRUFBT3R6QixHQUFHLE9BQVFqNkIsS0FBSys5RCxlQUFlbjhELEtBQUs1QixPQUMzQ3V0RCxFQUFTc1EsRUFHWDc5RCxLQUFLZytELGNBQWN6USxHQUVmdnRELEtBQUtzOUQsY0FDUC9QLEVBQU9sb0IsUUFLWCxPQURBcmxDLEtBQUtvbUMsU0FBU3A1QixLQUFLdWdELEdBQ1p2dEQsTUFHVDRqQyxFQUFlNWhDLFVBQVVrRyxLQUFPLFNBQVMrMUQsRUFBTW56RCxHQUc3QyxPQUZBb3lELEVBQU9sN0QsVUFBVWtHLEtBQUszSCxLQUFLUCxLQUFNaStELEVBQU1uekQsR0FDdkM5SyxLQUFLc2xDLFNBQ0UyNEIsR0FHVHI2QixFQUFlNWhDLFVBQVVrOEQsU0FBVyxXQUdsQyxHQUZBbCtELEtBQUt3OUQsZUFBaUIsS0FFbEJ4OUQsS0FBS3k5RCxZQUNQejlELEtBQUswOUQsY0FBZSxNQUR0QixDQUtBMTlELEtBQUt5OUQsYUFBYyxFQUNuQixJQUNFLEdBQ0V6OUQsS0FBSzA5RCxjQUFlLEVBQ3BCMTlELEtBQUttK0QscUJBQ0VuK0QsS0FBSzA5RCxjQUNkLFFBQ0ExOUQsS0FBS3k5RCxhQUFjLEtBSXZCNzVCLEVBQWU1aEMsVUFBVW04RCxhQUFlLFdBQ3RDLElBQUk1USxFQUFTdnRELEtBQUtvbUMsU0FBUytpQixhQUdOLElBQVZvRSxFQUtXLG1CQUFYQSxFQUtLQSxFQUNOLFNBQVNBLEdBQ0UzcEIsRUFBZWc2QixhQUFhclEsS0FFN0NBLEVBQU90ekIsR0FBRyxPQUFRajZCLEtBQUsrOUQsZUFBZW44RCxLQUFLNUIsT0FDM0NBLEtBQUtnK0QsY0FBY3pRLElBR3JCdnRELEtBQUtvK0QsVUFBVTdRLElBQ2YzckQsS0FBSzVCLE9BYkxBLEtBQUtvK0QsVUFBVTdRLEdBTGZ2dEQsS0FBS21VLE9BcUJUeXZCLEVBQWU1aEMsVUFBVW84RCxVQUFZLFNBQVM3USxHQUk1QyxHQUhBdnRELEtBQUt3OUQsZUFBaUJqUSxFQUVIM3BCLEVBQWVnNkIsYUFBYXJRLEdBSTdDLE9BRkFBLEVBQU90ekIsR0FBRyxNQUFPajZCLEtBQUtrK0QsU0FBU3Q4RCxLQUFLNUIsWUFDcEN1dEQsRUFBT3JsRCxLQUFLbEksS0FBTSxDQUFDbVUsS0FBSyxJQUkxQixJQUFJOVMsRUFBUWtzRCxFQUNadnRELEtBQUtzWixNQUFNalksR0FDWHJCLEtBQUtrK0QsWUFHUHQ2QixFQUFlNWhDLFVBQVVnOEQsY0FBZ0IsU0FBU3pRLEdBQ2hELElBQUl4dEQsRUFBT0MsS0FDWHV0RCxFQUFPdHpCLEdBQUcsU0FBUyxTQUFTNUksR0FDMUJ0eEIsRUFBS3MrRCxXQUFXaHRDLE9BSXBCdVMsRUFBZTVoQyxVQUFVc1gsTUFBUSxTQUFTdkQsR0FDeEMvVixLQUFLcTdCLEtBQUssT0FBUXRsQixJQUdwQjZ0QixFQUFlNWhDLFVBQVVxakMsTUFBUSxXQUMxQnJsQyxLQUFLczlELGVBSVB0OUQsS0FBS3M5RCxjQUFnQnQ5RCxLQUFLdzlELGdCQUF1RCxtQkFBOUJ4OUQsS0FBS3c5RCxlQUFvQixPQUFpQng5RCxLQUFLdzlELGVBQWVuNEIsUUFDcEhybEMsS0FBS3E3QixLQUFLLFdBR1p1SSxFQUFlNWhDLFVBQVVzakMsT0FBUyxXQUMzQnRsQyxLQUFLdTlELFlBQ1J2OUQsS0FBS3U5RCxXQUFZLEVBQ2pCdjlELEtBQUtrVixVQUFXLEVBQ2hCbFYsS0FBS2srRCxZQUdKbCtELEtBQUtzOUQsY0FBZ0J0OUQsS0FBS3c5RCxnQkFBd0QsbUJBQS9CeDlELEtBQUt3OUQsZUFBcUIsUUFBaUJ4OUQsS0FBS3c5RCxlQUFlbDRCLFNBQ3JIdGxDLEtBQUtxN0IsS0FBSyxXQUdadUksRUFBZTVoQyxVQUFVbVMsSUFBTSxXQUM3Qm5VLEtBQUtzK0QsU0FDTHQrRCxLQUFLcTdCLEtBQUssUUFHWnVJLEVBQWU1aEMsVUFBVTA2QixRQUFVLFdBQ2pDMThCLEtBQUtzK0QsU0FDTHQrRCxLQUFLcTdCLEtBQUssVUFHWnVJLEVBQWU1aEMsVUFBVXM4RCxPQUFTLFdBQ2hDdCtELEtBQUtrVixVQUFXLEVBQ2hCbFYsS0FBS29tQyxTQUFXLEdBQ2hCcG1DLEtBQUt3OUQsZUFBaUIsTUFHeEI1NUIsRUFBZTVoQyxVQUFVKzdELGVBQWlCLFdBRXhDLEdBREEvOUQsS0FBS3UrRCxvQkFDRHYrRCxLQUFLbzlELFVBQVlwOUQsS0FBS3E5RCxhQUExQixDQUlBLElBQUkvdkMsRUFDRixnQ0FBa0N0dEIsS0FBS3E5RCxZQUFjLG1CQUN2RHI5RCxLQUFLcStELFdBQVcsSUFBSTV6RCxNQUFNNmlCLE1BRzVCc1csRUFBZTVoQyxVQUFVdThELGdCQUFrQixXQUN6Q3YrRCxLQUFLbzlELFNBQVcsRUFFaEIsSUFBSXI5RCxFQUFPQyxLQUNYQSxLQUFLb21DLFNBQVNuL0IsU0FBUSxTQUFTc21ELEdBQ3hCQSxFQUFPNlAsV0FJWnI5RCxFQUFLcTlELFVBQVk3UCxFQUFPNlAsYUFHdEJwOUQsS0FBS3c5RCxnQkFBa0J4OUQsS0FBS3c5RCxlQUFlSixXQUM3Q3A5RCxLQUFLbzlELFVBQVlwOUQsS0FBS3c5RCxlQUFlSixXQUl6Q3g1QixFQUFlNWhDLFVBQVVxOEQsV0FBYSxTQUFTaHRDLEdBQzdDcnhCLEtBQUtzK0QsU0FDTHQrRCxLQUFLcTdCLEtBQUssUUFBU2hLLEssZ0JDOU1yQixJQUFJNnJDLEVBQVMsRUFBUSxJQUFVQSxPQUMzQnI1QixFQUFPLEVBQVEsSUFHbkIsU0FBU3M1QixJQUNQbjlELEtBQUsyQyxPQUFTLEtBQ2QzQyxLQUFLbzlELFNBQVcsRUFDaEJwOUQsS0FBS3E5RCxZQUFjLFFBQ25CcjlELEtBQUs4OUQsYUFBYyxFQUVuQjk5RCxLQUFLdytELHNCQUF1QixFQUM1QngrRCxLQUFLdTlELFdBQVksRUFDakJ2OUQsS0FBS3krRCxnQkFBa0IsR0FUekI3K0QsRUFBT0QsUUFBVXc5RCxFQVdqQnQ1QixFQUFLUyxTQUFTNjRCLEVBQWVELEdBRTdCQyxFQUFjejdELE9BQVMsU0FBU2lCLEVBQVFtSSxHQUN0QyxJQUFJNHpELEVBQWdCLElBQUkxK0QsS0FHeEIsSUFBSyxJQUFJa2tDLEtBRFRwNUIsRUFBVUEsR0FBVyxHQUVuQjR6RCxFQUFjeDZCLEdBQVVwNUIsRUFBUW81QixHQUdsQ3c2QixFQUFjLzdELE9BQVNBLEVBRXZCLElBQUlnOEQsRUFBV2g4RCxFQUFPMDRCLEtBV3RCLE9BVkExNEIsRUFBTzA0QixLQUFPLFdBRVosT0FEQXFqQyxFQUFjRSxZQUFZaDJELFdBQ25CKzFELEVBQVMzMEQsTUFBTXJILEVBQVFpRyxZQUdoQ2pHLEVBQU9zM0IsR0FBRyxTQUFTLGVBQ2Z5a0MsRUFBY1osYUFDaEJuN0QsRUFBTzBpQyxRQUdGcTVCLEdBR1Q1OUQsT0FBT0MsZUFBZW84RCxFQUFjbjdELFVBQVcsV0FBWSxDQUN6RGlULGNBQWMsRUFDZGpVLFlBQVksRUFDWkMsSUFBSyxXQUNILE9BQU9qQixLQUFLMkMsT0FBT3VpQyxZQUl2Qmk0QixFQUFjbjdELFVBQVU2OEQsWUFBYyxXQUNwQyxPQUFPNytELEtBQUsyQyxPQUFPazhELFlBQVk3MEQsTUFBTWhLLEtBQUsyQyxPQUFRaUcsWUFHcER1MEQsRUFBY243RCxVQUFVc2pDLE9BQVMsV0FDMUJ0bEMsS0FBS3U5RCxXQUNSdjlELEtBQUtrd0QsVUFHUGx3RCxLQUFLMkMsT0FBTzJpQyxVQUdkNjNCLEVBQWNuN0QsVUFBVXFqQyxNQUFRLFdBQzlCcmxDLEtBQUsyQyxPQUFPMGlDLFNBR2Q4M0IsRUFBY243RCxVQUFVa3VELFFBQVUsV0FDaENsd0QsS0FBS3U5RCxXQUFZLEVBRWpCdjlELEtBQUt5K0QsZ0JBQWdCeDNELFFBQVEsU0FBU3dmLEdBQ3BDem1CLEtBQUtxN0IsS0FBS3J4QixNQUFNaEssS0FBTXltQixJQUN0QjdrQixLQUFLNUIsT0FDUEEsS0FBS3krRCxnQkFBa0IsSUFHekJ0QixFQUFjbjdELFVBQVVrRyxLQUFPLFdBQzdCLElBQUloSCxFQUFJZzhELEVBQU9sN0QsVUFBVWtHLEtBQUs4QixNQUFNaEssS0FBTTRJLFdBRTFDLE9BREE1SSxLQUFLc2xDLFNBQ0Vwa0MsR0FHVGk4RCxFQUFjbjdELFVBQVU0OEQsWUFBYyxTQUFTbjRDLEdBQ3pDem1CLEtBQUt1OUQsVUFDUHY5RCxLQUFLcTdCLEtBQUtyeEIsTUFBTWhLLEtBQU15bUIsSUFJUixTQUFaQSxFQUFLLEtBQ1B6bUIsS0FBS285RCxVQUFZMzJDLEVBQUssR0FBRzVmLE9BQ3pCN0csS0FBSzgrRCwrQkFHUDkrRCxLQUFLeStELGdCQUFnQnp4RCxLQUFLeVosS0FHNUIwMkMsRUFBY243RCxVQUFVODhELDRCQUE4QixXQUNwRCxLQUFJOStELEtBQUt3K0Qsc0JBSUx4K0QsS0FBS285RCxVQUFZcDlELEtBQUtxOUQsYUFBMUIsQ0FJQXI5RCxLQUFLdytELHNCQUF1QixFQUM1QixJQUFJbHhDLEVBQ0YsZ0NBQWtDdHRCLEtBQUtxOUQsWUFBYyxtQkFDdkRyOUQsS0FBS3E3QixLQUFLLFFBQVMsSUFBSTV3QixNQUFNNmlCLE87Ozs7OztHQzNGL0IsSUEySXVCeXhDLEVBQVlDLEVBRTdCQyxFQTdJRkMsRUFBSyxFQUFRLEtBQ2JDLEVBQVUsRUFBUSxJQUFRQSxRQU8xQkMsRUFBc0IsMEJBQ3RCQyxFQUFtQixXQXlCdkIsU0FBU0MsRUFBUzU4RCxHQUNoQixJQUFLQSxHQUF3QixpQkFBVEEsRUFDbEIsT0FBTyxFQUlULElBQUlzYSxFQUFRb2lELEVBQW9COTZELEtBQUs1QixHQUNqQ3FoQyxFQUFPL21CLEdBQVNraUQsRUFBR2xpRCxFQUFNLEdBQUdwVyxlQUVoQyxPQUFJbTlCLEdBQVFBLEVBQUt1N0IsUUFDUnY3QixFQUFLdTdCLFdBSVZ0aUQsSUFBU3FpRCxFQUFpQjE0RCxLQUFLcVcsRUFBTSxNQUNoQyxRQWpDWHJkLEVBQVEyL0QsUUFBVUEsRUFDbEIzL0QsRUFBUTQvRCxTQUFXLENBQUVwNUIsT0FBUW01QixHQUM3QjMvRCxFQUFROGxDLFlBNENSLFNBQXNCeDhCLEdBRXBCLElBQUtBLEdBQXNCLGlCQUFSQSxFQUNqQixPQUFPLEVBR1QsSUFBSTg2QixHQUE2QixJQUF0Qjk2QixFQUFJdUssUUFBUSxLQUNuQjdULEVBQVF3bUMsT0FBT2w5QixHQUNmQSxFQUVKLElBQUs4NkIsRUFDSCxPQUFPLEVBSVQsSUFBaUMsSUFBN0JBLEVBQUt2d0IsUUFBUSxXQUFtQixDQUNsQyxJQUFJOHJELEVBQVUzL0QsRUFBUTIvRCxRQUFRdjdCLEdBQzFCdTdCLElBQVN2N0IsR0FBUSxhQUFldTdCLEVBQVExNEQsZUFHOUMsT0FBT205QixHQS9EVHBrQyxFQUFRNi9ELFVBeUVSLFNBQW9COThELEdBQ2xCLElBQUtBLEdBQXdCLGlCQUFUQSxFQUNsQixPQUFPLEVBSVQsSUFBSXNhLEVBQVFvaUQsRUFBb0I5NkQsS0FBSzVCLEdBR2pDKzhELEVBQU96aUQsR0FBU3JkLEVBQVFvL0QsV0FBVy9oRCxFQUFNLEdBQUdwVyxlQUVoRCxJQUFLNjRELElBQVNBLEVBQUs1NEQsT0FDakIsT0FBTyxFQUdULE9BQU80NEQsRUFBSyxJQXZGZDkvRCxFQUFRby9ELFdBQWFqK0QsT0FBT1ksT0FBTyxNQUNuQy9CLEVBQVF3bUMsT0FnR1IsU0FBaUJqb0IsR0FDZixJQUFLQSxHQUF3QixpQkFBVEEsRUFDbEIsT0FBTyxFQUlULElBQUlzaEQsRUFBWUwsRUFBUSxLQUFPamhELEdBQzVCdFgsY0FDQWkxQixPQUFPLEdBRVYsSUFBSzJqQyxFQUNILE9BQU8sRUFHVCxPQUFPNy9ELEVBQVFxL0QsTUFBTVEsS0FBYyxHQTdHckM3L0QsRUFBUXEvRCxNQUFRbCtELE9BQU9ZLE9BQU8sTUFxSFBxOUQsRUFsSFZwL0QsRUFBUW8vRCxXQWtIY0MsRUFsSEZyL0QsRUFBUXEvRCxNQW9IbkNDLEVBQWEsQ0FBQyxRQUFTLGNBQVV0N0QsRUFBVyxRQUVoRDdDLE9BQU80TyxLQUFLd3ZELEdBQUlqNEQsU0FBUSxTQUEwQnZFLEdBQ2hELElBQUlxaEMsRUFBT203QixFQUFHeDhELEdBQ1YrOEQsRUFBTzE3QixFQUFLZzdCLFdBRWhCLEdBQUtVLEdBQVNBLEVBQUs1NEQsT0FBbkIsQ0FLQWs0RCxFQUFXcjhELEdBQVErOEQsRUFHbkIsSUFBSyxJQUFJci9ELEVBQUksRUFBR0EsRUFBSXEvRCxFQUFLNTRELE9BQVF6RyxJQUFLLENBQ3BDLElBQUlvL0QsRUFBWUMsRUFBS3IvRCxHQUVyQixHQUFJNCtELEVBQU1RLEdBQVksQ0FDcEIsSUFBSTFvRCxFQUFPbW9ELEVBQVd6ckQsUUFBUTByRCxFQUFHRixFQUFNUSxJQUFZNzhELFFBQy9Db3lCLEVBQUtrcUMsRUFBV3pyRCxRQUFRdXdCLEVBQUtwaEMsUUFFakMsR0FBeUIsNkJBQXJCcThELEVBQU1RLEtBQ1Axb0QsRUFBT2llLEdBQU9qZSxJQUFTaWUsR0FBeUMsaUJBQW5DaXFDLEVBQU1RLEdBQVczakMsT0FBTyxFQUFHLEtBRXpELFNBS0ptakMsRUFBTVEsR0FBYTk4RCxROzs7Ozs7QUM5S3pCOUMsRUFBT0QsUUFBVSxFQUFRLE0sK2h2SUNWekJDLEVBQU9ELFFBQ1AsQ0FDRXNuQyxTQUFnQixFQUFRLEtBQ3hCeTRCLE9BQWdCLEVBQVEsS0FDeEJDLGNBQWdCLEVBQVEsTyxnQkNKMUIsSUFBSTEzQixFQUFhLEVBQVEsS0FDckJGLEVBQWEsRUFBUSxLQUNyQkcsRUFBYSxFQUFRLEtBSXpCdG9DLEVBQU9ELFFBVVAsU0FBa0JtUyxFQUFNTyxFQUFVNm9CLEdBRWhDLElBQUlrTSxFQUFRVyxFQUFVajJCLEdBRXRCLEtBQU9zMUIsRUFBTXI2QixPQUFTcTZCLEVBQWlCLFdBQUt0MUIsR0FBTWpMLFFBRWhEb2hDLEVBQVFuMkIsRUFBTU8sRUFBVSswQixHQUFPLFNBQVN6WixFQUFPamxCLEdBRXpDaWxCLEVBRUZ1TixFQUFTdk4sRUFBT2psQixHQUtxQixJQUFuQzVILE9BQU80TyxLQUFLMDNCLEVBQU1DLE1BQU14Z0MsUUFFMUJxMEIsRUFBUyxLQUFNa00sRUFBTU0sWUFLekJOLEVBQU1yNkIsUUFHUixPQUFPbTdCLEVBQVd0bUMsS0FBS3dsQyxFQUFPbE0sSyxjQ3pDaEN0N0IsRUFBT0QsUUFPUCxTQUFld0gsR0FFYixJQUFJdWYsRUFBa0MsbUJBQWhCWCxhQUNsQkEsYUFFa0IsaUJBQVhGLFNBQWtELG1CQUFwQkEsUUFBUWEsU0FDM0NiLFFBQVFhLFNBQ1IsS0FHRkEsRUFFRkEsRUFBU3ZmLEdBSVRnZ0IsV0FBV2hnQixFQUFJLEssZ0JDdkJuQixJQUFJdzRELEVBQWdCLEVBQVEsS0FHNUIvL0QsRUFBT0QsUUFVUCxTQUFnQm1TLEVBQU1PLEVBQVU2b0IsR0FFOUIsT0FBT3lrQyxFQUFjN3RELEVBQU1PLEVBQVUsS0FBTTZvQixLLGNDZDdDdDdCLEVBQU9ELFFBQVUsU0FBU2d5RCxFQUFLajlDLEdBTzdCLE9BTEE1VCxPQUFPNE8sS0FBS2dGLEdBQUt6TixTQUFRLFNBQVMyK0IsR0FFaEMrckIsRUFBSS9yQixHQUFRK3JCLEVBQUkvckIsSUFBU2x4QixFQUFJa3hCLE1BR3hCK3JCLEksd0ZDQU0sU0FBbUJwbkQsRUFBY0MsRUFBb0J3OEMsRUFBWWw4QyxHQUc1RSxPQUZBLElBQUE2OEMsaUJBQWdCcDlDLEVBQWNDLEdBRXZCLElBQUlnZCxTQUFRLFNBQUNXLEVBQVNTLEdBQ3pCLElBQU1nL0IsRUFBVyxHQUFILE9BQU1DLFVBQU4sMEJBRWQrWCxFQUFVN3VDLFNBQVNpMkIsR0FBWSxTQUFVMzFCLEVBQUtKLEVBQU1DLEdBQzVDRyxHQUNBekksRUFBTyxJQUFJbmUsTUFBTTRtQixJQUdyQixJQUFJdGIsRUFBTyxJQUFJZ25ELFVBRWY3ckMsRUFBTWpxQixTQUFRLFNBQUM0NEQsR0FFWDlwRCxFQUFLeXVCLE9BQU8sT0FBUTFULEVBQUdndkMsaUJBQWlCRCxHQUFPLENBQzNDLzVCLFVBQVUsYUFBa0JraEIsRUFBWTZZLFFBSTVDLzBELElBQ0lBLEVBQVFpOUMsa0JBQ1IsSUFBQUMsa0JBQWlCbDlDLEVBQVFpOUMsZ0JBQ3pCaHlDLEVBQUt5dUIsT0FBTyxpQkFBa0I3WCxLQUFLQyxVQUFVOWhCLEVBQVFpOUMsa0JBRXJEajlDLEVBQVFnOUMsaUJBQ1IsSUFBQW1WLHVCQUFzQm55RCxFQUFRZzlDLGVBQzlCL3hDLEVBQUt5dUIsT0FBTyxnQkFBaUI3WCxLQUFLQyxVQUFVOWhCLEVBQVFnOUMsa0JBSTVERyxVQUFNQyxLQUNGTixFQUNBN3hDLEVBQ0EsQ0FDSW95QyxpQkFBaUIsRUFDakJqN0IsaUJBQWtCLFdBQ2xCWixRQUFTLENBQ0wsd0RBQWtEdlcsRUFBSzB3QixXQUN2RCxlQUFrQmw4QixFQUNsQixzQkFBeUJDLEtBRTlCNmQsTUFBSyxTQUFVM2YsR0FDSSxNQUFsQkEsRUFBTzBrQixRQUNQeEUsRUFBTyxJQUFJbmUsTUFBSiw4REFBaUUvQixLQUU1RXlmLEVBQVF6ZixFQUFPcU4sU0FmbkIsT0FnQlMsU0FBVTRYLEdBRVhBLEdBQVNBLEVBQU1ELFVBQVlDLEVBQU1ELFVBQVlDLEVBQU1ELFNBQVMzWCxNQUFRNFgsRUFBTUQsU0FBUzNYLEtBQUs0WCxNQUN4Ri9FLEVBQU8sSUFBSW5lLE1BQU1rakIsRUFBTUQsU0FBUzNYLEtBQUs0WCxRQUVyQy9FLEVBQU8rRSxhQTVEM0IsZUFDQSxRQUNBLFlBQ0EsUUFDQSxZLG1EQUNBLElBQU1tRCxFQUFLdlMsRUFBUSxJQUNicWhELEVBQVlyaEQsRUFBUSxLLG1DQ21CMUIzZSxFQUFPRCxRQXpCUCxTQUE0Q3FuRCxFQUFZK1ksR0FDcEQsSUFBSUMsRUFBYWhaLEVBQVdoWCxXQUFXLE1BQVFnWCxFQUFXMXNCLFVBQVUsR0FBSzBzQixFQUV6RSxNQUFNaVosRUFBdUJELEVBQVVud0QsWUFBWSxLQUNuRCxJQUE2QixJQUExQm93RCxFQUNDLE9BQU9GLEVBSVBFLElBRm1CalosRUFBV25nRCxPQUVhLElBQzNDbTVELEVBQVloWixFQUFXLzhDLE1BQU0sR0FBRyxJQUlwQyxNQUFNaTJELEVBQWVGLEVBQVVud0QsWUFBWSxLQUMzQyxJQUF1QixJQUFsQnF3RCxFQUNELE9BQU9GLEVBQ0osQ0FDSCxNQUFNRyxFQUFjSCxFQUFVMWxDLFVBQVUsRUFBRzRsQyxFQUFlLEdBQzFERixFQUFZRCxFQUFTcDZELE1BQU13NkQsR0FBYSxHQUc1QyxPQUFPSCxJLGdCQ3JCWHBnRSxFQUFPRCxRQUFVLENBQ2ZveEIsU0FBVSxFQUFRLEtBQWtCQSxTQUVwQ1ksT0FBUSxFQUFRLEtBQWdCQSxPQUNoQ0UsT0FBUSxFQUFRLEtBQWdCQSxPQUNoQ0QsUUFBUyxFQUFRLEtBQWdCQSxRQUVqQ0ksT0FBUSxFQUFRLEtBQWdCQSxPQUNoQ0csT0FBUSxFQUFRLEtBQWdCQSxPQUNoQ0MsUUFBUyxFQUFRLEtBQWdCQSxVLHdGQ05wQixTQUF1QjduQixFQUFjQyxFQUFvQjA4QyxFQUFNcDhDLElBQzFFLElBQUE2OEMsaUJBQWdCcDlDLEVBQWNDLEdBRTlCLElBQUk0MUQsRUFBY2xaLEVBRWxCLEdBQW9CLFdBQWhCLEVBQU9BLEdBQ1AsTUFBTSxJQUFJejhDLE1BQU0sb0NBR2hCSyxJQUNBczFELEVBQWMsQ0FDVkMsY0FBZW5aLEdBRWZwOEMsRUFBUWk5QyxrQkFDUixJQUFBQyxrQkFBaUJsOUMsRUFBUWk5QyxnQkFDekJxWSxFQUFZclksZUFBaUJqOUMsRUFBUWk5QyxnQkFFckNqOUMsRUFBUWc5QyxpQkFDUixJQUFBbVYsdUJBQXNCbnlELEVBQVFnOUMsZUFDOUJzWSxFQUFZdFksY0FBZ0JoOUMsRUFBUWc5QyxnQkFJNUMsSUFBTUYsRUFBVyxHQUFILE9BQU1DLFVBQU4sMEJBRWQsT0FBTyxJQUFJcmdDLFNBQVEsU0FBQ1csRUFBU1MsR0FDekJxL0IsVUFBTUMsS0FDRk4sRUFDQXdZLEVBQ0EsQ0FDSWpZLGlCQUFpQixFQUNqQjc3QixRQUFTLENBQ0wsZUFBa0IvaEIsRUFDbEIsc0JBQXlCQyxLQUU5QjZkLE1BQUssU0FBVTNmLEdBQ0ksTUFBbEJBLEVBQU8wa0IsUUFDUHhFLEVBQU8sSUFBSW5lLE1BQUosOERBQWlFL0IsS0FFNUV5ZixFQUFRemYsRUFBT3FOLFNBYm5CLE9BY1MsU0FBVTRYLEdBRVhBLEdBQVNBLEVBQU1ELFVBQVlDLEVBQU1ELFVBQVlDLEVBQU1ELFNBQVMzWCxNQUFRNFgsRUFBTUQsU0FBUzNYLEtBQUs0WCxNQUN4Ri9FLEVBQU8sSUFBSW5lLE1BQU1rakIsRUFBTUQsU0FBUzNYLEtBQUs0WCxRQUVyQy9FLEVBQU8rRSxVQWpEdkIsSSxFQUFBLEcsRUFBQSxRLDJCQUNBLFFBQ0EsUSxrVkNHZSxTQUFpQnBqQixFQUFjQyxFQUFvQjQ4QyxJQUM5RCxJQUFBTyxpQkFBZ0JwOUMsRUFBY0MsR0FFOUIsSUFBSW85QyxFQUFXLEdBQUgsT0FBTUMsVUFBTixvQkFFUlQsSUFDQVEsR0FBVyxhQUFhQSxFQUFVUixJQUd0QyxPQUFPLElBQUk1L0IsU0FBUSxTQUFDVyxFQUFTUyxHQUN6QnEvQixVQUFNaG5ELElBQ0YybUQsRUFDQSxDQUNJTyxpQkFBaUIsRUFDakI3N0IsUUFBUyxDQUNMLGVBQWtCL2hCLEVBQ2xCLHNCQUF5QkMsS0FFOUI2ZCxNQUFLLFNBQVUzZixHQUNJLE1BQWxCQSxFQUFPMGtCLFFBQ1B4RSxFQUFPLElBQUluZSxNQUFKLHlFQUE0RS9CLEtBRXZGeWYsRUFBUXpmLEVBQU9xTixTQVpuQixPQWFTLFNBQVU0WCxHQUVYQSxHQUFTQSxFQUFNRCxVQUFZQyxFQUFNRCxVQUFZQyxFQUFNRCxTQUFTM1gsTUFBUTRYLEVBQU1ELFNBQVMzWCxLQUFLNFgsTUFDeEYvRSxFQUFPLElBQUluZSxNQUFNa2pCLEVBQU1ELFNBQVMzWCxLQUFLNFgsUUFFckMvRSxFQUFPK0UsVUFqQ3ZCLGVBQ0EsUUFDQSxRQUNBLFksZ0tDRGUsU0FBc0JrNkIsRUFBU1QsR0FDMUMsSUFBS1MsRUFDRCxNQUFNLElBQUlwOUMsTUFBTSx1QkFHcEIsSUFBSzI4QyxFQUNELE9BQU9TLEVBR1gsSUFBSXlZLEVBQVN6WSxFQUVUMFksR0FBcUIsRUFFekIsU0FBU0MsRUFBVUMsR0FDWEYsRUFDQUQsRUFBUyxHQUFILE9BQU1BLEVBQU4sWUFBZ0JHLElBRXRCRixHQUFxQixFQUNyQkQsRUFBUyxHQUFILE9BQU1BLEVBQU4sWUFBZ0JHLElBSTlCLEdBQUlyWixFQUFTLENBRVQsR0FBSUEsRUFBUWgzQyxLQUFNLENBQ2QsR0FBcUIsUUFBakJnM0MsRUFBUWgzQyxNQUNTLFNBQWpCZzNDLEVBQVFoM0MsS0FHUixNQUFNLElBQUkzRixNQUFKLDhCQUFpQzI4QyxFQUFRaDNDLEtBQXpDLGNBRk5vd0QsRUFBVSxRQUFELE9BQVNwWixFQUFRaDNDLE9BTWxDLEdBQUlnM0MsRUFBUWg2QixPQUFRLENBQ2hCLEdBQXVCLGNBQW5CZzZCLEVBQVFoNkIsUUFDVyxZQUFuQmc2QixFQUFRaDZCLFFBQ1csb0JBQW5CZzZCLEVBQVFoNkIsUUFDVyxrQkFBbkJnNkIsRUFBUWg2QixRQUNXLG1CQUFuQmc2QixFQUFRaDZCLFFBQ1csa0JBQW5CZzZCLEVBQVFoNkIsT0FJUixNQUFNLElBQUkzaUIsTUFBSixnQ0FBbUMyOEMsRUFBUWg2QixPQUEzQyxjQUZOb3pDLEVBQVUsVUFBRCxPQUFXcFosRUFBUWg2QixTQU1wQyxHQUFJZzZCLEVBQVFzWixjQUFlLENBQ3ZCLElBQUluMUQsVUFBT2tTLElBQUkycEMsRUFBUXNaLGVBR25CLE1BQU0sSUFBSWoyRCxNQUFKLDZCQUFnQzI4QyxFQUFRc1osZ0JBRjlDRixFQUFVLGlCQUFELE9BQWtCcFosRUFBUXNaLGdCQU0zQyxHQUFJdFosRUFBUTdTLE1BQU8sQ0FDZixLQUFJem9DLE9BQU9DLFVBQVVxN0MsRUFBUTdTLFFBQVc2UyxFQUFRN1MsTUFBUSxHQUFPNlMsRUFBUTdTLE1BQVEsS0FHM0UsTUFBTSxJQUFJOXBDLE1BQUoseUJBQTRCMjhDLEVBQVE3UyxNQUFwQyw2QkFGTmlzQixFQUFVLFNBQUQsT0FBVXBaLEVBQVE3UyxRQU1uQyxHQUFJNlMsRUFBUTExQyxPQUFRLENBQ2hCLEtBQUk1RixPQUFPQyxVQUFVcTdDLEVBQVExMUMsU0FBWTAxQyxFQUFRMTFDLE9BQVMsR0FHdEQsTUFBTSxJQUFJakgsTUFBSiwwQkFBNkIyOEMsRUFBUTExQyxPQUFyQyx1REFGTjh1RCxFQUFVLFVBQUQsT0FBV3BaLEVBQVExMUMsVUFNeEMsT0FBTzR1RCxHQXpFWCxJLEVBQUEsRyxFQUFBLFEsd0lDS2UsU0FBZS8xRCxFQUFjQyxFQUFvQjg4QyxHQUc1RCxJQUZBLElBQUFLLGlCQUFnQnA5QyxFQUFjQyxJQUV6Qjg4QyxFQUNELE1BQU0sSUFBSTc4QyxNQUFNLGdFQUVwQixJQUFLYyxVQUFPa1MsSUFBSTZwQyxHQUNaLE1BQU0sSUFBSTc4QyxNQUFKLFVBQWE2OEMsRUFBYiw0QkFHVixJQUFNTSxFQUFXLEdBQUgsT0FBTUMsVUFBTiwwQkFBK0JQLEdBRTdDLE9BQU8sSUFBSTkvQixTQUFRLFNBQUNXLEVBQVNTLEdBQ3pCcS9CLGlCQUNJTCxFQUNBLENBQ0lPLGlCQUFpQixFQUNqQjc3QixRQUFTLENBQ0wsZUFBa0IvaEIsRUFDbEIsc0JBQXlCQyxLQUU5QjZkLE1BQUssU0FBVTNmLEdBQ0ksTUFBbEJBLEVBQU8wa0IsUUFDUHhFLEVBQU8sSUFBSW5lLE1BQUosZ0VBQW1FL0IsS0FFOUV5ZixFQUFRemYsRUFBT3FOLFNBWm5CLE9BYVMsU0FBVTRYLEdBRVhBLEdBQVNBLEVBQU1ELFVBQVlDLEVBQU1ELFVBQVlDLEVBQU1ELFNBQVMzWCxNQUFRNFgsRUFBTUQsU0FBUzNYLEtBQUs0WCxNQUN4Ri9FLEVBQU8sSUFBSW5lLE1BQU1rakIsRUFBTUQsU0FBUzNYLEtBQUs0WCxRQUVyQy9FLEVBQU8rRSxVQXBDdkIsZUFDQSxRQUNBLFFBQ0EsVyxnS0NDZSxTQUF1QnBqQixFQUFjQyxFQUFvQm84QyxHQUlwRSxJQUhBLElBQUFlLGlCQUFnQnA5QyxFQUFjQyxJQUM5QixJQUFBWSw0QkFBMkJ3N0MsSUFFdEJBLEVBQ0QsTUFBTSxJQUFJbjhDLE1BQU0saUVBR3BCLElBQU1tOUMsRUFBVyxHQUFILE9BQU1DLFVBQU4sMEJBQ1JYLEVBQU8sQ0FDVE4sYUFBY0EsR0FHbEIsT0FBTyxJQUFJcC9CLFNBQVEsU0FBQ1csRUFBU1MsR0FDekJxL0IsVUFBTTRVLElBQ0ZqVixFQUNBVixFQUNBLENBQ0lpQixpQkFBaUIsRUFDakI3N0IsUUFBUyxDQUNMLGVBQWtCL2hCLEVBQ2xCLHNCQUF5QkMsS0FFOUI2ZCxNQUFLLFNBQVUzZixHQUNJLE1BQWxCQSxFQUFPMGtCLFFBQ1B4RSxFQUFPLElBQUluZSxNQUFKLHNFQUF5RS9CLEtBRXBGeWYsRUFBUXpmLEVBQU9xTixTQWJuQixPQWNTLFNBQVU0WCxHQUVYQSxHQUFTQSxFQUFNRCxVQUFZQyxFQUFNRCxVQUFZQyxFQUFNRCxTQUFTM1gsTUFBUTRYLEVBQU1ELFNBQVMzWCxLQUFLNFgsTUFDeEYvRSxFQUFPLElBQUluZSxNQUFNa2pCLEVBQU1ELFNBQVMzWCxLQUFLNFgsUUFFckMvRSxFQUFPK0UsVUFyQ3ZCLEksRUFBQSxHLEVBQUEsUSwyQkFDQSxRQUNBLFEsNkdDRWUsU0FBNEJwakIsRUFBY0MsSUFDckQsSUFBQW05QyxpQkFBZ0JwOUMsRUFBY0MsR0FHOUIsSUFBTW85QyxFQUFXLEdBQUgsT0FBTUMsVUFBTiw0QkFFZCxPQUFPLElBQUlyZ0MsU0FBUSxTQUFDVyxFQUFTUyxHQUN6QnEvQixVQUFNaG5ELElBQ0YybUQsRUFDQSxDQUNJTyxpQkFBaUIsRUFDakI3N0IsUUFBUyxDQUNMLGVBQWtCL2hCLEVBQ2xCLHNCQUF5QkMsS0FFOUI2ZCxNQUFLLFNBQVUzZixHQUNJLE1BQWxCQSxFQUFPMGtCLFFBQ1B4RSxFQUFPLElBQUluZSxNQUFKLHdEQUEyRC9CLEtBRXRFeWYsRUFBUSxDQUNKdzRDLGVBQWUsT0FidkIsT0FlUyxTQUFVaHpDLEdBQ1hBLEdBQVNBLEVBQU1ELFVBQVlDLEVBQU1ELFVBQVlDLEVBQU1ELFNBQVMzWCxNQUFRNFgsRUFBTUQsU0FBUzNYLEtBQUs0WCxNQUN4Ri9FLEVBQU8sSUFBSW5lLE1BQU1rakIsRUFBTUQsU0FBUzNYLEtBQUs0WCxRQUVyQy9FLEVBQU8rRSxVQTlCdkIsSSxFQUFBLEcsRUFBQSxRLDJCQUNBLFFBQ0EsUSw2R0NHZSxTQUFpQnBqQixFQUFjQyxFQUFvQjQ4QyxJQUM5RCxJQUFBTyxpQkFBZ0JwOUMsRUFBY0MsR0FFOUIsSUFBTW8yRCxFQUFlLEdBQUgsT0FBTS9ZLFVBQU4saUJBQ1pELEdBQVcsYUFBYWdaLEVBQWN4WixHQUU1QyxPQUFPLElBQUk1L0IsU0FBUSxTQUFDVyxFQUFTUyxHQUN6QnEvQixVQUFNaG5ELElBQ0YybUQsRUFDQSxDQUNJTyxpQkFBaUIsRUFDakI3N0IsUUFBUyxDQUNMLGVBQWtCL2hCLEVBQ2xCLHNCQUF5QkMsS0FFOUI2ZCxNQUFLLFNBQVUzZixHQUNJLE1BQWxCQSxFQUFPMGtCLFFBQ1B4RSxFQUFPLElBQUluZSxNQUFKLDhFQUFpRi9CLEtBRTVGeWYsRUFBUXpmLEVBQU9xTixTQVpuQixPQWFTLFNBQVU0WCxHQUVYQSxHQUFTQSxFQUFNRCxVQUFZQyxFQUFNRCxVQUFZQyxFQUFNRCxTQUFTM1gsTUFBUTRYLEVBQU1ELFNBQVMzWCxLQUFLNFgsTUFDeEYvRSxFQUFPLElBQUluZSxNQUFNa2pCLEVBQU1ELFNBQVMzWCxLQUFLNFgsUUFFckMvRSxFQUFPK0UsVUE5QnZCLGVBQ0EsUUFDQSxRQUNBLFksMFVDSEEsU0FBU2t6QyxFQUFzQkMsR0FDM0IsSUFBSUMsRUFBYSxJQUFJN2pDLEtBQUtBLEtBQUtwUSxNQUFNZzBDLElBRXJDLElBQ0ksR0FBSUMsRUFBV25vQyxnQkFBa0Jrb0MsRUFDN0IsT0FBT0EsRUFFWCxNQUFNLElBQUlyMkQsTUFBTSwwQ0FFbEIsTUFBT2xHLEdBQ0wsTUFBTSxJQUFJa0csTUFBTSwyQywyREFJVCxTQUFzQm85QyxFQUFTVCxHQUMxQyxJQUFLUyxFQUNELE1BQU0sSUFBSXA5QyxNQUFNLHVCQUlwQixJQUFJdTJELEVBQWMsSUFFZEMsRUFBZ0IsR0FFcEIsR0FBSTdaLEVBQVMsQ0FFVCxHQUFJQSxFQUFROFosYUFBYyxDQUN0QixHQUFvQyxpQkFBekI5WixFQUFROFosYUFDZixNQUFNLElBQUl6MkQsTUFBTSxzQ0FFcEJ1MkQsR0FBNEIsZ0JBQUgsT0FBbUI1WixFQUFROFosYUFBM0IsS0FjN0IsR0FaSTlaLEVBQVErWixXQUNSSCxHQUE0QixZQUFILE9BQWVILEVBQXNCelosRUFBUStaLFVBQTdDLE1BRXpCL1osRUFBUWdhLFNBQ1JKLEdBQTRCLFVBQUgsT0FBYUgsRUFBc0J6WixFQUFRZ2EsUUFBM0MsTUFFekJoYSxFQUFRaWEsYUFDUkwsR0FBNEIsY0FBSCxPQUFpQkgsRUFBc0J6WixFQUFRaWEsWUFBL0MsTUFFekJqYSxFQUFRa2EsV0FDUk4sR0FBNEIsWUFBSCxPQUFlSCxFQUFzQnpaLEVBQVFrYSxVQUE3QyxNQUV6QmxhLEVBQVFtYSxXQUFZLENBQ3BCLEdBQUluM0QsTUFBTWc5QyxFQUFRbWEsYUFBZW5hLEVBQVFtYSxXQUFhLEVBQ2xELE1BQU0sSUFBSTkyRCxNQUFNLCtEQUVwQnUyRCxHQUE0QixjQUFILE9BQWlCNVosRUFBUW1hLFdBQXpCLEtBRTdCLEdBQUluYSxFQUFRb2EsV0FBWSxDQUNwQixHQUFJcDNELE1BQU1nOUMsRUFBUW9hLGFBQWVwYSxFQUFRb2EsV0FBYSxFQUNsRCxNQUFNLElBQUkvMkQsTUFBTSwrREFFcEJ1MkQsR0FBNEIsY0FBSCxPQUFpQjVaLEVBQVFvYSxXQUF6QixLQUU3QixHQUFJcGEsRUFBUWg2QixPQUFRLENBQ2hCLEdBQXVCLFFBQW5CZzZCLEVBQVFoNkIsUUFBdUMsV0FBbkJnNkIsRUFBUWg2QixRQUEwQyxhQUFuQmc2QixFQUFRaDZCLE9BQ25FLE1BQU0sSUFBSTNpQixNQUFNLHlEQUVwQnUyRCxHQUE0QixVQUFILE9BQWE1WixFQUFRaDZCLE9BQXJCLEtBRTdCLEdBQUlnNkIsRUFBUXFhLFVBQVcsQ0FDbkIsR0FBSXIzRCxNQUFNZzlDLEVBQVFxYSxZQUFjcmEsRUFBUXFhLFdBQWEsR0FBS3JhLEVBQVFxYSxVQUFZLElBQzFFLE1BQU0sSUFBSWgzRCxNQUFNLG9FQUVwQnUyRCxHQUE0QixhQUFILE9BQWdCbHhDLFNBQVNzM0IsRUFBUXFhLFdBQWpDLEtBRzdCLEdBQUlyYSxFQUFRc2EsV0FBWSxDQUNwQixHQUFJdDNELE1BQU1nOUMsRUFBUXNhLGFBQWV0YSxFQUFRc2EsWUFBYyxFQUNuRCxNQUFNLElBQUlqM0QsTUFBTSx5REFFcEJ1MkQsR0FBNEIsY0FBSCxPQUFpQmx4QyxTQUFTczNCLEVBQVFzYSxZQUFsQyxLQUc3QixHQUFJdGEsRUFBUTE4QyxTQUFVLENBRWxCLEdBQWdDLFdBQTVCLEVBQU8wOEMsRUFBUTE4QyxVQUNmLE1BQU0sSUFBSUQsTUFBTSxvQ0FPcEIsR0FKSTI4QyxFQUFRMThDLFNBQVMvSixPQUNqQnNnRSxFQUFnQixrQkFBSCxPQUFxQjdaLEVBQVExOEMsU0FBUy9KLEtBQXRDLE1BR2J5bUQsRUFBUTE4QyxTQUFTQyxVQUFXLENBRTVCLEdBQTBDLFdBQXRDLEVBQU95OEMsRUFBUTE4QyxTQUFTQyxXQUN4QixNQUFNLElBQUlGLE1BQU0sd0NBR3BCLElBQU1rM0QsRUFBa0IsR0FFeEI3Z0UsT0FBTzhKLFFBQVF3OEMsRUFBUTE4QyxTQUFTQyxXQUFXMUQsU0FBUSxTQUFDNEQsR0FDaEQsSUFBTWxKLEVBQU1rSixFQUFTLEdBQ2Z4SixFQUFRd0osRUFBUyxHQUV2QixHQUFxQixXQUFqQixFQUFPeEosR0FDUCxNQUFNLElBQUlvSixNQUFKLG9CQUF1QjlJLEVBQXZCLHNCQUVWLElBQUtOLElBQVVBLEVBQU1BLFFBQVVBLEVBQU11Z0UsR0FDakMsTUFBTSxJQUFJbjNELE1BQUosb0JBQXVCOUksRUFBdkIsNENBRVYsR0FBNEIsaUJBQWhCTixFQUFNQSxPQUErQyxrQkFBaEJBLEVBQU1BLE9BQWdELGlCQUFoQkEsRUFBTUEsTUFDekYsTUFBTSxJQUFJb0osTUFBTSxrRUFJcEIsT0FBUXBKLEVBQU11Z0UsSUFDVixJQUFLLEtBT0wsSUFBSyxNQU9MLElBQUssS0FPTCxJQUFLLE1BT0wsSUFBSyxLQU9MLElBQUssS0FDREQsRUFBZ0JoZ0UsR0FBTyxDQUNuQk4sTUFBT0EsRUFBTUEsTUFDYnVnRSxHQUFJdmdFLEVBQU11Z0UsSUFFZCxNQUVKLElBQUssVUFDRCxJQUFLdmdFLEVBQU13Z0UsWUFDUCxNQUFNLElBQUlwM0QsTUFBSiwyREFBOERJLEVBQVMsR0FBdkUsK0NBRVYsR0FBa0MsaUJBQXRCeEosRUFBTXdnRSxhQUEyRCxrQkFBdEJ4Z0UsRUFBTXdnRSxhQUE0RCxpQkFBdEJ4Z0UsRUFBTXdnRSxZQUNyRyxNQUFNLElBQUlwM0QsTUFBTSxzRUFFcEJrM0QsRUFBZ0JoZ0UsR0FBTyxDQUNuQk4sTUFBT0EsRUFBTUEsTUFDYnVnRSxHQUFJdmdFLEVBQU11Z0UsR0FDVkMsWUFBYXhnRSxFQUFNd2dFLGFBRXZCLE1BRUosSUFBSyxhQUNELElBQUt4Z0UsRUFBTXdnRSxZQUNQLE1BQU0sSUFBSXAzRCxNQUFKLDhEQUFpRUksRUFBUyxHQUExRSwrQ0FFVixHQUFrQyxpQkFBdEJ4SixFQUFNd2dFLGFBQTJELGtCQUF0QnhnRSxFQUFNd2dFLGFBQTRELGlCQUF0QnhnRSxFQUFNd2dFLFlBQ3JHLE1BQU0sSUFBSXAzRCxNQUFNLHNFQUVwQmszRCxFQUFnQmhnRSxHQUFPLENBQ25CTixNQUFPQSxFQUFNQSxNQUNidWdFLEdBQUl2Z0UsRUFBTXVnRSxHQUNWQyxZQUFheGdFLEVBQU13Z0UsYUFFdkIsTUFFSixJQUFLLE9BT0wsSUFBSyxVQU9MLElBQUssUUFPTCxJQUFLLFdBT0wsSUFBSyxTQU9MLElBQUssVUFDREYsRUFBZ0JoZ0UsR0FBTyxDQUNuQk4sTUFBT0EsRUFBTUEsTUFDYnVnRSxHQUFJdmdFLEVBQU11Z0UsSUFFZCxNQUNKLFFBQ0ksTUFBTSxJQUFJbjNELE1BQUosdUJBQTBCcEosRUFBTXVnRSxHQUFoQyw0QkFHZFgsR0FBZ0MsdUJBQUgsT0FBMEJ0MEMsS0FBS0MsVUFBVSswQyxTQUt0RixnQkFBVTlaLEdBQVYsT0FBb0JtWixHQUFwQixPQUFrQ0MsSSw2R0NsT3ZCLFNBQTZCMTJELEVBQWNDLElBQ3RELElBQUFtOUMsaUJBQWdCcDlDLEVBQWNDLEdBRTlCLElBQUlvOUMsRUFBVyxHQUFILE9BQU1DLFVBQU4sNkJBRVosT0FBTyxJQUFJcmdDLFNBQVEsU0FBQ1csRUFBU1MsR0FDekJxL0IsVUFBTWhuRCxJQUNGMm1ELEVBQ0EsQ0FDSU8saUJBQWlCLEVBQ2pCNzdCLFFBQVMsQ0FDTCxlQUFrQi9oQixFQUNsQixzQkFBeUJDLEtBRTlCNmQsTUFBSyxTQUFVM2YsR0FDSSxNQUFsQkEsRUFBTzBrQixRQUNQeEUsRUFBTyxJQUFJbmUsTUFBSixrRkFBcUYvQixLQUVoR3lmLEVBQVF6ZixFQUFPcU4sU0FabkIsT0FhUyxTQUFVNFgsR0FFWEEsR0FBU0EsRUFBTUQsVUFBWUMsRUFBTUQsVUFBWUMsRUFBTUQsU0FBUzNYLE1BQVE0WCxFQUFNRCxTQUFTM1gsS0FBSzRYLE1BQ3hGL0UsRUFBTyxJQUFJbmUsTUFBTWtqQixFQUFNRCxTQUFTM1gsS0FBSzRYLFFBRXJDL0UsRUFBTytFLFVBNUJ2QixJLEVBQUEsRyxFQUFBLFEsMkJBQ0EsUUFDQSxRIiwiZmlsZSI6InBpbmF0YS1zZGsubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJwaW5hdGEtc2RrXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBpbmF0YS1zZGtcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGluYXRhLXNka1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTc0KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsImV4cG9ydCBjb25zdCBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLnBpbmF0YS5jbG91ZCc7XG4iLCJpbXBvcnQgaXNJUEZTIGZyb20gJ2lzLWlwZnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgaWYgKCFwaW5hdGFBcGlLZXkgfHwgcGluYXRhQXBpS2V5ID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbmF0YUFwaUtleSBwcm92aWRlZCEgUGxlYXNlIHByb3ZpZGUgeW91ciBwaW5hdGEgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbiAgICBpZiAoIXBpbmF0YVNlY3JldEFwaUtleSB8fCBwaW5hdGFTZWNyZXRBcGlLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGluYXRhU2VjcmV0QXBpS2V5IHByb3ZpZGVkISBQbGVhc2UgcHJvdmlkZSB5b3VyIHBpbmF0YSBzZWNyZXQgYXBpIGtleSBhcyBhbiBhcmd1bWVudCB3aGVuIHlvdSBzdGFydCB0aGlzIHNjcmlwdCcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSG9zdE5vZGVzKGhvc3ROb2Rlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShob3N0Tm9kZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaG9zdF9ub2RlcyB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGhvc3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGlmICghaXNJUEZTLnBlZXJNdWx0aWFkZHIobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaG9zdF9ub2RlIGFycmF5IGVudHJ5OiAke25vZGV9IGlzIG5vdCBhIHZhbGlkIHBlZXIgbXVsdGlhZGRyYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpIHtcbiAgICBpZiAobWV0YWRhdGEubmFtZSkge1xuICAgICAgICBpZiAoISh0eXBlb2YgbWV0YWRhdGEubmFtZSA9PT0gJ3N0cmluZycgfHwgbWV0YWRhdGEubmFtZSBpbnN0YW5jZW9mIFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEgbmFtZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWV0YWRhdGEua2V5dmFsdWVzKSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBtZXRhZGF0YS5rZXl2YWx1ZXMgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZXRhdGFkYXRhIGtleXZhbHVlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5VmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpID4gOSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9yZSB0aGFuIDEwIGtleXZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgZm9yIG1ldGFkYXRhIGVudHJpZXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhIHN0cmluZywgYSBib29sZWFuLCBvciBhIG51bWJlciwgc28gd2UgZG9uJ3QgZ2V0IGFuIG9iamVjdCBwYXNzZWQgaW4gYnkgYWNjaWRlbnRcbiAgICAgICAgICAgIGlmICghKHR5cGVvZiBrZXlWYWx1ZVsxXSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleVZhbHVlWzFdID09PSAnYm9vbGVhbicgfHwgIWlzTmFOKGtleVZhbHVlWzFdKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKHBpblBvbGljeSkge1xuICAgIC8vdGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhIHBpbiBwb2xpY3kgYW5kIGNoZWNrcyB0aGUgSlNPTiBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGl0J3MgdmFsaWRcbiAgICBpZiAoIXBpblBvbGljeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBpbiBwb2xpY3kgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXBpblBvbGljeS5yZWdpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVnaW9ucyBwcm92aWRlZCBpbiBwaW4gcG9saWN5Jyk7XG4gICAgfVxuICAgIGlmIChwaW5Qb2xpY3kucmVnaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcGluUG9saWN5LnJlZ2lvbnMuZm9yRWFjaCgocmVnaW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlZ2lvbi5pZCB8fCAhKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZWdpb24uaWQpID09PSAnW29iamVjdCBTdHJpbmddJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2lvbiBpZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCB8fCByZWdpb24uZGVzaXJlZFJlcGxpY2F0aW9uQ291bnQgPT09IDApIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlZ2lvbi5kZXNpcmVkUmVwbGljYXRpb25Db3VudCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc2lyZWRSZXBsaWNhdGlvbkNvdW50IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBpbmF0YU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2lkVmVyc2lvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLmNpZFZlcnNpb24gIT0gMCAmJiBvcHRpb25zLmNpZFZlcnNpb24gIT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIGNpZFZlcnNpb24nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy53cmFwV2l0aERpcmVjdG9yeSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvcHRpb25zLndyYXBXaXRoRGlyZWN0b3J5ICE9PSB0cnVlICYmIG9wdGlvbnMud3JhcFdpdGhEaXJlY3RvcnkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyYXBXaXRoRGlyZWN0b3J5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlIG9mIHRydWUgb3IgZmFsc2UnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhvc3ROb2Rlcykge1xuICAgICAgICB2YWxpZGF0ZUhvc3ROb2RlcyhvcHRpb25zLmhvc3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tUGluUG9saWN5KSB7XG4gICAgICAgIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlKG9wdGlvbnMuY3VzdG9tUGluUG9saWN5KTtcbiAgICB9XG59XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpKSB7XG4gIHZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xuICB2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG4gIHZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG4gIHZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4gIHZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xuICB2YXIgJGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xuICB2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG4gIHZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbiAgdmFyIHByb3BlcnR5RGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbiAgdmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG4gIHZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xuICB2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xuICB2YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbiAgdmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbiAgdmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbiAgdmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG4gIHZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuICB2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbiAgdmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xuICB2YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xuICB2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG4gIHZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xuICB2YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbiAgdmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xuICB2YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4gIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbiAgdmFyIGNyZWF0ZUFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpO1xuICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuICB2YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xuICB2YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG4gIHZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG4gIHZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbiAgdmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJyk7XG4gIHZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbiAgdmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbiAgdmFyIGRQID0gJERQLmY7XG4gIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgdmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbiAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gIHZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuICB2YXIgU0hBUkVEX0JVRkZFUiA9ICdTaGFyZWQnICsgQVJSQVlfQlVGRkVSO1xuICB2YXIgQllURVNfUEVSX0VMRU1FTlQgPSAnQllURVNfUEVSX0VMRU1FTlQnO1xuICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXlbUFJPVE9UWVBFXTtcbiAgdmFyICRBcnJheUJ1ZmZlciA9ICRidWZmZXIuQXJyYXlCdWZmZXI7XG4gIHZhciAkRGF0YVZpZXcgPSAkYnVmZmVyLkRhdGFWaWV3O1xuICB2YXIgYXJyYXlGb3JFYWNoID0gY3JlYXRlQXJyYXlNZXRob2QoMCk7XG4gIHZhciBhcnJheUZpbHRlciA9IGNyZWF0ZUFycmF5TWV0aG9kKDIpO1xuICB2YXIgYXJyYXlTb21lID0gY3JlYXRlQXJyYXlNZXRob2QoMyk7XG4gIHZhciBhcnJheUV2ZXJ5ID0gY3JlYXRlQXJyYXlNZXRob2QoNCk7XG4gIHZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbiAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gIHZhciBhcnJheUluY2x1ZGVzID0gY3JlYXRlQXJyYXlJbmNsdWRlcyh0cnVlKTtcbiAgdmFyIGFycmF5SW5kZXhPZiA9IGNyZWF0ZUFycmF5SW5jbHVkZXMoZmFsc2UpO1xuICB2YXIgYXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9ycy52YWx1ZXM7XG4gIHZhciBhcnJheUtleXMgPSBBcnJheUl0ZXJhdG9ycy5rZXlzO1xuICB2YXIgYXJyYXlFbnRyaWVzID0gQXJyYXlJdGVyYXRvcnMuZW50cmllcztcbiAgdmFyIGFycmF5TGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mO1xuICB2YXIgYXJyYXlSZWR1Y2UgPSBBcnJheVByb3RvLnJlZHVjZTtcbiAgdmFyIGFycmF5UmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0O1xuICB2YXIgYXJyYXlKb2luID0gQXJyYXlQcm90by5qb2luO1xuICB2YXIgYXJyYXlTb3J0ID0gQXJyYXlQcm90by5zb3J0O1xuICB2YXIgYXJyYXlTbGljZSA9IEFycmF5UHJvdG8uc2xpY2U7XG4gIHZhciBhcnJheVRvU3RyaW5nID0gQXJyYXlQcm90by50b1N0cmluZztcbiAgdmFyIGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBBcnJheVByb3RvLnRvTG9jYWxlU3RyaW5nO1xuICB2YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG4gIHZhciBUQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG4gIHZhciBUWVBFRF9DT05TVFJVQ1RPUiA9IHVpZCgndHlwZWRfY29uc3RydWN0b3InKTtcbiAgdmFyIERFRl9DT05TVFJVQ1RPUiA9IHVpZCgnZGVmX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBBTExfQ09OU1RSVUNUT1JTID0gJHR5cGVkLkNPTlNUUjtcbiAgdmFyIFRZUEVEX0FSUkFZID0gJHR5cGVkLlRZUEVEO1xuICB2YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xuICB2YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xuXG4gIHZhciAkbWFwID0gY3JlYXRlQXJyYXlNZXRob2QoMSwgZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICAgIHJldHVybiBhbGxvY2F0ZShzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGVuZ3RoKTtcbiAgfSk7XG5cbiAgdmFyIExJVFRMRV9FTkRJQU4gPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF0gPT09IDE7XG4gIH0pO1xuXG4gIHZhciBGT1JDRURfU0VUID0gISFVaW50OEFycmF5ICYmICEhVWludDhBcnJheVtQUk9UT1RZUEVdLnNldCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IFVpbnQ4QXJyYXkoMSkuc2V0KHt9KTtcbiAgfSk7XG5cbiAgdmFyIHRvT2Zmc2V0ID0gZnVuY3Rpb24gKGl0LCBCWVRFUykge1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoaXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfTtcblxuICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaXQpICYmIFRZUEVEX0FSUkFZIGluIGl0KSByZXR1cm4gaXQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSEnKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiAoQywgbGVuZ3RoKSB7XG4gICAgaWYgKCEoaXNPYmplY3QoQykgJiYgVFlQRURfQ09OU1RSVUNUT1IgaW4gQykpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IhJyk7XG4gICAgfSByZXR1cm4gbmV3IEMobGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgc3BlY2llc0Zyb21MaXN0ID0gZnVuY3Rpb24gKE8sIGxpc3QpIHtcbiAgICByZXR1cm4gZnJvbUxpc3Qoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxpc3QpO1xuICB9O1xuXG4gIHZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKEMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSwgaW50ZXJuYWwpIHtcbiAgICBkUChpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZFtpbnRlcm5hbF07IH0gfSk7XG4gIH07XG5cbiAgdmFyICRmcm9tID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBmbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGksIGxlbmd0aCwgdmFsdWVzLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICFpc0FycmF5SXRlcihpdGVyRm4pKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHZhbHVlcyA9IFtdLCBpID0gMDsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpKyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgICB9IE8gPSB2YWx1ZXM7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nICYmIGFMZW4gPiAyKSBtYXBmbiA9IGN0eChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCksIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gbWFwcGluZyA/IG1hcGZuKE9baV0sIGkpIDogT1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgJG9mID0gZnVuY3Rpb24gb2YoLyogLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbiAgdmFyIFRPX0xPQ0FMRV9CVUcgPSAhIVVpbnQ4QXJyYXkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IFVpbnQ4QXJyYXkoMSkpOyB9KTtcblxuICB2YXIgJHRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9Mb2NhbGVTdHJpbmcuYXBwbHkoVE9fTE9DQUxFX0JVRyA/IGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSkgOiB2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICB2YXIgcHJvdG8gPSB7XG4gICAgY29weVdpdGhpbjogZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlDb3B5V2l0aGluLmNhbGwodmFsaWRhdGUodGhpcyksIHRhcmdldCwgc3RhcnQsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RXZlcnkodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUZpbGwuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheUZpbHRlcih2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbixcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKTtcbiAgICB9LFxuICAgIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kSW5kZXgodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgYXJyYXlGb3JFYWNoKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluZGV4T2YodmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmNsdWRlcyh2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUxhc3RJbmRleE9mLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gJG1hcCh2YWxpZGF0ZSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlUmlnaHQuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlKHRoYXQpLmxlbmd0aDtcbiAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKGxlbmd0aCAvIDIpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHdoaWxlIChpbmRleCA8IG1pZGRsZSkge1xuICAgICAgICB2YWx1ZSA9IHRoYXRbaW5kZXhdO1xuICAgICAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgICAgIHRoYXRbbGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9LFxuICAgIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheVNvbWUodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb3J0LmNhbGwodmFsaWRhdGUodGhpcyksIGNvbXBhcmVmbik7XG4gICAgfSxcbiAgICBzdWJhcnJheTogZnVuY3Rpb24gc3ViYXJyYXkoYmVnaW4sIGVuZCkge1xuICAgICAgdmFyIE8gPSB2YWxpZGF0ZSh0aGlzKTtcbiAgICAgIHZhciBsZW5ndGggPSBPLmxlbmd0aDtcbiAgICAgIHZhciAkYmVnaW4gPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbmd0aCk7XG4gICAgICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSkoXG4gICAgICAgIE8uYnVmZmVyLFxuICAgICAgICBPLmJ5dGVPZmZzZXQgKyAkYmVnaW4gKiBPLkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgICAgICB0b0xlbmd0aCgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpKSAtICRiZWdpbilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciAkc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcyksIHN0YXJ0LCBlbmQpKTtcbiAgfTtcblxuICB2YXIgJHNldCA9IGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzWzFdLCAxKTtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIHNyYyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHNyYy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG4gIH07XG5cbiAgdmFyICRpdGVyYXRvcnMgPSB7XG4gICAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgIHJldHVybiBhcnJheUVudHJpZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5VmFsdWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgaXNUQUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRhcmdldClcbiAgICAgICYmIHRhcmdldFtUWVBFRF9BUlJBWV1cbiAgICAgICYmIHR5cGVvZiBrZXkgIT0gJ3N5bWJvbCdcbiAgICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAgICYmIFN0cmluZygra2V5KSA9PSBTdHJpbmcoa2V5KTtcbiAgfTtcbiAgdmFyICRnZXREZXNjID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICA/IHByb3BlcnR5RGVzYygyLCB0YXJnZXRba2V5XSlcbiAgICAgIDogZ09QRCh0YXJnZXQsIGtleSk7XG4gIH07XG4gIHZhciAkc2V0RGVzYyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgaWYgKGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICAmJiBpc09iamVjdChkZXNjKVxuICAgICAgJiYgaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgICAmJiAhaGFzKGRlc2MsICdnZXQnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnc2V0JylcbiAgICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgICAmJiAhZGVzYy5jb25maWd1cmFibGVcbiAgICAgICYmICghaGFzKGRlc2MsICd3cml0YWJsZScpIHx8IGRlc2Mud3JpdGFibGUpXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnZW51bWVyYWJsZScpIHx8IGRlc2MuZW51bWVyYWJsZSlcbiAgICApIHtcbiAgICAgIHRhcmdldFtrZXldID0gZGVzYy52YWx1ZTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSByZXR1cm4gZFAodGFyZ2V0LCBrZXksIGRlc2MpO1xuICB9O1xuXG4gIGlmICghQUxMX0NPTlNUUlVDVE9SUykge1xuICAgICRHT1BELmYgPSAkZ2V0RGVzYztcbiAgICAkRFAuZiA9ICRzZXREZXNjO1xuICB9XG5cbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhQUxMX0NPTlNUUlVDVE9SUywgJ09iamVjdCcsIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXREZXNjLFxuICAgIGRlZmluZVByb3BlcnR5OiAkc2V0RGVzY1xuICB9KTtcblxuICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvU3RyaW5nLmNhbGwoe30pOyB9KSkge1xuICAgIGFycmF5VG9TdHJpbmcgPSBhcnJheVRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQgPSByZWRlZmluZUFsbCh7fSwgcHJvdG8pO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsICRpdGVyYXRvcnMpO1xuICBoaWRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgSVRFUkFUT1IsICRpdGVyYXRvcnMudmFsdWVzKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCB7XG4gICAgc2xpY2U6ICRzbGljZSxcbiAgICBzZXQ6ICRzZXQsXG4gICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHsgLyogbm9vcCAqLyB9LFxuICAgIHRvU3RyaW5nOiBhcnJheVRvU3RyaW5nLFxuICAgIHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmdcbiAgfSk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdidWZmZXInLCAnYicpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZU9mZnNldCcsICdvJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlTGVuZ3RoJywgJ2wnKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2xlbmd0aCcsICdlJyk7XG4gIGRQKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgVEFHLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW1RZUEVEX0FSUkFZXTsgfVxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBCWVRFUywgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIENMQU1QRUQgPSAhIUNMQU1QRUQ7XG4gICAgdmFyIE5BTUUgPSBLRVkgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSc7XG4gICAgdmFyIEdFVFRFUiA9ICdnZXQnICsgS0VZO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIEtFWTtcbiAgICB2YXIgVHlwZWRBcnJheSA9IGdsb2JhbFtOQU1FXTtcbiAgICB2YXIgQmFzZSA9IFR5cGVkQXJyYXkgfHwge307XG4gICAgdmFyIFRBQyA9IFR5cGVkQXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheSk7XG4gICAgdmFyIEZPUkNFRCA9ICFUeXBlZEFycmF5IHx8ICEkdHlwZWQuQUJWO1xuICAgIHZhciBPID0ge307XG4gICAgdmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5ICYmIFR5cGVkQXJyYXlbUFJPVE9UWVBFXTtcbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICByZXR1cm4gZGF0YS52W0dFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgaWYgKENMQU1QRUQpIHZhbHVlID0gKHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4ZmYgPyAweGZmIDogdmFsdWUgJiAweGZmO1xuICAgICAgZGF0YS52W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgdmFsdWUsIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIGRQKHRoYXQsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXIodGhpcywgaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUsICdfZCcpO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoLCBrbGFzcztcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgIGxlbmd0aCA9IHRvSW5kZXgoZGF0YSk7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyAkQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgb2Zmc2V0ID0gdG9PZmZzZXQoJG9mZnNldCwgQllURVMpO1xuICAgICAgICAgIHZhciAkbGVuID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmICgkbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICgkbGVuICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSAkbGVuIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB0b0xlbmd0aCgkbGVuZ3RoKSAqIEJZVEVTO1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggKyBvZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGhpZGUodGhhdCwgJ19kJywge1xuICAgICAgICAgIGI6IGJ1ZmZlcixcbiAgICAgICAgICBvOiBvZmZzZXQsXG4gICAgICAgICAgbDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBlOiBsZW5ndGgsXG4gICAgICAgICAgdjogbmV3ICREYXRhVmlldyhidWZmZXIpXG4gICAgICAgIH0pO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGFkZEVsZW1lbnQodGhhdCwgaW5kZXgrKyk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBjcmVhdGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkKTtcbiAgICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgVHlwZWRBcnJheSk7XG4gICAgfSBlbHNlIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheSgxKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0pIHx8ICEkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KG51bGwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KGl0ZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0sIHRydWUpKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUpO1xuICAgICAgICB2YXIga2xhc3M7XG4gICAgICAgIC8vIGB3c2AgbW9kdWxlIGJ1ZywgdGVtcG9yYXJpbHkgcmVtb3ZlIHZhbGlkYXRpb24gbGVuZ3RoIGZvciBVaW50OEFycmF5XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvNjQ1XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgQmFzZSh0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogJG9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpKVxuICAgICAgICAgICAgICA6IG5ldyBCYXNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBhcnJheUZvckVhY2goVEFDICE9PSBGdW5jdGlvbi5wcm90b3R5cGUgPyBnT1BOKEJhc2UpLmNvbmNhdChnT1BOKFRBQykpIDogZ09QTihCYXNlKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheSkpIGhpZGUoVHlwZWRBcnJheSwga2V5LCBCYXNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBUeXBlZEFycmF5UHJvdG90eXBlO1xuICAgICAgaWYgKCFMSUJSQVJZKSBUeXBlZEFycmF5UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHlwZWRBcnJheTtcbiAgICB9XG4gICAgdmFyICRuYXRpdmVJdGVyYXRvciA9IFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdO1xuICAgIHZhciBDT1JSRUNUX0lURVJfTkFNRSA9ICEhJG5hdGl2ZUl0ZXJhdG9yXG4gICAgICAmJiAoJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gJ3ZhbHVlcycgfHwgJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gdW5kZWZpbmVkKTtcbiAgICB2YXIgJGl0ZXJhdG9yID0gJGl0ZXJhdG9ycy52YWx1ZXM7XG4gICAgaGlkZShUeXBlZEFycmF5LCBUWVBFRF9DT05TVFJVQ1RPUiwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBUWVBFRF9BUlJBWSwgTkFNRSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIERFRl9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheSk7XG5cbiAgICBpZiAoQ0xBTVBFRCA/IG5ldyBUeXBlZEFycmF5KDEpW1RBR10gIT0gTkFNRSA6ICEoVEFHIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSB7XG4gICAgICBkUChUeXBlZEFycmF5UHJvdG90eXBlLCBUQUcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOQU1FOyB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPW05BTUVdID0gVHlwZWRBcnJheTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKFR5cGVkQXJyYXkgIT0gQmFzZSksIE8pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMsIE5BTUUsIHtcbiAgICAgIEJZVEVTX1BFUl9FTEVNRU5UOiBCWVRFU1xuICAgIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IEJhc2Uub2YuY2FsbChUeXBlZEFycmF5LCAxKTsgfSksIE5BTUUsIHtcbiAgICAgIGZyb206ICRmcm9tLFxuICAgICAgb2Y6ICRvZlxuICAgIH0pO1xuXG4gICAgaWYgKCEoQllURVNfUEVSX0VMRU1FTlQgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QLCBOQU1FLCBwcm90byk7XG5cbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRURfU0VULCBOQU1FLCB7IHNldDogJHNldCB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIUNPUlJFQ1RfSVRFUl9OQU1FLCBOQU1FLCAkaXRlcmF0b3JzKTtcblxuICAgIGlmICghTElCUkFSWSAmJiBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nICE9IGFycmF5VG9TdHJpbmcpIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgPSBhcnJheVRvU3RyaW5nO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgxKS5zbGljZSgpO1xuICAgIH0pLCBOQU1FLCB7IHNsaWNlOiAkc2xpY2UgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gWzEsIDJdLnRvTG9jYWxlU3RyaW5nKCkgIT0gbmV3IFR5cGVkQXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsIDJdKTtcbiAgICB9KSksIE5BTUUsIHsgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZyB9KTtcblxuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IENPUlJFQ1RfSVRFUl9OQU1FID8gJG5hdGl2ZUl0ZXJhdG9yIDogJGl0ZXJhdG9yO1xuICAgIGlmICghTElCUkFSWSAmJiAhQ09SUkVDVF9JVEVSX05BTUUpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgSVRFUkFUT1IsICRpdGVyYXRvcik7XG4gIH07XG59IGVsc2UgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGVuY29kZTogcmVxdWlyZSgnLi9lbmNvZGUuanMnKVxuICAsIGRlY29kZTogcmVxdWlyZSgnLi9kZWNvZGUuanMnKVxuICAsIGVuY29kaW5nTGVuZ3RoOiByZXF1aXJlKCcuL2xlbmd0aC5qcycpXG59XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGJhc2U1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgbXVsdGloYXNoID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuY29uc3QgbXVsdGliYXNlID0gcmVxdWlyZSgnbXVsdGliYXNlJylcbmNvbnN0IE11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5jb25zdCBtYWZtdCA9IHJlcXVpcmUoJ21hZm10JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuXG5jb25zdCB1cmxQYXR0ZXJuID0gL15odHRwcz86XFwvXFwvW14vXStcXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IHBhdGhQYXR0ZXJuID0gL15cXC8oaXAoZnxuKXMpXFwvKChcXHcrKS4qKS9cbmNvbnN0IGRlZmF1bHRQcm90b2NvbE1hdGNoID0gMVxuY29uc3QgZGVmYXVsdEhhc2hNYXRoID0gNFxuXG5jb25zdCBmcWRuUGF0dGVybiA9IC9eaHR0cHM/OlxcL1xcLyhbXi9dKylcXC4oaXAoPzpmfG4pcylcXC5bXi9dKy9cbmNvbnN0IGZxZG5IYXNoTWF0Y2ggPSAxXG5jb25zdCBmcWRuUHJvdG9jb2xNYXRjaCA9IDJcblxuZnVuY3Rpb24gaXNNdWx0aWhhc2ggKGhhc2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGhhc2gpXG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShmb3JtYXR0ZWQpKVxuICAgIG11bHRpaGFzaC5kZWNvZGUoYnVmZmVyKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc011bHRpYmFzZSAoaGFzaCkge1xuICB0cnkge1xuICAgIHJldHVybiBtdWx0aWJhc2UuaXNFbmNvZGVkKGhhc2gpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NJRCAoaGFzaCkge1xuICB0cnkge1xuICAgIG5ldyBDSUQoaGFzaCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aWFkZHIgKGlucHV0KSB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZVxuICBpZiAoTXVsdGlhZGRyLmlzTXVsdGlhZGRyKGlucHV0KSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICBuZXcgTXVsdGlhZGRyKGlucHV0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BlZXJNdWx0aWFkZHIgKGlucHV0KSB7XG4gIHJldHVybiBpc011bHRpYWRkcihpbnB1dCkgJiYgbWFmbXQuSVBGUy5tYXRjaGVzKGlucHV0KVxufVxuXG5mdW5jdGlvbiBpc0lwZnMgKGlucHV0LCBwYXR0ZXJuLCBwcm90b2NvbE1hdGNoID0gZGVmYXVsdFByb3RvY29sTWF0Y2gsIGhhc2hNYXRjaCA9IGRlZmF1bHRIYXNoTWF0aCkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBjb252ZXJ0VG9TdHJpbmcoaW5wdXQpXG4gIGlmICghZm9ybWF0dGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBtYXRjaCA9IGZvcm1hdHRlZC5tYXRjaChwYXR0ZXJuKVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWF0Y2hbcHJvdG9jb2xNYXRjaF0gIT09ICdpcGZzJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG5cbiAgaWYgKGhhc2ggJiYgcGF0dGVybiA9PT0gZnFkblBhdHRlcm4pIHtcbiAgICAvLyB3aGVuIGRvaW5nIGNoZWNrcyBmb3Igc3ViZG9tYWluIGNvbnRleHRcbiAgICAvLyBlbnN1cmUgaGFzaCBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gKGJyb3dzZXJzIGZvcmNlLWxvd2VyY2FzZSBhdXRob3JpdHkgY29tcG90ZW50IGFueXdheSlcbiAgICBoYXNoID0gaGFzaC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gaXNDSUQoaGFzaClcbn1cblxuZnVuY3Rpb24gaXNJcG5zIChpbnB1dCwgcGF0dGVybiwgcHJvdG9jb2xNYXRjaCA9IGRlZmF1bHRQcm90b2NvbE1hdGNoLCBoYXNoTWF0Y2gpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gY29udmVydFRvU3RyaW5nKGlucHV0KVxuICBpZiAoIWZvcm1hdHRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IG1hdGNoID0gZm9ybWF0dGVkLm1hdGNoKHBhdHRlcm4pXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtYXRjaFtwcm90b2NvbE1hdGNoXSAhPT0gJ2lwbnMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoaGFzaE1hdGNoICYmIHBhdHRlcm4gPT09IGZxZG5QYXR0ZXJuKSB7XG4gICAgbGV0IGhhc2ggPSBtYXRjaFtoYXNoTWF0Y2hdXG4gICAgLy8gd2hlbiBkb2luZyBjaGVja3MgZm9yIHN1YmRvbWFpbiBjb250ZXh0XG4gICAgLy8gZW5zdXJlIGhhc2ggaXMgY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIChicm93c2VycyBmb3JjZS1sb3dlcmNhc2UgYXV0aG9yaXR5IGNvbXBvdGVudCBhbnl3YXkpXG4gICAgaGFzaCA9IGhhc2gudG9Mb3dlckNhc2UoKVxuICAgIHJldHVybiBpc0NJRChoYXNoKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcgKGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyAoaW5wdXQpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpbnB1dCkpIHtcbiAgICByZXR1cm4gYmFzZTU4LmVuY29kZShpbnB1dClcbiAgfVxuXG4gIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBpcGZzU3ViZG9tYWluID0gKHVybCkgPT4gaXNJcGZzKHVybCwgZnFkblBhdHRlcm4sIGZxZG5Qcm90b2NvbE1hdGNoLCBmcWRuSGFzaE1hdGNoKVxuY29uc3QgaXBuc1N1YmRvbWFpbiA9ICh1cmwpID0+IGlzSXBucyh1cmwsIGZxZG5QYXR0ZXJuLCBmcWRuUHJvdG9jb2xNYXRjaCwgZnFkbkhhc2hNYXRjaClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpaGFzaDogaXNNdWx0aWhhc2gsXG4gIG11bHRpYWRkcjogaXNNdWx0aWFkZHIsXG4gIHBlZXJNdWx0aWFkZHI6IGlzUGVlck11bHRpYWRkcixcbiAgY2lkOiBpc0NJRCxcbiAgYmFzZTMyY2lkOiAoY2lkKSA9PiAoaXNNdWx0aWJhc2UoY2lkKSA9PT0gJ2Jhc2UzMicgJiYgaXNDSUQoY2lkKSksXG4gIGlwZnNTdWJkb21haW46IGlwZnNTdWJkb21haW4sXG4gIGlwbnNTdWJkb21haW46IGlwbnNTdWJkb21haW4sXG4gIHN1YmRvbWFpbjogKHVybCkgPT4gKGlwZnNTdWJkb21haW4odXJsKSB8fCBpcG5zU3ViZG9tYWluKHVybCkpLFxuICBzdWJkb21haW5QYXR0ZXJuOiBmcWRuUGF0dGVybixcbiAgaXBmc1VybDogKHVybCkgPT4gaXNJcGZzKHVybCwgdXJsUGF0dGVybiksXG4gIGlwbnNVcmw6ICh1cmwpID0+IGlzSXBucyh1cmwsIHVybFBhdHRlcm4pLFxuICB1cmw6ICh1cmwpID0+IChpc0lwZnModXJsLCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnModXJsLCB1cmxQYXR0ZXJuKSksXG4gIHVybFBhdHRlcm46IHVybFBhdHRlcm4sXG4gIGlwZnNQYXRoOiAocGF0aCkgPT4gaXNJcGZzKHBhdGgsIHBhdGhQYXR0ZXJuKSxcbiAgaXBuc1BhdGg6IChwYXRoKSA9PiBpc0lwbnMocGF0aCwgcGF0aFBhdHRlcm4pLFxuICBwYXRoOiAocGF0aCkgPT4gKGlzSXBmcyhwYXRoLCBwYXRoUGF0dGVybikgfHwgaXNJcG5zKHBhdGgsIHBhdGhQYXR0ZXJuKSksXG4gIHBhdGhQYXR0ZXJuOiBwYXRoUGF0dGVybixcbiAgdXJsT3JQYXRoOiAoeCkgPT4gKGlzSXBmcyh4LCB1cmxQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgdXJsUGF0dGVybikgfHwgaXNJcGZzKHgsIHBhdGhQYXR0ZXJuKSB8fCBpc0lwbnMoeCwgcGF0aFBhdHRlcm4pKSxcbiAgY2lkUGF0aDogcGF0aCA9PiBpc1N0cmluZyhwYXRoKSAmJiAhaXNDSUQocGF0aCkgJiYgaXNJcGZzKGAvaXBmcy8ke3BhdGh9YCwgcGF0aFBhdHRlcm4pXG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dGlsXCIpOyIsInZhciBiYXNleCA9IHJlcXVpcmUoJ2Jhc2UteCcpXG52YXIgQUxQSEFCRVQgPSAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eidcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNleChBTFBIQUJFVClcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgbm9ybWFsaXplSGVhZGVyTmFtZSA9IHJlcXVpcmUoJy4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBJZ25vcmUgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmxcIik7IiwiLyoqXG4gKiBNdWx0aWhhc2ggaW1wbGVtZW50YXRpb24gaW4gSmF2YVNjcmlwdC5cbiAqXG4gKiBAbW9kdWxlIG11bHRpaGFzaFxuICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuXG5jb25zdCBjcyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuZXhwb3J0cy5uYW1lcyA9IGNzLm5hbWVzXG5leHBvcnRzLmNvZGVzID0gY3MuY29kZXNcbmV4cG9ydHMuZGVmYXVsdExlbmd0aHMgPSBjcy5kZWZhdWx0TGVuZ3Roc1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGhleCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0hleFN0cmluZyA9IGZ1bmN0aW9uIHRvSGV4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gaGFzaC50b1N0cmluZygnaGV4Jylcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBoZXggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmV4cG9ydHMuZnJvbUhleFN0cmluZyA9IGZ1bmN0aW9uIGZyb21IZXhTdHJpbmcgKGhhc2gpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2gsICdoZXgnKVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIG11bHRpaGFzaCB0byBhIGJhc2U1OCBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0cy50b0I1OFN0cmluZyA9IGZ1bmN0aW9uIHRvQjU4U3RyaW5nIChoYXNoKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGJlIHBhc3NlZCBhIGJ1ZmZlcicpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoaGFzaClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBiYXNlNTggZW5jb2RlZCBzdHJpbmcgdG8gYSBtdWx0aWhhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSBoYXNoXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmZyb21CNThTdHJpbmcgPSBmdW5jdGlvbiBmcm9tQjU4U3RyaW5nIChoYXNoKSB7XG4gIGxldCBlbmNvZGVkID0gaGFzaFxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSB7XG4gICAgZW5jb2RlZCA9IGhhc2gudG9TdHJpbmcoKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJzNTguZGVjb2RlKGVuY29kZWQpKVxufVxuXG4vKipcbiAqIERlY29kZSBhIGhhc2ggZnJvbSB0aGUgZ2l2ZW4gbXVsdGloYXNoLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm5zIHt7Y29kZTogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyLCBkaWdlc3Q6IEJ1ZmZlcn19IHJlc3VsdFxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZSAoYnVmKSB7XG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihidWYpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKGJ1Zi5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWhhc2ggdG9vIHNob3J0LiBtdXN0IGJlID4gMyBieXRlcy4nKVxuICB9XG5cbiAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAoIWV4cG9ydHMuaXNWYWxpZENvZGUoY29kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCB1bmtub3duIGZ1bmN0aW9uIGNvZGU6IDB4JHtjb2RlLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGNvbnN0IGxlbiA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBpZiAobGVuIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVsdGloYXNoIGludmFsaWQgbGVuZ3RoOiAweCR7bGVuLnRvU3RyaW5nKDE2KX1gKVxuICB9XG4gIGJ1ZiA9IGJ1Zi5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxuXG4gIGlmIChidWYubGVuZ3RoICE9PSBsZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11bHRpaGFzaCBsZW5ndGggaW5jb25zaXN0ZW50OiAweCR7YnVmLnRvU3RyaW5nKCdoZXgnKX1gKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2RlOiBjb2RlLFxuICAgIG5hbWU6IGNzLmNvZGVzW2NvZGVdLFxuICAgIGxlbmd0aDogbGVuLFxuICAgIGRpZ2VzdDogYnVmXG4gIH1cbn1cblxuLyoqXG4gKiAgRW5jb2RlIGEgaGFzaCBkaWdlc3QgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGNvZGUuXG4gKlxuICogPiAqKk5vdGU6KiogdGhlIGxlbmd0aCBpcyBkZXJpdmVkIGZyb20gdGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0IGl0c2VsZi5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGlnZXN0XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUgKGRpZ2VzdCwgY29kZSwgbGVuZ3RoKSB7XG4gIGlmICghZGlnZXN0IHx8IGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbXVsdGloYXNoIGVuY29kZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gYXJnczogZGlnZXN0LCBjb2RlJylcbiAgfVxuXG4gIC8vIGVuc3VyZSBpdCdzIGEgaGFzaGZ1bmN0aW9uIGNvZGUuXG4gIGNvbnN0IGhhc2hmbiA9IGV4cG9ydHMuY29lcmNlQ29kZShjb2RlKVxuXG4gIGlmICghKEJ1ZmZlci5pc0J1ZmZlcihkaWdlc3QpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAobGVuZ3RoID09IG51bGwpIHtcbiAgICBsZW5ndGggPSBkaWdlc3QubGVuZ3RoXG4gIH1cblxuICBpZiAobGVuZ3RoICYmIGRpZ2VzdC5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGlnZXN0IGxlbmd0aCBzaG91bGQgYmUgZXF1YWwgdG8gc3BlY2lmaWVkIGxlbmd0aC4nKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1xuICAgIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoaGFzaGZuKSksXG4gICAgQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShsZW5ndGgpKSxcbiAgICBkaWdlc3RcbiAgXSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGhhc2ggZnVuY3Rpb24gbmFtZSBpbnRvIHRoZSBtYXRjaGluZyBjb2RlLlxuICogSWYgcGFzc2VkIGEgbnVtYmVyIGl0IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgaWYgaXQncyBhIHZhbGlkIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydHMuY29lcmNlQ29kZSA9IGZ1bmN0aW9uIGNvZXJjZUNvZGUgKG5hbWUpIHtcbiAgbGV0IGNvZGUgPSBuYW1lXG5cbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGlmIChjcy5uYW1lc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZ1bmN0aW9uIG5hbWVkOiAke25hbWV9YClcbiAgICB9XG4gICAgY29kZSA9IGNzLm5hbWVzW25hbWVdXG4gIH1cblxuICBpZiAodHlwZW9mIGNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIYXNoIGZ1bmN0aW9uIGNvZGUgc2hvdWxkIGJlIGEgbnVtYmVyLiBHb3Q6ICR7Y29kZX1gKVxuICB9XG5cbiAgaWYgKGNzLmNvZGVzW2NvZGVdID09PSB1bmRlZmluZWQgJiYgIWV4cG9ydHMuaXNBcHBDb2RlKGNvZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZnVuY3Rpb24gY29kZTogJHtjb2RlfWApXG4gIH1cblxuICByZXR1cm4gY29kZVxufVxuXG4vKipcbiAqIENoZWNrcyB3ZXRoZXIgYSBjb2RlIGlzIHBhcnQgb2YgdGhlIGFwcCByYW5nZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0cy5pc0FwcENvZGUgPSBmdW5jdGlvbiBhcHBDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID4gMCAmJiBjb2RlIDwgMHgxMFxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbXVsdGloYXNoIGNvZGUgaXMgdmFsaWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLmlzVmFsaWRDb2RlID0gZnVuY3Rpb24gdmFsaWRDb2RlIChjb2RlKSB7XG4gIGlmIChleHBvcnRzLmlzQXBwQ29kZShjb2RlKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoY3MuY29kZXNbY29kZV0pIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBpcyBhIHZhbGlkIG11bHRpaGFzaC4gVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlIChtdWx0aWhhc2gpIHtcbiAgZXhwb3J0cy5kZWNvZGUobXVsdGloYXNoKSAvLyB0aHJvd3MgaWYgYmFkLlxufVxuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlXG5cbi8qKlxuICogUmV0dXJucyBhIHByZWZpeCBmcm9tIGEgdmFsaWQgbXVsdGloYXNoLiBUaHJvd3MgYW4gZXJyb3IgaWYgaXQgaXMgbm90IHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtdWx0aWhhc2hcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuZXhwb3J0cy5wcmVmaXggPSBmdW5jdGlvbiBwcmVmaXggKG11bHRpaGFzaCkge1xuICB2YWxpZGF0ZShtdWx0aWhhc2gpXG5cbiAgcmV0dXJuIG11bHRpaGFzaC5zbGljZSgwLCAyKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIFByb3RvY29scyAocHJvdG8pIHtcbiAgaWYgKHR5cGVvZiAocHJvdG8pID09PSAnbnVtYmVyJykge1xuICAgIGlmIChQcm90b2NvbHMuY29kZXNbcHJvdG9dKSB7XG4gICAgICByZXR1cm4gUHJvdG9jb2xzLmNvZGVzW3Byb3RvXVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJvdG9jb2wgd2l0aCBjb2RlOiAnICsgcHJvdG8pXG4gIH0gZWxzZSBpZiAodHlwZW9mIChwcm90bykgPT09ICdzdHJpbmcnIHx8IHByb3RvIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgaWYgKFByb3RvY29scy5uYW1lc1twcm90b10pIHtcbiAgICAgIHJldHVybiBQcm90b2NvbHMubmFtZXNbcHJvdG9dXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcm90b2NvbCB3aXRoIG5hbWU6ICcgKyBwcm90bylcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwcm90b2NvbCBpZCB0eXBlOiAnICsgcHJvdG8pXG59XG5cbmNvbnN0IFYgPSAtMVxuUHJvdG9jb2xzLmxlbmd0aFByZWZpeGVkVmFyU2l6ZSA9IFZcblByb3RvY29scy5WID0gVlxuXG5Qcm90b2NvbHMudGFibGUgPSBbXG4gIFs0LCAzMiwgJ2lwNCddLFxuICBbNiwgMTYsICd0Y3AnXSxcbiAgWzMzLCAxNiwgJ2RjY3AnXSxcbiAgWzQxLCAxMjgsICdpcDYnXSxcbiAgWzQyLCBWLCAnaXA2em9uZSddLFxuICBbNTMsIFYsICdkbnMnLCAncmVzb2x2YWJsZSddLFxuICBbNTQsIFYsICdkbnM0JywgJ3Jlc29sdmFibGUnXSxcbiAgWzU1LCBWLCAnZG5zNicsICdyZXNvbHZhYmxlJ10sXG4gIFs1NiwgViwgJ2Ruc2FkZHInLCAncmVzb2x2YWJsZSddLFxuICBbMTMyLCAxNiwgJ3NjdHAnXSxcbiAgWzI3MywgMTYsICd1ZHAnXSxcbiAgWzI3NSwgMCwgJ3AycC13ZWJydGMtc3RhciddLFxuICBbMjc2LCAwLCAncDJwLXdlYnJ0Yy1kaXJlY3QnXSxcbiAgWzI3NywgMCwgJ3AycC1zdGFyZHVzdCddLFxuICBbMjkwLCAwLCAncDJwLWNpcmN1aXQnXSxcbiAgWzMwMSwgMCwgJ3VkdCddLFxuICBbMzAyLCAwLCAndXRwJ10sXG4gIFs0MDAsIFYsICd1bml4JywgZmFsc2UsICdwYXRoJ10sXG4gIC8vIGBpcGZzYCBpcyBhZGRlZCBiZWZvcmUgYHAycGAgZm9yIGxlZ2FjeSBzdXBwb3J0LlxuICAvLyBBbGwgdGV4dCByZXByZXNlbnRhdGlvbnMgd2lsbCBkZWZhdWx0IHRvIGBwMnBgLCBidXQgYGlwZnNgIHdpbGxcbiAgLy8gc3RpbGwgYmUgc3VwcG9ydGVkXG4gIFs0MjEsIFYsICdpcGZzJ10sXG4gIC8vIGBwMnBgIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgNDIxLCBhbmQgaXMgbm93IHRoZSBkZWZhdWx0XG4gIFs0MjEsIFYsICdwMnAnXSxcbiAgWzQ0MywgMCwgJ2h0dHBzJ10sXG4gIFs0NDQsIDk2LCAnb25pb24nXSxcbiAgWzQ0NSwgMjk2LCAnb25pb24zJ10sXG4gIFs0NDYsIFYsICdnYXJsaWM2NCddLFxuICBbNDYwLCAwLCAncXVpYyddLFxuICBbNDc3LCAwLCAnd3MnXSxcbiAgWzQ3OCwgMCwgJ3dzcyddLFxuICBbNDc5LCAwLCAncDJwLXdlYnNvY2tldC1zdGFyJ10sXG4gIFs0ODAsIDAsICdodHRwJ11cbl1cblxuUHJvdG9jb2xzLm5hbWVzID0ge31cblByb3RvY29scy5jb2RlcyA9IHt9XG5cbi8vIHBvcHVsYXRlIHRhYmxlc1xuUHJvdG9jb2xzLnRhYmxlLm1hcChyb3cgPT4ge1xuICBjb25zdCBwcm90byA9IHAuYXBwbHkobnVsbCwgcm93KVxuICBQcm90b2NvbHMuY29kZXNbcHJvdG8uY29kZV0gPSBwcm90b1xuICBQcm90b2NvbHMubmFtZXNbcHJvdG8ubmFtZV0gPSBwcm90b1xufSlcblxuUHJvdG9jb2xzLm9iamVjdCA9IHBcblxuZnVuY3Rpb24gcCAoY29kZSwgc2l6ZSwgbmFtZSwgcmVzb2x2YWJsZSwgcGF0aCkge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IGNvZGUsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJlc29sdmFibGU6IEJvb2xlYW4ocmVzb2x2YWJsZSksXG4gICAgcGF0aDogQm9vbGVhbihwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvdG9jb2xzXG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgbWggPSByZXF1aXJlKCdtdWx0aWhhc2hlcycpXG5jb25zdCBtdWx0aWJhc2UgPSByZXF1aXJlKCdtdWx0aWJhc2UnKVxuY29uc3QgbXVsdGljb2RlYyA9IHJlcXVpcmUoJ211bHRpY29kZWMnKVxuY29uc3QgY29kZWNzID0gcmVxdWlyZSgnbXVsdGljb2RlYy9zcmMvYmFzZS10YWJsZS5qc29uJylcbmNvbnN0IENJRFV0aWwgPSByZXF1aXJlKCcuL2NpZC11dGlsJylcbmNvbnN0IHdpdGhJcyA9IHJlcXVpcmUoJ2NsYXNzLWlzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXJpYWxpemVkQ0lEXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNcbiAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJzaW9uXG4gKiBAcGFyYW0ge0J1ZmZlcn0gbXVsdGloYXNoXG4gKi9cblxuLyoqXG4gKiBUZXN0IGlmIHRoZSBnaXZlbiBpbnB1dCBpcyBhIENJRC5cbiAqIEBmdW5jdGlvbiBpc0NJRFxuICogQG1lbWJlcm9mIENJRFxuICogQHN0YXRpY1xuICogQHBhcmFtIHthbnl9IG90aGVyXG4gKiBAcmV0dXJucyB7Ym9vbH1cbiAqL1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIENJRCBgPG1iYXNlPjx2ZXJzaW9uPjxtY29kZWM+PG1oYXNoPmBcbiAqICwgYXMgZGVmaW5lZCBpbiBbaXBsZC9jaWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvY2lkKS5cbiAqIEBjbGFzcyBDSURcbiAqL1xuY2xhc3MgQ0lEIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDSUQuXG4gICAqXG4gICAqIFRoZSBhbGdvcml0aG0gZm9yIGFyZ3VtZW50IGlucHV0IGlzIHJvdWdobHk6XG4gICAqIGBgYFxuICAgKiBpZiAoY2lkKVxuICAgKiAgIC0+IGNyZWF0ZSBhIGNvcHlcbiAgICogZWxzZSBpZiAoc3RyKVxuICAgKiAgIGlmICgxc3QgY2hhciBpcyBvbiBtdWx0aWJhc2UgdGFibGUpIC0+IENJRCBTdHJpbmdcbiAgICogICBlbHNlIC0+IGJzNTggZW5jb2RlZCBtdWx0aWhhc2hcbiAgICogZWxzZSBpZiAoQnVmZmVyKVxuICAgKiAgIGlmICgxc3QgYnl0ZSBpcyAwIG9yIDEpIC0+IENJRFxuICAgKiAgIGVsc2UgLT4gbXVsdGloYXNoXG4gICAqIGVsc2UgaWYgKE51bWJlcilcbiAgICogICAtPiBjb25zdHJ1Y3QgQ0lEIGJ5IHBhcnRzXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8Q0lEfSB2ZXJzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZWNdXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBbbXVsdGloYXNoXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW211bHRpYmFzZU5hbWVdXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBDSUQoPHZlcnNpb24+LCA8Y29kZWM+LCA8bXVsdGloYXNoPiwgPG11bHRpYmFzZU5hbWU+KVxuICAgKiBuZXcgQ0lEKDxjaWRTdHI+KVxuICAgKiBuZXcgQ0lEKDxjaWQuYnVmZmVyPilcbiAgICogbmV3IENJRCg8bXVsdGloYXNoPilcbiAgICogbmV3IENJRCg8YnM1OCBlbmNvZGVkIG11bHRpaGFzaD4pXG4gICAqIG5ldyBDSUQoPGNpZD4pXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgY29kZWMsIG11bHRpaGFzaCwgbXVsdGliYXNlTmFtZSkge1xuICAgIGlmIChfQ0lELmlzQ0lEKHZlcnNpb24pKSB7XG4gICAgICAvLyB2ZXJzaW9uIGlzIGFuIGV4aXNpbmcgQ0lEIGluc3RhbmNlXG4gICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICB0aGlzLnZlcnNpb24gPSBjaWQudmVyc2lvblxuICAgICAgdGhpcy5jb2RlYyA9IGNpZC5jb2RlY1xuICAgICAgdGhpcy5tdWx0aWhhc2ggPSBCdWZmZXIuZnJvbShjaWQubXVsdGloYXNoKVxuICAgICAgLy8gRGVmYXVsdCBndWFyZCBmb3Igd2hlbiBhIENJRCA8IDAuNyBpcyBwYXNzZWQgd2l0aCBubyBtdWx0aWJhc2VOYW1lXG4gICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBjaWQubXVsdGliYXNlTmFtZSB8fCAoY2lkLnZlcnNpb24gPT09IDAgPyAnYmFzZTU4YnRjJyA6ICdiYXNlMzInKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZS5nLiAnYmFzZTMyJyBvciBmYWxzZVxuICAgICAgY29uc3QgYmFzZU5hbWUgPSBtdWx0aWJhc2UuaXNFbmNvZGVkKHZlcnNpb24pXG4gICAgICBpZiAoYmFzZU5hbWUpIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIENJRCBTdHJpbmcgZW5jb2RlZCB3aXRoIG11bHRpYmFzZSwgc28gdjFcbiAgICAgICAgY29uc3QgY2lkID0gbXVsdGliYXNlLmRlY29kZSh2ZXJzaW9uKVxuICAgICAgICB0aGlzLnZlcnNpb24gPSBwYXJzZUludChjaWQuc2xpY2UoMCwgMSkudG9TdHJpbmcoJ2hleCcpLCAxNilcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSBiYXNlTmFtZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIGJhc2U1OGJ0YyBzdHJpbmcgbXVsdGloYXNoLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG1oLmZyb21CNThTdHJpbmcodmVyc2lvbilcbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdHJpbmcnLCB7IHZhbHVlOiB2ZXJzaW9uIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZlcnNpb24pKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGUgPSB2ZXJzaW9uLnNsaWNlKDAsIDEpXG4gICAgICBjb25zdCB2ID0gcGFyc2VJbnQoZmlyc3RCeXRlLnRvU3RyaW5nKCdoZXgnKSwgMTYpXG4gICAgICBpZiAodiA9PT0gMSkge1xuICAgICAgICAvLyB2ZXJzaW9uIGlzIGEgQ0lEIGJ1ZmZlclxuICAgICAgICBjb25zdCBjaWQgPSB2ZXJzaW9uXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZcbiAgICAgICAgdGhpcy5jb2RlYyA9IG11bHRpY29kZWMuZ2V0Q29kZWMoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IG11bHRpY29kZWMucm1QcmVmaXgoY2lkLnNsaWNlKDEpKVxuICAgICAgICB0aGlzLm11bHRpYmFzZU5hbWUgPSAnYmFzZTMyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhIHJhdyBtdWx0aWhhc2ggYnVmZmVyLCBzbyB2MFxuICAgICAgICB0aGlzLnZlcnNpb24gPSAwXG4gICAgICAgIHRoaXMuY29kZWMgPSAnZGFnLXBiJ1xuICAgICAgICB0aGlzLm11bHRpaGFzaCA9IHZlcnNpb25cbiAgICAgICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gJ2Jhc2U1OGJ0YydcbiAgICAgIH1cbiAgICAgIENJRC52YWxpZGF0ZUNJRCh0aGlzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBhc3NlbWJsZSB0aGUgQ0lEIGZyb20gdGhlIHBhcmFtZXRlcnNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvblxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmNvZGVjID0gY29kZWNcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWhhc2ggPSBtdWx0aWhhc2hcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5tdWx0aWJhc2VOYW1lID0gbXVsdGliYXNlTmFtZSB8fCAodmVyc2lvbiA9PT0gMCA/ICdiYXNlNThidGMnIDogJ2Jhc2UzMicpXG5cbiAgICBDSUQudmFsaWRhdGVDSUQodGhpcylcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQ0lEIGFzIGEgYEJ1ZmZlcmBcbiAgICpcbiAgICogQHJldHVybiB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICpcbiAgICogQG1lbWJlck9mIENJRFxuICAgKi9cbiAgZ2V0IGJ1ZmZlciAoKSB7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuX2J1ZmZlclxuXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDApIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5tdWx0aWhhc2hcbiAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKCcwMScsICdoZXgnKSxcbiAgICAgICAgICBtdWx0aWNvZGVjLmdldENvZGVWYXJpbnQodGhpcy5jb2RlYyksXG4gICAgICAgICAgdGhpcy5tdWx0aWhhc2hcbiAgICAgICAgXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgICB9XG5cbiAgICAgIC8vIENhY2hlIHRoaXMgYnVmZmVyIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSByZWNyZWF0ZWRcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2J1ZmZlcicsIHsgdmFsdWU6IGJ1ZmZlciB9KVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZWZpeCBvZiB0aGUgQ0lELlxuICAgKlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGdldCBwcmVmaXggKCkge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKGAwJHt0aGlzLnZlcnNpb259YCwgJ2hleCcpLFxuICAgICAgbXVsdGljb2RlYy5nZXRDb2RlVmFyaW50KHRoaXMuY29kZWMpLFxuICAgICAgbWgucHJlZml4KHRoaXMubXVsdGloYXNoKVxuICAgIF0pXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBhIENJRCBvZiB2ZXJzaW9uIGAwYC5cbiAgICpcbiAgICogQHJldHVybnMge0NJRH1cbiAgICovXG4gIHRvVjAgKCkge1xuICAgIGlmICh0aGlzLmNvZGVjICE9PSAnZGFnLXBiJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBhIG5vbiBkYWctcGIgQ0lEIHRvIENJRHYwJylcbiAgICB9XG5cbiAgICBjb25zdCB7IG5hbWUsIGxlbmd0aCB9ID0gbWguZGVjb2RlKHRoaXMubXVsdGloYXNoKVxuXG4gICAgaWYgKG5hbWUgIT09ICdzaGEyLTI1NicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgbm9uIHNoYTItMjU2IG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIGlmIChsZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IG5vbiAzMiBieXRlIG11bHRpaGFzaCBDSUQgdG8gQ0lEdjAnKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgX0NJRCgwLCB0aGlzLmNvZGVjLCB0aGlzLm11bHRpaGFzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGEgQ0lEIG9mIHZlcnNpb24gYDFgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q0lEfVxuICAgKi9cbiAgdG9WMSAoKSB7XG4gICAgcmV0dXJuIG5ldyBfQ0lEKDEsIHRoaXMuY29kZWMsIHRoaXMubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSB0aGUgQ0lEIGludG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZT10aGlzLm11bHRpYmFzZU5hbWVdIC0gQmFzZSBlbmNvZGluZyB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0b0Jhc2VFbmNvZGVkU3RyaW5nIChiYXNlID0gdGhpcy5tdWx0aWJhc2VOYW1lKSB7XG4gICAgaWYgKHRoaXMuc3RyaW5nICYmIGJhc2UgPT09IHRoaXMubXVsdGliYXNlTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nXG4gICAgfVxuICAgIGxldCBzdHIgPSBudWxsXG4gICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gMCkge1xuICAgICAgaWYgKGJhc2UgIT09ICdiYXNlNThidGMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHN1cHBvcnRlZCB3aXRoIENJRHYwLCB0byBzdXBwb3J0IGRpZmZlcmVudCBiYXNlcywgcGxlYXNlIG1pZ3JhdGUgdGhlIGluc3RhbmNlIGRvIENJRHYxLCB5b3UgY2FuIGRvIHRoYXQgdGhyb3VnaCBjaWQudG9WMSgpJylcbiAgICAgIH1cbiAgICAgIHN0ciA9IG1oLnRvQjU4U3RyaW5nKHRoaXMubXVsdGloYXNoKVxuICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAxKSB7XG4gICAgICBzdHIgPSBtdWx0aWJhc2UuZW5jb2RlKGJhc2UsIHRoaXMuYnVmZmVyKS50b1N0cmluZygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmVyc2lvbicpXG4gICAgfVxuICAgIGlmIChiYXNlID09PSB0aGlzLm11bHRpYmFzZU5hbWUpIHtcbiAgICAgIC8vIGNhY2hlIHRoZSBzdHJpbmcgdmFsdWVcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RyaW5nJywgeyB2YWx1ZTogc3RyIH0pXG4gICAgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIHRvU3RyaW5nIChiYXNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9CYXNlRW5jb2RlZFN0cmluZyhiYXNlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBhIHBsYWluIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge1NlcmlhbGl6ZWRDSUR9XG4gICAqL1xuICB0b0pTT04gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlYzogdGhpcy5jb2RlYyxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIGhhc2g6IHRoaXMubXVsdGloYXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZXF1YWxpdHkgd2l0aCBhbm90aGVyIENJRC5cbiAgICpcbiAgICogQHBhcmFtIHtDSUR9IG90aGVyXG4gICAqIEByZXR1cm5zIHtib29sfVxuICAgKi9cbiAgZXF1YWxzIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmNvZGVjID09PSBvdGhlci5jb2RlYyAmJlxuICAgICAgdGhpcy52ZXJzaW9uID09PSBvdGhlci52ZXJzaW9uICYmXG4gICAgICB0aGlzLm11bHRpaGFzaC5lcXVhbHMob3RoZXIubXVsdGloYXNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogVGhyb3dzIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG90aGVyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQ0lEIChvdGhlcikge1xuICAgIGNvbnN0IGVycm9yTXNnID0gQ0lEVXRpbC5jaGVja0NJRENvbXBvbmVudHMob3RoZXIpXG4gICAgaWYgKGVycm9yTXNnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IF9DSUQgPSB3aXRoSXMoQ0lELCB7XG4gIGNsYXNzTmFtZTogJ0NJRCcsXG4gIHN5bWJvbE5hbWU6ICdAaXBsZC9qcy1jaWQvQ0lEJ1xufSlcblxuX0NJRC5jb2RlY3MgPSBjb2RlY3NcblxubW9kdWxlLmV4cG9ydHMgPSBfQ0lEXG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cblxuLyoqXG4gKiBSZWFkIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5c30gZGlycyAmIGZpbGVzXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucmVhZGRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHZhciBkaXJzID0gW10sIGZpbGVzID0gW11cbiAgZGlycy5wdXNoKGRwYXRoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IobnVsbCwgZGlycywgZmlsZXMpXG4gICAgZnMucmVhZGRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVyciwgX2ZpbGVzKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZ2V0c3RhdChkaXJzW2luZGV4XSwgX2ZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGxvb3AoKytpbmRleClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSgwKSlcblxuICAvKipcbiAgICogR2V0IHN0YXRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdG9yeSBwYXRoXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZpbGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0c3RhdCAoZHBhdGgsIF9maWxlcywgY2IpIHtcbiAgICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT0gX2ZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICAgIHZhciBmcGF0aCA9IHBhdGguam9pbihkcGF0aCwgX2ZpbGVzW2luZGV4XSlcbiAgICAgIGZzLnN0YXQoZnBhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXRzKSB7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgZGlycy5wdXNoKGZwYXRoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVzLnB1c2goZnBhdGgpXG4gICAgICAgIH1cbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KDApKVxuICB9XG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciByZWFkZGlyciA9IHJlcXVpcmUoJy4vcmVhZGRpcnInKS5yZWFkZGlyclxuXG5cbi8qKlxuICogUmVtb3ZlIGRpcmVjdG9yeSByZWN1cnNpdmVseVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5ybWRpcnIgPSBmdW5jdGlvbiAoZHBhdGgsIGNiKSB7XG4gIHJlYWRkaXJyKGRwYXRoLCBmdW5jdGlvbiAoZXJyLCBkaXJzLCBmaWxlcykge1xuICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgZXhwb3J0cy5ybWZpbGVzKGZpbGVzLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgZXhwb3J0cy5ybWRpcnMoZGlycywgY2IpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBsaXN0IG9mIGZpbGVzXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMucm1maWxlcyA9IGZ1bmN0aW9uIChmaWxlcywgY2IpIHtcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBmaWxlcy5sZW5ndGgpIHJldHVybiBjYigpXG4gICAgZnMudW5saW5rKGZpbGVzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFJlbW92ZSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkaXJzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnJtZGlycyA9IGZ1bmN0aW9uIChkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoZGVzYylcbiAgOyhmdW5jdGlvbiBsb29wIChpbmRleCkge1xuICAgIGlmIChpbmRleCA9PSBkaXJzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5ybWRpcihkaXJzW2luZGV4XSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgIGxvb3AoKytpbmRleClcbiAgICB9KVxuICB9KDApKVxufVxuXG4vKipcbiAqIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhXG4gKiBAcGFyYW0ge1N0cmluZ30gYlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gIGlmIChhID4gYikgcmV0dXJuIC0xXG4gIGlmIChhIDwgYikgcmV0dXJuICAxXG4gIHJldHVybiAwXG59XG4iLCJcbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJylcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG52YXIgcmVhZGRpcnIgPSByZXF1aXJlKCcuL3JlYWRkaXJyJykucmVhZGRpcnJcblxuXG4vKipcbiAqIENvcHkgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0IHBhdGhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BkaXJyID0gZnVuY3Rpb24gKHNwYXRoLCB0cGF0aCwgY2IpIHtcbiAgcmVhZGRpcnIoc3BhdGgsIGZ1bmN0aW9uIChlcnIsIGRpcnMsIGZpbGVzKSB7XG4gICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICBleHBvcnRzLmNwZGlycyhzcGF0aCwgdHBhdGgsIGRpcnMsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICBleHBvcnRzLmNwZmlsZXMoc3BhdGgsIHRwYXRoLCBmaWxlcywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBjYigpXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZGlyZWN0b3JpZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZGlyc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZXhwb3J0cy5jcGRpcnMgPSBmdW5jdGlvbiAoc3BhdGgsIHRwYXRoLCBkaXJzLCBjYikge1xuICBkaXJzLnNvcnQoKVxuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGRpcnMubGVuZ3RoKSByZXR1cm4gY2IoKVxuICAgIHZhciBycGF0aCA9IHBhdGgucmVsYXRpdmUoc3BhdGgsIGRpcnNbaW5kZXhdKVxuICAgIHJwYXRoID0gcGF0aC5qb2luKHRwYXRoLCBycGF0aClcbiAgICBmcy5leGlzdHMocnBhdGgsIGZ1bmN0aW9uIChleGlzdHMpIHtcbiAgICAgIGlmIChleGlzdHMpIHJldHVybiBsb29wKCsraW5kZXgpXG4gICAgICBmcy5ta2RpcihycGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2IoZXJyKVxuICAgICAgICBsb29wKCsraW5kZXgpXG4gICAgICB9KVxuICAgIH0pXG4gIH0oMCkpXG59XG5cbi8qKlxuICogQ29weSBhIGxpc3Qgb2YgZmlsZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQgcGF0aFxuICogQHBhcmFtIHtBcnJheX0gZmlsZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY3BmaWxlcyA9IGZ1bmN0aW9uIChzcGF0aCwgdHBhdGgsIGZpbGVzLCBjYikge1xuICA7KGZ1bmN0aW9uIGxvb3AgKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09IGZpbGVzLmxlbmd0aCkgcmV0dXJuIGNiKClcbiAgICBmcy5yZWFkRmlsZShmaWxlc1tpbmRleF0sIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYihlcnIpXG4gICAgICB2YXIgcnBhdGggPSBwYXRoLnJlbGF0aXZlKHNwYXRoLCBmaWxlc1tpbmRleF0pXG4gICAgICBycGF0aCA9IHBhdGguam9pbih0cGF0aCwgcnBhdGgpXG4gICAgICBmcy53cml0ZUZpbGUocnBhdGgsIGRhdGEsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNiKGVycilcbiAgICAgICAgbG9vcCgrK2luZGV4KVxuICAgICAgfSlcbiAgICB9KVxuICB9KDApKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogTWF0aC5sb2coMSArIHgpO1xufTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBFUFNJTE9OID0gcG93KDIsIC01Mik7XG52YXIgRVBTSUxPTjMyID0gcG93KDIsIC0yMyk7XG52YXIgTUFYMzIgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKTtcbnZhciBNSU4zMiA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uIChuKSB7XG4gIHJldHVybiBuICsgMSAvIEVQU0lMT04gLSAxIC8gRVBTSUxPTjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBNYXRoLmFicyh4KTtcbiAgdmFyICRzaWduID0gc2lnbih4KTtcbiAgdmFyIGEsIHJlc3VsdDtcbiAgaWYgKCRhYnMgPCBNSU4zMikgcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgYSA9ICgxICsgRVBTSUxPTjMyIC8gRVBTSUxPTikgKiAkYWJzO1xuICByZXN1bHQgPSBhIC0gKGEgLSAkYWJzKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIC8vIE5vdGU6IHN0YXR1cyBpcyBub3QgZXhwb3NlZCBieSBYRG9tYWluUmVxdWVzdFxuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG5cbi8vIFJGQzcyMzHCpzQuMi4xOiBPZiB0aGUgcmVxdWVzdCBtZXRob2RzIGRlZmluZWQgYnkgdGhpcyBzcGVjaWZpY2F0aW9uLFxuLy8gdGhlIEdFVCwgSEVBRCwgT1BUSU9OUywgYW5kIFRSQUNFIG1ldGhvZHMgYXJlIGRlZmluZWQgdG8gYmUgc2FmZS5cbnZhciBTQUZFX01FVEhPRFMgPSB7IEdFVDogdHJ1ZSwgSEVBRDogdHJ1ZSwgT1BUSU9OUzogdHJ1ZSwgVFJBQ0U6IHRydWUgfTtcblxuLy8gQ3JlYXRlIGhhbmRsZXJzIHRoYXQgcGFzcyBldmVudHMgZnJvbSBuYXRpdmUgcmVxdWVzdHNcbnZhciBldmVudEhhbmRsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbltcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImVycm9yXCIsIFwic29ja2V0XCIsIFwidGltZW91dFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudEhhbmRsZXJzW2V2ZW50XSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB0aGlzLl9yZWRpcmVjdGFibGUuZW1pdChldmVudCwgYXJnKTtcbiAgfTtcbn0pO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIFNpbmNlIGh0dHAucmVxdWVzdCB0cmVhdHMgaG9zdCBhcyBhbiBhbGlhcyBvZiBob3N0bmFtZSxcbiAgLy8gYnV0IHRoZSB1cmwgbW9kdWxlIGludGVycHJldHMgaG9zdCBhcyBob3N0bmFtZSBwbHVzIHBvcnQsXG4gIC8vIGVsaW1pbmF0ZSB0aGUgaG9zdCBwcm9wZXJ0eSB0byBhdm9pZCBjb25mdXNpb24uXG4gIGlmIChvcHRpb25zLmhvc3QpIHtcbiAgICAvLyBVc2UgaG9zdG5hbWUgaWYgc2V0LCBiZWNhdXNlIGl0IGhhcyBwcmVjZWRlbmNlXG4gICAgaWYgKCFvcHRpb25zLmhvc3RuYW1lKSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gb3B0aW9ucy5ob3N0O1xuICAgIH1cbiAgICBkZWxldGUgb3B0aW9ucy5ob3N0O1xuICB9XG5cbiAgLy8gQXR0YWNoIGEgY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChyZXNwb25zZUNhbGxiYWNrKSB7XG4gICAgdGhpcy5vbihcInJlc3BvbnNlXCIsIHJlc3BvbnNlQ2FsbGJhY2spO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gcmVzcG9uc2VzIG9mIG5hdGl2ZSByZXF1ZXN0c1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBzZWxmLl9wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9O1xuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBWYWxpZGF0ZSBpbnB1dCBhbmQgc2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKCEodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgKFwibGVuZ3RoXCIgaW4gZGF0YSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBzaG91bGQgYmUgYSBzdHJpbmcsIEJ1ZmZlciBvciBVaW50OEFycmF5XCIpO1xuICB9XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gSWdub3JlIGVtcHR5IGJ1ZmZlcnMsIHNpbmNlIHdyaXRpbmcgdGhlbSBkb2Vzbid0IGludm9rZSB0aGUgY2FsbGJhY2tcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yMjA2NlxuICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICAvLyBPbmx5IHdyaXRlIHdoZW4gd2UgZG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGlmICh0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArIGRhdGEubGVuZ3RoIDw9IHRoaXMuX29wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycy5wdXNoKHsgZGF0YTogZGF0YSwgZW5jb2Rpbmc6IGVuY29kaW5nIH0pO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LndyaXRlKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gIH1cbiAgLy8gRXJyb3Igd2hlbiB3ZSBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgZWxzZSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXRcIikpO1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxufTtcblxuLy8gRW5kcyB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBTaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICBkYXRhID0gZW5jb2RpbmcgPSBudWxsO1xuICB9XG4gIGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBXcml0ZSBkYXRhIGFuZCBlbmRcbiAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gIHRoaXMud3JpdGUoZGF0YSB8fCBcIlwiLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgIGN1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gIH0pO1xufTtcblxuLy8gU2V0cyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xufTtcblxuLy8gQ2xlYXJzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWxldGUgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVIZWFkZXIobmFtZSk7XG59O1xuXG4vLyBQcm94eSBhbGwgb3RoZXIgcHVibGljIENsaWVudFJlcXVlc3QgbWV0aG9kc1xuW1xuICBcImFib3J0XCIsIFwiZmx1c2hIZWFkZXJzXCIsIFwiZ2V0SGVhZGVyXCIsXG4gIFwic2V0Tm9EZWxheVwiLCBcInNldFNvY2tldEtlZXBBbGl2ZVwiLCBcInNldFRpbWVvdXRcIixcbl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gIFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFttZXRob2RdKGEsIGIpO1xuICB9O1xufSk7XG5cbi8vIFByb3h5IGFsbCBwdWJsaWMgQ2xpZW50UmVxdWVzdCBwcm9wZXJ0aWVzXG5bXCJhYm9ydGVkXCIsIFwiY29ubmVjdGlvblwiLCBcInNvY2tldFwiXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUsIHByb3BlcnR5LCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50UmVxdWVzdFtwcm9wZXJ0eV07IH0sXG4gIH0pO1xufSk7XG5cbi8vIEV4ZWN1dGVzIHRoZSBuZXh0IG5hdGl2ZSByZXF1ZXN0IChpbml0aWFsIG9yIHJlZGlyZWN0KVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3BlcmZvcm1SZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBMb2FkIHRoZSBuYXRpdmUgcHJvdG9jb2xcbiAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5wcm90b2NvbDtcbiAgdmFyIG5hdGl2ZVByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5uYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdO1xuICBpZiAoIW5hdGl2ZVByb3RvY29sKSB7XG4gICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHNwZWNpZmllZCwgdXNlIHRoZSBhZ2VudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm90b2NvbFxuICAvLyAoSFRUUCBhbmQgSFRUUFMgdXNlIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMpXG4gIGlmICh0aGlzLl9vcHRpb25zLmFnZW50cykge1xuICAgIHZhciBzY2hlbWUgPSBwcm90b2NvbC5zdWJzdHIoMCwgcHJvdG9jb2wubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5fb3B0aW9ucy5hZ2VudCA9IHRoaXMuX29wdGlvbnMuYWdlbnRzW3NjaGVtZV07XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5hdGl2ZSByZXF1ZXN0XG4gIHZhciByZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3QgPVxuICAgICAgICBuYXRpdmVQcm90b2NvbC5yZXF1ZXN0KHRoaXMuX29wdGlvbnMsIHRoaXMuX29uTmF0aXZlUmVzcG9uc2UpO1xuICB0aGlzLl9jdXJyZW50VXJsID0gdXJsLmZvcm1hdCh0aGlzLl9vcHRpb25zKTtcblxuICAvLyBTZXQgdXAgZXZlbnQgaGFuZGxlcnNcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgaW4gZXZlbnRIYW5kbGVycykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICByZXF1ZXN0Lm9uKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZC5cbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dCgpIHtcbiAgICAgIGlmIChpIDwgYnVmZmVycy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICB9XG4gICAgfSgpKTtcbiAgfVxufTtcblxuLy8gUHJvY2Vzc2VzIGEgcmVzcG9uc2UgZnJvbSB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Byb2Nlc3NSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAvLyBTdG9yZSB0aGUgcmVkaXJlY3RlZCByZXNwb25zZVxuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBUaGUgM3h4IChSZWRpcmVjdGlvbikgY2xhc3Mgb2Ygc3RhdHVzIGNvZGUgaW5kaWNhdGVzXG4gIC8vIHRoYXQgZnVydGhlciBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4gYnkgdGhlIHVzZXIgYWdlbnQgaW4gb3JkZXIgdG9cbiAgLy8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gSWYgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQgaXMgcHJvdmlkZWQsXG4gIC8vIHRoZSB1c2VyIGFnZW50IE1BWSBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IGl0cyByZXF1ZXN0IHRvIHRoZSBVUklcbiAgLy8gcmVmZXJlbmNlZCBieSB0aGUgTG9jYXRpb24gZmllbGQgdmFsdWUsXG4gIC8vIGV2ZW4gaWYgdGhlIHNwZWNpZmljIHN0YXR1cyBjb2RlIGlzIG5vdCB1bmRlcnN0b29kLlxuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAobG9jYXRpb24gJiYgdGhpcy5fb3B0aW9ucy5mb2xsb3dSZWRpcmVjdHMgIT09IGZhbHNlICYmXG4gICAgICByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCAmJiByZXNwb25zZS5zdGF0dXNDb2RlIDwgNDAwKSB7XG4gICAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgICAvLyBpbiBjeWNsaWNhbCByZWRpcmVjdGlvbnMgKGkuZS4sIFwiaW5maW5pdGVcIiByZWRpcmVjdGlvbiBsb29wcykuXG4gICAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgRXJyb3IoXCJNYXggcmVkaXJlY3RzIGV4Y2VlZGVkLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUkZDNzIzMcKnNi40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gICAgLy8gY2FyZSBmb3IgbWV0aG9kcyBub3Qga25vd24gdG8gYmUgc2FmZSBb4oCmXSxcbiAgICAvLyBzaW5jZSB0aGUgdXNlciBtaWdodCBub3Qgd2lzaCB0byByZWRpcmVjdCBhbiB1bnNhZmUgcmVxdWVzdC5cbiAgICAvLyBSRkM3MjMxwqc2LjQuNzogVGhlIDMwNyAoVGVtcG9yYXJ5IFJlZGlyZWN0KSBzdGF0dXMgY29kZSBpbmRpY2F0ZXNcbiAgICAvLyB0aGF0IHRoZSB0YXJnZXQgcmVzb3VyY2UgcmVzaWRlcyB0ZW1wb3JhcmlseSB1bmRlciBhIGRpZmZlcmVudCBVUklcbiAgICAvLyBhbmQgdGhlIHVzZXIgYWdlbnQgTVVTVCBOT1QgY2hhbmdlIHRoZSByZXF1ZXN0IG1ldGhvZFxuICAgIC8vIGlmIGl0IHBlcmZvcm1zIGFuIGF1dG9tYXRpYyByZWRpcmVjdGlvbiB0byB0aGF0IFVSSS5cbiAgICB2YXIgaGVhZGVyO1xuICAgIHZhciBoZWFkZXJzID0gdGhpcy5fb3B0aW9ucy5oZWFkZXJzO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAzMDcgJiYgISh0aGlzLl9vcHRpb25zLm1ldGhvZCBpbiBTQUZFX01FVEhPRFMpKSB7XG4gICAgICB0aGlzLl9vcHRpb25zLm1ldGhvZCA9IFwiR0VUXCI7XG4gICAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoL15jb250ZW50LS9pLnRlc3QoaGVhZGVyKSkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wIHRoZSBIb3N0IGhlYWRlciwgYXMgdGhlIHJlZGlyZWN0IG1pZ2h0IGxlYWQgdG8gYSBkaWZmZXJlbnQgaG9zdFxuICAgIGlmICghdGhpcy5faXNSZWRpcmVjdCkge1xuICAgICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICBpZiAoL15ob3N0JC9pLnRlc3QoaGVhZGVyKSkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgICB2YXIgcmVkaXJlY3RVcmwgPSB1cmwucmVzb2x2ZSh0aGlzLl9jdXJyZW50VXJsLCBsb2NhdGlvbik7XG4gICAgZGVidWcoXCJyZWRpcmVjdGluZyB0b1wiLCByZWRpcmVjdFVybCk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9vcHRpb25zLCB1cmwucGFyc2UocmVkaXJlY3RVcmwpKTtcbiAgICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xuXG4gICAgLy8gRGlzY2FyZCB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXNwb25zZSB0byBhdm9pZCB3YWl0aW5nIGZvciBkYXRhXG4gICAgcmVzcG9uc2UuZGVzdHJveSgpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIFRoZSByZXNwb25zZSBpcyBub3QgYSByZWRpcmVjdDsgcmV0dXJuIGl0IGFzLWlzXG4gICAgcmVzcG9uc2UucmVzcG9uc2VVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xuICAgIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0cztcbiAgICB0aGlzLmVtaXQoXCJyZXNwb25zZVwiLCByZXNwb25zZSk7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuICB9XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG9wdGlvbnMgPSB1cmwucGFyc2Uob3B0aW9ucyk7XG4gICAgICAgIG9wdGlvbnMubWF4UmVkaXJlY3RzID0gZXhwb3J0cy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICBtYXhSZWRpcmVjdHM6IGV4cG9ydHMubWF4UmVkaXJlY3RzLFxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zLm5hdGl2ZVByb3RvY29scyA9IG5hdGl2ZVByb3RvY29scztcbiAgICAgIGFzc2VydC5lcXVhbChvcHRpb25zLnByb3RvY29sLCBwcm90b2NvbCwgXCJwcm90b2NvbCBtaXNtYXRjaFwiKTtcbiAgICAgIGRlYnVnKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICB3cmFwcGVkUHJvdG9jb2wuZ2V0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IHdyYXBwZWRQcm90b2NvbC5yZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWdbJ2RlZmF1bHQnXSA9IGNyZWF0ZURlYnVnO1xuZXhwb3J0cy5jb2VyY2UgPSBjb2VyY2U7XG5leHBvcnRzLmRpc2FibGUgPSBkaXNhYmxlO1xuZXhwb3J0cy5lbmFibGUgPSBlbmFibGU7XG5leHBvcnRzLmVuYWJsZWQgPSBlbmFibGVkO1xuZXhwb3J0cy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG5cbi8qKlxuICogQWN0aXZlIGBkZWJ1Z2AgaW5zdGFuY2VzLlxuICovXG5leHBvcnRzLmluc3RhbmNlcyA9IFtdO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuICovXG5cbmV4cG9ydHMubmFtZXMgPSBbXTtcbmV4cG9ydHMuc2tpcHMgPSBbXTtcblxuLyoqXG4gKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gKlxuICogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycyA9IHt9O1xuXG4vKipcbiAqIFNlbGVjdCBhIGNvbG9yLlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2VsZWN0Q29sb3IobmFtZXNwYWNlKSB7XG4gIHZhciBoYXNoID0gMCwgaTtcblxuICBmb3IgKGkgaW4gbmFtZXNwYWNlKSB7XG4gICAgaGFzaCAgPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIG5hbWVzcGFjZS5jaGFyQ29kZUF0KGkpO1xuICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBleHBvcnRzLmNvbG9ycy5sZW5ndGhdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEZWJ1ZyhuYW1lc3BhY2UpIHtcblxuICB2YXIgcHJldlRpbWU7XG5cbiAgZnVuY3Rpb24gZGVidWcoKSB7XG4gICAgLy8gZGlzYWJsZWQ/XG4gICAgaWYgKCFkZWJ1Zy5lbmFibGVkKSByZXR1cm47XG5cbiAgICB2YXIgc2VsZiA9IGRlYnVnO1xuXG4gICAgLy8gc2V0IGBkaWZmYCB0aW1lc3RhbXBcbiAgICB2YXIgY3VyciA9ICtuZXcgRGF0ZSgpO1xuICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgc2VsZi5kaWZmID0gbXM7XG4gICAgc2VsZi5wcmV2ID0gcHJldlRpbWU7XG4gICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICBwcmV2VGltZSA9IGN1cnI7XG5cbiAgICAvLyB0dXJuIHRoZSBgYXJndW1lbnRzYCBpbnRvIGEgcHJvcGVyIEFycmF5XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGFyZ3NbMF0gPSBleHBvcnRzLmNvZXJjZShhcmdzWzBdKTtcblxuICAgIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGFyZ3NbMF0pIHtcbiAgICAgIC8vIGFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG4gICAgICBhcmdzLnVuc2hpZnQoJyVPJyk7XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCBmdW5jdGlvbihtYXRjaCwgZm9ybWF0KSB7XG4gICAgICAvLyBpZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG4gICAgICBpZiAobWF0Y2ggPT09ICclJScpIHJldHVybiBtYXRjaDtcbiAgICAgIGluZGV4Kys7XG4gICAgICB2YXIgZm9ybWF0dGVyID0gZXhwb3J0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIGZvcm1hdHRlcikge1xuICAgICAgICB2YXIgdmFsID0gYXJnc1tpbmRleF07XG4gICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuICAgICAgICAvLyBub3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG4gICAgICAgIGFyZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcblxuICAgIC8vIGFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG4gICAgZXhwb3J0cy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cbiAgICB2YXIgbG9nRm4gPSBkZWJ1Zy5sb2cgfHwgZXhwb3J0cy5sb2cgfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICBsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgZGVidWcuZW5hYmxlZCA9IGV4cG9ydHMuZW5hYmxlZChuYW1lc3BhY2UpO1xuICBkZWJ1Zy51c2VDb2xvcnMgPSBleHBvcnRzLnVzZUNvbG9ycygpO1xuICBkZWJ1Zy5jb2xvciA9IHNlbGVjdENvbG9yKG5hbWVzcGFjZSk7XG4gIGRlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuXG4gIC8vIGVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG4gIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgZXhwb3J0cy5pbml0KSB7XG4gICAgZXhwb3J0cy5pbml0KGRlYnVnKTtcbiAgfVxuXG4gIGV4cG9ydHMuaW5zdGFuY2VzLnB1c2goZGVidWcpO1xuXG4gIHJldHVybiBkZWJ1Zztcbn1cblxuZnVuY3Rpb24gZGVzdHJveSAoKSB7XG4gIHZhciBpbmRleCA9IGV4cG9ydHMuaW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBleHBvcnRzLmluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBkZWJ1ZyBtb2RlIGJ5IG5hbWVzcGFjZXMuIFRoaXMgY2FuIGluY2x1ZGUgbW9kZXNcbiAqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcbiAgZXhwb3J0cy5zYXZlKG5hbWVzcGFjZXMpO1xuXG4gIGV4cG9ydHMubmFtZXMgPSBbXTtcbiAgZXhwb3J0cy5za2lwcyA9IFtdO1xuXG4gIHZhciBpO1xuICB2YXIgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuICB2YXIgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGlmICghc3BsaXRbaV0pIGNvbnRpbnVlOyAvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuICAgIG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuICAgIGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcbiAgICAgIGV4cG9ydHMuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc3Vic3RyKDEpICsgJyQnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgZXhwb3J0cy5pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBleHBvcnRzLmluc3RhbmNlc1tpXTtcbiAgICBpbnN0YW5jZS5lbmFibGVkID0gZXhwb3J0cy5lbmFibGVkKGluc3RhbmNlLm5hbWVzcGFjZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gIGV4cG9ydHMuZW5hYmxlKCcnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuICBpZiAobmFtZVtuYW1lLmxlbmd0aCAtIDFdID09PSAnKicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaSwgbGVuO1xuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSAwLCBsZW4gPSBleHBvcnRzLm5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGV4cG9ydHMubmFtZXNbaV0udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYHZhbGAuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gdmFsXG4gKiBAcmV0dXJuIHtNaXhlZH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsLnN0YWNrIHx8IHZhbC5tZXNzYWdlO1xuICByZXR1cm4gdmFsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3NcIik7IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0J1xuLy8gYmFzZS14IGVuY29kaW5nIC8gZGVjb2Rpbmdcbi8vIENvcHlyaWdodCAoYykgMjAxOCBiYXNlLXggY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBUaGUgQml0Y29pbiBDb3JlIGRldmVsb3BlcnMgKGJhc2U1OC5jcHApXG4vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSB0aGUgYWNjb21wYW55aW5nXG4vLyBmaWxlIExJQ0VOU0Ugb3IgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAuXG4vLyBAdHMtaWdub3JlXG52YXIgX0J1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5mdW5jdGlvbiBiYXNlIChBTFBIQUJFVCkge1xuICBpZiAoQUxQSEFCRVQubGVuZ3RoID49IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHBoYWJldCB0b28gbG9uZycpIH1cbiAgdmFyIEJBU0VfTUFQID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfTUFQLmxlbmd0aDsgaisrKSB7XG4gICAgQkFTRV9NQVBbal0gPSAyNTVcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IEFMUEhBQkVULmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHggPSBBTFBIQUJFVC5jaGFyQXQoaSlcbiAgICB2YXIgeGMgPSB4LmNoYXJDb2RlQXQoMClcbiAgICBpZiAoQkFTRV9NQVBbeGNdICE9PSAyNTUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBhbWJpZ3VvdXMnKSB9XG4gICAgQkFTRV9NQVBbeGNdID0gaVxuICB9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcbiAgdmFyIEZBQ1RPUiA9IE1hdGgubG9nKEJBU0UpIC8gTWF0aC5sb2coMjU2KSAvLyBsb2coQkFTRSkgLyBsb2coMjU2KSwgcm91bmRlZCB1cFxuICB2YXIgaUZBQ1RPUiA9IE1hdGgubG9nKDI1NikgLyBNYXRoLmxvZyhCQVNFKSAvLyBsb2coMjU2KSAvIGxvZyhCQVNFKSwgcm91bmRlZCB1cFxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgc291cmNlIGluc3RhbmNlb2YgVWludDhBcnJheSkgeyBzb3VyY2UgPSBfQnVmZmVyLmZyb20oc291cmNlKSB9XG4gICAgaWYgKCFfQnVmZmVyLmlzQnVmZmVyKHNvdXJjZSkpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQnVmZmVyJykgfVxuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJyB9XG4gICAgICAgIC8vIFNraXAgJiBjb3VudCBsZWFkaW5nIHplcm9lcy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgdmFyIHBiZWdpbiA9IDBcbiAgICB2YXIgcGVuZCA9IHNvdXJjZS5sZW5ndGhcbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kICYmIHNvdXJjZVtwYmVnaW5dID09PSAwKSB7XG4gICAgICBwYmVnaW4rK1xuICAgICAgemVyb2VzKytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2U1OCByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgocGVuZCAtIHBiZWdpbikgKiBpRkFDVE9SICsgMSkgPj4+IDBcbiAgICB2YXIgYjU4ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnl0ZXMuXG4gICAgd2hpbGUgKHBiZWdpbiAhPT0gcGVuZCkge1xuICAgICAgdmFyIGNhcnJ5ID0gc291cmNlW3BiZWdpbl1cbiAgICAgICAgICAgIC8vIEFwcGx5IFwiYjU4ID0gYjU4ICogMjU2ICsgY2hcIi5cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQxID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQxICE9PSAtMSk7IGl0MS0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKDI1NiAqIGI1OFtpdDFdKSA+Pj4gMFxuICAgICAgICBiNThbaXQxXSA9IChjYXJyeSAlIEJBU0UpID4+PiAwXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gQkFTRSkgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcGJlZ2luKytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYmFzZTU4IHJlc3VsdC5cbiAgICB2YXIgaXQyID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDIgIT09IHNpemUgJiYgYjU4W2l0Ml0gPT09IDApIHtcbiAgICAgIGl0MisrXG4gICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHJlc3VsdCBpbnRvIGEgc3RyaW5nLlxuICAgIHZhciBzdHIgPSBMRUFERVIucmVwZWF0KHplcm9lcylcbiAgICBmb3IgKDsgaXQyIDwgc2l6ZTsgKytpdDIpIHsgc3RyICs9IEFMUEhBQkVULmNoYXJBdChiNThbaXQyXSkgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuICBmdW5jdGlvbiBkZWNvZGVVbnNhZmUgKHNvdXJjZSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBTdHJpbmcnKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuIF9CdWZmZXIuYWxsb2MoMCkgfVxuICAgIHZhciBwc3ogPSAwXG4gICAgICAgIC8vIFNraXAgbGVhZGluZyBzcGFjZXMuXG4gICAgaWYgKHNvdXJjZVtwc3pdID09PSAnICcpIHsgcmV0dXJuIH1cbiAgICAgICAgLy8gU2tpcCBhbmQgY291bnQgbGVhZGluZyAnMSdzLlxuICAgIHZhciB6ZXJvZXMgPSAwXG4gICAgdmFyIGxlbmd0aCA9IDBcbiAgICB3aGlsZSAoc291cmNlW3Bzel0gPT09IExFQURFUikge1xuICAgICAgemVyb2VzKytcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW4gYmlnLWVuZGlhbiBiYXNlMjU2IHJlcHJlc2VudGF0aW9uLlxuICAgIHZhciBzaXplID0gKCgoc291cmNlLmxlbmd0aCAtIHBzeikgKiBGQUNUT1IpICsgMSkgPj4+IDAgLy8gbG9nKDU4KSAvIGxvZygyNTYpLCByb3VuZGVkIHVwLlxuICAgIHZhciBiMjU2ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgY2hhcmFjdGVycy5cbiAgICB3aGlsZSAoc291cmNlW3Bzel0pIHtcbiAgICAgICAgICAgIC8vIERlY29kZSBjaGFyYWN0ZXJcbiAgICAgIHZhciBjYXJyeSA9IEJBU0VfTUFQW3NvdXJjZS5jaGFyQ29kZUF0KHBzeildXG4gICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlclxuICAgICAgaWYgKGNhcnJ5ID09PSAyNTUpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQzID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQzICE9PSAtMSk7IGl0My0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKEJBU0UgKiBiMjU2W2l0M10pID4+PiAwXG4gICAgICAgIGIyNTZbaXQzXSA9IChjYXJyeSAlIDI1NikgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyAyNTYpID4+PiAwXG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdOb24temVybyBjYXJyeScpIH1cbiAgICAgIGxlbmd0aCA9IGlcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBTa2lwIHRyYWlsaW5nIHNwYWNlcy5cbiAgICBpZiAoc291cmNlW3Bzel0gPT09ICcgJykgeyByZXR1cm4gfVxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzIGluIGIyNTYuXG4gICAgdmFyIGl0NCA9IHNpemUgLSBsZW5ndGhcbiAgICB3aGlsZSAoaXQ0ICE9PSBzaXplICYmIGIyNTZbaXQ0XSA9PT0gMCkge1xuICAgICAgaXQ0KytcbiAgICB9XG4gICAgdmFyIHZjaCA9IF9CdWZmZXIuYWxsb2NVbnNhZmUoemVyb2VzICsgKHNpemUgLSBpdDQpKVxuICAgIHZjaC5maWxsKDB4MDAsIDAsIHplcm9lcylcbiAgICB2YXIgaiA9IHplcm9lc1xuICAgIHdoaWxlIChpdDQgIT09IHNpemUpIHtcbiAgICAgIHZjaFtqKytdID0gYjI1NltpdDQrK11cbiAgICB9XG4gICAgcmV0dXJuIHZjaFxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGRlY29kZVVuc2FmZShzdHJpbmcpXG4gICAgaWYgKGJ1ZmZlcikgeyByZXR1cm4gYnVmZmVyIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGVVbnNhZmU6IGRlY29kZVVuc2FmZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJ1ZmZlclwiKTsiLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbbXVsdGliYXNlXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYmFzZSkgc3BlY2lmaWNhdGlvbi5cbiAqIEBtb2R1bGUgTXVsdGliYXNlXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IG11bHRpYmFzZVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGVcbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlXG5leHBvcnRzLmlzRW5jb2RlZCA9IGlzRW5jb2RlZFxuZXhwb3J0cy5uYW1lcyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoY29uc3RhbnRzLm5hbWVzKSlcbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKGNvbnN0YW50cy5jb2RlcykpXG5cbmNvbnN0IGVyck5vdFN1cHBvcnRlZCA9IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZW5jb2RpbmcnKVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBidWZmZXIgd2l0aCB0aGUgbXVsdGliYXNlIHZhcmludCtjb2RlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbmFtZU9yQ29kZSAtIFRoZSBtdWx0aWJhc2UgbmFtZSBvciBjb2RlIG51bWJlci5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWYgLSBUaGUgZGF0YSB0byBiZSBwcmVmaXhlZCB3aXRoIG11bHRpYmFzZS5cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIG11bHRpYmFzZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGlmICghYnVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlcyBhbiBlbmNvZGVkIGJ1ZmZlcicpXG4gIH1cbiAgY29uc3QgYmFzZSA9IGdldEJhc2UobmFtZU9yQ29kZSlcbiAgY29uc3QgY29kZUJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UuY29kZSlcblxuICBjb25zdCBuYW1lID0gYmFzZS5uYW1lXG4gIHZhbGlkRW5jb2RlKG5hbWUsIGJ1ZilcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2NvZGVCdWYsIGJ1Zl0pXG59XG5cbi8qKlxuICogRW5jb2RlIGRhdGEgd2l0aCB0aGUgc3BlY2lmaWVkIGJhc2UgYW5kIGFkZCB0aGUgbXVsdGliYXNlIHByZWZpeC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5hbWVPckNvZGUgLSBUaGUgbXVsdGliYXNlIG5hbWUgb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmIC0gVGhlIGRhdGEgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAbWVtYmVyb2YgTXVsdGliYXNlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSAobmFtZU9yQ29kZSwgYnVmKSB7XG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKG5hbWVPckNvZGUpXG4gIGNvbnN0IG5hbWUgPSBiYXNlLm5hbWVcblxuICByZXR1cm4gbXVsdGliYXNlKG5hbWUsIEJ1ZmZlci5mcm9tKGJhc2UuZW5jb2RlKGJ1ZikpKVxufVxuXG4vKipcbiAqIFRha2VzIGEgYnVmZmVyIG9yIHN0cmluZyBlbmNvZGVkIHdpdGggbXVsdGliYXNlIGhlYWRlciwgZGVjb2RlcyBpdCBhbmRcbiAqIHJldHVybnMgdGhlIGRlY29kZWQgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBidWZPclN0cmluZ1xuICogQHJldHVybnMge0J1ZmZlcn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoYnVmT3JTdHJpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihidWZPclN0cmluZykpIHtcbiAgICBidWZPclN0cmluZyA9IGJ1Zk9yU3RyaW5nLnRvU3RyaW5nKClcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMCwgMSlcbiAgYnVmT3JTdHJpbmcgPSBidWZPclN0cmluZy5zdWJzdHJpbmcoMSwgYnVmT3JTdHJpbmcubGVuZ3RoKVxuXG4gIGlmICh0eXBlb2YgYnVmT3JTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgYnVmT3JTdHJpbmcgPSBCdWZmZXIuZnJvbShidWZPclN0cmluZylcbiAgfVxuXG4gIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gIHJldHVybiBCdWZmZXIuZnJvbShiYXNlLmRlY29kZShidWZPclN0cmluZy50b1N0cmluZygpKSlcbn1cblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gZGF0YSBtdWx0aWJhc2UgZW5jb2RlZD9cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGJ1Zk9yU3RyaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqIEBtZW1iZXJvZiBNdWx0aWJhc2VcbiAqL1xuZnVuY3Rpb24gaXNFbmNvZGVkIChidWZPclN0cmluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1Zk9yU3RyaW5nKSkge1xuICAgIGJ1Zk9yU3RyaW5nID0gYnVmT3JTdHJpbmcudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gRW5zdXJlIGJ1Zk9yU3RyaW5nIGlzIGEgc3RyaW5nXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYnVmT3JTdHJpbmcpICE9PSAnW29iamVjdCBTdHJpbmddJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgY29kZSA9IGJ1Zk9yU3RyaW5nLnN1YnN0cmluZygwLCAxKVxuICB0cnkge1xuICAgIGNvbnN0IGJhc2UgPSBnZXRCYXNlKGNvZGUpXG4gICAgcmV0dXJuIGJhc2UubmFtZVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRFbmNvZGUgKG5hbWUsIGJ1Zikge1xuICBjb25zdCBiYXNlID0gZ2V0QmFzZShuYW1lKVxuICBiYXNlLmRlY29kZShidWYudG9TdHJpbmcoKSlcbn1cblxuZnVuY3Rpb24gZ2V0QmFzZSAobmFtZU9yQ29kZSkge1xuICBsZXQgYmFzZVxuXG4gIGlmIChjb25zdGFudHMubmFtZXNbbmFtZU9yQ29kZV0pIHtcbiAgICBiYXNlID0gY29uc3RhbnRzLm5hbWVzW25hbWVPckNvZGVdXG4gIH0gZWxzZSBpZiAoY29uc3RhbnRzLmNvZGVzW25hbWVPckNvZGVdKSB7XG4gICAgYmFzZSA9IGNvbnN0YW50cy5jb2Rlc1tuYW1lT3JDb2RlXVxuICB9IGVsc2Uge1xuICAgIHRocm93IGVyck5vdFN1cHBvcnRlZFxuICB9XG5cbiAgaWYgKCFiYXNlLmlzSW1wbGVtZW50ZWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmFzZSAnICsgbmFtZU9yQ29kZSArICcgaXMgbm90IGltcGxlbWVudGVkIHlldCcpXG4gIH1cblxuICByZXR1cm4gYmFzZVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvZGVjID0gcmVxdWlyZSgnLi9jb2RlYycpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgYnM1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuY29uc3QgQ0lEID0gcmVxdWlyZSgnY2lkcycpXG5jb25zdCB3aXRoSXMgPSByZXF1aXJlKCdjbGFzcy1pcycpXG5jb25zdCBpbnNwZWN0ID0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKVxuXG4vKipcbiAqIENyZWF0ZXMgYSBbbXVsdGlhZGRyXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkcikgZnJvbVxuICogYSBCdWZmZXIsIFN0cmluZyBvciBhbm90aGVyIE11bHRpYWRkciBpbnN0YW5jZVxuICogcHVibGljIGtleS5cbiAqIEBjbGFzcyBNdWx0aWFkZHJcbiAqIEBwYXJhbSB7KFN0cmluZ3xCdWZmZXJ8TXVsdGlhZGRyKX0gYWRkciAtIElmIFN0cmluZyBvciBCdWZmZXIsIG5lZWRzIHRvIGFkaGVyZVxuICogdG8gdGhlIGFkZHJlc3MgZm9ybWF0IG9mIGEgW211bHRpYWRkcl0oaHR0cHM6Ly9naXRodWIuY29tL211bHRpZm9ybWF0cy9tdWx0aWFkZHIjc3RyaW5nLWZvcm1hdClcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICovXG5jb25zdCBNdWx0aWFkZHIgPSB3aXRoSXMucHJvdG8oZnVuY3Rpb24gKGFkZHIpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE11bHRpYWRkcikpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpYWRkcihhZGRyKVxuICB9XG5cbiAgLy8gZGVmYXVsdFxuICBpZiAoYWRkciA9PSBudWxsKSB7XG4gICAgYWRkciA9ICcnXG4gIH1cblxuICBpZiAoYWRkciBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9IC0gVGhlIHJhdyBieXRlcyByZXByZXNlbnRpbmcgdGhpcyBtdWx0aWFkZHJlc3NcbiAgICAgKi9cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21CdWZmZXIoYWRkcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRkciA9PT0gJ3N0cmluZycgfHwgYWRkciBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIGlmIChhZGRyLmxlbmd0aCA+IDAgJiYgYWRkci5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtdWx0aWFkZHIgXCIke2FkZHJ9XCIgbXVzdCBzdGFydCB3aXRoIGEgXCIvXCJgKVxuICAgIH1cbiAgICB0aGlzLmJ1ZmZlciA9IGNvZGVjLmZyb21TdHJpbmcoYWRkcilcbiAgfSBlbHNlIGlmIChhZGRyLmJ1ZmZlciAmJiBhZGRyLnByb3RvcyAmJiBhZGRyLnByb3RvQ29kZXMpIHsgLy8gTXVsdGlhZGRyXG4gICAgdGhpcy5idWZmZXIgPSBjb2RlYy5mcm9tQnVmZmVyKGFkZHIuYnVmZmVyKSAvLyB2YWxpZGF0ZSArIGNvcHkgYnVmZmVyXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhZGRyIG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgb3IgYW5vdGhlciBNdWx0aWFkZHInKVxuICB9XG59LCB7IGNsYXNzTmFtZTogJ011bHRpYWRkcicsIHN5bWJvbE5hbWU6ICdAbXVsdGlmb3JtYXRzL2pzLW11bHRpYWRkci9tdWx0aWFkZHInIH0pXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBTdHJpbmdcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS50b1N0cmluZygpXG4gKiAvLyAnL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1N0cmluZyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIE11bHRpYWRkciBhcyBhIEpTT04gZW5jb2RlZCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqIEpTT04uc3RyaW5naWZ5KE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKSlcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS50b0pTT04gPSBNdWx0aWFkZHIucHJvdG90eXBlLnRvU3RyaW5nXG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBjb252aW5pZW50IG9wdGlvbnMgb2JqZWN0IHRvIGJlIHVzZWQgd2l0aCBuZXQuY3JlYXRlQ29ubmVjdGlvblxuICpcbiAqIEByZXR1cm5zIHt7ZmFtaWx5OiBTdHJpbmcsIGhvc3Q6IFN0cmluZywgdHJhbnNwb3J0OiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLnRvT3B0aW9ucygpXG4gKiAvLyB7IGZhbWlseTogJ2lwdjQnLCBob3N0OiAnMTI3LjAuMC4xJywgdHJhbnNwb3J0OiAndGNwJywgcG9ydDogNDAwMSB9XG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUudG9PcHRpb25zID0gZnVuY3Rpb24gdG9PcHRpb25zICgpIHtcbiAgY29uc3Qgb3B0cyA9IHt9XG4gIGNvbnN0IHBhcnNlZCA9IHRoaXMudG9TdHJpbmcoKS5zcGxpdCgnLycpXG4gIG9wdHMuZmFtaWx5ID0gcGFyc2VkWzFdID09PSAnaXA0JyA/ICdpcHY0JyA6ICdpcHY2J1xuICBvcHRzLmhvc3QgPSBwYXJzZWRbMl1cbiAgb3B0cy50cmFuc3BvcnQgPSBwYXJzZWRbM11cbiAgb3B0cy5wb3J0ID0gcGFyc2VJbnQocGFyc2VkWzRdKVxuICByZXR1cm4gb3B0c1xufVxuXG4vKipcbiAqIFJldHVybnMgTXVsdGlhZGRyIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICogRm9yIHBvc3QgTm9kZS5qcyB2MTAuMC4wLlxuICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9kZXByZWNhdGlvbnMuaHRtbCNkZXByZWNhdGlvbnNfZGVwMDA3OV9jdXN0b21faW5zcGVjdGlvbl9mdW5jdGlvbl9vbl9vYmplY3RzX3ZpYV9pbnNwZWN0XG4gKlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBleGFtcGxlXG4gKiBjb25zb2xlLmxvZyhNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykpXG4gKiAvLyAnPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+J1xuICovXG5NdWx0aWFkZHIucHJvdG90eXBlW2luc3BlY3RdID0gZnVuY3Rpb24gaW5zcGVjdEN1c3RvbSAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyBNdWx0aWFkZHIgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBGYWxsYmFjayBmb3IgcHJlIE5vZGUuanMgdjEwLjAuMC5cbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZGVwcmVjYXRpb25zLmh0bWwjZGVwcmVjYXRpb25zX2RlcDAwNzlfY3VzdG9tX2luc3BlY3Rpb25fZnVuY3Rpb25fb25fb2JqZWN0c192aWFfaW5zcGVjdFxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpLmluc3BlY3QoKVxuICogLy8gJzxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPidcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHJldHVybiAnPE11bHRpYWRkciAnICtcbiAgICB0aGlzLmJ1ZmZlci50b1N0cmluZygnaGV4JykgKyAnIC0gJyArXG4gICAgY29kZWMuYnVmZmVyVG9TdHJpbmcodGhpcy5idWZmZXIpICsgJz4nXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJvdG9jb2xzIHRoZSBNdWx0aWFkZHIgaXMgZGVmaW5lZCB3aXRoLCBhcyBhbiBhcnJheSBvZiBvYmplY3RzLCBpblxuICogbGVmdC10by1yaWdodCBvcmRlci4gRWFjaCBvYmplY3QgY29udGFpbnMgdGhlIHByb3RvY29sIGNvZGUsIHByb3RvY29sIG5hbWUsXG4gKiBhbmQgdGhlIHNpemUgb2YgaXRzIGFkZHJlc3Mgc3BhY2UgaW4gYml0cy5cbiAqIFtTZWUgbGlzdCBvZiBwcm90b2NvbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tdWx0aWZvcm1hdHMvbXVsdGlhZGRyL2Jsb2IvbWFzdGVyL3Byb3RvY29scy5jc3YpXG4gKlxuICogQHJldHVybnMge0FycmF5LjxPYmplY3Q+fSBwcm90b2NvbHMgLSBBbGwgdGhlIHByb3RvY29scyB0aGUgYWRkcmVzcyBpcyBjb21wb3NlZCBvZlxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uY29kZVxuICogQHJldHVybnMge051bWJlcn0gcHJvdG9jb2xzW10uc2l6ZVxuICogQHJldHVybnMge1N0cmluZ30gcHJvdG9jb2xzW10ubmFtZVxuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b3MoKVxuICogLy8gWyB7IGNvZGU6IDQsIHNpemU6IDMyLCBuYW1lOiAnaXA0JyB9LFxuICogLy8gICB7IGNvZGU6IDYsIHNpemU6IDE2LCBuYW1lOiAndGNwJyB9IF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b3MgPSBmdW5jdGlvbiBwcm90b3MgKCkge1xuICByZXR1cm4gdGhpcy5wcm90b0NvZGVzKCkubWFwKGNvZGUgPT4gT2JqZWN0LmFzc2lnbih7fSwgcHJvdG9jb2xzKGNvZGUpKSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2RlcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48TnVtYmVyPn0gcHJvdG9jb2wgY29kZXNcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykucHJvdG9Db2RlcygpXG4gKiAvLyBbIDQsIDYgXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnByb3RvQ29kZXMgPSBmdW5jdGlvbiBwcm90b0NvZGVzICgpIHtcbiAgY29uc3QgY29kZXMgPSBbXVxuICBjb25zdCBidWYgPSB0aGlzLmJ1ZmZlclxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBidWYubGVuZ3RoKSB7XG4gICAgY29uc3QgY29kZSA9IHZhcmludC5kZWNvZGUoYnVmLCBpKVxuICAgIGNvbnN0IG4gPSB2YXJpbnQuZGVjb2RlLmJ5dGVzXG5cbiAgICBjb25zdCBwID0gcHJvdG9jb2xzKGNvZGUpXG4gICAgY29uc3Qgc2l6ZSA9IGNvZGVjLnNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpICs9IChzaXplICsgbilcbiAgICBjb2Rlcy5wdXNoKGNvZGUpXG4gIH1cblxuICByZXR1cm4gY29kZXNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgcHJvdG9jb2xzIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gKiBbU2VlIGxpc3Qgb2YgcHJvdG9jb2xzXShodHRwczovL2dpdGh1Yi5jb20vbXVsdGlmb3JtYXRzL211bHRpYWRkci9ibG9iL21hc3Rlci9wcm90b2NvbHMuY3N2KVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxTdHJpbmc+fSBwcm90b2NvbCBuYW1lc1xuICogQGV4YW1wbGVcbiAqIE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKS5wcm90b05hbWVzKClcbiAqIC8vIFsgJ2lwNCcsICd0Y3AnIF1cbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5wcm90b05hbWVzID0gZnVuY3Rpb24gcHJvdG9OYW1lcyAoKSB7XG4gIHJldHVybiB0aGlzLnByb3RvcygpLm1hcChwcm90byA9PiBwcm90by5uYW1lKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4ge0J1ZmZlcn0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikudHVwbGVzKClcbiAqIC8vIFsgWyA0LCA8QnVmZmVyIDdmIDAwIDAwIDAxPiBdLCBbIDYsIDxCdWZmZXIgMGYgYTE+IF0gXVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLnR1cGxlcyA9IGZ1bmN0aW9uIHR1cGxlcyAoKSB7XG4gIHJldHVybiBjb2RlYy5idWZmZXJUb1R1cGxlcyh0aGlzLmJ1ZmZlcilcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgdHVwbGUgb2Ygc3RyaW5nL251bWJlciBwYXJ0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5LjxBcnJheT59IHR1cGxlc1xuICogQHJldHVybiB7TnVtYmVyfSB0dXBsZXNbXS4wIGNvZGUgb2YgcHJvdG9jb2xcbiAqIEByZXR1cm4geyhTdHJpbmd8TnVtYmVyKX0gdHVwbGVzW10uMSBjb250ZW50cyBvZiBhZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyKFwiL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDFcIikuc3RyaW5nVHVwbGVzKClcbiAqIC8vIFsgWyA0LCAnMTI3LjAuMC4xJyBdLCBbIDYsIDQwMDEgXSBdXG4gKi9cbk11bHRpYWRkci5wcm90b3R5cGUuc3RyaW5nVHVwbGVzID0gZnVuY3Rpb24gc3RyaW5nVHVwbGVzICgpIHtcbiAgY29uc3QgdCA9IGNvZGVjLmJ1ZmZlclRvVHVwbGVzKHRoaXMuYnVmZmVyKVxuICByZXR1cm4gY29kZWMudHVwbGVzVG9TdHJpbmdUdXBsZXModClcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgYSBNdWx0aWFkZHIgaW4gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byBhZGQgaW50byB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzguOC44LjgvdGNwLzEwODAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMSdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5lbmNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGVuY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBNdWx0aWFkZHIoYWRkcilcbiAgcmV0dXJuIE11bHRpYWRkcih0aGlzLnRvU3RyaW5nKCkgKyBhZGRyLnRvU3RyaW5nKCkpXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGVzIGEgTXVsdGlhZGRyIGZyb20gYW5vdGhlciBNdWx0aWFkZHJcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkciAtIE11bHRpYWRkciB0byByZW1vdmUgZnJvbSB0aGlzIE11bHRpYWRkclxuICogQHJldHVybiB7TXVsdGlhZGRyfVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1oMSA9IE11bHRpYWRkcignL2lwNC84LjguOC44L3RjcC8xMDgwJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwODA4MDgwODA2MDQzOCAtIC9pcDQvOC44LjguOC90Y3AvMTA4MD5cbiAqXG4gKiBjb25zdCBtaDIgPSBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMSAtIC9pcDQvMTI3LjAuMC4xL3RjcC80MDAxPlxuICpcbiAqIGNvbnN0IG1oMyA9IG1oMS5lbmNhcHN1bGF0ZShtaDIpXG4gKiAvLyA8TXVsdGlhZGRyIDA0MDgwODA4MDgwNjA0MzgwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgzLmRlY2Fwc3VsYXRlKG1oMikudG9TdHJpbmcoKVxuICogLy8gJy9pcDQvOC44LjguOC90Y3AvMTA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZSA9IGZ1bmN0aW9uIGRlY2Fwc3VsYXRlIChhZGRyKSB7XG4gIGFkZHIgPSBhZGRyLnRvU3RyaW5nKClcbiAgY29uc3QgcyA9IHRoaXMudG9TdHJpbmcoKVxuICBjb25zdCBpID0gcy5sYXN0SW5kZXhPZihhZGRyKVxuICBpZiAoaSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgJyArIHRoaXMgKyAnIGRvZXMgbm90IGNvbnRhaW4gc3ViYWRkcmVzczogJyArIGFkZHIpXG4gIH1cbiAgcmV0dXJuIE11bHRpYWRkcihzLnNsaWNlKDAsIGkpKVxufVxuXG4vKipcbiAqIEEgbW9yZSByZWxpYWJsZSB2ZXJzaW9uIG9mIGBkZWNhcHN1bGF0ZWAgaWYgeW91IGFyZSB0YXJnZXRpbmcgYVxuICogc3BlY2lmaWMgY29kZSwgc3VjaCBhcyA0MjEgKHRoZSBgcDJwYCBwcm90b2NvbCBjb2RlKS4gVGhlIGxhc3QgaW5kZXggb2YgdGhlIGNvZGVcbiAqIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBgTXVsdGlhZGRyYCwgYW5kIGEgbmV3IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgY29kZSBpcyBub3QgcHJlc2VudCwgdGhlIG9yaWdpbmFsIGBNdWx0aWFkZHJgIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlIFRoZSBjb2RlIG9mIHRoZSBwcm90b2NvbCB0byBkZWNhcHN1bGF0ZSBmcm9tIHRoaXMgTXVsdGlhZGRyXG4gKiBAcmV0dXJuIHtNdWx0aWFkZHJ9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgYWRkciA9IE11bHRpYWRkcignL2lwNC8wLjAuMC4wL3RjcC84MDgwL3AycC9RbWNncHN5V2dIOFk4YWpKejFDdTcyS25TNXVvMkFhMkxwelU3a2luU3VwTktDJylcbiAqIC8vIDxNdWx0aWFkZHIgMDQwMC4uLiAtIC9pcDQvMC4wLjAuMC90Y3AvODA4MC9wMnAvUW1jZ3BzeVdnSDhZOGFqSnoxQ3U3MktuUzV1bzJBYTJMcHpVN2tpblN1cE5LQz5cbiAqXG4gKiBhZGRyLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzAuMC4wLjAvdGNwLzgwODAnXG4gKlxuICogTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCcpLmRlY2Fwc3VsYXRlQ29kZSg0MjEpLnRvU3RyaW5nKClcbiAqIC8vICcvaXA0LzEyNy4wLjAuMS90Y3AvODA4MCdcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5kZWNhcHN1bGF0ZUNvZGUgPSBmdW5jdGlvbiBkZWNhcHN1bGF0ZUNvZGUgKGNvZGUpIHtcbiAgY29uc3QgdHVwbGVzID0gdGhpcy50dXBsZXMoKVxuICBmb3IgKGxldCBpID0gdHVwbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHR1cGxlc1tpXVswXSA9PT0gY29kZSkge1xuICAgICAgcmV0dXJuIE11bHRpYWRkcihjb2RlYy50dXBsZXNUb0J1ZmZlcih0dXBsZXMuc2xpY2UoMCwgaSkpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBlZXJJZCBpZiB0aGUgbXVsdGlhZGRyIGNvbnRhaW5zIG9uZVxuICpcbiAqIEByZXR1cm4ge1N0cmluZ3xudWxsfSBwZWVySWQgLSBUaGUgaWQgb2YgdGhlIHBlZXIgb3IgbnVsbCBpZiBpbnZhbGlkIG9yIG1pc3NpbmcgZnJvbSB0aGUgbWFcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtaDEgPSBNdWx0aWFkZHIoJy9pcDQvOC44LjguOC90Y3AvMTA4MC9pcGZzL1FtVmFsaWRCYXNlNThzdHJpbmcnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL2lwZnMvUW1WYWxpZEJhc2U1OHN0cmluZz5cbiAqXG4gKiAvLyBzaG91bGQgcmV0dXJuIFFtVmFsaWRCYXNlNThzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwZWVySWQgPSBtaDEuZ2V0UGVlcklkKClcbiAqL1xuTXVsdGlhZGRyLnByb3RvdHlwZS5nZXRQZWVySWQgPSBmdW5jdGlvbiBnZXRQZWVySWQgKCkge1xuICBsZXQgYjU4c3RyID0gbnVsbFxuICB0cnkge1xuICAgIGNvbnN0IHR1cGxlcyA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgaWYgKHR1cGxlWzBdID09PSBwcm90b2NvbHMubmFtZXMuaXBmcy5jb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIEdldCB0aGUgbGFzdCBpZFxuICAgIGI1OHN0ciA9IHR1cGxlcy5wb3AoKVsxXVxuICAgIC8vIEdldCBtdWx0aWhhc2gsIHVud3JhcCBmcm9tIENJRCBpZiBuZWVkZWRcbiAgICBiNThzdHIgPSBiczU4LmVuY29kZShuZXcgQ0lEKGI1OHN0cikubXVsdGloYXNoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgYjU4c3RyID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGI1OHN0clxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBhdGggaWYgdGhlIG11bHRpYWRkciBjb250YWlucyBvbmVcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd8bnVsbH0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBtdWx0aWFkZHIsIG9yIG51bGwgaWYgbm8gcGF0aCBwcm90b2NvbCBpcyBwcmVzZW50XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAvdW5peC90bXAvcDJwLnNvY2snKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwL3VuaXgvdG1wL3AycC5zb2NrPlxuICpcbiAqIC8vIHNob3VsZCByZXR1cm4gdXRmOCBzdHJpbmcgb3IgbnVsbCBpZiB0aGUgaWQgaXMgbWlzc2luZyBvciBpbnZhbGlkXG4gKiBjb25zdCBwYXRoID0gbWgxLmdldFBhdGgoKVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoICgpIHtcbiAgbGV0IHBhdGggPSBudWxsXG4gIHRyeSB7XG4gICAgcGF0aCA9IHRoaXMuc3RyaW5nVHVwbGVzKCkuZmlsdGVyKCh0dXBsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHModHVwbGVbMF0pXG4gICAgICBpZiAocHJvdG8ucGF0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pWzBdWzFdXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXRoID0gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHBhdGhcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdHdvIE11bHRpYWRkcnMgYXJlIHRoZSBzYW1lXG4gKlxuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge0Jvb2x9XG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzguOC44LjgvdGNwLzEwODAnKVxuICogLy8gPE11bHRpYWRkciAwNDA4MDgwODA4MDYwNDM4IC0gL2lwNC84LjguOC44L3RjcC8xMDgwPlxuICpcbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDEnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKlxuICogbWgxLmVxdWFscyhtaDEpXG4gKiAvLyB0cnVlXG4gKlxuICogbWgxLmVxdWFscyhtaDIpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYWRkcikge1xuICByZXR1cm4gdGhpcy5idWZmZXIuZXF1YWxzKGFkZHIuYnVmZmVyKVxufVxuXG4vKipcbiAqIEdldHMgYSBNdWx0aWFkZHJzIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3QuIE5vdGUgdGhhdCBwcm90b2NvbCBpbmZvcm1hdGlvblxuICogaXMgbGVmdCBvdXQ6IGluIE5vZGUgKGFuZCBtb3N0IG5ldHdvcmsgc3lzdGVtcykgdGhlIHByb3RvY29sIGlzIHVua25vd2FibGVcbiAqIGdpdmVuIG9ubHkgdGhlIGFkZHJlc3MuXG4gKlxuICogSGFzIHRvIGJlIGEgVGhpbldhaXN0IEFkZHJlc3MsIG90aGVyd2lzZSB0aHJvd3MgZXJyb3JcbiAqXG4gKiBAcmV0dXJucyB7e2ZhbWlseTogU3RyaW5nLCBhZGRyZXNzOiBTdHJpbmcsIHBvcnQ6IE51bWJlcn19XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIE11bHRpYWRkciBpcyBub3QgYSBUaGluIFdhaXN0IGFkZHJlc3NcbiAqIEBleGFtcGxlXG4gKiBNdWx0aWFkZHIoJy9pcDQvMTI3LjAuMC4xL3RjcC80MDAxJykubm9kZUFkZHJlc3MoKVxuICogLy8ge2ZhbWlseTogJ0lQdjQnLCBhZGRyZXNzOiAnMTI3LjAuMC4xJywgcG9ydDogJzQwMDEnfVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLm5vZGVBZGRyZXNzID0gZnVuY3Rpb24gbm9kZUFkZHJlc3MgKCkge1xuICBjb25zdCBjb2RlcyA9IHRoaXMucHJvdG9Db2RlcygpXG4gIGNvbnN0IG5hbWVzID0gdGhpcy5wcm90b05hbWVzKClcbiAgY29uc3QgcGFydHMgPSB0aGlzLnRvU3RyaW5nKCkuc3BsaXQoJy8nKS5zbGljZSgxKVxuXG4gIGlmIChwYXJ0cy5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWFkZHIgbXVzdCBoYXZlIGEgdmFsaWQgZm9ybWF0OiBcIi97aXA0LCBpcDYsIGRuczQsIGRuczZ9L3thZGRyZXNzfS97dGNwLCB1ZHB9L3twb3J0fVwiLicpXG4gIH0gZWxzZSBpZiAoY29kZXNbMF0gIT09IDQgJiYgY29kZXNbMF0gIT09IDQxICYmIGNvZGVzWzBdICE9PSA1NCAmJiBjb2Rlc1swXSAhPT0gNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1swXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIGZhbWlseSBuYW1lOiBcIntpcDQsIGlwNiwgZG5zNCwgZG5zNn1cIi5gKVxuICB9IGVsc2UgaWYgKHBhcnRzWzJdICE9PSAndGNwJyAmJiBwYXJ0c1syXSAhPT0gJ3VkcCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHByb3RvY29sIHdpdGggbmFtZTogXCInJHtuYW1lc1sxXX0nXCIuIE11c3QgaGF2ZSBhIHZhbGlkIHRyYW5zcG9ydCBwcm90b2NvbDogXCJ7dGNwLCB1ZHB9XCIuYClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmFtaWx5OiAoY29kZXNbMF0gPT09IDQxIHx8IGNvZGVzWzBdID09PSA1NSkgPyA2IDogNCxcbiAgICBhZGRyZXNzOiBwYXJ0c1sxXSwgLy8gaXAgYWRkclxuICAgIHBvcnQ6IHBhcnNlSW50KHBhcnRzWzNdKSAvLyB0Y3Agb3IgdWRwIHBvcnRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBNdWx0aWFkZHIgZnJvbSBhIG5vZGUtZnJpZW5kbHkgYWRkcmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3tmYW1pbHk6IFN0cmluZywgYWRkcmVzczogU3RyaW5nLCBwb3J0OiBOdW1iZXJ9fSBhZGRyXG4gKiBAcGFyYW0ge1N0cmluZ30gdHJhbnNwb3J0XG4gKiBAcmV0dXJucyB7TXVsdGlhZGRyfSBtdWx0aWFkZHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgZXJyb3IgaWYgYWRkciBpcyBub3QgdHJ1dGh5XG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGVycm9yIGlmIHRyYW5zcG9ydCBpcyBub3QgdHJ1dGh5XG4gKiBAZXhhbXBsZVxuICogTXVsdGlhZGRyLmZyb21Ob2RlQWRkcmVzcyh7YWRkcmVzczogJzEyNy4wLjAuMScsIHBvcnQ6ICc0MDAxJ30sICd0Y3AnKVxuICogLy8gPE11bHRpYWRkciAwNDdmMDAwMDAxMDYwZmExIC0gL2lwNC8xMjcuMC4wLjEvdGNwLzQwMDE+XG4gKi9cbk11bHRpYWRkci5mcm9tTm9kZUFkZHJlc3MgPSBmdW5jdGlvbiBmcm9tTm9kZUFkZHJlc3MgKGFkZHIsIHRyYW5zcG9ydCkge1xuICBpZiAoIWFkZHIpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZXMgbm9kZSBhZGRyZXNzIG9iamVjdCcpXG4gIGlmICghdHJhbnNwb3J0KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVzIHRyYW5zcG9ydCBwcm90b2NvbCcpXG4gIGNvbnN0IGlwID0gKGFkZHIuZmFtaWx5ID09PSAnSVB2NicpID8gJ2lwNicgOiAnaXA0J1xuICByZXR1cm4gTXVsdGlhZGRyKCcvJyArIFtpcCwgYWRkci5hZGRyZXNzLCB0cmFuc3BvcnQsIGFkZHIucG9ydF0uam9pbignLycpKVxufVxuXG4vLyBUT0RPIGZpbmQgYSBiZXR0ZXIgZXhhbXBsZSwgbm90IHN1cmUgYWJvdXQgaXQncyBnb29kIGVub3VnaFxuLyoqXG4gKiBSZXR1cm5zIGlmIGEgTXVsdGlhZGRyIGlzIGEgVGhpbiBXYWlzdCBhZGRyZXNzIG9yIG5vdC5cbiAqXG4gKiBUaGluIFdhaXN0IGlzIGlmIGEgTXVsdGlhZGRyIGFkaGVyZXMgdG8gdGhlIHN0YW5kYXJkIGNvbWJpbmF0aW9uIG9mOlxuICpcbiAqIGB7SVB2NCwgSVB2Nn0ve1RDUCwgVURQfWBcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gW2FkZHJdIC0gRGVmYXVsdHMgdG8gdXNpbmcgYHRoaXNgIGluc3RhbmNlXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXNUaGluV2Fpc3RBZGRyZXNzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWgxID0gTXVsdGlhZGRyKCcvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0N2YwMDAwMDEwNjBmYTEgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMT5cbiAqIGNvbnN0IG1oMiA9IE11bHRpYWRkcignL2lwNC8xOTIuMTY4LjIuMS90Y3AvNTAwMScpXG4gKiAvLyA8TXVsdGlhZGRyIDA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzE5Mi4xNjguMi4xL3RjcC81MDAxPlxuICogY29uc3QgbWgzID0gbWgxLmVuY2Fwc3VsYXRlKG1oMilcbiAqIC8vIDxNdWx0aWFkZHIgMDQ3ZjAwMDAwMTA2MGZhMTA0YzBhODAyMDEwNjEzODkgLSAvaXA0LzEyNy4wLjAuMS90Y3AvNDAwMS9pcDQvMTkyLjE2OC4yLjEvdGNwLzUwMDE+XG4gKiBtaDEuaXNUaGluV2Fpc3RBZGRyZXNzKClcbiAqIC8vIHRydWVcbiAqIG1oMi5pc1RoaW5XYWlzdEFkZHJlc3MoKVxuICogLy8gdHJ1ZVxuICogbWgzLmlzVGhpbldhaXN0QWRkcmVzcygpXG4gKiAvLyBmYWxzZVxuICovXG5NdWx0aWFkZHIucHJvdG90eXBlLmlzVGhpbldhaXN0QWRkcmVzcyA9IGZ1bmN0aW9uIGlzVGhpbldhaXN0QWRkcmVzcyAoYWRkcikge1xuICBjb25zdCBwcm90b3MgPSAoYWRkciB8fCB0aGlzKS5wcm90b3MoKVxuXG4gIGlmIChwcm90b3MubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAocHJvdG9zWzBdLmNvZGUgIT09IDQgJiYgcHJvdG9zWzBdLmNvZGUgIT09IDQxKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKHByb3Rvc1sxXS5jb2RlICE9PSA2ICYmIHByb3Rvc1sxXS5jb2RlICE9PSAyNzMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIE9iamVjdCBjb250YWluaW5nIHRhYmxlLCBuYW1lcyBhbmQgY29kZXMgb2YgYWxsIHN1cHBvcnRlZCBwcm90b2NvbHMuXG4gKiBUbyBnZXQgdGhlIHByb3RvY29sIHZhbHVlcyBmcm9tIGEgTXVsdGlhZGRyLCB5b3UgY2FuIHVzZVxuICogW2AucHJvdG9zKClgXSgjbXVsdGlhZGRycHJvdG9zKSxcbiAqIFtgLnByb3RvQ29kZXMoKWBdKCNtdWx0aWFkZHJwcm90b2NvZGVzKSBvclxuICogW2AucHJvdG9OYW1lcygpYF0oI211bHRpYWRkcnByb3RvbmFtZXMpXG4gKlxuICogQGluc3RhbmNlXG4gKiBAcmV0dXJucyB7e3RhYmxlOiBBcnJheSwgbmFtZXM6IE9iamVjdCwgY29kZXM6IE9iamVjdH19XG4gKlxuICovXG5NdWx0aWFkZHIucHJvdG9jb2xzID0gcHJvdG9jb2xzXG5cbi8qKlxuICogUmV0dXJucyBpZiBzb21ldGhpbmcgaXMgYSBNdWx0aWFkZHIgdGhhdCBpcyBhIG5hbWVcbiAqXG4gKiBAcGFyYW0ge011bHRpYWRkcn0gYWRkclxuICogQHJldHVybiB7Qm9vbH0gaXNOYW1lXG4gKi9cbk11bHRpYWRkci5pc05hbWUgPSBmdW5jdGlvbiBpc05hbWUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGlmIGEgcGFydCBvZiB0aGUgbXVsdGlhZGRyIGlzIHJlc29sdmFibGUsIHRoZW4gcmV0dXJuIHRydWVcbiAgcmV0dXJuIGFkZHIucHJvdG9zKCkuc29tZSgocHJvdG8pID0+IHByb3RvLnJlc29sdmFibGUpXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBtdWx0aWFkZHJzLCBieSByZXNvbHZpbmcgdGhlIG11bHRpYWRkciB0aGF0IGlzIGEgbmFtZVxuICpcbiAqIEBhc3luY1xuICogQHBhcmFtIHtNdWx0aWFkZHJ9IGFkZHJcbiAqIEByZXR1cm4ge011bHRpYWRkcltdfVxuICovXG5NdWx0aWFkZHIucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKGFkZHIpIHtcbiAgaWYgKCFNdWx0aWFkZHIuaXNNdWx0aWFkZHIoYWRkcikgfHwgIU11bHRpYWRkci5pc05hbWUoYWRkcikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoJ25vdCBhIHZhbGlkIG5hbWUnKSlcbiAgfVxuXG4gIC8qXG4gICAqIE5lZWRzIG1vcmUgY29uc2lkZXJhdGlvbiBmcm9tIHNwZWMgZGVzaWduOlxuICAgKiAgIC0gd2hhdCB0byByZXR1cm5cbiAgICogICAtIGhvdyB0byBhY2hpZXZlIGl0IGluIHRoZSBicm93c2VyP1xuICAgKi9cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkIHlldCcpKVxufVxuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBNdWx0aWFkZHJcbiIsIid1c2Ugc3RyaWN0J1xuY29uc3QgdmFyaW50ID0gcmVxdWlyZSgndmFyaW50JylcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG51bWJlclRvQnVmZmVyLFxuICBidWZmZXJUb051bWJlcixcbiAgdmFyaW50QnVmZmVyRW5jb2RlLFxuICB2YXJpbnRCdWZmZXJEZWNvZGUsXG4gIHZhcmludEVuY29kZVxufVxuXG5mdW5jdGlvbiBidWZmZXJUb051bWJlciAoYnVmKSB7XG4gIHJldHVybiBwYXJzZUludChidWYudG9TdHJpbmcoJ2hleCcpLCAxNilcbn1cblxuZnVuY3Rpb24gbnVtYmVyVG9CdWZmZXIgKG51bSkge1xuICBsZXQgaGV4U3RyaW5nID0gbnVtLnRvU3RyaW5nKDE2KVxuICBpZiAoaGV4U3RyaW5nLmxlbmd0aCAlIDIgPT09IDEpIHtcbiAgICBoZXhTdHJpbmcgPSAnMCcgKyBoZXhTdHJpbmdcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jylcbn1cblxuZnVuY3Rpb24gdmFyaW50QnVmZmVyRW5jb2RlIChpbnB1dCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFyaW50LmVuY29kZShidWZmZXJUb051bWJlcihpbnB1dCkpKVxufVxuXG5mdW5jdGlvbiB2YXJpbnRCdWZmZXJEZWNvZGUgKGlucHV0KSB7XG4gIHJldHVybiBudW1iZXJUb0J1ZmZlcih2YXJpbnQuZGVjb2RlKGlucHV0KSlcbn1cblxuZnVuY3Rpb24gdmFyaW50RW5jb2RlIChudW0pIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobnVtKSlcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gd2l0aElzKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIGNvbnN0IENsYXNzSXNXcmFwcGVyID0ge1xuICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBhc3NpZ25zIHRoZSBjbGFzcyB3cmFwcGVyIHRvIGFuIG9iamVjdCB0byB0cmlja1xuICAgICAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZXMgdG8gc2hvdyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgY2xhc3Mgd2hlblxuICAgICAgICAvLyBsb2dnaW5nIGFuIGluc3RhbmNlcy5cbiAgICAgICAgLy8gV2UgYXJlIGFzc2lnbmluZyBhbiBhbm9ueW1vdXMgY2xhc3MgKGNsYXNzIHdyYXBwZXIpIHRvIHRoZSBvYmplY3RcbiAgICAgICAgLy8gd2l0aCBrZXkgYGNsYXNzTmFtZWAgdG8ga2VlcCB0aGUgY29ycmVjdCBuYW1lLlxuICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgaXQgZmFsbHMgYmFjayB0byBsb2dnaW5nIGBDbGFzc0lzV3JhcHBlcmAuXG4gICAgICAgIFtjbGFzc05hbWVdOiBjbGFzcyBleHRlbmRzIENsYXNzIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgc3ltYm9sLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG5cbiAgICBDbGFzc0lzV3JhcHBlcltgaXMke2NsYXNzTmFtZX1gXSA9IChvYmopID0+ICEhKG9iaiAmJiBvYmpbc3ltYm9sXSk7XG5cbiAgICByZXR1cm4gQ2xhc3NJc1dyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHdpdGhJc1Byb3RvKENsYXNzLCB7IGNsYXNzTmFtZSwgc3ltYm9sTmFtZSwgd2l0aG91dE5ldyB9KSB7XG4gICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sLmZvcihzeW1ib2xOYW1lKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1zaG9ydGhhbmQgKi9cbiAgICBjb25zdCBDbGFzc0lzV3JhcHBlciA9IHtcbiAgICAgICAgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAod2l0aG91dE5ldyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBDbGFzc0lzV3JhcHBlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzSXNXcmFwcGVyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IENsYXNzLmNhbGwodGhpcywgLi4uYXJncykgfHwgdGhpcztcblxuICAgICAgICAgICAgaWYgKF90aGlzICYmICFfdGhpc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCBzeW1ib2wsIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgfSxcbiAgICB9W2NsYXNzTmFtZV07XG4gICAgLyogZXNsaW50LWVuYWJsZSBvYmplY3Qtc2hvcnRoYW5kICovXG5cbiAgICBDbGFzc0lzV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSk7XG4gICAgQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3NJc1dyYXBwZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NJc1dyYXBwZXIucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIENsYXNzSXNXcmFwcGVyW2BpcyR7Y2xhc3NOYW1lfWBdID0gKG9iaikgPT4gISEob2JqICYmIG9ialtzeW1ib2xdKTtcblxuICAgIHJldHVybiBDbGFzc0lzV3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoSXM7XG5tb2R1bGUuZXhwb3J0cy5wcm90byA9IHdpdGhJc1Byb3RvO1xuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJyk7XG52YXIgYXN5bmNraXQgPSByZXF1aXJlKCdhc3luY2tpdCcpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKCk7XG4gIH1cblxuICB0aGlzLl9vdmVyaGVhZExlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlID0gW107XG5cbiAgQ29tYmluZWRTdHJlYW0uY2FsbCh0aGlzKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cbn1cblxuRm9ybURhdGEuTElORV9CUkVBSyA9ICdcXHJcXG4nO1xuRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucykge1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGFsbG93IGZpbGVuYW1lIGFzIHNpbmdsZSBvcHRpb25cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtmaWxlbmFtZTogb3B0aW9uc307XG4gIH1cblxuICB2YXIgYXBwZW5kID0gQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZC5iaW5kKHRoaXMpO1xuXG4gIC8vIGFsbCB0aGF0IHN0cmVhbXkgYnVzaW5lc3MgY2FuJ3QgaGFuZGxlIG51bWJlcnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpeGdlL25vZGUtZm9ybS1kYXRhL2lzc3Vlcy8zOFxuICBpZiAodXRpbC5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFBsZWFzZSBjb252ZXJ0IHlvdXIgYXJyYXkgaW50byBzdHJpbmdcbiAgICAvLyB0aGUgd2F5IHdlYiBzZXJ2ZXIgZXhwZWN0cyBpdFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaGVhZGVyID0gdGhpcy5fbXVsdGlQYXJ0SGVhZGVyKGZpZWxkLCB2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBmb290ZXIgPSB0aGlzLl9tdWx0aVBhcnRGb290ZXIoKTtcblxuICBhcHBlbmQoaGVhZGVyKTtcbiAgYXBwZW5kKHZhbHVlKTtcbiAgYXBwZW5kKGZvb3Rlcik7XG5cbiAgLy8gcGFzcyBhbG9uZyBvcHRpb25zLmtub3duTGVuZ3RoXG4gIHRoaXMuX3RyYWNrTGVuZ3RoKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl90cmFja0xlbmd0aCA9IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHZhbHVlTGVuZ3RoID0gMDtcblxuICAvLyB1c2VkIHcvIGdldExlbmd0aFN5bmMoKSwgd2hlbiBsZW5ndGggaXMga25vd24uXG4gIC8vIGUuZy4gZm9yIHN0cmVhbWluZyBkaXJlY3RseSBmcm9tIGEgcmVtb3RlIHNlcnZlcixcbiAgLy8gdy8gYSBrbm93biBmaWxlIGEgc2l6ZSwgYW5kIG5vdCB3YW50aW5nIHRvIHdhaXQgZm9yXG4gIC8vIGluY29taW5nIGZpbGUgdG8gZmluaXNoIHRvIGdldCBpdHMgc2l6ZS5cbiAgaWYgKG9wdGlvbnMua25vd25MZW5ndGggIT0gbnVsbCkge1xuICAgIHZhbHVlTGVuZ3RoICs9ICtvcHRpb25zLmtub3duTGVuZ3RoO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICB0aGlzLl92YWx1ZUxlbmd0aCArPSB2YWx1ZUxlbmd0aDtcblxuICAvLyBAY2hlY2sgd2h5IGFkZCBDUkxGPyBkb2VzIHRoaXMgYWNjb3VudCBmb3IgY3VzdG9tL211bHRpcGxlIENSTEZzP1xuICB0aGlzLl9vdmVyaGVhZExlbmd0aCArPVxuICAgIEJ1ZmZlci5ieXRlTGVuZ3RoKGhlYWRlcikgK1xuICAgIEZvcm1EYXRhLkxJTkVfQlJFQUsubGVuZ3RoO1xuXG4gIC8vIGVtcHR5IG9yIGVpdGhlciBkb2Vzbid0IGhhdmUgcGF0aCBvciBub3QgYW4gaHR0cCByZXNwb25zZVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vIG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGxlbmd0aFxuICBpZiAoIW9wdGlvbnMua25vd25MZW5ndGgpIHtcbiAgICB0aGlzLl92YWx1ZXNUb01lYXN1cmUucHVzaCh2YWx1ZSk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGVuZ3RoUmV0cmlldmVyID0gZnVuY3Rpb24odmFsdWUsIGNhbGxiYWNrKSB7XG5cbiAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdmZCcpKSB7XG5cbiAgICAvLyB0YWtlIHJlYWQgcmFuZ2UgaW50byBhIGFjY291bnRcbiAgICAvLyBgZW5kYCA9IEluZmluaXR5IOKAkz4gcmVhZCBmaWxlIHRpbGwgdGhlIGVuZFxuICAgIC8vXG4gICAgLy8gVE9ETzogTG9va3MgbGlrZSB0aGVyZSBpcyBidWcgaW4gTm9kZSBmcy5jcmVhdGVSZWFkU3RyZWFtXG4gICAgLy8gaXQgZG9lc24ndCByZXNwZWN0IGBlbmRgIG9wdGlvbnMgd2l0aG91dCBgc3RhcnRgIG9wdGlvbnNcbiAgICAvLyBGaXggaXQgd2hlbiBub2RlIGZpeGVzIGl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvNzgxOVxuICAgIGlmICh2YWx1ZS5lbmQgIT0gdW5kZWZpbmVkICYmIHZhbHVlLmVuZCAhPSBJbmZpbml0eSAmJiB2YWx1ZS5zdGFydCAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgLy8gd2hlbiBlbmQgc3BlY2lmaWVkXG4gICAgICAvLyBubyBuZWVkIHRvIGNhbGN1bGF0ZSByYW5nZVxuICAgICAgLy8gaW5jbHVzaXZlLCBzdGFydHMgd2l0aCAwXG4gICAgICBjYWxsYmFjayhudWxsLCB2YWx1ZS5lbmQgKyAxIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKSk7XG5cbiAgICAvLyBub3QgdGhhdCBmYXN0IHNub29weVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdGlsbCBuZWVkIHRvIGZldGNoIGZpbGUgc2l6ZSBmcm9tIGZzXG4gICAgICBmcy5zdGF0KHZhbHVlLnBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdCkge1xuXG4gICAgICAgIHZhciBmaWxlU2l6ZTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgZmluYWwgc2l6ZSBiYXNlZCBvbiB0aGUgcmFuZ2Ugb3B0aW9uc1xuICAgICAgICBmaWxlU2l6ZSA9IHN0YXQuc2l6ZSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVTaXplKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAvLyBvciBodHRwIHJlc3BvbnNlXG4gIH0gZWxzZSBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cE1vZHVsZScpKSB7XG4gICAgLy8gd2FpdCB0aWxsIHJlc3BvbnNlIGNvbWUgYmFja1xuICAgIHZhbHVlLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICB2YWx1ZS5wYXVzZSgpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgK3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pO1xuICAgIH0pO1xuICAgIHZhbHVlLnJlc3VtZSgpO1xuXG4gIC8vIHNvbWV0aGluZyBlbHNlXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soJ1Vua25vd24gc3RyZWFtJyk7XG4gIH1cbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbXVsdGlQYXJ0SGVhZGVyID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG4gIC8vIGN1c3RvbSBoZWFkZXIgc3BlY2lmaWVkIChhcyBzdHJpbmcpP1xuICAvLyBpdCBiZWNvbWVzIHJlc3BvbnNpYmxlIGZvciBib3VuZGFyeVxuICAvLyAoZS5nLiB0byBoYW5kbGUgZXh0cmEgQ1JMRnMgb24gLk5FVCBzZXJ2ZXJzKVxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuaGVhZGVyO1xuICB9XG5cbiAgdmFyIGNvbnRlbnREaXNwb3NpdGlvbiA9IHRoaXMuX2dldENvbnRlbnREaXNwb3NpdGlvbih2YWx1ZSwgb3B0aW9ucyk7XG4gIHZhciBjb250ZW50VHlwZSA9IHRoaXMuX2dldENvbnRlbnRUeXBlKHZhbHVlLCBvcHRpb25zKTtcblxuICB2YXIgY29udGVudHMgPSAnJztcbiAgdmFyIGhlYWRlcnMgID0ge1xuICAgIC8vIGFkZCBjdXN0b20gZGlzcG9zaXRpb24gYXMgdGhpcmQgZWxlbWVudCBvciBrZWVwIGl0IHR3byBlbGVtZW50cyBpZiBub3RcbiAgICAnQ29udGVudC1EaXNwb3NpdGlvbic6IFsnZm9ybS1kYXRhJywgJ25hbWU9XCInICsgZmllbGQgKyAnXCInXS5jb25jYXQoY29udGVudERpc3Bvc2l0aW9uIHx8IFtdKSxcbiAgICAvLyBpZiBubyBjb250ZW50IHR5cGUuIGFsbG93IGl0IHRvIGJlIGVtcHR5IGFycmF5XG4gICAgJ0NvbnRlbnQtVHlwZSc6IFtdLmNvbmNhdChjb250ZW50VHlwZSB8fCBbXSlcbiAgfTtcblxuICAvLyBhbGxvdyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmhlYWRlciA9PSAnb2JqZWN0Jykge1xuICAgIHBvcHVsYXRlKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVyKTtcbiAgfVxuXG4gIHZhciBoZWFkZXI7XG4gIGZvciAodmFyIHByb3AgaW4gaGVhZGVycykge1xuICAgIGlmICghaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgIC8vIHNraXAgbnVsbGlzaCBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbGwgaGVhZGVycyB0byBhcnJheXMuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlciA9IFtoZWFkZXJdO1xuICAgIH1cblxuICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICBpZiAoaGVhZGVyLmxlbmd0aCkge1xuICAgICAgY29udGVudHMgKz0gcHJvcCArICc6ICcgKyBoZWFkZXIuam9pbignOyAnKSArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICctLScgKyB0aGlzLmdldEJvdW5kYXJ5KCkgKyBGb3JtRGF0YS5MSU5FX0JSRUFLICsgY29udGVudHMgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50RGlzcG9zaXRpb24gPSBmdW5jdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuXG4gIHZhciBmaWxlbmFtZVxuICAgICwgY29udGVudERpc3Bvc2l0aW9uXG4gICAgO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5maWxlcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBjdXN0b20gZmlsZXBhdGggZm9yIHJlbGF0aXZlIHBhdGhzXG4gICAgZmlsZW5hbWUgPSBwYXRoLm5vcm1hbGl6ZShvcHRpb25zLmZpbGVwYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpIHtcbiAgICAvLyBjdXN0b20gZmlsZW5hbWUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gZm9ybWlkYWJsZSBhbmQgdGhlIGJyb3dzZXIgYWRkIGEgbmFtZSBwcm9wZXJ0eVxuICAgIC8vIGZzLSBhbmQgcmVxdWVzdC0gc3RyZWFtcyBoYXZlIHBhdGggcHJvcGVydHlcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3B0aW9ucy5maWxlbmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLnBhdGgpO1xuICB9IGVsc2UgaWYgKHZhbHVlLnJlYWRhYmxlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjb250ZW50VHlwZSA9IHZhbHVlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICB9XG5cbiAgLy8gb3IgZ3Vlc3MgaXQgZnJvbSB0aGUgZmlsZXBhdGggb3IgZmlsZW5hbWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKSkge1xuICAgIGNvbnRlbnRUeXBlID0gbWltZS5sb29rdXAob3B0aW9ucy5maWxlcGF0aCB8fCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgfVxuXG4gIC8vIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBpZiBgdmFsdWVgIGlzIG5vdCBzaW1wbGUgdmFsdWVcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICBjb250ZW50VHlwZSA9IEZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRUeXBlO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRGb290ZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5leHQpIHtcbiAgICB2YXIgZm9vdGVyID0gRm9ybURhdGEuTElORV9CUkVBSztcblxuICAgIHZhciBsYXN0UGFydCA9ICh0aGlzLl9zdHJlYW1zLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKGxhc3RQYXJ0KSB7XG4gICAgICBmb290ZXIgKz0gdGhpcy5fbGFzdEJvdW5kYXJ5KCk7XG4gICAgfVxuXG4gICAgbmV4dChmb290ZXIpO1xuICB9LmJpbmQodGhpcyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xhc3RCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArICctLScgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEhlYWRlcnMgPSBmdW5jdGlvbih1c2VySGVhZGVycykge1xuICB2YXIgaGVhZGVyO1xuICB2YXIgZm9ybUhlYWRlcnMgPSB7XG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgdGhpcy5nZXRCb3VuZGFyeSgpXG4gIH07XG5cbiAgZm9yIChoZWFkZXIgaW4gdXNlckhlYWRlcnMpIHtcbiAgICBpZiAodXNlckhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgZm9ybUhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdXNlckhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybUhlYWRlcnM7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIGNvbnRlbnQgbGVuZ3RoXG4gICAgcmVxdWVzdC5zZXRIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgbGVuZ3RoKTtcblxuICAgIHRoaXMucGlwZShyZXF1ZXN0KTtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgY2IpO1xuICAgICAgcmVxdWVzdC5vbigncmVzcG9uc2UnLCBjYi5iaW5kKHRoaXMsIG51bGwpKTtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIGlmICghdGhpcy5lcnJvcikge1xuICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnW29iamVjdCBGb3JtRGF0YV0nO1xufTtcbiIsInZhciBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICAsIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGl0ZXJhdGU7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlYWNoIGpvYiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBqb2Igc3RhdHVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBjYWxsYmFjaylcbntcbiAgLy8gc3RvcmUgY3VycmVudCBpbmRleFxuICB2YXIga2V5ID0gc3RhdGVbJ2tleWVkTGlzdCddID8gc3RhdGVbJ2tleWVkTGlzdCddW3N0YXRlLmluZGV4XSA6IHN0YXRlLmluZGV4O1xuXG4gIHN0YXRlLmpvYnNba2V5XSA9IHJ1bkpvYihpdGVyYXRvciwga2V5LCBsaXN0W2tleV0sIGZ1bmN0aW9uKGVycm9yLCBvdXRwdXQpXG4gIHtcbiAgICAvLyBkb24ndCByZXBlYXQgeW91cnNlbGZcbiAgICAvLyBza2lwIHNlY29uZGFyeSBjYWxsYmFja3NcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuam9icykpXG4gICAge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIGpvYnNcbiAgICBkZWxldGUgc3RhdGUuam9ic1trZXldO1xuXG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIC8vIGRvbid0IHByb2Nlc3MgcmVzdCBvZiB0aGUgcmVzdWx0c1xuICAgICAgLy8gc3RvcCBzdGlsbCBhY3RpdmUgam9ic1xuICAgICAgLy8gYW5kIHJlc2V0IHRoZSBsaXN0XG4gICAgICBhYm9ydChzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBzdGF0ZS5yZXN1bHRzW2tleV0gPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHNhbHZhZ2VkIHJlc3VsdHNcbiAgICBjYWxsYmFjayhlcnJvciwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBqb2IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBpbnZva2VcbiAqIEBwYXJhbSAgIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBrZXkvaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGxpc3Qgb2Ygam9ic1xuICogQHBhcmFtICAge21peGVkfSBpdGVtIC0gam9iIGRlc2NyaXB0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCBhZnRlciBpdGVyYXRvciBpcyBkb25lIHdpdGggdGhlIGpvYlxuICogQHJldHVybnMge2Z1bmN0aW9ufG1peGVkfSAtIGpvYiBhYm9ydCBmdW5jdGlvbiBvciBzb21ldGhpbmcgZWxzZVxuICovXG5mdW5jdGlvbiBydW5Kb2IoaXRlcmF0b3IsIGtleSwgaXRlbSwgY2FsbGJhY2spXG57XG4gIHZhciBhYm9ydGVyO1xuXG4gIC8vIGFsbG93IHNob3J0Y3V0IGlmIGl0ZXJhdG9yIGV4cGVjdHMgb25seSB0d28gYXJndW1lbnRzXG4gIGlmIChpdGVyYXRvci5sZW5ndGggPT0gMilcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG4gIC8vIG90aGVyd2lzZSBnbyB3aXRoIGZ1bGwgdGhyZWUgYXJndW1lbnRzXG4gIGVsc2VcbiAge1xuICAgIGFib3J0ZXIgPSBpdGVyYXRvcihpdGVtLCBrZXksIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cblxuICByZXR1cm4gYWJvcnRlcjtcbn1cbiIsInZhciBkZWZlciA9IHJlcXVpcmUoJy4vZGVmZXIuanMnKTtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHlcbiAqIGV2ZW4gaWYgY2FsbGJhY2sgaXRzZWxmIGlzIG5vdFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBpbnZva2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhdWdtZW50ZWQgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYXN5bmMoY2FsbGJhY2spXG57XG4gIHZhciBpc0FzeW5jID0gZmFsc2U7XG5cbiAgLy8gY2hlY2sgaWYgYXN5bmMgaGFwcGVuZWRcbiAgZGVmZXIoZnVuY3Rpb24oKSB7IGlzQXN5bmMgPSB0cnVlOyB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYXN5bmNfY2FsbGJhY2soZXJyLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoaXNBc3luYylcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBkZWZlcihmdW5jdGlvbiBuZXh0VGlja19jYWxsYmFjaygpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhYm9ydDtcblxuLyoqXG4gKiBBYm9ydHMgbGVmdG92ZXIgYWN0aXZlIGpvYnNcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBhYm9ydChzdGF0ZSlcbntcbiAgT2JqZWN0LmtleXMoc3RhdGUuam9icykuZm9yRWFjaChjbGVhbi5iaW5kKHN0YXRlKSk7XG5cbiAgLy8gcmVzZXQgbGVmdG92ZXIgam9ic1xuICBzdGF0ZS5qb2JzID0ge307XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGxlZnRvdmVyIGpvYiBieSBpbnZva2luZyBhYm9ydCBmdW5jdGlvbiBmb3IgdGhlIHByb3ZpZGVkIGpvYiBpZFxuICpcbiAqIEB0aGlzICBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBrZXkgLSBqb2IgaWQgdG8gYWJvcnRcbiAqL1xuZnVuY3Rpb24gY2xlYW4oa2V5KVxue1xuICBpZiAodHlwZW9mIHRoaXMuam9ic1trZXldID09ICdmdW5jdGlvbicpXG4gIHtcbiAgICB0aGlzLmpvYnNba2V5XSgpO1xuICB9XG59XG4iLCIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iLCJ2YXIgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSB0ZXJtaW5hdG9yO1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgam9icyBpbiB0aGUgYXR0YWNoZWQgc3RhdGUgY29udGV4dFxuICpcbiAqIEB0aGlzICBBc3luY0tpdFN0YXRlI1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmaW5hbCBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGVybWluYXRpb25cbiAqL1xuZnVuY3Rpb24gdGVybWluYXRvcihjYWxsYmFjaylcbntcbiAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmpvYnMpLmxlbmd0aClcbiAge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGZhc3QgZm9yd2FyZCBpdGVyYXRpb24gaW5kZXhcbiAgdGhpcy5pbmRleCA9IHRoaXMuc2l6ZTtcblxuICAvLyBhYm9ydCBqb2JzXG4gIGFib3J0KHRoaXMpO1xuXG4gIC8vIHNlbmQgYmFjayByZXN1bHRzIHdlIGhhdmUgc28gZmFyXG4gIGFzeW5jKGNhbGxiYWNrKShudWxsLCB0aGlzLnJlc3VsdHMpO1xufVxuIiwidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbE9yZGVyZWQ7XG4vLyBzb3J0aW5nIGhlbHBlcnNcbm1vZHVsZS5leHBvcnRzLmFzY2VuZGluZyAgPSBhc2NlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZXNjZW5kaW5nID0gZGVzY2VuZGluZztcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgc29ydGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBzb3J0TWV0aG9kIC0gY3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBzb3J0TWV0aG9kLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QsIHNvcnRNZXRob2QpO1xuXG4gIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbiBpdGVyYXRvckhhbmRsZXIoZXJyb3IsIHJlc3VsdClcbiAge1xuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuXG4gICAgLy8gYXJlIHdlIHRoZXJlIHlldD9cbiAgICBpZiAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAgICB7XG4gICAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgaXRlcmF0b3JIYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkb25lIGhlcmVcbiAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuXG4vKlxuICogLS0gU29ydCBtZXRob2RzXG4gKi9cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGFzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBkZXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKVxue1xuICByZXR1cm4gLTEgKiBhc2NlbmRpbmcoYSwgYik7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMTguMi41IHBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUludCAhPSAkcGFyc2VJbnQpLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmlnJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSksICdEYXRlJywge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSByZXF1aXJlKCcuL19oaWRlJykocHJvdG8sIFRPX1BSSU1JVElWRSwgcmVxdWlyZSgnLi9fZGF0ZS10by1wcmltaXRpdmUnKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkbWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsImltcG9ydCBwaW5CeUhhc2ggZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkJ5SGFzaCc7XG5pbXBvcnQgaGFzaFBpblBvbGljeSBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvaGFzaFBpblBvbGljeSc7XG5pbXBvcnQgcGluRmlsZVRvSVBGUyBmcm9tICcuL2NvbW1hbmRzL3Bpbm5pbmcvcGluRmlsZVRvSVBGUyc7XG5pbXBvcnQgcGluRnJvbUZTIGZyb20gJy4vY29tbWFuZHMvcGlubmluZy9waW5Gcm9tRlMnO1xuaW1wb3J0IHBpbkpTT05Ub0lQRlMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkpTT05Ub0lQRlMnO1xuaW1wb3J0IHBpbkpvYnMgZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3BpbkpvYnMvcGluSm9icyc7XG5pbXBvcnQgdW5waW4gZnJvbSAnLi9jb21tYW5kcy9waW5uaW5nL3VucGluJztcbmltcG9ydCB1c2VyUGluUG9saWN5IGZyb20gJy4vY29tbWFuZHMvcGlubmluZy91c2VyUGluUG9saWN5JztcbmltcG9ydCB0ZXN0QXV0aGVudGljYXRpb24gZnJvbSAnLi9jb21tYW5kcy9kYXRhL3Rlc3RBdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgcGluTGlzdCBmcm9tICcuL2NvbW1hbmRzL2RhdGEvcGluTGlzdC9waW5MaXN0JztcbmltcG9ydCB1c2VyUGlubmVkRGF0YVRvdGFsIGZyb20gJy4vY29tbWFuZHMvZGF0YS91c2VyUGlubmVkRGF0YVRvdGFsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluYXRhQ2xpZW50KHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KSB7XG4gICAgbGV0IGNsaWVudCA9IHt9O1xuXG4gICAgLy8gIHNldHRpbmcgdXAgdGhlIGFjdHVhbCBjYWxscyB5b3UgY2FuIG1ha2UgdXNpbmcgdGhpcyBwYWNrYWdlXG4gICAgY2xpZW50LnBpbkJ5SGFzaCA9IGZ1bmN0aW9uIChoYXNoVG9QaW4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBpbkJ5SGFzaChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvUGluLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIGNsaWVudC5oYXNoUGluUG9saWN5ID0gZnVuY3Rpb24gKGhhc2hUb1Bpbiwgb3B0aW9ucywgaXBmc1Bpbkhhc2gsIG5ld1BpblBvbGljeSkge1xuICAgICAgICByZXR1cm4gaGFzaFBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaXBmc1Bpbkhhc2gsIG5ld1BpblBvbGljeSk7XG4gICAgfTtcbiAgICBjbGllbnQucGluRmlsZVRvSVBGUyA9IGZ1bmN0aW9uIChyZWFkYWJsZVN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluRmlsZVRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgcmVhZGFibGVTdHJlYW0sIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkZyb21GUyA9IGZ1bmN0aW9uIChzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBwaW5Gcm9tRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHNvdXJjZVBhdGgsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkpTT05Ub0lQRlMgPSBmdW5jdGlvbiAoYm9keSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBjbGllbnQucGluSm9icyA9IGZ1bmN0aW9uIChmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBwaW5Kb2JzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBmaWx0ZXJzKTtcbiAgICB9O1xuICAgIGNsaWVudC51bnBpbiA9IGZ1bmN0aW9uIChoYXNoVG9VbnBpbikge1xuICAgICAgICByZXR1cm4gdW5waW4ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1VucGluKTtcbiAgICB9O1xuICAgIGNsaWVudC51c2VyUGluUG9saWN5ID0gZnVuY3Rpb24gKG5ld1BpblBvbGljeSkge1xuICAgICAgICByZXR1cm4gdXNlclBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgbmV3UGluUG9saWN5KTtcbiAgICB9O1xuICAgIGNsaWVudC50ZXN0QXV0aGVudGljYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0ZXN0QXV0aGVudGljYXRpb24ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIH07XG4gICAgY2xpZW50LnBpbkxpc3QgPSBmdW5jdGlvbiAoZmlsdGVycykge1xuICAgICAgICByZXR1cm4gcGluTGlzdChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycyk7XG4gICAgfTtcbiAgICBjbGllbnQudXNlclBpbm5lZERhdGFUb3RhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVzZXJQaW5uZWREYXRhVG90YWwocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuICAgIH07XG4gICAgcmV0dXJuIGNsaWVudDtcbn1cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcbmltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkJ5SGFzaChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaGFzaFRvUGluLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGlmICghaGFzaFRvUGluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGFzaFRvUGluIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBwaW5uaW5nIGJ5IGhhc2gnKTtcbiAgICB9XG4gICAgaWYgKCFpc0lQRlMuY2lkKGhhc2hUb1BpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9QaW4gdmFsdWUgaXMgYW4gaW52YWxpZCBJUEZTIENJRCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5CeUhhc2hgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIGhhc2hUb1BpbjogaGFzaFRvUGluLFxuICAgICAgICBwaW5hdGFPcHRpb25zOiB7fVxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFPcHRpb25zKSB7XG4gICAgICAgICAgICBib2R5LnBpbmF0YU9wdGlvbnMgPSBvcHRpb25zLnBpbmF0YU9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICBib2R5LnBpbmF0YU1ldGFkYXRhID0gb3B0aW9ucy5waW5hdGFNZXRhZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYWRkaW5nIHRvIHBpbiBxdWV1ZTogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UodXRpbHMubWVyZ2UoZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IHV0aWxzLm1lcmdlKHtcbiAgICAgIHVybDogYXJndW1lbnRzWzBdXG4gICAgfSwgYXJndW1lbnRzWzFdKTtcbiAgfVxuXG4gIGNvbmZpZyA9IHV0aWxzLm1lcmdlKGRlZmF1bHRzLCB7bWV0aG9kOiAnZ2V0J30sIHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGh0dHBGb2xsb3cgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJykuaHR0cDtcbnZhciBodHRwc0ZvbGxvdyA9IHJlcXVpcmUoJ2ZvbGxvdy1yZWRpcmVjdHMnKS5odHRwcztcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcbnZhciB6bGliID0gcmVxdWlyZSgnemxpYicpO1xudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgZGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciBoZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG4gICAgdmFyIHRpbWVyO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBPbmx5IHNldCBoZWFkZXIgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGluIGNvbmZpZ1xuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgaWYgKCFoZWFkZXJzWydVc2VyLUFnZW50J10gJiYgIWhlYWRlcnNbJ3VzZXItYWdlbnQnXSkge1xuICAgICAgaGVhZGVyc1snVXNlci1BZ2VudCddID0gJ2F4aW9zLycgKyBwa2cudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiBkYXRhIGV4aXN0c1xuICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICB2YXIgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICBhdXRoID0gdXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZDtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKGNvbmZpZy51cmwpO1xuICAgIHZhciBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCAnaHR0cDonO1xuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC5hdXRoKSB7XG4gICAgICB2YXIgdXJsQXV0aCA9IHBhcnNlZC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIgdXJsVXNlcm5hbWUgPSB1cmxBdXRoWzBdIHx8ICcnO1xuICAgICAgdmFyIHVybFBhc3N3b3JkID0gdXJsQXV0aFsxXSB8fCAnJztcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGlmIChhdXRoKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIHZhciBpc0h0dHBzID0gcHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIHZhciBhZ2VudCA9IGlzSHR0cHMgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGJ1aWxkVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKSxcbiAgICAgIG1ldGhvZDogY29uZmlnLm1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogYWdlbnQsXG4gICAgICBhdXRoOiBhdXRoXG4gICAgfTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICB9XG5cbiAgICB2YXIgcHJveHkgPSBjb25maWcucHJveHk7XG4gICAgaWYgKCFwcm94eSAmJiBwcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcm94eUVudiA9IHByb3RvY29sLnNsaWNlKDAsIC0xKSArICdfcHJveHknO1xuICAgICAgdmFyIHByb3h5VXJsID0gcHJvY2Vzcy5lbnZbcHJveHlFbnZdIHx8IHByb2Nlc3MuZW52W3Byb3h5RW52LnRvVXBwZXJDYXNlKCldO1xuICAgICAgaWYgKHByb3h5VXJsKSB7XG4gICAgICAgIHZhciBwYXJzZWRQcm94eVVybCA9IHVybC5wYXJzZShwcm94eVVybCk7XG4gICAgICAgIHByb3h5ID0ge1xuICAgICAgICAgIGhvc3Q6IHBhcnNlZFByb3h5VXJsLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHBhcnNlZFByb3h5VXJsLnBvcnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGFyc2VkUHJveHlVcmwuYXV0aCkge1xuICAgICAgICAgIHZhciBwcm94eVVybEF1dGggPSBwYXJzZWRQcm94eVVybC5hdXRoLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgcHJveHkuYXV0aCA9IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBwcm94eVVybEF1dGhbMF0sXG4gICAgICAgICAgICBwYXNzd29yZDogcHJveHlVcmxBdXRoWzFdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm94eSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IHByb3h5Lmhvc3Q7XG4gICAgICBvcHRpb25zLmhvc3QgPSBwcm94eS5ob3N0O1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLmhvc3QgPSBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHByb3h5LnBvcnQ7XG4gICAgICBvcHRpb25zLnBhdGggPSBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aDtcblxuICAgICAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICAgICAgaWYgKHByb3h5LmF1dGgpIHtcbiAgICAgICAgdmFyIGJhc2U2NCA9IG5ldyBCdWZmZXIocHJveHkuYXV0aC51c2VybmFtZSArICc6JyArIHByb3h5LmF1dGgucGFzc3dvcmQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0cmFuc3BvcnQ7XG4gICAgaWYgKGNvbmZpZy50cmFuc3BvcnQpIHtcbiAgICAgIHRyYW5zcG9ydCA9IGNvbmZpZy50cmFuc3BvcnQ7XG4gICAgfSBlbHNlIGlmIChjb25maWcubWF4UmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCAmJiBjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Q29udGVudExlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICB2YXIgcmVxID0gdHJhbnNwb3J0LnJlcXVlc3Qob3B0aW9ucywgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UocmVzKSB7XG4gICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcblxuICAgICAgLy8gUmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQgc28ga2lsbCB0aW1lciB0aGF0IGhhbmRsZXMgcmVxdWVzdCB0aW1lb3V0XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuXG4gICAgICAvLyB1bmNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIHZhciBzdHJlYW0gPSByZXM7XG4gICAgICBzd2l0Y2ggKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgIC8qZXNsaW50IGRlZmF1bHQtY2FzZTowKi9cbiAgICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgY2FzZSAnZGVmbGF0ZSc6XG4gICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgc3RyZWFtID0gc3RyZWFtLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHJlcXVlc3QgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgIHZhciBsYXN0UmVxdWVzdCA9IHJlcy5yZXEgfHwgcmVxO1xuXG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHN0cmVhbTtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbURhdGEoY2h1bmspIHtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKTtcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29udGVudCBsZW5ndGggaXMgbm90IG92ZXIgdGhlIG1heENvbnRlbnRMZW5ndGggaWYgc3BlY2lmaWVkXG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoID4gLTEgJiYgQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcikubGVuZ3RoID4gY29uZmlnLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgY29uZmlnLCBudWxsLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRW5kKCkge1xuICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBCdWZmZXIuY29uY2F0KHJlc3BvbnNlQnVmZmVyKTtcbiAgICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IHJlc3BvbnNlRGF0YTtcbiAgICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGVycm9yc1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0RXJyb3IoZXJyKSB7XG4gICAgICBpZiAocmVxLmFib3J0ZWQpIHJldHVybjtcbiAgICAgIHJlamVjdChlbmhhbmNlRXJyb3IoZXJyLCBjb25maWcsIG51bGwsIHJlcSkpO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHJlcXVlc3QgdGltZW91dFxuICAgIGlmIChjb25maWcudGltZW91dCAmJiAhdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0VGltZW91dCgpIHtcbiAgICAgICAgcmVxLmFib3J0KCk7XG4gICAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXEpKTtcbiAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmIChyZXEuYWJvcnRlZCkgcmV0dXJuO1xuXG4gICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXNzZXJ0XCIpOyIsIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsIi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICpcbiAqIEV4cG9zZSBgZGVidWcoKWAgYXMgdGhlIG1vZHVsZS5cbiAqL1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RlYnVnJyk7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZVxuICAgICAgICAgICAgICAgJiYgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIGNocm9tZS5zdG9yYWdlXG4gICAgICAgICAgICAgICAgICA/IGNocm9tZS5zdG9yYWdlLmxvY2FsXG4gICAgICAgICAgICAgICAgICA6IGxvY2Fsc3RvcmFnZSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcbiAgJyMwMDAwQ0MnLCAnIzAwMDBGRicsICcjMDAzM0NDJywgJyMwMDMzRkYnLCAnIzAwNjZDQycsICcjMDA2NkZGJywgJyMwMDk5Q0MnLFxuICAnIzAwOTlGRicsICcjMDBDQzAwJywgJyMwMENDMzMnLCAnIzAwQ0M2NicsICcjMDBDQzk5JywgJyMwMENDQ0MnLCAnIzAwQ0NGRicsXG4gICcjMzMwMENDJywgJyMzMzAwRkYnLCAnIzMzMzNDQycsICcjMzMzM0ZGJywgJyMzMzY2Q0MnLCAnIzMzNjZGRicsICcjMzM5OUNDJyxcbiAgJyMzMzk5RkYnLCAnIzMzQ0MwMCcsICcjMzNDQzMzJywgJyMzM0NDNjYnLCAnIzMzQ0M5OScsICcjMzNDQ0NDJywgJyMzM0NDRkYnLFxuICAnIzY2MDBDQycsICcjNjYwMEZGJywgJyM2NjMzQ0MnLCAnIzY2MzNGRicsICcjNjZDQzAwJywgJyM2NkNDMzMnLCAnIzk5MDBDQycsXG4gICcjOTkwMEZGJywgJyM5OTMzQ0MnLCAnIzk5MzNGRicsICcjOTlDQzAwJywgJyM5OUNDMzMnLCAnI0NDMDAwMCcsICcjQ0MwMDMzJyxcbiAgJyNDQzAwNjYnLCAnI0NDMDA5OScsICcjQ0MwMENDJywgJyNDQzAwRkYnLCAnI0NDMzMwMCcsICcjQ0MzMzMzJywgJyNDQzMzNjYnLFxuICAnI0NDMzM5OScsICcjQ0MzM0NDJywgJyNDQzMzRkYnLCAnI0NDNjYwMCcsICcjQ0M2NjMzJywgJyNDQzk5MDAnLCAnI0NDOTkzMycsXG4gICcjQ0NDQzAwJywgJyNDQ0NDMzMnLCAnI0ZGMDAwMCcsICcjRkYwMDMzJywgJyNGRjAwNjYnLCAnI0ZGMDA5OScsICcjRkYwMENDJyxcbiAgJyNGRjAwRkYnLCAnI0ZGMzMwMCcsICcjRkYzMzMzJywgJyNGRjMzNjYnLCAnI0ZGMzM5OScsICcjRkYzM0NDJywgJyNGRjMzRkYnLFxuICAnI0ZGNjYwMCcsICcjRkY2NjMzJywgJyNGRjk5MDAnLCAnI0ZGOTkzMycsICcjRkZDQzAwJywgJyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgLy8gTkI6IEluIGFuIEVsZWN0cm9uIHByZWxvYWQgc2NyaXB0LCBkb2N1bWVudCB3aWxsIGJlIGRlZmluZWQgYnV0IG5vdCBmdWxseVxuICAvLyBpbml0aWFsaXplZC4gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBDaHJvbWUsIHdlJ2xsIGp1c3QgZGV0ZWN0IHRoaXMgY2FzZVxuICAvLyBleHBsaWNpdGx5XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucHJvY2VzcyAmJiB3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcXC8oXFxkKykvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlzIHdlYmtpdD8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTY0NTk2MDYvMzc2NzczXG4gIC8vIGRvY3VtZW50IGlzIHVuZGVmaW5lZCBpbiByZWFjdC1uYXRpdmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC1uYXRpdmUvcHVsbC8xNjMyXG4gIHJldHVybiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5XZWJraXRBcHBlYXJhbmNlKSB8fFxuICAgIC8vIGlzIGZpcmVidWc/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5ODEyMC8zNzY3NzNcbiAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLmZpcmVidWcgfHwgKHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiAmJiB3aW5kb3cuY29uc29sZS50YWJsZSkpKSB8fFxuICAgIC8vIGlzIGZpcmVmb3ggPj0gdjMxP1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVG9vbHMvV2ViX0NvbnNvbGUjU3R5bGluZ19tZXNzYWdlc1xuICAgICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pICYmIHBhcnNlSW50KFJlZ0V4cC4kMSwgMTApID49IDMxKSB8fFxuICAgIC8vIGRvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcbiAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnIubWVzc2FnZTtcbiAgfVxufTtcblxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICB2YXIgdXNlQ29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cbiAgYXJnc1swXSA9ICh1c2VDb2xvcnMgPyAnJWMnIDogJycpXG4gICAgKyB0aGlzLm5hbWVzcGFjZVxuICAgICsgKHVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKVxuICAgICsgYXJnc1swXVxuICAgICsgKHVzZUNvbG9ycyA/ICclYyAnIDogJyAnKVxuICAgICsgJysnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG4gIGlmICghdXNlQ29sb3JzKSByZXR1cm47XG5cbiAgdmFyIGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuICBhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKVxuXG4gIC8vIHRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsYXN0QyA9IDA7XG4gIGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIGlmICgnJSUnID09PSBtYXRjaCkgcmV0dXJuO1xuICAgIGluZGV4Kys7XG4gICAgaWYgKCclYycgPT09IG1hdGNoKSB7XG4gICAgICAvLyB3ZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcbiAgICAgIC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG4gICAgICBsYXN0QyA9IGluZGV4O1xuICAgIH1cbiAgfSk7XG5cbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUubG9nKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5sb2dgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgLy8gdGhpcyBoYWNrZXJ5IGlzIHJlcXVpcmVkIGZvciBJRTgvOSwgd2hlcmVcbiAgLy8gdGhlIGBjb25zb2xlLmxvZ2AgZnVuY3Rpb24gZG9lc24ndCBoYXZlICdhcHBseSdcbiAgcmV0dXJuICdvYmplY3QnID09PSB0eXBlb2YgY29uc29sZVxuICAgICYmIGNvbnNvbGUubG9nXG4gICAgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csIGNvbnNvbGUsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuICB0cnkge1xuICAgIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UuZGVidWcgPSBuYW1lc3BhY2VzO1xuICAgIH1cbiAgfSBjYXRjaChlKSB7fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG4gIHZhciByO1xuICB0cnkge1xuICAgIHIgPSBleHBvcnRzLnN0b3JhZ2UuZGVidWc7XG4gIH0gY2F0Y2goZSkge31cblxuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG4gIGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuICAgIHIgPSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfVxuXG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIEVuYWJsZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiBgbG9jYWxTdG9yYWdlLmRlYnVnYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG4iLCIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWwpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb25zLmxvbmcgPyBmbXRMb25nKHZhbCkgOiBmbXRTaG9ydCh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbClcbiAgKTtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIGFuZCByZXR1cm4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG1hdGNoID0gL14oKD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnZGF5cyc6XG4gICAgY2FzZSAnZGF5JzpcbiAgICBjYXNlICdkJzpcbiAgICAgIHJldHVybiBuICogZDtcbiAgICBjYXNlICdob3Vycyc6XG4gICAgY2FzZSAnaG91cic6XG4gICAgY2FzZSAnaHJzJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAnaCc6XG4gICAgICByZXR1cm4gbiAqIGg7XG4gICAgY2FzZSAnbWludXRlcyc6XG4gICAgY2FzZSAnbWludXRlJzpcbiAgICBjYXNlICdtaW5zJzpcbiAgICBjYXNlICdtaW4nOlxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIG4gKiBtO1xuICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgY2FzZSAnc2Vjcyc6XG4gICAgY2FzZSAnc2VjJzpcbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBuICogcztcbiAgICBjYXNlICdtaWxsaXNlY29uZHMnOlxuICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICBjYXNlICdtc2Vjcyc6XG4gICAgY2FzZSAnbXNlYyc6XG4gICAgY2FzZSAnbXMnOlxuICAgICAgcmV0dXJuIG47XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICBpZiAobXMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtcyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgcmV0dXJuIHBsdXJhbChtcywgZCwgJ2RheScpIHx8XG4gICAgcGx1cmFsKG1zLCBoLCAnaG91cicpIHx8XG4gICAgcGx1cmFsKG1zLCBtLCAnbWludXRlJykgfHxcbiAgICBwbHVyYWwobXMsIHMsICdzZWNvbmQnKSB8fFxuICAgIG1zICsgJyBtcyc7XG59XG5cbi8qKlxuICogUGx1cmFsaXphdGlvbiBoZWxwZXIuXG4gKi9cblxuZnVuY3Rpb24gcGx1cmFsKG1zLCBuLCBuYW1lKSB7XG4gIGlmIChtcyA8IG4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG1zIDwgbiAqIDEuNSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1zIC8gbikgKyAnICcgKyBuYW1lO1xuICB9XG4gIHJldHVybiBNYXRoLmNlaWwobXMgLyBuKSArICcgJyArIG5hbWUgKyAncyc7XG59XG4iLCIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKlxuICogRXhwb3NlIGBkZWJ1ZygpYCBhcyB0aGUgbW9kdWxlLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGVidWcnKTtcbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFsgNiwgMiwgMywgNCwgNSwgMSBdO1xuXG50cnkge1xuICB2YXIgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG4gIGlmIChzdXBwb3J0c0NvbG9yICYmIHN1cHBvcnRzQ29sb3IubGV2ZWwgPj0gMikge1xuICAgIGV4cG9ydHMuY29sb3JzID0gW1xuICAgICAgMjAsIDIxLCAyNiwgMjcsIDMyLCAzMywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA1NiwgNTcsIDYyLCA2MywgNjgsXG4gICAgICA2OSwgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA5MiwgOTMsIDk4LCA5OSwgMTEyLCAxMTMsIDEyOCwgMTI5LCAxMzQsXG4gICAgICAxMzUsIDE0OCwgMTQ5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLFxuICAgICAgMTcyLCAxNzMsIDE3OCwgMTc5LCAxODQsIDE4NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCxcbiAgICAgIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTQsIDIxNSwgMjIwLCAyMjFcbiAgICBdO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLy8gc3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZShmdW5jdGlvbiAob2JqLCBrZXkpIHtcbiAgLy8gY2FtZWwtY2FzZVxuICB2YXIgcHJvcCA9IGtleVxuICAgIC5zdWJzdHJpbmcoNilcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9fKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgaykgeyByZXR1cm4gay50b1VwcGVyQ2FzZSgpIH0pO1xuXG4gIC8vIGNvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuICB2YXIgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgaWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkgdmFsID0gdHJ1ZTtcbiAgZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHZhbCA9IGZhbHNlO1xuICBlbHNlIGlmICh2YWwgPT09ICdudWxsJykgdmFsID0gbnVsbDtcbiAgZWxzZSB2YWwgPSBOdW1iZXIodmFsKTtcblxuICBvYmpbcHJvcF0gPSB2YWw7XG4gIHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcbiAgcmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHNcbiAgICA/IEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpXG4gICAgOiB0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXR0ZXJzLm8gPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG4gIHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcbiAgICAuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBzdHIudHJpbSgpXG4gICAgfSkuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmV4cG9ydHMuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24odikge1xuICB0aGlzLmluc3BlY3RPcHRzLmNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuICByZXR1cm4gdXRpbC5pbnNwZWN0KHYsIHRoaXMuaW5zcGVjdE9wdHMpO1xufTtcblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLm5hbWVzcGFjZTtcbiAgdmFyIHVzZUNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXG4gIGlmICh1c2VDb2xvcnMpIHtcbiAgICB2YXIgYyA9IHRoaXMuY29sb3I7XG4gICAgdmFyIGNvbG9yQ29kZSA9ICdcXHUwMDFiWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuICAgIHZhciBwcmVmaXggPSAnICAnICsgY29sb3JDb2RlICsgJzsxbScgKyBuYW1lICsgJyAnICsgJ1xcdTAwMWJbMG0nO1xuXG4gICAgYXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuICAgIGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMWJbMG0nKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcbiAgaWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0KClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKCkge1xuICByZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIGlmIChudWxsID09IG5hbWVzcGFjZXMpIHtcbiAgICAvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcbiAgICAvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdCAoZGVidWcpIHtcbiAgZGVidWcuaW5zcGVjdE9wdHMgPSB7fTtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG4gIH1cbn1cblxuLyoqXG4gKiBFbmFibGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gYHByb2Nlc3MuZW52LkRFQlVHYCBpbml0aWFsbHkuXG4gKi9cblxuZXhwb3J0cy5lbmFibGUobG9hZCgpKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInR0eVwiKTsiLCIndXNlIHN0cmljdCc7XG5jb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG5cbmxldCBmb3JjZUNvbG9yO1xuaWYgKGhhc0ZsYWcoJ25vLWNvbG9yJykgfHxcblx0aGFzRmxhZygnbm8tY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9ZmFsc2UnKSkge1xuXHRmb3JjZUNvbG9yID0gZmFsc2U7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSB0cnVlO1xufVxuaWYgKCdGT1JDRV9DT0xPUicgaW4gZW52KSB7XG5cdGZvcmNlQ29sb3IgPSBlbnYuRk9SQ0VfQ09MT1IubGVuZ3RoID09PSAwIHx8IHBhcnNlSW50KGVudi5GT1JDRV9DT0xPUiwgMTApICE9PSAwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVMZXZlbChsZXZlbCkge1xuXHRpZiAobGV2ZWwgPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGxldmVsLFxuXHRcdGhhc0Jhc2ljOiB0cnVlLFxuXHRcdGhhczI1NjogbGV2ZWwgPj0gMixcblx0XHRoYXMxNm06IGxldmVsID49IDNcblx0fTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNDb2xvcihzdHJlYW0pIHtcblx0aWYgKGZvcmNlQ29sb3IgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoc3RyZWFtICYmICFzdHJlYW0uaXNUVFkgJiYgZm9yY2VDb2xvciAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgbWluID0gZm9yY2VDb2xvciA/IDEgOiAwO1xuXG5cdGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG5cdFx0Ly8gTm9kZS5qcyA3LjUuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiBvZiBOb2RlLmpzIHRvIGluY2x1ZGUgYSBwYXRjaCB0b1xuXHRcdC8vIGxpYnV2IHRoYXQgZW5hYmxlcyAyNTYgY29sb3Igb3V0cHV0IG9uIFdpbmRvd3MuIEFueXRoaW5nIGVhcmxpZXIgYW5kIGl0XG5cdFx0Ly8gd29uJ3Qgd29yay4gSG93ZXZlciwgaGVyZSB3ZSB0YXJnZXQgTm9kZS5qcyA4IGF0IG1pbmltdW0gYXMgaXQgaXMgYW4gTFRTXG5cdFx0Ly8gcmVsZWFzZSwgYW5kIE5vZGUuanMgNyBpcyBub3QuIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3Ncblx0XHQvLyByZWxlYXNlIHRoYXQgc3VwcG9ydHMgMjU2IGNvbG9ycy4gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZVxuXHRcdC8vIHRoYXQgc3VwcG9ydHMgMTZtL1RydWVDb2xvci5cblx0XHRjb25zdCBvc1JlbGVhc2UgPSBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKTtcblx0XHRpZiAoXG5cdFx0XHROdW1iZXIocHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJylbMF0pID49IDggJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IHBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzpcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmIChlbnYuVEVSTSA9PT0gJ2R1bWInKSB7XG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0pIHtcblx0Y29uc3QgbGV2ZWwgPSBzdXBwb3J0c0NvbG9yKHN0cmVhbSk7XG5cdHJldHVybiB0cmFuc2xhdGVMZXZlbChsZXZlbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdXBwb3J0c0NvbG9yOiBnZXRTdXBwb3J0TGV2ZWwsXG5cdHN0ZG91dDogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3Rkb3V0KSxcblx0c3RkZXJyOiBnZXRTdXBwb3J0TGV2ZWwocHJvY2Vzcy5zdGRlcnIpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gU3VwcG9ydCBiYXNlVVJMIGNvbmZpZ1xuICBpZiAoY29uZmlnLmJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcbiAgICBjb25maWcudXJsID0gY29tYmluZVVSTHMoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICB9XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVycyB8fCB7fVxuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLWRlcHJlY2F0ZWQtYXBpICovXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJylcbnZhciBCdWZmZXIgPSBidWZmZXIuQnVmZmVyXG5cbi8vIGFsdGVybmF0aXZlIHRvIHVzaW5nIE9iamVjdC5rZXlzIGZvciBvbGQgYnJvd3NlcnNcbmZ1bmN0aW9uIGNvcHlQcm9wcyAoc3JjLCBkc3QpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGRzdFtrZXldID0gc3JjW2tleV1cbiAgfVxufVxuaWYgKEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5hbGxvYyAmJiBCdWZmZXIuYWxsb2NVbnNhZmUgJiYgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdykge1xuICBtb2R1bGUuZXhwb3J0cyA9IGJ1ZmZlclxufSBlbHNlIHtcbiAgLy8gQ29weSBwcm9wZXJ0aWVzIGZyb20gcmVxdWlyZSgnYnVmZmVyJylcbiAgY29weVByb3BzKGJ1ZmZlciwgZXhwb3J0cylcbiAgZXhwb3J0cy5CdWZmZXIgPSBTYWZlQnVmZmVyXG59XG5cbmZ1bmN0aW9uIFNhZmVCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCdWZmZXIucHJvdG90eXBlKVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogb2ZmICovXG4vKiBlc2xpbnQga2V5LXNwYWNpbmc6IG9mZiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMubmFtZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgJ2lkZW50aXR5JzogICAweDAsXG4gICdzaGExJzogICAgICAgMHgxMSxcbiAgJ3NoYTItMjU2JzogICAweDEyLFxuICAnc2hhMi01MTInOiAgIDB4MTMsXG4gICdkYmwtc2hhMi0yNTYnOiAweDU2LFxuICAnc2hhMy0yMjQnOiAgIDB4MTcsXG4gICdzaGEzLTI1Nic6ICAgMHgxNixcbiAgJ3NoYTMtMzg0JzogICAweDE1LFxuICAnc2hhMy01MTInOiAgIDB4MTQsXG4gICdzaGFrZS0xMjgnOiAgMHgxOCxcbiAgJ3NoYWtlLTI1Nic6ICAweDE5LFxuICAna2VjY2FrLTIyNCc6IDB4MUEsXG4gICdrZWNjYWstMjU2JzogMHgxQixcbiAgJ2tlY2Nhay0zODQnOiAweDFDLFxuICAna2VjY2FrLTUxMic6IDB4MUQsXG4gICdtdXJtdXIzLTEyOCc6IDB4MjIsXG4gICdtdXJtdXIzLTMyJzogIDB4MjMsXG4gICdibGFrZTJiLTgnOiAgIDB4YjIwMSxcbiAgJ2JsYWtlMmItMTYnOiAgMHhiMjAyLFxuICAnYmxha2UyYi0yNCc6ICAweGIyMDMsXG4gICdibGFrZTJiLTMyJzogIDB4YjIwNCxcbiAgJ2JsYWtlMmItNDAnOiAgMHhiMjA1LFxuICAnYmxha2UyYi00OCc6ICAweGIyMDYsXG4gICdibGFrZTJiLTU2JzogIDB4YjIwNyxcbiAgJ2JsYWtlMmItNjQnOiAgMHhiMjA4LFxuICAnYmxha2UyYi03Mic6ICAweGIyMDksXG4gICdibGFrZTJiLTgwJzogIDB4YjIwYSxcbiAgJ2JsYWtlMmItODgnOiAgMHhiMjBiLFxuICAnYmxha2UyYi05Nic6ICAweGIyMGMsXG4gICdibGFrZTJiLTEwNCc6IDB4YjIwZCxcbiAgJ2JsYWtlMmItMTEyJzogMHhiMjBlLFxuICAnYmxha2UyYi0xMjAnOiAweGIyMGYsXG4gICdibGFrZTJiLTEyOCc6IDB4YjIxMCxcbiAgJ2JsYWtlMmItMTM2JzogMHhiMjExLFxuICAnYmxha2UyYi0xNDQnOiAweGIyMTIsXG4gICdibGFrZTJiLTE1Mic6IDB4YjIxMyxcbiAgJ2JsYWtlMmItMTYwJzogMHhiMjE0LFxuICAnYmxha2UyYi0xNjgnOiAweGIyMTUsXG4gICdibGFrZTJiLTE3Nic6IDB4YjIxNixcbiAgJ2JsYWtlMmItMTg0JzogMHhiMjE3LFxuICAnYmxha2UyYi0xOTInOiAweGIyMTgsXG4gICdibGFrZTJiLTIwMCc6IDB4YjIxOSxcbiAgJ2JsYWtlMmItMjA4JzogMHhiMjFhLFxuICAnYmxha2UyYi0yMTYnOiAweGIyMWIsXG4gICdibGFrZTJiLTIyNCc6IDB4YjIxYyxcbiAgJ2JsYWtlMmItMjMyJzogMHhiMjFkLFxuICAnYmxha2UyYi0yNDAnOiAweGIyMWUsXG4gICdibGFrZTJiLTI0OCc6IDB4YjIxZixcbiAgJ2JsYWtlMmItMjU2JzogMHhiMjIwLFxuICAnYmxha2UyYi0yNjQnOiAweGIyMjEsXG4gICdibGFrZTJiLTI3Mic6IDB4YjIyMixcbiAgJ2JsYWtlMmItMjgwJzogMHhiMjIzLFxuICAnYmxha2UyYi0yODgnOiAweGIyMjQsXG4gICdibGFrZTJiLTI5Nic6IDB4YjIyNSxcbiAgJ2JsYWtlMmItMzA0JzogMHhiMjI2LFxuICAnYmxha2UyYi0zMTInOiAweGIyMjcsXG4gICdibGFrZTJiLTMyMCc6IDB4YjIyOCxcbiAgJ2JsYWtlMmItMzI4JzogMHhiMjI5LFxuICAnYmxha2UyYi0zMzYnOiAweGIyMmEsXG4gICdibGFrZTJiLTM0NCc6IDB4YjIyYixcbiAgJ2JsYWtlMmItMzUyJzogMHhiMjJjLFxuICAnYmxha2UyYi0zNjAnOiAweGIyMmQsXG4gICdibGFrZTJiLTM2OCc6IDB4YjIyZSxcbiAgJ2JsYWtlMmItMzc2JzogMHhiMjJmLFxuICAnYmxha2UyYi0zODQnOiAweGIyMzAsXG4gICdibGFrZTJiLTM5Mic6IDB4YjIzMSxcbiAgJ2JsYWtlMmItNDAwJzogMHhiMjMyLFxuICAnYmxha2UyYi00MDgnOiAweGIyMzMsXG4gICdibGFrZTJiLTQxNic6IDB4YjIzNCxcbiAgJ2JsYWtlMmItNDI0JzogMHhiMjM1LFxuICAnYmxha2UyYi00MzInOiAweGIyMzYsXG4gICdibGFrZTJiLTQ0MCc6IDB4YjIzNyxcbiAgJ2JsYWtlMmItNDQ4JzogMHhiMjM4LFxuICAnYmxha2UyYi00NTYnOiAweGIyMzksXG4gICdibGFrZTJiLTQ2NCc6IDB4YjIzYSxcbiAgJ2JsYWtlMmItNDcyJzogMHhiMjNiLFxuICAnYmxha2UyYi00ODAnOiAweGIyM2MsXG4gICdibGFrZTJiLTQ4OCc6IDB4YjIzZCxcbiAgJ2JsYWtlMmItNDk2JzogMHhiMjNlLFxuICAnYmxha2UyYi01MDQnOiAweGIyM2YsXG4gICdibGFrZTJiLTUxMic6IDB4YjI0MCxcbiAgJ2JsYWtlMnMtOCc6ICAgMHhiMjQxLFxuICAnYmxha2Uycy0xNic6ICAweGIyNDIsXG4gICdibGFrZTJzLTI0JzogIDB4YjI0MyxcbiAgJ2JsYWtlMnMtMzInOiAgMHhiMjQ0LFxuICAnYmxha2Uycy00MCc6ICAweGIyNDUsXG4gICdibGFrZTJzLTQ4JzogIDB4YjI0NixcbiAgJ2JsYWtlMnMtNTYnOiAgMHhiMjQ3LFxuICAnYmxha2Uycy02NCc6ICAweGIyNDgsXG4gICdibGFrZTJzLTcyJzogIDB4YjI0OSxcbiAgJ2JsYWtlMnMtODAnOiAgMHhiMjRhLFxuICAnYmxha2Uycy04OCc6ICAweGIyNGIsXG4gICdibGFrZTJzLTk2JzogIDB4YjI0YyxcbiAgJ2JsYWtlMnMtMTA0JzogMHhiMjRkLFxuICAnYmxha2Uycy0xMTInOiAweGIyNGUsXG4gICdibGFrZTJzLTEyMCc6IDB4YjI0ZixcbiAgJ2JsYWtlMnMtMTI4JzogMHhiMjUwLFxuICAnYmxha2Uycy0xMzYnOiAweGIyNTEsXG4gICdibGFrZTJzLTE0NCc6IDB4YjI1MixcbiAgJ2JsYWtlMnMtMTUyJzogMHhiMjUzLFxuICAnYmxha2Uycy0xNjAnOiAweGIyNTQsXG4gICdibGFrZTJzLTE2OCc6IDB4YjI1NSxcbiAgJ2JsYWtlMnMtMTc2JzogMHhiMjU2LFxuICAnYmxha2Uycy0xODQnOiAweGIyNTcsXG4gICdibGFrZTJzLTE5Mic6IDB4YjI1OCxcbiAgJ2JsYWtlMnMtMjAwJzogMHhiMjU5LFxuICAnYmxha2Uycy0yMDgnOiAweGIyNWEsXG4gICdibGFrZTJzLTIxNic6IDB4YjI1YixcbiAgJ2JsYWtlMnMtMjI0JzogMHhiMjVjLFxuICAnYmxha2Uycy0yMzInOiAweGIyNWQsXG4gICdibGFrZTJzLTI0MCc6IDB4YjI1ZSxcbiAgJ2JsYWtlMnMtMjQ4JzogMHhiMjVmLFxuICAnYmxha2Uycy0yNTYnOiAweGIyNjAsXG4gICdTa2VpbjI1Ni04JzogMHhiMzAxLFxuICAnU2tlaW4yNTYtMTYnOiAweGIzMDIsXG4gICdTa2VpbjI1Ni0yNCc6IDB4YjMwMyxcbiAgJ1NrZWluMjU2LTMyJzogMHhiMzA0LFxuICAnU2tlaW4yNTYtNDAnOiAweGIzMDUsXG4gICdTa2VpbjI1Ni00OCc6IDB4YjMwNixcbiAgJ1NrZWluMjU2LTU2JzogMHhiMzA3LFxuICAnU2tlaW4yNTYtNjQnOiAweGIzMDgsXG4gICdTa2VpbjI1Ni03Mic6IDB4YjMwOSxcbiAgJ1NrZWluMjU2LTgwJzogMHhiMzBhLFxuICAnU2tlaW4yNTYtODgnOiAweGIzMGIsXG4gICdTa2VpbjI1Ni05Nic6IDB4YjMwYyxcbiAgJ1NrZWluMjU2LTEwNCc6IDB4YjMwZCxcbiAgJ1NrZWluMjU2LTExMic6IDB4YjMwZSxcbiAgJ1NrZWluMjU2LTEyMCc6IDB4YjMwZixcbiAgJ1NrZWluMjU2LTEyOCc6IDB4YjMxMCxcbiAgJ1NrZWluMjU2LTEzNic6IDB4YjMxMSxcbiAgJ1NrZWluMjU2LTE0NCc6IDB4YjMxMixcbiAgJ1NrZWluMjU2LTE1Mic6IDB4YjMxMyxcbiAgJ1NrZWluMjU2LTE2MCc6IDB4YjMxNCxcbiAgJ1NrZWluMjU2LTE2OCc6IDB4YjMxNSxcbiAgJ1NrZWluMjU2LTE3Nic6IDB4YjMxNixcbiAgJ1NrZWluMjU2LTE4NCc6IDB4YjMxNyxcbiAgJ1NrZWluMjU2LTE5Mic6IDB4YjMxOCxcbiAgJ1NrZWluMjU2LTIwMCc6IDB4YjMxOSxcbiAgJ1NrZWluMjU2LTIwOCc6IDB4YjMxYSxcbiAgJ1NrZWluMjU2LTIxNic6IDB4YjMxYixcbiAgJ1NrZWluMjU2LTIyNCc6IDB4YjMxYyxcbiAgJ1NrZWluMjU2LTIzMic6IDB4YjMxZCxcbiAgJ1NrZWluMjU2LTI0MCc6IDB4YjMxZSxcbiAgJ1NrZWluMjU2LTI0OCc6IDB4YjMxZixcbiAgJ1NrZWluMjU2LTI1Nic6IDB4YjMyMCxcbiAgJ1NrZWluNTEyLTgnOiAweGIzMjEsXG4gICdTa2VpbjUxMi0xNic6IDB4YjMyMixcbiAgJ1NrZWluNTEyLTI0JzogMHhiMzIzLFxuICAnU2tlaW41MTItMzInOiAweGIzMjQsXG4gICdTa2VpbjUxMi00MCc6IDB4YjMyNSxcbiAgJ1NrZWluNTEyLTQ4JzogMHhiMzI2LFxuICAnU2tlaW41MTItNTYnOiAweGIzMjcsXG4gICdTa2VpbjUxMi02NCc6IDB4YjMyOCxcbiAgJ1NrZWluNTEyLTcyJzogMHhiMzI5LFxuICAnU2tlaW41MTItODAnOiAweGIzMmEsXG4gICdTa2VpbjUxMi04OCc6IDB4YjMyYixcbiAgJ1NrZWluNTEyLTk2JzogMHhiMzJjLFxuICAnU2tlaW41MTItMTA0JzogMHhiMzJkLFxuICAnU2tlaW41MTItMTEyJzogMHhiMzJlLFxuICAnU2tlaW41MTItMTIwJzogMHhiMzJmLFxuICAnU2tlaW41MTItMTI4JzogMHhiMzMwLFxuICAnU2tlaW41MTItMTM2JzogMHhiMzMxLFxuICAnU2tlaW41MTItMTQ0JzogMHhiMzMyLFxuICAnU2tlaW41MTItMTUyJzogMHhiMzMzLFxuICAnU2tlaW41MTItMTYwJzogMHhiMzM0LFxuICAnU2tlaW41MTItMTY4JzogMHhiMzM1LFxuICAnU2tlaW41MTItMTc2JzogMHhiMzM2LFxuICAnU2tlaW41MTItMTg0JzogMHhiMzM3LFxuICAnU2tlaW41MTItMTkyJzogMHhiMzM4LFxuICAnU2tlaW41MTItMjAwJzogMHhiMzM5LFxuICAnU2tlaW41MTItMjA4JzogMHhiMzNhLFxuICAnU2tlaW41MTItMjE2JzogMHhiMzNiLFxuICAnU2tlaW41MTItMjI0JzogMHhiMzNjLFxuICAnU2tlaW41MTItMjMyJzogMHhiMzNkLFxuICAnU2tlaW41MTItMjQwJzogMHhiMzNlLFxuICAnU2tlaW41MTItMjQ4JzogMHhiMzNmLFxuICAnU2tlaW41MTItMjU2JzogMHhiMzQwLFxuICAnU2tlaW41MTItMjY0JzogMHhiMzQxLFxuICAnU2tlaW41MTItMjcyJzogMHhiMzQyLFxuICAnU2tlaW41MTItMjgwJzogMHhiMzQzLFxuICAnU2tlaW41MTItMjg4JzogMHhiMzQ0LFxuICAnU2tlaW41MTItMjk2JzogMHhiMzQ1LFxuICAnU2tlaW41MTItMzA0JzogMHhiMzQ2LFxuICAnU2tlaW41MTItMzEyJzogMHhiMzQ3LFxuICAnU2tlaW41MTItMzIwJzogMHhiMzQ4LFxuICAnU2tlaW41MTItMzI4JzogMHhiMzQ5LFxuICAnU2tlaW41MTItMzM2JzogMHhiMzRhLFxuICAnU2tlaW41MTItMzQ0JzogMHhiMzRiLFxuICAnU2tlaW41MTItMzUyJzogMHhiMzRjLFxuICAnU2tlaW41MTItMzYwJzogMHhiMzRkLFxuICAnU2tlaW41MTItMzY4JzogMHhiMzRlLFxuICAnU2tlaW41MTItMzc2JzogMHhiMzRmLFxuICAnU2tlaW41MTItMzg0JzogMHhiMzUwLFxuICAnU2tlaW41MTItMzkyJzogMHhiMzUxLFxuICAnU2tlaW41MTItNDAwJzogMHhiMzUyLFxuICAnU2tlaW41MTItNDA4JzogMHhiMzUzLFxuICAnU2tlaW41MTItNDE2JzogMHhiMzU0LFxuICAnU2tlaW41MTItNDI0JzogMHhiMzU1LFxuICAnU2tlaW41MTItNDMyJzogMHhiMzU2LFxuICAnU2tlaW41MTItNDQwJzogMHhiMzU3LFxuICAnU2tlaW41MTItNDQ4JzogMHhiMzU4LFxuICAnU2tlaW41MTItNDU2JzogMHhiMzU5LFxuICAnU2tlaW41MTItNDY0JzogMHhiMzVhLFxuICAnU2tlaW41MTItNDcyJzogMHhiMzViLFxuICAnU2tlaW41MTItNDgwJzogMHhiMzVjLFxuICAnU2tlaW41MTItNDg4JzogMHhiMzVkLFxuICAnU2tlaW41MTItNDk2JzogMHhiMzVlLFxuICAnU2tlaW41MTItNTA0JzogMHhiMzVmLFxuICAnU2tlaW41MTItNTEyJzogMHhiMzYwLFxuICAnU2tlaW4xMDI0LTgnOiAweGIzNjEsXG4gICdTa2VpbjEwMjQtMTYnOiAweGIzNjIsXG4gICdTa2VpbjEwMjQtMjQnOiAweGIzNjMsXG4gICdTa2VpbjEwMjQtMzInOiAweGIzNjQsXG4gICdTa2VpbjEwMjQtNDAnOiAweGIzNjUsXG4gICdTa2VpbjEwMjQtNDgnOiAweGIzNjYsXG4gICdTa2VpbjEwMjQtNTYnOiAweGIzNjcsXG4gICdTa2VpbjEwMjQtNjQnOiAweGIzNjgsXG4gICdTa2VpbjEwMjQtNzInOiAweGIzNjksXG4gICdTa2VpbjEwMjQtODAnOiAweGIzNmEsXG4gICdTa2VpbjEwMjQtODgnOiAweGIzNmIsXG4gICdTa2VpbjEwMjQtOTYnOiAweGIzNmMsXG4gICdTa2VpbjEwMjQtMTA0JzogMHhiMzZkLFxuICAnU2tlaW4xMDI0LTExMic6IDB4YjM2ZSxcbiAgJ1NrZWluMTAyNC0xMjAnOiAweGIzNmYsXG4gICdTa2VpbjEwMjQtMTI4JzogMHhiMzcwLFxuICAnU2tlaW4xMDI0LTEzNic6IDB4YjM3MSxcbiAgJ1NrZWluMTAyNC0xNDQnOiAweGIzNzIsXG4gICdTa2VpbjEwMjQtMTUyJzogMHhiMzczLFxuICAnU2tlaW4xMDI0LTE2MCc6IDB4YjM3NCxcbiAgJ1NrZWluMTAyNC0xNjgnOiAweGIzNzUsXG4gICdTa2VpbjEwMjQtMTc2JzogMHhiMzc2LFxuICAnU2tlaW4xMDI0LTE4NCc6IDB4YjM3NyxcbiAgJ1NrZWluMTAyNC0xOTInOiAweGIzNzgsXG4gICdTa2VpbjEwMjQtMjAwJzogMHhiMzc5LFxuICAnU2tlaW4xMDI0LTIwOCc6IDB4YjM3YSxcbiAgJ1NrZWluMTAyNC0yMTYnOiAweGIzN2IsXG4gICdTa2VpbjEwMjQtMjI0JzogMHhiMzdjLFxuICAnU2tlaW4xMDI0LTIzMic6IDB4YjM3ZCxcbiAgJ1NrZWluMTAyNC0yNDAnOiAweGIzN2UsXG4gICdTa2VpbjEwMjQtMjQ4JzogMHhiMzdmLFxuICAnU2tlaW4xMDI0LTI1Nic6IDB4YjM4MCxcbiAgJ1NrZWluMTAyNC0yNjQnOiAweGIzODEsXG4gICdTa2VpbjEwMjQtMjcyJzogMHhiMzgyLFxuICAnU2tlaW4xMDI0LTI4MCc6IDB4YjM4MyxcbiAgJ1NrZWluMTAyNC0yODgnOiAweGIzODQsXG4gICdTa2VpbjEwMjQtMjk2JzogMHhiMzg1LFxuICAnU2tlaW4xMDI0LTMwNCc6IDB4YjM4NixcbiAgJ1NrZWluMTAyNC0zMTInOiAweGIzODcsXG4gICdTa2VpbjEwMjQtMzIwJzogMHhiMzg4LFxuICAnU2tlaW4xMDI0LTMyOCc6IDB4YjM4OSxcbiAgJ1NrZWluMTAyNC0zMzYnOiAweGIzOGEsXG4gICdTa2VpbjEwMjQtMzQ0JzogMHhiMzhiLFxuICAnU2tlaW4xMDI0LTM1Mic6IDB4YjM4YyxcbiAgJ1NrZWluMTAyNC0zNjAnOiAweGIzOGQsXG4gICdTa2VpbjEwMjQtMzY4JzogMHhiMzhlLFxuICAnU2tlaW4xMDI0LTM3Nic6IDB4YjM4ZixcbiAgJ1NrZWluMTAyNC0zODQnOiAweGIzOTAsXG4gICdTa2VpbjEwMjQtMzkyJzogMHhiMzkxLFxuICAnU2tlaW4xMDI0LTQwMCc6IDB4YjM5MixcbiAgJ1NrZWluMTAyNC00MDgnOiAweGIzOTMsXG4gICdTa2VpbjEwMjQtNDE2JzogMHhiMzk0LFxuICAnU2tlaW4xMDI0LTQyNCc6IDB4YjM5NSxcbiAgJ1NrZWluMTAyNC00MzInOiAweGIzOTYsXG4gICdTa2VpbjEwMjQtNDQwJzogMHhiMzk3LFxuICAnU2tlaW4xMDI0LTQ0OCc6IDB4YjM5OCxcbiAgJ1NrZWluMTAyNC00NTYnOiAweGIzOTksXG4gICdTa2VpbjEwMjQtNDY0JzogMHhiMzlhLFxuICAnU2tlaW4xMDI0LTQ3Mic6IDB4YjM5YixcbiAgJ1NrZWluMTAyNC00ODAnOiAweGIzOWMsXG4gICdTa2VpbjEwMjQtNDg4JzogMHhiMzlkLFxuICAnU2tlaW4xMDI0LTQ5Nic6IDB4YjM5ZSxcbiAgJ1NrZWluMTAyNC01MDQnOiAweGIzOWYsXG4gICdTa2VpbjEwMjQtNTEyJzogMHhiM2EwLFxuICAnU2tlaW4xMDI0LTUyMCc6IDB4YjNhMSxcbiAgJ1NrZWluMTAyNC01MjgnOiAweGIzYTIsXG4gICdTa2VpbjEwMjQtNTM2JzogMHhiM2EzLFxuICAnU2tlaW4xMDI0LTU0NCc6IDB4YjNhNCxcbiAgJ1NrZWluMTAyNC01NTInOiAweGIzYTUsXG4gICdTa2VpbjEwMjQtNTYwJzogMHhiM2E2LFxuICAnU2tlaW4xMDI0LTU2OCc6IDB4YjNhNyxcbiAgJ1NrZWluMTAyNC01NzYnOiAweGIzYTgsXG4gICdTa2VpbjEwMjQtNTg0JzogMHhiM2E5LFxuICAnU2tlaW4xMDI0LTU5Mic6IDB4YjNhYSxcbiAgJ1NrZWluMTAyNC02MDAnOiAweGIzYWIsXG4gICdTa2VpbjEwMjQtNjA4JzogMHhiM2FjLFxuICAnU2tlaW4xMDI0LTYxNic6IDB4YjNhZCxcbiAgJ1NrZWluMTAyNC02MjQnOiAweGIzYWUsXG4gICdTa2VpbjEwMjQtNjMyJzogMHhiM2FmLFxuICAnU2tlaW4xMDI0LTY0MCc6IDB4YjNiMCxcbiAgJ1NrZWluMTAyNC02NDgnOiAweGIzYjEsXG4gICdTa2VpbjEwMjQtNjU2JzogMHhiM2IyLFxuICAnU2tlaW4xMDI0LTY2NCc6IDB4YjNiMyxcbiAgJ1NrZWluMTAyNC02NzInOiAweGIzYjQsXG4gICdTa2VpbjEwMjQtNjgwJzogMHhiM2I1LFxuICAnU2tlaW4xMDI0LTY4OCc6IDB4YjNiNixcbiAgJ1NrZWluMTAyNC02OTYnOiAweGIzYjcsXG4gICdTa2VpbjEwMjQtNzA0JzogMHhiM2I4LFxuICAnU2tlaW4xMDI0LTcxMic6IDB4YjNiOSxcbiAgJ1NrZWluMTAyNC03MjAnOiAweGIzYmEsXG4gICdTa2VpbjEwMjQtNzI4JzogMHhiM2JiLFxuICAnU2tlaW4xMDI0LTczNic6IDB4YjNiYyxcbiAgJ1NrZWluMTAyNC03NDQnOiAweGIzYmQsXG4gICdTa2VpbjEwMjQtNzUyJzogMHhiM2JlLFxuICAnU2tlaW4xMDI0LTc2MCc6IDB4YjNiZixcbiAgJ1NrZWluMTAyNC03NjgnOiAweGIzYzAsXG4gICdTa2VpbjEwMjQtNzc2JzogMHhiM2MxLFxuICAnU2tlaW4xMDI0LTc4NCc6IDB4YjNjMixcbiAgJ1NrZWluMTAyNC03OTInOiAweGIzYzMsXG4gICdTa2VpbjEwMjQtODAwJzogMHhiM2M0LFxuICAnU2tlaW4xMDI0LTgwOCc6IDB4YjNjNSxcbiAgJ1NrZWluMTAyNC04MTYnOiAweGIzYzYsXG4gICdTa2VpbjEwMjQtODI0JzogMHhiM2M3LFxuICAnU2tlaW4xMDI0LTgzMic6IDB4YjNjOCxcbiAgJ1NrZWluMTAyNC04NDAnOiAweGIzYzksXG4gICdTa2VpbjEwMjQtODQ4JzogMHhiM2NhLFxuICAnU2tlaW4xMDI0LTg1Nic6IDB4YjNjYixcbiAgJ1NrZWluMTAyNC04NjQnOiAweGIzY2MsXG4gICdTa2VpbjEwMjQtODcyJzogMHhiM2NkLFxuICAnU2tlaW4xMDI0LTg4MCc6IDB4YjNjZSxcbiAgJ1NrZWluMTAyNC04ODgnOiAweGIzY2YsXG4gICdTa2VpbjEwMjQtODk2JzogMHhiM2QwLFxuICAnU2tlaW4xMDI0LTkwNCc6IDB4YjNkMSxcbiAgJ1NrZWluMTAyNC05MTInOiAweGIzZDIsXG4gICdTa2VpbjEwMjQtOTIwJzogMHhiM2QzLFxuICAnU2tlaW4xMDI0LTkyOCc6IDB4YjNkNCxcbiAgJ1NrZWluMTAyNC05MzYnOiAweGIzZDUsXG4gICdTa2VpbjEwMjQtOTQ0JzogMHhiM2Q2LFxuICAnU2tlaW4xMDI0LTk1Mic6IDB4YjNkNyxcbiAgJ1NrZWluMTAyNC05NjAnOiAweGIzZDgsXG4gICdTa2VpbjEwMjQtOTY4JzogMHhiM2Q5LFxuICAnU2tlaW4xMDI0LTk3Nic6IDB4YjNkYSxcbiAgJ1NrZWluMTAyNC05ODQnOiAweGIzZGIsXG4gICdTa2VpbjEwMjQtOTkyJzogMHhiM2RjLFxuICAnU2tlaW4xMDI0LTEwMDAnOiAweGIzZGQsXG4gICdTa2VpbjEwMjQtMTAwOCc6IDB4YjNkZSxcbiAgJ1NrZWluMTAyNC0xMDE2JzogMHhiM2RmLFxuICAnU2tlaW4xMDI0LTEwMjQnOiAweGIzZTBcbn0pXG5cbmV4cG9ydHMuY29kZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgMHgwOiAnaWRlbnRpdHknLFxuXG4gIC8vIHNoYSBmYW1pbHlcbiAgMHgxMTogJ3NoYTEnLFxuICAweDEyOiAnc2hhMi0yNTYnLFxuICAweDEzOiAnc2hhMi01MTInLFxuICAweDU2OiAnZGJsLXNoYTItMjU2JyxcbiAgMHgxNzogJ3NoYTMtMjI0JyxcbiAgMHgxNjogJ3NoYTMtMjU2JyxcbiAgMHgxNTogJ3NoYTMtMzg0JyxcbiAgMHgxNDogJ3NoYTMtNTEyJyxcbiAgMHgxODogJ3NoYWtlLTEyOCcsXG4gIDB4MTk6ICdzaGFrZS0yNTYnLFxuICAweDFBOiAna2VjY2FrLTIyNCcsXG4gIDB4MUI6ICdrZWNjYWstMjU2JyxcbiAgMHgxQzogJ2tlY2Nhay0zODQnLFxuICAweDFEOiAna2VjY2FrLTUxMicsXG5cbiAgMHgyMjogJ211cm11cjMtMTI4JyxcbiAgMHgyMzogJ211cm11cjMtMzInLFxuXG4gIC8vIGJsYWtlMlxuICAweGIyMDE6ICdibGFrZTJiLTgnLFxuICAweGIyMDI6ICdibGFrZTJiLTE2JyxcbiAgMHhiMjAzOiAnYmxha2UyYi0yNCcsXG4gIDB4YjIwNDogJ2JsYWtlMmItMzInLFxuICAweGIyMDU6ICdibGFrZTJiLTQwJyxcbiAgMHhiMjA2OiAnYmxha2UyYi00OCcsXG4gIDB4YjIwNzogJ2JsYWtlMmItNTYnLFxuICAweGIyMDg6ICdibGFrZTJiLTY0JyxcbiAgMHhiMjA5OiAnYmxha2UyYi03MicsXG4gIDB4YjIwYTogJ2JsYWtlMmItODAnLFxuICAweGIyMGI6ICdibGFrZTJiLTg4JyxcbiAgMHhiMjBjOiAnYmxha2UyYi05NicsXG4gIDB4YjIwZDogJ2JsYWtlMmItMTA0JyxcbiAgMHhiMjBlOiAnYmxha2UyYi0xMTInLFxuICAweGIyMGY6ICdibGFrZTJiLTEyMCcsXG4gIDB4YjIxMDogJ2JsYWtlMmItMTI4JyxcbiAgMHhiMjExOiAnYmxha2UyYi0xMzYnLFxuICAweGIyMTI6ICdibGFrZTJiLTE0NCcsXG4gIDB4YjIxMzogJ2JsYWtlMmItMTUyJyxcbiAgMHhiMjE0OiAnYmxha2UyYi0xNjAnLFxuICAweGIyMTU6ICdibGFrZTJiLTE2OCcsXG4gIDB4YjIxNjogJ2JsYWtlMmItMTc2JyxcbiAgMHhiMjE3OiAnYmxha2UyYi0xODQnLFxuICAweGIyMTg6ICdibGFrZTJiLTE5MicsXG4gIDB4YjIxOTogJ2JsYWtlMmItMjAwJyxcbiAgMHhiMjFhOiAnYmxha2UyYi0yMDgnLFxuICAweGIyMWI6ICdibGFrZTJiLTIxNicsXG4gIDB4YjIxYzogJ2JsYWtlMmItMjI0JyxcbiAgMHhiMjFkOiAnYmxha2UyYi0yMzInLFxuICAweGIyMWU6ICdibGFrZTJiLTI0MCcsXG4gIDB4YjIxZjogJ2JsYWtlMmItMjQ4JyxcbiAgMHhiMjIwOiAnYmxha2UyYi0yNTYnLFxuICAweGIyMjE6ICdibGFrZTJiLTI2NCcsXG4gIDB4YjIyMjogJ2JsYWtlMmItMjcyJyxcbiAgMHhiMjIzOiAnYmxha2UyYi0yODAnLFxuICAweGIyMjQ6ICdibGFrZTJiLTI4OCcsXG4gIDB4YjIyNTogJ2JsYWtlMmItMjk2JyxcbiAgMHhiMjI2OiAnYmxha2UyYi0zMDQnLFxuICAweGIyMjc6ICdibGFrZTJiLTMxMicsXG4gIDB4YjIyODogJ2JsYWtlMmItMzIwJyxcbiAgMHhiMjI5OiAnYmxha2UyYi0zMjgnLFxuICAweGIyMmE6ICdibGFrZTJiLTMzNicsXG4gIDB4YjIyYjogJ2JsYWtlMmItMzQ0JyxcbiAgMHhiMjJjOiAnYmxha2UyYi0zNTInLFxuICAweGIyMmQ6ICdibGFrZTJiLTM2MCcsXG4gIDB4YjIyZTogJ2JsYWtlMmItMzY4JyxcbiAgMHhiMjJmOiAnYmxha2UyYi0zNzYnLFxuICAweGIyMzA6ICdibGFrZTJiLTM4NCcsXG4gIDB4YjIzMTogJ2JsYWtlMmItMzkyJyxcbiAgMHhiMjMyOiAnYmxha2UyYi00MDAnLFxuICAweGIyMzM6ICdibGFrZTJiLTQwOCcsXG4gIDB4YjIzNDogJ2JsYWtlMmItNDE2JyxcbiAgMHhiMjM1OiAnYmxha2UyYi00MjQnLFxuICAweGIyMzY6ICdibGFrZTJiLTQzMicsXG4gIDB4YjIzNzogJ2JsYWtlMmItNDQwJyxcbiAgMHhiMjM4OiAnYmxha2UyYi00NDgnLFxuICAweGIyMzk6ICdibGFrZTJiLTQ1NicsXG4gIDB4YjIzYTogJ2JsYWtlMmItNDY0JyxcbiAgMHhiMjNiOiAnYmxha2UyYi00NzInLFxuICAweGIyM2M6ICdibGFrZTJiLTQ4MCcsXG4gIDB4YjIzZDogJ2JsYWtlMmItNDg4JyxcbiAgMHhiMjNlOiAnYmxha2UyYi00OTYnLFxuICAweGIyM2Y6ICdibGFrZTJiLTUwNCcsXG4gIDB4YjI0MDogJ2JsYWtlMmItNTEyJyxcbiAgMHhiMjQxOiAnYmxha2Uycy04JyxcbiAgMHhiMjQyOiAnYmxha2Uycy0xNicsXG4gIDB4YjI0MzogJ2JsYWtlMnMtMjQnLFxuICAweGIyNDQ6ICdibGFrZTJzLTMyJyxcbiAgMHhiMjQ1OiAnYmxha2Uycy00MCcsXG4gIDB4YjI0NjogJ2JsYWtlMnMtNDgnLFxuICAweGIyNDc6ICdibGFrZTJzLTU2JyxcbiAgMHhiMjQ4OiAnYmxha2Uycy02NCcsXG4gIDB4YjI0OTogJ2JsYWtlMnMtNzInLFxuICAweGIyNGE6ICdibGFrZTJzLTgwJyxcbiAgMHhiMjRiOiAnYmxha2Uycy04OCcsXG4gIDB4YjI0YzogJ2JsYWtlMnMtOTYnLFxuICAweGIyNGQ6ICdibGFrZTJzLTEwNCcsXG4gIDB4YjI0ZTogJ2JsYWtlMnMtMTEyJyxcbiAgMHhiMjRmOiAnYmxha2Uycy0xMjAnLFxuICAweGIyNTA6ICdibGFrZTJzLTEyOCcsXG4gIDB4YjI1MTogJ2JsYWtlMnMtMTM2JyxcbiAgMHhiMjUyOiAnYmxha2Uycy0xNDQnLFxuICAweGIyNTM6ICdibGFrZTJzLTE1MicsXG4gIDB4YjI1NDogJ2JsYWtlMnMtMTYwJyxcbiAgMHhiMjU1OiAnYmxha2Uycy0xNjgnLFxuICAweGIyNTY6ICdibGFrZTJzLTE3NicsXG4gIDB4YjI1NzogJ2JsYWtlMnMtMTg0JyxcbiAgMHhiMjU4OiAnYmxha2Uycy0xOTInLFxuICAweGIyNTk6ICdibGFrZTJzLTIwMCcsXG4gIDB4YjI1YTogJ2JsYWtlMnMtMjA4JyxcbiAgMHhiMjViOiAnYmxha2Uycy0yMTYnLFxuICAweGIyNWM6ICdibGFrZTJzLTIyNCcsXG4gIDB4YjI1ZDogJ2JsYWtlMnMtMjMyJyxcbiAgMHhiMjVlOiAnYmxha2Uycy0yNDAnLFxuICAweGIyNWY6ICdibGFrZTJzLTI0OCcsXG4gIDB4YjI2MDogJ2JsYWtlMnMtMjU2JyxcblxuICAvLyBza2VpblxuICAweGIzMDE6ICdTa2VpbjI1Ni04JyxcbiAgMHhiMzAyOiAnU2tlaW4yNTYtMTYnLFxuICAweGIzMDM6ICdTa2VpbjI1Ni0yNCcsXG4gIDB4YjMwNDogJ1NrZWluMjU2LTMyJyxcbiAgMHhiMzA1OiAnU2tlaW4yNTYtNDAnLFxuICAweGIzMDY6ICdTa2VpbjI1Ni00OCcsXG4gIDB4YjMwNzogJ1NrZWluMjU2LTU2JyxcbiAgMHhiMzA4OiAnU2tlaW4yNTYtNjQnLFxuICAweGIzMDk6ICdTa2VpbjI1Ni03MicsXG4gIDB4YjMwYTogJ1NrZWluMjU2LTgwJyxcbiAgMHhiMzBiOiAnU2tlaW4yNTYtODgnLFxuICAweGIzMGM6ICdTa2VpbjI1Ni05NicsXG4gIDB4YjMwZDogJ1NrZWluMjU2LTEwNCcsXG4gIDB4YjMwZTogJ1NrZWluMjU2LTExMicsXG4gIDB4YjMwZjogJ1NrZWluMjU2LTEyMCcsXG4gIDB4YjMxMDogJ1NrZWluMjU2LTEyOCcsXG4gIDB4YjMxMTogJ1NrZWluMjU2LTEzNicsXG4gIDB4YjMxMjogJ1NrZWluMjU2LTE0NCcsXG4gIDB4YjMxMzogJ1NrZWluMjU2LTE1MicsXG4gIDB4YjMxNDogJ1NrZWluMjU2LTE2MCcsXG4gIDB4YjMxNTogJ1NrZWluMjU2LTE2OCcsXG4gIDB4YjMxNjogJ1NrZWluMjU2LTE3NicsXG4gIDB4YjMxNzogJ1NrZWluMjU2LTE4NCcsXG4gIDB4YjMxODogJ1NrZWluMjU2LTE5MicsXG4gIDB4YjMxOTogJ1NrZWluMjU2LTIwMCcsXG4gIDB4YjMxYTogJ1NrZWluMjU2LTIwOCcsXG4gIDB4YjMxYjogJ1NrZWluMjU2LTIxNicsXG4gIDB4YjMxYzogJ1NrZWluMjU2LTIyNCcsXG4gIDB4YjMxZDogJ1NrZWluMjU2LTIzMicsXG4gIDB4YjMxZTogJ1NrZWluMjU2LTI0MCcsXG4gIDB4YjMxZjogJ1NrZWluMjU2LTI0OCcsXG4gIDB4YjMyMDogJ1NrZWluMjU2LTI1NicsXG4gIDB4YjMyMTogJ1NrZWluNTEyLTgnLFxuICAweGIzMjI6ICdTa2VpbjUxMi0xNicsXG4gIDB4YjMyMzogJ1NrZWluNTEyLTI0JyxcbiAgMHhiMzI0OiAnU2tlaW41MTItMzInLFxuICAweGIzMjU6ICdTa2VpbjUxMi00MCcsXG4gIDB4YjMyNjogJ1NrZWluNTEyLTQ4JyxcbiAgMHhiMzI3OiAnU2tlaW41MTItNTYnLFxuICAweGIzMjg6ICdTa2VpbjUxMi02NCcsXG4gIDB4YjMyOTogJ1NrZWluNTEyLTcyJyxcbiAgMHhiMzJhOiAnU2tlaW41MTItODAnLFxuICAweGIzMmI6ICdTa2VpbjUxMi04OCcsXG4gIDB4YjMyYzogJ1NrZWluNTEyLTk2JyxcbiAgMHhiMzJkOiAnU2tlaW41MTItMTA0JyxcbiAgMHhiMzJlOiAnU2tlaW41MTItMTEyJyxcbiAgMHhiMzJmOiAnU2tlaW41MTItMTIwJyxcbiAgMHhiMzMwOiAnU2tlaW41MTItMTI4JyxcbiAgMHhiMzMxOiAnU2tlaW41MTItMTM2JyxcbiAgMHhiMzMyOiAnU2tlaW41MTItMTQ0JyxcbiAgMHhiMzMzOiAnU2tlaW41MTItMTUyJyxcbiAgMHhiMzM0OiAnU2tlaW41MTItMTYwJyxcbiAgMHhiMzM1OiAnU2tlaW41MTItMTY4JyxcbiAgMHhiMzM2OiAnU2tlaW41MTItMTc2JyxcbiAgMHhiMzM3OiAnU2tlaW41MTItMTg0JyxcbiAgMHhiMzM4OiAnU2tlaW41MTItMTkyJyxcbiAgMHhiMzM5OiAnU2tlaW41MTItMjAwJyxcbiAgMHhiMzNhOiAnU2tlaW41MTItMjA4JyxcbiAgMHhiMzNiOiAnU2tlaW41MTItMjE2JyxcbiAgMHhiMzNjOiAnU2tlaW41MTItMjI0JyxcbiAgMHhiMzNkOiAnU2tlaW41MTItMjMyJyxcbiAgMHhiMzNlOiAnU2tlaW41MTItMjQwJyxcbiAgMHhiMzNmOiAnU2tlaW41MTItMjQ4JyxcbiAgMHhiMzQwOiAnU2tlaW41MTItMjU2JyxcbiAgMHhiMzQxOiAnU2tlaW41MTItMjY0JyxcbiAgMHhiMzQyOiAnU2tlaW41MTItMjcyJyxcbiAgMHhiMzQzOiAnU2tlaW41MTItMjgwJyxcbiAgMHhiMzQ0OiAnU2tlaW41MTItMjg4JyxcbiAgMHhiMzQ1OiAnU2tlaW41MTItMjk2JyxcbiAgMHhiMzQ2OiAnU2tlaW41MTItMzA0JyxcbiAgMHhiMzQ3OiAnU2tlaW41MTItMzEyJyxcbiAgMHhiMzQ4OiAnU2tlaW41MTItMzIwJyxcbiAgMHhiMzQ5OiAnU2tlaW41MTItMzI4JyxcbiAgMHhiMzRhOiAnU2tlaW41MTItMzM2JyxcbiAgMHhiMzRiOiAnU2tlaW41MTItMzQ0JyxcbiAgMHhiMzRjOiAnU2tlaW41MTItMzUyJyxcbiAgMHhiMzRkOiAnU2tlaW41MTItMzYwJyxcbiAgMHhiMzRlOiAnU2tlaW41MTItMzY4JyxcbiAgMHhiMzRmOiAnU2tlaW41MTItMzc2JyxcbiAgMHhiMzUwOiAnU2tlaW41MTItMzg0JyxcbiAgMHhiMzUxOiAnU2tlaW41MTItMzkyJyxcbiAgMHhiMzUyOiAnU2tlaW41MTItNDAwJyxcbiAgMHhiMzUzOiAnU2tlaW41MTItNDA4JyxcbiAgMHhiMzU0OiAnU2tlaW41MTItNDE2JyxcbiAgMHhiMzU1OiAnU2tlaW41MTItNDI0JyxcbiAgMHhiMzU2OiAnU2tlaW41MTItNDMyJyxcbiAgMHhiMzU3OiAnU2tlaW41MTItNDQwJyxcbiAgMHhiMzU4OiAnU2tlaW41MTItNDQ4JyxcbiAgMHhiMzU5OiAnU2tlaW41MTItNDU2JyxcbiAgMHhiMzVhOiAnU2tlaW41MTItNDY0JyxcbiAgMHhiMzViOiAnU2tlaW41MTItNDcyJyxcbiAgMHhiMzVjOiAnU2tlaW41MTItNDgwJyxcbiAgMHhiMzVkOiAnU2tlaW41MTItNDg4JyxcbiAgMHhiMzVlOiAnU2tlaW41MTItNDk2JyxcbiAgMHhiMzVmOiAnU2tlaW41MTItNTA0JyxcbiAgMHhiMzYwOiAnU2tlaW41MTItNTEyJyxcbiAgMHhiMzYxOiAnU2tlaW4xMDI0LTgnLFxuICAweGIzNjI6ICdTa2VpbjEwMjQtMTYnLFxuICAweGIzNjM6ICdTa2VpbjEwMjQtMjQnLFxuICAweGIzNjQ6ICdTa2VpbjEwMjQtMzInLFxuICAweGIzNjU6ICdTa2VpbjEwMjQtNDAnLFxuICAweGIzNjY6ICdTa2VpbjEwMjQtNDgnLFxuICAweGIzNjc6ICdTa2VpbjEwMjQtNTYnLFxuICAweGIzNjg6ICdTa2VpbjEwMjQtNjQnLFxuICAweGIzNjk6ICdTa2VpbjEwMjQtNzInLFxuICAweGIzNmE6ICdTa2VpbjEwMjQtODAnLFxuICAweGIzNmI6ICdTa2VpbjEwMjQtODgnLFxuICAweGIzNmM6ICdTa2VpbjEwMjQtOTYnLFxuICAweGIzNmQ6ICdTa2VpbjEwMjQtMTA0JyxcbiAgMHhiMzZlOiAnU2tlaW4xMDI0LTExMicsXG4gIDB4YjM2ZjogJ1NrZWluMTAyNC0xMjAnLFxuICAweGIzNzA6ICdTa2VpbjEwMjQtMTI4JyxcbiAgMHhiMzcxOiAnU2tlaW4xMDI0LTEzNicsXG4gIDB4YjM3MjogJ1NrZWluMTAyNC0xNDQnLFxuICAweGIzNzM6ICdTa2VpbjEwMjQtMTUyJyxcbiAgMHhiMzc0OiAnU2tlaW4xMDI0LTE2MCcsXG4gIDB4YjM3NTogJ1NrZWluMTAyNC0xNjgnLFxuICAweGIzNzY6ICdTa2VpbjEwMjQtMTc2JyxcbiAgMHhiMzc3OiAnU2tlaW4xMDI0LTE4NCcsXG4gIDB4YjM3ODogJ1NrZWluMTAyNC0xOTInLFxuICAweGIzNzk6ICdTa2VpbjEwMjQtMjAwJyxcbiAgMHhiMzdhOiAnU2tlaW4xMDI0LTIwOCcsXG4gIDB4YjM3YjogJ1NrZWluMTAyNC0yMTYnLFxuICAweGIzN2M6ICdTa2VpbjEwMjQtMjI0JyxcbiAgMHhiMzdkOiAnU2tlaW4xMDI0LTIzMicsXG4gIDB4YjM3ZTogJ1NrZWluMTAyNC0yNDAnLFxuICAweGIzN2Y6ICdTa2VpbjEwMjQtMjQ4JyxcbiAgMHhiMzgwOiAnU2tlaW4xMDI0LTI1NicsXG4gIDB4YjM4MTogJ1NrZWluMTAyNC0yNjQnLFxuICAweGIzODI6ICdTa2VpbjEwMjQtMjcyJyxcbiAgMHhiMzgzOiAnU2tlaW4xMDI0LTI4MCcsXG4gIDB4YjM4NDogJ1NrZWluMTAyNC0yODgnLFxuICAweGIzODU6ICdTa2VpbjEwMjQtMjk2JyxcbiAgMHhiMzg2OiAnU2tlaW4xMDI0LTMwNCcsXG4gIDB4YjM4NzogJ1NrZWluMTAyNC0zMTInLFxuICAweGIzODg6ICdTa2VpbjEwMjQtMzIwJyxcbiAgMHhiMzg5OiAnU2tlaW4xMDI0LTMyOCcsXG4gIDB4YjM4YTogJ1NrZWluMTAyNC0zMzYnLFxuICAweGIzOGI6ICdTa2VpbjEwMjQtMzQ0JyxcbiAgMHhiMzhjOiAnU2tlaW4xMDI0LTM1MicsXG4gIDB4YjM4ZDogJ1NrZWluMTAyNC0zNjAnLFxuICAweGIzOGU6ICdTa2VpbjEwMjQtMzY4JyxcbiAgMHhiMzhmOiAnU2tlaW4xMDI0LTM3NicsXG4gIDB4YjM5MDogJ1NrZWluMTAyNC0zODQnLFxuICAweGIzOTE6ICdTa2VpbjEwMjQtMzkyJyxcbiAgMHhiMzkyOiAnU2tlaW4xMDI0LTQwMCcsXG4gIDB4YjM5MzogJ1NrZWluMTAyNC00MDgnLFxuICAweGIzOTQ6ICdTa2VpbjEwMjQtNDE2JyxcbiAgMHhiMzk1OiAnU2tlaW4xMDI0LTQyNCcsXG4gIDB4YjM5NjogJ1NrZWluMTAyNC00MzInLFxuICAweGIzOTc6ICdTa2VpbjEwMjQtNDQwJyxcbiAgMHhiMzk4OiAnU2tlaW4xMDI0LTQ0OCcsXG4gIDB4YjM5OTogJ1NrZWluMTAyNC00NTYnLFxuICAweGIzOWE6ICdTa2VpbjEwMjQtNDY0JyxcbiAgMHhiMzliOiAnU2tlaW4xMDI0LTQ3MicsXG4gIDB4YjM5YzogJ1NrZWluMTAyNC00ODAnLFxuICAweGIzOWQ6ICdTa2VpbjEwMjQtNDg4JyxcbiAgMHhiMzllOiAnU2tlaW4xMDI0LTQ5NicsXG4gIDB4YjM5ZjogJ1NrZWluMTAyNC01MDQnLFxuICAweGIzYTA6ICdTa2VpbjEwMjQtNTEyJyxcbiAgMHhiM2ExOiAnU2tlaW4xMDI0LTUyMCcsXG4gIDB4YjNhMjogJ1NrZWluMTAyNC01MjgnLFxuICAweGIzYTM6ICdTa2VpbjEwMjQtNTM2JyxcbiAgMHhiM2E0OiAnU2tlaW4xMDI0LTU0NCcsXG4gIDB4YjNhNTogJ1NrZWluMTAyNC01NTInLFxuICAweGIzYTY6ICdTa2VpbjEwMjQtNTYwJyxcbiAgMHhiM2E3OiAnU2tlaW4xMDI0LTU2OCcsXG4gIDB4YjNhODogJ1NrZWluMTAyNC01NzYnLFxuICAweGIzYTk6ICdTa2VpbjEwMjQtNTg0JyxcbiAgMHhiM2FhOiAnU2tlaW4xMDI0LTU5MicsXG4gIDB4YjNhYjogJ1NrZWluMTAyNC02MDAnLFxuICAweGIzYWM6ICdTa2VpbjEwMjQtNjA4JyxcbiAgMHhiM2FkOiAnU2tlaW4xMDI0LTYxNicsXG4gIDB4YjNhZTogJ1NrZWluMTAyNC02MjQnLFxuICAweGIzYWY6ICdTa2VpbjEwMjQtNjMyJyxcbiAgMHhiM2IwOiAnU2tlaW4xMDI0LTY0MCcsXG4gIDB4YjNiMTogJ1NrZWluMTAyNC02NDgnLFxuICAweGIzYjI6ICdTa2VpbjEwMjQtNjU2JyxcbiAgMHhiM2IzOiAnU2tlaW4xMDI0LTY2NCcsXG4gIDB4YjNiNDogJ1NrZWluMTAyNC02NzInLFxuICAweGIzYjU6ICdTa2VpbjEwMjQtNjgwJyxcbiAgMHhiM2I2OiAnU2tlaW4xMDI0LTY4OCcsXG4gIDB4YjNiNzogJ1NrZWluMTAyNC02OTYnLFxuICAweGIzYjg6ICdTa2VpbjEwMjQtNzA0JyxcbiAgMHhiM2I5OiAnU2tlaW4xMDI0LTcxMicsXG4gIDB4YjNiYTogJ1NrZWluMTAyNC03MjAnLFxuICAweGIzYmI6ICdTa2VpbjEwMjQtNzI4JyxcbiAgMHhiM2JjOiAnU2tlaW4xMDI0LTczNicsXG4gIDB4YjNiZDogJ1NrZWluMTAyNC03NDQnLFxuICAweGIzYmU6ICdTa2VpbjEwMjQtNzUyJyxcbiAgMHhiM2JmOiAnU2tlaW4xMDI0LTc2MCcsXG4gIDB4YjNjMDogJ1NrZWluMTAyNC03NjgnLFxuICAweGIzYzE6ICdTa2VpbjEwMjQtNzc2JyxcbiAgMHhiM2MyOiAnU2tlaW4xMDI0LTc4NCcsXG4gIDB4YjNjMzogJ1NrZWluMTAyNC03OTInLFxuICAweGIzYzQ6ICdTa2VpbjEwMjQtODAwJyxcbiAgMHhiM2M1OiAnU2tlaW4xMDI0LTgwOCcsXG4gIDB4YjNjNjogJ1NrZWluMTAyNC04MTYnLFxuICAweGIzYzc6ICdTa2VpbjEwMjQtODI0JyxcbiAgMHhiM2M4OiAnU2tlaW4xMDI0LTgzMicsXG4gIDB4YjNjOTogJ1NrZWluMTAyNC04NDAnLFxuICAweGIzY2E6ICdTa2VpbjEwMjQtODQ4JyxcbiAgMHhiM2NiOiAnU2tlaW4xMDI0LTg1NicsXG4gIDB4YjNjYzogJ1NrZWluMTAyNC04NjQnLFxuICAweGIzY2Q6ICdTa2VpbjEwMjQtODcyJyxcbiAgMHhiM2NlOiAnU2tlaW4xMDI0LTg4MCcsXG4gIDB4YjNjZjogJ1NrZWluMTAyNC04ODgnLFxuICAweGIzZDA6ICdTa2VpbjEwMjQtODk2JyxcbiAgMHhiM2QxOiAnU2tlaW4xMDI0LTkwNCcsXG4gIDB4YjNkMjogJ1NrZWluMTAyNC05MTInLFxuICAweGIzZDM6ICdTa2VpbjEwMjQtOTIwJyxcbiAgMHhiM2Q0OiAnU2tlaW4xMDI0LTkyOCcsXG4gIDB4YjNkNTogJ1NrZWluMTAyNC05MzYnLFxuICAweGIzZDY6ICdTa2VpbjEwMjQtOTQ0JyxcbiAgMHhiM2Q3OiAnU2tlaW4xMDI0LTk1MicsXG4gIDB4YjNkODogJ1NrZWluMTAyNC05NjAnLFxuICAweGIzZDk6ICdTa2VpbjEwMjQtOTY4JyxcbiAgMHhiM2RhOiAnU2tlaW4xMDI0LTk3NicsXG4gIDB4YjNkYjogJ1NrZWluMTAyNC05ODQnLFxuICAweGIzZGM6ICdTa2VpbjEwMjQtOTkyJyxcbiAgMHhiM2RkOiAnU2tlaW4xMDI0LTEwMDAnLFxuICAweGIzZGU6ICdTa2VpbjEwMjQtMTAwOCcsXG4gIDB4YjNkZjogJ1NrZWluMTAyNC0xMDE2JyxcbiAgMHhiM2UwOiAnU2tlaW4xMDI0LTEwMjQnXG59KVxuXG5leHBvcnRzLmRlZmF1bHRMZW5ndGhzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIDB4MTE6IDIwLFxuICAweDEyOiAzMixcbiAgMHgxMzogNjQsXG4gIDB4NTY6IDMyLFxuICAweDE3OiAyOCxcbiAgMHgxNjogMzIsXG4gIDB4MTU6IDQ4LFxuICAweDE0OiA2NCxcbiAgMHgxODogMzIsXG4gIDB4MTk6IDY0LFxuICAweDFBOiAyOCxcbiAgMHgxQjogMzIsXG4gIDB4MUM6IDQ4LFxuICAweDFEOiA2NCxcbiAgMHgyMjogMzIsXG5cbiAgMHhiMjAxOiAweDAxLFxuICAweGIyMDI6IDB4MDIsXG4gIDB4YjIwMzogMHgwMyxcbiAgMHhiMjA0OiAweDA0LFxuICAweGIyMDU6IDB4MDUsXG4gIDB4YjIwNjogMHgwNixcbiAgMHhiMjA3OiAweDA3LFxuICAweGIyMDg6IDB4MDgsXG4gIDB4YjIwOTogMHgwOSxcbiAgMHhiMjBhOiAweDBhLFxuICAweGIyMGI6IDB4MGIsXG4gIDB4YjIwYzogMHgwYyxcbiAgMHhiMjBkOiAweDBkLFxuICAweGIyMGU6IDB4MGUsXG4gIDB4YjIwZjogMHgwZixcbiAgMHhiMjEwOiAweDEwLFxuICAweGIyMTE6IDB4MTEsXG4gIDB4YjIxMjogMHgxMixcbiAgMHhiMjEzOiAweDEzLFxuICAweGIyMTQ6IDB4MTQsXG4gIDB4YjIxNTogMHgxNSxcbiAgMHhiMjE2OiAweDE2LFxuICAweGIyMTc6IDB4MTcsXG4gIDB4YjIxODogMHgxOCxcbiAgMHhiMjE5OiAweDE5LFxuICAweGIyMWE6IDB4MWEsXG4gIDB4YjIxYjogMHgxYixcbiAgMHhiMjFjOiAweDFjLFxuICAweGIyMWQ6IDB4MWQsXG4gIDB4YjIxZTogMHgxZSxcbiAgMHhiMjFmOiAweDFmLFxuICAweGIyMjA6IDB4MjAsXG4gIDB4YjIyMTogMHgyMSxcbiAgMHhiMjIyOiAweDIyLFxuICAweGIyMjM6IDB4MjMsXG4gIDB4YjIyNDogMHgyNCxcbiAgMHhiMjI1OiAweDI1LFxuICAweGIyMjY6IDB4MjYsXG4gIDB4YjIyNzogMHgyNyxcbiAgMHhiMjI4OiAweDI4LFxuICAweGIyMjk6IDB4MjksXG4gIDB4YjIyYTogMHgyYSxcbiAgMHhiMjJiOiAweDJiLFxuICAweGIyMmM6IDB4MmMsXG4gIDB4YjIyZDogMHgyZCxcbiAgMHhiMjJlOiAweDJlLFxuICAweGIyMmY6IDB4MmYsXG4gIDB4YjIzMDogMHgzMCxcbiAgMHhiMjMxOiAweDMxLFxuICAweGIyMzI6IDB4MzIsXG4gIDB4YjIzMzogMHgzMyxcbiAgMHhiMjM0OiAweDM0LFxuICAweGIyMzU6IDB4MzUsXG4gIDB4YjIzNjogMHgzNixcbiAgMHhiMjM3OiAweDM3LFxuICAweGIyMzg6IDB4MzgsXG4gIDB4YjIzOTogMHgzOSxcbiAgMHhiMjNhOiAweDNhLFxuICAweGIyM2I6IDB4M2IsXG4gIDB4YjIzYzogMHgzYyxcbiAgMHhiMjNkOiAweDNkLFxuICAweGIyM2U6IDB4M2UsXG4gIDB4YjIzZjogMHgzZixcbiAgMHhiMjQwOiAweDQwLFxuICAweGIyNDE6IDB4MDEsXG4gIDB4YjI0MjogMHgwMixcbiAgMHhiMjQzOiAweDAzLFxuICAweGIyNDQ6IDB4MDQsXG4gIDB4YjI0NTogMHgwNSxcbiAgMHhiMjQ2OiAweDA2LFxuICAweGIyNDc6IDB4MDcsXG4gIDB4YjI0ODogMHgwOCxcbiAgMHhiMjQ5OiAweDA5LFxuICAweGIyNGE6IDB4MGEsXG4gIDB4YjI0YjogMHgwYixcbiAgMHhiMjRjOiAweDBjLFxuICAweGIyNGQ6IDB4MGQsXG4gIDB4YjI0ZTogMHgwZSxcbiAgMHhiMjRmOiAweDBmLFxuICAweGIyNTA6IDB4MTAsXG4gIDB4YjI1MTogMHgxMSxcbiAgMHhiMjUyOiAweDEyLFxuICAweGIyNTM6IDB4MTMsXG4gIDB4YjI1NDogMHgxNCxcbiAgMHhiMjU1OiAweDE1LFxuICAweGIyNTY6IDB4MTYsXG4gIDB4YjI1NzogMHgxNyxcbiAgMHhiMjU4OiAweDE4LFxuICAweGIyNTk6IDB4MTksXG4gIDB4YjI1YTogMHgxYSxcbiAgMHhiMjViOiAweDFiLFxuICAweGIyNWM6IDB4MWMsXG4gIDB4YjI1ZDogMHgxZCxcbiAgMHhiMjVlOiAweDFlLFxuICAweGIyNWY6IDB4MWYsXG4gIDB4YjI2MDogMHgyMCxcbiAgMHhiMzAxOiAweDAxLFxuICAweGIzMDI6IDB4MDIsXG4gIDB4YjMwMzogMHgwMyxcbiAgMHhiMzA0OiAweDA0LFxuICAweGIzMDU6IDB4MDUsXG4gIDB4YjMwNjogMHgwNixcbiAgMHhiMzA3OiAweDA3LFxuICAweGIzMDg6IDB4MDgsXG4gIDB4YjMwOTogMHgwOSxcbiAgMHhiMzBhOiAweDBhLFxuICAweGIzMGI6IDB4MGIsXG4gIDB4YjMwYzogMHgwYyxcbiAgMHhiMzBkOiAweDBkLFxuICAweGIzMGU6IDB4MGUsXG4gIDB4YjMwZjogMHgwZixcbiAgMHhiMzEwOiAweDEwLFxuICAweGIzMTE6IDB4MTEsXG4gIDB4YjMxMjogMHgxMixcbiAgMHhiMzEzOiAweDEzLFxuICAweGIzMTQ6IDB4MTQsXG4gIDB4YjMxNTogMHgxNSxcbiAgMHhiMzE2OiAweDE2LFxuICAweGIzMTc6IDB4MTcsXG4gIDB4YjMxODogMHgxOCxcbiAgMHhiMzE5OiAweDE5LFxuICAweGIzMWE6IDB4MWEsXG4gIDB4YjMxYjogMHgxYixcbiAgMHhiMzFjOiAweDFjLFxuICAweGIzMWQ6IDB4MWQsXG4gIDB4YjMxZTogMHgxZSxcbiAgMHhiMzFmOiAweDFmLFxuICAweGIzMjA6IDB4MjAsXG4gIDB4YjMyMTogMHgwMSxcbiAgMHhiMzIyOiAweDAyLFxuICAweGIzMjM6IDB4MDMsXG4gIDB4YjMyNDogMHgwNCxcbiAgMHhiMzI1OiAweDA1LFxuICAweGIzMjY6IDB4MDYsXG4gIDB4YjMyNzogMHgwNyxcbiAgMHhiMzI4OiAweDA4LFxuICAweGIzMjk6IDB4MDksXG4gIDB4YjMyYTogMHgwYSxcbiAgMHhiMzJiOiAweDBiLFxuICAweGIzMmM6IDB4MGMsXG4gIDB4YjMyZDogMHgwZCxcbiAgMHhiMzJlOiAweDBlLFxuICAweGIzMmY6IDB4MGYsXG4gIDB4YjMzMDogMHgxMCxcbiAgMHhiMzMxOiAweDExLFxuICAweGIzMzI6IDB4MTIsXG4gIDB4YjMzMzogMHgxMyxcbiAgMHhiMzM0OiAweDE0LFxuICAweGIzMzU6IDB4MTUsXG4gIDB4YjMzNjogMHgxNixcbiAgMHhiMzM3OiAweDE3LFxuICAweGIzMzg6IDB4MTgsXG4gIDB4YjMzOTogMHgxOSxcbiAgMHhiMzNhOiAweDFhLFxuICAweGIzM2I6IDB4MWIsXG4gIDB4YjMzYzogMHgxYyxcbiAgMHhiMzNkOiAweDFkLFxuICAweGIzM2U6IDB4MWUsXG4gIDB4YjMzZjogMHgxZixcbiAgMHhiMzQwOiAweDIwLFxuICAweGIzNDE6IDB4MjEsXG4gIDB4YjM0MjogMHgyMixcbiAgMHhiMzQzOiAweDIzLFxuICAweGIzNDQ6IDB4MjQsXG4gIDB4YjM0NTogMHgyNSxcbiAgMHhiMzQ2OiAweDI2LFxuICAweGIzNDc6IDB4MjcsXG4gIDB4YjM0ODogMHgyOCxcbiAgMHhiMzQ5OiAweDI5LFxuICAweGIzNGE6IDB4MmEsXG4gIDB4YjM0YjogMHgyYixcbiAgMHhiMzRjOiAweDJjLFxuICAweGIzNGQ6IDB4MmQsXG4gIDB4YjM0ZTogMHgyZSxcbiAgMHhiMzRmOiAweDJmLFxuICAweGIzNTA6IDB4MzAsXG4gIDB4YjM1MTogMHgzMSxcbiAgMHhiMzUyOiAweDMyLFxuICAweGIzNTM6IDB4MzMsXG4gIDB4YjM1NDogMHgzNCxcbiAgMHhiMzU1OiAweDM1LFxuICAweGIzNTY6IDB4MzYsXG4gIDB4YjM1NzogMHgzNyxcbiAgMHhiMzU4OiAweDM4LFxuICAweGIzNTk6IDB4MzksXG4gIDB4YjM1YTogMHgzYSxcbiAgMHhiMzViOiAweDNiLFxuICAweGIzNWM6IDB4M2MsXG4gIDB4YjM1ZDogMHgzZCxcbiAgMHhiMzVlOiAweDNlLFxuICAweGIzNWY6IDB4M2YsXG4gIDB4YjM2MDogMHg0MCxcbiAgMHhiMzYxOiAweDAxLFxuICAweGIzNjI6IDB4MDIsXG4gIDB4YjM2MzogMHgwMyxcbiAgMHhiMzY0OiAweDA0LFxuICAweGIzNjU6IDB4MDUsXG4gIDB4YjM2NjogMHgwNixcbiAgMHhiMzY3OiAweDA3LFxuICAweGIzNjg6IDB4MDgsXG4gIDB4YjM2OTogMHgwOSxcbiAgMHhiMzZhOiAweDBhLFxuICAweGIzNmI6IDB4MGIsXG4gIDB4YjM2YzogMHgwYyxcbiAgMHhiMzZkOiAweDBkLFxuICAweGIzNmU6IDB4MGUsXG4gIDB4YjM2ZjogMHgwZixcbiAgMHhiMzcwOiAweDEwLFxuICAweGIzNzE6IDB4MTEsXG4gIDB4YjM3MjogMHgxMixcbiAgMHhiMzczOiAweDEzLFxuICAweGIzNzQ6IDB4MTQsXG4gIDB4YjM3NTogMHgxNSxcbiAgMHhiMzc2OiAweDE2LFxuICAweGIzNzc6IDB4MTcsXG4gIDB4YjM3ODogMHgxOCxcbiAgMHhiMzc5OiAweDE5LFxuICAweGIzN2E6IDB4MWEsXG4gIDB4YjM3YjogMHgxYixcbiAgMHhiMzdjOiAweDFjLFxuICAweGIzN2Q6IDB4MWQsXG4gIDB4YjM3ZTogMHgxZSxcbiAgMHhiMzdmOiAweDFmLFxuICAweGIzODA6IDB4MjAsXG4gIDB4YjM4MTogMHgyMSxcbiAgMHhiMzgyOiAweDIyLFxuICAweGIzODM6IDB4MjMsXG4gIDB4YjM4NDogMHgyNCxcbiAgMHhiMzg1OiAweDI1LFxuICAweGIzODY6IDB4MjYsXG4gIDB4YjM4NzogMHgyNyxcbiAgMHhiMzg4OiAweDI4LFxuICAweGIzODk6IDB4MjksXG4gIDB4YjM4YTogMHgyYSxcbiAgMHhiMzhiOiAweDJiLFxuICAweGIzOGM6IDB4MmMsXG4gIDB4YjM4ZDogMHgyZCxcbiAgMHhiMzhlOiAweDJlLFxuICAweGIzOGY6IDB4MmYsXG4gIDB4YjM5MDogMHgzMCxcbiAgMHhiMzkxOiAweDMxLFxuICAweGIzOTI6IDB4MzIsXG4gIDB4YjM5MzogMHgzMyxcbiAgMHhiMzk0OiAweDM0LFxuICAweGIzOTU6IDB4MzUsXG4gIDB4YjM5NjogMHgzNixcbiAgMHhiMzk3OiAweDM3LFxuICAweGIzOTg6IDB4MzgsXG4gIDB4YjM5OTogMHgzOSxcbiAgMHhiMzlhOiAweDNhLFxuICAweGIzOWI6IDB4M2IsXG4gIDB4YjM5YzogMHgzYyxcbiAgMHhiMzlkOiAweDNkLFxuICAweGIzOWU6IDB4M2UsXG4gIDB4YjM5ZjogMHgzZixcbiAgMHhiM2EwOiAweDQwLFxuICAweGIzYTE6IDB4NDEsXG4gIDB4YjNhMjogMHg0MixcbiAgMHhiM2EzOiAweDQzLFxuICAweGIzYTQ6IDB4NDQsXG4gIDB4YjNhNTogMHg0NSxcbiAgMHhiM2E2OiAweDQ2LFxuICAweGIzYTc6IDB4NDcsXG4gIDB4YjNhODogMHg0OCxcbiAgMHhiM2E5OiAweDQ5LFxuICAweGIzYWE6IDB4NGEsXG4gIDB4YjNhYjogMHg0YixcbiAgMHhiM2FjOiAweDRjLFxuICAweGIzYWQ6IDB4NGQsXG4gIDB4YjNhZTogMHg0ZSxcbiAgMHhiM2FmOiAweDRmLFxuICAweGIzYjA6IDB4NTAsXG4gIDB4YjNiMTogMHg1MSxcbiAgMHhiM2IyOiAweDUyLFxuICAweGIzYjM6IDB4NTMsXG4gIDB4YjNiNDogMHg1NCxcbiAgMHhiM2I1OiAweDU1LFxuICAweGIzYjY6IDB4NTYsXG4gIDB4YjNiNzogMHg1NyxcbiAgMHhiM2I4OiAweDU4LFxuICAweGIzYjk6IDB4NTksXG4gIDB4YjNiYTogMHg1YSxcbiAgMHhiM2JiOiAweDViLFxuICAweGIzYmM6IDB4NWMsXG4gIDB4YjNiZDogMHg1ZCxcbiAgMHhiM2JlOiAweDVlLFxuICAweGIzYmY6IDB4NWYsXG4gIDB4YjNjMDogMHg2MCxcbiAgMHhiM2MxOiAweDYxLFxuICAweGIzYzI6IDB4NjIsXG4gIDB4YjNjMzogMHg2MyxcbiAgMHhiM2M0OiAweDY0LFxuICAweGIzYzU6IDB4NjUsXG4gIDB4YjNjNjogMHg2NixcbiAgMHhiM2M3OiAweDY3LFxuICAweGIzYzg6IDB4NjgsXG4gIDB4YjNjOTogMHg2OSxcbiAgMHhiM2NhOiAweDZhLFxuICAweGIzY2I6IDB4NmIsXG4gIDB4YjNjYzogMHg2YyxcbiAgMHhiM2NkOiAweDZkLFxuICAweGIzY2U6IDB4NmUsXG4gIDB4YjNjZjogMHg2ZixcbiAgMHhiM2QwOiAweDcwLFxuICAweGIzZDE6IDB4NzEsXG4gIDB4YjNkMjogMHg3MixcbiAgMHhiM2QzOiAweDczLFxuICAweGIzZDQ6IDB4NzQsXG4gIDB4YjNkNTogMHg3NSxcbiAgMHhiM2Q2OiAweDc2LFxuICAweGIzZDc6IDB4NzcsXG4gIDB4YjNkODogMHg3OCxcbiAgMHhiM2Q5OiAweDc5LFxuICAweGIzZGE6IDB4N2EsXG4gIDB4YjNkYjogMHg3YixcbiAgMHhiM2RjOiAweDdjLFxuICAweGIzZGQ6IDB4N2QsXG4gIDB4YjNkZTogMHg3ZSxcbiAgMHhiM2RmOiAweDdmLFxuICAweGIzZTA6IDB4ODBcbn0pXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGVuY29kZVxuXG52YXIgTVNCID0gMHg4MFxuICAsIFJFU1QgPSAweDdGXG4gICwgTVNCQUxMID0gflJFU1RcbiAgLCBJTlQgPSBNYXRoLnBvdygyLCAzMSlcblxuZnVuY3Rpb24gZW5jb2RlKG51bSwgb3V0LCBvZmZzZXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdXG4gIG9mZnNldCA9IG9mZnNldCB8fCAwXG4gIHZhciBvbGRPZmZzZXQgPSBvZmZzZXRcblxuICB3aGlsZShudW0gPj0gSU5UKSB7XG4gICAgb3V0W29mZnNldCsrXSA9IChudW0gJiAweEZGKSB8IE1TQlxuICAgIG51bSAvPSAxMjhcbiAgfVxuICB3aGlsZShudW0gJiBNU0JBTEwpIHtcbiAgICBvdXRbb2Zmc2V0KytdID0gKG51bSAmIDB4RkYpIHwgTVNCXG4gICAgbnVtID4+Pj0gN1xuICB9XG4gIG91dFtvZmZzZXRdID0gbnVtIHwgMFxuICBcbiAgZW5jb2RlLmJ5dGVzID0gb2Zmc2V0IC0gb2xkT2Zmc2V0ICsgMVxuICBcbiAgcmV0dXJuIG91dFxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZWFkXG5cbnZhciBNU0IgPSAweDgwXG4gICwgUkVTVCA9IDB4N0ZcblxuZnVuY3Rpb24gcmVhZChidWYsIG9mZnNldCkge1xuICB2YXIgcmVzICAgID0gMFxuICAgICwgb2Zmc2V0ID0gb2Zmc2V0IHx8IDBcbiAgICAsIHNoaWZ0ICA9IDBcbiAgICAsIGNvdW50ZXIgPSBvZmZzZXRcbiAgICAsIGJcbiAgICAsIGwgPSBidWYubGVuZ3RoXG5cbiAgZG8ge1xuICAgIGlmIChjb3VudGVyID49IGwpIHtcbiAgICAgIHJlYWQuYnl0ZXMgPSAwXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ291bGQgbm90IGRlY29kZSB2YXJpbnQnKVxuICAgIH1cbiAgICBiID0gYnVmW2NvdW50ZXIrK11cbiAgICByZXMgKz0gc2hpZnQgPCAyOFxuICAgICAgPyAoYiAmIFJFU1QpIDw8IHNoaWZ0XG4gICAgICA6IChiICYgUkVTVCkgKiBNYXRoLnBvdygyLCBzaGlmdClcbiAgICBzaGlmdCArPSA3XG4gIH0gd2hpbGUgKGIgPj0gTVNCKVxuXG4gIHJlYWQuYnl0ZXMgPSBjb3VudGVyIC0gb2Zmc2V0XG5cbiAgcmV0dXJuIHJlc1xufVxuIiwiXG52YXIgTjEgPSBNYXRoLnBvdygyLCAgNylcbnZhciBOMiA9IE1hdGgucG93KDIsIDE0KVxudmFyIE4zID0gTWF0aC5wb3coMiwgMjEpXG52YXIgTjQgPSBNYXRoLnBvdygyLCAyOClcbnZhciBONSA9IE1hdGgucG93KDIsIDM1KVxudmFyIE42ID0gTWF0aC5wb3coMiwgNDIpXG52YXIgTjcgPSBNYXRoLnBvdygyLCA0OSlcbnZhciBOOCA9IE1hdGgucG93KDIsIDU2KVxudmFyIE45ID0gTWF0aC5wb3coMiwgNjMpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPCBOMSA/IDFcbiAgOiB2YWx1ZSA8IE4yID8gMlxuICA6IHZhbHVlIDwgTjMgPyAzXG4gIDogdmFsdWUgPCBONCA/IDRcbiAgOiB2YWx1ZSA8IE41ID8gNVxuICA6IHZhbHVlIDwgTjYgPyA2XG4gIDogdmFsdWUgPCBONyA/IDdcbiAgOiB2YWx1ZSA8IE44ID8gOFxuICA6IHZhbHVlIDwgTjkgPyA5XG4gIDogICAgICAgICAgICAgIDEwXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBCYXNlID0gcmVxdWlyZSgnLi9iYXNlLmpzJylcbmNvbnN0IGJhc2VYID0gcmVxdWlyZSgnYmFzZS14JylcbmNvbnN0IGJhc2UxNiA9IHJlcXVpcmUoJy4vYmFzZTE2JylcbmNvbnN0IGJhc2UzMiA9IHJlcXVpcmUoJy4vYmFzZTMyJylcbmNvbnN0IGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0JylcblxuLy8gbmFtZSwgY29kZSwgaW1wbGVtZW50YXRpb24sIGFscGhhYmV0XG5jb25zdCBjb25zdGFudHMgPSBbXG4gIFsnYmFzZTEnLCAnMScsICcnLCAnMSddLFxuICBbJ2Jhc2UyJywgJzAnLCBiYXNlWCwgJzAxJ10sXG4gIFsnYmFzZTgnLCAnNycsIGJhc2VYLCAnMDEyMzQ1NjcnXSxcbiAgWydiYXNlMTAnLCAnOScsIGJhc2VYLCAnMDEyMzQ1Njc4OSddLFxuICBbJ2Jhc2UxNicsICdmJywgYmFzZTE2LCAnMDEyMzQ1Njc4OWFiY2RlZiddLFxuICBbJ2Jhc2UzMicsICdiJywgYmFzZTMyLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoyMzQ1NjcnXSxcbiAgWydiYXNlMzJwYWQnLCAnYycsIGJhc2UzMiwgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3PSddLFxuICBbJ2Jhc2UzMmhleCcsICd2JywgYmFzZTMyLCAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXYnXSxcbiAgWydiYXNlMzJoZXhwYWQnLCAndCcsIGJhc2UzMiwgJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2PSddLFxuICBbJ2Jhc2UzMnonLCAnaCcsIGJhc2UzMiwgJ3libmRyZmc4ZWprbWNwcXhvdDF1d2lzemEzNDVoNzY5J10sXG4gIFsnYmFzZTU4ZmxpY2tyJywgJ1onLCBiYXNlWCwgJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonXSxcbiAgWydiYXNlNThidGMnLCAneicsIGJhc2VYLCAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eiddLFxuICBbJ2Jhc2U2NCcsICdtJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyddLFxuICBbJ2Jhc2U2NHBhZCcsICdNJywgYmFzZTY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nXSxcbiAgWydiYXNlNjR1cmwnLCAndScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nXSxcbiAgWydiYXNlNjR1cmxwYWQnLCAnVScsIGJhc2U2NCwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV89J11cbl1cblxuY29uc3QgbmFtZXMgPSBjb25zdGFudHMucmVkdWNlKChwcmV2LCB0dXBwbGUpID0+IHtcbiAgcHJldlt0dXBwbGVbMF1dID0gbmV3IEJhc2UodHVwcGxlWzBdLCB0dXBwbGVbMV0sIHR1cHBsZVsyXSwgdHVwcGxlWzNdKVxuICByZXR1cm4gcHJldlxufSwge30pXG5cbmNvbnN0IGNvZGVzID0gY29uc3RhbnRzLnJlZHVjZSgocHJldiwgdHVwcGxlKSA9PiB7XG4gIHByZXZbdHVwcGxlWzFdXSA9IG5hbWVzW3R1cHBsZVswXV1cbiAgcmV0dXJuIHByZXZcbn0sIHt9KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmFtZXM6IG5hbWVzLFxuICBjb2RlczogY29kZXNcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBCYXNlIHtcbiAgY29uc3RydWN0b3IgKG5hbWUsIGNvZGUsIGltcGxlbWVudGF0aW9uLCBhbHBoYWJldCkge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmNvZGUgPSBjb2RlXG4gICAgdGhpcy5hbHBoYWJldCA9IGFscGhhYmV0XG4gICAgaWYgKGltcGxlbWVudGF0aW9uICYmIGFscGhhYmV0KSB7XG4gICAgICB0aGlzLmVuZ2luZSA9IGltcGxlbWVudGF0aW9uKGFscGhhYmV0KVxuICAgIH1cbiAgfVxuXG4gIGVuY29kZSAoc3RyaW5nT3JCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuZW5jb2RlKHN0cmluZ09yQnVmZmVyKVxuICB9XG5cbiAgZGVjb2RlIChzdHJpbmdPckJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5kZWNvZGUoc3RyaW5nT3JCdWZmZXIpXG4gIH1cblxuICBpc0ltcGxlbWVudGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VcbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2UxNiAoYWxwaGFiZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBlbmNvZGUgKGlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCdoZXgnKVxuICAgIH0sXG4gICAgZGVjb2RlIChpbnB1dCkge1xuICAgICAgZm9yIChsZXQgY2hhciBvZiBpbnB1dCkge1xuICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjaGFyKSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFzZTE2IGNoYXJhY3RlcicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2hleCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gZGVjb2RlIChpbnB1dCwgYWxwaGFiZXQpIHtcbiAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKG5ldyBSZWdFeHAoJz0nLCAnZycpLCAnJylcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aFxuXG4gIGxldCBiaXRzID0gMFxuICBsZXQgdmFsdWUgPSAwXG5cbiAgbGV0IGluZGV4ID0gMFxuICBsZXQgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbmd0aCAqIDUgLyA4KSB8IDApXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDUpIHwgYWxwaGFiZXQuaW5kZXhPZihpbnB1dFtpXSlcbiAgICBiaXRzICs9IDVcblxuICAgIGlmIChiaXRzID49IDgpIHtcbiAgICAgIG91dHB1dFtpbmRleCsrXSA9ICh2YWx1ZSA+Pj4gKGJpdHMgLSA4KSkgJiAyNTVcbiAgICAgIGJpdHMgLT0gOFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGVuY29kZSAoYnVmZmVyLCBhbHBoYWJldCkge1xuICBsZXQgbGVuZ3RoID0gYnVmZmVyLmJ5dGVMZW5ndGhcbiAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG4gIGxldCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID09PSBhbHBoYWJldC5sZW5ndGggLSAxXG5cbiAgaWYgKHBhZGRpbmcpIHtcbiAgICBhbHBoYWJldCA9IGFscGhhYmV0LnN1YnN0cmluZygwLCBhbHBoYWJldC5sZW5ndGggLSAyKVxuICB9XG5cbiAgbGV0IGJpdHMgPSAwXG4gIGxldCB2YWx1ZSA9IDBcbiAgbGV0IG91dHB1dCA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpIHwgdmlld1tpXVxuICAgIGJpdHMgKz0gOFxuXG4gICAgd2hpbGUgKGJpdHMgPj0gNSkge1xuICAgICAgb3V0cHV0ICs9IGFscGhhYmV0Wyh2YWx1ZSA+Pj4gKGJpdHMgLSA1KSkgJiAzMV1cbiAgICAgIGJpdHMgLT0gNVxuICAgIH1cbiAgfVxuXG4gIGlmIChiaXRzID4gMCkge1xuICAgIG91dHB1dCArPSBhbHBoYWJldFsodmFsdWUgPDwgKDUgLSBiaXRzKSkgJiAzMV1cbiAgfVxuXG4gIGlmIChwYWRkaW5nKSB7XG4gICAgd2hpbGUgKChvdXRwdXQubGVuZ3RoICUgOCkgIT09IDApIHtcbiAgICAgIG91dHB1dCArPSAnPSdcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZTMyIChhbHBoYWJldCkge1xuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQpLCBhbHBoYWJldClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVuY29kZShpbnB1dCwgYWxwaGFiZXQpXG4gICAgfSxcbiAgICBkZWNvZGUgKGlucHV0KSB7XG4gICAgICBmb3IgKGxldCBjaGFyIG9mIGlucHV0KSB7XG4gICAgICAgIGlmIChhbHBoYWJldC5pbmRleE9mKGNoYXIpIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYXNlMzIgY2hhcmFjdGVyJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVjb2RlKGlucHV0LCBhbHBoYWJldClcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2U2NCAoYWxwaGFiZXQpIHtcbiAgLy8gVGhlIGFscGhhYmV0IGlzIG9ubHkgdXNlZCB0byBrbm93OlxuICAvLyAgIDEuIElmIHBhZGRpbmcgaXMgZW5hYmxlZCAobXVzdCBjb250YWluICc9JylcbiAgLy8gICAyLiBJZiB0aGUgb3V0cHV0IG11c3QgYmUgdXJsLXNhZmUgKG11c3QgY29udGFpbiAnLScgYW5kICdfJylcbiAgLy8gICAzLiBJZiB0aGUgaW5wdXQgb2YgdGhlIG91dHB1dCBmdW5jdGlvbiBpcyB2YWxpZFxuICAvLyBUaGUgYWxwaGFiZXRzIGZyb20gUkZDIDQ2NDggYXJlIGFsd2F5cyB1c2VkLlxuICBjb25zdCBwYWRkaW5nID0gYWxwaGFiZXQuaW5kZXhPZignPScpID4gLTFcbiAgY29uc3QgdXJsID0gYWxwaGFiZXQuaW5kZXhPZignLScpID4gLTEgJiYgYWxwaGFiZXQuaW5kZXhPZignXycpID4gLTFcblxuICByZXR1cm4ge1xuICAgIGVuY29kZSAoaW5wdXQpIHtcbiAgICAgIGxldCBvdXRwdXQgPSAnJ1xuXG4gICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdXRwdXQgPSBCdWZmZXIuZnJvbShpbnB1dCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQgPSBpbnB1dC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkID0gb3V0cHV0LmluZGV4T2YoJz0nKVxuICAgICAgaWYgKHBhZCA+IDAgJiYgIXBhZGRpbmcpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnN1YnN0cmluZygwLCBwYWQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9LFxuICAgIGRlY29kZSAoaW5wdXQpIHtcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcbiAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoY2hhcikgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2U2NCBjaGFyYWN0ZXInKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuY29uc3QgY29udmVydCA9IHJlcXVpcmUoJy4vY29udmVydCcpXG5jb25zdCBwcm90b2NvbHMgPSByZXF1aXJlKCcuL3Byb3RvY29scy10YWJsZScpXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuXG4vLyBleHBvcnQgY29kZWNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHJpbmdUb1N0cmluZ1R1cGxlczogc3RyaW5nVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvU3RyaW5nOiBzdHJpbmdUdXBsZXNUb1N0cmluZyxcblxuICB0dXBsZXNUb1N0cmluZ1R1cGxlczogdHVwbGVzVG9TdHJpbmdUdXBsZXMsXG4gIHN0cmluZ1R1cGxlc1RvVHVwbGVzOiBzdHJpbmdUdXBsZXNUb1R1cGxlcyxcblxuICBidWZmZXJUb1R1cGxlczogYnVmZmVyVG9UdXBsZXMsXG4gIHR1cGxlc1RvQnVmZmVyOiB0dXBsZXNUb0J1ZmZlcixcblxuICBidWZmZXJUb1N0cmluZzogYnVmZmVyVG9TdHJpbmcsXG4gIHN0cmluZ1RvQnVmZmVyOiBzdHJpbmdUb0J1ZmZlcixcblxuICBmcm9tU3RyaW5nOiBmcm9tU3RyaW5nLFxuICBmcm9tQnVmZmVyOiBmcm9tQnVmZmVyLFxuICB2YWxpZGF0ZUJ1ZmZlcjogdmFsaWRhdGVCdWZmZXIsXG4gIGlzVmFsaWRCdWZmZXI6IGlzVmFsaWRCdWZmZXIsXG4gIGNsZWFuUGF0aDogY2xlYW5QYXRoLFxuXG4gIFBhcnNlRXJyb3I6IFBhcnNlRXJyb3IsXG4gIHByb3RvRnJvbVR1cGxlOiBwcm90b0Zyb21UdXBsZSxcblxuICBzaXplRm9yQWRkcjogc2l6ZUZvckFkZHJcbn1cblxuLy8gc3RyaW5nIC0+IFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdXG5mdW5jdGlvbiBzdHJpbmdUb1N0cmluZ1R1cGxlcyAoc3RyKSB7XG4gIGNvbnN0IHR1cGxlcyA9IFtdXG4gIGNvbnN0IHBhcnRzID0gc3RyLnNwbGl0KCcvJykuc2xpY2UoMSkgLy8gc2tpcCBmaXJzdCBlbXB0eSBlbGVtXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEgJiYgcGFydHNbMF0gPT09ICcnKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBmb3IgKGxldCBwID0gMDsgcCA8IHBhcnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW3BdXG4gICAgY29uc3QgcHJvdG8gPSBwcm90b2NvbHMocGFydClcblxuICAgIGlmIChwcm90by5zaXplID09PSAwKSB7XG4gICAgICB0dXBsZXMucHVzaChbcGFydF0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHArKyAvLyBhZHZhbmNlIGFkZHIgcGFydFxuICAgIGlmIChwID49IHBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgUGFyc2VFcnJvcignaW52YWxpZCBhZGRyZXNzOiAnICsgc3RyKVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3MgYSBwYXRoIHByb3RvLCB0YWtlIHRoZSByZXN0XG4gICAgaWYgKHByb3RvLnBhdGgpIHtcbiAgICAgIHR1cGxlcy5wdXNoKFtcbiAgICAgICAgcGFydCxcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIG5lZWQgdG8gY2hlY2sgZWFjaCBwYXRoIHBhcnQgdG8gc2VlIGlmIGl0J3MgYSBwcm90bz9cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBhbGxvdyBmb3Igb3RoZXIgcHJvdG9jb2xzIHRvIGJlIGFkZGVkIGFmdGVyIGEgdW5peCBwYXRoLFxuICAgICAgICAvLyBob3dldmVyIGl0IHdvdWxkIGhhdmUgaXNzdWVzIGlmIHRoZSBwYXRoIGhhZCBhIHByb3RvY29sIG5hbWUgaW4gdGhlIHBhdGhcbiAgICAgICAgY2xlYW5QYXRoKHBhcnRzLnNsaWNlKHApLmpvaW4oJy8nKSlcbiAgICAgIF0pXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIHR1cGxlcy5wdXNoKFtwYXJ0LCBwYXJ0c1twXV0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IHN0cmluZ1xuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9TdHJpbmcgKHR1cGxlcykge1xuICBjb25zdCBwYXJ0cyA9IFtdXG4gIHR1cGxlcy5tYXAodHVwID0+IHtcbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBwYXJ0cy5wdXNoKHByb3RvLm5hbWUpXG4gICAgaWYgKHR1cC5sZW5ndGggPiAxKSB7XG4gICAgICBwYXJ0cy5wdXNoKHR1cFsxXSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNsZWFuUGF0aChwYXJ0cy5qb2luKCcvJykpXG59XG5cbi8vIFtbc3RyIG5hbWUsIHN0ciBhZGRyXS4uLiBdIC0+IFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXVxuZnVuY3Rpb24gc3RyaW5nVHVwbGVzVG9UdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0dXApKSB7XG4gICAgICB0dXAgPSBbdHVwXVxuICAgIH1cbiAgICBjb25zdCBwcm90byA9IHByb3RvRnJvbVR1cGxlKHR1cClcbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiBbcHJvdG8uY29kZSwgY29udmVydC50b0J1ZmZlcihwcm90by5jb2RlLCB0dXBbMV0pXVxuICAgIH1cbiAgICByZXR1cm4gW3Byb3RvLmNvZGVdXG4gIH0pXG59XG5cbi8vIFtbaW50IGNvZGUsIEJ1ZmZlcl0uLi4gXSAtPiBbW3N0ciBuYW1lLCBzdHIgYWRkcl0uLi4gXVxuZnVuY3Rpb24gdHVwbGVzVG9TdHJpbmdUdXBsZXMgKHR1cGxlcykge1xuICByZXR1cm4gdHVwbGVzLm1hcCh0dXAgPT4ge1xuICAgIGNvbnN0IHByb3RvID0gcHJvdG9Gcm9tVHVwbGUodHVwKVxuICAgIGlmICh0dXAubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm90by5jb2RlLCBjb252ZXJ0LnRvU3RyaW5nKHByb3RvLmNvZGUsIHR1cFsxXSldXG4gICAgfVxuICAgIHJldHVybiBbcHJvdG8uY29kZV1cbiAgfSlcbn1cblxuLy8gW1tpbnQgY29kZSwgQnVmZmVyIF0uLi4gXSAtPiBCdWZmZXJcbmZ1bmN0aW9uIHR1cGxlc1RvQnVmZmVyICh0dXBsZXMpIHtcbiAgcmV0dXJuIGZyb21CdWZmZXIoQnVmZmVyLmNvbmNhdCh0dXBsZXMubWFwKHR1cCA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSBwcm90b0Zyb21UdXBsZSh0dXApXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUocHJvdG8uY29kZSkpXG5cbiAgICBpZiAodHVwLmxlbmd0aCA+IDEpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgdHVwWzFdXSkgLy8gYWRkIGFkZHJlc3MgYnVmZmVyXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZlxuICB9KSkpXG59XG5cbmZ1bmN0aW9uIHNpemVGb3JBZGRyIChwLCBhZGRyKSB7XG4gIGlmIChwLnNpemUgPiAwKSB7XG4gICAgcmV0dXJuIHAuc2l6ZSAvIDhcbiAgfSBlbHNlIGlmIChwLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNpemUgPSB2YXJpbnQuZGVjb2RlKGFkZHIpXG4gICAgcmV0dXJuIHNpemUgKyB2YXJpbnQuZGVjb2RlLmJ5dGVzXG4gIH1cbn1cblxuLy8gQnVmZmVyIC0+IFtbaW50IGNvZGUsIEJ1ZmZlciBdLi4uIF1cbmZ1bmN0aW9uIGJ1ZmZlclRvVHVwbGVzIChidWYpIHtcbiAgY29uc3QgdHVwbGVzID0gW11cbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpIDwgYnVmLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvZGUgPSB2YXJpbnQuZGVjb2RlKGJ1ZiwgaSlcbiAgICBjb25zdCBuID0gdmFyaW50LmRlY29kZS5ieXRlc1xuXG4gICAgY29uc3QgcCA9IHByb3RvY29scyhjb2RlKVxuXG4gICAgY29uc3Qgc2l6ZSA9IHNpemVGb3JBZGRyKHAsIGJ1Zi5zbGljZShpICsgbikpXG5cbiAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgdHVwbGVzLnB1c2goW2NvZGVdKVxuICAgICAgaSArPSBuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGFkZHIgPSBidWYuc2xpY2UoaSArIG4sIGkgKyBuICsgc2l6ZSlcblxuICAgIGkgKz0gKHNpemUgKyBuKVxuXG4gICAgaWYgKGkgPiBidWYubGVuZ3RoKSB7IC8vIGRpZCBub3QgZW5kIF9leGFjdGx5XyBhdCBidWZmZXIubGVuZ3RoXG4gICAgICB0aHJvdyBQYXJzZUVycm9yKCdJbnZhbGlkIGFkZHJlc3MgYnVmZmVyOiAnICsgYnVmLnRvU3RyaW5nKCdoZXgnKSlcbiAgICB9XG5cbiAgICAvLyBvaywgdHVwbGUgc2VlbXMgZ29vZC5cbiAgICB0dXBsZXMucHVzaChbY29kZSwgYWRkcl0pXG4gIH1cblxuICByZXR1cm4gdHVwbGVzXG59XG5cbi8vIEJ1ZmZlciAtPiBTdHJpbmdcbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nIChidWYpIHtcbiAgY29uc3QgYSA9IGJ1ZmZlclRvVHVwbGVzKGJ1ZilcbiAgY29uc3QgYiA9IHR1cGxlc1RvU3RyaW5nVHVwbGVzKGEpXG4gIHJldHVybiBzdHJpbmdUdXBsZXNUb1N0cmluZyhiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBzdHJpbmdUb0J1ZmZlciAoc3RyKSB7XG4gIHN0ciA9IGNsZWFuUGF0aChzdHIpXG4gIGNvbnN0IGEgPSBzdHJpbmdUb1N0cmluZ1R1cGxlcyhzdHIpXG4gIGNvbnN0IGIgPSBzdHJpbmdUdXBsZXNUb1R1cGxlcyhhKVxuXG4gIHJldHVybiB0dXBsZXNUb0J1ZmZlcihiKVxufVxuXG4vLyBTdHJpbmcgLT4gQnVmZmVyXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0cmluZ1RvQnVmZmVyKHN0cilcbn1cblxuLy8gQnVmZmVyIC0+IEJ1ZmZlclxuZnVuY3Rpb24gZnJvbUJ1ZmZlciAoYnVmKSB7XG4gIGNvbnN0IGVyciA9IHZhbGlkYXRlQnVmZmVyKGJ1ZilcbiAgaWYgKGVycikgdGhyb3cgZXJyXG4gIHJldHVybiBCdWZmZXIuZnJvbShidWYpIC8vIGNvcHlcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVCdWZmZXIgKGJ1Zikge1xuICB0cnkge1xuICAgIGJ1ZmZlclRvVHVwbGVzKGJ1ZikgLy8gdHJ5IHRvIHBhcnNlLiB3aWxsIHRocm93IGlmIGJyZWFrc1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZXJyXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZEJ1ZmZlciAoYnVmKSB7XG4gIHJldHVybiB2YWxpZGF0ZUJ1ZmZlcihidWYpID09PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChzdHIpIHtcbiAgcmV0dXJuICcvJyArIHN0ci50cmltKCkuc3BsaXQoJy8nKS5maWx0ZXIoYSA9PiBhKS5qb2luKCcvJylcbn1cblxuZnVuY3Rpb24gUGFyc2VFcnJvciAoc3RyKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0Vycm9yIHBhcnNpbmcgYWRkcmVzczogJyArIHN0cilcbn1cblxuZnVuY3Rpb24gcHJvdG9Gcm9tVHVwbGUgKHR1cCkge1xuICBjb25zdCBwcm90byA9IHByb3RvY29scyh0dXBbMF0pXG4gIHJldHVybiBwcm90b1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGlwID0gcmVxdWlyZSgnaXAnKVxuY29uc3QgaXNJcCA9IHJlcXVpcmUoJ2lzLWlwJylcbmNvbnN0IHByb3RvY29scyA9IHJlcXVpcmUoJy4vcHJvdG9jb2xzLXRhYmxlJylcbmNvbnN0IGJzNTggPSByZXF1aXJlKCdiczU4JylcbmNvbnN0IENJRCA9IHJlcXVpcmUoJ2NpZHMnKVxuY29uc3QgYmFzZTMyID0gcmVxdWlyZSgnaGktYmFzZTMyJylcbmNvbnN0IHZhcmludCA9IHJlcXVpcmUoJ3ZhcmludCcpXG5cbm1vZHVsZS5leHBvcnRzID0gQ29udmVydFxuXG4vLyBjb252ZXJ0cyAoc2VyaWFsaXplcykgYWRkcmVzc2VzXG5mdW5jdGlvbiBDb252ZXJ0IChwcm90bywgYSkge1xuICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBDb252ZXJ0LnRvU3RyaW5nKHByb3RvLCBhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBDb252ZXJ0LnRvQnVmZmVyKHByb3RvLCBhKVxuICB9XG59XG5cbkNvbnZlcnQudG9TdHJpbmcgPSBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcgKHByb3RvLCBidWYpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgIGNhc2UgNDE6IC8vIGlwdjZcbiAgICAgIHJldHVybiBidWYyaXAoYnVmKVxuXG4gICAgY2FzZSA2OiAvLyB0Y3BcbiAgICBjYXNlIDI3MzogLy8gdWRwXG4gICAgY2FzZSAzMzogLy8gZGNjcFxuICAgIGNhc2UgMTMyOiAvLyBzY3RwXG4gICAgICByZXR1cm4gYnVmMnBvcnQoYnVmKVxuXG4gICAgY2FzZSA1MzogLy8gZG5zXG4gICAgY2FzZSA1NDogLy8gZG5zNFxuICAgIGNhc2UgNTU6IC8vIGRuczZcbiAgICBjYXNlIDU2OiAvLyBkbnNhZGRyXG4gICAgY2FzZSA0MDA6IC8vIHVuaXhcbiAgICAgIHJldHVybiBidWYyc3RyKGJ1ZilcblxuICAgIGNhc2UgNDIxOiAvLyBpcGZzXG4gICAgICByZXR1cm4gYnVmMm1oKGJ1ZilcbiAgICBjYXNlIDQ0NDogLy8gb25pb25cbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGNhc2UgNDQ1OiAvLyBvbmlvbjNcbiAgICAgIHJldHVybiBidWYyb25pb24oYnVmKVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IHRvIGhleFxuICB9XG59XG5cbkNvbnZlcnQudG9CdWZmZXIgPSBmdW5jdGlvbiBjb252ZXJ0VG9CdWZmZXIgKHByb3RvLCBzdHIpIHtcbiAgcHJvdG8gPSBwcm90b2NvbHMocHJvdG8pXG4gIHN3aXRjaCAocHJvdG8uY29kZSkge1xuICAgIGNhc2UgNDogLy8gaXB2NFxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG4gICAgY2FzZSA0MTogLy8gaXB2NlxuICAgICAgcmV0dXJuIGlwMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDY6IC8vIHRjcFxuICAgIGNhc2UgMjczOiAvLyB1ZHBcbiAgICBjYXNlIDMzOiAvLyBkY2NwXG4gICAgY2FzZSAxMzI6IC8vIHNjdHBcbiAgICAgIHJldHVybiBwb3J0MmJ1ZihwYXJzZUludChzdHIsIDEwKSlcblxuICAgIGNhc2UgNTM6IC8vIGRuc1xuICAgIGNhc2UgNTQ6IC8vIGRuczRcbiAgICBjYXNlIDU1OiAvLyBkbnM2XG4gICAgY2FzZSA1NjogLy8gZG5zYWRkclxuICAgIGNhc2UgNDAwOiAvLyB1bml4XG4gICAgICByZXR1cm4gc3RyMmJ1ZihzdHIpXG5cbiAgICBjYXNlIDQyMTogLy8gaXBmc1xuICAgICAgcmV0dXJuIG1oMmJ1ZihzdHIpXG4gICAgY2FzZSA0NDQ6IC8vIG9uaW9uXG4gICAgICByZXR1cm4gb25pb24yYnVmKHN0cilcbiAgICBjYXNlIDQ0NTogLy8gb25pb24zXG4gICAgICByZXR1cm4gb25pb24zMmJ1ZihzdHIpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsICdoZXgnKSAvLyBubyBjbHVlLiBjb252ZXJ0IGZyb20gaGV4XG4gIH1cbn1cblxuZnVuY3Rpb24gaXAyYnVmIChpcFN0cmluZykge1xuICBpZiAoIWlzSXAoaXBTdHJpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlwIGFkZHJlc3MnKVxuICB9XG4gIHJldHVybiBpcC50b0J1ZmZlcihpcFN0cmluZylcbn1cblxuZnVuY3Rpb24gYnVmMmlwIChpcEJ1ZmYpIHtcbiAgY29uc3QgaXBTdHJpbmcgPSBpcC50b1N0cmluZyhpcEJ1ZmYpXG4gIGlmICghaXNJcChpcFN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaXAgYWRkcmVzcycpXG4gIH1cbiAgcmV0dXJuIGlwU3RyaW5nXG59XG5cbmZ1bmN0aW9uIHBvcnQyYnVmIChwb3J0KSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygyKVxuICBidWYud3JpdGVVSW50MTZCRShwb3J0LCAwKVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGJ1ZjJwb3J0IChidWYpIHtcbiAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoMClcbn1cblxuZnVuY3Rpb24gc3RyMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0cilcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUoYnVmLmxlbmd0aCkpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtzaXplLCBidWZdKVxufVxuXG5mdW5jdGlvbiBidWYyc3RyIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBidWYgPSBidWYuc2xpY2UodmFyaW50LmRlY29kZS5ieXRlcylcblxuICBpZiAoYnVmLmxlbmd0aCAhPT0gc2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb25zaXN0ZW50IGxlbmd0aHMnKVxuICB9XG5cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIG1oMmJ1ZiAoaGFzaCkge1xuICAvLyB0aGUgYWRkcmVzcyBpcyBhIHZhcmludCBwcmVmaXhlZCBtdWx0aWhhc2ggc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gIGNvbnN0IG1oID0gbmV3IENJRChoYXNoKS5tdWx0aWhhc2hcbiAgY29uc3Qgc2l6ZSA9IEJ1ZmZlci5mcm9tKHZhcmludC5lbmNvZGUobWgubGVuZ3RoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3NpemUsIG1oXSlcbn1cblxuZnVuY3Rpb24gYnVmMm1oIChidWYpIHtcbiAgY29uc3Qgc2l6ZSA9IHZhcmludC5kZWNvZGUoYnVmKVxuICBjb25zdCBhZGRyZXNzID0gYnVmLnNsaWNlKHZhcmludC5kZWNvZGUuYnl0ZXMpXG5cbiAgaWYgKGFkZHJlc3MubGVuZ3RoICE9PSBzaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgbGVuZ3RocycpXG4gIH1cblxuICByZXR1cm4gYnM1OC5lbmNvZGUoYWRkcmVzcylcbn1cblxuZnVuY3Rpb24gb25pb24yYnVmIChzdHIpIHtcbiAgY29uc3QgYWRkciA9IHN0ci5zcGxpdCgnOicpXG4gIGlmIChhZGRyLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHBhcnNlIG9uaW9uIGFkZHI6ICcgKyBhZGRyICsgJyBkb2VzIG5vdCBjb250YWluIGEgcG9ydCBudW1iZXInKVxuICB9XG4gIGlmIChhZGRyWzBdLmxlbmd0aCAhPT0gMTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkclswXSArICcgbm90IGEgVG9yIG9uaW9uIGFkZHJlc3MuJylcbiAgfVxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShiYXNlMzIuZGVjb2RlLmFzQnl0ZXMoYWRkclswXS50b1VwcGVyQ2FzZSgpKSlcblxuICAvLyBvbmlvbiBwb3J0IG51bWJlclxuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoYWRkclsxXSwgMTApXG4gIGlmIChwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgbnVtYmVyIGlzIG5vdCBpbiByYW5nZSgxLCA2NTUzNiknKVxuICB9XG4gIGNvbnN0IHBvcnRCdWYgPSBwb3J0MmJ1Zihwb3J0KVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmLCBwb3J0QnVmXSlcbn1cblxuZnVuY3Rpb24gb25pb24zMmJ1ZiAoc3RyKSB7XG4gIGNvbnN0IGFkZHIgPSBzdHIuc3BsaXQoJzonKVxuICBpZiAoYWRkci5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBvbmlvbiBhZGRyOiAnICsgYWRkciArICcgZG9lcyBub3QgY29udGFpbiBhIHBvcnQgbnVtYmVyJylcbiAgfVxuICBpZiAoYWRkclswXS5sZW5ndGggIT09IDU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gcGFyc2Ugb25pb24gYWRkcjogJyArIGFkZHJbMF0gKyAnIG5vdCBhIFRvciBvbmlvbjMgYWRkcmVzcy4nKVxuICB9XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhhZGRyWzBdLnRvVXBwZXJDYXNlKCkpKVxuXG4gIC8vIG9uaW9uIHBvcnQgbnVtYmVyXG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChhZGRyWzFdLCAxMClcbiAgaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNikge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9ydCBudW1iZXIgaXMgbm90IGluIHJhbmdlKDEsIDY1NTM2KScpXG4gIH1cbiAgY29uc3QgcG9ydEJ1ZiA9IHBvcnQyYnVmKHBvcnQpXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIHBvcnRCdWZdKVxufVxuXG5mdW5jdGlvbiBidWYyb25pb24gKGJ1Zikge1xuICBjb25zdCBhZGRyQnl0ZXMgPSBidWYuc2xpY2UoMCwgYnVmLmxlbmd0aCAtIDIpXG4gIGNvbnN0IHBvcnRCeXRlcyA9IGJ1Zi5zbGljZShidWYubGVuZ3RoIC0gMilcbiAgY29uc3QgYWRkciA9IGJhc2UzMi5lbmNvZGUoYWRkckJ5dGVzKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHBvcnQgPSBidWYycG9ydChwb3J0Qnl0ZXMpXG4gIHJldHVybiBhZGRyICsgJzonICsgcG9ydFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXAgPSBleHBvcnRzO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbnZhciBvcyA9IHJlcXVpcmUoJ29zJyk7XG5cbmlwLnRvQnVmZmVyID0gZnVuY3Rpb24oaXAsIGJ1ZmYsIG9mZnNldCkge1xuICBvZmZzZXQgPSB+fm9mZnNldDtcblxuICB2YXIgcmVzdWx0O1xuXG4gIGlmICh0aGlzLmlzVjRGb3JtYXQoaXApKSB7XG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDQpO1xuICAgIGlwLnNwbGl0KC9cXC4vZykubWFwKGZ1bmN0aW9uKGJ5dGUpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSBwYXJzZUludChieXRlLCAxMCkgJiAweGZmO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNWNkZvcm1hdChpcCkpIHtcbiAgICB2YXIgc2VjdGlvbnMgPSBpcC5zcGxpdCgnOicsIDgpO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXN2NCA9IHRoaXMuaXNWNEZvcm1hdChzZWN0aW9uc1tpXSk7XG4gICAgICB2YXIgdjRCdWZmZXI7XG5cbiAgICAgIGlmIChpc3Y0KSB7XG4gICAgICAgIHY0QnVmZmVyID0gdGhpcy50b0J1ZmZlcihzZWN0aW9uc1tpXSk7XG4gICAgICAgIHNlY3Rpb25zW2ldID0gdjRCdWZmZXIuc2xpY2UoMCwgMikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodjRCdWZmZXIgJiYgKytpIDwgOCkge1xuICAgICAgICBzZWN0aW9ucy5zcGxpY2UoaSwgMCwgdjRCdWZmZXIuc2xpY2UoMiwgNCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VjdGlvbnNbMF0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMudW5zaGlmdCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICB3aGlsZSAoc2VjdGlvbnMubGVuZ3RoIDwgOCkgc2VjdGlvbnMucHVzaCgnMCcpO1xuICAgIH0gZWxzZSBpZiAoc2VjdGlvbnMubGVuZ3RoIDwgOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiBzZWN0aW9uc1tpXSAhPT0gJyc7IGkrKyk7XG4gICAgICB2YXIgYXJndiA9IFsgaSwgMSBdO1xuICAgICAgZm9yIChpID0gOSAtIHNlY3Rpb25zLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICBhcmd2LnB1c2goJzAnKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25zLnNwbGljZS5hcHBseShzZWN0aW9ucywgYXJndik7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gYnVmZiB8fCBuZXcgQnVmZmVyKG9mZnNldCArIDE2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gcGFyc2VJbnQoc2VjdGlvbnNbaV0sIDE2KTtcbiAgICAgIHJlc3VsdFtvZmZzZXQrK10gPSAod29yZCA+PiA4KSAmIDB4ZmY7XG4gICAgICByZXN1bHRbb2Zmc2V0KytdID0gd29yZCAmIDB4ZmY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCBpcCBhZGRyZXNzOiAnICsgaXApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmlwLnRvU3RyaW5nID0gZnVuY3Rpb24oYnVmZiwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gfn5vZmZzZXQ7XG4gIGxlbmd0aCA9IGxlbmd0aCB8fCAoYnVmZi5sZW5ndGggLSBvZmZzZXQpO1xuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKGxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChidWZmW29mZnNldCArIGldKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gcmVzdWx0LmpvaW4oJy4nKTtcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IDE2KSB7XG4gICAgLy8gSVB2NlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGJ1ZmYucmVhZFVJbnQxNkJFKG9mZnNldCArIGkpLnRvU3RyaW5nKDE2KSk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlc3VsdC5qb2luKCc6Jyk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyhefDopMCg6MCkqOjAoOnwkKS8sICckMTo6JDMnKTtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOnszLDR9LywgJzo6Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGlwdjRSZWdleCA9IC9eKFxcZHsxLDN9XFwuKXszLDN9XFxkezEsM30kLztcbnZhciBpcHY2UmVnZXggPVxuICAgIC9eKDo6KT8oKChcXGR7MSwzfVxcLil7M30oXFxkezEsM30pezF9KT8oWzAtOWEtZl0pezAsNH06ezAsMn0pezEsOH0oOjopPyQvaTtcblxuaXAuaXNWNEZvcm1hdCA9IGZ1bmN0aW9uKGlwKSB7XG4gIHJldHVybiBpcHY0UmVnZXgudGVzdChpcCk7XG59O1xuXG5pcC5pc1Y2Rm9ybWF0ID0gZnVuY3Rpb24oaXApIHtcbiAgcmV0dXJuIGlwdjZSZWdleC50ZXN0KGlwKTtcbn07XG5mdW5jdGlvbiBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSkge1xuICByZXR1cm4gZmFtaWx5ID8gZmFtaWx5LnRvTG93ZXJDYXNlKCkgOiAnaXB2NCc7XG59XG5cbmlwLmZyb21QcmVmaXhMZW4gPSBmdW5jdGlvbihwcmVmaXhsZW4sIGZhbWlseSkge1xuICBpZiAocHJlZml4bGVuID4gMzIpIHtcbiAgICBmYW1pbHkgPSAnaXB2Nic7XG4gIH0gZWxzZSB7XG4gICAgZmFtaWx5ID0gX25vcm1hbGl6ZUZhbWlseShmYW1pbHkpO1xuICB9XG5cbiAgdmFyIGxlbiA9IDQ7XG4gIGlmIChmYW1pbHkgPT09ICdpcHY2Jykge1xuICAgIGxlbiA9IDE2O1xuICB9XG4gIHZhciBidWZmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gYnVmZi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgYml0cyA9IDg7XG4gICAgaWYgKHByZWZpeGxlbiA8IDgpIHtcbiAgICAgIGJpdHMgPSBwcmVmaXhsZW47XG4gICAgfVxuICAgIHByZWZpeGxlbiAtPSBiaXRzO1xuXG4gICAgYnVmZltpXSA9IH4oMHhmZiA+PiBiaXRzKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gaXAudG9TdHJpbmcoYnVmZik7XG59O1xuXG5pcC5tYXNrID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICBhZGRyID0gaXAudG9CdWZmZXIoYWRkcik7XG4gIG1hc2sgPSBpcC50b0J1ZmZlcihtYXNrKTtcblxuICB2YXIgcmVzdWx0ID0gbmV3IEJ1ZmZlcihNYXRoLm1heChhZGRyLmxlbmd0aCwgbWFzay5sZW5ndGgpKTtcblxuICB2YXIgaSA9IDA7XG4gIC8vIFNhbWUgcHJvdG9jb2wgLSBkbyBiaXR3aXNlIGFuZFxuICBpZiAoYWRkci5sZW5ndGggPT09IG1hc2subGVuZ3RoKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGFkZHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbaV0gJiBtYXNrW2ldO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtYXNrLmxlbmd0aCA9PT0gNCkge1xuICAgIC8vIElQdjYgYWRkcmVzcyBhbmQgSVB2NCBtYXNrXG4gICAgLy8gKE1hc2sgbG93IGJpdHMpXG4gICAgZm9yIChpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IGFkZHJbYWRkci5sZW5ndGggLSA0ICArIGldICYgbWFza1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSVB2NiBtYXNrIGFuZCBJUHY0IGFkZHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGggLSA2OyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gOjpmZmZmOmlwdjRcbiAgICByZXN1bHRbMTBdID0gMHhmZjtcbiAgICByZXN1bHRbMTFdID0gMHhmZjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWRkci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2kgKyAxMl0gPSBhZGRyW2ldICYgbWFza1tpICsgMTJdO1xuICAgIH1cbiAgICBpID0gaSArIDEyO1xuICB9XG4gIGZvciAoOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKVxuICAgIHJlc3VsdFtpXSA9IDA7XG5cbiAgcmV0dXJuIGlwLnRvU3RyaW5nKHJlc3VsdCk7XG59O1xuXG5pcC5jaWRyID0gZnVuY3Rpb24oY2lkclN0cmluZykge1xuICB2YXIgY2lkclBhcnRzID0gY2lkclN0cmluZy5zcGxpdCgnLycpO1xuXG4gIHZhciBhZGRyID0gY2lkclBhcnRzWzBdO1xuICBpZiAoY2lkclBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgQ0lEUiBzdWJuZXQ6ICcgKyBhZGRyKTtcblxuICB2YXIgbWFzayA9IGlwLmZyb21QcmVmaXhMZW4ocGFyc2VJbnQoY2lkclBhcnRzWzFdLCAxMCkpO1xuXG4gIHJldHVybiBpcC5tYXNrKGFkZHIsIG1hc2spO1xufTtcblxuaXAuc3VibmV0ID0gZnVuY3Rpb24oYWRkciwgbWFzaykge1xuICB2YXIgbmV0d29ya0FkZHJlc3MgPSBpcC50b0xvbmcoaXAubWFzayhhZGRyLCBtYXNrKSk7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBtYXNrJ3MgbGVuZ3RoLlxuICB2YXIgbWFza0J1ZmZlciA9IGlwLnRvQnVmZmVyKG1hc2spO1xuICB2YXIgbWFza0xlbmd0aCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXNrQnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1hc2tCdWZmZXJbaV0gPT09IDB4ZmYpIHtcbiAgICAgIG1hc2tMZW5ndGggKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9jdGV0ID0gbWFza0J1ZmZlcltpXSAmIDB4ZmY7XG4gICAgICB3aGlsZSAob2N0ZXQpIHtcbiAgICAgICAgb2N0ZXQgPSAob2N0ZXQgPDwgMSkgJiAweGZmO1xuICAgICAgICBtYXNrTGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG51bWJlck9mQWRkcmVzc2VzID0gTWF0aC5wb3coMiwgMzIgLSBtYXNrTGVuZ3RoKTtcblxuICByZXR1cm4ge1xuICAgIG5ldHdvcmtBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyksXG4gICAgZmlyc3RBZGRyZXNzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MpIDpcbiAgICAgICAgICAgICAgICAgICAgaXAuZnJvbUxvbmcobmV0d29ya0FkZHJlc3MgKyAxKSxcbiAgICBsYXN0QWRkcmVzczogbnVtYmVyT2ZBZGRyZXNzZXMgPD0gMiA/XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAxKSA6XG4gICAgICAgICAgICAgICAgICAgIGlwLmZyb21Mb25nKG5ldHdvcmtBZGRyZXNzICsgbnVtYmVyT2ZBZGRyZXNzZXMgLSAyKSxcbiAgICBicm9hZGNhc3RBZGRyZXNzOiBpcC5mcm9tTG9uZyhuZXR3b3JrQWRkcmVzcyArIG51bWJlck9mQWRkcmVzc2VzIC0gMSksXG4gICAgc3VibmV0TWFzazogbWFzayxcbiAgICBzdWJuZXRNYXNrTGVuZ3RoOiBtYXNrTGVuZ3RoLFxuICAgIG51bUhvc3RzOiBudW1iZXJPZkFkZHJlc3NlcyA8PSAyID9cbiAgICAgICAgICAgICAgICBudW1iZXJPZkFkZHJlc3NlcyA6IG51bWJlck9mQWRkcmVzc2VzIC0gMixcbiAgICBsZW5ndGg6IG51bWJlck9mQWRkcmVzc2VzLFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgcmV0dXJuIG5ldHdvcmtBZGRyZXNzID09PSBpcC50b0xvbmcoaXAubWFzayhvdGhlciwgbWFzaykpO1xuICAgIH1cbiAgfTtcbn07XG5cbmlwLmNpZHJTdWJuZXQgPSBmdW5jdGlvbihjaWRyU3RyaW5nKSB7XG4gIHZhciBjaWRyUGFydHMgPSBjaWRyU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgdmFyIGFkZHIgPSBjaWRyUGFydHNbMF07XG4gIGlmIChjaWRyUGFydHMubGVuZ3RoICE9PSAyKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBDSURSIHN1Ym5ldDogJyArIGFkZHIpO1xuXG4gIHZhciBtYXNrID0gaXAuZnJvbVByZWZpeExlbihwYXJzZUludChjaWRyUGFydHNbMV0sIDEwKSk7XG5cbiAgcmV0dXJuIGlwLnN1Ym5ldChhZGRyLCBtYXNrKTtcbn07XG5cbmlwLm5vdCA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgdmFyIGJ1ZmYgPSBpcC50b0J1ZmZlcihhZGRyKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgYnVmZltpXSA9IDB4ZmYgXiBidWZmW2ldO1xuICB9XG4gIHJldHVybiBpcC50b1N0cmluZyhidWZmKTtcbn07XG5cbmlwLm9yID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBzYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFbaV0gfD0gYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGEpO1xuXG4gIC8vIG1peGVkIHByb3RvY29sc1xuICB9IGVsc2Uge1xuICAgIHZhciBidWZmID0gYTtcbiAgICB2YXIgb3RoZXIgPSBiO1xuICAgIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICBidWZmID0gYjtcbiAgICAgIG90aGVyID0gYTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0ID0gYnVmZi5sZW5ndGggLSBvdGhlci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGJ1ZmYubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZbaV0gfD0gb3RoZXJbaSAtIG9mZnNldF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwLnRvU3RyaW5nKGJ1ZmYpO1xuICB9XG59O1xuXG5pcC5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICBhID0gaXAudG9CdWZmZXIoYSk7XG4gIGIgPSBpcC50b0J1ZmZlcihiKTtcblxuICAvLyBTYW1lIHByb3RvY29sXG4gIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU3dhcFxuICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICB2YXIgdCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICAvLyBhIC0gSVB2NCwgYiAtIElQdjZcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKGJbaV0gIT09IDApIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB3b3JkID0gYi5yZWFkVUludDE2QkUoMTApO1xuICBpZiAod29yZCAhPT0gMCAmJiB3b3JkICE9PSAweGZmZmYpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2kgKyAxMl0pIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuaXAuaXNQcml2YXRlID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTBcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSlcXC4oWzAtOV17MSwzfSkkL2lcbiAgICAgIC50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTkyXFwuMTY4XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXig6OmZ7NH06KT8xNzJcXC4oMVs2LTldfDJcXGR8MzB8MzEpXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pXG4gICAgICAudGVzdChhZGRyKSB8fFxuICAgIC9eKDo6Zns0fTopPzEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8XG4gICAgL14oOjpmezR9Oik/MTY5XFwuMjU0XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pJC9pLnRlc3QoYWRkcikgfHxcbiAgICAvXmZbY2RdWzAtOWEtZl17Mn06L2kudGVzdChhZGRyKSB8fFxuICAgIC9eZmU4MDovaS50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5pc1B1YmxpYyA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgcmV0dXJuICFpcC5pc1ByaXZhdGUoYWRkcik7XG59O1xuXG5pcC5pc0xvb3BiYWNrID0gZnVuY3Rpb24oYWRkcikge1xuICByZXR1cm4gL14oOjpmezR9Oik/MTI3XFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pXFwuKFswLTldezEsM30pL1xuICAgICAgLnRlc3QoYWRkcikgfHxcbiAgICAvXmZlODA6OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OjEkLy50ZXN0KGFkZHIpIHx8XG4gICAgL146OiQvLnRlc3QoYWRkcik7XG59O1xuXG5pcC5sb29wYmFjayA9IGZ1bmN0aW9uKGZhbWlseSkge1xuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgaWYgKGZhbWlseSAhPT0gJ2lwdjQnICYmIGZhbWlseSAhPT0gJ2lwdjYnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYW1pbHkgbXVzdCBiZSBpcHY0IG9yIGlwdjYnKTtcbiAgfVxuXG4gIHJldHVybiBmYW1pbHkgPT09ICdpcHY0JyA/ICcxMjcuMC4wLjEnIDogJ2ZlODA6OjEnO1xufTtcblxuLy9cbi8vICMjIyBmdW5jdGlvbiBhZGRyZXNzIChuYW1lLCBmYW1pbHkpXG4vLyAjIyMjIEBuYW1lIHtzdHJpbmd8J3B1YmxpYyd8J3ByaXZhdGUnfSAqKk9wdGlvbmFsKiogTmFtZSBvciBzZWN1cml0eVxuLy8gICAgICBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UuXG4vLyAjIyMjIEBmYW1pbHkge2lwdjR8aXB2Nn0gKipPcHRpb25hbCoqIElQIGZhbWlseSBvZiB0aGUgYWRkcmVzcyAoZGVmYXVsdHNcbi8vICAgICAgdG8gaXB2NCkuXG4vL1xuLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB3aXRoXG4vLyB0aGUgc3BlY2lmaWVkIGBuYW1lYDpcbi8vICAgKiBTdHJpbmc6IEZpcnN0IGBmYW1pbHlgIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS5cbi8vICAgICAgICAgICAgIElmIG5vdCBmb3VuZCBzZWUgYHVuZGVmaW5lZGAuXG4vLyAgICogJ3B1YmxpYyc6IHRoZSBmaXJzdCBwdWJsaWMgaXAgYWRkcmVzcyBvZiBmYW1pbHkuXG4vLyAgICogJ3ByaXZhdGUnOiB0aGUgZmlyc3QgcHJpdmF0ZSBpcCBhZGRyZXNzIG9mIGZhbWlseS5cbi8vICAgKiB1bmRlZmluZWQ6IEZpcnN0IGFkZHJlc3Mgd2l0aCBgaXB2NGAgb3IgbG9vcGJhY2sgYWRkcmVzcyBgMTI3LjAuMC4xYC5cbi8vXG5pcC5hZGRyZXNzID0gZnVuY3Rpb24obmFtZSwgZmFtaWx5KSB7XG4gIHZhciBpbnRlcmZhY2VzID0gb3MubmV0d29ya0ludGVyZmFjZXMoKTtcbiAgdmFyIGFsbDtcblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGBpcHY0YFxuICAvL1xuICBmYW1pbHkgPSBfbm9ybWFsaXplRmFtaWx5KGZhbWlseSk7XG5cbiAgLy9cbiAgLy8gSWYgYSBzcGVjaWZpYyBuZXR3b3JrIGludGVyZmFjZSBoYXMgYmVlbiBuYW1lZCxcbiAgLy8gcmV0dXJuIHRoZSBhZGRyZXNzLlxuICAvL1xuICBpZiAobmFtZSAmJiBuYW1lICE9PSAncHJpdmF0ZScgJiYgbmFtZSAhPT0gJ3B1YmxpYycpIHtcbiAgICB2YXIgcmVzID0gaW50ZXJmYWNlc1tuYW1lXS5maWx0ZXIoZnVuY3Rpb24oZGV0YWlscykge1xuICAgICAgdmFyIGl0ZW1GYW1pbHkgPSBkZXRhaWxzLmZhbWlseS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGl0ZW1GYW1pbHkgPT09IGZhbWlseTtcbiAgICB9KTtcbiAgICBpZiAocmVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc1swXS5hZGRyZXNzO1xuICB9XG5cbiAgdmFyIGFsbCA9IE9iamVjdC5rZXlzKGludGVyZmFjZXMpLm1hcChmdW5jdGlvbiAobmljKSB7XG4gICAgLy9cbiAgICAvLyBOb3RlOiBuYW1lIHdpbGwgb25seSBiZSBgcHVibGljYCBvciBgcHJpdmF0ZWBcbiAgICAvLyB3aGVuIHRoaXMgaXMgY2FsbGVkLlxuICAgIC8vXG4gICAgdmFyIGFkZHJlc3NlcyA9IGludGVyZmFjZXNbbmljXS5maWx0ZXIoZnVuY3Rpb24gKGRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMuZmFtaWx5ID0gZGV0YWlscy5mYW1pbHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChkZXRhaWxzLmZhbWlseSAhPT0gZmFtaWx5IHx8IGlwLmlzTG9vcGJhY2soZGV0YWlscy5hZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZSA9PT0gJ3B1YmxpYycgPyBpcC5pc1ByaXZhdGUoZGV0YWlscy5hZGRyZXNzKSA6XG4gICAgICAgICAgaXAuaXNQdWJsaWMoZGV0YWlscy5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhZGRyZXNzZXMubGVuZ3RoID8gYWRkcmVzc2VzWzBdLmFkZHJlc3MgOiB1bmRlZmluZWQ7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4gIWFsbC5sZW5ndGggPyBpcC5sb29wYmFjayhmYW1pbHkpIDogYWxsWzBdO1xufTtcblxuaXAudG9Mb25nID0gZnVuY3Rpb24oaXApIHtcbiAgdmFyIGlwbCA9IDA7XG4gIGlwLnNwbGl0KCcuJykuZm9yRWFjaChmdW5jdGlvbihvY3RldCkge1xuICAgIGlwbCA8PD0gODtcbiAgICBpcGwgKz0gcGFyc2VJbnQob2N0ZXQpO1xuICB9KTtcbiAgcmV0dXJuKGlwbCA+Pj4gMCk7XG59O1xuXG5pcC5mcm9tTG9uZyA9IGZ1bmN0aW9uKGlwbCkge1xuICByZXR1cm4gKChpcGwgPj4+IDI0KSArICcuJyArXG4gICAgICAoaXBsID4+IDE2ICYgMjU1KSArICcuJyArXG4gICAgICAoaXBsID4+IDggJiAyNTUpICsgJy4nICtcbiAgICAgIChpcGwgJiAyNTUpICk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgaXBSZWdleCA9IHJlcXVpcmUoJ2lwLXJlZ2V4Jyk7XG5cbmNvbnN0IGlzSXAgPSBzdHJpbmcgPT4gaXBSZWdleCh7ZXhhY3Q6IHRydWV9KS50ZXN0KHN0cmluZyk7XG5pc0lwLnY0ID0gc3RyaW5nID0+IGlwUmVnZXgudjQoe2V4YWN0OiB0cnVlfSkudGVzdChzdHJpbmcpO1xuaXNJcC52NiA9IHN0cmluZyA9PiBpcFJlZ2V4LnY2KHtleGFjdDogdHJ1ZX0pLnRlc3Qoc3RyaW5nKTtcbmlzSXAudmVyc2lvbiA9IHN0cmluZyA9PiBpc0lwKHN0cmluZykgPyAoaXNJcC52NChzdHJpbmcpID8gNCA6IDYpIDogdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSXA7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHdvcmQgPSAnW2EtZkEtRlxcXFxkOl0nO1xuY29uc3QgYiA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmluY2x1ZGVCb3VuZGFyaWVzID9cblx0YCg/Oig/PD1cXFxcc3xeKSg/PSR7d29yZH0pfCg/PD0ke3dvcmR9KSg/PVxcXFxzfCQpKWAgOlxuXHQnJztcblxuY29uc3QgdjQgPSAnKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XVxcXFxkfFxcXFxkKSl7M30nO1xuXG5jb25zdCB2NnNlZyA9ICdbYS1mQS1GXFxcXGRdezEsNH0nO1xuY29uc3QgdjYgPSBgXG4oXG4oPzoke3Y2c2VnfTopezd9KD86JHt2NnNlZ318Oil8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOjI6Mzo0OjU6Njo3OjogIDE6MjozOjQ6NTo2Ojc6OFxuKD86JHt2NnNlZ306KXs2fSg/OiR7djR9fDoke3Y2c2VnfXw6KXwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjY6OiAgICAxOjI6Mzo0OjU6Njo6OCAgIDE6MjozOjQ6NTo2Ojo4ICAxOjI6Mzo0OjU6Njo6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs1fSg/Ojoke3Y0fXwoOiR7djZzZWd9KXsxLDJ9fDopfCAgICAgICAgICAgICAgICAgLy8gMToyOjM6NDo1OjogICAgICAxOjI6Mzo0OjU6Ojc6OCAgIDE6MjozOjQ6NTo6OCAgICAxOjI6Mzo0OjU6Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXs0fSg/Oig6JHt2NnNlZ30pezAsMX06JHt2NH18KDoke3Y2c2VnfSl7MSwzfXw6KXwgLy8gMToyOjM6NDo6ICAgICAgICAxOjI6Mzo0Ojo2Ojc6OCAgIDE6MjozOjQ6OjggICAgICAxOjI6Mzo0Ojo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXszfSg/Oig6JHt2NnNlZ30pezAsMn06JHt2NH18KDoke3Y2c2VnfSl7MSw0fXw6KXwgLy8gMToyOjM6OiAgICAgICAgICAxOjI6Mzo6NTo2Ojc6OCAgIDE6MjozOjo4ICAgICAgICAxOjI6Mzo6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsyfSg/Oig6JHt2NnNlZ30pezAsM306JHt2NH18KDoke3Y2c2VnfSl7MSw1fXw6KXwgLy8gMToyOjogICAgICAgICAgICAxOjI6OjQ6NTo2Ojc6OCAgIDE6Mjo6OCAgICAgICAgICAxOjI6OjQ6NTo2Ojc6MS4yLjMuNFxuKD86JHt2NnNlZ306KXsxfSg/Oig6JHt2NnNlZ30pezAsNH06JHt2NH18KDoke3Y2c2VnfSl7MSw2fXw6KXwgLy8gMTo6ICAgICAgICAgICAgICAxOjozOjQ6NTo2Ojc6OCAgIDE6OjggICAgICAgICAgICAxOjozOjQ6NTo2Ojc6MS4yLjMuNFxuKD86OigoPzo6JHt2NnNlZ30pezAsNX06JHt2NH18KD86OiR7djZzZWd9KXsxLDd9fDopKSAgICAgICAgICAgLy8gOjoyOjM6NDo1OjY6Nzo4ICA6OjI6Mzo0OjU6Njo3OjggIDo6OCAgICAgICAgICAgICA6OjEuMi4zLjRcbikoJVswLTlhLXpBLVpdezEsfSk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICVldGgwICAgICAgICAgICAgJTFcbmAucmVwbGFjZSgvXFxzKlxcL1xcLy4qJC9nbSwgJycpLnJlcGxhY2UoL1xcbi9nLCAnJykudHJpbSgpO1xuXG5jb25zdCBpcCA9IG9wdGlvbnMgPT4gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0ID9cblx0bmV3IFJlZ0V4cChgKD86XiR7djR9JCl8KD86XiR7djZ9JClgKSA6XG5cdG5ldyBSZWdFeHAoYCg/OiR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX0pfCg/OiR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX0pYCwgJ2cnKTtcblxuaXAudjQgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y0fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y0fSR7YihvcHRpb25zKX1gLCAnZycpO1xuaXAudjYgPSBvcHRpb25zID0+IG9wdGlvbnMgJiYgb3B0aW9ucy5leGFjdCA/IG5ldyBSZWdFeHAoYF4ke3Y2fSRgKSA6IG5ldyBSZWdFeHAoYCR7YihvcHRpb25zKX0ke3Y2fSR7YihvcHRpb25zKX1gLCAnZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlwO1xuIiwiLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXVsdGljb2RlYyBzcGVjaWZpY2F0aW9uLlxuICpcbiAqIEBtb2R1bGUgbXVsdGljb2RlY1xuICogQGV4YW1wbGVcbiAqIGNvbnN0IG11bHRpY29kZWMgPSByZXF1aXJlKCdtdWx0aWNvZGVjJylcbiAqXG4gKiBjb25zdCBwcmVmaXhlZFByb3RvYnVmID0gbXVsdGljb2RlYy5hZGRQcmVmaXgoJ3Byb3RvYnVmJywgcHJvdG9idWZCdWZmZXIpXG4gKiAvLyBwcmVmaXhlZFByb3RvYnVmIDB4NTAuLi5cbiAqXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB2YXJpbnQgPSByZXF1aXJlKCd2YXJpbnQnKVxuY29uc3QgaW50VGFibGUgPSByZXF1aXJlKCcuL2ludC10YWJsZScpXG5jb25zdCBjb2RlY05hbWVUb0NvZGVWYXJpbnQgPSByZXF1aXJlKCcuL3ZhcmludC10YWJsZScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzXG5cbi8qKlxuICogUHJlZml4IGEgYnVmZmVyIHdpdGggYSBtdWx0aWNvZGVjLXBhY2tlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG11bHRpY29kZWNTdHJPckNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmFkZFByZWZpeCA9IChtdWx0aWNvZGVjU3RyT3JDb2RlLCBkYXRhKSA9PiB7XG4gIGxldCBwcmVmaXhcblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG11bHRpY29kZWNTdHJPckNvZGUpKSB7XG4gICAgcHJlZml4ID0gdXRpbC52YXJpbnRCdWZmZXJFbmNvZGUobXVsdGljb2RlY1N0ck9yQ29kZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoY29kZWNOYW1lVG9Db2RlVmFyaW50W211bHRpY29kZWNTdHJPckNvZGVdKSB7XG4gICAgICBwcmVmaXggPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbbXVsdGljb2RlY1N0ck9yQ29kZV1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtdWx0aWNvZGVjIG5vdCByZWNvZ25pemVkJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW3ByZWZpeCwgZGF0YV0pXG59XG5cbi8qKlxuICogRGVjYXBzdWxhdGUgdGhlIG11bHRpY29kZWMtcGFja2VkIHByZWZpeCBmcm9tIHRoZSBkYXRhLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLnJtUHJlZml4ID0gKGRhdGEpID0+IHtcbiAgdmFyaW50LmRlY29kZShkYXRhKVxuICByZXR1cm4gZGF0YS5zbGljZSh2YXJpbnQuZGVjb2RlLmJ5dGVzKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY29kZWMgb2YgdGhlIHByZWZpeGVkIGRhdGEuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcHJlZml4ZWREYXRhXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldENvZGVjID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICBjb25zdCBjb2RlID0gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG4gIGNvbnN0IGNvZGVjTmFtZSA9IGludFRhYmxlLmdldChjb2RlKVxuICBpZiAoY29kZWNOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvZGUgJHtjb2RlfSBub3QgZm91bmRgKVxuICB9XG4gIHJldHVybiBjb2RlY05hbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGNvZGVjLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVjXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmdldE5hbWUgPSAoY29kZWMpID0+IHtcbiAgcmV0dXJuIGludFRhYmxlLmdldChjb2RlYylcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNvZGUgb2YgdGhlIGNvZGVjXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXROdW1iZXIgPSAobmFtZSkgPT4ge1xuICBjb25zdCBjb2RlID0gY29kZWNOYW1lVG9Db2RlVmFyaW50W25hbWVdXG4gIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVjIGAnICsgbmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIHV0aWwudmFyaW50QnVmZmVyRGVjb2RlKGNvZGUpWzBdXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIG9mIHRoZSBwcmVmaXhlZCBkYXRhLlxuICogQHBhcmFtIHtCdWZmZXJ9IHByZWZpeGVkRGF0YVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0cy5nZXRDb2RlID0gKHByZWZpeGVkRGF0YSkgPT4ge1xuICByZXR1cm4gdmFyaW50LmRlY29kZShwcmVmaXhlZERhdGEpXG59XG5cbi8qKlxuICogR2V0IHRoZSBjb2RlIGFzIHZhcmludCBvZiBhIGNvZGVjIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZWNOYW1lXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5leHBvcnRzLmdldENvZGVWYXJpbnQgPSAoY29kZWNOYW1lKSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlY05hbWVUb0NvZGVWYXJpbnRbY29kZWNOYW1lXVxuICBpZiAoY29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2RlYyBgJyArIGNvZGVjTmFtZSArICdgIG5vdCBmb3VuZCcpXG4gIH1cbiAgcmV0dXJuIGNvZGVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhcmludCBvZiBhIGNvZGUuXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICovXG5leHBvcnRzLmdldFZhcmludCA9IChjb2RlKSA9PiB7XG4gIHJldHVybiB2YXJpbnQuZW5jb2RlKGNvZGUpXG59XG5cbi8vIE1ha2UgdGhlIGNvbnN0YW50cyB0b3AtbGV2ZWwgY29uc3RhbnRzXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5PYmplY3QuYXNzaWduKGV4cG9ydHMsIGNvbnN0YW50cylcblxuLy8gSHVtYW4gZnJpZW5kbHkgbmFtZXMgZm9yIHByaW50aW5nLCBlLmcuIGluIGVycm9yIG1lc3NhZ2VzXG5leHBvcnRzLnByaW50ID0gcmVxdWlyZSgnLi9wcmludCcpXG4iLCIndXNlIHN0cmljdCdcbmNvbnN0IGJhc2VUYWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBoZXhTdHJpbmcgLT4gY29kZWNOYW1lXG5jb25zdCBuYW1lVGFibGUgPSBuZXcgTWFwKClcblxuZm9yIChjb25zdCBlbmNvZGluZ05hbWUgaW4gYmFzZVRhYmxlKSB7XG4gIGNvbnN0IGNvZGUgPSBiYXNlVGFibGVbZW5jb2RpbmdOYW1lXVxuICBuYW1lVGFibGUuc2V0KGNvZGUsIGVuY29kaW5nTmFtZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKG5hbWVUYWJsZSlcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlVGFibGUgPSByZXF1aXJlKCcuL2Jhc2UtdGFibGUuanNvbicpXG5jb25zdCB2YXJpbnRFbmNvZGUgPSByZXF1aXJlKCcuL3V0aWwnKS52YXJpbnRFbmNvZGVcblxuLy8gbWFwIGZvciBjb2RlY05hbWUgLT4gY29kZVZhcmludEJ1ZmZlclxuY29uc3QgdmFyaW50VGFibGUgPSB7fVxuXG5mb3IgKGNvbnN0IGVuY29kaW5nTmFtZSBpbiBiYXNlVGFibGUpIHtcbiAgY29uc3QgY29kZSA9IGJhc2VUYWJsZVtlbmNvZGluZ05hbWVdXG4gIHZhcmludFRhYmxlW2VuY29kaW5nTmFtZV0gPSB2YXJpbnRFbmNvZGUoY29kZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHZhcmludFRhYmxlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHRhYmxlID0gcmVxdWlyZSgnLi9iYXNlLXRhYmxlLmpzb24nKVxuXG4vLyBtYXAgZm9yIGNvZGVjQ29uc3RhbnQgLT4gY29kZVxuY29uc3QgY29uc3RhbnRzID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGNvbnN0YW50c1tuYW1lLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLS9nLCAnXycpXSA9IGNvZGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKGNvbnN0YW50cylcbiIsIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB0YWJsZSA9IHJlcXVpcmUoJy4vYmFzZS10YWJsZS5qc29uJylcblxuLy8gbWFwIGZvciBjb2RlIC0+IHByaW50IGZyaWVuZGx5IG5hbWVcbmNvbnN0IHRhYmxlQnlDb2RlID0ge31cblxuZm9yIChjb25zdCBbbmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXModGFibGUpKSB7XG4gIGlmICh0YWJsZUJ5Q29kZVtjb2RlXSA9PT0gdW5kZWZpbmVkKSB0YWJsZUJ5Q29kZVtjb2RlXSA9IG5hbWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHRhYmxlQnlDb2RlKVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG1oID0gcmVxdWlyZSgnbXVsdGloYXNoZXMnKVxuXG52YXIgQ0lEVXRpbCA9IHtcbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGlucHV0IGlzIGEgdmFsaWQgQ0lEIG9iamVjdC5cbiAgICogUmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGlmIGl0IGlzIG5vdC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgaXQgaXMgYSB2YWxpZCBDSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvdGhlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tDSURDb21wb25lbnRzOiBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsIHZhbHVlcyBhcmUgbm90IHZhbGlkIENJRHMnXG4gICAgfVxuXG4gICAgaWYgKCEob3RoZXIudmVyc2lvbiA9PT0gMCB8fCBvdGhlci52ZXJzaW9uID09PSAxKSkge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIHZlcnNpb24sIG11c3QgYmUgYSBudW1iZXIgZXF1YWwgdG8gMSBvciAwJ1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3RoZXIuY29kZWMgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ2NvZGVjIG11c3QgYmUgc3RyaW5nJ1xuICAgIH1cblxuICAgIGlmIChvdGhlci52ZXJzaW9uID09PSAwKSB7XG4gICAgICBpZiAob3RoZXIuY29kZWMgIT09ICdkYWctcGInKSB7XG4gICAgICAgIHJldHVybiBcImNvZGVjIG11c3QgYmUgJ2RhZy1wYicgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlci5tdWx0aWJhc2VOYW1lICE9PSAnYmFzZTU4YnRjJykge1xuICAgICAgICByZXR1cm4gXCJtdWx0aWJhc2VOYW1lIG11c3QgYmUgJ2Jhc2U1OGJ0YycgZm9yIENJRHYwXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvdGhlci5tdWx0aWhhc2gpKSB7XG4gICAgICByZXR1cm4gJ211bHRpaGFzaCBtdXN0IGJlIGEgQnVmZmVyJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBtaC52YWxpZGF0ZShvdGhlci5tdWx0aWhhc2gpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsZXQgZXJyb3JNc2cgPSBlcnIubWVzc2FnZVxuICAgICAgaWYgKCFlcnJvck1zZykgeyAvLyBKdXN0IGluIGNhc2UgbWgudmFsaWRhdGUoKSB0aHJvd3MgYW4gZXJyb3Igd2l0aCBlbXB0eSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGVycm9yTXNnID0gJ011bHRpaGFzaCB2YWxpZGF0aW9uIGZhaWxlZCdcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvck1zZ1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENJRFV0aWxcbiIsIi8qXG4gKiBbaGktYmFzZTMyXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2hpLWJhc2UzMn1cbiAqXG4gKiBAdmVyc2lvbiAwLjUuMFxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE4XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciByb290ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB7fTtcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5ISV9CQVNFMzJfTk9fTk9ERV9KUyAmJiB0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGU7XG4gIGlmIChOT0RFX0pTKSB7XG4gICAgcm9vdCA9IGdsb2JhbDtcbiAgfVxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSElfQkFTRTMyX05PX0NPTU1PTl9KUyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIEFNRCA9IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZDtcbiAgdmFyIEJBU0UzMl9FTkNPREVfQ0hBUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2Nycuc3BsaXQoJycpO1xuICB2YXIgQkFTRTMyX0RFQ09ERV9DSEFSID0ge1xuICAgICdBJzogMCwgJ0InOiAxLCAnQyc6IDIsICdEJzogMywgJ0UnOiA0LCAnRic6IDUsICdHJzogNiwgJ0gnOiA3LCAnSSc6IDgsXG4gICAgJ0onOiA5LCAnSyc6IDEwLCAnTCc6IDExLCAnTSc6IDEyLCAnTic6IDEzLCAnTyc6IDE0LCAnUCc6IDE1LCAnUSc6IDE2LFxuICAgICdSJzogMTcsICdTJzogMTgsICdUJzogMTksICdVJzogMjAsICdWJzogMjEsICdXJzogMjIsICdYJzogMjMsICdZJzogMjQsXG4gICAgJ1onOiAyNSwgJzInOiAyNiwgJzMnOiAyNywgJzQnOiAyOCwgJzUnOiAyOSwgJzYnOiAzMCwgJzcnOiAzMVxuICB9O1xuXG4gIHZhciBibG9ja3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgdmFyIHRocm93SW52YWxpZFV0ZjggPSBmdW5jdGlvbiAocG9zaXRpb24sIHBhcnRpYWwpIHtcbiAgICBpZiAocGFydGlhbC5sZW5ndGggPiAxMCkge1xuICAgICAgcGFydGlhbCA9ICcuLi4nICsgcGFydGlhbC5zdWJzdHIoLTEwKTtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignRGVjb2RlZCBkYXRhIGlzIG5vdCB2YWxpZCBVVEYtOC4nXG4gICAgICArICcgTWF5YmUgdHJ5IGJhc2UzMi5kZWNvZGUuYXNCeXRlcygpPydcbiAgICAgICsgJyBQYXJ0aWFsIGRhdGEgYWZ0ZXIgcmVhZGluZyAnICsgcG9zaXRpb24gKyAnIGJ5dGVzOiAnICsgcGFydGlhbCArICcgPC0nKTtcbiAgICBlcnIucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aHJvdyBlcnI7XG4gIH07XG5cbiAgdmFyIHRvVXRmOFN0cmluZyA9IGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzdHIgPSAnJywgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoLCBpID0gMCwgZm9sbG93aW5nQ2hhcnMgPSAwLCBiLCBjO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBiID0gYnl0ZXNbaSsrXTtcbiAgICAgIGlmIChiIDw9IDB4N0YpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChiID4gMHhCRiAmJiBiIDw9IDB4REYpIHtcbiAgICAgICAgYyA9IGIgJiAweDFGO1xuICAgICAgICBmb2xsb3dpbmdDaGFycyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGIgPD0gMHhFRikge1xuICAgICAgICBjID0gYiAmIDB4MEY7XG4gICAgICAgIGZvbGxvd2luZ0NoYXJzID0gMjtcbiAgICAgIH0gZWxzZSBpZiAoYiA8PSAweEY3KSB7XG4gICAgICAgIGMgPSBiICYgMHgwNztcbiAgICAgICAgZm9sbG93aW5nQ2hhcnMgPSAzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGxvd2luZ0NoYXJzOyArK2opIHtcbiAgICAgICAgYiA9IGJ5dGVzW2krK107XG4gICAgICAgIGlmIChiIDwgMHg4MCB8fCBiID4gMHhCRikge1xuICAgICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBjIDw8PSA2O1xuICAgICAgICBjICs9IGIgJiAweDNGO1xuICAgICAgfVxuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgIHRocm93SW52YWxpZFV0ZjgoaSwgc3RyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjID4gMHgxMEZGRkYpIHtcbiAgICAgICAgdGhyb3dJbnZhbGlkVXRmOChpLCBzdHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYyA8PSAweEZGRkYpIHtcbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjID4+IDEwKSArIDB4RDgwMCk7XG4gICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMHgzRkYpICsgMHhEQzAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICB2YXIgZGVjb2RlQXNCeXRlcyA9IGZ1bmN0aW9uIChiYXNlMzJTdHIpIHtcbiAgICBpZiAoIS9eW0EtWjItNz1dKyQvLnRlc3QoYmFzZTMyU3RyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuICAgIGJhc2UzMlN0ciA9IGJhc2UzMlN0ci5yZXBsYWNlKC89L2csICcnKTtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCBieXRlcyA9IFtdLCBpbmRleCA9IDAsIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG5cbiAgICAvLyA0IGNoYXIgdG8gMyBieXRlc1xuICAgIGZvciAodmFyIGkgPSAwLCBjb3VudCA9IGxlbmd0aCA+PiAzIDw8IDM7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2OCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY1IDw8IDcgfCB2NiA8PCAyIHwgdjcgPj4+IDMpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjcgPDwgNSB8IHY4KSAmIDI1NTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gYnl0ZXNcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMikge1xuICAgICAgdjEgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYyID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjEgPDwgMyB8IHYyID4+PiAyKSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1O1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MiA8PCA2IHwgdjMgPDwgMSB8IHY0ID4+PiA0KSAmIDI1NTtcbiAgICAgIGJ5dGVzW2luZGV4KytdID0gKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTU7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDcpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjMgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY0ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjYgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY3ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTU7XG4gICAgICBieXRlc1tpbmRleCsrXSA9ICh2NCA8PCA0IHwgdjUgPj4+IDEpICYgMjU1O1xuICAgICAgYnl0ZXNbaW5kZXgrK10gPSAodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTU7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbiAgfTtcblxuICB2YXIgZW5jb2RlQXNjaWkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDAsIGNvdW50ID0gcGFyc2VJbnQobGVuZ3RoIC8gNSkgKiA1OyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMgfCB2NSA+Pj4gNSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbdjUgJiAzMV07XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGNoYXJcbiAgICB2YXIgcmVtYWluID0gbGVuZ3RoIC0gY291bnQ7XG4gICAgaWYgKHJlbWFpbiA9PT0gMSkge1xuICAgICAgdjEgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyKSAmIDMxXSArXG4gICAgICAgICc9PT09PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAnPT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDMpIHtcbiAgICAgIHYxID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIHYzID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxKSAmIDMxXSArXG4gICAgICAgICc9PT0nO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MiA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2MyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICB2NCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyID4+PiAxKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPj4+IDIpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICc9JztcbiAgICB9XG4gICAgcmV0dXJuIGJhc2UzMlN0cjtcbiAgfTtcblxuICB2YXIgZW5jb2RlVXRmOCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgdjEsIHYyLCB2MywgdjQsIHY1LCBjb2RlLCBlbmQgPSBmYWxzZSwgYmFzZTMyU3RyID0gJycsXG4gICAgICBpbmRleCA9IDAsIGksIHN0YXJ0ID0gMCwgYnl0ZXMgPSAwLCBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIGRvIHtcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1s1XTtcbiAgICAgIGJsb2Nrc1sxXSA9IGJsb2Nrc1s2XTtcbiAgICAgIGJsb2Nrc1syXSA9IGJsb2Nrc1s3XTtcbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgNTsgKytpbmRleCkge1xuICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoY29kZSA8IDB4ODApIHtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGMwIHwgKGNvZGUgPj4gNik7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweDgwIHwgKGNvZGUgJiAweDNmKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHhkODAwIHx8IGNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGUwIHwgKGNvZGUgPj4gMTIpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8IChjb2RlICYgMHgzZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2luZGV4KSAmIDB4M2ZmKSk7XG4gICAgICAgICAgYmxvY2tzW2krK10gPSAweGYwIHwgKGNvZGUgPj4gMTgpO1xuICAgICAgICAgIGJsb2Nrc1tpKytdID0gMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKTtcbiAgICAgICAgICBibG9ja3NbaSsrXSA9IDB4ODAgfCAoY29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBieXRlcyArPSBpIC0gc3RhcnQ7XG4gICAgICBzdGFydCA9IGkgLSA1O1xuICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgKytpbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+IGxlbmd0aCAmJiBpIDwgNikge1xuICAgICAgICBlbmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdjEgPSBibG9ja3NbMF07XG4gICAgICBpZiAoaSA+IDQpIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgdjUgPSBibG9ja3NbNF07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSB8IHY0ID4+PiA3KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSW3Y1ICYgMzFdO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAxKSB7XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgICAnPT09PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCkgJiAzMV0gK1xuICAgICAgICAgICc9PT09JztcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICB2MiA9IGJsb2Nrc1sxXTtcbiAgICAgICAgdjMgPSBibG9ja3NbMl07XG4gICAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIgfCB2MiA+Pj4gNikgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjMgPDwgMSkgJiAzMV0gK1xuICAgICAgICAgICc9PT0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdjIgPSBibG9ja3NbMV07XG4gICAgICAgIHYzID0gYmxvY2tzWzJdO1xuICAgICAgICB2NCA9IGJsb2Nrc1szXTtcbiAgICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPDwgNCB8IHYzID4+PiA0KSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA8PCAzKSAmIDMxXSArXG4gICAgICAgICAgJz0nO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKCFlbmQpO1xuICAgIHJldHVybiBiYXNlMzJTdHI7XG4gIH07XG5cbiAgdmFyIGVuY29kZUJ5dGVzID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgYmFzZTMyU3RyID0gJycsIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBwYXJzZUludChsZW5ndGggLyA1KSAqIDU7IGkgPCBjb3VudDspIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY1ID0gYnl0ZXNbaSsrXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEgfCB2NCA+Pj4gNykgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0ID4+PiAyKSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjQgPDwgMyB8IHY1ID4+PiA1KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlt2NSAmIDMxXTtcbiAgICB9XG5cbiAgICAvLyByZW1haW4gY2hhclxuICAgIHZhciByZW1haW4gPSBsZW5ndGggLSBjb3VudDtcbiAgICBpZiAocmVtYWluID09PSAxKSB7XG4gICAgICB2MSA9IGJ5dGVzW2ldO1xuICAgICAgYmFzZTMyU3RyICs9IEJBU0UzMl9FTkNPREVfQ0hBUlt2MSA+Pj4gM10gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYxIDw8IDIpICYgMzFdICtcbiAgICAgICAgJz09PT09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0KSAmIDMxXSArXG4gICAgICAgICc9PT09JztcbiAgICB9IGVsc2UgaWYgKHJlbWFpbiA9PT0gMykge1xuICAgICAgdjEgPSBieXRlc1tpKytdO1xuICAgICAgdjIgPSBieXRlc1tpKytdO1xuICAgICAgdjMgPSBieXRlc1tpXTtcbiAgICAgIGJhc2UzMlN0ciArPSBCQVNFMzJfRU5DT0RFX0NIQVJbdjEgPj4+IDNdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MSA8PCAyIHwgdjIgPj4+IDYpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA+Pj4gMSkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYyIDw8IDQgfCB2MyA+Pj4gNCkgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHYzIDw8IDEpICYgMzFdICtcbiAgICAgICAgJz09PSc7XG4gICAgfSBlbHNlIGlmIChyZW1haW4gPT09IDQpIHtcbiAgICAgIHYxID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYyID0gYnl0ZXNbaSsrXTtcbiAgICAgIHYzID0gYnl0ZXNbaSsrXTtcbiAgICAgIHY0ID0gYnl0ZXNbaV07XG4gICAgICBiYXNlMzJTdHIgKz0gQkFTRTMyX0VOQ09ERV9DSEFSW3YxID4+PiAzXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjEgPDwgMiB8IHYyID4+PiA2KSAmIDMxXSArXG4gICAgICAgIEJBU0UzMl9FTkNPREVfQ0hBUlsodjIgPj4+IDEpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MiA8PCA0IHwgdjMgPj4+IDQpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2MyA8PCAxIHwgdjQgPj4+IDcpICYgMzFdICtcbiAgICAgICAgQkFTRTMyX0VOQ09ERV9DSEFSWyh2NCA+Pj4gMikgJiAzMV0gK1xuICAgICAgICBCQVNFMzJfRU5DT0RFX0NIQVJbKHY0IDw8IDMpICYgMzFdICtcbiAgICAgICAgJz0nO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTMyU3RyO1xuICB9O1xuXG4gIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQsIGFzY2lpT25seSkge1xuICAgIHZhciBub3RTdHJpbmcgPSB0eXBlb2YoaW5wdXQpICE9PSAnc3RyaW5nJztcbiAgICBpZiAobm90U3RyaW5nICYmIGlucHV0LmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgaW5wdXQgPSBuZXcgVWludDhBcnJheShpbnB1dCk7XG4gICAgfVxuICAgIGlmIChub3RTdHJpbmcpIHtcbiAgICAgIHJldHVybiBlbmNvZGVCeXRlcyhpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChhc2NpaU9ubHkpIHtcbiAgICAgIHJldHVybiBlbmNvZGVBc2NpaShpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmNvZGVVdGY4KGlucHV0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChiYXNlMzJTdHIsIGFzY2lpT25seSkge1xuICAgIGlmICghYXNjaWlPbmx5KSB7XG4gICAgICByZXR1cm4gdG9VdGY4U3RyaW5nKGRlY29kZUFzQnl0ZXMoYmFzZTMyU3RyKSk7XG4gICAgfVxuICAgIGlmICghL15bQS1aMi03PV0rJC8udGVzdChiYXNlMzJTdHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgdmFyIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgc3RyID0gJycsIGxlbmd0aCA9IGJhc2UzMlN0ci5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gLTEpIHtcbiAgICAgIGxlbmd0aCA9IGJhc2UzMlN0ci5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gOCBjaGFyIHRvIDUgYnl0ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgY291bnQgPSBsZW5ndGggPj4gMyA8PCAzOyBpIDwgY291bnQ7KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjggPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjUgPDwgNyB8IHY2IDw8IDIgfCB2NyA+Pj4gMykgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjcgPDwgNSB8IHY4KSAmIDI1NSk7XG4gICAgfVxuXG4gICAgLy8gcmVtYWluIGJ5dGVzXG4gICAgdmFyIHJlbWFpbiA9IGxlbmd0aCAtIGNvdW50O1xuICAgIGlmIChyZW1haW4gPT09IDIpIHtcbiAgICAgIHYxID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2MiA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA0KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA1KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2MSA8PCAzIHwgdjIgPj4+IDIpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHYyIDw8IDYgfCB2MyA8PCAxIHwgdjQgPj4+IDQpICYgMjU1KSArXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoKHY0IDw8IDQgfCB2NSA+Pj4gMSkgJiAyNTUpO1xuICAgIH0gZWxzZSBpZiAocmVtYWluID09PSA3KSB7XG4gICAgICB2MSA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjIgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHYzID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NCA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgdjUgPSBCQVNFMzJfREVDT0RFX0NIQVJbYmFzZTMyU3RyLmNoYXJBdChpKyspXTtcbiAgICAgIHY2ID0gQkFTRTMyX0RFQ09ERV9DSEFSW2Jhc2UzMlN0ci5jaGFyQXQoaSsrKV07XG4gICAgICB2NyA9IEJBU0UzMl9ERUNPREVfQ0hBUltiYXNlMzJTdHIuY2hhckF0KGkrKyldO1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKHYxIDw8IDMgfCB2MiA+Pj4gMikgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjIgPDwgNiB8IHYzIDw8IDEgfCB2NCA+Pj4gNCkgJiAyNTUpICtcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgodjQgPDwgNCB8IHY1ID4+PiAxKSAmIDI1NSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCh2NSA8PCA3IHwgdjYgPDwgMiB8IHY3ID4+PiAzKSAmIDI1NSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgdmFyIGV4cG9ydHMgPSB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlOiBkZWNvZGVcbiAgfTtcbiAgZGVjb2RlLmFzQnl0ZXMgPSBkZWNvZGVBc0J5dGVzO1xuXG4gIGlmIChDT01NT05fSlMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5iYXNlMzIgPSBleHBvcnRzO1xuICAgIGlmIChBTUQpIHtcbiAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG11bHRpYWRkciA9IHJlcXVpcmUoJ211bHRpYWRkcicpXG5cbi8qXG4gKiBWYWxpZCBjb21iaW5hdGlvbnNcbiAqL1xuY29uc3QgRE5TNCA9IGJhc2UoJ2RuczQnKVxuY29uc3QgRE5TNiA9IGJhc2UoJ2RuczYnKVxuY29uc3QgRE5TID0gb3IoXG4gIGJhc2UoJ2RucycpLFxuICBiYXNlKCdkbnNhZGRyJyksXG4gIEROUzQsXG4gIEROUzZcbilcblxuY29uc3QgSVAgPSBvcihiYXNlKCdpcDQnKSwgYmFzZSgnaXA2JykpXG5jb25zdCBUQ1AgPSBvcihcbiAgYW5kKElQLCBiYXNlKCd0Y3AnKSksXG4gIGFuZChETlMsIGJhc2UoJ3RjcCcpKVxuKVxuY29uc3QgVURQID0gYW5kKElQLCBiYXNlKCd1ZHAnKSlcbmNvbnN0IFVUUCA9IGFuZChVRFAsIGJhc2UoJ3V0cCcpKVxuXG5jb25zdCBXZWJTb2NrZXRzID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzJykpLFxuICBhbmQoRE5TLCBiYXNlKCd3cycpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRzU2VjdXJlID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ3dzcycpKSxcbiAgYW5kKEROUywgYmFzZSgnd3NzJykpXG4pXG5cbmNvbnN0IEhUVFAgPSBvcihcbiAgYW5kKFRDUCwgYmFzZSgnaHR0cCcpKSxcbiAgYW5kKElQLCBiYXNlKCdodHRwJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwJykpXG4pXG5cbmNvbnN0IEhUVFBTID0gb3IoXG4gIGFuZChUQ1AsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoSVAsIGJhc2UoJ2h0dHBzJykpLFxuICBhbmQoRE5TLCBiYXNlKCdodHRwcycpKVxuKVxuXG5jb25zdCBXZWJSVENTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2VicnRjLXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnJ0Yy1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJydGMtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJTb2NrZXRTdGFyID0gb3IoXG4gIGFuZChXZWJTb2NrZXRzLCBiYXNlKCdwMnAtd2Vic29ja2V0LXN0YXInKSwgYmFzZSgncDJwJykpLFxuICBhbmQoV2ViU29ja2V0c1NlY3VyZSwgYmFzZSgncDJwLXdlYnNvY2tldC1zdGFyJyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFdlYlNvY2tldHMsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKSxcbiAgYW5kKFdlYlNvY2tldHNTZWN1cmUsIGJhc2UoJ3AycC13ZWJzb2NrZXQtc3RhcicpKVxuKVxuXG5jb25zdCBXZWJSVENEaXJlY3QgPSBvcihcbiAgYW5kKEhUVFAsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpLFxuICBhbmQoSFRUUFMsIGJhc2UoJ3AycC13ZWJydGMtZGlyZWN0JykpXG4pXG5cbmNvbnN0IFJlbGlhYmxlID0gb3IoXG4gIFdlYlNvY2tldHMsXG4gIFdlYlNvY2tldHNTZWN1cmUsXG4gIEhUVFAsXG4gIEhUVFBTLFxuICBXZWJSVENTdGFyLFxuICBXZWJSVENEaXJlY3QsXG4gIFRDUCxcbiAgVVRQXG4pXG5cbi8vIFVubGlrZSB3cy1zdGFyLCBzdGFyZHVzdCBjYW4gcnVuIG92ZXIgYW55IHRyYW5zcG9ydCB0aHVzIHJlbW92aW5nIHRoZSByZXF1aXJlbWVudCBmb3Igd2Vic29ja2V0cyAoYnV0IGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQgcnVubmluZyBhIHN0YXJkdXN0IHNlcnZlciBvdmVyIHdlYnJ0Yy1zdGFyIDspIClcbmNvbnN0IFN0YXJkdXN0ID0gb3IoXG4gIGFuZChSZWxpYWJsZSwgYmFzZSgncDJwLXN0YXJkdXN0JyksIGJhc2UoJ3AycCcpKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtc3RhcmR1c3QnKSlcbilcblxuY29uc3QgX1AyUCA9IG9yKFxuICBhbmQoUmVsaWFibGUsIGJhc2UoJ3AycCcpKSxcbiAgV2ViUlRDU3RhcixcbiAgYmFzZSgncDJwJylcbilcblxuY29uc3QgX0NpcmN1aXQgPSBvcihcbiAgYW5kKF9QMlAsIGJhc2UoJ3AycC1jaXJjdWl0JyksIF9QMlApLFxuICBhbmQoX1AyUCwgYmFzZSgncDJwLWNpcmN1aXQnKSksXG4gIGFuZChiYXNlKCdwMnAtY2lyY3VpdCcpLCBfUDJQKSxcbiAgYW5kKFJlbGlhYmxlLCBiYXNlKCdwMnAtY2lyY3VpdCcpKSxcbiAgYW5kKGJhc2UoJ3AycC1jaXJjdWl0JyksIFJlbGlhYmxlKSxcbiAgYmFzZSgncDJwLWNpcmN1aXQnKVxuKVxuXG5jb25zdCBDaXJjdWl0UmVjdXJzaXZlID0gKCkgPT4gb3IoXG4gIGFuZChfQ2lyY3VpdCwgQ2lyY3VpdFJlY3Vyc2l2ZSksXG4gIF9DaXJjdWl0XG4pXG5cbmNvbnN0IENpcmN1aXQgPSBDaXJjdWl0UmVjdXJzaXZlKClcblxuY29uc3QgUDJQID0gb3IoXG4gIGFuZChDaXJjdWl0LCBfUDJQLCBDaXJjdWl0KSxcbiAgYW5kKF9QMlAsIENpcmN1aXQpLFxuICBhbmQoQ2lyY3VpdCwgX1AyUCksXG4gIENpcmN1aXQsXG4gIF9QMlBcbilcblxuZXhwb3J0cy5ETlMgPSBETlNcbmV4cG9ydHMuRE5TNCA9IEROUzRcbmV4cG9ydHMuRE5TNiA9IEROUzZcbmV4cG9ydHMuSVAgPSBJUFxuZXhwb3J0cy5UQ1AgPSBUQ1BcbmV4cG9ydHMuVURQID0gVURQXG5leHBvcnRzLlVUUCA9IFVUUFxuZXhwb3J0cy5IVFRQID0gSFRUUFxuZXhwb3J0cy5IVFRQUyA9IEhUVFBTXG5leHBvcnRzLldlYlNvY2tldHMgPSBXZWJTb2NrZXRzXG5leHBvcnRzLldlYlNvY2tldHNTZWN1cmUgPSBXZWJTb2NrZXRzU2VjdXJlXG5leHBvcnRzLldlYlNvY2tldFN0YXIgPSBXZWJTb2NrZXRTdGFyXG5leHBvcnRzLldlYlJUQ1N0YXIgPSBXZWJSVENTdGFyXG5leHBvcnRzLldlYlJUQ0RpcmVjdCA9IFdlYlJUQ0RpcmVjdFxuZXhwb3J0cy5SZWxpYWJsZSA9IFJlbGlhYmxlXG5leHBvcnRzLlN0YXJkdXN0ID0gU3RhcmR1c3RcbmV4cG9ydHMuQ2lyY3VpdCA9IENpcmN1aXRcbmV4cG9ydHMuUDJQID0gUDJQXG5leHBvcnRzLklQRlMgPSBQMlBcblxuLypcbiAqIFZhbGlkYXRpb24gZnVuY3NcbiAqL1xuXG5mdW5jdGlvbiBtYWtlTWF0Y2hlc0Z1bmN0aW9uIChwYXJ0aWFsTWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAoIW11bHRpYWRkci5pc011bHRpYWRkcihhKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IG11bHRpYWRkcihhKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7IC8vIGNhdGNoIGVycm9yXG4gICAgICAgIHJldHVybiBmYWxzZSAvLyBhbHNvIGlmIGl0J3MgaW52YWxpZCBpdCdzIHByb3BhYmx5IG5vdCBtYXRjaGluZyBhcyB3ZWxsIHNvIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvdXQgPSBwYXJ0aWFsTWF0Y2goYS5wcm90b05hbWVzKCkpXG4gICAgaWYgKG91dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBvdXQubGVuZ3RoID09PSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gYW5kICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuICBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2ggKGEpIHtcbiAgICBpZiAoYS5sZW5ndGggPCBhcmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGEgPSB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gYXJnKCkucGFydGlhbE1hdGNoKGEpXG4gICAgICAgIDogYXJnLnBhcnRpYWxNYXRjaChhKVxuXG4gICAgICBpZiAoYSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gYVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gJ3sgJyArIGFyZ3Muam9pbignICcpICsgJyB9JyB9LFxuICAgIGlucHV0OiBhcmdzLFxuICAgIG1hdGNoZXM6IG1ha2VNYXRjaGVzRnVuY3Rpb24ocGFydGlhbE1hdGNoKSxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG5cbmZ1bmN0aW9uIG9yICgpIHtcbiAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKVxuXG4gIGZ1bmN0aW9uIHBhcnRpYWxNYXRjaCAoYSkge1xuICAgIGxldCBvdXQgPSBudWxsXG4gICAgYXJncy5zb21lKChhcmcpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBhcmcoKS5wYXJ0aWFsTWF0Y2goYSlcbiAgICAgICAgOiBhcmcucGFydGlhbE1hdGNoKGEpXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIG91dCA9IHJlc1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICd7ICcgKyBhcmdzLmpvaW4oJyAnKSArICcgfScgfSxcbiAgICBpbnB1dDogYXJncyxcbiAgICBtYXRjaGVzOiBtYWtlTWF0Y2hlc0Z1bmN0aW9uKHBhcnRpYWxNYXRjaCksXG4gICAgcGFydGlhbE1hdGNoOiBwYXJ0aWFsTWF0Y2hcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gYmFzZSAobikge1xuICBjb25zdCBuYW1lID0gblxuXG4gIGZ1bmN0aW9uIG1hdGNoZXMgKGEpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gbXVsdGlhZGRyKGEpXG4gICAgICB9IGNhdGNoIChlcnIpIHsgLy8gY2F0Y2ggZXJyb3JcbiAgICAgICAgcmV0dXJuIGZhbHNlIC8vIGFsc28gaWYgaXQncyBpbnZhbGlkIGl0J3MgcHJvcGFibHkgbm90IG1hdGNoaW5nIGFzIHdlbGwgc28gcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG5hbWVzID0gYS5wcm90b05hbWVzKClcbiAgICBpZiAocG5hbWVzLmxlbmd0aCA9PT0gMSAmJiBwbmFtZXNbMF0gPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFydGlhbE1hdGNoIChwcm90b3MpIHtcbiAgICBpZiAocHJvdG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAocHJvdG9zWzBdID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gcHJvdG9zLnNsaWNlKDEpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYW1lIH0sXG4gICAgbWF0Y2hlczogbWF0Y2hlcyxcbiAgICBwYXJ0aWFsTWF0Y2g6IHBhcnRpYWxNYXRjaFxuICB9XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaFBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgaXBmc1Bpbkhhc2gsIG5ld1BpblBvbGljeSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG4gICAgdmFsaWRhdGVQaW5Qb2xpY3lTdHJ1Y3R1cmUobmV3UGluUG9saWN5KTtcblxuICAgIGlmICghaXBmc1Bpbkhhc2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGZzUGluSGFzaCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgdGhlIHBpbiBwb2xpY3kgb2YgYSBwaW4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSVBGUy5jaWQoaXBmc1Bpbkhhc2gpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaXBmc1Bpbkhhc2ggdmFsdWUgaXMgYW4gaW52YWxpZCBJUEZTIENJRCcpO1xuICAgIH1cblxuICAgIGlmICghbmV3UGluUG9saWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbmV3UGluUG9saWN5IGlzIHJlcXVpcmVkIGZvciBjaGFuZ2luZyB0aGUgcGluIHBvbGljeSBvZiBhIHBpbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9oYXNoUGluUG9saWN5YDtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBpcGZzUGluSGFzaDogaXBmc1Bpbkhhc2gsXG4gICAgICAgIG5ld1BpblBvbGljeTogbmV3UGluUG9saWN5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBwaW4gcG9saWN5IGZvciBoYXNoOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkZpbGVUb0lQRlMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIHJlYWRTdHJlYW0sIG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IE5vZGVGb3JtRGF0YSgpO1xuXG4gICAgICAgIGRhdGEuYXBwZW5kKCdmaWxlJywgcmVhZFN0cmVhbSk7XG5cbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkZpbGVUb0lQRlNgO1xuXG4gICAgICAgIGlmICghKHJlYWRTdHJlYW0gaW5zdGFuY2VvZiBzdHJlYW0uUmVhZGFibGUpKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdyZWFkU3RyZWFtIGlzIG5vdCBhIHJlYWRhYmxlIHN0cmVhbScpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlTWV0YWRhdGEob3B0aW9ucy5waW5hdGFNZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BpbmF0YU1ldGFkYXRhJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGluYXRhT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiAnSW5maW5pdHknLCAvL3RoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYXhpb3MgZnJvbSBlcnJvcmluZyBvdXQgd2l0aCBsYXJnZSBmaWxlc1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0gJHtkYXRhLl9ib3VuZGFyeX1gLFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBwaW5uaW5nIEZpbGUgdG8gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsIi8qIVxuICogbWltZS10eXBlc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRiID0gcmVxdWlyZSgnbWltZS1kYicpXG52YXIgZXh0bmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5leHRuYW1lXG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIEVYVFJBQ1RfVFlQRV9SRUdFWFAgPSAvXlxccyooW147XFxzXSopKD86O3xcXHN8JCkvXG52YXIgVEVYVF9UWVBFX1JFR0VYUCA9IC9edGV4dFxcLy9pXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKiBAcHVibGljXG4gKi9cblxuZXhwb3J0cy5jaGFyc2V0ID0gY2hhcnNldFxuZXhwb3J0cy5jaGFyc2V0cyA9IHsgbG9va3VwOiBjaGFyc2V0IH1cbmV4cG9ydHMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuZXhwb3J0cy5leHRlbnNpb24gPSBleHRlbnNpb25cbmV4cG9ydHMuZXh0ZW5zaW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbClcbmV4cG9ydHMubG9va3VwID0gbG9va3VwXG5leHBvcnRzLnR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vLyBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucy90eXBlcyBtYXBzXG5wb3B1bGF0ZU1hcHMoZXhwb3J0cy5leHRlbnNpb25zLCBleHBvcnRzLnR5cGVzKVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBjaGFyc2V0IGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY2hhcnNldCAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG4gIHZhciBtaW1lID0gbWF0Y2ggJiYgZGJbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAobWltZSAmJiBtaW1lLmNoYXJzZXQpIHtcbiAgICByZXR1cm4gbWltZS5jaGFyc2V0XG4gIH1cblxuICAvLyBkZWZhdWx0IHRleHQvKiB0byB1dGYtOFxuICBpZiAobWF0Y2ggJiYgVEVYVF9UWVBFX1JFR0VYUC50ZXN0KG1hdGNoWzFdKSkge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmdWxsIENvbnRlbnQtVHlwZSBoZWFkZXIgZ2l2ZW4gYSBNSU1FIHR5cGUgb3IgZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlIChzdHIpIHtcbiAgLy8gVE9ETzogc2hvdWxkIHRoaXMgZXZlbiBiZSBpbiB0aGlzIG1vZHVsZT9cbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBtaW1lID0gc3RyLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IGV4cG9ydHMubG9va3VwKHN0cilcbiAgICA6IHN0clxuXG4gIGlmICghbWltZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIGNvbnRlbnQtdHlwZSBvciBvdGhlciBtb2R1bGVcbiAgaWYgKG1pbWUuaW5kZXhPZignY2hhcnNldCcpID09PSAtMSkge1xuICAgIHZhciBjaGFyc2V0ID0gZXhwb3J0cy5jaGFyc2V0KG1pbWUpXG4gICAgaWYgKGNoYXJzZXQpIG1pbWUgKz0gJzsgY2hhcnNldD0nICsgY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gbWltZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBleHRlbnNpb24gKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuXG4gIC8vIGdldCBleHRlbnNpb25zXG4gIHZhciBleHRzID0gbWF0Y2ggJiYgZXhwb3J0cy5leHRlbnNpb25zW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4dHNbMF1cbn1cblxuLyoqXG4gKiBMb29rdXAgdGhlIE1JTUUgdHlwZSBmb3IgYSBmaWxlIHBhdGgvZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBsb29rdXAgKHBhdGgpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gZ2V0IHRoZSBleHRlbnNpb24gKFwiZXh0XCIgb3IgXCIuZXh0XCIgb3IgZnVsbCBwYXRoKVxuICB2YXIgZXh0ZW5zaW9uID0gZXh0bmFtZSgneC4nICsgcGF0aClcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zdWJzdHIoMSlcblxuICBpZiAoIWV4dGVuc2lvbikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydHMudHlwZXNbZXh0ZW5zaW9uXSB8fCBmYWxzZVxufVxuXG4vKipcbiAqIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zIGFuZCB0eXBlcyBtYXBzLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwb3B1bGF0ZU1hcHMgKGV4dGVuc2lvbnMsIHR5cGVzKSB7XG4gIC8vIHNvdXJjZSBwcmVmZXJlbmNlIChsZWFzdCAtPiBtb3N0KVxuICB2YXIgcHJlZmVyZW5jZSA9IFsnbmdpbngnLCAnYXBhY2hlJywgdW5kZWZpbmVkLCAnaWFuYSddXG5cbiAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaE1pbWVUeXBlICh0eXBlKSB7XG4gICAgdmFyIG1pbWUgPSBkYlt0eXBlXVxuICAgIHZhciBleHRzID0gbWltZS5leHRlbnNpb25zXG5cbiAgICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBtaW1lIC0+IGV4dGVuc2lvbnNcbiAgICBleHRlbnNpb25zW3R5cGVdID0gZXh0c1xuXG4gICAgLy8gZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBleHRzW2ldXG5cbiAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dKSB7XG4gICAgICAgIHZhciBmcm9tID0gcHJlZmVyZW5jZS5pbmRleE9mKGRiW3R5cGVzW2V4dGVuc2lvbl1dLnNvdXJjZSlcbiAgICAgICAgdmFyIHRvID0gcHJlZmVyZW5jZS5pbmRleE9mKG1pbWUuc291cmNlKVxuXG4gICAgICAgIGlmICh0eXBlc1tleHRlbnNpb25dICE9PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyAmJlxuICAgICAgICAgIChmcm9tID4gdG8gfHwgKGZyb20gPT09IHRvICYmIHR5cGVzW2V4dGVuc2lvbl0uc3Vic3RyKDAsIDEyKSA9PT0gJ2FwcGxpY2F0aW9uLycpKSkge1xuICAgICAgICAgIC8vIHNraXAgdGhlIHJlbWFwcGluZ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHRoZSBleHRlbnNpb24gLT4gbWltZVxuICAgICAgdHlwZXNbZXh0ZW5zaW9uXSA9IHR5cGVcbiAgICB9XG4gIH0pXG59XG4iLCIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gcGFyYWxsZWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHBhcmFsbGVsXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gcGFyYWxsZWwobGlzdCwgaXRlcmF0b3IsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCk7XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gIHtcbiAgICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdClcbiAgICB7XG4gICAgICBpZiAoZXJyb3IpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGxvb2tzIGxpa2UgaXQncyB0aGUgbGFzdCBvbmVcbiAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5sZW5ndGggPT09IDApXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5pbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1pbmF0b3IuYmluZChzdGF0ZSwgY2FsbGJhY2spO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBkZWZlcjtcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBmdW5jdGlvbiB0byBydW5cbiAqL1xuZnVuY3Rpb24gZGVmZXIoZm4pXG57XG4gIHZhciBuZXh0VGljayA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2V0SW1tZWRpYXRlXG4gICAgOiAoXG4gICAgICB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy5uZXh0VGljayA9PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb2Nlc3MubmV4dFRpY2tcbiAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgaWYgKG5leHRUaWNrKVxuICB7XG4gICAgbmV4dFRpY2soZm4pO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHNldFRpbWVvdXQoZm4sIDApO1xuICB9XG59XG4iLCJ2YXIgc2VyaWFsT3JkZXJlZCA9IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgcmV0dXJuIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIG51bGwsIGNhbGxiYWNrKTtcbn1cbiIsIi8vIHBvcHVsYXRlcyBtaXNzaW5nIHZhbHVlc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkc3QsIHNyYykge1xuXG4gIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihwcm9wKVxuICB7XG4gICAgZHN0W3Byb3BdID0gZHN0W3Byb3BdIHx8IHNyY1twcm9wXTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRzdDtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzLCB2YWxpZGF0ZU1ldGFkYXRhLCB2YWxpZGF0ZVBpbmF0YU9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgYmFzZVBhdGhDb252ZXJ0ZXIgZnJvbSAnYmFzZS1wYXRoLWNvbnZlcnRlcic7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCByZWN1cnNpdmUgPSByZXF1aXJlKCdyZWN1cnNpdmUtZnMnKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluRnJvbUZTKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5LCBzb3VyY2VQYXRoLCBvcHRpb25zKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5GaWxlVG9JUEZTYDtcblxuICAgICAgICByZWN1cnNpdmUucmVhZGRpcnIoc291cmNlUGF0aCwgZnVuY3Rpb24gKGVyciwgZGlycywgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IG5ldyBOb2RlRm9ybURhdGEoKTtcblxuICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vZm9yIGVhY2ggZmlsZSBzdHJlYW0sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgY29ycmVjdCByZWxhdGl2ZSBmaWxlIHBhdGhcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgnZmlsZScsIGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSksIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGg6IGJhc2VQYXRoQ29udmVydGVyKHNvdXJjZVBhdGgsIGZpbGUpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5waW5hdGFNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgncGluYXRhTWV0YWRhdGEnLCBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQaW5hdGFPcHRpb25zKG9wdGlvbnMucGluYXRhT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdwaW5hdGFPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5waW5hdGFPcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBheGlvcy5wb3N0KFxuICAgICAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6ICdJbmZpbml0eScsIC8vdGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBheGlvcyBmcm9tIGVycm9yaW5nIG91dCB3aXRoIGxhcmdlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LXR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9ICR7ZGF0YS5fYm91bmRhcnl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcGlubmluZyBGaWxlIHRvIElQRlM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiZnVuY3Rpb24gY29udmVydEZpbGVQYXRoVG9CYXNlRGlyZWN0b3J5UGF0aChzb3VyY2VQYXRoLCBmaWxlUGF0aCkge1xuICAgIGxldCBuZXdTdHJpbmcgPSAoc291cmNlUGF0aC5zdGFydHNXaXRoKCcuLycpID8gc291cmNlUGF0aC5zdWJzdHJpbmcoMikgOiBzb3VyY2VQYXRoKTtcbiAgICAvL21ha2Ugc3VyZSB0aGVyZSBpc24ndCBhIGRhbmdsaW5nIC8gdG8gdGhyb3cgYSBmYWxzZSBwb3NpdGl2ZSBpbnRvIHRoZSBtaXhcbiAgICBjb25zdCBsYXN0SW5kZXhPZkRpcmVjdG9yeSA9IG5ld1N0cmluZy5sYXN0SW5kZXhPZignLycpO1xuICAgIGlmKGxhc3RJbmRleE9mRGlyZWN0b3J5ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgfVxuICAgIGNvbnN0IGxlbmd0aE9mU291cmNlID0gc291cmNlUGF0aC5sZW5ndGg7XG4gICAgLy9vbmx5IHRyaW0gaWYgdGhlIC8gaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmdcbiAgICBpZiAobGFzdEluZGV4T2ZEaXJlY3RvcnkgPT09IChsZW5ndGhPZlNvdXJjZSAtIDEpKSB7XG4gICAgICAgIG5ld1N0cmluZyA9IHNvdXJjZVBhdGguc2xpY2UoMCwtMSk7XG4gICAgfVxuXG4gICAgLy9ub3cgdGhhdCB3ZSdyZSBzdXJlIG9mIG5vIGZhbHNlIHBvc2l0aXZlLCBsZXQncyBjaGVjayBhbmQgc2VlIHdoZXJlIHRoZSBcInJvb3RcIiBkaXJlY3RvcnkgaXNcbiAgICBjb25zdCBuZXdMYXN0SW5kZXggPSBuZXdTdHJpbmcubGFzdEluZGV4T2YoJy8nKTtcbiAgICBpZiAoIG5ld0xhc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXRoR2FyYmFnZSA9IG5ld1N0cmluZy5zdWJzdHJpbmcoMCwgbmV3TGFzdEluZGV4ICsgMSk7XG4gICAgICAgIG5ld1N0cmluZyA9IGZpbGVQYXRoLnNwbGl0KHBhdGhHYXJiYWdlKVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3U3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnRGaWxlUGF0aFRvQmFzZURpcmVjdG9yeVBhdGgiLCJcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkZGlycjogcmVxdWlyZSgnLi9saWIvcmVhZGRpcnInKS5yZWFkZGlycixcblxuICBybWRpcnI6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZGlycixcbiAgcm1kaXJzOiByZXF1aXJlKCcuL2xpYi9ybWRpcnInKS5ybWRpcnMsXG4gIHJtZmlsZXM6IHJlcXVpcmUoJy4vbGliL3JtZGlycicpLnJtZmlsZXMsXG5cbiAgY3BkaXJyOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGRpcnIsXG4gIGNwZGlyczogcmVxdWlyZSgnLi9saWIvY3BkaXJyJykuY3BkaXJzLFxuICBjcGZpbGVzOiByZXF1aXJlKCcuL2xpYi9jcGRpcnInKS5jcGZpbGVzXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cywgdmFsaWRhdGVNZXRhZGF0YSwgdmFsaWRhdGVQaW5hdGFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSlNPTlRvSVBGUyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgYm9keSwgb3B0aW9ucykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgcmVxdWVzdEJvZHkgPSBib2R5O1xuXG4gICAgaWYgKHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBwaW5hdGFDb250ZW50OiBib2R5XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU1ldGFkYXRhKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZU1ldGFkYXRhKG9wdGlvbnMucGluYXRhTWV0YWRhdGEpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhTWV0YWRhdGEgPSBvcHRpb25zLnBpbmF0YU1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBpbmF0YU9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlUGluYXRhT3B0aW9ucyhvcHRpb25zLnBpbmF0YU9wdGlvbnMpO1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucGluYXRhT3B0aW9ucyA9IG9wdGlvbnMucGluYXRhT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vcGlubmluZy9waW5KU09OVG9JUEZTYDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoXG4gICAgICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIHBpbm5pbmcgSlNPTiB0byBJUEZTOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHZhbGlkYXRlQXBpS2V5cyB9IGZyb20gJy4uLy4uLy4uL3V0aWwvdmFsaWRhdG9ycyc7XG5pbXBvcnQgcXVlcnlCdWlsZGVyIGZyb20gJy4vcXVlcnlCdWlsZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGluSm9icyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgZmlsdGVycykge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3BpbkpvYnNgO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgICAgZW5kcG9pbnQgPSBxdWVyeUJ1aWxkZXIoZW5kcG9pbnQsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLmdldChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfYXBpX2tleSc6IHBpbmF0YUFwaUtleSxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9zZWNyZXRfYXBpX2tleSc6IHBpbmF0YVNlY3JldEFwaUtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYHVua25vd24gc2VydmVyIHJlc3BvbnNlIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgcGluIGpvYnM6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0LmRhdGEpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vICBoYW5kbGUgZXJyb3IgaGVyZVxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlICYmIGVycm9yLnJlc3BvbnNlLmRhdGEgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBpc0lQRlMgZnJvbSAnaXMtaXBmcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1ZXJ5QnVpbGRlcihiYXNlVXJsLCBmaWx0ZXJzKSB7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gYmFzZVVybCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVycykge1xuICAgICAgICByZXR1cm4gYmFzZVVybDtcbiAgICB9XG5cbiAgICBsZXQgbmV3VXJsID0gYmFzZVVybDtcblxuICAgIGxldCBmaXJzdEZpbHRlckFwcGxpZWQgPSBmYWxzZTsgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgXCI/XCIgY2hhcmFjdGVyIGlzIG9ubHkgYXBwbGllZCBvbmNlXG5cbiAgICBmdW5jdGlvbiBhZGRGaWx0ZXIobmV3RmlsdGVyKSB7XG4gICAgICAgIGlmIChmaXJzdEZpbHRlckFwcGxpZWQpIHtcbiAgICAgICAgICAgIG5ld1VybCA9IGAke25ld1VybH0mJHtuZXdGaWx0ZXJ9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcnN0RmlsdGVyQXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgICBuZXdVcmwgPSBgJHtuZXdVcmx9PyR7bmV3RmlsdGVyfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAvLyAgbm93IHdlIG5lZWQgdG8gY29uc3RydWN0IHRoZSBhY3R1YWwgVVJMIGJhc2VkIG9uIHRoZSBnaXZlbiBmaWx0ZXJzIHByb3ZpZGVkXG4gICAgICAgIGlmIChmaWx0ZXJzLnNvcnQpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLnNvcnQgPT09ICdBU0MnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zb3J0ID09PSAnREVTQycpIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYHNvcnQ9JHtmaWx0ZXJzLnNvcnR9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzb3J0IHZhbHVlOiAke2ZpbHRlcnMuc29ydH0gcHJvdmlkZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cykge1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMuc3RhdHVzID09PSAnc2VhcmNoaW5nJyB8fFxuICAgICAgICAgICAgICAgIGZpbHRlcnMuc3RhdHVzID09PSAnZXhwaXJlZCcgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ292ZXJfZnJlZV9saW1pdCcgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ292ZXJfbWF4X3NpemUnIHx8XG4gICAgICAgICAgICAgICAgZmlsdGVycy5zdGF0dXMgPT09ICdpbnZhbGlkX29iamVjdCcgfHxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnN0YXR1cyA9PT0gJ2JhZF9ob3N0X25vZGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYHN0YXR1cz0ke2ZpbHRlcnMuc3RhdHVzfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdHVzIHZhbHVlOiAke2ZpbHRlcnMuc3RhdHVzfSBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlcnMuaXBmc19waW5faGFzaCkge1xuICAgICAgICAgICAgaWYgKGlzSVBGUy5jaWQoZmlsdGVycy5pcGZzX3Bpbl9oYXNoKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgaXBmc19waW5faGFzaD0ke2ZpbHRlcnMuaXBmc19waW5faGFzaH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIElQRlMgaGFzaDogJHtmaWx0ZXJzLmlwZnNfcGluX2hhc2h9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5saW1pdCkge1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZmlsdGVycy5saW1pdCkgJiYgKGZpbHRlcnMubGltaXQgPiAwKSAmJiAoZmlsdGVycy5saW1pdCA8IDEwMCkpIHtcbiAgICAgICAgICAgICAgICBhZGRGaWx0ZXIoYGxpbWl0PSR7ZmlsdGVycy5saW1pdH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpbWl0OiAke2ZpbHRlcnMubGltaXR9LiBWYWxpZCBsaW1pdHMgYXJlIDEtMTAwYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5vZmZzZXQpIHtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGZpbHRlcnMub2Zmc2V0KSAmJiAoZmlsdGVycy5vZmZzZXQgPiAwKSkge1xuICAgICAgICAgICAgICAgIGFkZEZpbHRlcihgb2Zmc2V0PSR7ZmlsdGVycy5vZmZzZXR9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvZmZzZXQ6ICR7ZmlsdGVycy5vZmZzZXR9LiBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIGludGVnZXIgZm9yIHRoZSBvZmZzZXRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXJsO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IGlzSVBGUyBmcm9tICdpcy1pcGZzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5waW4ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGhhc2hUb1VucGluKSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcblxuICAgIGlmICghaGFzaFRvVW5waW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoVG9VbnBpbiB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgcmVtb3ZpbmcgYSBwaW4gZnJvbSBQaW5hdGEnKTtcbiAgICB9XG4gICAgaWYgKCFpc0lQRlMuY2lkKGhhc2hUb1VucGluKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aGFzaFRvVW5waW59IGlzIGFuIGludmFsaWQgSVBGUyBDSURgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGAke2Jhc2VVcmx9L3Bpbm5pbmcvdW5waW4vJHtoYXNoVG9VbnBpbn1gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZGVsZXRlKFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgcmVtb3ZpbmcgcGluIGZyb20gSVBGUzogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMsIHZhbGlkYXRlUGluUG9saWN5U3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpblBvbGljeShwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSwgbmV3UGluUG9saWN5KSB7XG4gICAgdmFsaWRhdGVBcGlLZXlzKHBpbmF0YUFwaUtleSwgcGluYXRhU2VjcmV0QXBpS2V5KTtcbiAgICB2YWxpZGF0ZVBpblBvbGljeVN0cnVjdHVyZShuZXdQaW5Qb2xpY3kpO1xuXG4gICAgaWYgKCFuZXdQaW5Qb2xpY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduZXdQaW5Qb2xpY3kgaXMgcmVxdWlyZWQgZm9yIGNoYW5naW5nIHRoZSBwaW4gcG9saWN5IG9mIGEgcGluJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9waW5uaW5nL3VzZXJQaW5Qb2xpY3lgO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIG5ld1BpblBvbGljeTogbmV3UGluUG9saWN5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnB1dChcbiAgICAgICAgICAgIGVuZHBvaW50LFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAncGluYXRhX2FwaV9rZXknOiBwaW5hdGFBcGlLZXksXG4gICAgICAgICAgICAgICAgICAgICdwaW5hdGFfc2VjcmV0X2FwaV9rZXknOiBwaW5hdGFTZWNyZXRBcGlLZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGB1bmtub3duIHNlcnZlciByZXNwb25zZSB3aGlsZSBjaGFuZ2luZyBwaW4gcG9saWN5IGZvciB1c2VyOiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7dmFsaWRhdGVBcGlLZXlzfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0ZXN0QXV0aGVudGljYXRpb24ocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgLy8gIHRlc3QgYXV0aGVudGljYXRpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVzZXIncyBwcm92aWRlZCBrZXlzIGFyZSBsZWdpdFxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YmFzZVVybH0vZGF0YS90ZXN0QXV0aGVudGljYXRpb25gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXV0aGVudGljYXRpbmc6ICR7cmVzdWx0fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFwaUtleXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHF1ZXJ5QnVpbGRlciBmcm9tICcuL3F1ZXJ5QnVpbGRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpbkxpc3QocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXksIGZpbHRlcnMpIHtcbiAgICB2YWxpZGF0ZUFwaUtleXMocGluYXRhQXBpS2V5LCBwaW5hdGFTZWNyZXRBcGlLZXkpO1xuXG4gICAgY29uc3QgYmFzZUVuZHBvaW50ID0gYCR7YmFzZVVybH0vZGF0YS9waW5MaXN0YDtcbiAgICBjb25zdCBlbmRwb2ludCA9IHF1ZXJ5QnVpbGRlcihiYXNlRW5kcG9pbnQsIGZpbHRlcnMpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSB1c2VyIHBpbiBsaXN0OiAke3Jlc3VsdH1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAvLyAgaGFuZGxlIGVycm9yIGhlcmVcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZSAmJiBlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4iLCJmdW5jdGlvbiB2YWxpZGF0ZUFuZFJldHVybkRhdGUoZGF0ZVRvVmFsaWRhdGUpIHtcbiAgICBsZXQgZGF0ZVBhcnNlZCA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZVRvVmFsaWRhdGUpKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRlUGFyc2VkLnRvSVNPU3RyaW5nKCkgPT09IGRhdGVUb1ZhbGlkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZVRvVmFsaWRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRlcyBtdXN0IGJlIGluIHZhbGlkIElTT184NjAxIGZvcm1hdCcpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGVzIG11c3QgYmUgaW4gdmFsaWQgSVNPXzg2MDEgZm9ybWF0Jyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWVyeUJ1aWxkZXIoYmFzZVVybCwgZmlsdGVycykge1xuICAgIGlmICghYmFzZVVybCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGJhc2VVcmwgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyAgcHJlc2V0IGZpbHRlciB2YWx1ZXNcbiAgICBsZXQgZmlsdGVyUXVlcnkgPSAnPyc7XG5cbiAgICBsZXQgbWV0YWRhdGFRdWVyeSA9ICcnO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgICAgLy8gIG5vdyB3ZSBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgYWN0dWFsIFVSTCBiYXNlZCBvbiB0aGUgZ2l2ZW4gZmlsdGVycyBwcm92aWRlZFxuICAgICAgICBpZiAoZmlsdGVycy5oYXNoQ29udGFpbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVycy5oYXNoQ29udGFpbnMgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXNoQ29udGFpbnMgdmFsdWUgaXMgbm90IGEgc3RyaW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYGhhc2hDb250YWlucz0ke2ZpbHRlcnMuaGFzaENvbnRhaW5zfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblN0YXJ0KSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpblN0YXJ0PSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMucGluU3RhcnQpfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpbkVuZCkge1xuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBwaW5FbmQ9JHt2YWxpZGF0ZUFuZFJldHVybkRhdGUoZmlsdGVycy5waW5FbmQpfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnVucGluU3RhcnQpIHtcbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgdW5waW5TdGFydD0ke3ZhbGlkYXRlQW5kUmV0dXJuRGF0ZShmaWx0ZXJzLnVucGluU3RhcnQpfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnVucGluRW5kKSB7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHVucGluRW5kPSR7dmFsaWRhdGVBbmRSZXR1cm5EYXRlKGZpbHRlcnMudW5waW5FbmQpfSZgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpblNpemVNaW4pIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBpblNpemVNaW4pIHx8IGZpbHRlcnMucGluU2l6ZU1pbiA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBpblNpemVNaW4gaXMgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ICsgYHBpblNpemVNaW49JHtmaWx0ZXJzLnBpblNpemVNaW59JmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnMucGluU2l6ZU1heCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlcnMucGluU2l6ZU1heCkgfHwgZmlsdGVycy5waW5TaXplTWF4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGluU2l6ZU1heCBpcyBhIHZhbGlkIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGluU2l6ZU1heD0ke2ZpbHRlcnMucGluU2l6ZU1heH0mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5zdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLnN0YXR1cyAhPT0gJ2FsbCcgJiYgZmlsdGVycy5zdGF0dXMgIT09ICdwaW5uZWQnICYmIGZpbHRlcnMuc3RhdHVzICE9PSAndW5waW5uZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGF0dXMgdmFsdWUgbXVzdCBiZSBlaXRoZXI6IGFsbCwgcGlubmVkLCBvciB1bnBpbm5lZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeSArIGBzdGF0dXM9JHtmaWx0ZXJzLnN0YXR1c30mYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycy5wYWdlTGltaXQpIHtcbiAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJzLnBhZ2VMaW1pdCkgfHwgZmlsdGVycy5wYWdlTGltaXQgPD0gMCB8fCBmaWx0ZXJzLnBhZ2VMaW1pdCA+IDEwMDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIHBhZ2VMaW1pdCBpcyBhIHZhbGlkIGludGVnZXIgYmV0d2VlbiAxLTEwMDAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGFnZUxpbWl0PSR7cGFyc2VJbnQoZmlsdGVycy5wYWdlTGltaXQpfSZgOyAvLyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGRlY2ltYWxzIGdldCByb3VuZGVkIHRvIGludGVnZXJzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5wYWdlT2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVycy5wYWdlT2Zmc2V0KSB8fCBmaWx0ZXJzLnBhZ2VPZmZzZXQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcGFnZU9mZnNldCBpcyBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnkgKyBgcGFnZU9mZnNldD0ke3BhcnNlSW50KGZpbHRlcnMucGFnZU9mZnNldCl9JmA7IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgZGVjaW1hbHMgZ2V0IHJvdW5kZWQgdG8gaW50ZWdlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWx0ZXJzLm1ldGFkYXRhKSB7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVycy5tZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGFkYXRhIHZhbHVlIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLm1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVF1ZXJ5ID0gYG1ldGFkYXRhW25hbWVdPSR7ZmlsdGVycy5tZXRhZGF0YS5uYW1lfSZgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVycy5tZXRhZGF0YS5rZXl2YWx1ZXMpIHtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVycy5tZXRhZGF0YS5rZXl2YWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWV0YWRhdGEga2V5dmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJ1bmVkS2V5VmFsdWVzID0ge307IC8vIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG9ubHkgZ3JhYmJpbmcgdGhlIHZhbHVlcyB3ZSB3YW50IGZvciB0aGUgcXVlcnksIGFuZCBub3RoaW5nIGV4dHJhXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzLm1ldGFkYXRhLmtleXZhbHVlcykuZm9yRWFjaCgoa2V5VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5VmFsdWVbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ga2V5VmFsdWVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2V5VmFsdWU6ICR7a2V5fSBpcyBub3QgYW4gb2JqZWN0YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudmFsdWUgfHwgIXZhbHVlLm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlOiAke2tleX0gbXVzdCBoYXZlIGJvdGggdmFsdWUgYW5kIG9wIGF0dHJpYnV0ZXNgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MsIGJvb2xlYW5zLCBvciBudW1iZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBSdW4gY2hlY2tzIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIGtleXZhbHVlcyBhcmUgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2dyZWF0ZXIgdGhhbiBvciBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3RlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiBvciBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGVxdWFsIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVxdWFsIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlcSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JldHdlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWNhdXNlIGJldHdlZW4gb3AgY29kZSB3YXMgcGFzc2VkIGluLCBrZXlWYWx1ZTogJHtrZXlWYWx1ZVswXX0gbXVzdCBoYXZlIGJvdGggYWxzbyBpbmNsdWRlIGEgc2Vjb25kVmFsdWVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdzdHJpbmcnKSAmJiAodHlwZW9mIHZhbHVlLnNlY29uZFZhbHVlICE9PSAnYm9vbGVhbicpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGtleXZhbHVlIHNlY29uZFZhbHVlIG11c3QgYmUgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIG51bWJlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlOiB2YWx1ZS5zZWNvbmRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90QmV0d2Vlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zZWNvbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlY2F1c2Ugbm90QmV0d2VlbiBvcCBjb2RlIHdhcyBwYXNzZWQgaW4sIGtleVZhbHVlOiAke2tleVZhbHVlWzBdfSBtdXN0IGhhdmUgYm90aCBhbHNvIGluY2x1ZGUgYSBzZWNvbmRWYWx1ZWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ3N0cmluZycpICYmICh0eXBlb2YgdmFsdWUuc2Vjb25kVmFsdWUgIT09ICdib29sZWFuJykgJiYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRWYWx1ZSAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0YWRhdGEga2V5dmFsdWUgc2Vjb25kVmFsdWUgbXVzdCBiZSBhIHN0cmluZywgYm9vbGVhbiwgb3IgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90TGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaW5zZW5zaXRpdmUgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaUxpa2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIG5vdCBsaWtlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdub3RJTGlrZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmVkS2V5VmFsdWVzW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3A6IHZhbHVlLm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydW5lZEtleVZhbHVlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wOiB2YWx1ZS5vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIGluc2Vuc2l0aXZlIHJlZ2V4XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpUmVnZXhwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcnVuZWRLZXlWYWx1ZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDogdmFsdWUub3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleVZhbHVlIG9wOiAke3ZhbHVlLm9wfSBpcyBub3QgYSB2YWxpZCBvcCBjb2RlYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YVF1ZXJ5ID0gbWV0YWRhdGFRdWVyeSArIGBtZXRhZGF0YVtrZXl2YWx1ZXNdPSR7SlNPTi5zdHJpbmdpZnkocHJ1bmVkS2V5VmFsdWVzKX1gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtiYXNlVXJsfSR7ZmlsdGVyUXVlcnl9JHttZXRhZGF0YVF1ZXJ5fWA7XG59XG5cbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVBcGlLZXlzIH0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlclBpbm5lZERhdGFUb3RhbChwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSkge1xuICAgIHZhbGlkYXRlQXBpS2V5cyhwaW5hdGFBcGlLZXksIHBpbmF0YVNlY3JldEFwaUtleSk7XG5cbiAgICBsZXQgZW5kcG9pbnQgPSBgJHtiYXNlVXJsfS9kYXRhL3VzZXJQaW5uZWREYXRhVG90YWxgO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3MuZ2V0KFxuICAgICAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmF0YV9hcGlfa2V5JzogcGluYXRhQXBpS2V5LFxuICAgICAgICAgICAgICAgICAgICAncGluYXRhX3NlY3JldF9hcGlfa2V5JzogcGluYXRhU2VjcmV0QXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgdW5rbm93biBzZXJ2ZXIgcmVzcG9uc2Ugd2hpbGUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSBwaW5uZWQgZGF0YSB0b3RhbDogJHtyZXN1bHR9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gIGhhbmRsZSBlcnJvciBoZXJlXG4gICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UgJiYgZXJyb3IucmVzcG9uc2UuZGF0YSAmJiBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/package.json b/package.json index 98ba733..768903d 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pinata/sdk", - "version": "1.1.6-beta.0", + "version": "1.1.7", "description": "Official SDK for the Pinata IPFS platform", "main": "lib/pinata-sdk.js", "scripts": { diff --git a/src/commands/pinning/hashPinPolicy.js b/src/commands/pinning/hashPinPolicy.js index fb4e0c8..912fe73 100644 --- a/src/commands/pinning/hashPinPolicy.js +++ b/src/commands/pinning/hashPinPolicy.js @@ -3,7 +3,6 @@ import { baseUrl } from './../../constants'; import { validateApiKeys, validatePinPolicyStructure } from '../../util/validators'; import isIPFS from 'is-ipfs'; - export default function hashPinPolicy(pinataApiKey, pinataSecretApiKey, ipfsPinHash, newPinPolicy) { validateApiKeys(pinataApiKey, pinataSecretApiKey); validatePinPolicyStructure(newPinPolicy); diff --git a/src/commands/pinning/pinByHash.js b/src/commands/pinning/pinByHash.js index 8ea04b6..052ed28 100644 --- a/src/commands/pinning/pinByHash.js +++ b/src/commands/pinning/pinByHash.js @@ -1,6 +1,6 @@ import axios from 'axios'; import { baseUrl } from './../../constants'; -import { validateApiKeys, validateHostNodes, validateMetadata, validatePinPolicyStructure } from '../../util/validators'; +import { validateApiKeys, validateMetadata } from '../../util/validators'; import isIPFS from 'is-ipfs'; export default function pinByHash(pinataApiKey, pinataSecretApiKey, hashToPin, options) { diff --git a/src/util/validators.js b/src/util/validators.js index 918ec22..7ce68ae 100644 --- a/src/util/validators.js +++ b/src/util/validators.js @@ -49,21 +49,21 @@ export function validateMetadata(metadata) { export function validatePinPolicyStructure(pinPolicy) { //this function takes in a pin policy and checks the JSON structure to make sure it's valid - if(!pinPolicy) { - throw new Error("No pin policy provided"); + if (!pinPolicy) { + throw new Error('No pin policy provided'); } - if(!pinPolicy.regions) { - throw new Error("No regions provided in pin policy"); + if (!pinPolicy.regions) { + throw new Error('No regions provided in pin policy'); } - if(pinPolicy.regions.length) { + if (pinPolicy.regions.length) { pinPolicy.regions.forEach((region) => { - if(!region.id || !(Object.prototype.toString.call(region.id) === "[object String]")) { - throw new Error("region id must be a string"); + if (!region.id || !(Object.prototype.toString.call(region.id) === '[object String]')) { + throw new Error('region id must be a string'); } if (!(region.desiredReplicationCount || region.desiredReplicationCount === 0) || !Number.isInteger(region.desiredReplicationCount)) { - throw new Error("desiredReplicationCount must be an integer"); + throw new Error('desiredReplicationCount must be an integer'); } }); } @@ -88,7 +88,7 @@ export function validatePinataOptions(options) { } if (options.hostNodes) { - validateHostNodes(options.hostNodes) + validateHostNodes(options.hostNodes); } if (options.customPinPolicy) {