{"version":3,"sources":["../../.yarn/cache/browser-pack-npm-6.1.0-67557e011b-9e5993d3ee.zip/node_modules/browser-pack/_prelude.js","../../.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip/node_modules/he/he.js","../../.yarn/cache/path-browserify-npm-1.0.1-f975d99a99-c6d7fa3764.zip/node_modules/path-browserify/index.js","../../.yarn/cache/process-npm-0.11.10-aeb3b641ae-bfcce49814.zip/node_modules/process/browser.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/decode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/encode.js","../../.yarn/cache/querystring-es3-npm-0.2.1-f4632f2760-691e8d6b8b.zip/node_modules/querystring-es3/index.js","../../.yarn/cache/underscore-npm-1.13.6-3ebe9d92fb-d5cedd14a9.zip/node_modules/underscore/underscore-umd.js","business-objects/GeneratedCollectionDetails.js","lib/getOptimizedCover-ts.js","lib/utility/macmillanMessage.js","models/dao/MediaParameters.js","public/ecmascript/components/collection_campaign_page/CollectionDefinition.js","public/ecmascript/components/collection_campaign_page/PageManager.js","public/ecmascript/components/common/HashManager.js","public/ecmascript/components/common/modal.js","public/ecmascript/components/common/templates/modal.html.js","public/ecmascript/components/holdInformation/templates/HoldInformation.html.js","public/ecmascript/components/holdInformation/views/HoldInformation.js","public/ecmascript/components/holdInformation/views/HoldInformationModal.js","public/ecmascript/components/holdInformationV2/HoldInformationModalV2.js","public/ecmascript/components/holdInformationV2/HoldInformationV2.html.js","public/ecmascript/components/holdInformationV2/HoldInformationV2.js","public/ecmascript/components/media/ContextMenu.js","public/ecmascript/components/media/Cover.js","public/ecmascript/components/media/MediaInterface.js","public/ecmascript/components/media/TitleActionButton.js","public/ecmascript/components/media/TitleCard.js","public/ecmascript/components/media/TitleCardListView.js","public/ecmascript/components/media/TitleCollectionView.js","public/ecmascript/components/media/TitleHeaderBar.js","public/ecmascript/components/media/WishListButton.js","public/ecmascript/components/media/models/MediaViewPreference.js","public/ecmascript/components/media/models/Title.js","public/ecmascript/components/media/models/TitleCollection.js","public/ecmascript/components/media/templates/ContextMenu.html.js","public/ecmascript/components/media/templates/CopiesAvailable.html.js","public/ecmascript/components/media/templates/Cover.html.js","public/ecmascript/components/media/templates/NoCover.html.js","public/ecmascript/components/media/templates/StarViewTemplate.html.js","public/ecmascript/components/media/templates/TitleCard.html.js","public/ecmascript/components/media/templates/TitleFormatBadge.html.js","public/ecmascript/components/media/templates/TitleName.html.js","public/ecmascript/components/media/templates/TitlePreRelease.html.js","public/ecmascript/components/media/templates/WishListButton.html.js","public/ecmascript/components/media/views/TitleCollectionViewSelector.js","public/ecmascript/components/media/views/TitleDescription.js","public/ecmascript/components/media/views/TitleInfo.js","public/ecmascript/components/media/views/TitleInfo/CopiesAvailable.js","public/ecmascript/components/media/views/TitleInfo/StarRating.js","public/ecmascript/components/media/views/TitleInfo/StarView.js","public/ecmascript/components/media/views/TitleInfo/TitleAuthor.js","public/ecmascript/components/media/views/TitleInfo/TitleEdition.js","public/ecmascript/components/media/views/TitleInfo/TitleFormatBadge.js","public/ecmascript/components/media/views/TitleInfo/TitleName.js","public/ecmascript/components/media/views/TitleInfo/TitlePreRelease.js","public/ecmascript/components/media/views/TitleInfo/TitleSeries.js","public/ecmascript/components/media/views/TitleInfoListView.js","public/ecmascript/models/base.js","public/ecmascript/models/patron_media_items.js","public/ecmascript/pages/facets/facets_controller.js","public/ecmascript/pages/facets/facets_model.js","public/ecmascript/pages/search.js","public/ecmascript/title-actions/TitleActions.js","public/ecmascript/title-actions/TitleState.js","public/ecmascript/util/encoding/rfc3986EncodeURIComponent.js","public/ecmascript/util/keycodes.js","public/ecmascript/util/title-actions/processForwardedAction.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC1/DA,IAAM,IAAI,QAAQ,YAAR,CAAV;;AAEA;AACA,OAAO,OAAP;AACI,0CAAc;AAAA;;AACV,aAAK,SAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,EAA1B;AACA,aAAK,iBAAL,GAA0B,IAA1B,CAHU,CAGsB;AAChC,aAAK,cAAL,GAA0B,EAA1B,CAJU,CAIoB;AAC9B,aAAK,QAAL,GAA0B,EAA1B,CALU,CAKoB;AAC9B,aAAK,UAAL,GAA0B,EAA1B;;AAEA,aAAK,MAAL,GAA0B,EAA1B;AACA,aAAK,QAAL,GAA0B,SAA1B,CATU,CAS2B;;AAErC,eAAO,MAAP,gBAAc,IAAd,oCAA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","file":"search.bundle.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '"',\n\t\t'&': '&',\n\t\t'\\'': ''',\n\t\t'<': '<',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '>',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '`'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t\t.replace(/<\\u20D2/g, '<⃒')\n\t\t\t\t\t.replace(/fj/g, 'fj');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/>\\u20D2/g, '>⃒')\n\t\t\t\t.replace(/<\\u20D2/g, '<⃒');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `𝌆`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `𝌆`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.13.6\n // https://underscorejs.org\n // (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.13.6';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath(path) {\n return _$1.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n // In order to prevent third-party code injection through\n // `_.templateSettings.variable`, we test it against the following regular\n // expression. It is intentionally a bit more liberal than just matching valid\n // identifiers, but still prevents possible loopholes through defaults or\n // destructuring assignment.\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _$1, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _ = mixin(allExports);\n // Legacy Node.js API.\n _._ = _;\n\n return _;\n\n})));\n//# sourceMappingURL=underscore-umd.js.map\n","const _ = require('underscore');\n\n// ref: OverDrive.Thunder.Models.DataModels.GeneratedCollectionDetails\nmodule.exports = class GeneratedCollectionDetails {\n constructor() {\n this.mediaType = '';\n this.language = '';\n this.publisherEntityId = null; // int\n this.maturityLevels = []; // string\n this.subjects = []; // string\n this.bisacCodes = [];\n\n this.sortBy = '';\n this.maxItems = undefined; // int\n\n Object.assign(this, ...arguments);\n }\n\n // Translates GeneratedCollectionDetails model to parameters that align with the MediaParameters model for executing a \"search\"\n serializeForSearch() {\n let model = _.extend({}, this);\n\n // language is an array in MediaParameters\n model.language = _(_.flatten([model.language])).reject((val) => _.isEmpty(val));\n\n // maturityLevels is called maturityLevel\n model.maturityLevel = _(_.flatten([model.maturityLevels])).reject((val) => _.isEmpty(val));\n delete model.maturityLevels;\n\n // subjects is called subject\n model.subject = _(_.flatten([model.subjects])).reject((val) => _.isEmpty(val));\n delete model.subjects;\n\n if (window.featureManager.isEnabled('bisac-collection-filtering')) {\n model.bisacCode = _(_.flatten([model.bisacCodes])).reject((val) => _.isEmpty(val));\n }\n\n if (model.mediaTypes) {\n if (window.featureManager.isEnabled('media-types-collection-param')) {\n delete model.mediaType;\n } else{\n delete model.mediaTypes;\n }\n }\n\n if (model.mediaTypes) {\n model.mediaTypes = model.mediaTypes.join(',');\n } else if (window.featureManager.isEnabled('filter-out-ntc')) {\n model.mediaTypes = window.OverDrive.whitelistedMediaTypes;\n }\n\n delete model.bisacCodes; // we need to remove this property regardless because the correct query param is `bisacCode`. The mismatch between the thunder query params and the property names in the generated collection definitions is...fun.\n\n return model;\n }\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOptimizedCovers = void 0;\nvar _ = __importStar(require(\"underscore\"));\nfunction getOptimizedCovers(covers, desiredSize) {\n // coversBySize is now an array of covers, from smallest to largest\n var coversBySize = _.sortBy(covers, 'width');\n // Start with the biggest cover\n // Copy object with Object.assign() so we dont damage reference\n var optimizedCover = Object.assign({}, _.last(coversBySize));\n if (optimizedCover && optimizedCover.href) {\n var legacyToOptimizedImageHostsMap = {\n 'https://img1.od-cdn.com/': 'https://ic.od-cdn.com/resize',\n 'https://images.overdrivechina.cn/': 'https://images.overdrivechina.cn/resize'\n };\n var hostMapKey = _.find(Object.keys(legacyToOptimizedImageHostsMap), function (legacy) { return optimizedCover.href.startsWith(legacy); });\n if (hostMapKey) {\n // look up the corresponding optimized root, e.g. https://img1.od-cdn.com/ -> https://ic.od-cdn.com/resize\n var optimizedImageHost = legacyToOptimizedImageHostsMap[hostMapKey];\n var optimizations = 'type=auto'; // format = auto -> use webp if the device supports it\n var path = '';\n if (typeof document === 'undefined') {\n // node.js usage should be fine with the URL api\n var url = new URL(optimizedCover.href);\n path = url.pathname;\n }\n else {\n // hack to get url pathname since IE doesn't support the URL api. I didn't want to add a polyfill\n var a = document.createElement('a');\n a.href = optimizedCover.href;\n path = a.pathname;\n if (!path.startsWith('/')) { // browsers are inconsistent about whether the pathname includes a leading slash, but the cachefly api requires exactly one on the url param\n path = \"/\".concat(path);\n }\n }\n var encodedSrcUrl = encodeURIComponent(path);\n var coverHrefWithoutSize = \"\".concat(optimizedImageHost, \"?\").concat(optimizations, \"&url=\").concat(encodedSrcUrl, \"&stripmeta=true\");\n optimizedCover.href = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize);\n optimizedCover.srcset = \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 2), \" 2x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(Math.floor(desiredSize * 1.5), \" 1.5x, \") +\n \"\".concat(coverHrefWithoutSize, \"&width=\").concat(desiredSize, \" 1x\");\n return optimizedCover;\n }\n }\n return _.find(coversBySize, function (cover) { return cover.width >= desiredSize; }) ||\n _.last(coversBySize); // finds the first cover that is big enough\n}\nexports.getOptimizedCovers = getOptimizedCovers;\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n\n//# sourceMappingURL=getOptimizedCover-ts.js.map\n","// Original: https://jira.hq.overdrive.com/browse/LHTNG-3809 Relocation: https://jira.hq.overdrive.com/browse/LHTNG-3862\n\nconst MacmillanMessage = function(model) {\n let badPublisher = parseInt(model.get(\"publisherAccount\").id, 10) === 6222;\n let today = new Date();\n let releaseDate = new Date(model.get(\"estimatedReleaseDate\"));\n let macmillanLicensingChangeInEffect = releaseDate >= new Date(2019, 10, 1);\n let releaseDatePlus8Weeks = new Date(releaseDate);\n releaseDatePlus8Weeks.setDate(releaseDate.getDate() + (8 * 7));\n let releaseDateWithinEightWeeks = (releaseDate < today) && (today < releaseDatePlus8Weeks);\n\n return window.featureManager.isEnabled('macmillanMessaging')\n && macmillanLicensingChangeInEffect\n && badPublisher\n && (releaseDateWithinEightWeeks || (macmillanLicensingChangeInEffect && model.get(\"isPrereleaseTitle\")))\n ? html('macmillanMessage', {date : releaseDatePlus8Weeks })\n : '';\n}\n\nexport default MacmillanMessage;\n","const _ = require('underscore');\n\n/**\n * Defines all the available input parameters for the media endpoint\n * @class MediaParameters\n * ref: https://thunder.api.test.overdrive.com/docs/ui/index#!/Media/V2Media_IndexMedia\n */\nmodule.exports = class MediaParameters {\n\n constructor() {\n this.query = '';\n this.mediaType = '';\n this.mediaTypes = '';\n this.title = '';\n this.series = '';\n this.publisherId = '';\n this.publisherEntityId = null;\n this.imprintId = '';\n this.identifier = '';\n this.creator = '';\n this.creatorId = null;\n this.addedDate = '';\n this.availableFirst = null;\n this.showOnlyAvailable = false;\n this.showOnlyPrerelease = false;\n this.showOnlyLuckyDayAvailable = false;\n this.hasAudioSynchronizedText = null;\n this.collectionId = 0;\n\n // All of the following arrays are string arrays\n this.format = [];\n this.subject = [];\n this.bisacCode = [];\n this.maturityLevel = [];\n this.language = [];\n this.atosLevel = [];\n this.lexileScore = [];\n this.interestLevel = [];\n this.gradeLevel = [];\n this.includedFacets = [];\n\n this.sortBy = 'relevance';\n this.show = 'owned';\n this.page = 1;\n this.perPage = 24;\n this.includeFacets = true;\n this.includeNoFormatTitles = false;\n this.filterCpcTitles = false;\n this.maxItems = 0;\n\n Object.assign(this, ...arguments);\n }\n\n applyRoomFiltersAndUserPrefs(roomFilters, userPreferences) {\n if (roomFilters) {\n // Note that the names don't match up so we can't just extend\n if (roomFilters.maturityLevels) {\n this.maturityLevel = roomFilters.maturityLevels;\n }\n if (roomFilters.subjects) {\n this.subject = roomFilters.subjects;\n }\n if (roomFilters.language) {\n this.language = roomFilters.language;\n }\n if (roomFilters.mediaType) {\n this.mediaType = roomFilters.mediaType;\n this.mediaTypes = roomFilters.mediaType;\n }\n }\n\n if (userPreferences) {\n // There may be more user prefs to apply besides audience-settings but this\n // was the immediate need. We can add more as they come up.\n if (userPreferences['audience-setting'] && this.maturityLevel.length === 0) {\n let audience = userPreferences['audience-setting'];\n let maturityLevels = [];\n _.each(_.keys(audience), function(key) {\n if (audience[key] && key !== 'all') {\n maturityLevels.push(key);\n }\n });\n if (maturityLevels.length > 0) {\n this.maturityLevel = maturityLevels;\n }\n }\n }\n }\n\n serialize() {\n let response = _.extend({}, this);\n\n // Remove all properties that do not have a value set\n Object.keys(response).forEach((key) => {\n !this._hasValue(response[key]) && delete response[key];\n });\n\n return response;\n }\n\n _hasValue(value) {\n return !((_(value).isObject() && _(value).isEmpty()) || !value) || value === false;\n }\n};\n","import MediaInterface from '../media/MediaInterface';\n\nimport GeneratedCollectionDetails from '../../../../business-objects/GeneratedCollectionDetails';\n\n// ref: Thunder.Models.ResponseModels.CollectionDefinition\nexport default class CollectionDefinition extends Backbone.Model {\n\n get idAttribute() { return 'id'; }\n\n get collectionOptions() {\n let options = {\n includeFacets: false,\n perPage: this.pageSize || 6,\n shuffle: this.shuffle || this.isLuckyDay\n };\n if (this.get('sortByAvailability') || this.get('availabilityOption') === 'available-first') {\n options.availableFirst = true;\n }\n if (this.get('showOnlyAvailable') || this.get('availabilityOption') === 'available-only') {\n options.showOnlyAvailable = true;\n }\n if (this.get('showOnlyPrerelease')) {\n options.showOnlyPrerelease = true;\n }\n if (this.useListOrder){\n options.sortBy = 'listorder';\n }\n\n return options;\n }\n\n defaults() {\n return {\n id : '0',\n name : '',\n description : '',\n availabilityOption : '',\n showOnlyAvailable : false,\n showOnlyPrerelease : false,\n sortByAvailability : false,\n curatedCollectionDetails : null,\n generatedCollectionDetails : null,\n lastModified : null,\n order : 0,\n\n // Computed property\n totalItems : 0\n };\n }\n\n get isLuckyDay(){\n return this.get('availabilityOption') === 'available-luckyday';\n }\n\n get isGenerated() {\n return !_(this.get('generatedCollectionDetails')).isEmpty();\n }\n\n get isCurated() {\n return !_(this.get('curatedCollectionDetails')).isEmpty();\n }\n\n get useListOrder(){\n return this.isCurated && this.get('curatedCollectionDetails').isOrdered;\n }\n\n /**\n * @prop {TitleCollection} collection\n * @memberof CollectionDefinition\n */\n constructor() {\n super(...arguments);\n\n this._mediaInterface = new MediaInterface();\n\n this.titleCollection = this._mediaInterface.items;\n\n this.listenTo(this.titleCollection, 'all', () => {\n this.set('totalItems', this.titleCollection.length);\n });\n }\n\n fetchCollectionTitles({ patronSettings, room}) {\n // Parse the current room's maturityLevels if there is a room, and a maturityLevels filter has been set\n let roomHasMaturityLevelFilter = !_.isEmpty(room && room.filters && room.filters.maturityLevels);\n\n let patronMaturityLevelPreferences = this._parsePatronAudienceSettings(patronSettings);\n\n if (this.isGenerated) {\n let genColDetails = this.get('generatedCollectionDetails');\n if (this.attributes.sortBy) {\n genColDetails.sortBy = this.attributes.sortBy;\n }\n if (!!this.get('showOnlyLuckyDayAvailable')){\n genColDetails.showOnlyLuckyDayAvailable = true;\n }\n let details = new GeneratedCollectionDetails(genColDetails);\n let params = details.serializeForSearch();\n\n if (!!patronSettings.showOnlyAvailable) {\n params.showOnlyAvailable = true;\n }\n\n // If we are in a room with maturity filters applied, the filters will be apart of the collection definition and we can simply query for the collection\n // User preferences should NOT override a room's maturity filter\n if (roomHasMaturityLevelFilter) {\n return this._mediaInterface.fetchCollectionByParameters(params, this.collectionOptions);\n }\n // Otherwise determine if the User's maturity filter settings cover the collection's maturityLevel settings\n else {\n let generatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!_(patronMaturityLevelPreferences).isEmpty() && _(params.maturityLevel).isEmpty()) {\n Object.assign(generatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n // Fake an empty response if all the auto generated collection's filters are not covered by the user's maturity level settings\n return this._patronFiltersPermitCollection(params.maturityLevel, patronMaturityLevelPreferences)\n ? this._mediaInterface.fetchCollectionByParameters(params, generatedCollectionOptions)\n : this._mediaInterface.fetchEmptyResponse();\n }\n }\n // else if \"isCurated\"\n else {\n let curatedCollectionOptions = Object.assign({}, this.collectionOptions);\n\n if (!!patronSettings.showOnlyAvailable) {\n curatedCollectionOptions.showOnlyAvailable = true;\n }\n\n if (window.featureManager.isEnabled('sort-curated-list-carousels') && this.attributes.sortBy) {\n curatedCollectionOptions.sortBy = this.attributes.sortBy;\n }\n\n // If we are NOT in a room, apply a user's maturity settings if present to the collection request\n // The expectation is that if none of the content satisfies the user's filter its acceptable that no results are returned\n if (_(room).isEmpty()) {\n Object.assign(curatedCollectionOptions, { maturityLevel: patronMaturityLevelPreferences });\n }\n\n return this._mediaInterface.fetchCollectionById(this.id, curatedCollectionOptions);\n }\n }\n\n // Convert the patron audience settings model into an array of filter terms that MediaInterface understands, ex:\n // \"audience-setting\": {\n // \"all\" : false,\n // \"juvenile\" : false,\n // \"youngadult\" : true,\n // \"generalcontent\" : true,\n // \"adultonly\" : true\n // }\n // to: [\"youngadult\", \"generalcontent\", \"adultonly\"]\n /** @returns {string[]} */\n _parsePatronAudienceSettings(patronSettings) {\n let patronAudienceSetting = patronSettings && patronSettings['audience-setting'] || {};\n\n if (_(patronAudienceSetting).isEmpty() || patronAudienceSetting.all) {\n return [];\n }\n\n let audienceFilters = [];\n _(patronAudienceSetting).each((isApplied, key) => {\n if (isApplied && key !== \"all\") {\n audienceFilters.push(key);\n }\n });\n\n return audienceFilters;\n }\n\n _patronFiltersPermitCollection(collectionMaturityFilters = [], userMaturityFilters = []) {\n if (userMaturityFilters.length === 0) {\n return true;\n }\n\n const collectionLower = collectionMaturityFilters.map((filter) => filter.toLowerCase());\n const userLower = userMaturityFilters.map((filter) => filter.toLowerCase());\n\n return _(collectionLower).difference(userLower).length === 0;\n }\n}\n","import CollectionDefinition from './CollectionDefinition';\n\nexport default class PageManager extends Backbone.Model {\n\n get idAttribute() { return 'pageId'; }\n\n get isLoaded() {\n return !_.isEmpty(this.attributes);\n }\n\n // page == room, page has views, one of which is the home-page collections collection\n // ref: /v2/libraries/qa/pages\n fetchRoomById(roomId = 'home') {\n this.url = window.url(window.routes.rest.rooms.get, { roomId });\n\n return new Promise((resolve, reject) => {\n this.fetch({\n timeout: 10000,\n success: (model, response, options) => resolve(response),\n error: (model, response, options) => reject(response)\n });\n });\n }\n\n fetchCampaignById(campaignId) {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.campaigns.get, { campaignId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((jqHXR) => reject(jqHXR));\n });\n }\n\n fetchFirstDisplayableCampaign(roomId = 'home') {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.campaigns.getFirstDisplayable, { roomId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(response))\n .fail((jqHXR) => reject(jqHXR));\n });\n }\n\n fetchCollectionById(collectionId) {\n return new Promise((resolve, reject) => {\n $.ajax({\n url: window.url(window.routes.rest.collections.getById, { id: collectionId }),\n dataType: 'json',\n timeout: 10000\n })\n .done((response) => resolve(new CollectionDefinition(response)))\n .fail((jqHXR, textStatus, errorThrown) => reject(jqHXR));\n });\n }\n\n getView(viewName) {\n if (!this.isLoaded) { return null; }\n\n return (viewName || '').toLowerCase() === 'home'\n ? _(this.attributes.views).findWhere({ isDefault: true })\n : _(this.attributes.views).findWhere({ name: viewName });\n }\n\n getCampaigns() {\n return this.isLoaded && this.attributes.campaigns;\n }\n}\n","import QueryString from 'querystring';\n\nexport default class HashManager {\n\n static parse() {\n let hashObject = QueryString.parse(location.hash.substr(1));\n\n _.keys(hashObject).forEach((key) => {\n hashObject[key] = _.flatten([hashObject[key] || []]);\n });\n\n return hashObject;\n }\n\n static update(object) {\n let newHash = QueryString.stringify(object);\n if (newHash !== '&'){\n location.hash = newHash;\n }\n }\n\n static get(key) {\n let response = this.parse();\n\n if (_.isString(key)) {\n return response[key];\n }\n\n return response;\n }\n\n static set(key, value) {\n let hash = this.parse();\n\n hash[key] = _.flatten([value]);\n\n this.update(hash);\n }\n\n static push(key, value) {\n let hash = this.parse();\n\n hash[key] = hash[key] || [];\n hash[key].push(value);\n\n this.update(hash);\n }\n\n static remove(key) {\n let hash = this.parse();\n\n hash[key] && delete hash[key];\n\n this.update(hash);\n }\n}\n","import keys from '../../util/keycodes';\nimport ModalTemplate from './templates/modal.html';\n\nclass Modal extends Backbone.View {\n\n get defaults() {\n // When the flag is enabled, closeOnEsc must always be FALSE\n // to ensure that the ESC key behavior defined in _bindEvents() executes properly.\n // Do not modify this value when calling a new modal.\n var closeModalOnEsc = window.featureManager.isEnabled('close-dropdowns-on-esc') ? false : true;\n\n return {\n autoShow : true,\n autoRender : true,\n closeOnEsc : closeModalOnEsc,\n closeOnBlur : true,\n\n id : '',\n classes : ['small'],\n buttonAlign : 'right',\n title : 'Title',\n hiddenTitle : false,\n content : 'Some Content',\n submitText : html('ok'),\n cancelText : html('cancel'),\n attachToDocument : true,\n defaultButtonBehaviour : true,\n showCloseButton : true\n };\n }\n\n initialize(options) {\n _.extend(this, this.defaults, options);\n\n this.tpl = ModalTemplate;\n this.setElement(this.tpl(this));\n\n if (this.id.length) {\n this.$el.attr('id', this.id);\n }\n\n this.$content = this.$el.find('.modal-container');\n\n this.$content.empty().append(this.content);\n\n this.$el.addClass(this.classes.join(' '));\n\n this.$title = this.$el.find('.modal-title');\n\n if (this.hiddenTitle) {\n this.$title.css(\"opacity\", \"0\");\n }\n\n if (this.autoRender) {\n this._render();\n }\n\n this._bindEvents();\n }\n\n _render() {\n if (this.attachToDocument) {\n // For Foundation to work as expected we need to have the element attached to the DOM before calling .foundation('reveal', 'open')\n $('body').append(this.el);\n }\n\n if (this.autoShow) {\n this.show();\n }\n\n return this;\n }\n\n isSelectEvent = (e) => (e.type === 'click' || e.which === 13 || e.which === 32) && (e.preventDefault() || true);\n\n // We dont actually want to use the Foundation modal events since they get weird fast...\n // lets use our own so consumers dont have to know its foundation\n _bindEvents() {\n this.$el.on('click keydown', '.js-close', (e) => {\n this.isSelectEvent(e) && this.trigger('cancel', this);\n });\n\n if (this.defaultButtonBehaviour) {\n this.on('close cancel', () => { this.close(); });\n }\n\n this.$el.on('keypress', '*', (e) => {\n if (e.which === keys.TAB) {\n this._keepFocus(e);\n }\n });\n\n if(window.featureManager.isEnabled('close-dropdowns-on-esc')) {\n // Prevent ESC from closing modal when \n \n`;\n","export default ({ geoIdcClass }) => `\n
\n
\n\n
\n\n
\n
\n\n
\n\n
\n
\n\n
\n
`;\n","export default ({typeId}) => `\n${typeId ? `\n ${window.html(typeId)}\n` : '' }\n`;\n","export default ({ titleId, title, href, ariaLabel }) => `

\n \n ${ title }\n \n

`;\n","export default ({date}) => `

${window.html('accountHolds.prereleaseExpected', {date: date})}

`;\n","export default ({ga, contrastClass, ariaLabel, iconClass, text, iconAnimationClasses}) => `\n`;\n","import MediaViewPreference from '../models/MediaViewPreference';\n\nlet featureManager = window.featureManager;\nclass ViewSelectorButton extends Backbone.View {\n constructor() {\n super(...arguments);\n\n if (this.constructor === ViewSelectorButton) {\n throw new TypeError(\n 'ViewSelectorButton cannot be instantiated directly'\n );\n }\n\n this.listenTo(this.model, 'change', this.render);\n\n this.$el.on('click keypress', (e) => {\n if (this.isSelectEvent(e)) {\n this.select();\n return false;\n }\n return true;\n });\n }\n\n select() {\n this.model.set({ view: this.view });\n }\n\n isSelectEvent = (e) =>\n (e.type === 'click' || e.which === 13 || e.which === 32) &&\n (e.preventDefault() || true);\n\n render() {\n if (!this.view || !this.template) {\n throw new Error('this.view and this.template are required');\n }\n\n this.$el.html(\n this.template({\n selected: this.model.get('view') === this.view,\n })\n );\n }\n}\n\nclass GridViewSelectorButton extends ViewSelectorButton {\n constructor() {\n super(...arguments);\n this.template = ({ selected }) =>\n `\n \n `;\n this.view = MediaViewPreference.options.grid;\n }\n}\n\nclass ListViewSelectorButton extends ViewSelectorButton {\n constructor() {\n super(...arguments);\n this.template = ({ selected }) =>\n `\n \n `;\n this.view = MediaViewPreference.options.list;\n }\n}\n\nclass TitleCollectionViewSelector extends Backbone.View {\n template = () => `\n
\n
\n
\n
`;\n\n constructor(options) {\n super(options);\n\n this.model = new MediaViewPreference();\n\n this.$el.prepend(this.template());\n if (!featureManager.isEnabled('geo-idc')) {\n this.listViewButton = new ListViewSelectorButton({\n el: this.$('.ListViewButton'),\n model: this.model,\n }).render();\n this.gridViewButton = new GridViewSelectorButton({\n el: this.$('.GridViewButton'),\n model: this.model,\n }).render();\n }\n }\n}\n\nexport default TitleCollectionViewSelector;\n","const Backbone = window.Backbone;\n\nconst TitleDescription = Backbone.View.extend({\n initialize() {\n this.render();\n },\n\n template() {\n return `\n ${this._description()}\n ${this._readMoreLink()}\n `;\n },\n\n _readMoreLink() {\n if (this.model.get('description').length) {\n return `\n \n ${window.html('cover.readMore')}\n \n `;\n }\n\n return '';\n },\n\n _description() {\n if (this.model.get('description').length) {\n return this.model.sanitizedDesc();\n }\n\n return window.html('titleDetails.noDescAvailable');\n },\n\n render() {\n this.$el.html(this.template());\n }\n});\n\nmodule.exports = TitleDescription;\n","import ContextMenu from '../ContextMenu';\nimport TitleAuthor from './TitleInfo/TitleAuthor';\nimport TitleEdition from './TitleInfo/TitleEdition';\nimport TitleName from './TitleInfo/TitleName';\nimport TitleFormatBadge from './TitleInfo/TitleFormatBadge';\n\nexport default class TitleInfo extends Backbone.View {\n get className() {\n return 'title-info';\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n\n this.render();\n }\n\n _reset() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n }\n\n remove() {\n this._reset();\n super.remove();\n }\n\n render() {\n this._reset();\n\n this._views.push(\n (this.titleName = new TitleName({ model: this.model }))\n );\n\n if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.contextMenu = new ContextMenu({ model: this.model }))\n );\n this.contextMenu.$el.addClass('text-right');\n }\n if (this.model.isMagazine) {\n this._views.push(\n (this.titleEdition = new TitleEdition({ model: this.model }))\n );\n } else if (!window.featureManager.isEnabled('geo-idc')) {\n this._views.push(\n (this.titleAuthor = new TitleAuthor({ model: this.model }))\n );\n }\n\n this._views.push(\n (this.titleFormatBadge = new TitleFormatBadge({\n typeId: this.model.get('type').id,\n }))\n );\n\n this.$el.empty();\n this.$el.append(...this._views.map((view) => view.$el));\n }\n}\n","import HoldInformationModal from '../../../holdInformation/views/HoldInformationModal';\nimport HoldInformationModalV2 from '../../../holdInformationV2/HoldInformationModalV2';\nimport HoldInformationV2 from '../../../holdInformationV2/HoldInformationV2';\n\nimport CopiesAvailableTemplate from '../../templates/CopiesAvailable.html';\n\nexport default class CopiesAvailable extends Backbone.View {\n constructor({withIcons}) {\n super(...arguments);\n this.title = this.model.toJSON();\n this.withIcons = withIcons;\n this.listenTo(this.model, 'change:titleState', this._maybeRender);\n this.render();\n }\n\n events() {\n return {\n 'click .js-holds-ratio-help-icon': '_renderModal'\n };\n }\n\n render() {\n this.$el.empty();\n if(this.model.allCopiesAreLuckyDay){\n return this;\n }\n\n if (this.title.titleState === 'unavailable') {\n this._renderNormal();\n return this;\n } else if (this.title.isPreReleaseTitle) {\n this._renderNormal();\n return this;\n }\n\n switch (this.title.availabilityType) {\n case 'normal':\n this._renderNormal();\n break;\n case 'always':\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText: window.text('cover.alwaysAvailable')\n }));\n break;\n case 'limited' && !this.title.isAvailable:\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText: window.text('cover.limitedAvailability')\n }));\n break;\n }\n\n return this;\n }\n\n _maybeRender() {\n if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')\n || (window.featureManager.isEnabled('betterPatronState') ? this.model.get('isBorrowed') : this.model.get('titleState') === 'borrowed')) {\n this.render();\n }\n\n if(this.model.allCopiesAreLuckyDay){\n this.render();\n }\n }\n\n _renderNormal() {\n let availabilityText, waitingText, helpButtonHTML;\n\n const notHeldClass = (window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold') ? '' : 'js-holds-ratio-not-held';\n\n if (this.title.type.id === 'periodicals' && this.title.availableCopies < 1 && !this.title.isAvailable) {\n availabilityText = window.html('cover.limitedAvailability');\n helpButtonHTML = `\n \n \n `;\n } else {\n \n let copyVariables = {\n availableCopies: window.featureManager.isEnabled('LuckyDay') ? this.title.availableCopies + this.title.luckyDayAvailableCopies : this.title.availableCopies,\n ownedCopies: window.featureManager.isEnabled('LuckyDay') ? this.title.ownedCopies + this.title.luckyDayOwnedCopies : this.title.ownedCopies\n };\n availabilityText = window.html('cover.copiesAvailable', copyVariables);\n\n if(this.model.allCopiesAreLuckyDay && this.title.titleState === 'unavailable'){\n availabilityText = window.html('cover.copiesAvailable', {availableCopies: 0, ownedCopies: this.title.luckyDayOwnedCopies});\n }\n \n if (!this.title.isAvailable && !this.model.hasAvailableLuckyDayCopies) {\n if(!this.model.allCopiesAreLuckyDay){\n if (window.featureManager.isEnabled('LHTNG-2863')){\n if(this.title.isOwned){\n waitingText = new HoldInformationV2({model: this.model, isVisitor: window.OverDrive.isVisitor}).waitTimeHtml;\n }\n }\n else if (!this.model.get('isFastlane')) {\n if (this.title.holdsRatio) {\n waitingText = window.html('cover.waitingPerCopy', {holdsRatio: this.title.holdsRatio});\n } else if (this.title.holdsCount === 0) {\n waitingText = window.html('cover.noHolds');\n }\n }\n }\n helpButtonHTML = window.featureManager.isEnabled('LHTNG-2863') && !this.title.isOwned\n ? ''\n : ` \n \n `;\n }\n }\n\n this.$el.append(CopiesAvailableTemplate({\n withIcons: this.withIcons,\n availabilityText,\n waitingText,\n helpButtonHTML\n }));\n }\n\n _renderModal() {\n if (window.featureManager.isEnabled('LHTNG-2863')){\n if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')) {\n window.ajax.getHold(this.model.get('id')).done((holdData) => { // should be confirming that this is on hold\n this.model.set({\n holdsRatio: holdData.holdsRatio,\n holdsCount: holdData.holdsCount,\n holdListPosition: holdData.holdListPosition\n });\n this.modal = new HoldInformationModalV2({model: this.model, el: this.el});\n });\n }\n else {\n this.modal = new HoldInformationModalV2({model: this.model, el: this.el, hideHoldsLink: true});\n }\n }\n else {\n const isFastlane = this.model.get('isFastlane');\n const titleState = this.model.get('titleState');\n if (!!isFastlane) {\n this.modal = new HoldInformationModal({model: this.model, type: 'basic', el: this.el});\n }\n else if ((window.featureManager.isEnabled('betterPatronState') ? this.model.get('isOnHold') : this.model.get('titleState') === 'onHold')) {\n window.ajax.getHold(this.model.get('id')).done((holdData) => { // should be confirming that this is on hold\n this.model.set({\n holdsRatio: holdData.holdsRatio,\n holdsCount: holdData.holdsCount,\n holdListPosition: holdData.holdListPosition\n });\n this.modal = new HoldInformationModal({model: this.model, type: 'successPosition', el: this.el});\n });\n }\n else {\n this.modal = new HoldInformationModal({model: this.model, type: 'ratio', el: this.el});\n }\n }\n }\n}\n","import StarView from './StarView';\nconst { featureManager } = window;\n\nexport default class StarRating extends Backbone.View {\n events() {\n return {\n 'mouseleave': 'stopHoverRating'\n };\n }\n\n remove() {\n this._views.forEach((view) => view.remove());\n super.remove();\n }\n\n get isEnabled() {\n return !this.model.get('isPreReleaseTitle');\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n this.hoverRating = 0;\n this.$el.addClass('star-ratings-container StarRatings');\n\n this.rid = Math.random().toString(36).substring(7);\n\n // Update star rating when patron status is received\n this.listenTo(this.model, 'change:userStarRating', (model) => {\n this.update();\n });\n }\n\n render() {\n if(!this.isEnabled) {\n return this;\n }\n\n let globalRating = this.model.get('starRating') || 0;\n this.$el.attr('data-global-rating', this.model.get('starRating'));\n this.$el.attr('data-media-id', this.model.id);\n\n this._views.forEach((view) => view.remove());\n this._views.length = 0;\n\n let ctx = this;\n _.each([1, 2, 3, 4, 5, 0], (index) => {\n let viewData = {\n index: index,\n globalRating: globalRating,\n rid: this.rid\n };\n let starView = new StarView(viewData);\n \n if (!featureManager.isEnabled('sampleOnlyMode')){\n starView.on('rate', (starValue) => {\n ctx.handleRating(starValue);\n });\n starView.on('hover', (starValue) => {\n ctx.onHoverRating(starValue);\n });\n }\n \n this._views.push(starView);\n });\n\n this.$el.empty();\n this._views.forEach((view) => {\n view.render();\n this.$el.append(view.$el);\n });\n this.update();\n\n return this;\n }\n\n isHalfStar (globalRating) {\n return globalRating % 1 >= 0.25 && globalRating % 1 < 0.75; \n }\n\n update() {\n if (!this.isEnabled) {\n return this;\n }\n\n let isUserRating = (this.model.get('userStarRating') > 0 || this.hoverRating) > 0;\n this.$el.toggleClass('user-rating', isUserRating);\n let globalRating = this.model.get('starRating') || 0;\n\n _.each(this._views, (starView) => {\n\n if (isUserRating){\n starView.setFilled(starView.index <= (this.hoverRating || this.model.get('userStarRating')));\n } else if (starView.index < globalRating) {\n starView.setFilled(true);\n } else if (starView.index - 1 > globalRating) {\n starView.setFilled(false);\n } else {\n starView.setFilled(starView.index - 0.75 < globalRating, this.isHalfStar(globalRating));\n }\n starView.$el.children('.starRadio').prop('checked', starView.index === this.model.get('userStarRating'));\n });\n\n return this;\n }\n\n handleRating(starValue) {\n let currentRating = this.model.get('userStarRating');\n if (starValue === currentRating) {\n this.model.set('userStarRating', 0);\n this.stopHoverRating();\n }\n else {\n this.model.set('userStarRating', starValue);\n }\n this.model.trigger('title:action', { action: 'rating', model: this.model });\n }\n\n onHoverRating(starValue) {\n this.hoverRating = starValue;\n this.update();\n }\n\n stopHoverRating() {\n this.hoverRating = 0;\n this.update();\n }\n}\n","import StarRatingsTemplate from '../../templates/StarViewTemplate.html';\n\nexport default class StarView extends Backbone.View {\n template = StarRatingsTemplate;\n\n constructor({index, isFilled = false, globalRating, rid}) {\n super(...arguments);\n\n this.index = index;\n this.isFilled = isFilled;\n this.isHalfFilled = false;\n this.label = window.html('starRating.userRatedLabel', {currentRating: this.index});\n this.globalRating = globalRating;\n this.rid = rid;\n this.$el.addClass('star-container');\n }\n\n events() {\n return {\n 'change': 'onSelected',\n 'mouseover .icon-star': 'onHover',\n 'click .icon-star': 'onSelected',\n 'focusin .noRate' : 'pseudoFocus',\n 'focusout .noRate' : 'pseudoFocus'\n };\n }\n\n setFilled(isFilled, halfFilled = false) {\n if (halfFilled){\n this.$el.find('.icon-star').removeClass('filled');\n this.isFilled = false;\n\n this.isHalfFilled = isFilled;\n this.$el.find('.icon-star').toggleClass('halfFilled', isFilled);\n } else {\n this.$el.find('.icon-star').removeClass('halfFilled');\n this.isHalfFilled = false;\n \n this.isFilled = isFilled;\n this.$el.find('.icon-star').toggleClass('filled', isFilled);\n }\n }\n\n onSelected() {\n this.trigger('rate', this.index);\n return false;\n }\n\n onHover() {\n this.trigger('hover', this.index);\n }\n\n //Used for the 0th 'no rating' star. When focused, make the container appear to have focus\n pseudoFocus() {\n this.$el.parent().toggleClass('pseudoFocus');\n }\n\n render() {\n if (this.index > 0) {\n this.$el.empty().append(this.template(this));\n }\n else {\n let noRateTemplate =\n ``;\n this.$el.empty().append(noRateTemplate);\n }\n }\n}\n","const Backbone = window.Backbone;\nconst featureManager = window.featureManager;\n\nconst fs = require('fs');\nconst path = require('path');\nconst TitleAuthorTemplate = fs.readFileSync(path.join(__dirname, '../../templates/TitleAuthor.html'), 'utf8');\n\nconst TitleAuthor = Backbone.View.extend({\n template: _.template(TitleAuthorTemplate),\n\n className: 'title-author',\n\n tagName: 'p',\n\n initialize() {\n if (this.model.get('type').id !== 'periodicals') {\n this.render();\n }\n },\n\n render() {\n let title = this.model.toJSON();\n\n if (title.firstCreatorName != null && !_.isEmpty(title.firstCreatorName)) {\n let creatorName = featureManager.isEnabled('fixHtmlTagsInCopy') ? title.firstCreatorName : _.escape(title.firstCreatorName);\n\n const viewData = {\n href : window.url(window.routes.searchByType, { type: 'creatorId', query: title.firstCreatorId, sortBy: 'newlyadded' }),\n label : window.text('cover.searchByAuthor', { author: creatorName }),\n text : creatorName\n };\n\n this.$el.html(window.text('byLine', { creator: this.template(viewData) }));\n }else{\n if(!featureManager.isEnabled('no-author-fix')){\n this.$el.html(window.html('cover.noAuthorAvailable'));\n }\n }\n }\n\n});\n\nexport default TitleAuthor;\n","\nexport default class TitleEdition extends Backbone.View {\n constructor() {\n super(...arguments);\n this.render();\n }\n\n render() {\n let node = $(`
${this.model.get('edition')}
`);\n this.setElement(node);\n }\n}\n","import TitleFormatBadgeTemplate from '../../templates/TitleFormatBadge.html';\n\nconst TitleFormatBadge = Backbone.View.extend({\n initialize({typeId}) {\n this.typeId = typeId;\n this.render();\n },\n\n render() {\n this.setElement($(TitleFormatBadgeTemplate({typeId: this.typeId})));\n }\n});\n\nexport default TitleFormatBadge;\n","import TitleNameTemplate from '../../templates/TitleName.html';\n\nexport default class TitleName extends Backbone.View {\n constructor() {\n super(...arguments);\n\n this.template = TitleNameTemplate;\n this.render();\n }\n\n _assembleLabel() {\n let labelParts = [];\n\n labelParts.push(this.model.get('title'));\n\n if (!!this.model.get('firstCreatorName')) {\n labelParts.push(window.html('byLine', {creator: this.model.isMagazine ? this.model.get('publisher').name : this.model.get('firstCreatorName')}));\n }\n\n labelParts.push(this.model.availabilityText());\n\n labelParts.push(this.model.get('type').name);\n\n return labelParts.join(' ');\n }\n\n render() {\n const viewData = {\n titleId : this.model.id,\n href : this.model.titleDetailsUrl,\n ariaLabel : _.escape(this._assembleLabel()),\n title : this.model.get('title')\n };\n \n this.setElement($(this.template(viewData)));\n }\n}\n\n","import TitlePreReleaseTemplate from '../../templates/TitlePreRelease.html';\n\nexport default class TitlePreRelease extends Backbone.View {\n template = TitlePreReleaseTemplate;\n\n constructor() {\n super(...arguments);\n\n if(!!this.model.get('isPreReleaseTitle')) {\n this.render();\n }\n }\n\n render() {\n this.setElement($(this.template({date: this.model.get('estimatedReleaseDate')})));\n }\n}\n","const Backbone = window.Backbone;\nconst url = window.url;\nconst routes = window.routes;\nconst windowText = window.text;\nconst featureManager = window.featureManager;\n\nconst TitleSeries = Backbone.View.extend({\n\n initialize({hideSubtitle}) {\n this.useEnhancedSeries = featureManager.isEnabled('enhancedSeries') && (typeof this.model.get('detailedSeries') !== 'undefined');\n this.hideSubtitle = hideSubtitle;\n\n this.listenTo(this.model, 'update', this.render);\n this.render();\n },\n\n render() {\n let searchParams = this.useEnhancedSeries\n ? {type: 'seriesId', query: this.model.get('detailedSeries').seriesId, sortBy: 'readingOrder'}\n : { type: 'series', query: this.model.get('series'), sortBy: 'newlyadded'};\n\n\n let subtitleContainsSeries = this.model.get('subtitle') && this.model.get('subtitle').indexOf(this.model.get('series')) > -1;\n\n let seriesText = '';\n let rankText = '';\n\n if (this.useEnhancedSeries){\n let detailedSeries = this.model.get('detailedSeries');\n\n const readingOrder = detailedSeries.readingOrder;\n if (readingOrder) {\n seriesText = isNaN(readingOrder) ? window.text('enhancedSeriesLinkText', {readingOrder}) : window.text('enhancedSeriesLinkNumber', {readingOrder});\n }\n\n const rank = detailedSeries.rank;\n if(rank) {\n rankText = window.text('rankText', {rank});\n }\n\n } else {\n seriesText = subtitleContainsSeries ? this.model.get('subtitle') : (this.model.get('series') || '');\n rankText = subtitleContainsSeries ? this.model.get('subtitle') : (this.model.get('rank') || '');\n }\n\n if (this.model.get('type').id === 'magazine'){\n searchParams.mediaType = 'magazine';\n }\n\n let viewModel = {\n id : this.model.get('id'),\n title : this.model.get('title'),\n series : seriesText,\n rank : rankText,\n subtitle : this.model.get('subtitle') || '',\n searchUrl : url(routes.searchByType, searchParams),\n language : _.first(this.model.get('languages') || ['']),\n noCreators : _.isEmpty(this.model.get('creators'))\n };\n\n let $temp = $(document.createDocumentFragment());\n\n if (!this.hideSubtitle && !subtitleContainsSeries && !_.isEmpty(viewModel.subtitle)) {\n let $subtitle = this._buildSubtitle(viewModel.subtitle, viewModel.language);\n $temp.append($subtitle);\n }\n\n if (!_.isEmpty(viewModel.series)) {\n if(this.model.isMagazine && featureManager.isEnabled(\"magazine-rollup\")){\n let $series = this._buildSeriesText(viewModel.noCreators, viewModel.series);\n $temp.append($series);\n }else{\n let $series = this._buildSeriesLink(viewModel.searchUrl, viewModel.noCreators, viewModel.series);\n $temp.append($series);\n }\n }\n\n if (!_.isEmpty(viewModel.rank) && featureManager.isEnabled(\"display-title-rank\")) {\n const $rank = this._buildRankText(viewModel.noCreators, viewModel.rank);\n $temp.append($rank);\n }\n\n this.$el.html($temp);\n },\n\n _buildRankText(noCreators, text){\n return $('

', { 'class': `series ${noCreators ? 'no-author' : '', text}`, text });\n },\n\n _buildSeriesText(noCreators, text){\n let $elm = $('

', { 'class': `series ${noCreators ? 'no-author' : '', text}` });\n return $elm;\n },\n\n _buildSeriesLink(searchUrl, noCreators, text) {\n\n let $elm = $('

', { 'class': `series ${noCreators ? 'no-author' : ''}` });\n\n let $link = $('', {\n 'aria-label': windowText('cover.searchBySeries', { series: text }),\n 'class' : this.useEnhancedSeries ? 'series-link-enhanced secondary-color' : 'series-link secondary-hover-underline',\n 'href' : searchUrl,\n 'title' : text,\n text\n });\n\n $elm.append($link);\n\n return $elm;\n },\n\n _buildSubtitle(subtitle, language) {\n if(featureManager.isEnabled('fixHtmlTagsInCopy')){\n return $(`

${subtitle}

`);\n }else{\n return $('

', {\n 'class' : 'subtitle',\n 'text' : subtitle,\n 'lang' : language\n });\n }\n }\n});\n\nmodule.exports = TitleSeries;\n","import ContextMenu from '../ContextMenu';\nimport TitleAuthor from './TitleInfo/TitleAuthor';\nimport TitleEdition from './TitleInfo/TitleEdition';\nimport TitleName from './TitleInfo/TitleName';\nimport TitleFormatBadge from './TitleInfo/TitleFormatBadge';\nimport TitleSeries from './TitleInfo/TitleSeries';\nimport TitlePreRelease from './TitleInfo/TitlePreRelease';\nimport StarRating from './TitleInfo/StarRating';\nimport CopiesAvailable from './TitleInfo/CopiesAvailable';\n\nexport default class TitleInfoListView extends Backbone.View {\n get className() {\n return 'title-info';\n }\n\n constructor() {\n super(...arguments);\n this._views = [];\n\n this.render();\n }\n\n _reset() {\n this._views.forEach((view) => view.remove());\n this._views = [];\n }\n\n remove() {\n this._reset();\n super.remove();\n }\n\n render() {\n this._reset();\n\n this._views.push(\n (this.contextMenu = new ContextMenu({ model: this.model }))\n );\n\n if (this.model.isMagazine) {\n this._views.push(\n (this.titleEdition = new TitleEdition({ model: this.model }))\n );\n } else {\n this._views.push(\n (this.titleAuthor = new TitleAuthor({ model: this.model }))\n );\n }\n this._views.push(\n (this.titleName = new TitleName({ model: this.model }))\n );\n this._views.push(\n (this.titleSeries = new TitleSeries({ model: this.model }))\n );\n this._views.push(\n (this.titleFormatBade = new TitleFormatBadge({\n typeId: this.model.get('type').id,\n }))\n );\n this._views.push(\n (this.titlePreRelease = new TitlePreRelease({ model: this.model }))\n );\n this._views.push(\n (this.copiesAvailable = new CopiesAvailable({ model: this.model }))\n );\n\n const hideStarRating =\n (window.featureManager.isEnabled('magazine-rollup') &&\n this.model.isMagazine) ||\n !window.featureManager.isEnabled('show-star-ratings');\n\n if (!hideStarRating) {\n this._views.push(\n (this.starRating = new StarRating({\n model: this.model,\n el: $('

', { class: 'star-rating list-view' }),\n type: 'editable',\n }).render())\n );\n }\n\n this.$el.empty();\n this.$el.append(\n this.titleName.$el,\n this.contextMenu.$el.addClass('text-right'),\n this.titleSeries.$el,\n this.model.isMagazine\n ? this.titleEdition.$el\n : this.titleAuthor.$el,\n this.titleFormatBade.$el\n );\n\n if (!!this.model.get('isPreReleaseTitle')) {\n this.$el.append(this.titlePreRelease.$el);\n } else if (!hideStarRating) {\n this.$el.append(this.starRating.$el);\n }\n\n this.$el.append(this.copiesAvailable.$el);\n }\n}\n","// import when we move more to modules\nexport default window.Backbone.Model;\n","import BaseModel from '../models/base';\n\nconst PatronMediaItemsModel = BaseModel.extend({\n url() {\n return window.url(window.routes.mediaInfo);\n },\n\n initialize({titles}) {\n this.mediaItems = titles || window.OverDrive.titleCollection || {};\n this.itemsOnPage = _.map(_.pluck(this.mediaItems, 'id'), Number);\n },\n\n initialFetch() {\n return this.mediaItems.length\n ? this.fetch({\n data: JSON.stringify({titleIds: this.itemsOnPage}),\n type: 'POST', contentType: 'application/json',\n headers: {'csrf-token': $('#csrf').val() || OverDrive._csrf}})\n : Promise.resolve({});\n }\n});\n\nexport default PatronMediaItemsModel;\n","import rfc3986EncodeURIComponent from '../../util/encoding/rfc3986EncodeURIComponent.js';\nimport FacetsModel from './facets_model';\n/**\n * Controller logic for facets\n * @see js/public/faceted-media.js\n */\n\nexport default class FacetsController {\n constructor() {\n this.SHOW_ONLY_AVAILABLE = 'showOnlyAvailable';\n this.SHOW_ONLY_PRERELEASE = 'showOnlyPrerelease';\n this.ADDED_DATE = 'addedDate';\n this.REMOVE_FILTER = 'removeFilter';\n this.HAS_AUDIO_SYNCHRONIZED_TEXT = 'hasAudioSynchronizedText';\n this.SUBJECT = 'subject';\n this.FORMAT = 'format';\n this.MATURITY_LEVEL = 'maturityLevel';\n this.LANGUAGE = 'language';\n this.PAGE = 'page';\n this.SORT_BY = 'sortBy';\n this.EBOOK_OVERDRIVE_READALONG = 'ebook-overdrive-readalong';\n this.TRUE = 'true';\n this.INTEREST_LEVELS = 'interestLevels';\n this.GRADE_LEVELS = 'gradeLevels';\n this.ATOS_LEVELS = 'atosLevels';\n this.LEXILE_SCORES = 'lexileScores';\n const SINGLE_FACETS = [\n // single key-value pair facets\n this.SHOW_ONLY_AVAILABLE,\n this.SHOW_ONLY_PRERELEASE,\n this.ADDED_DATE,\n this.REMOVE_FILTER,\n this.HAS_AUDIO_SYNCHRONIZED_TEXT,\n ];\n const MULTI_FACETS = [\n // multiple values for each name facets\n this.SUBJECT,\n this.FORMAT,\n this.MATURITY_LEVEL,\n this.LANGUAGE,\n ];\n const RANGE_FACETS = [\n this.INTEREST_LEVELS,\n this.GRADE_LEVELS,\n this.ATOS_LEVELS,\n this.LEXILE_SCORES,\n ];\n this._facetsModel = new FacetsModel(\n SINGLE_FACETS,\n MULTI_FACETS,\n RANGE_FACETS\n );\n }\n\n /**\n * Returns a count of the facets from the model\n * @returns {*}\n */\n countFacets() {\n return this._facetsModel.countFacets();\n }\n\n /**\n * Select a facet\n * @param {string} elem Selector string for facet element\n */\n select(elem) {\n // Prevent already active facets from being followed\n if (\n !$(elem).hasClass('js-active') &&\n !$(elem).hasClass('js-disabled')\n ) {\n this._facetsModel.beginTransaction();\n this._facetsModel.deleteOtherParam(this.PAGE);\n if ($(elem).data('facet') === 'narration') {\n this._facetsModel.setFacet(\n this.HAS_AUDIO_SYNCHRONIZED_TEXT,\n this.TRUE\n );\n } else {\n const facet = $(elem).attr('data-facet');\n const id = $(elem).attr('data-id');\n if (facet === 'available-now') {\n this._facetsModel.setFacet(\n this.SHOW_ONLY_AVAILABLE,\n this.TRUE\n );\n this._facetsModel.unsetFacet(\n this.SHOW_ONLY_PRERELEASE,\n this.TRUE\n );\n } else if (facet === 'all-titles') {\n this._facetsModel.unsetFacet(\n this.SHOW_ONLY_AVAILABLE,\n this.TRUE\n );\n this._facetsModel.unsetFacet(\n this.SHOW_ONLY_PRERELEASE,\n this.TRUE\n );\n } else if (facet === 'prerelease') {\n this._facetsModel.setFacet(\n this.SHOW_ONLY_PRERELEASE,\n this.TRUE\n );\n this._facetsModel.unsetFacet(\n this.SHOW_ONLY_AVAILABLE,\n this.TRUE\n );\n } else if (facet === this.SUBJECT) {\n this._facetsModel.setFacet(\n this.SUBJECT,\n rfc3986EncodeURIComponent(id)\n );\n } else if (facet === 'date') {\n this._facetsModel.setFacet(this.ADDED_DATE, id);\n } else if (facet === 'maturity') {\n this._facetsModel.setFacet(this.MATURITY_LEVEL, id);\n } else if (\n [\n this.FORMAT,\n this.LANGUAGE,\n this.INTEREST_LEVELS,\n this.GRADE_LEVELS,\n this.ATOS_LEVELS,\n this.LEXILE_SCORES,\n ].includes(facet)\n ) {\n this._facetsModel.setFacet(facet, id);\n }\n }\n if (!this._facetsModel.hasOtherParam(this.SORT_BY)) {\n this._facetsModel.setOtherParam(\n this.SORT_BY,\n $('.js-searchSortByOptions').val()\n );\n }\n this._facetsModel.endTransaction();\n }\n }\n\n /**\n * Remove all active facets\n */\n removeAll() {\n this._facetsModel.beginTransaction();\n this._facetsModel.deleteOtherParam(this.PAGE);\n this._facetsModel.unsetAllFacets();\n this._facetsModel.endTransaction();\n }\n\n /**\n * Removes `removeFilter` param for rooms\n */\n restoreRoomFilter(filter) {\n this._facetsModel.beginTransaction();\n this._facetsModel.unsetFacet(this.REMOVE_FILTER, filter);\n this._facetsModel.deleteOtherParam(this.PAGE);\n this._facetsModel.endTransaction();\n }\n\n /**\n * Remove an active facet\n * @param {string} elem Selector string for facet element\n */\n remove(elem) {\n this._facetsModel.beginTransaction();\n const filterId = $(elem).attr('data-filter-id').split(',');\n const filterFacet = $(elem).attr('data-filter-facet');\n // Set page back to 1 when a facet is removed\n this._facetsModel.deleteOtherParam(this.PAGE);\n for (let id of filterId) {\n this._facetsModel.unsetFacet(\n filterFacet,\n rfc3986EncodeURIComponent(id)\n );\n if (filterFacet === this.HAS_AUDIO_SYNCHRONIZED_TEXT) {\n this._facetsModel.unsetFacet(\n this.FORMAT,\n this.EBOOK_OVERDRIVE_READALONG\n );\n }\n }\n this._facetsModel.endTransaction();\n }\n\n /**\n * Remove a room filter\n * Requires adding another query parameter to indicate which filter to ignore\n */\n removeRoomFilter(elem) {\n this._facetsModel.beginTransaction();\n const filterFacet = elem.data('filter-facet');\n const filterId = elem.data('filter-id');\n this._facetsModel.deleteOtherParam(this.PAGE);\n this._facetsModel.unsetFacet(filterFacet, filterId);\n this._facetsModel.setFacet(\n this.REMOVE_FILTER,\n `${filterFacet}-${filterId}`\n );\n this._facetsModel.endTransaction();\n }\n}\n","import querystring from 'querystring';\n/**\n * Model logic for facets\n * @see js/public/faceted-media.js\n */\n\nexport default class FacetsModel {\n constructor(singleFacets, multiFacets, rangeFacets) {\n this._params =\n querystring.parse(window.location.search.substr(1)) || {};\n this._singleFacets = singleFacets; // single key-value pair facets\n this._multiFacets = multiFacets; // multiple values for each name facets\n this._rangeFacets = rangeFacets;\n }\n\n /**\n * Updates the stored parameters\n */\n beginTransaction() {\n this._params =\n querystring.parse(window.location.search.substr(1)) || {};\n }\n\n /**\n * Reloads the page with the new query string\n */\n endTransaction() {\n if (\n !!window.OverDrive.titleCollection &&\n !!window.OverDrive.titleCollection.maxItems &&\n window.OverDrive.titleCollection.maxItems < 2147483647 &&\n !!window.OverDrive.titleCollection.breakpoint\n ) {\n this._params.breakpoint =\n window.OverDrive.titleCollection.breakpoint;\n }\n\n if (\n this._params.format &&\n this._params.format.includes('audiobook-overdrive') &&\n !this._params.format.includes('audiobook-overdrive-provisional')\n ) {\n const audiobookIndex = this._params.format.indexOf(\n 'audiobook-overdrive'\n );\n this._params.format[audiobookIndex] =\n 'audiobook-overdrive,audiobook-overdrive-provisional';\n }\n\n let qs = querystring.stringify(this._params);\n\n qs = qs.length > 0 ? `?${qs}` : qs;\n\n window.location.search = qs;\n }\n\n /**\n * Sets a facet with a name/value pair\n * @param name {string}\n * @param value {string}\n */\n setFacet(name, value) {\n if (this._multiFacets.includes(name)) {\n if (!this._params[name]) {\n this._params[name] = [value];\n } else if (!Array.isArray(this._params[name])) {\n // if it was there only once it is a string\n this._params[name] = [this._params[name], value];\n } else {\n this._params[name].push(value);\n }\n } else if (this._singleFacets.includes(name)) {\n this._params[name] = value;\n } else if (this._rangeFacets.includes(name)) {\n const min = name + 'Min';\n const max = name + 'Max';\n this._params[min] = value;\n this._params[max] = value;\n }\n }\n\n /**\n * Unsets a facet with a name/value pair\n * @param {string} name the name of the facet\n * @param {string} value (optional) if undefined all elements with the name will be deleted\n */\n unsetFacet(name, value) {\n if (this._rangeFacets.includes(name)) {\n const min = name + 'Min';\n const max = name + 'Max';\n delete this._params[min];\n delete this._params[max];\n } else if (!value || this._singleFacets.includes(name)) {\n delete this._params[name];\n } else if (this._multiFacets.includes(name)) {\n if (this._params[name] && Array.isArray(this._params[name])) {\n this._params[name].splice(this._params[name].indexOf(value));\n if (this._params[name].length === 0) {\n delete this._params[name];\n }\n } else {\n delete this._params[name];\n }\n }\n }\n\n /**\n * Deletes all facets\n */\n unsetAllFacets() {\n _.each(this._singleFacets, (facet) => {\n var name = facet;\n this.unsetFacet(name);\n });\n _.each(this._multiFacets, (facet) => {\n var name = facet;\n this.unsetFacet(name);\n });\n _.each(this._rangeFacets, (facet) => {\n var name = facet;\n this.unsetFacet(name);\n });\n }\n\n /**\n * Deletes a parameter that is not a facet\n * @param name {string}\n */\n deleteOtherParam(name) {\n if (\n !this._singleFacets.includes(name) &&\n !this._multiFacets.includes(name)\n ) {\n delete this._params[name];\n }\n }\n\n /**\n * Sets a parameter that is not a facet\n * @param {string} name the name of the facet to set\n * @param {string} value the facet's value\n */\n setOtherParam(name, value) {\n if (\n !this._singleFacets.includes(name) &&\n !this._multiFacets.includes(name)\n ) {\n this._params[name] = value;\n }\n }\n\n /**\n * Checks for a parameter that is not a facet\n * @param {string} name the name of the parameter\n * @returns {boolean} true if the parameter exists and it is not a facet\n */\n hasOtherParam(name) {\n if (\n !this._singleFacets.includes(name) &&\n !this._multiFacets.includes(name)\n ) {\n return !!this._params[name];\n }\n return false;\n }\n\n /**\n * Counts the facets for use by the clear all button to know if there are lozenges\n * that are clearable\n * @returns {number} the number of facets\n */\n countFacets() {\n let count = 0;\n for (let facet of this._singleFacets) {\n if (this._params[facet]) {\n count++;\n }\n }\n for (let facet of this._rangeFacets) {\n if (this._params[facet + 'Min'] || this._params[facet + 'Max']) {\n count++;\n }\n }\n for (let facet of this._multiFacets) {\n if (this._params[facet]) {\n if (Array.isArray(this._params[facet])) {\n count += this._params[facet].length;\n } else {\n count++;\n }\n }\n }\n return count;\n }\n}\n","import ProcessForwardedAction from '../util/title-actions/processForwardedAction';\nimport PatronMediaItemsModel from '../models/patron_media_items';\nimport HashManager from '../components/common/HashManager';\n\nimport TitleCollection from '../components/media/models/TitleCollection';\nimport TitleCollectionView from '../components/media/TitleCollectionView';\nimport TitleCard from '../components/media/TitleCard';\nimport TitleCardListView from '../components/media/TitleCardListView';\nimport TitleCollectionViewSelector from '../components/media/views/TitleCollectionViewSelector';\n\nimport PageManager from '../components/collection_campaign_page/PageManager';\n\nconst { Logger } = window;\nconst { currentRoom } = window.OverDrive;\n\nclass Search {\n constructor({ bus, room, collectionDefinition }) {\n this.bus = bus;\n this.room = room;\n this.collectionDefinition = collectionDefinition;\n\n this.$resultsContainer = $('.js-media-results');\n\n this.viewState = new TitleCollectionViewSelector({\n el: '.SearchViewOptions',\n bus: this.bus,\n }).model;\n this.titleCollection = new TitleCollection(this.titles);\n\n this.titleCollectionView = new TitleCollectionView({\n collection: this.titleCollection,\n bus: this.bus,\n patronMediaItemsModel: new PatronMediaItemsModel({\n titles: this.titles,\n }),\n attributes: this.attributes,\n View: this.collectionView,\n coverWidths: this.coverWidths,\n context: {\n room: this.room,\n collectionDefinition: this.collectionDefinition,\n },\n });\n\n this.viewState.on('change', () => {\n this.titleCollectionView.View = this.collectionView;\n this.titleCollectionView.attributes = this.attributes;\n this.titleCollectionView.coverSizes = this.coverWidths;\n this.titleCollectionView.render();\n });\n\n this.handledForwardedAction = false;\n\n this.render();\n }\n\n get attributes() {\n let attributes = {\n class: 'js-title-collection-view large-block-grid-4 medium-block-grid-4 small-block-grid-2',\n };\n\n if (this.viewState.get('view') === 'list') {\n attributes.class = 'js-title-collection-view list-view-ul';\n }\n\n return attributes;\n }\n\n get coverWidths() {\n if (this.viewState.get('view') === 'list') {\n return { mobile: 120, tablet: 160, desktop: 160 };\n }\n return { mobile: 220, tablet: 220, desktop: 220 };\n }\n\n get collectionView() {\n let View;\n\n if (this.viewState.get('view') === 'list') {\n View = TitleCardListView;\n this.$resultsContainer\n .removeClass('grid-view')\n .addClass('list-view');\n } else {\n View = TitleCard;\n this.$resultsContainer\n .removeClass('list-view')\n .addClass('grid-view');\n }\n\n return View;\n }\n\n get titles() {\n return window.OverDrive.titleCollection; // The source of data here is subject to change\n }\n\n render() {\n $('.js-media-results').prepend(this.titleCollectionView.$el);\n\n /// $(document).foundation();\n\n // This event should happen after the search page is fully done rendering.\n // TODO: revisit this strategy when search page is fully componentized.\n // Slack reference: https://overdrive.slack.com/archives/lightning-dev/p1488381226000227\n window.globalEvents.trigger('search:render');\n\n // It's possible for render() to be called multiple times in some situations. We don't want to trigger the action twice.\n if (\n window.OverDrive.isAuthenticated &&\n window.OverDrive.hasLinkedCards &&\n HashManager.get('action') &&\n this.handledForwardedAction\n ) {\n this.handledForwardedAction = true;\n let forwardedAction = new ProcessForwardedAction(\n this.titleCollection,\n this.bus\n );\n forwardedAction.executeAction();\n window.forwardAction = forwardedAction;\n }\n\n // Show pagination TODO: Refactor pagination into component to be appended to page here\n $('.Pagination.is-results').show();\n }\n}\n\nimport FacetsController from './facets/facets_controller.js';\nwindow.facetsController = new FacetsController();\n\nif (!!window.collectionId) {\n let pageManager = new PageManager();\n\n pageManager.fetchCollectionById(window.collectionId).then(\n (collectionDefinition) => {\n void new Search({\n bus: window.globalEvents,\n room: currentRoom,\n collectionDefinition,\n });\n },\n (jqHXR, textStatus, error) => {\n Logger.log('error', 'Error fetching collection', {\n message: textStatus,\n });\n }\n );\n} else {\n void new Search({ bus: window.globalEvents, room: currentRoom });\n}\n\n$(document).ready(() => {\n $('.js-searchSortByOptions').removeClass('tolino-disable');\n});\n","export default class TitleActions {\n constructor({ bus, context }) {\n this.bus = bus;\n\n this.context = {\n room: undefined,\n collectionDefinition: undefined,\n };\n\n _.extend(this.context, context);\n }\n\n perform(action, titleModel) {\n if (typeof this[`_${action}`] === 'function') {\n this[`_${action}`](titleModel);\n }\n }\n\n _borrow(titleModel) {\n this.bus.trigger('title:borrow', titleModel, this.context);\n }\n\n _hold(titleModel) {\n this.bus.trigger('title:hold', titleModel, this.context);\n }\n\n _wish(titleModel) {\n this.bus.trigger('title:wishlist', titleModel, this.context);\n }\n\n _nook(titleModel) {\n this.bus.trigger('title:nook', titleModel, this.context);\n }\n\n _rating(titleModel) {\n this.bus.trigger('title:rating', titleModel, this.context);\n }\n\n _history(titleModel) {\n this.bus.trigger('title:history', titleModel, this.context);\n }\n\n _download(titleModel) {\n this.bus.trigger('title:download', titleModel, this.context);\n }\n\n _preview(titleModel) {\n this.bus.trigger('title:preview', titleModel, this.context);\n }\n\n _renew(titleModel) {\n this.bus.trigger('title:renew', titleModel, this.context);\n }\n\n _requestAgain(titleModel) {\n this.bus.trigger('title:requestAgain', titleModel, this.context);\n }\n\n setContextRoom(room) {\n if (_(room).isEmpty()) {\n delete this.context.room;\n } else {\n this.context.room = room;\n }\n\n return this;\n }\n\n setContextCollection(titleCollection) {\n if (_(titleCollection).isEmpty()) {\n delete this.context.titleCollection;\n } else {\n this.context.titleCollection = titleCollection;\n }\n\n return this;\n }\n}\n","class TitleState {\n static getState(media, patronItems) {\n const featureManager = window.featureManager;\n\n if (featureManager.isEnabled('sampleOnlyMode')) {\n return 'preview';\n }\n\n let mediaId = media.id;\n\n let isOnHold = patronItems && patronItems.onHolds.indexOf(mediaId) > -1;\n let isOnCheckouts =\n patronItems && patronItems.onCheckouts.indexOf(mediaId) > -1;\n let isAvailable =\n media.isAvailable ||\n (featureManager.isEnabled('LuckyDay') &&\n media.luckyDayAvailableCopies > 0);\n\n if (\n /account\\/loans/.test(window.location.href) &&\n media.isRenewable &&\n featureManager.isEnabled('content-holds')\n ) {\n if (isOnHold) {\n return 'requested';\n } else if (\n media.holdsCount <= 0 &&\n media.ownedCopies >= 0 &&\n !(\n featureManager.isEnabled('LuckyDay') &&\n media.isLuckyDayCheckout\n )\n ) {\n return 'renew';\n }\n return 'requestAgain';\n }\n\n if (isOnCheckouts) {\n return 'borrowed';\n }\n\n if (isOnHold && !isAvailable) {\n return 'onHold';\n }\n\n if (isAvailable) {\n if (media.type.id === 'periodicals') {\n return 'nook';\n }\n\n return 'borrow';\n }\n\n if (media.isHoldable && featureManager.isEnabled('content-holds')) {\n return 'hold';\n }\n\n return 'unavailable';\n }\n\n static isOnWishlist(media, patronItems) {\n return patronItems && patronItems.onWishlist.indexOf(media.id) > -1;\n }\n\n static isOnReadingHistory(media, patronItems) {\n return (\n patronItems && patronItems.onReadingHistory.indexOf(media.id) > -1\n );\n }\n\n static starRating(media, patronItems) {\n // Returns 0 if not rated\n return (\n (patronItems &&\n patronItems.starRatings &&\n patronItems.starRatings[media.id]) ||\n 0\n );\n }\n}\n\nexport default TitleState;\n","/*\n * Encode a string\n * @param {string} str String to be encoded\n * @returns {string}\n */\nconst rfc3986EncodeURIComponent = function(str) {\n return encodeURIComponent(str).replace(/[&!'()*]/g, escape);\n};\n\nexport default rfc3986EncodeURIComponent;\n","const keys = Object.freeze({\n TAB: 9,\n ENTER: 13,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n SPACE: 32,\n ESC: 27\n});\nexport default keys;\n","import HashManager from '../../components/common/HashManager';\nimport Title from '../../components/media/models/Title';\nimport TitleActions from '../../title-actions/TitleActions';\n\nexport default class ProcessForwardedAction {\n constructor(collection, bus, model) {\n let hash = HashManager.get('action')[0];\n this.actionArr = hash ? hash.split('~') : [];\n this.action = this.actionArr[0] || null;\n this.mediaId = this.actionArr[1] || null;\n this.rating = this.actionArr[2] || 0;\n this.model = model || null;\n this.collection = collection.models;\n this.bus = bus;\n }\n\n // Execute user forwarded action\n executeAction() {\n if (!this.action || !this.mediaId) {\n return;\n }\n\n if (\n !this.model ||\n (this.model && this.model.get('id') !== this.mediaId)\n ) {\n this.model = _.find(\n this.collection,\n (model) => model.id === this.mediaId\n );\n }\n\n let titleActions = new TitleActions({ bus: this.bus });\n\n if (this.model) {\n // Title model is on page\n HashManager.remove('action');\n this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, this.model);\n } else {\n // Title model is not on page, fetch async\n let title = new Title();\n let promise = new Promise((resolve, reject) => {\n title.getTitleAsync(this.mediaId, resolve, reject);\n });\n\n promise.then(() => {\n this.model && this.model.set('userStarRating', this.rating);\n titleActions.perform(this.action, title);\n HashManager.remove('action');\n });\n }\n }\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvaGUtbnBtLTEuMi4wLTNiNzNhMmZmMDctM2Q0ZDZiYWJjYy56aXAvbm9kZV9tb2R1bGVzL2hlL2hlLmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvcGF0aC1icm93c2VyaWZ5LW5wbS0xLjAuMS1mOTc1ZDk5YTk5LWM2ZDdmYTM3NjQuemlwL25vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCIuLi8uLi8ueWFybi9jYWNoZS9wcm9jZXNzLW5wbS0wLjExLjEwLWFlYjNiNjQxYWUtYmZjY2U0OTgxNC56aXAvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIi4uLy4uLy55YXJuL2NhY2hlL3F1ZXJ5c3RyaW5nLWVzMy1ucG0tMC4yLjEtZjQ2MzJmMjc2MC02OTFlOGQ2YjhiLnppcC9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2RlY29kZS5qcyIsIi4uLy4uLy55YXJuL2NhY2hlL3F1ZXJ5c3RyaW5nLWVzMy1ucG0tMC4yLjEtZjQ2MzJmMjc2MC02OTFlOGQ2YjhiLnppcC9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIi4uLy4uLy55YXJuL2NhY2hlL3F1ZXJ5c3RyaW5nLWVzMy1ucG0tMC4yLjEtZjQ2MzJmMjc2MC02OTFlOGQ2YjhiLnppcC9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzIiwiLi4vLi4vLnlhcm4vY2FjaGUvdW5kZXJzY29yZS1ucG0tMS4xMy42LTNlYmU5ZDkyZmItZDVjZWRkMTRhOS56aXAvbm9kZV9tb2R1bGVzL3VuZGVyc2NvcmUvdW5kZXJzY29yZS11bWQuanMiLCJidXNpbmVzcy1vYmplY3RzL0dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzLmpzIiwibGliL2dldE9wdGltaXplZENvdmVyLXRzLmpzIiwibGliL3V0aWxpdHkvbWFjbWlsbGFuTWVzc2FnZS5qcyIsIm1vZGVscy9kYW8vTWVkaWFQYXJhbWV0ZXJzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb2xsZWN0aW9uX2NhbXBhaWduX3BhZ2UvQ29sbGVjdGlvbkRlZmluaXRpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbGxlY3Rpb25fY2FtcGFpZ25fcGFnZS9QYWdlTWFuYWdlci5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvY29tbW9uL0hhc2hNYW5hZ2VyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9jb21tb24vbW9kYWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL2NvbW1vbi90ZW1wbGF0ZXMvbW9kYWwuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3RlbXBsYXRlcy9Ib2xkSW5mb3JtYXRpb24uaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvaG9sZEluZm9ybWF0aW9uL3ZpZXdzL0hvbGRJbmZvcm1hdGlvbk1vZGFsLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25Nb2RhbFYyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMi5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvQ29udGV4dE1lbnUuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL0NvdmVyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9NZWRpYUludGVyZmFjZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVBY3Rpb25CdXR0b24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQ2FyZC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvVGl0bGVDYXJkTGlzdFZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlQ29sbGVjdGlvblZpZXcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL1RpdGxlSGVhZGVyQmFyLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS9XaXNoTGlzdEJ1dHRvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL01lZGlhVmlld1ByZWZlcmVuY2UuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL21vZGVscy9UaXRsZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlQ29sbGVjdGlvbi5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL0NvbnRleHRNZW51Lmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9Db3BpZXNBdmFpbGFibGUuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL0NvdmVyLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9Ob0NvdmVyLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9TdGFyVmlld1RlbXBsYXRlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9UaXRsZUNhcmQuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlRm9ybWF0QmFkZ2UuaHRtbC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdGVtcGxhdGVzL1RpdGxlTmFtZS5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS90ZW1wbGF0ZXMvVGl0bGVQcmVSZWxlYXNlLmh0bWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3RlbXBsYXRlcy9XaXNoTGlzdEJ1dHRvbi5odG1sLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUNvbGxlY3Rpb25WaWV3U2VsZWN0b3IuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlRGVzY3JpcHRpb24uanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL0NvcGllc0F2YWlsYWJsZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1N0YXJSYXRpbmcuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9jb21wb25lbnRzL21lZGlhL3ZpZXdzL1RpdGxlSW5mby9TdGFyVmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlQXV0aG9yLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVFZGl0aW9uLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm8vVGl0bGVGb3JtYXRCYWRnZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlTmFtZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlUHJlUmVsZWFzZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVJbmZvL1RpdGxlU2VyaWVzLmpzIiwicHVibGljL2VjbWFzY3JpcHQvY29tcG9uZW50cy9tZWRpYS92aWV3cy9UaXRsZUluZm9MaXN0Vmlldy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L21vZGVscy9iYXNlLmpzIiwicHVibGljL2VjbWFzY3JpcHQvbW9kZWxzL3BhdHJvbl9tZWRpYV9pdGVtcy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3BhZ2VzL2ZhY2V0cy9mYWNldHNfY29udHJvbGxlci5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3BhZ2VzL2ZhY2V0cy9mYWNldHNfbW9kZWwuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC9wYWdlcy9zZWFyY2guanMiLCJwdWJsaWMvZWNtYXNjcmlwdC90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucy5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3RpdGxlLWFjdGlvbnMvVGl0bGVTdGF0ZS5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3V0aWwvZW5jb2RpbmcvcmZjMzk4NkVuY29kZVVSSUNvbXBvbmVudC5qcyIsInB1YmxpYy9lY21hc2NyaXB0L3V0aWwva2V5Y29kZXMuanMiLCJwdWJsaWMvZWNtYXNjcmlwdC91dGlsL3RpdGxlLWFjdGlvbnMvcHJvY2Vzc0ZvcndhcmRlZEFjdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2poQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQzEvREEsSUFBTSxJQUFJLFFBQVEsWUFBUixDQUFWOztBQUVBO0FBQ0EsT0FBTyxPQUFQO0FBQ0ksMENBQWM7QUFBQTs7QUFDVixhQUFLLFNBQUwsR0FBMEIsRUFBMUI7QUFDQSxhQUFLLFFBQUwsR0FBMEIsRUFBMUI7QUFDQSxhQUFLLGlCQUFMLEdBQTBCLElBQTFCLENBSFUsQ0FHc0I7QUFDaEMsYUFBSyxjQUFMLEdBQTBCLEVBQTFCLENBSlUsQ0FJb0I7QUFDOUIsYUFBSyxRQUFMLEdBQTBCLEVBQTFCLENBTFUsQ0FLb0I7QUFDOUIsYUFBSyxVQUFMLEdBQTBCLEVBQTFCOztBQUVBLGFBQUssTUFBTCxHQUEwQixFQUExQjtBQUNBLGFBQUssUUFBTCxHQUEwQixTQUExQixDQVRVLENBUzJCOztBQUVyQyxlQUFPLE1BQVAsZ0JBQWMsSUFBZCxvQ0FBdUIsU0FBdkI7QUFDSDs7QUFFRDs7O0FBZko7QUFBQTtBQUFBLDZDQWdCeUI7QUFDakIsZ0JBQUksUUFBUSxFQUFFLE1BQUYsQ0FBUyxFQUFULEVBQWEsSUFBYixDQUFaOztBQUVBO0FBQ0Esa0JBQU0sUUFBTixHQUFpQixFQUFFLEVBQUUsT0FBRixDQUFVLENBQUMsTUFBTSxRQUFQLENBQVYsQ0FBRixFQUErQixNQUEvQixDQUFzQyxVQUFDLEdBQUQ7QUFBQSx1QkFBUyxFQUFFLE9BQUYsQ0FBVSxHQUFWLENBQVQ7QUFBQSxhQUF0QyxDQUFqQjs7QUFFQTtBQUNBLGtCQUFNLGFBQU4sR0FBc0IsRUFBRSxFQUFFLE9BQUYsQ0FBVSxDQUFDLE1BQU0sY0FBUCxDQUFWLENBQUYsRUFBcUMsTUFBckMsQ0FBNEMsVUFBQyxHQUFEO0FBQUEsdUJBQVMsRUFBRSxPQUFGLENBQVUsR0FBVixDQUFUO0FBQUEsYUFBNUMsQ0FBdEI7QUFDQSxtQkFBTyxNQUFNLGNBQWI7O0FBRUE7QUFDQSxrQkFBTSxPQUFOLEdBQWdCLEVBQUUsRUFBRSxPQUFGLENBQVUsQ0FBQyxNQUFNLFFBQVAsQ0FBVixDQUFGLEVBQStCLE1BQS9CLENBQXNDLFVBQUMsR0FBRDtBQUFBLHVCQUFTLEVBQUUsT0FBRixDQUFVLEdBQVYsQ0FBVDtBQUFBLGFBQXRDLENBQWhCO0FBQ0EsbUJBQU8sTUFBTSxRQUFiOztBQUVBLGdCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyw0QkFBaEMsQ0FBSixFQUFtRTtBQUMvRCxzQkFBTSxTQUFOLEdBQWtCLEVBQUUsRUFBRSxPQUFGLENBQVUsQ0FBQyxNQUFNLFVBQVAsQ0FBVixDQUFGLEVBQWlDLE1BQWpDLENBQXdDLFVBQUMsR0FBRDtBQUFBLDJCQUFTLEVBQUUsT0FBRixDQUFVLEdBQVYsQ0FBVDtBQUFBLGlCQUF4QyxDQUFsQjtBQUNIOztBQUVELGdCQUFJLE1BQU0sVUFBVixFQUFzQjtBQUNsQixvQkFBSSxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsOEJBQWhDLENBQUosRUFBcUU7QUFDakUsMkJBQU8sTUFBTSxTQUFiO0FBQ0gsaUJBRkQsTUFFTTtBQUNGLDJCQUFPLE1BQU0sVUFBYjtBQUNIO0FBQ0o7O0FBRUQsZ0JBQUksTUFBTSxVQUFWLEVBQXNCO0FBQ2xCLHNCQUFNLFVBQU4sR0FBb0IsTUFBTSxVQUFOLENBQWlCLElBQWpCLENBQXNCLEdBQXRCLENBQXBCO0FBQ0gsYUFGRCxNQUVPLElBQUksT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLGdCQUFoQyxDQUFKLEVBQXVEO0FBQzFELHNCQUFNLFVBQU4sR0FBbUIsT0FBTyxTQUFQLENBQWlCLHFCQUFwQztBQUNIOztBQUVELG1CQUFPLE1BQU0sVUFBYixDQWhDaUIsQ0FnQ1M7O0FBRTFCLG1CQUFPLEtBQVA7QUFDSDtBQW5ETDs7QUFBQTtBQUFBOzs7QUNIQTs7QUFDQSxJQUFJLGtCQUFtQixhQUFRLFVBQUssZUFBZCxLQUFtQyxPQUFPLE1BQVAsR0FBaUIsVUFBUyxDQUFULEVBQVksQ0FBWixFQUFlLENBQWYsRUFBa0IsRUFBbEIsRUFBc0I7QUFDNUYsUUFBSSxPQUFPLFNBQVgsRUFBc0IsS0FBSyxDQUFMO0FBQ3RCLFFBQUksT0FBTyxPQUFPLHdCQUFQLENBQWdDLENBQWhDLEVBQW1DLENBQW5DLENBQVg7QUFDQSxRQUFJLENBQUMsSUFBRCxLQUFVLFNBQVMsSUFBVCxHQUFnQixDQUFDLEVBQUUsVUFBbkIsR0FBZ0MsS0FBSyxRQUFMLElBQWlCLEtBQUssWUFBaEUsQ0FBSixFQUFtRjtBQUNqRixlQUFPLEVBQUUsWUFBWSxJQUFkLEVBQW9CLEtBQUssZUFBVztBQUFFLHVCQUFPLEVBQUUsQ0FBRixDQUFQO0FBQWMsYUFBcEQsRUFBUDtBQUNEO0FBQ0QsV0FBTyxjQUFQLENBQXNCLENBQXRCLEVBQXlCLEVBQXpCLEVBQTZCLElBQTdCO0FBQ0gsQ0FQd0QsR0FPbkQsVUFBUyxDQUFULEVBQVksQ0FBWixFQUFlLENBQWYsRUFBa0IsRUFBbEIsRUFBc0I7QUFDeEIsUUFBSSxPQUFPLFNBQVgsRUFBc0IsS0FBSyxDQUFMO0FBQ3RCLE1BQUUsRUFBRixJQUFRLEVBQUUsQ0FBRixDQUFSO0FBQ0gsQ0FWcUIsQ0FBdEI7QUFXQSxJQUFJLHFCQUFzQixhQUFRLFVBQUssa0JBQWQsS0FBc0MsT0FBTyxNQUFQLEdBQWlCLFVBQVMsQ0FBVCxFQUFZLENBQVosRUFBZTtBQUMzRixXQUFPLGNBQVAsQ0FBc0IsQ0FBdEIsRUFBeUIsU0FBekIsRUFBb0MsRUFBRSxZQUFZLElBQWQsRUFBb0IsT0FBTyxDQUEzQixFQUFwQztBQUNILENBRjhELEdBRTFELFVBQVMsQ0FBVCxFQUFZLENBQVosRUFBZTtBQUNoQixNQUFFLFNBQUYsSUFBZSxDQUFmO0FBQ0gsQ0FKd0IsQ0FBekI7QUFLQSxJQUFJLGVBQWdCLGFBQVEsVUFBSyxZQUFkLElBQStCLFVBQVUsR0FBVixFQUFlO0FBQzdELFFBQUksT0FBTyxJQUFJLFVBQWYsRUFBMkIsT0FBTyxHQUFQO0FBQzNCLFFBQUksU0FBUyxFQUFiO0FBQ0EsUUFBSSxPQUFPLElBQVgsRUFBaUIsS0FBSyxJQUFJLENBQVQsSUFBYyxHQUFkO0FBQW1CLFlBQUksTUFBTSxTQUFOLElBQW1CLE9BQU8sU0FBUCxDQUFpQixjQUFqQixDQUFnQyxJQUFoQyxDQUFxQyxHQUFyQyxFQUEwQyxDQUExQyxDQUF2QixFQUFxRSxnQkFBZ0IsTUFBaEIsRUFBd0IsR0FBeEIsRUFBNkIsQ0FBN0I7QUFBeEYsS0FDakIsbUJBQW1CLE1BQW5CLEVBQTJCLEdBQTNCO0FBQ0EsV0FBTyxNQUFQO0FBQ0gsQ0FORDtBQU9BLE9BQU8sY0FBUCxDQUFzQixPQUF0QixFQUErQixZQUEvQixFQUE2QyxFQUFFLE9BQU8sSUFBVCxFQUE3QztBQUNBLFFBQVEsa0JBQVIsR0FBNkIsS0FBSyxDQUFsQztBQUNBLElBQUksSUFBSSxhQUFhLFFBQVEsWUFBUixDQUFiLENBQVI7QUFDQSxTQUFTLGtCQUFULENBQTRCLE1BQTVCLEVBQW9DLFdBQXBDLEVBQWlEO0FBQzdDO0FBQ0EsUUFBSSxlQUFlLEVBQUUsTUFBRixDQUFTLE1BQVQsRUFBaUIsT0FBakIsQ0FBbkI7QUFDQTtBQUNBO0FBQ0EsUUFBSSxpQkFBaUIsT0FBTyxNQUFQLENBQWMsRUFBZCxFQUFrQixFQUFFLElBQUYsQ0FBTyxZQUFQLENBQWxCLENBQXJCO0FBQ0EsUUFBSSxrQkFBa0IsZUFBZSxJQUFyQyxFQUEyQztBQUN2QyxZQUFJLGlDQUFpQztBQUNqQyx3Q0FBNEIsOEJBREs7QUFFakMsaURBQXFDO0FBRkosU0FBckM7QUFJQSxZQUFJLGFBQWEsRUFBRSxJQUFGLENBQU8sT0FBTyxJQUFQLENBQVksOEJBQVosQ0FBUCxFQUFvRCxVQUFVLE1BQVYsRUFBa0I7QUFBRSxtQkFBTyxlQUFlLElBQWYsQ0FBb0IsVUFBcEIsQ0FBK0IsTUFBL0IsQ0FBUDtBQUFnRCxTQUF4SCxDQUFqQjtBQUNBLFlBQUksVUFBSixFQUFnQjtBQUNaO0FBQ0EsZ0JBQUkscUJBQXFCLCtCQUErQixVQUEvQixDQUF6QjtBQUNBLGdCQUFJLGdCQUFnQixXQUFwQixDQUhZLENBR3FCO0FBQ2pDLGdCQUFJLE9BQU8sRUFBWDtBQUNBLGdCQUFJLE9BQU8sUUFBUCxLQUFvQixXQUF4QixFQUFxQztBQUNqQztBQUNBLG9CQUFJLE1BQU0sSUFBSSxHQUFKLENBQVEsZUFBZSxJQUF2QixDQUFWO0FBQ0EsdUJBQU8sSUFBSSxRQUFYO0FBQ0gsYUFKRCxNQUtLO0FBQ0Q7QUFDQSxvQkFBSSxJQUFJLFNBQVMsYUFBVCxDQUF1QixHQUF2QixDQUFSO0FBQ0Esa0JBQUUsSUFBRixHQUFTLGVBQWUsSUFBeEI7QUFDQSx1QkFBTyxFQUFFLFFBQVQ7QUFDQSxvQkFBSSxDQUFDLEtBQUssVUFBTCxDQUFnQixHQUFoQixDQUFMLEVBQTJCO0FBQUU7QUFDekIsMkJBQU8sSUFBSSxNQUFKLENBQVcsSUFBWCxDQUFQO0FBQ0g7QUFDSjtBQUNELGdCQUFJLGdCQUFnQixtQkFBbUIsSUFBbkIsQ0FBcEI7QUFDQSxnQkFBSSx1QkFBdUIsR0FBRyxNQUFILENBQVUsa0JBQVYsRUFBOEIsR0FBOUIsRUFBbUMsTUFBbkMsQ0FBMEMsYUFBMUMsRUFBeUQsT0FBekQsRUFBa0UsTUFBbEUsQ0FBeUUsYUFBekUsRUFBd0YsaUJBQXhGLENBQTNCO0FBQ0EsMkJBQWUsSUFBZixHQUFzQixHQUFHLE1BQUgsQ0FBVSxvQkFBVixFQUFnQyxTQUFoQyxFQUEyQyxNQUEzQyxDQUFrRCxXQUFsRCxDQUF0QjtBQUNBLDJCQUFlLE1BQWYsR0FBd0IsR0FBRyxNQUFILENBQVUsb0JBQVYsRUFBZ0MsU0FBaEMsRUFBMkMsTUFBM0MsQ0FBa0QsS0FBSyxLQUFMLENBQVcsY0FBYyxDQUF6QixDQUFsRCxFQUErRSxPQUEvRSxJQUNwQixHQUFHLE1BQUgsQ0FBVSxvQkFBVixFQUFnQyxTQUFoQyxFQUEyQyxNQUEzQyxDQUFrRCxLQUFLLEtBQUwsQ0FBVyxjQUFjLEdBQXpCLENBQWxELEVBQWlGLFNBQWpGLENBRG9CLEdBRXBCLEdBQUcsTUFBSCxDQUFVLG9CQUFWLEVBQWdDLFNBQWhDLEVBQTJDLE1BQTNDLENBQWtELFdBQWxELEVBQStELEtBQS9ELENBRko7QUFHQSxtQkFBTyxjQUFQO0FBQ0g7QUFDSjtBQUNELFdBQU8sRUFBRSxJQUFGLENBQU8sWUFBUCxFQUFxQixVQUFVLEtBQVYsRUFBaUI7QUFBRSxlQUFPLE1BQU0sS0FBTixJQUFlLFdBQXRCO0FBQW9DLEtBQTVFLEtBQ0gsRUFBRSxJQUFGLENBQU8sWUFBUCxDQURKLENBeEM2QyxDQXlDbkI7QUFDN0I7QUFDRCxRQUFRLGtCQUFSLEdBQTZCLGtCQUE3Qjs7QUFFQTs7QUFFQTs7Ozs7Ozs7QUMxRUE7O0FBRUEsSUFBTSxtQkFBbUIsU0FBbkIsZ0JBQW1CLENBQVMsS0FBVCxFQUFnQjtBQUNyQyxRQUFJLGVBQWUsU0FBUyxNQUFNLEdBQU4sQ0FBVSxrQkFBVixFQUE4QixFQUF2QyxFQUEyQyxFQUEzQyxNQUFtRCxJQUF0RTtBQUNBLFFBQUksUUFBUSxJQUFJLElBQUosRUFBWjtBQUNBLFFBQUksY0FBYyxJQUFJLElBQUosQ0FBUyxNQUFNLEdBQU4sQ0FBVSxzQkFBVixDQUFULENBQWxCO0FBQ0EsUUFBSSxtQ0FBbUMsZUFBZSxJQUFJLElBQUosQ0FBUyxJQUFULEVBQWUsRUFBZixFQUFtQixDQUFuQixDQUF0RDtBQUNBLFFBQUksd0JBQXdCLElBQUksSUFBSixDQUFTLFdBQVQsQ0FBNUI7QUFDQSwwQkFBc0IsT0FBdEIsQ0FBOEIsWUFBWSxPQUFaLEtBQXlCLElBQUksQ0FBM0Q7QUFDQSxRQUFJLDhCQUErQixjQUFjLEtBQWYsSUFBMEIsUUFBUSxxQkFBcEU7O0FBRUEsV0FBTyxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0Msb0JBQWhDLEtBQ0ksZ0NBREosSUFFSSxZQUZKLEtBR0ssK0JBQWdDLG9DQUFvQyxNQUFNLEdBQU4sQ0FBVSxtQkFBVixDQUh6RSxJQUlELEtBQUssa0JBQUwsRUFBeUIsRUFBQyxNQUFPLHFCQUFSLEVBQXpCLENBSkMsR0FLRCxFQUxOO0FBTUgsQ0FmRDs7cUJBaUJlLGdCOzs7Ozs7Ozs7QUNuQmYsSUFBTSxDQUFBLEdBQUksT0FBQSxDQUFRLFlBQVIsQ0FBVixDQUFBOzs7Ozs7O0FBT0EsTUFBQSxDQUFPLE9BQVAsR0FBQSxZQUFBO0lBRUksU0FBQSxlQUFBLEdBQWM7UUFBQSxlQUFBLENBQUEsSUFBQSxFQUFBLGVBQUEsQ0FBQSxDQUFBOztRQUNWLElBQUEsQ0FBSyxLQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssU0FBTCxHQUFrQyxFQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLFVBQUwsR0FBa0MsRUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxLQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssTUFBTCxHQUFrQyxFQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLFdBQUwsR0FBa0MsRUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxpQkFBTCxHQUFrQyxJQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLFNBQUwsR0FBa0MsRUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxVQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssT0FBTCxHQUFrQyxFQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLFNBQUwsR0FBa0MsSUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxTQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssY0FBTCxHQUFrQyxJQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLGlCQUFMLEdBQWtDLEtBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssa0JBQUwsR0FBa0MsS0FBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyx5QkFBTCxHQUFrQyxLQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLHdCQUFMLEdBQWtDLElBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssWUFBTCxHQUFrQyxDQUFsQyxDQUFBOzs7UUFHQSxJQUFBLENBQUssTUFBTCxHQUFrQyxFQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLE9BQUwsR0FBa0MsRUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxTQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssYUFBTCxHQUFrQyxFQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLFFBQUwsR0FBa0MsRUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxTQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssV0FBTCxHQUFrQyxFQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLGFBQUwsR0FBa0MsRUFBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxVQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssY0FBTCxHQUFrQyxFQUFsQyxDQUFBOztRQUVBLElBQUEsQ0FBSyxNQUFMLEdBQWtDLFdBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssSUFBTCxHQUFrQyxPQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLElBQUwsR0FBa0MsQ0FBbEMsQ0FBQTtRQUNBLElBQUEsQ0FBSyxPQUFMLEdBQWtDLEVBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssYUFBTCxHQUFrQyxJQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLHFCQUFMLEdBQWtDLEtBQWxDLENBQUE7UUFDQSxJQUFBLENBQUssZUFBTCxHQUFrQyxLQUFsQyxDQUFBO1FBQ0EsSUFBQSxDQUFLLFFBQUwsR0FBa0MsQ0FBbEMsQ0FBQTs7UUFFQSxNQUFBLENBQU8sTUFBUCxDQUFBLEtBQUEsQ0FBQSxNQUFBLEVBQUEsQ0FBYyxJQUFkLENBQUEsQ0FBQSxNQUFBLENBQUEsS0FBQSxDQUFBLFNBQUEsQ0FBQSxLQUFBLENBQUEsSUFBQSxDQUF1QixTQUF2QixDQUFBLENBQUEsQ0FBQSxDQUFBO0tBQ0g7O0lBNUNMLFlBQUEsQ0FBQSxlQUFBLEVBQUEsQ0FBQTtRQUFBLEdBQUEsRUFBQSw4QkFBQTtRQUFBLEtBQUEsRUFBQSxTQUFBLDRCQUFBLENBOENpQyxXQTlDakMsRUE4QzhDLGVBOUM5QyxFQThDK0Q7WUFDdkQsSUFBSSxXQUFKLEVBQWlCOztnQkFFYixJQUFJLFdBQUEsQ0FBWSxjQUFoQixFQUFnQztvQkFDNUIsSUFBQSxDQUFLLGFBQUwsR0FBcUIsV0FBQSxDQUFZLGNBQWpDLENBQUE7aUJBQ0g7Z0JBQ0QsSUFBSSxXQUFBLENBQVksUUFBaEIsRUFBMEI7b0JBQ3RCLElBQUEsQ0FBSyxPQUFMLEdBQWUsV0FBQSxDQUFZLFFBQTNCLENBQUE7aUJBQ0g7Z0JBQ0QsSUFBSSxXQUFBLENBQVksUUFBaEIsRUFBMEI7b0JBQ3RCLElBQUEsQ0FBSyxRQUFMLEdBQWdCLFdBQUEsQ0FBWSxRQUE1QixDQUFBO2lCQUNIO2dCQUNELElBQUksV0FBQSxDQUFZLFNBQWhCLEVBQTJCO29CQUN2QixJQUFBLENBQUssU0FBTCxHQUFpQixXQUFBLENBQVksU0FBN0IsQ0FBQTtvQkFDQSxJQUFBLENBQUssVUFBTCxHQUFrQixXQUFBLENBQVksU0FBOUIsQ0FBQTtpQkFDSDthQUNKOztZQUVELElBQUksZUFBSixFQUFxQjs7O2dCQUdqQixJQUFJLGVBQUEsQ0FBZ0Isa0JBQWhCLENBQUEsSUFBdUMsSUFBQSxDQUFLLGFBQUwsQ0FBbUIsTUFBbkIsS0FBOEIsQ0FBekUsRUFBNEU7b0JBQ3hFLElBQUksUUFBQSxHQUFXLGVBQUEsQ0FBZ0Isa0JBQWhCLENBQWYsQ0FBQTtvQkFDQSxJQUFJLGNBQUEsR0FBaUIsRUFBckIsQ0FBQTtvQkFDQSxDQUFBLENBQUUsSUFBRixDQUFPLENBQUEsQ0FBRSxJQUFGLENBQU8sUUFBUCxDQUFQLEVBQXlCLFVBQVMsR0FBVCxFQUFjO3dCQUNuQyxJQUFJLFFBQUEsQ0FBUyxHQUFULENBQUEsSUFBaUIsR0FBQSxLQUFRLEtBQTdCLEVBQW9DOzRCQUNoQyxjQUFBLENBQWUsSUFBZixDQUFvQixHQUFwQixDQUFBLENBQUE7eUJBQ0g7cUJBSEwsQ0FBQSxDQUFBO29CQUtBLElBQUksY0FBQSxDQUFlLE1BQWYsR0FBd0IsQ0FBNUIsRUFBK0I7d0JBQzNCLElBQUEsQ0FBSyxhQUFMLEdBQXFCLGNBQXJCLENBQUE7cUJBQ0g7aUJBQ0o7YUFDSjtTQUNKO0tBaEZMLEVBQUE7UUFBQSxHQUFBLEVBQUEsV0FBQTtRQUFBLEtBQUEsRUFBQSxTQUFBLFNBQUEsR0FrRmdCO1lBQUEsSUFBQSxLQUFBLEdBQUEsSUFBQSxDQUFBOztZQUNSLElBQUksUUFBQSxHQUFXLENBQUEsQ0FBRSxNQUFGLENBQVMsRUFBVCxFQUFhLElBQWIsQ0FBZixDQUFBOzs7WUFHQSxNQUFBLENBQU8sSUFBUCxDQUFZLFFBQVosQ0FBQSxDQUFzQixPQUF0QixDQUE4QixVQUFDLEdBQUQsRUFBUztnQkFDbkMsQ0FBQyxLQUFBLENBQUssU0FBTCxDQUFlLFFBQUEsQ0FBUyxHQUFULENBQWYsQ0FBRCxJQUFrQyxPQUFPLFFBQUEsQ0FBUyxHQUFULENBQXpDLENBQUE7YUFESixDQUFBLENBQUE7O1lBSUEsT0FBTyxRQUFQLENBQUE7U0FDSDtLQTNGTCxFQUFBO1FBQUEsR0FBQSxFQUFBLFdBQUE7UUFBQSxLQUFBLEVBQUEsU0FBQSxTQUFBLENBNkZjLEtBN0ZkLEVBNkZxQjtZQUNiLE9BQU8sRUFBRyxDQUFBLENBQUUsS0FBRixDQUFBLENBQVMsUUFBVCxFQUFBLElBQXVCLENBQUEsQ0FBRSxLQUFGLENBQUEsQ0FBUyxPQUFULEVBQXhCLElBQStDLENBQUMsS0FBbEQsQ0FBQSxJQUE0RCxLQUFBLEtBQVUsS0FBN0UsQ0FBQTtTQUNIO0tBL0ZMLENBQUEsQ0FBQSxDQUFBOztJQUFBLE9BQUEsZUFBQSxDQUFBO0NBQUEsRUFBQSxDQUFBOzs7Ozs7Ozs7Ozs7QUNQQTs7OztBQUVBOzs7Ozs7Ozs7Ozs7QUFFQTtJQUNxQixvQjs7Ozs7bUNBMEJOO0FBQ1AsbUJBQU87QUFDSCxvQkFBOEIsR0FEM0I7QUFFSCxzQkFBOEIsRUFGM0I7QUFHSCw2QkFBOEIsRUFIM0I7QUFJSCxvQ0FBOEIsRUFKM0I7QUFLSCxtQ0FBOEIsS0FMM0I7QUFNSCxvQ0FBOEIsS0FOM0I7QUFPSCxvQ0FBOEIsS0FQM0I7QUFRSCwwQ0FBOEIsSUFSM0I7QUFTSCw0Q0FBOEIsSUFUM0I7QUFVSCw4QkFBOEIsSUFWM0I7QUFXSCx1QkFBOEIsQ0FYM0I7O0FBYUg7QUFDQSw0QkFBOEI7QUFkM0IsYUFBUDtBQWdCSDs7OzRCQXpDaUI7QUFBRSxtQkFBTyxJQUFQO0FBQWM7Ozs0QkFFVjtBQUNwQixnQkFBSSxVQUFVO0FBQ1YsK0JBQWUsS0FETDtBQUVWLHlCQUFlLEtBQUssUUFBTCxJQUFpQixDQUZ0QjtBQUdWLHlCQUFlLEtBQUssT0FBTCxJQUFnQixLQUFLO0FBSDFCLGFBQWQ7QUFLQSxnQkFBSSxLQUFLLEdBQUwsQ0FBUyxvQkFBVCxLQUFrQyxLQUFLLEdBQUwsQ0FBUyxvQkFBVCxNQUFtQyxpQkFBekUsRUFBNEY7QUFDeEYsd0JBQVEsY0FBUixHQUF5QixJQUF6QjtBQUNIO0FBQ0QsZ0JBQUksS0FBSyxHQUFMLENBQVMsbUJBQVQsS0FBaUMsS0FBSyxHQUFMLENBQVMsb0JBQVQsTUFBbUMsZ0JBQXhFLEVBQTBGO0FBQ3RGLHdCQUFRLGlCQUFSLEdBQTRCLElBQTVCO0FBQ0g7QUFDRCxnQkFBSSxLQUFLLEdBQUwsQ0FBUyxvQkFBVCxDQUFKLEVBQW9DO0FBQ2hDLHdCQUFRLGtCQUFSLEdBQTZCLElBQTdCO0FBQ0g7QUFDRCxnQkFBSSxLQUFLLFlBQVQsRUFBc0I7QUFDbEIsd0JBQVEsTUFBUixHQUFpQixXQUFqQjtBQUNIOztBQUVELG1CQUFPLE9BQVA7QUFDSDs7OzRCQXFCZTtBQUNaLG1CQUFPLEtBQUssR0FBTCxDQUFTLG9CQUFULE1BQW1DLG9CQUExQztBQUNIOzs7NEJBRWlCO0FBQ2QsbUJBQU8sQ0FBQyxFQUFFLEtBQUssR0FBTCxDQUFTLDRCQUFULENBQUYsRUFBMEMsT0FBMUMsRUFBUjtBQUNIOzs7NEJBRWU7QUFDWixtQkFBTyxDQUFDLEVBQUUsS0FBSyxHQUFMLENBQVMsMEJBQVQsQ0FBRixFQUF3QyxPQUF4QyxFQUFSO0FBQ0g7Ozs0QkFFaUI7QUFDZCxtQkFBTyxLQUFLLFNBQUwsSUFBa0IsS0FBSyxHQUFMLENBQVMsMEJBQVQsRUFBcUMsU0FBOUQ7QUFDSDs7QUFFRDs7Ozs7OztBQUlBLG9DQUFjO0FBQUE7O0FBQUEsaUpBQ0QsU0FEQzs7QUFHVixjQUFLLGVBQUwsR0FBdUIsSUFBSSwyQkFBSixFQUF2Qjs7QUFFQSxjQUFLLGVBQUwsR0FBdUIsTUFBSyxlQUFMLENBQXFCLEtBQTVDOztBQUVBLGNBQUssUUFBTCxDQUFjLE1BQUssZUFBbkIsRUFBb0MsS0FBcEMsRUFBMkMsWUFBTTtBQUM3QyxrQkFBSyxHQUFMLENBQVMsWUFBVCxFQUF1QixNQUFLLGVBQUwsQ0FBcUIsTUFBNUM7QUFDSCxTQUZEO0FBUFU7QUFVYjs7OztvREFFOEM7QUFBQSxnQkFBdkIsY0FBdUIsUUFBdkIsY0FBdUI7QUFBQSxnQkFBUCxJQUFPLFFBQVAsSUFBTzs7QUFDM0M7QUFDQSxnQkFBSSw2QkFBNkIsQ0FBQyxFQUFFLE9BQUYsQ0FBVSxRQUFRLEtBQUssT0FBYixJQUF3QixLQUFLLE9BQUwsQ0FBYSxjQUEvQyxDQUFsQzs7QUFFQSxnQkFBSSxpQ0FBaUMsS0FBSyw0QkFBTCxDQUFrQyxjQUFsQyxDQUFyQzs7QUFFQSxnQkFBSSxLQUFLLFdBQVQsRUFBc0I7QUFDbEIsb0JBQUksZ0JBQWdCLEtBQUssR0FBTCxDQUFTLDRCQUFULENBQXBCO0FBQ0Esb0JBQUksS0FBSyxVQUFMLENBQWdCLE1BQXBCLEVBQTRCO0FBQ3hCLGtDQUFjLE1BQWQsR0FBdUIsS0FBSyxVQUFMLENBQWdCLE1BQXZDO0FBQ0g7QUFDRCxvQkFBSSxDQUFDLENBQUMsS0FBSyxHQUFMLENBQVMsMkJBQVQsQ0FBTixFQUE0QztBQUN4QyxrQ0FBYyx5QkFBZCxHQUEwQyxJQUExQztBQUNIO0FBQ0Qsb0JBQUksVUFBVSxJQUFJLHVDQUFKLENBQStCLGFBQS9CLENBQWQ7QUFDQSxvQkFBSSxTQUFVLFFBQVEsa0JBQVIsRUFBZDs7QUFFQSxvQkFBSSxDQUFDLENBQUMsZUFBZSxpQkFBckIsRUFBd0M7QUFDcEMsMkJBQU8saUJBQVAsR0FBMkIsSUFBM0I7QUFDSDs7QUFFRDtBQUNBO0FBQ0Esb0JBQUksMEJBQUosRUFBZ0M7QUFDNUIsMkJBQU8sS0FBSyxlQUFMLENBQXFCLDJCQUFyQixDQUFpRCxNQUFqRCxFQUF5RCxLQUFLLGlCQUE5RCxDQUFQO0FBQ0g7QUFDRDtBQUhBLHFCQUlLO0FBQ0QsNEJBQUksNkJBQTZCLE9BQU8sTUFBUCxDQUFjLEVBQWQsRUFBa0IsS0FBSyxpQkFBdkIsQ0FBakM7O0FBRUEsNEJBQUksQ0FBQyxFQUFFLDhCQUFGLEVBQWtDLE9BQWxDLEVBQUQsSUFBZ0QsRUFBRSxPQUFPLGFBQVQsRUFBd0IsT0FBeEIsRUFBcEQsRUFBdUY7QUFDbkYsbUNBQU8sTUFBUCxDQUFjLDBCQUFkLEVBQTBDLEVBQUUsZUFBZSw4QkFBakIsRUFBMUM7QUFDSDs7QUFFRDtBQUNBLCtCQUFPLEtBQUssOEJBQUwsQ0FBb0MsT0FBTyxhQUEzQyxFQUEwRCw4QkFBMUQsSUFDRCxLQUFLLGVBQUwsQ0FBcUIsMkJBQXJCLENBQWlELE1BQWpELEVBQXlELDBCQUF6RCxDQURDLEdBRUQsS0FBSyxlQUFMLENBQXFCLGtCQUFyQixFQUZOO0FBR0g7QUFDSjtBQUNEO0FBbENBLGlCQW1DSztBQUNELHdCQUFJLDJCQUEyQixPQUFPLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLEtBQUssaUJBQXZCLENBQS9COztBQUVBLHdCQUFJLENBQUMsQ0FBQyxlQUFlLGlCQUFyQixFQUF3QztBQUNwQyxpREFBeUIsaUJBQXpCLEdBQTZDLElBQTdDO0FBQ0g7O0FBRUQsd0JBQUksT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLDZCQUFoQyxLQUFrRSxLQUFLLFVBQUwsQ0FBZ0IsTUFBdEYsRUFBOEY7QUFDMUYsaURBQXlCLE1BQXpCLEdBQWtDLEtBQUssVUFBTCxDQUFnQixNQUFsRDtBQUNIOztBQUVEO0FBQ0E7QUFDQSx3QkFBSSxFQUFFLElBQUYsRUFBUSxPQUFSLEVBQUosRUFBdUI7QUFDbkIsK0JBQU8sTUFBUCxDQUFjLHdCQUFkLEVBQXdDLEVBQUUsZUFBZSw4QkFBakIsRUFBeEM7QUFDSDs7QUFFRCwyQkFBTyxLQUFLLGVBQUwsQ0FBcUIsbUJBQXJCLENBQXlDLEtBQUssRUFBOUMsRUFBa0Qsd0JBQWxELENBQVA7QUFDSDtBQUNKOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3FEQUM2QixjLEVBQWdCO0FBQ3pDLGdCQUFJLHdCQUF3QixrQkFBa0IsZUFBZSxrQkFBZixDQUFsQixJQUF3RCxFQUFwRjs7QUFFQSxnQkFBSSxFQUFFLHFCQUFGLEVBQXlCLE9BQXpCLE1BQXNDLHNCQUFzQixHQUFoRSxFQUFxRTtBQUNqRSx1QkFBTyxFQUFQO0FBQ0g7O0FBRUQsZ0JBQUksa0JBQWtCLEVBQXRCO0FBQ0EsY0FBRSxxQkFBRixFQUF5QixJQUF6QixDQUE4QixVQUFDLFNBQUQsRUFBWSxHQUFaLEVBQW9CO0FBQzlDLG9CQUFJLGFBQWEsUUFBUSxLQUF6QixFQUFnQztBQUM1QixvQ0FBZ0IsSUFBaEIsQ0FBcUIsR0FBckI7QUFDSDtBQUNKLGFBSkQ7O0FBTUEsbUJBQU8sZUFBUDtBQUNIOzs7eURBRXdGO0FBQUEsZ0JBQTFELHlCQUEwRCx1RUFBOUIsRUFBOEI7QUFBQSxnQkFBMUIsbUJBQTBCLHVFQUFKLEVBQUk7O0FBQ3JGLGdCQUFJLG9CQUFvQixNQUFwQixLQUErQixDQUFuQyxFQUFzQztBQUNsQyx1QkFBTyxJQUFQO0FBQ0g7O0FBRUQsZ0JBQU0sa0JBQWtCLDBCQUEwQixHQUExQixDQUE4QixVQUFDLE1BQUQ7QUFBQSx1QkFBWSxPQUFPLFdBQVAsRUFBWjtBQUFBLGFBQTlCLENBQXhCO0FBQ0EsZ0JBQU0sWUFBWSxvQkFBb0IsR0FBcEIsQ0FBd0IsVUFBQyxNQUFEO0FBQUEsdUJBQVksT0FBTyxXQUFQLEVBQVo7QUFBQSxhQUF4QixDQUFsQjs7QUFFQSxtQkFBTyxFQUFFLGVBQUYsRUFBbUIsVUFBbkIsQ0FBOEIsU0FBOUIsRUFBeUMsTUFBekMsS0FBb0QsQ0FBM0Q7QUFDSDs7OztFQS9LNkMsU0FBUyxLOztxQkFBdEMsb0I7Ozs7Ozs7Ozs7O0FDTHJCOzs7Ozs7Ozs7Ozs7SUFFcUIsVzs7Ozs7Ozs7Ozs7OztBQVFqQjtBQUNBO3dDQUMrQjtBQUFBOztBQUFBLGdCQUFqQixNQUFpQix1RUFBUixNQUFROztBQUMzQixpQkFBSyxHQUFMLEdBQVcsT0FBTyxHQUFQLENBQVcsT0FBTyxNQUFQLENBQWMsSUFBZCxDQUFtQixLQUFuQixDQUF5QixHQUFwQyxFQUF5QyxFQUFFLGNBQUYsRUFBekMsQ0FBWDs7QUFFQSxtQkFBTyxJQUFJLE9BQUosQ0FBWSxVQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFCO0FBQ3BDLHVCQUFLLEtBQUwsQ0FBVztBQUNQLDZCQUFTLEtBREY7QUFFUCw2QkFBUyxpQkFBQyxLQUFELEVBQVEsUUFBUixFQUFrQixPQUFsQjtBQUFBLCtCQUE4QixRQUFRLFFBQVIsQ0FBOUI7QUFBQSxxQkFGRjtBQUdQLDJCQUFPLGVBQUMsS0FBRCxFQUFRLFFBQVIsRUFBa0IsT0FBbEI7QUFBQSwrQkFBOEIsT0FBTyxRQUFQLENBQTlCO0FBQUE7QUFIQSxpQkFBWDtBQUtILGFBTk0sQ0FBUDtBQU9IOzs7MENBRWlCLFUsRUFBWTtBQUMxQixtQkFBTyxJQUFJLE9BQUosQ0FBWSxVQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFCO0FBQ3BDLGtCQUFFLElBQUYsQ0FBTztBQUNILHlCQUFLLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLElBQWQsQ0FBbUIsU0FBbkIsQ0FBNkIsR0FBeEMsRUFBNkMsRUFBRSxzQkFBRixFQUE3QyxDQURGO0FBRUgsOEJBQVUsTUFGUDtBQUdILDZCQUFTO0FBSE4saUJBQVAsRUFLSyxJQUxMLENBS1UsVUFBQyxRQUFEO0FBQUEsMkJBQWMsUUFBUSxRQUFSLENBQWQ7QUFBQSxpQkFMVixFQU1LLElBTkwsQ0FNVSxVQUFDLEtBQUQ7QUFBQSwyQkFBVyxPQUFPLEtBQVAsQ0FBWDtBQUFBLGlCQU5WO0FBT0gsYUFSTSxDQUFQO0FBU0g7Ozt3REFFOEM7QUFBQSxnQkFBakIsTUFBaUIsdUVBQVIsTUFBUTs7QUFDM0MsbUJBQU8sSUFBSSxPQUFKLENBQVksVUFBQyxPQUFELEVBQVUsTUFBVixFQUFxQjtBQUNwQyxrQkFBRSxJQUFGLENBQU87QUFDSCx5QkFBSyxPQUFPLEdBQVAsQ0FBVyxPQUFPLE1BQVAsQ0FBYyxJQUFkLENBQW1CLFNBQW5CLENBQTZCLG1CQUF4QyxFQUE2RCxFQUFFLGNBQUYsRUFBN0QsQ0FERjtBQUVILDhCQUFVLE1BRlA7QUFHSCw2QkFBUztBQUhOLGlCQUFQLEVBS0ssSUFMTCxDQUtVLFVBQUMsUUFBRDtBQUFBLDJCQUFjLFFBQVEsUUFBUixDQUFkO0FBQUEsaUJBTFYsRUFNSyxJQU5MLENBTVUsVUFBQyxLQUFEO0FBQUEsMkJBQVcsT0FBTyxLQUFQLENBQVg7QUFBQSxpQkFOVjtBQU9ILGFBUk0sQ0FBUDtBQVNIOzs7NENBRW1CLFksRUFBYztBQUM5QixtQkFBTyxJQUFJLE9BQUosQ0FBWSxVQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFCO0FBQ3BDLGtCQUFFLElBQUYsQ0FBTztBQUNILHlCQUFLLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLElBQWQsQ0FBbUIsV0FBbkIsQ0FBK0IsT0FBMUMsRUFBbUQsRUFBRSxJQUFJLFlBQU4sRUFBbkQsQ0FERjtBQUVILDhCQUFVLE1BRlA7QUFHSCw2QkFBUztBQUhOLGlCQUFQLEVBS0ssSUFMTCxDQUtVLFVBQUMsUUFBRDtBQUFBLDJCQUFjLFFBQVEsSUFBSSxpQ0FBSixDQUF5QixRQUF6QixDQUFSLENBQWQ7QUFBQSxpQkFMVixFQU1LLElBTkwsQ0FNVSxVQUFDLEtBQUQsRUFBUSxVQUFSLEVBQW9CLFdBQXBCO0FBQUEsMkJBQW9DLE9BQU8sS0FBUCxDQUFwQztBQUFBLGlCQU5WO0FBT0gsYUFSTSxDQUFQO0FBU0g7OztnQ0FFTyxRLEVBQVU7QUFDZCxnQkFBSSxDQUFDLEtBQUssUUFBVixFQUFvQjtBQUFFLHVCQUFPLElBQVA7QUFBYzs7QUFFcEMsbUJBQU8sQ0FBQyxZQUFZLEVBQWIsRUFBaUIsV0FBakIsT0FBbUMsTUFBbkMsR0FDRCxFQUFFLEtBQUssVUFBTCxDQUFnQixLQUFsQixFQUF5QixTQUF6QixDQUFtQyxFQUFFLFdBQVcsSUFBYixFQUFuQyxDQURDLEdBRUQsRUFBRSxLQUFLLFVBQUwsQ0FBZ0IsS0FBbEIsRUFBeUIsU0FBekIsQ0FBbUMsRUFBRSxNQUFNLFFBQVIsRUFBbkMsQ0FGTjtBQUdIOzs7dUNBRWM7QUFDWCxtQkFBTyxLQUFLLFFBQUwsSUFBaUIsS0FBSyxVQUFMLENBQWdCLFNBQXhDO0FBQ0g7Ozs0QkFsRWlCO0FBQUUsbUJBQU8sUUFBUDtBQUFrQjs7OzRCQUV2QjtBQUNYLG1CQUFPLENBQUMsRUFBRSxPQUFGLENBQVUsS0FBSyxVQUFmLENBQVI7QUFDSDs7OztFQU5vQyxTQUFTLEs7O3FCQUE3QixXOzs7Ozs7Ozs7OztBQ0ZyQjs7Ozs7Ozs7SUFFcUIsVzs7Ozs7OztnQ0FFRjtBQUNYLGdCQUFJLGFBQWEseUJBQVksS0FBWixDQUFrQixTQUFTLElBQVQsQ0FBYyxNQUFkLENBQXFCLENBQXJCLENBQWxCLENBQWpCOztBQUVBLGNBQUUsSUFBRixDQUFPLFVBQVAsRUFBbUIsT0FBbkIsQ0FBMkIsVUFBQyxHQUFELEVBQVM7QUFDaEMsMkJBQVcsR0FBWCxJQUFrQixFQUFFLE9BQUYsQ0FBVSxDQUFDLFdBQVcsR0FBWCxLQUFtQixFQUFwQixDQUFWLENBQWxCO0FBQ0gsYUFGRDs7QUFJQSxtQkFBTyxVQUFQO0FBQ0g7OzsrQkFFYSxNLEVBQVE7QUFDbEIsZ0JBQUksVUFBVSx5QkFBWSxTQUFaLENBQXNCLE1BQXRCLENBQWQ7QUFDQSxnQkFBSSxZQUFZLEdBQWhCLEVBQW9CO0FBQ2hCLHlCQUFTLElBQVQsR0FBZ0IsT0FBaEI7QUFDSDtBQUNKOzs7NEJBRVUsRyxFQUFLO0FBQ1osZ0JBQUksV0FBVyxLQUFLLEtBQUwsRUFBZjs7QUFFQSxnQkFBSSxFQUFFLFFBQUYsQ0FBVyxHQUFYLENBQUosRUFBcUI7QUFDakIsdUJBQU8sU0FBUyxHQUFULENBQVA7QUFDSDs7QUFFRCxtQkFBTyxRQUFQO0FBQ0g7Ozs0QkFFVSxHLEVBQUssSyxFQUFPO0FBQ25CLGdCQUFJLE9BQU8sS0FBSyxLQUFMLEVBQVg7O0FBRUEsaUJBQUssR0FBTCxJQUFZLEVBQUUsT0FBRixDQUFVLENBQUMsS0FBRCxDQUFWLENBQVo7O0FBRUEsaUJBQUssTUFBTCxDQUFZLElBQVo7QUFDSDs7OzZCQUVXLEcsRUFBSyxLLEVBQU87QUFDcEIsZ0JBQUksT0FBTyxLQUFLLEtBQUwsRUFBWDs7QUFFQSxpQkFBSyxHQUFMLElBQVksS0FBSyxHQUFMLEtBQWEsRUFBekI7QUFDQSxpQkFBSyxHQUFMLEVBQVUsSUFBVixDQUFlLEtBQWY7O0FBRUEsaUJBQUssTUFBTCxDQUFZLElBQVo7QUFDSDs7OytCQUVhLEcsRUFBSztBQUNmLGdCQUFJLE9BQU8sS0FBSyxLQUFMLEVBQVg7O0FBRUEsaUJBQUssR0FBTCxLQUFhLE9BQU8sS0FBSyxHQUFMLENBQXBCOztBQUVBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaO0FBQ0g7Ozs7OztxQkFwRGdCLFc7Ozs7Ozs7Ozs7OztBQ0ZyQixJQUFBLFNBQUEsR0FBQSxPQUFBLENBQUEscUJBQUEsQ0FBQSxDQUFBOzs7O0FBQ0EsSUFBQSxNQUFBLEdBQUEsT0FBQSxDQUFBLHdCQUFBLENBQUEsQ0FBQTs7Ozs7Ozs7Ozs7O0lBRU07Ozs7Ozs7Ozs7Ozs7O3dMQXNFRixnQkFBZ0IsVUFBQyxDQUFELEVBQUE7WUFBQSxPQUFPLENBQUMsQ0FBQSxDQUFFLElBQUYsS0FBVyxPQUFYLElBQXNCLENBQUEsQ0FBRSxLQUFGLEtBQVksRUFBbEMsSUFBd0MsQ0FBQSxDQUFFLEtBQUYsS0FBWSxFQUFyRCxNQUE2RCxDQUFBLENBQUUsY0FBRixFQUFBLElBQXNCLElBQW5GLENBQVAsQ0FBQTs7Ozs7O21DQTFDTCxTQUFTO1lBQ2hCLENBQUEsQ0FBRSxNQUFGLENBQVMsSUFBVCxFQUFlLElBQUEsQ0FBSyxRQUFwQixFQUE4QixPQUE5QixDQUFBLENBQUE7O1lBRUEsSUFBQSxDQUFLLEdBQUwsR0FBVyxPQUFBLENBQUEsU0FBQSxDQUFYLENBQUE7WUFDQSxJQUFBLENBQUssVUFBTCxDQUFnQixJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBaEIsQ0FBQSxDQUFBOztZQUVBLElBQUksSUFBQSxDQUFLLEVBQUwsQ0FBUSxNQUFaLEVBQW9CO2dCQUNoQixJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxJQUFkLEVBQW9CLElBQUEsQ0FBSyxFQUF6QixDQUFBLENBQUE7YUFDSDs7WUFFRCxJQUFBLENBQUssUUFBTCxHQUFnQixJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxrQkFBZCxDQUFoQixDQUFBOztZQUVBLElBQUEsQ0FBSyxRQUFMLENBQWMsS0FBZCxFQUFBLENBQXNCLE1BQXRCLENBQTZCLElBQUEsQ0FBSyxPQUFsQyxDQUFBLENBQUE7O1lBRUEsSUFBQSxDQUFLLEdBQUwsQ0FBUyxRQUFULENBQWtCLElBQUEsQ0FBSyxPQUFMLENBQWEsSUFBYixDQUFrQixHQUFsQixDQUFsQixDQUFBLENBQUE7O1lBRUEsSUFBQSxDQUFLLE1BQUwsR0FBYyxJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxjQUFkLENBQWQsQ0FBQTs7WUFFQSxJQUFJLElBQUEsQ0FBSyxXQUFULEVBQXNCO2dCQUNsQixJQUFBLENBQUssTUFBTCxDQUFZLEdBQVosQ0FBZ0IsU0FBaEIsRUFBMkIsR0FBM0IsQ0FBQSxDQUFBO2FBQ0g7O1lBRUQsSUFBSSxJQUFBLENBQUssVUFBVCxFQUFxQjtnQkFDakIsSUFBQSxDQUFLLE9BQUwsRUFBQSxDQUFBO2FBQ0g7O1lBRUQsSUFBQSxDQUFLLFdBQUwsRUFBQSxDQUFBO1NBQ0g7OztrQ0FFUztZQUNOLElBQUksSUFBQSxDQUFLLGdCQUFULEVBQTJCOztnQkFFdkIsQ0FBQSxDQUFFLE1BQUYsQ0FBQSxDQUFVLE1BQVYsQ0FBaUIsSUFBQSxDQUFLLEVBQXRCLENBQUEsQ0FBQTthQUNIOztZQUVELElBQUksSUFBQSxDQUFLLFFBQVQsRUFBbUI7Z0JBQ2YsSUFBQSxDQUFLLElBQUwsRUFBQSxDQUFBO2FBQ0g7O1lBRUQsT0FBTyxJQUFQLENBQUE7U0FDSDs7Ozs7OztzQ0FNYTtZQUFBLElBQUEsTUFBQSxHQUFBLElBQUEsQ0FBQTs7WUFDVixJQUFBLENBQUssR0FBTCxDQUFTLEVBQVQsQ0FBWSxlQUFaLEVBQTZCLFdBQTdCLEVBQTBDLFVBQUMsQ0FBRCxFQUFPO2dCQUM3QyxNQUFBLENBQUssYUFBTCxDQUFtQixDQUFuQixDQUFBLElBQXlCLE1BQUEsQ0FBSyxPQUFMLENBQWEsUUFBYixFQUF1QixNQUF2QixDQUF6QixDQUFBO2FBREosQ0FBQSxDQUFBOztZQUlBLElBQUksSUFBQSxDQUFLLHNCQUFULEVBQWlDO2dCQUM3QixJQUFBLENBQUssRUFBTCxDQUFRLGNBQVIsRUFBd0IsWUFBTTtvQkFBRSxNQUFBLENBQUssS0FBTCxFQUFBLENBQUE7aUJBQWhDLENBQUEsQ0FBQTthQUNIOztZQUVELElBQUEsQ0FBSyxHQUFMLENBQVMsRUFBVCxDQUFZLFVBQVosRUFBd0IsR0FBeEIsRUFBNkIsVUFBQyxDQUFELEVBQU87Z0JBQ2hDLElBQUksQ0FBQSxDQUFFLEtBQUYsS0FBWSxVQUFBLENBQUEsU0FBQSxDQUFBLENBQUssR0FBckIsRUFBMEI7b0JBQ3RCLE1BQUEsQ0FBSyxVQUFMLENBQWdCLENBQWhCLENBQUEsQ0FBQTtpQkFDSDthQUhMLENBQUEsQ0FBQTs7WUFNQSxJQUFHLE1BQUEsQ0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLHdCQUFoQyxDQUFILEVBQThEOztnQkFFMUQsSUFBQSxDQUFLLEdBQUwsQ0FBUyxFQUFULENBQVkscUJBQVosRUFBbUMsUUFBbkMsRUFBNkMsVUFBUyxDQUFULEVBQVk7b0JBQ3JELElBQUksZ0JBQUEsR0FBbUIsQ0FBQSxDQUFFLElBQUYsS0FBVyxPQUFYLElBQXNCLENBQUEsQ0FBRSxLQUFGLEtBQVksVUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFLLEtBQXZDLElBQWdELENBQUEsQ0FBRSxLQUFGLEtBQVksVUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFLLEdBQXhGLENBQUE7b0JBQ0EsSUFBRyxDQUFDLGdCQUFKLEVBQXNCLE9BQUE7O29CQUV0QixJQUFJLFVBQUEsR0FBYSxDQUFBLENBQUUsSUFBRixDQUFBLENBQVEsSUFBUixDQUFhLFdBQWIsQ0FBakIsQ0FBQTs7b0JBRUEsSUFBRyxVQUFBLEtBQWUsTUFBbEIsRUFBMEI7d0JBQ3RCLENBQUEsQ0FBRSxJQUFGLENBQUEsQ0FBUSxJQUFSLENBQWEsV0FBYixFQUEwQixPQUExQixDQUFBLENBQUE7d0JBQ0EsQ0FBQSxDQUFFLGVBQUYsRUFBQSxDQUFBO3FCQUNIOztvQkFFRCxJQUFHLENBQUMsVUFBQSxLQUFlLE9BQWYsSUFBMEIsVUFBQSxJQUFjLElBQXpDLEtBQWtELENBQUEsQ0FBRSxLQUFGLEtBQVksVUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFLLEdBQXRFLEVBQTJFO3dCQUN2RSxDQUFBLENBQUUsSUFBRixDQUFBLENBQVEsSUFBUixDQUFhLFdBQWIsRUFBMEIsTUFBMUIsQ0FBQSxDQUFBO3FCQUNIO2lCQWJMLENBQUEsQ0FBQTs7Z0JBZ0JBLElBQUEsQ0FBSyxHQUFMLENBQVMsRUFBVCxDQUFZLE1BQVosRUFBb0IsUUFBcEIsRUFBOEIsWUFBVztvQkFDckMsQ0FBQSxDQUFFLElBQUYsQ0FBQSxDQUFRLElBQVIsQ0FBYSxXQUFiLEVBQTBCLE9BQTFCLENBQUEsQ0FBQTtpQkFESixDQUFBLENBQUE7OztnQkFLQSxJQUFBLENBQUssR0FBTCxDQUFTLEVBQVQsQ0FBWSxPQUFaLEVBQXFCLFVBQUMsQ0FBRCxFQUFPO29CQUN4QixJQUFJLGVBQUEsR0FBa0IsQ0FBQyxDQUFBLENBQUUsUUFBRixDQUFBLENBQVksRUFBWixDQUFlLFFBQWYsQ0FBRCxJQUE2QixDQUFBLENBQUUsUUFBRixDQUFBLENBQVksSUFBWixDQUFpQixXQUFqQixDQUFBLEtBQWtDLE1BQXJGLENBQUE7b0JBQ0EsSUFBSSxDQUFBLENBQUUsS0FBRixLQUFZLFVBQUEsQ0FBQSxTQUFBLENBQUEsQ0FBSyxHQUFqQixJQUF3QixlQUF4QixJQUEyQyxDQUFBLENBQUUsa0JBQUYsQ0FBQSxDQUFzQixNQUF0QixLQUFpQyxDQUFoRixFQUFtRjt3QkFDL0UsTUFBQSxDQUFLLE9BQUwsQ0FBYSxRQUFiLEVBQXVCLE1BQXZCLENBQUEsQ0FBQTtxQkFDSDtpQkFKTCxDQUFBLENBQUE7YUFNSDtTQUNKOzs7K0JBRU07WUFBQSxJQUFBLE1BQUEsR0FBQSxJQUFBLENBQUE7O1lBQ0gsSUFBQSxDQUFLLFdBQUwsRUFBQSxDQUFBO1lBQ0EsSUFBQSxDQUFLLEdBQUwsQ0FBUyxVQUFULENBQW9CLFFBQXBCLEVBQThCLE1BQTlCLENBQUEsQ0FBQTtZQUNBLElBQUEsQ0FBSyxPQUFMLENBQWEsTUFBYixFQUFxQixJQUFyQixDQUFBLENBQUE7O1lBRUEsSUFBQSxDQUFLLEdBQUwsQ0FBUyxFQUFULENBQVksU0FBWixFQUF1QixVQUFDLENBQUQsRUFBTztnQkFDMUIsTUFBQSxDQUFLLFVBQUwsQ0FBZ0IsQ0FBaEIsQ0FBQSxDQUFBO2FBREosQ0FBQSxDQUFBOzs7WUFLQSxJQUFBLENBQUssR0FBTCxDQUFTLEVBQVQsQ0FBWSxxQkFBWixFQUFtQyxZQUFBO2dCQUFBLE9BQU0sTUFBQSxDQUFLLFVBQUwsRUFBTixDQUFBO2FBQW5DLENBQUEsQ0FBQTs7O1lBR0EsSUFBQSxDQUFLLEdBQUwsQ0FBUyxHQUFULENBQWEsUUFBYixDQUFBLENBQUE7OztZQUdBLElBQUEsQ0FBSyxHQUFMLENBQVMsRUFBVCxDQUFZLG9CQUFaLEVBQWtDLFlBQU07Z0JBQ3BDLE1BQUEsQ0FBSyxHQUFMLENBQVMsR0FBVCxDQUFhLG9CQUFiLENBQUEsQ0FBQTtnQkFDQSxNQUFBLENBQUssT0FBTCxDQUFhLE9BQWIsQ0FBQSxDQUFBO2FBRkosQ0FBQSxDQUFBO1NBSUg7OztzQ0FFYTtZQUNWLElBQUEsQ0FBSyxPQUFMLEdBQWUsQ0FBQSxDQUFFLFFBQUEsQ0FBUyxhQUFYLENBQWYsQ0FBQTtTQUNIOzs7cUNBRVk7WUFDVCxJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxhQUFkLEVBQTZCLEtBQTdCLENBQUEsQ0FBQTtZQUNBLENBQUEsQ0FBRSxZQUFGLENBQUEsQ0FBZ0IsSUFBaEIsQ0FBcUIsYUFBckIsRUFBb0MsTUFBcEMsQ0FBQSxDQUFBO1lBQ0EsQ0FBQSxDQUFFLGFBQUYsQ0FBQSxDQUFpQixJQUFqQixDQUFzQixhQUF0QixFQUFxQyxNQUFyQyxDQUFBLENBQUE7WUFDQSxDQUFBLENBQUUsZ0JBQUYsQ0FBQSxDQUFvQixJQUFwQixDQUF5QixhQUF6QixFQUF3QyxNQUF4QyxDQUFBLENBQUE7O1lBRUEsSUFBQSxDQUFLLE1BQUwsQ0FBWSxLQUFaLEVBQUEsQ0FBQTtZQUNBLElBQUEsQ0FBSyxVQUFMLEVBQUEsQ0FBQTtTQUNIOzs7cUNBRVk7WUFDVCxJQUFJLE1BQUEsR0FBUyxNQUFBLENBQU8sV0FBUCxHQUFxQixRQUFBLENBQVMsSUFBQSxDQUFLLEdBQUwsQ0FBUyxHQUFULENBQWEsS0FBYixDQUFBLENBQW9CLEtBQXBCLENBQTBCLENBQTFCLEVBQTZCLENBQUMsQ0FBOUIsQ0FBVCxFQUEyQyxFQUEzQyxDQUFsQyxDQURTO1lBRVQsSUFBSSxNQUFBLENBQU8sV0FBUCxHQUFxQixJQUFBLENBQUssRUFBTCxDQUFRLFlBQVIsR0FBdUIsTUFBaEQsRUFBd0Q7O2dCQUNwRCxNQUFBLEdBQVMsSUFBQSxDQUFLLEdBQUwsQ0FBUyxJQUFBLENBQUssRUFBTCxDQUFRLFlBQVIsR0FBdUIsTUFBQSxDQUFPLFdBQTlCLEdBQTRDLEVBQXJELEVBQXlELENBQUMsQ0FBMUQsQ0FBVCxDQUFBO2FBREosTUFHSyxJQUFJLE1BQUEsQ0FBTyxVQUFQLEdBQW9CLEdBQXhCLEVBQTZCOztnQkFDOUIsTUFBQSxJQUFVLENBQVYsQ0FBQTthQUNIO1lBQ0QsSUFBQSxDQUFLLEVBQUwsQ0FBUSxjQUFSLEVBQUEsQ0FSUztZQVNULE1BQUEsQ0FBTyxRQUFQLENBQWdCLENBQWhCLEVBQW1CLE1BQW5CLENBQUEsQ0FUUztTQVVaOzs7bUNBRVUsR0FBRztZQUNWLElBQU0sVUFBQSxHQUFhLENBQUEsQ0FBRSxRQUFBLENBQVMsYUFBWCxDQUFuQixDQUFBO1lBQ0EsSUFBTSxjQUFBLEdBQWlCLElBQUEsQ0FBSyxNQUFMLElBQWUsSUFBQSxDQUFLLEdBQUwsQ0FBUyxJQUFULENBQWMsb0JBQWQsQ0FBQSxDQUFvQyxLQUFwQyxFQUF0QyxDQUFBO1lBQ0EsSUFBTSxhQUFBLEdBQWdCLElBQUEsQ0FBSyxHQUFMLENBQVMsSUFBVCxDQUFjLG9CQUFkLENBQUEsQ0FBb0MsSUFBcEMsRUFBdEIsQ0FBQTs7WUFFQSxJQUFJLFVBQUEsQ0FBVyxFQUFYLENBQWMsY0FBZCxDQUFBLElBQWlDLENBQUEsQ0FBRSxLQUFGLEtBQVksVUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFLLEdBQWxELElBQXlELENBQUEsQ0FBRSxRQUEvRCxFQUF5RTtnQkFDckUsQ0FBQSxDQUFFLGNBQUYsRUFBQSxDQUFBO2dCQUNBLGFBQUEsQ0FBYyxLQUFkLEVBQUEsQ0FBQTthQUZKLE1BR08sSUFBSSxDQUFBLENBQUUsVUFBRixDQUFBLENBQWMsRUFBZCxDQUFpQixhQUFqQixDQUFBLElBQW1DLENBQUEsQ0FBRSxLQUFGLEtBQVksVUFBQSxDQUFBLFNBQUEsQ0FBQSxDQUFLLEdBQXBELElBQTJELENBQUMsQ0FBQSxDQUFFLFFBQWxFLEVBQTRFO2dCQUMvRSxDQUFBLENBQUUsY0FBRixFQUFBLENBQUE7Z0JBQ0EsY0FBQSxDQUFlLEtBQWYsRUFBQSxDQUFBO2FBQ0g7U0FDSjs7OytCQUVNO1lBQ0gsSUFBQSxDQUFLLEdBQUwsQ0FBUyxVQUFULENBQW9CLFFBQXBCLEVBQThCLE9BQTlCLENBQUEsQ0FBQTtZQUNBLElBQUEsQ0FBSyxPQUFMLENBQWEsTUFBYixFQUFxQixJQUFyQixDQUFBLENBQUE7WUFDQSxDQUFBLENBQUUsWUFBRixDQUFBLENBQWdCLElBQWhCLENBQXFCLGFBQXJCLEVBQW9DLE9BQXBDLENBQUEsQ0FBQTtZQUNBLENBQUEsQ0FBRSxhQUFGLENBQUEsQ0FBaUIsSUFBakIsQ0FBc0IsYUFBdEIsRUFBcUMsT0FBckMsQ0FBQSxDQUFBO1lBQ0EsQ0FBQSxDQUFFLGdCQUFGLENBQUEsQ0FBb0IsSUFBcEIsQ0FBeUIsYUFBekIsRUFBd0MsT0FBeEMsQ0FBQSxDQUFBO1lBQ0EsSUFBQSxDQUFLLE9BQUwsQ0FBYSxLQUFiLEVBQUEsQ0FBQTtTQUNIOzs7Z0NBRU87WUFDSixJQUFBLENBQUssSUFBTCxFQUFBLENBQUE7WUFDQSxJQUFBLENBQUssTUFBTCxFQUFBLENBQUE7U0FDSDs7OzRCQWpNYzs7OztZQUlYLElBQUksZUFBQSxHQUFrQixNQUFBLENBQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyx3QkFBaEMsQ0FBQSxHQUE0RCxLQUE1RCxHQUFvRSxJQUExRixDQUFBOztZQUVBLE9BQU87Z0JBQ0gsUUFBQSxFQUEwQixJQUR2QjtnQkFFSCxVQUFBLEVBQTBCLElBRnZCO2dCQUdILFVBQUEsRUFBMEIsZUFIdkI7Z0JBSUgsV0FBQSxFQUEwQixJQUp2Qjs7Z0JBTUgsRUFBQSxFQUEwQixFQU52QjtnQkFPSCxPQUFBLEVBQTBCLENBQUMsT0FBRCxDQVB2QjtnQkFRSCxXQUFBLEVBQTBCLE9BUnZCO2dCQVNILEtBQUEsRUFBMEIsT0FUdkI7Z0JBVUgsV0FBQSxFQUEwQixLQVZ2QjtnQkFXSCxPQUFBLEVBQTBCLGNBWHZCO2dCQVlILFVBQUEsRUFBMEIsSUFBQSxDQUFLLElBQUwsQ0FadkI7Z0JBYUgsVUFBQSxFQUEwQixJQUFBLENBQUssUUFBTCxDQWJ2QjtnQkFjSCxnQkFBQSxFQUEwQixJQWR2QjtnQkFlSCxzQkFBQSxFQUEwQixJQWZ2QjtnQkFnQkgsZUFBQSxFQUEwQixJQUFBO2FBaEI5QixDQUFBO1NBa0JIOzs7O0VBMUJlLFFBQUEsQ0FBUzs7UUFzTXBCLFFBQUE7Ozs7Ozs7Ozs7cUJDek1NO0FBQUEsUUFBRSxLQUFGLFFBQUUsS0FBRjtBQUFBLFFBQVMsVUFBVCxRQUFTLFVBQVQ7QUFBQSxRQUFxQixXQUFyQixRQUFxQixXQUFyQjtBQUFBLFFBQWtDLGVBQWxDLFFBQWtDLGVBQWxDO0FBQUEsa0hBQTZKLFVBQTdKLG1DQUF1TSxXQUF2TSx3R0FFK0MsS0FGL0Msd0JBR0wsd0ZBQXVGLE9BQU8sSUFBUCxDQUFZLE9BQVosQ0FBdkYsaUNBQTBJLEVBSHJJO0FBQUEsQzs7Ozs7Ozs7O3FCQ0FBO0FBQUEsUUFBRyxpQkFBSCxRQUFHLGlCQUFIO0FBQUEsUUFBc0IsV0FBdEIsUUFBc0IsV0FBdEI7QUFBQSxRQUFtQyxPQUFuQyxRQUFtQyxPQUFuQztBQUFBLFFBQTRDLElBQTVDLFFBQTRDLElBQTVDO0FBQUEsdUJBQ1Qsa0JBQWtCLE1BQWxCLEdBQTJCLENBQTNCLHdDQUFnRSxpQkFBaEUsWUFBMEYsRUFEakYsZ0JBRVQsWUFBWSxNQUFaLEdBQXFCLENBQXJCLGlDQUFtRCxXQUFuRCxZQUF1RSxFQUY5RCxlQUdULFFBQVEsR0FBUixDQUFZLFVBQUMsTUFBRDtBQUFBLHdDQUFpQyxNQUFqQztBQUFBLEtBQVosRUFBMkQsSUFBM0QsQ0FBZ0UsRUFBaEUsQ0FIUyxlQUlULEtBQUssTUFBTCxHQUFjLENBQWQsMEJBQXFDLElBQXJDLFlBQWtELEVBSnpDO0FBQUEsQzs7Ozs7Ozs7Ozs7QUNBZjs7Ozs7Ozs7Ozs7O2NBRThCLE07SUFBdEIsSSxXQUFBLEk7SUFBTSxHLFdBQUEsRztJQUFLLE0sV0FBQSxNOztJQUVFLGU7Ozs7OzRCQUNPO0FBQ3BCLGdCQUFNLG1CQUFtQixLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsU0FBZixLQUE2QixDQUFDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxhQUFmLENBQXZEO0FBQ0EsZ0JBQUksZ0JBQUosRUFBc0I7QUFDbEIsb0JBQUksS0FBSyxJQUFMLEtBQWMsaUJBQWxCLEVBQXFDO0FBQ2pDLDJCQUFVLEtBQUsseUNBQUwsQ0FBVixtREFBb0csSUFBSSxPQUFPLFlBQVgsQ0FBcEcsV0FBaUksS0FBSyw4QkFBTCxDQUFqSTtBQUNILGlCQUZELE1BRU8sSUFBSSxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsbUJBQWhDLElBQXVELEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxVQUFmLENBQXZELEdBQW9GLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLE1BQWlDLFFBQXpILEVBQW1JO0FBQ3RJLDJCQUFPLEtBQUssc0NBQUwsQ0FBUDtBQUNIO0FBQ0QsdUJBQU8sS0FBSyxrQ0FBTCxDQUFQO0FBQ0g7QUFDRCxtQkFBTyxFQUFQO0FBQ0g7Ozs0QkFFaUI7QUFDZCxnQkFBTSxhQUFhLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLENBQW5CO0FBQ0EsZ0JBQU0sbUJBQW1CLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxrQkFBZixLQUFzQyxDQUEvRDs7QUFFQSxnQkFBSSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsbUJBQWYsS0FBdUMscUJBQXFCLENBQWhFLEVBQW1FO0FBQy9ELHVCQUFPLEtBQUssbUNBQUwsQ0FBUDtBQUNIOztBQUVELG9CQUFRLEtBQUssSUFBYjtBQUNJLHFCQUFLLE9BQUw7QUFDSSx3QkFBSSxVQUFKLEVBQWdCO0FBQ1osK0JBQU8sY0FBYyxDQUFkLEdBQ0QsS0FBSyxzQ0FBTCxFQUE2QyxFQUFFLFlBQVksS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsQ0FBZCxFQUE3QyxDQURDLEdBRUQsS0FBSyxtQ0FBTCxDQUZOO0FBR0g7QUFDRCwyQkFBTyxFQUFQO0FBQ0oscUJBQUssZUFBTDtBQUNBLHFCQUFLLGlCQUFMO0FBQ0EscUJBQUssT0FBTDtBQUNBO0FBQ0ksMkJBQU8sRUFBUDtBQVpSO0FBY0g7Ozs0QkFFYTtBQUNWLGdCQUFNLGFBQWEsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsS0FBZ0MsQ0FBbkQ7QUFDQSxnQkFBTSxjQUFjLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxhQUFmLEtBQWlDLENBQXJEO0FBQ0EsZ0JBQU0sbUJBQW1CLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxrQkFBZixLQUFzQyxDQUEvRDtBQUNBLG9CQUFRLEtBQUssSUFBYjtBQUNJLHFCQUFLLGVBQUw7QUFDQSxxQkFBSyxpQkFBTDtBQUNJLDJCQUFPLENBQ0gsS0FBSywyQ0FBTCxFQUFrRCxFQUFFLGtDQUFGLEVBQW9CLHNCQUFwQixFQUFsRCxDQURHLEVBRUgsS0FBSyxtQ0FBTCxFQUEwQyxFQUFFLHdCQUFGLEVBQTFDLENBRkcsQ0FBUDtBQUlKLHFCQUFLLE9BQUw7QUFDQSxxQkFBSyxPQUFMO0FBQ0E7QUFDSSwyQkFBTyxDQUNILEtBQUssb0NBQUwsRUFBMkMsRUFBRSxzQkFBRixFQUEzQyxDQURHLEVBRUgsS0FBSyxtQ0FBTCxFQUEwQyxFQUFFLHdCQUFGLEVBQTFDLENBRkcsQ0FBUDtBQVZSO0FBZUg7Ozs0QkFFVTtBQUNQLG1CQUFPLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLElBQStCLEtBQUssdUJBQUwsQ0FBL0IsR0FBK0QsRUFBdEU7QUFDSDs7O0FBRUQsbUNBQXNCO0FBQUEsWUFBUixJQUFRLFFBQVIsSUFBUTs7QUFBQTs7QUFBQSx1SUFDVCxTQURTOztBQUVsQixjQUFLLEVBQUwsR0FBVSxNQUFLLEVBQUwsSUFBVyxTQUFTLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBckI7QUFDQSxjQUFLLEVBQUwsQ0FBUSxTQUFSLEdBQXVCLE1BQUssRUFBTCxDQUFRLFNBQS9CO0FBQ0EsY0FBSyxJQUFMLEdBQVksUUFBUSxPQUFwQjtBQUprQjtBQUtyQjs7OztpQ0FFUTtBQUNMLGdCQUFNLE9BQU8sa0NBQXdCO0FBQ2pDLG1DQUFtQixLQUFLLGlCQURTO0FBRWpDLDZCQUFhLEtBQUssV0FGZTtBQUdqQyx5QkFBUyxLQUFLLE9BSG1CO0FBSWpDLHNCQUFNLEtBQUs7QUFKc0IsYUFBeEIsQ0FBYjtBQU1BLGlCQUFLLEdBQUwsQ0FBUyxLQUFULEdBQWlCLE1BQWpCLENBQXdCLElBQXhCOztBQUVBLG1CQUFPLElBQVA7QUFDSDs7OztFQWhGd0MsU0FBUyxJOztxQkFBakMsZTs7Ozs7Ozs7O0FDSnJCOztBQUNBOzs7Ozs7Ozs7Ozs7SUFFcUIsb0I7OztBQUNqQix3Q0FBNkI7QUFBQSxZQUFmLEtBQWUsUUFBZixLQUFlO0FBQUEsWUFBUixJQUFRLFFBQVIsSUFBUTs7QUFBQTs7QUFDekIsWUFBTSxjQUFjLElBQUksNEJBQUosQ0FBb0IsRUFBRSxZQUFGLEVBQVMsVUFBVCxFQUFwQixFQUFxQyxNQUFyQyxFQUFwQjtBQUNBLFlBQU0sZ0JBQWdCO0FBQ2xCLHFCQUFTLENBQUMsc0JBQUQsQ0FEUztBQUVsQixtQkFBTyxPQUFPLElBQVAsQ0FBWSw2QkFBWixDQUZXO0FBR2xCLHFCQUFTLFlBQVk7QUFISCxTQUF0QjtBQUZ5QiwySUFPbkIsYUFQbUI7QUFRNUI7OztFQVQ2QyxZOztxQkFBN0Isb0I7Ozs7Ozs7OztBQ0hyQjs7QUFDQTs7Ozs7Ozs7Ozs7O0lBRXFCLHNCOzs7QUFDakIsMENBQTZDO0FBQUEsWUFBL0IsS0FBK0IsUUFBL0IsS0FBK0I7QUFBQSxzQ0FBeEIsYUFBd0I7QUFBQSxZQUF4QixhQUF3QixzQ0FBUixLQUFROztBQUFBOztBQUN6QyxZQUFNLGNBQWMsSUFBSSw2QkFBSixDQUFzQixFQUFDLFlBQUQsRUFBUSw0QkFBUixFQUF1QixXQUFXLE9BQU8sU0FBUCxDQUFpQixTQUFuRCxFQUF0QixFQUFxRixNQUFyRixFQUFwQjtBQUNBLFlBQU0sZ0JBQWdCO0FBQ2xCLHFCQUFTLENBQUMsd0JBQUQsQ0FEUztBQUVsQixtQkFBTyxPQUFPLElBQVAsQ0FBWSw2QkFBWixDQUZXO0FBR2xCLHFCQUFTLFlBQVk7QUFISCxTQUF0QjtBQUZ5QywrSUFPbkMsYUFQbUM7QUFRNUM7OztFQVQrQyxZOztxQkFBL0Isc0I7Ozs7Ozs7O2NDSEUsTTtJQUFmLEksV0FBQSxJO0lBQU0sSSxXQUFBLEk7O3FCQUNDO0FBQUEsUUFBRyxXQUFILFFBQUcsV0FBSDtBQUFBLFFBQWdCLE9BQWhCLFFBQWdCLE9BQWhCO0FBQUEsUUFBeUIsSUFBekIsUUFBeUIsSUFBekI7QUFBQSxRQUErQixnQkFBL0IsUUFBK0IsZ0JBQS9CO0FBQUEsdUJBQ1QsZUFBZSxZQUFZLE1BQVosR0FBcUIsQ0FBcEMsaUNBQWtFLFdBQWxFLFlBQXNGLEVBRDdFLGdCQUVULFdBQVcsUUFBUSxHQUFSLENBQVksVUFBQyxNQUFEO0FBQUEsc0VBQTZELE9BQU8sS0FBcEUsdUJBQTJGLE9BQU8sS0FBbEc7QUFBQSxLQUFaLEVBQWtJLElBQWxJLENBQXVJLEVBQXZJLENBRkYsZ0JBR1QsUUFBUSxLQUFLLE1BQUwsR0FBYyxDQUF0QiwwQkFBNkMsSUFBN0MsWUFBMEQsRUFIakQsZ0JBSVQsb0JBQW9CLGlCQUFpQixNQUFqQixHQUEwQixDQUE5QyxvQ0FBaUYsZ0JBQWpGLFlBQTBHLEVBSmpHO0FBQUEsQzs7Ozs7Ozs7Ozs7QUNEZjs7OztBQUNBOzs7Ozs7Ozs7Ozs7Y0FDaUIsTTtJQUFULEksV0FBQSxJOztJQUVhLGlCOzs7QUFDakIscUNBQTBEO0FBQUEsc0NBQTVDLGFBQTRDO0FBQUEsWUFBNUMsYUFBNEMsc0NBQTVCLEtBQTRCO0FBQUEsa0NBQXJCLFNBQXFCO0FBQUEsWUFBckIsU0FBcUIsa0NBQVQsS0FBUzs7QUFBQTs7QUFBQSwySUFDN0MsU0FENkM7O0FBRXRELGNBQUssRUFBTCxHQUFVLE1BQUssRUFBTCxJQUFXLFNBQVMsYUFBVCxDQUF1QixLQUF2QixDQUFyQjtBQUNBLGNBQUssYUFBTCxHQUFxQixhQUFyQjtBQUNBLGNBQUssU0FBTCxHQUFpQixTQUFqQjtBQUNBLGNBQUssdUJBQUwsR0FBK0IsQ0FBL0I7QUFDQSxjQUFLLHNCQUFMLEdBQThCLEVBQTlCO0FBQ0EsY0FBSyxRQUFMLENBQWMsTUFBSyxLQUFuQixFQUEwQixtQkFBMUIsRUFBK0MsTUFBSyxjQUFwRDtBQVBzRDtBQVF6RDs7OztpQ0FFUTtBQUNMLGdCQUFNLE9BQU8sbUNBQXdCO0FBQ2pDLDZCQUFhLEtBQUssV0FEZTtBQUVqQyx5QkFBUyxLQUFLLE9BRm1CO0FBR2pDLHNCQUFNLEtBQUssSUFIc0I7QUFJakMsa0NBQWtCLEtBQUs7QUFKVSxhQUF4QixDQUFiO0FBTUEsaUJBQUssR0FBTCxDQUFTLEtBQVQsR0FBaUIsTUFBakIsQ0FBd0IsSUFBeEI7O0FBRUEsbUJBQU8sSUFBUDtBQUNIOzs7eUNBRWdCO0FBQ2IsZ0JBQUksS0FBSyxZQUFULEVBQXVCO0FBQ25CLHFCQUFLLEdBQUwsQ0FBUyxJQUFUO0FBQ0g7QUFDSjs7OzRCQUVpQjtBQUNkLGdCQUFJLEtBQUssaUJBQVQsRUFBNEI7QUFDeEIsdUJBQU8sS0FBSyx1Q0FBTCxDQUFQO0FBQ0gsYUFGRCxNQUVPLElBQUksS0FBSyxjQUFULEVBQXlCO0FBQzVCLG9CQUFJLFVBQVUsRUFBZDtBQUNBLG9CQUFJLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLE1BQWlDLFFBQXJDLEVBQStDO0FBQzNDLDhCQUFVLEtBQUsseUNBQUwsQ0FBVjtBQUNILGlCQUZELE1BRU87QUFDSCw4QkFBVSxLQUFLLGtDQUFMLENBQVY7QUFDSDtBQUNELHVCQUFPLEtBQUssYUFBTCxHQUNELE9BREMsY0FFUSxPQUZSLDBGQUVvRyxLQUNqRyw4QkFEaUcsQ0FGcEcsZ0JBQVA7QUFLSCxhQVpNLE1BWUEsSUFDSCxLQUFLLEtBQUwsQ0FBVyxvQkFBWCxJQUNBLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLE1BQWlDLFFBRjlCLEVBR0w7QUFDRSxvQkFBSSxhQUFhLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLE9BQXpCLEVBQWtDO0FBQy9DLHdCQUFJLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxJQUFmO0FBRDJDLGlCQUFsQyxDQUFqQjtBQUdBLG9CQUFJLCtEQUE2RCxVQUE3RCxVQUE0RSxLQUM1RSx1Q0FENEUsQ0FBNUUsU0FBSjtBQUdBLHVCQUFPLEtBQUssK0JBQUwsRUFBc0MsRUFBRSxNQUFNLFdBQVIsRUFBdEMsQ0FBUDtBQUNILGFBWE0sTUFXQSxJQUFJLEtBQUssZUFBVCxFQUEwQjtBQUM3Qix1QkFBTyxLQUFLLGtDQUFMLENBQVA7QUFDSCxhQUZNLE1BRUEsSUFBSSxLQUFLLFNBQVQsRUFBb0I7QUFDdkIsdUJBQU8sS0FBSyw0QkFBTCxDQUFQO0FBQ0g7QUFDRCxtQkFBTyxFQUFQO0FBQ0g7Ozs0QkFFYTtBQUNWLGdCQUFJLFVBQVUsRUFBZDtBQUNBLGdCQUFJLENBQUMsS0FBSyx1QkFBTixJQUFpQyxDQUFDLEtBQUssWUFBM0MsRUFBeUQ7QUFDckQsd0JBQVEsSUFBUixDQUFhO0FBQ1QsMkJBQU8sS0FBSywyQkFBTCxDQURFO0FBRVQsMkJBQU8sS0FBSztBQUZILGlCQUFiO0FBSUg7O0FBRUQsZ0JBQUksS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGtCQUFmLENBQUosRUFBd0M7QUFDcEMsd0JBQVEsSUFBUixDQUFhO0FBQ1QsMkJBQU8sS0FBSyw4QkFBTCxDQURFO0FBRVQsMkJBQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGtCQUFmO0FBRkUsaUJBQWI7QUFJSDs7QUFFRCxnQkFBSSxjQUFjLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxhQUFmLEtBQWlDLENBQW5EO0FBQ0EsZ0JBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsWUFBZixLQUFnQyxDQUFqRDs7QUFFQSxvQkFBUSxJQUFSLENBQWE7QUFDVCx1QkFBTyxLQUFLLGdDQUFMLENBREU7QUFFVCx1QkFBTztBQUZFLGFBQWI7O0FBS0EsZ0JBQUksY0FBYyxDQUFsQixFQUFxQjtBQUNqQixvQkFBSSxhQUNBLGVBQWUsVUFBZixHQUE0QixhQUFhLFdBQXpDLEdBQXVELENBRDNEO0FBRUEsb0JBQUksb0JBQ0EsYUFBYSxDQUFiLElBQWtCLGFBQWEsQ0FBL0IsR0FDTSxLQUROLEdBRU0sS0FBSyxLQUFMLENBQVcsVUFBWCxDQUhWO0FBSUEsd0JBQVEsSUFBUixDQUFhO0FBQ1QsMkJBQU8sS0FBSyxxQ0FBTCxDQURFO0FBRVQsMkJBQU87QUFGRSxpQkFBYjtBQUlBLHdCQUFRLElBQVIsQ0FBYTtBQUNULDJCQUFPLEtBQUssdUNBQUwsQ0FERTtBQUVULDJCQUFPO0FBRkUsaUJBQWI7QUFJSCxhQWZELE1BZU87QUFDSCx3QkFBUSxJQUFSLENBQWE7QUFDVCwyQkFBTyxLQUFLLGdDQUFMLENBREU7QUFFVCwyQkFBTztBQUZFLGlCQUFiO0FBSUg7QUFDRCxtQkFBTyxPQUFQO0FBQ0g7Ozs0QkFFa0I7QUFDZixnQkFBSSxPQUFPLEVBQVg7QUFDQSxnQkFBSSxDQUFDLEtBQUssWUFBVixFQUF3QjtBQUNwQix3REFBb0MsT0FBTyxJQUFQLENBQ2hDLDJCQURnQyxDQUFwQyxVQUVNLEtBQUssWUFGWDtBQUdIO0FBQ0QsbUJBQU8sSUFBUDtBQUNIOzs7NEJBRWtCO0FBQ2YsZ0JBQUksZUFBZSxFQUFuQjs7QUFFQSxnQkFBSSxDQUFDLEtBQUssWUFBVixFQUF3QjtBQUNwQixvQkFBSSxLQUFLLHVCQUFULEVBQWtDO0FBQzlCLG1DQUFlLEtBQUssK0JBQUwsQ0FBZjtBQUNILGlCQUZELE1BRU87QUFDSCx3QkFBSSxvQkFBb0IsT0FDcEIsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLG1CQUFmLENBRG9CLENBQXhCO0FBR0Esd0JBQUkscUJBQXFCLENBQXpCLEVBQTRCO0FBQ3hCLHVDQUFlLEtBQUssZ0NBQUwsQ0FBZjtBQUNILHFCQUZELE1BRU8sSUFDSCxvQkFDQSxJQUFJLEtBQUssc0JBRk4sRUFHTDtBQUNFLHVDQUFlLEtBQUssOEJBQUwsRUFBcUM7QUFDaEQsbUNBQU8sS0FBSyxJQUFMLENBQVUsb0JBQW9CLENBQTlCO0FBRHlDLHlCQUFyQyxDQUFmO0FBR0gscUJBUE0sTUFPQTtBQUNIO0FBQ0EsdUNBQWUsS0FBSyxpQ0FBTCxFQUF3QztBQUNuRCxvQ0FBUSxLQUFLLEdBQUwsQ0FDSixLQUFLLElBQUwsQ0FBVSxvQkFBb0IsRUFBOUIsQ0FESSxFQUVKLEtBQUssdUJBRkQ7QUFEMkMseUJBQXhDLENBQWY7QUFNSDtBQUNKO0FBQ0o7O0FBRUQsbUJBQU8sWUFBUDtBQUNIOzs7NEJBRTZCO0FBQzFCLG1CQUNJLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixNQUF3QyxTQUF4QyxJQUNBLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixNQUF3QyxJQUR4QyxJQUVBLEtBQUssaUJBRkwsSUFHQSxLQUFLLFNBSEwsSUFJQSxLQUFLLGNBTFQ7QUFPSDs7OzRCQUVrQjtBQUNmLG1CQUNJLEtBQUssZUFBTCxJQUNBLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLE1BQWlDLFFBRGpDLEtBRUMsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLG1CQUFoQyxJQUNLLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLENBREwsR0FFSyxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsWUFBZixNQUFpQyxVQUp2QyxDQURKO0FBT0g7Ozs0QkFFb0I7QUFDakIsbUJBQU8sT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLHlCQUFoQyxJQUNELEtBQUssS0FBTCxDQUFXLFNBRFYsR0FFRCxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsU0FBZixLQUNJLENBQUMsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGFBQWYsQ0FETCxJQUVJLENBQUMsS0FBSyxLQUFMLENBQVcsb0JBSnRCO0FBS0g7Ozs0QkFFcUI7QUFDbEIsbUJBQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsQ0FBUDtBQUNIOzs7NEJBRXVCO0FBQ3BCLG1CQUFPLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixDQUFQO0FBQ0g7Ozs0QkFFVTtBQUNQLG1CQUFPLEVBQVA7QUFDSDs7OzRCQUVzQjtBQUNuQixtQkFBTyxtQ0FBaUIsS0FBSyxLQUF0QixDQUFQO0FBQ0g7Ozs7RUFyTTBDLFNBQVMsSTs7cUJBQW5DLGlCOzs7Ozs7Ozs7OztBQ0pyQjs7Ozs7Ozs7Ozs7O2NBQytELE07SUFBdkQsYyxXQUFBLGM7SUFBZ0IsRyxXQUFBLEc7SUFBSyxNLFdBQUEsTTtJQUFRLFMsV0FBQSxTO0lBQVcsSSxXQUFBLEk7SUFBTSxJLFdBQUEsSTs7SUFFakMsVzs7O0FBR2pCLDJCQUFjO0FBQUE7O0FBQUEsK0hBQ0QsU0FEQzs7QUFBQSxjQUZkLFFBRWMsR0FGSCx3QkFFRzs7QUFBQSxjQXdKZCxxQkF4SmMsR0F3SlUsVUFBQyxDQUFEO0FBQUEsbUJBQ3BCLENBQUMsRUFBRSxLQUFGLEtBQVksRUFBWixJQUFrQixFQUFFLEtBQUYsS0FBWSxFQUEvQixNQUF1QyxFQUFFLGNBQUYsTUFBc0IsSUFBN0QsQ0FEb0I7QUFBQSxTQXhKVjs7QUFHVixjQUFLLEdBQUwsR0FBVyxLQUFLLE1BQUwsR0FBYyxRQUFkLENBQXVCLEVBQXZCLEVBQTJCLFNBQTNCLENBQXFDLENBQXJDLENBQVg7O0FBRUEsY0FBSyxRQUFMLENBQWMsTUFBSyxLQUFuQixFQUEwQixvQkFBMUIsRUFBZ0Q7QUFBQSxtQkFBTSxNQUFLLE1BQUwsRUFBTjtBQUFBLFNBQWhEOztBQUVBLGNBQUssTUFBTDtBQVBVO0FBUWI7Ozs7aUNBRVE7QUFDTCxnQkFBSSxTQUFTO0FBQ1QsMkNBQTJCLGNBRGxCO0FBRVQsNkNBQTZCLG1CQUZwQjtBQUdULDhDQUE4QjtBQUhyQixhQUFiOztBQU1BLGdCQUFJLGVBQWUsU0FBZixDQUF5QiwwQkFBekIsQ0FBSixFQUEwRDtBQUN0RCx1QkFBTyx3QkFBUCxJQUFtQyx1QkFBbkM7QUFDSDtBQUNELG1CQUFPLE1BQVA7QUFDSDs7OzhDQUVxQixDLEVBQUc7QUFDckIsZ0JBQUksRUFBRSxPQUFGLEtBQWMsRUFBbEIsQ0FBcUIsT0FBckIsRUFBOEI7QUFDMUIseUJBQUssS0FBTDtBQUNIO0FBQ0o7Ozt1Q0FFYztBQUNYLGlCQUFLLEtBQUwsQ0FBVyxPQUFYLENBQW1CLGNBQW5CLEVBQW1DO0FBQy9CLHdCQUFRLFNBRHVCO0FBRS9CLHVCQUFPLEtBQUs7QUFGbUIsYUFBbkM7QUFJSDs7OzBDQUVpQixDLEVBQUc7QUFDakIsZ0JBQUksQ0FBQyxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsMEJBQWhDLENBQUwsRUFBa0U7QUFDOUQsa0JBQUUsd0JBQUY7QUFDSDs7QUFFRCxnQkFBSSxFQUFFLE9BQUYsS0FBYyxFQUFkLElBQW9CLEVBQUUsT0FBRixLQUFjLEVBQXRDLEVBQTBDO0FBQ3RDLG9CQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQywwQkFBaEMsQ0FBSixFQUFpRTtBQUM3RCxzQkFBRSx3QkFBRjtBQUNIO0FBQ0QscUJBQUssS0FBTCxDQUFXLE9BQVgsQ0FBbUIsY0FBbkIsRUFBbUM7QUFDL0IsNEJBQVEsU0FEdUI7QUFFL0IsMkJBQU8sS0FBSztBQUZtQixpQkFBbkM7QUFJSDtBQUNKOzs7eUNBbUVnQjtBQUNiLGdCQUFNLE9BQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE1BQWYsRUFBdUIsRUFBcEM7O0FBRUEsZ0JBQUksU0FBUyxXQUFULElBQXdCLFNBQVMsT0FBckMsRUFBOEM7QUFDMUMsdUJBQU8sS0FBSyxjQUFMLENBQVA7QUFDSCxhQUZELE1BRU8sSUFBSSxTQUFTLE9BQWIsRUFBc0I7QUFDekIsdUJBQU8sS0FBSyxhQUFMLENBQVA7QUFDSDs7QUFFRCxtQkFBTyxLQUFLLFlBQUwsQ0FBUDtBQUNIOzs7aURBRXdCO0FBQ3JCLGdCQUFNLFFBQVEsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE9BQWYsQ0FBZDtBQUNBLGdCQUFJLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxhQUFmLENBQUosRUFBbUM7QUFDL0IsdUJBQU8sS0FBSyw0QkFBTCxFQUFtQyxFQUFFLFlBQUYsRUFBbkMsQ0FBUDtBQUNILGFBRkQsTUFFTztBQUNILHVCQUFPLEtBQUsseUJBQUwsRUFBZ0MsRUFBRSxZQUFGLEVBQWhDLENBQVA7QUFDSDtBQUNKOzs7Z0RBRXVCO0FBQ3BCLGdCQUFJLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxhQUFmLENBQUosRUFBbUM7QUFDL0IsdUJBQU8sS0FBSyx1QkFBTCxDQUFQO0FBQ0gsYUFGRCxNQUVPO0FBQ0gsdUJBQU8sS0FBSyxvQkFBTCxDQUFQO0FBQ0g7QUFDSjs7O2lDQUVRO0FBQ0wsaUJBQUssR0FBTCxDQUFTLEtBQVQsR0FBaUIsTUFBakIsQ0FBd0IsS0FBSyxRQUFMLENBQWMsS0FBSyxTQUFuQixDQUF4Qjs7QUFFQSxtQkFBTyxJQUFQO0FBQ0g7OztnQ0FLTztBQUNKLG1CQUFPLFVBQVAsQ0FBa0IsSUFBbEIsQ0FBdUIsUUFBdkIsQ0FBZ0MsS0FBaEMsQ0FDSSxLQUFLLEdBQUwsQ0FBUyxJQUFULENBQWMsa0JBQWQsQ0FESjtBQUdIOzs7K0JBRU0sQyxFQUFHO0FBQ04sZ0JBQUksS0FBSyxxQkFBTCxDQUEyQixDQUEzQixDQUFKLEVBQW1DO0FBQy9CLHVCQUFPLFVBQVAsQ0FBa0IsSUFBbEIsQ0FBdUIsUUFBdkIsQ0FBZ0MsTUFBaEMsQ0FDSSxLQUFLLEdBQUwsQ0FBUyxJQUFULENBQWMsb0JBQWQsQ0FESjtBQUdIO0FBQ0o7Ozs0QkFuSGU7QUFDWixnQkFBSSxrQkFBa0IsRUFBdEI7QUFDQSxnQkFDSSxFQUNJLEtBQUssS0FBTCxDQUFXLFVBQVgsSUFDQSxlQUFlLFNBQWYsQ0FBeUIsaUJBQXpCLENBRkosQ0FESixFQUtFO0FBQ0Usb0JBQ0ksZUFBZSxTQUFmLENBQXlCLGdCQUF6QixLQUNBLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxnQkFBZixDQUZKLEVBR0U7QUFDRSxzQ0FBa0IsSUFBSSxPQUFPLFlBQVgsRUFBeUI7QUFDdkMsOEJBQU0sVUFEaUM7QUFFdkMsK0JBQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGdCQUFmLEVBQWlDLFFBRkQ7QUFHdkMsZ0NBQVE7QUFIK0IscUJBQXpCLENBQWxCO0FBS0gsaUJBVEQsTUFTTyxJQUFJLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxRQUFmLENBQUosRUFBOEI7QUFDakMsc0NBQWtCLElBQUksT0FBTyxZQUFYLEVBQXlCO0FBQ3ZDLDhCQUFNLFFBRGlDO0FBRXZDLCtCQUFPLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxRQUFmLENBRmdDO0FBR3ZDLGdDQUFRO0FBSCtCLHFCQUF6QixDQUFsQjtBQUtIO0FBQ0o7O0FBRUQsZ0JBQUksbUJBQW1CLEtBQXZCO0FBQ0EsaUJBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxTQUFmLEVBQTBCLE9BQTFCLENBQWtDLFVBQUMsTUFBRCxFQUFZO0FBQzFDLG9CQUFJLE9BQU8sRUFBUCxLQUFjLGdCQUFsQixFQUFvQztBQUNoQyx1Q0FBbUIsSUFBbkI7QUFDSDtBQUNKLGFBSkQ7O0FBTUEsZ0JBQUksZ0JBQWdCLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsT0FBdEIsQ0FBOEIsYUFBOUIsQ0FBNEMsRUFBaEU7O0FBRUEsZ0JBQU0sNEJBQTBCLE9BQU8sR0FBUCxDQUM1QixPQUFPLE1BQVAsQ0FBYyxjQURjLEVBRTVCO0FBQ0ksb0JBQUksS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLElBQWY7QUFEUixhQUY0QixDQUExQixJQUtGLG9DQUFrQyxhQUFsQyxHQUFvRCxFQUxsRCxDQUFOOztBQU9BLG1CQUFPO0FBQ0gseUJBQVMsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFNBQWYsQ0FETjtBQUVILDBEQUZHO0FBR0gsb0JBQUksS0FBSyxLQUFMLENBQVcsRUFIWjtBQUlILHFCQUFLLEtBQUssR0FKUDtBQUtILHVCQUFPLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxPQUFmLENBTEo7QUFNSCx3QkFBUSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsTUFBZixFQUF1QixFQU41QjtBQU9ILDRCQUFZLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxRQUFmLEVBQXlCLElBQXpCLElBQWlDLEVBUDFDO0FBUUgsNEJBQVksS0FBSyxjQUFMLEVBUlQ7QUFTSCwyQkFBVyxRQVRSO0FBVUgsb0NBQW9CLEtBQUssc0JBQUwsRUFWakI7QUFXSCxtQ0FBbUIsS0FBSyxxQkFBTCxFQVhoQjtBQVlILGdDQUNJLFVBQVUsa0JBQVYsSUFDQSxDQUFDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixDQWRGO0FBZUgsaUNBQWlCLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxhQUFmLElBQ1gsZ0JBRFcsR0FFWCxhQWpCSDtBQWtCSCxnREFsQkc7QUFtQkg7QUFuQkcsYUFBUDtBQXFCSDs7OztFQXRIb0MsU0FBUyxJOztxQkFBN0IsVzs7Ozs7Ozs7Ozs7QUNIckI7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7O0lBRXFCLEs7OztBQUNqQix5QkFBK0Q7QUFBQSxZQUFqRCxXQUFpRCxRQUFqRCxXQUFpRDtBQUFBLFlBQXBDLFFBQW9DLFFBQXBDLFFBQW9DO0FBQUEsdUNBQTFCLGNBQTBCO0FBQUEsWUFBMUIsY0FBMEIsdUNBQVQsS0FBUzs7QUFBQTs7QUFBQSxtSEFDbEQsU0FEa0Q7O0FBRzNELGNBQUssV0FBTCxHQUFtQixFQUFFLE1BQUYsQ0FDZixFQUFFLFFBQVEsR0FBVixFQUFlLFFBQVEsR0FBdkIsRUFBNEIsU0FBUyxHQUFyQyxFQURlLEVBRWYsV0FGZSxDQUFuQjtBQUlBLGNBQUssUUFBTCxHQUFnQixRQUFoQjtBQUNBLGNBQUssY0FBTCxHQUFzQixjQUF0Qjs7QUFFQSxjQUFLLFFBQUwsQ0FBYyxNQUFLLEtBQW5CLEVBQTBCLFFBQTFCLEVBQW9DLE1BQUssT0FBekM7QUFDQSxjQUFLLE9BQUw7QUFYMkQ7QUFZOUQ7Ozs7aUNBRVE7QUFDTCxjQUFFLE1BQUYsRUFBVSxHQUFWLGFBQXdCLEtBQUssS0FBTCxDQUFXLEVBQW5DO0FBQ0g7OztrQ0FFUztBQUFBOztBQUNOLGdCQUFNLFFBQVEsS0FBSyxLQUFMLENBQVcsTUFBWCxFQUFkO0FBQ0EsZ0JBQU0sYUFBYSxPQUFPLE1BQVAsR0FDYixLQUFLLFdBQUwsQ0FBaUIsTUFESixHQUViLE9BQU8sTUFBUCxHQUNBLEtBQUssV0FBTCxDQUFpQixNQURqQixHQUVBLEtBQUssV0FBTCxDQUFpQixPQUp2QjtBQUtBLGdCQUFNLFFBQVEsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixVQUFwQixDQUFkOztBQUVBLGdCQUFJLEtBQUssS0FBTCxDQUFXLGFBQWYsRUFBOEI7QUFDMUIsb0JBQUksa0RBQUo7QUFDQSxxQkFBSyxHQUFMLENBQVMsS0FBVCxHQUFpQixNQUFqQixDQUF3QixNQUF4QjtBQUNILGFBSEQsTUFHTyxJQUFJLFNBQVMsTUFBTSxJQUFuQixFQUF5QjtBQUM1QixvQkFBSSxVQUFTLEVBQ1Qsd0JBQWM7QUFDVixnQ0FEVTtBQUVWLGdDQUNLLFNBQ0csTUFBTSxZQURULElBRUcsTUFBTSxZQUFOLENBQW1CLEdBRnZCLElBR0EsU0FOTTtBQU9WLHlCQUFLLFNBQVMsTUFBTSxJQVBWO0FBUVYsMEJBQU0sS0FBSyxLQUFMLENBQVcsZUFSUDtBQVNWLDJCQUFPLE9BQU8sSUFBUCxDQUFZLHVCQUFaLEVBQXFDO0FBQ3hDLCtCQUFPLE1BQU0sS0FEMkI7QUFFeEMsaUNBQVMsTUFBTTtBQUZ5QixxQkFBckMsQ0FURztBQWFWLG1DQUNJLE1BQU0sTUFBTixDQUFhLElBQWIsSUFBcUIsSUFBckIsR0FBNEIsYUFBNUIsR0FBNEMsRUFkdEM7QUFlViw0QkFBUSxTQUFTLE1BQU07QUFmYixpQkFBZCxDQURTLENBQWI7O0FBb0JBO0FBQ0Esd0JBQU8sSUFBUCxDQUFZLEtBQVosRUFBbUIsRUFBbkIsQ0FBc0IsT0FBdEIsRUFBK0IsWUFBTTtBQUNqQyx3QkFBSSxnQkFBZ0IsS0FBSyxLQUFMLENBQ2hCLEtBQUssU0FBTCxDQUFlLE9BQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsTUFBckMsQ0FEZ0IsQ0FBcEI7O0FBSUEsc0JBQUUsYUFBRixFQUFpQixJQUFqQixDQUFzQixVQUFDLEtBQUQsRUFBVztBQUM3QiwrQkFBTyxNQUFNLElBQWI7QUFDSCxxQkFGRDs7QUFJQSwyQkFBSyxLQUFMLENBQVcsR0FBWCxDQUFlLEVBQUUsUUFBUSxhQUFWLEVBQWY7QUFDSCxpQkFWRDs7QUFZQSxxQkFBSyxHQUFMLENBQVMsS0FBVCxHQUFpQixNQUFqQixDQUF3QixPQUF4QjtBQUNILGFBbkNNLE1BbUNBLElBQUksS0FBSyxjQUFULEVBQXlCO0FBQzVCLHFCQUFLLEdBQUwsQ0FBUyxLQUFULEdBQWlCLE1BQWpCLGVBQ2dCLEtBQUssS0FBTCxDQUFXLGVBRDNCLDBDQUVvQixPQUFPLElBQVAsQ0FBWSxvQkFBWixFQUFrQztBQUMxQywyQkFBTyxNQUFNO0FBRDZCLGlCQUFsQyxDQUZwQix1Q0FJNEMsOEJBQ3BDLHdCQURvQyxDQUo1QztBQVNILGFBVk0sTUFVQTtBQUNILG9CQUFJLGNBQWMsS0FBSyxLQUFMLENBQVcsVUFBWCxHQUNaLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxTQUFmLENBRFksR0FFWixLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsa0JBQWYsQ0FGTjtBQUdBLHFCQUFLLEdBQUwsQ0FBUyxLQUFULEdBQWlCLE1BQWpCLENBQ0ksMEJBQWdCO0FBQ1osZ0NBRFk7QUFFWiwwQkFBTSxLQUFLLEtBQUwsQ0FBVyxlQUZMO0FBR1osOEJBQVUsS0FBSyxRQUhIO0FBSVosZ0NBQVksVUFKQTtBQUtaLGlDQUFjLGFBQWEsR0FBZCxHQUFxQixHQUx0QjtBQU1aLGlDQUFhO0FBTkQsaUJBQWhCLENBREo7QUFVQSxrQkFBRSxNQUFGLEVBQVUsRUFBVixhQUNjLEtBQUssS0FBTCxDQUFXLEVBRHpCLEVBRUksRUFBRSxJQUFGLENBQ0ksS0FBSyxlQURULEVBRUksSUFGSixFQUdJLCtDQUhKLEVBSUksS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE9BQWYsQ0FKSixDQUZKO0FBU0Esa0JBQUUsTUFBRixFQUFVLEVBQVYsYUFDYyxLQUFLLEtBQUwsQ0FBVyxFQUR6QixFQUVJLEVBQUUsSUFBRixDQUNJLEtBQUssZUFEVCxFQUVJLElBRkosRUFHSSxnREFISixFQUlJLFdBSkosQ0FGSjtBQVNBLGtCQUFFLE1BQUYsRUFBVSxFQUFWLGFBQ2MsS0FBSyxLQUFMLENBQVcsRUFEekIsRUFFSSxFQUFFLElBQUYsQ0FBTyxLQUFLLGlCQUFaLEVBQStCLElBQS9CLENBRko7O0FBS0E7QUFDQSwyQkFBVyxZQUFNO0FBQ2IsMkJBQUssZUFBTCxDQUNJLCtDQURKLEVBRUksT0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE9BQWYsQ0FGSjtBQUlBLDJCQUFLLGVBQUwsQ0FDSSxnREFESixFQUVJLFdBRko7QUFJQSwyQkFBSyxpQkFBTDtBQUNILGlCQVZELEVBVUcsQ0FWSDtBQVdIOztBQUVELG1CQUFPLElBQVA7QUFDSDs7OzRDQUVtQjtBQUNoQixnQkFBTSxRQUFRLEtBQUssRUFBTCxDQUFRLGFBQVIsQ0FBc0IsS0FBdEIsQ0FBZDtBQUNBLGdCQUFJLEtBQUosRUFBVztBQUNQLGtCQUFFLEtBQUYsRUFBUyxNQUFULENBQWlCLEVBQUUsS0FBRixFQUFTLE1BQVQsR0FBa0IsS0FBbEIsS0FBNEIsR0FBN0IsR0FBb0MsR0FBcEQ7QUFDSDtBQUNKOzs7d0NBQ2UsUSxFQUFVLFMsRUFBVztBQUNqQyxnQkFBTSxVQUFVLEtBQUssRUFBTCxDQUFRLGFBQVIsQ0FBc0IsUUFBdEIsQ0FBaEI7QUFDQSxnQkFBSSxPQUFKLEVBQWE7QUFDVCx3QkFBUSxTQUFSLEdBQW9CLFNBQXBCO0FBQ0Esb0JBQUksU0FBUyxPQUFULENBQWlCLFFBQWpCLE1BQStCLENBQUMsQ0FBcEMsRUFBdUM7QUFDbkMsd0JBQUksRUFBRSxPQUFGLEVBQVcsS0FBWCxLQUFxQixHQUF6QixFQUE4QjtBQUMxQiwwQkFBRSxPQUFGLEVBQVcsR0FBWCxDQUFlLFdBQWYsRUFBNEIsTUFBNUI7QUFDSCxxQkFGRCxNQUVPLElBQ0gsRUFBRSxPQUFGLEVBQVcsS0FBWCxLQUFxQixHQUFyQixJQUNBLEVBQUUsT0FBRixFQUFXLEtBQVgsTUFBc0IsR0FGbkIsRUFHTDtBQUNFLDBCQUFFLE9BQUYsRUFBVyxHQUFYLENBQWUsV0FBZixFQUE0QixNQUE1QjtBQUNILHFCQUxNLE1BS0EsSUFDSCxFQUFFLE9BQUYsRUFBVyxLQUFYLEtBQXFCLEdBQXJCLElBQ0EsRUFBRSxPQUFGLEVBQVcsS0FBWCxNQUFzQixHQUZuQixFQUdMO0FBQ0UsMEJBQUUsT0FBRixFQUFXLEdBQVgsQ0FBZSxXQUFmLEVBQTRCLE1BQTVCO0FBQ0gscUJBTE0sTUFLQSxJQUFJLEVBQUUsT0FBRixFQUFXLEtBQVgsTUFBc0IsR0FBMUIsRUFBK0I7QUFDbEMsMEJBQUUsT0FBRixFQUFXLEdBQVgsQ0FBZSxXQUFmLEVBQTRCLE1BQTVCO0FBQ0g7QUFDSixpQkFoQkQsTUFnQk8sSUFBSSxTQUFTLE9BQVQsQ0FBaUIsU0FBakIsTUFBZ0MsQ0FBQyxDQUFyQyxFQUF3QztBQUMzQyx3QkFBSSxFQUFFLE9BQUYsRUFBVyxLQUFYLEtBQXFCLEdBQXpCLEVBQThCO0FBQzFCLDBCQUFFLE9BQUYsRUFBVyxHQUFYLENBQWUsV0FBZixFQUE0QixNQUE1QjtBQUNILHFCQUZELE1BRU8sSUFDSCxFQUFFLE9BQUYsRUFBVyxLQUFYLEtBQXFCLEdBQXJCLElBQ0EsRUFBRSxPQUFGLEVBQVcsS0FBWCxNQUFzQixHQUZuQixFQUdMO0FBQ0UsMEJBQUUsT0FBRixFQUFXLEdBQVgsQ0FBZSxXQUFmLEVBQTRCLE1BQTVCO0FBQ0gscUJBTE0sTUFLQSxJQUNILEVBQUUsT0FBRixFQUFXLEtBQVgsS0FBcUIsR0FBckIsSUFDQSxFQUFFLE9BQUYsRUFBVyxLQUFYLE1BQXNCLEdBRm5CLEVBR0w7QUFDRSwwQkFBRSxPQUFGLEVBQVcsR0FBWCxDQUFlLFdBQWYsRUFBNEIsTUFBNUI7QUFDSCxxQkFMTSxNQUtBLElBQUksRUFBRSxPQUFGLEVBQVcsS0FBWCxNQUFzQixHQUExQixFQUErQjtBQUNsQywwQkFBRSxPQUFGLEVBQVcsR0FBWCxDQUFlLFdBQWYsRUFBNEIsTUFBNUI7QUFDSDtBQUNKO0FBQ0Qsb0JBQ0ksUUFBUSxZQUFSLEdBQXVCLENBQXZCLElBQ0EsUUFBUSxZQUFSLEdBQXVCLFFBQVEsWUFGbkMsRUFHRTtBQUNFLHdCQUFJLE9BQU8sUUFBUSxTQUFuQjtBQUNBLDJCQUFVLEtBQUssT0FBTCxDQUFhLE9BQWIsRUFBc0IsRUFBdEIsQ0FBVixTQUZGLENBRTRDO0FBQzFDLDJCQUNJLFNBQVMsS0FBVCxJQUNBLFFBQVEsWUFBUixHQUF1QixRQUFRLFlBRm5DLEVBR0U7QUFDRSwrQkFBTyxLQUFLLE9BQUwsQ0FBYSxtQkFBYixFQUFrQyxJQUFsQyxDQUFQLENBREYsQ0FDa0Q7QUFDaEQsZ0NBQVEsU0FBUixHQUFvQixJQUFwQjtBQUNIO0FBQ0Q7QUFDSDtBQUNKO0FBQ0o7Ozs7RUE3TDhCLFNBQVMsSTs7cUJBQXZCLEs7Ozs7Ozs7Ozs7O0FDSnJCOzs7O0FBQ0E7Ozs7Ozs7O0lBRXFCLGM7QUFFakIsOEJBQWM7QUFBQTs7QUFDVixVQUFFLE1BQUYsQ0FBUyxJQUFULEVBQWUsU0FBUyxNQUF4Qjs7QUFFQSxhQUFLLEtBQUwsR0FBc0IsSUFBSSw0QkFBSixFQUF0QjtBQUNBLGFBQUssTUFBTCxHQUFzQixFQUF0QjtBQUNBLGFBQUssV0FBTCxHQUFzQixFQUF0QjtBQUNIOzs7O29DQUVXLEksRUFBTSxPLEVBQVM7QUFDdkIsbUJBQU8sS0FBSyxNQUFMLENBQVksRUFBRSxNQUFGLENBQVMsRUFBVCxFQUFhLEVBQUUsT0FBTyxJQUFULEVBQWIsRUFBOEIsT0FBOUIsQ0FBWixDQUFQO0FBQ0g7OzsrQkFFTSxVLEVBQVksTyxFQUFTO0FBQ3hCLG1CQUFPLEtBQUssTUFBTCxDQUFZLEVBQUUsTUFBRixDQUFTLEVBQVQsRUFBYSxVQUFiLEVBQXlCLE9BQXpCLENBQVosQ0FBUDtBQUNIOzs7NENBRW1CLEUsRUFBSSxPLEVBQVM7QUFDN0IsbUJBQU8sS0FBSyxNQUFMLENBQVksRUFBRSxNQUFGLENBQVMsRUFBVCxFQUFhLEVBQUUsY0FBYyxFQUFoQixFQUFiLEVBQW1DLE9BQW5DLENBQVosQ0FBUDtBQUNIOzs7b0RBRTJCLGlCLEVBQW1CLE8sRUFBUztBQUNwRCxtQkFBTyxLQUFLLE1BQUwsQ0FBWSxFQUFFLE1BQUYsQ0FBUyxFQUFULEVBQWEsaUJBQWIsRUFBZ0MsT0FBaEMsQ0FBWixDQUFQO0FBQ0g7O0FBRUQ7Ozs7NkNBQ3FCO0FBQ2pCLGlCQUFLLE9BQUwsQ0FBYSxZQUFiLEVBQTJCLElBQTNCLEVBQWlDLEVBQUUsaUJBQWlCLElBQW5CLEVBQWpDOztBQUVBLGdCQUFJLGdCQUFnQjtBQUNoQix1QkFBYyxFQURFO0FBRWhCLHdCQUFjLEVBRkU7QUFHaEIsNkJBQWM7QUFIRSxhQUFwQjs7QUFNQSxpQkFBSyxVQUFMLENBQWdCLGFBQWhCLEVBQStCLFdBQS9COztBQUVBLGlCQUFLLE9BQUwsQ0FBYSxVQUFiLEVBQXlCLElBQXpCOztBQUVBLG1CQUFPLFFBQVEsT0FBUixDQUFnQixhQUFoQixDQUFQO0FBQ0g7O0FBRUQ7Ozs7Ozs7K0JBSU8sVSxFQUFZO0FBQUE7O0FBRWYsZ0JBQUksQ0FBQyxVQUFMLEVBQWdCO0FBQ1osNkJBQWEsRUFBYjtBQUNIOztBQUVEO0FBQ0EsZ0JBQUksQ0FBQyxXQUFXLGNBQVosSUFBOEIsQ0FBQyxXQUFXLE9BQTlDLEVBQXNEO0FBQ2xELDJCQUFXLGNBQVgsR0FBNEIsT0FBTyxTQUFQLENBQWlCLGVBQTdDO0FBQ0g7O0FBRUQsZ0JBQUksT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLFVBQWhDLEtBQStDLFdBQVcsT0FBOUQsRUFBc0U7QUFDbEUsb0JBQU0sUUFBUSxDQUFDLGFBQUQsRUFBZ0IsYUFBaEIsRUFBK0IsT0FBL0IsRUFBd0MsUUFBeEMsRUFBa0QsWUFBbEQsRUFBZ0UsZ0JBQWhFLEVBQWtGLGtCQUFsRixDQUFkO0FBQ0EsMkJBQVcsTUFBWCxHQUFvQixNQUFNLEtBQUssS0FBTCxDQUFXLEtBQUssTUFBTCxLQUFnQixNQUFNLE1BQWpDLENBQU4sQ0FBcEI7QUFDSDs7QUFFRCxnQkFBSSxrQkFBa0IsSUFBSSw0QkFBSixDQUFvQixVQUFwQixDQUF0Qjs7QUFFQSxnQkFBSSxDQUFDLENBQUMsT0FBTyxTQUFQLENBQWlCLGlCQUF2QixFQUEwQztBQUN0QyxnQ0FBZ0IsaUJBQWhCLEdBQW9DLElBQXBDO0FBQ0g7O0FBRUQsaUJBQUssT0FBTCxDQUFhLFlBQWIsRUFBMkIsSUFBM0IsRUFBaUMsRUFBRSxnQ0FBRixFQUFqQzs7QUFFQSxtQkFBTyxJQUFJLE9BQUosQ0FBWSxVQUFDLE9BQUQsRUFBVSxNQUFWLEVBQXFCO0FBQ3BDLGtCQUFFLElBQUYsQ0FBTztBQUNILHlCQUFLLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLElBQWQsQ0FBbUIsS0FBbkIsQ0FBeUIsS0FBcEMsQ0FERjtBQUVILDRCQUFVLE1BRlA7QUFHSCw4QkFBVSxNQUhQO0FBSUgsaUNBQWEsaUNBSlY7QUFLSCwwQkFBVSxLQUFLLFNBQUwsQ0FBZSxnQkFBZ0IsU0FBaEIsRUFBZixDQUxQO0FBTUgsNkJBQVM7QUFOTixpQkFBUCxFQVFDLElBUkQsQ0FRTSxVQUFDLElBQUQsRUFBTyxVQUFQLEVBQW1CLEtBQW5CLEVBQTZCO0FBQy9CLHdCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxVQUFoQyxLQUErQyxXQUFXLE9BQTlELEVBQXNFO0FBQ2xFLDZCQUFLLEtBQUwsR0FBYSxLQUFLLEtBQUwsSUFBYyxFQUFFLE9BQUYsQ0FBVSxLQUFLLEtBQWYsQ0FBM0I7QUFDSDtBQUNELHdCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyx5QkFBaEMsS0FBOEQsS0FBSyxLQUF2RSxFQUE4RTtBQUMxRSw2QkFBSyxLQUFMLEdBQWEsS0FBSyxLQUFMLENBQVcsTUFBWCxDQUFrQixVQUFDLENBQUQ7QUFBQSxtQ0FBTyxFQUFFLE9BQUYsS0FBYyxJQUFyQjtBQUFBLHlCQUFsQixDQUFiO0FBQ0g7QUFDRCwwQkFBSyxVQUFMLENBQWdCLElBQWhCLEVBQXNCLFVBQXRCLEVBQWtDLEtBQWxDO0FBQ0EsMEJBQUssT0FBTCxDQUFhLFVBQWIsRUFBeUIsS0FBekI7QUFDQSw0QkFBUSxJQUFSO0FBQ0gsaUJBbEJELEVBbUJDLElBbkJELENBbUJNLFVBQUMsS0FBRCxFQUFRLFVBQVIsRUFBb0IsV0FBcEIsRUFBb0M7QUFDdEMsMEJBQUssVUFBTCxDQUFnQixLQUFoQixFQUF1QixVQUF2QixFQUFtQyxXQUFuQztBQUNBLDBCQUFLLE9BQUwsQ0FBYSxVQUFiLEVBQXlCLEtBQXpCO0FBQ0EsMkJBQU8sS0FBUDtBQUNILGlCQXZCRDtBQXdCSCxhQXpCTSxDQUFQO0FBMEJIOzs7bUNBRVUsSSxFQUFNLFUsRUFBWSxLLEVBQU87QUFDaEMsaUJBQUssS0FBTCxDQUFXLEtBQVgsQ0FBaUIsS0FBSyxLQUF0QjtBQUNBLGlCQUFLLE9BQUwsQ0FBYSxjQUFiLEVBQTZCLElBQTdCLEVBQW1DLEVBQUUsVUFBRixFQUFRLHNCQUFSLEVBQW9CLFlBQXBCLEVBQW5DO0FBQ0g7OzttQ0FFVSxLLEVBQU8sVSxFQUFZLFcsRUFBYTtBQUN2QyxpQkFBSyxPQUFMLENBQWEsV0FBYixFQUEwQixJQUExQixFQUFnQyxFQUFFLFlBQUYsRUFBUyxzQkFBVCxFQUFxQix3QkFBckIsRUFBaEM7QUFDSDs7Ozs7O3FCQTFHZ0IsYzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNIQSxpQjs7O0FBQ2pCLHFDQUE4QztBQUFBLDZCQUFoQyxJQUFnQztBQUFBLFlBQWhDLElBQWdDLDZCQUF6QixNQUF5QjtBQUFBLFlBQWpCLE1BQWlCLFFBQWpCLE1BQWlCO0FBQUEsWUFBVCxLQUFTLFFBQVQsS0FBUzs7QUFBQTs7QUFBQSwySUFDakMsU0FEaUM7O0FBQUEsY0EyRTlDLGFBM0U4QyxHQTJFOUIsVUFBQyxDQUFEO0FBQUEsbUJBQ1osQ0FBQyxFQUFFLElBQUYsS0FBVyxPQUFYLElBQXNCLEVBQUUsS0FBRixLQUFZLEVBQWxDLElBQXdDLEVBQUUsS0FBRixLQUFZLEVBQXJELE1BQ0MsRUFBRSxjQUFGLE1BQXNCLElBRHZCLENBRFk7QUFBQSxTQTNFOEI7O0FBRzFDLGNBQUssSUFBTCxHQUFZLElBQVo7O0FBRUEsY0FBSyxlQUFMLEdBQXVCLEtBQXZCO0FBQ0EsWUFBSSxDQUFDLENBQUMsTUFBTixFQUFjO0FBQ1Ysa0JBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxrQkFBSyxlQUFMLEdBQXVCLElBQXZCO0FBQ0g7O0FBRUQsY0FBSyxLQUFMLEdBQWEsS0FBYjs7QUFFQSxjQUFLLE9BQUwsR0FBZSxFQUFFLFlBQUYsQ0FBZjs7QUFFQSxjQUFLLFFBQUwsQ0FBYyxNQUFLLEtBQW5CLEVBQTBCLG1CQUExQixFQUErQyxNQUFLLE1BQXBEOztBQUVBLGNBQUssTUFBTDtBQWpCMEM7QUFrQjdDOzs7O2lDQWNRO0FBQ0wsaUJBQUssT0FBTCxDQUFhLEdBQWI7QUFDQSxpQkFBSyxHQUFMLENBQVMsR0FBVDs7QUFFQSxnQkFBSSxhQUFhLEtBQUssY0FBTCxFQUFqQjtBQUNBLGdCQUFJLEVBQUUsV0FBVyxJQUFiLEVBQW1CLE9BQW5CLEVBQUosRUFBa0M7QUFDOUIscUJBQUssT0FBTCxHQUFlLEVBQUUsWUFBRixFQUFnQixVQUFoQixDQUFmO0FBQ0gsYUFGRCxNQUVPO0FBQ0gscUJBQUssT0FBTCxHQUFlLEVBQUUsT0FBRixFQUFXLFVBQVgsQ0FBZjtBQUNIOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGdCQUFJLEVBQUUsV0FBVyxJQUFiLEVBQW1CLE9BQW5CLE1BQWdDLEtBQUssZUFBekMsRUFBMEQ7QUFDdEQscUJBQUssb0JBQUwsQ0FBMEIsS0FBSyxPQUEvQjtBQUNIOztBQUVELGlCQUFLLEdBQUwsQ0FBUyxLQUFULEdBQWlCLE1BQWpCLENBQXdCLEtBQUssT0FBN0I7O0FBRUEsbUJBQU8sSUFBUDtBQUNIOzs7a0NBRXlCO0FBQUEsZ0JBQWxCLFNBQWtCLHVFQUFOLElBQU07O0FBQ3RCLGdCQUFJLFNBQUosRUFBZTtBQUNYLHFCQUFLLE9BQUwsQ0FDSyxHQURMLENBQ1Msb0JBRFQsRUFFSyxRQUZMLENBRWMsU0FGZCxFQUdLLElBSEwsQ0FHVSxVQUhWLEVBR3NCLFNBSHRCLEVBSUssTUFKTCxDQUlZLDZCQUpaO0FBS0gsYUFORCxNQU1PO0FBQ0gscUJBQUssT0FBTCxDQUNLLFdBREwsQ0FDaUIsU0FEakIsRUFFSyxJQUZMLENBRVUsVUFGVixFQUVzQixTQUZ0QixFQUdLLElBSEwsQ0FHVSxVQUhWLEVBSUssTUFKTDs7QUFNQSxxQkFBSyxvQkFBTCxDQUEwQixLQUFLLE9BQS9CO0FBQ0g7O0FBRUQsbUJBQU8sSUFBUDtBQUNIOzs7NkNBTW9CLEcsRUFBSztBQUFBOztBQUN0QixnQkFBSSxHQUFKLENBQVEsb0JBQVI7O0FBRUEsZ0JBQUksRUFBSixDQUFPLHlCQUFQLEVBQWtDLFVBQUMsQ0FBRCxFQUFPO0FBQ3JDLHVCQUFLLGFBQUwsQ0FBbUIsQ0FBbkIsS0FBeUIsT0FBSyxNQUFMLENBQVksQ0FBWixDQUF6QjtBQUNILGFBRkQ7QUFHQSxnQkFBSSxFQUFKLENBQU8sMkJBQVAsRUFBb0MsVUFBQyxDQUFELEVBQU87QUFDdkMsdUJBQUssYUFBTCxDQUFtQixDQUFuQixLQUF5QixPQUFLLE1BQUwsQ0FBWSxDQUFaLENBQXpCO0FBQ0gsYUFGRDtBQUdIOzs7K0JBRU0sSyxFQUFPO0FBQ1YsaUJBQUssYUFBTCxDQUFtQixLQUFuQixLQUE2QixLQUFLLG1CQUFMLEVBQTdCO0FBQ0g7Ozs4Q0FFcUI7QUFDbEIsaUJBQUssS0FBTCxDQUFXLE9BQVgsQ0FBbUIsY0FBbkIsRUFBbUM7QUFDL0Isd0JBQVEsS0FBSyxLQURrQjtBQUUvQix1QkFBTyxLQUFLO0FBRm1CLGFBQW5DO0FBSUg7OzsrQ0FFc0I7QUFDbkIsZ0JBQUksT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLFNBQWhDLENBQUosRUFBZ0Q7QUFDNUMsdUJBQU8sS0FBSyxLQUFMLENBQVcsVUFBWCxDQUFzQixJQUF0QixDQUEyQixFQUEzQixLQUFrQyxXQUFsQyxHQUNELE9BQU8sSUFBUCxDQUFZLFFBQVosQ0FEQyxHQUVELE9BQU8sSUFBUCxDQUFZLE1BQVosQ0FGTjtBQUdIO0FBQ0QsbUJBQU8sT0FBTyxJQUFQLENBQVksUUFBWixDQUFQO0FBQ0g7OztrREFFeUIsSyxFQUFPO0FBQzdCLGdCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxTQUFoQyxDQUFKLEVBQWdEO0FBQzVDLHVCQUFPLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsSUFBdEIsQ0FBMkIsRUFBM0IsS0FBa0MsV0FBbEMsR0FDRCxPQUFPLElBQVAsQ0FBWSxlQUFaLEVBQTZCLEVBQUUsWUFBRixFQUE3QixDQURDLEdBRUQsT0FBTyxJQUFQLENBQVksV0FBWixFQUF5QixFQUFFLFlBQUYsRUFBekIsQ0FGTjtBQUdIO0FBQ0QsbUJBQU8sT0FBTyxJQUFQLENBQVksYUFBWixFQUEyQixFQUFFLFlBQUYsRUFBM0IsQ0FBUDtBQUNIOzs7eUNBRWdCO0FBQ2IsZ0JBQUksY0FBYztBQUNkLGlDQUFpQixLQUFLLEtBQUwsQ0FBVyxFQURkO0FBRWQsNkJBQWEsS0FBSyxLQUFMLENBQVcsVUFBWCxDQUFzQixJQUF0QixDQUEyQixFQUYxQjtBQUdkLGtDQUNLLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsSUFBdEIsQ0FBMkIsRUFBM0IsSUFDRyxPQUFPLElBQVAsQ0FBWSxLQUFLLEtBQUwsQ0FBVyxVQUFYLENBQXNCLElBQXRCLENBQTJCLEVBQXZDLENBREosSUFFQSxFQU5VO0FBT2Qsc0JBQU8sS0FBSyxPQUFMLENBQWEsSUFBYixJQUFxQixLQUFLLE9BQUwsQ0FBYSxJQUFiLEVBQXRCLElBQThDLEVBUHRDO0FBUWQsMEJBQVU7QUFSSSxhQUFsQjs7QUFXQSxnQkFBSSxRQUFRLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsS0FBbEM7O0FBRUEsZ0JBQUksVUFBVSxDQUFDLG1CQUFELEVBQXNCLFdBQXRCLENBQWQ7O0FBRUEsZ0JBQUksS0FBSyxRQUFULEVBQW1CO0FBQUE7O0FBQ2YscUNBQVEsSUFBUixpQkFBZ0IsQ0FBQyxRQUFELEVBQVcsUUFBWCxFQUFxQixXQUFyQixFQUFrQyxXQUFsQyxDQUFoQjtBQUNIOztBQUVELGdCQUFJLEtBQUssS0FBTCxLQUFlLE1BQW5CLEVBQTJCO0FBQ3ZCLHdCQUFRLElBQVIsQ0FBYSxNQUFiO0FBQ0g7O0FBRUQsb0JBQVEsS0FBSyxLQUFiO0FBQ0kscUJBQUssYUFBTDtBQUNJLDRCQUFRLElBQVIsQ0FBYSx3Q0FBYjtBQUNBLHdCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxTQUFoQyxDQUFKLEVBQWdEO0FBQzVDLGdDQUFRLElBQVIsQ0FBYSxxQkFBYjtBQUNIO0FBQ0QsZ0NBQVksSUFBWixjQUE0QixPQUFPLElBQVAsQ0FDeEIseUJBRHdCLENBQTVCO0FBR0E7QUFDSixxQkFBSyxNQUFMO0FBQ0ksNEJBQVEsSUFBUixDQUFhLGlCQUFiO0FBQ0EsZ0NBQVksSUFBWixjQUE0QixPQUFPLElBQVAsQ0FBWSxZQUFaLENBQTVCO0FBQ0E7QUFDSixxQkFBSyxTQUFMO0FBQ0ksd0JBQUksS0FBSyxNQUFULEVBQWlCO0FBQ2IsZ0NBQVEsSUFBUixDQUFhLGlCQUFiO0FBQ0g7O0FBRUQsNEJBQVEsSUFBUixDQUFhLGlDQUFiO0FBQ0EsZ0NBQVksSUFBWixjQUE0QixPQUFPLElBQVAsQ0FDeEIsa0JBRHdCLENBQTVCO0FBR0EsZ0NBQVksWUFBWixJQUE0QixPQUFPLElBQVAsQ0FDeEIsdUJBRHdCLEVBRXhCLEVBQUUsWUFBRixFQUZ3QixDQUE1QjtBQUlBO0FBQ0oscUJBQUssUUFBTDtBQUNJLHdCQUFJLEtBQUssTUFBVCxFQUFpQjtBQUNiLGdDQUFRLElBQVIsQ0FBYSxpQkFBYjtBQUNIOztBQUVELDRCQUFRLElBQVIsQ0FBYSwrQkFBYjtBQUNBLGdDQUFZLElBQVosY0FBNEIsS0FBSyxvQkFBTCxFQUE1QjtBQUNBLGdDQUFZLFlBQVosSUFDSSxLQUFLLHlCQUFMLENBQStCLEtBQS9CLENBREo7QUFFQTtBQUNKLHFCQUFLLFVBQUw7QUFDSSx3QkFBSSxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsU0FBaEMsQ0FBSixFQUFnRDtBQUM1QyxnQ0FBUSxJQUFSLENBQWEsaUJBQWI7QUFDQSxvQ0FBWSxJQUFaLGNBQTRCLE9BQU8sSUFBUCxDQUN4QixVQUR3QixDQUE1QjtBQUdBLG9DQUFZLElBQVosR0FBbUIsT0FBTyxHQUFQLENBQVcsT0FBTyxNQUFQLENBQWMsYUFBekIsRUFBd0M7QUFDdkQsb0NBQVEsS0FBSyxLQUFMLENBQVcsVUFBWCxDQUFzQixPQUF0QixDQUE4QixDQUE5QixFQUFpQyxFQURjO0FBRXZELHFDQUFTLEtBQUssS0FBTCxDQUFXO0FBRm1DLHlCQUF4QyxDQUFuQjtBQUlBLG9DQUFZLFlBQVosSUFBNEIsT0FBTyxJQUFQLENBQVksZUFBWixFQUE2QjtBQUNyRCx1Q0FBVztBQUQwQyx5QkFBN0IsQ0FBNUI7QUFHQSxvQ0FBWSxNQUFaLEdBQXFCLFFBQXJCO0FBQ0Esb0NBQVksR0FBWixHQUFrQixZQUFsQjtBQUNILHFCQWRELE1BY087QUFDSCxnQ0FBUSxJQUFSLENBQWEseUJBQWI7QUFDQSxvQ0FBWSxJQUFaLGNBQTRCLE9BQU8sSUFBUCxDQUN4QixXQUR3QixDQUE1QjtBQUdBLG9DQUFZLElBQVosR0FBbUIsT0FBTyxHQUFQLENBQVcsT0FBTyxNQUFQLENBQWMsWUFBekIsQ0FBbkI7QUFDSDtBQUNEO0FBQ0oscUJBQUssTUFBTDtBQUNJLHdCQUFJLEtBQUssTUFBVCxFQUFpQjtBQUNiLGdDQUFRLElBQVIsQ0FBYSx1QkFBYjtBQUNIOztBQUVELDRCQUFRLElBQVIsQ0FBYSxpQkFBYjtBQUNBLGdDQUFZLElBQVosY0FBNEIsT0FBTyxJQUFQLENBQVksWUFBWixDQUE1QjtBQUNBLGdDQUFZLFlBQVosSUFBNEIsT0FBTyxJQUFQLENBQVksbUJBQVosRUFBaUM7QUFDekQ7QUFEeUQscUJBQWpDLENBQTVCO0FBR0E7QUFDSixxQkFBSyxRQUFMO0FBQ0ksd0JBQUksS0FBSyxRQUFULEVBQW1CO0FBQ2YsZ0NBQVEsSUFBUixDQUFhLFNBQWI7QUFDSDs7QUFFRCw0QkFBUSxJQUFSLENBQWEscUJBQWI7QUFDQSxnQ0FBWSxJQUFaLGNBQTRCLE9BQU8sSUFBUCxDQUFZLFdBQVosQ0FBNUI7QUFDQSxnQ0FBWSxJQUFaLEdBQW1CLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLFlBQXpCLENBQW5CO0FBQ0E7QUFDSixxQkFBSyxPQUFMO0FBQ0ksNEJBQVEsSUFBUixDQUFhLHdCQUFiO0FBQ0EsOEJBQVUsUUFBUSxNQUFSLENBQWUsVUFBQyxDQUFEO0FBQUEsK0JBQU8sTUFBTSxXQUFiO0FBQUEscUJBQWYsQ0FBVjtBQUNBLGdDQUFZLElBQVosZ0VBQThFLE9BQU8sSUFBUCxDQUMxRSxvQkFEMEUsRUFFMUUsRUFBRSxPQUFPLEVBQVQsRUFGMEUsQ0FBOUU7QUFJQTtBQUNKLHFCQUFLLGNBQUw7QUFDSSw0QkFBUSxJQUFSLENBQWEsK0JBQWI7QUFDQSw4QkFBVSxRQUFRLE1BQVIsQ0FBZSxVQUFDLENBQUQ7QUFBQSwrQkFBTyxNQUFNLFdBQWI7QUFBQSxxQkFBZixDQUFWO0FBQ0EsZ0NBQVksSUFBWixnRUFBOEUsT0FBTyxJQUFQLENBQzFFLDJCQUQwRSxDQUE5RTtBQUdBO0FBQ0oscUJBQUssV0FBTDtBQUNJLDRCQUFRLElBQVIsQ0FBYSw0QkFBYjtBQUNBLDhCQUFVLFFBQVEsTUFBUixDQUFlLFVBQUMsQ0FBRDtBQUFBLCtCQUFPLE1BQU0sV0FBYjtBQUFBLHFCQUFmLENBQVY7QUFDQSxnQ0FBWSxJQUFaLGdFQUE4RSxPQUFPLElBQVAsQ0FDMUUsd0JBRDBFLENBQTlFO0FBR0E7QUFDSixxQkFBSyxTQUFMO0FBQ0ksNEJBQVEsSUFBUixDQUFhLDBCQUFiO0FBQ0EsOEJBQVUsUUFBUSxNQUFSLENBQWUsVUFBQyxDQUFEO0FBQUEsK0JBQU8sTUFBTSxXQUFiO0FBQUEscUJBQWYsQ0FBVjtBQUNBLGdDQUFZLElBQVosZ0VBQThFLE9BQU8sSUFBUCxDQUMxRSxzQkFEMEUsQ0FBOUU7QUFHQTtBQUNKLHFCQUFLLFdBQUw7QUFDSSw0QkFBUSxJQUFSLENBQWEsY0FBYjtBQUNBLGdDQUFZLElBQVosY0FBNEIsT0FBTyxJQUFQLENBQVksV0FBWixDQUE1QjtBQUNBLGdDQUFZLElBQVosR0FBbUIsT0FBTyxHQUFQLENBQVcsT0FBTyxNQUFQLENBQWMsYUFBekIsRUFBd0M7QUFDdkQsZ0NBQVEscUJBRCtDO0FBRXZELGlDQUFTLEtBQUssS0FBTCxDQUFXO0FBRm1DLHFCQUF4QyxDQUFuQjtBQUlBLGdDQUFZLE1BQVosR0FBcUIsUUFBckI7QUFDQSxnQ0FBWSxHQUFaLEdBQWtCLFlBQWxCO0FBQ0E7QUFDSixxQkFBSyxTQUFMO0FBQ0ksNEJBQVEsSUFBUixDQUFhLFlBQWI7QUFDQSxnQ0FBWSxJQUFaLGNBQTRCLE9BQU8sSUFBUCxDQUFZLFNBQVosQ0FBNUI7QUFDQSxnQ0FBWSxJQUFaLEdBQW1CLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLGFBQXpCLEVBQXdDO0FBQ3ZELGdDQUFRLGlCQUQrQztBQUV2RCxpQ0FBUyxLQUFLLEtBQUwsQ0FBVztBQUZtQyxxQkFBeEMsQ0FBbkI7QUFJQSxnQ0FBWSxNQUFaLEdBQXFCLFFBQXJCO0FBQ0EsZ0NBQVksR0FBWixHQUFrQixZQUFsQjtBQUNBO0FBQ0oscUJBQUssVUFBTDtBQUNJLHdCQUFJLEtBQUssTUFBVCxFQUFpQjtBQUNiLGdDQUFRLElBQVIsQ0FBYSx1QkFBYjtBQUNIOztBQUVELDRCQUFRLElBQVIsQ0FBYSxhQUFiO0FBQ0EsZ0NBQVksSUFBWixjQUE0QixPQUFPLElBQVAsQ0FBWSxVQUFaLENBQTVCO0FBQ0EsZ0NBQVksSUFBWixHQUFtQixPQUFPLEdBQVAsQ0FBVyxPQUFPLE1BQVAsQ0FBYyxhQUF6QixFQUF3QztBQUN2RCxnQ0FBUSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZ0JBQWYsQ0FEK0M7QUFFdkQsaUNBQVMsS0FBSyxLQUFMLENBQVc7QUFGbUMscUJBQXhDLENBQW5CO0FBSUE7QUFDSixxQkFBSyxTQUFMO0FBQ0ksd0JBQUksS0FBSyxNQUFULEVBQWlCO0FBQ2IsNEJBQUksYUFBYSxFQUFFLE9BQU8sdUJBQVQsQ0FBakI7QUFDQSxtQ0FBVyxHQUFYLENBQWUsT0FBZixFQUF3QixTQUF4QjtBQUNBLG9DQUFZLElBQVosR0FBbUIsVUFBbkI7QUFDQTtBQUNIOztBQUVELDRCQUFRLElBQVIsQ0FBYSxtQkFBYjtBQUNBLGdDQUFZLFFBQVosR0FBdUIsSUFBdkI7QUFDQSxnQ0FBWSxJQUFaLEdBQ0ksaURBREo7QUFFQTtBQTFKUjs7QUE2SkEsbUNBQW9CLFFBQVEsSUFBUixDQUFhLEdBQWIsQ0FBcEI7O0FBRUEsbUJBQU8sV0FBUDtBQUNIOzs7NEJBM1JjO0FBQ1gsbUJBQU8sS0FBSyxJQUFMLEtBQWMsUUFBckI7QUFDSDs7OzRCQUVZO0FBQ1QsbUJBQU8sS0FBSyxJQUFMLEtBQWMsTUFBckI7QUFDSDs7OzRCQUVXO0FBQ1IsbUJBQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsQ0FBUDtBQUNIOzs7O0VBL0IwQyxTQUFTLEk7O3FCQUFuQyxpQjs7Ozs7Ozs7Ozs7OztBQ0FyQjs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OztJQUVxQixTOzs7Ozs0QkFDRDtBQUNaLG1CQUFPLHVCQUFQO0FBQ0g7OztBQUlELDZCQUErQztBQUFBLFlBQWpDLFdBQWlDLFFBQWpDLFdBQWlDO0FBQUEsaUNBQXBCLFFBQW9CO0FBQUEsWUFBcEIsUUFBb0IsaUNBQVQsS0FBUzs7QUFBQTs7QUFBQSwySEFDbEMsU0FEa0M7O0FBQUEsY0FGL0MsUUFFK0MsR0FGcEMsc0JBRW9DOztBQUUzQyxjQUFLLE1BQUwsR0FBYyxFQUFkOztBQUVBLGNBQUssV0FBTCxHQUFtQixXQUFuQjtBQUNBLGNBQUssUUFBTCxHQUFnQixRQUFoQjs7QUFFQSxjQUFLLE1BQUw7QUFQMkM7QUFROUM7Ozs7aUNBRVE7QUFBQSxnQkFDRyxLQURILEdBQ29DLElBRHBDLENBQ0csS0FESDtBQUFBLGdCQUNVLFdBRFYsR0FDb0MsSUFEcEMsQ0FDVSxXQURWO0FBQUEsZ0JBQ3VCLFFBRHZCLEdBQ29DLElBRHBDLENBQ3VCLFFBRHZCOzs7QUFHTCxpQkFBSyxHQUFMLENBQVMsS0FBVDs7QUFFQSxpQkFBSyxNQUFMLENBQVksT0FBWixDQUFvQixVQUFDLElBQUQ7QUFBQSx1QkFBVSxLQUFLLE1BQUwsRUFBVjtBQUFBLGFBQXBCO0FBQ0EsaUJBQUssTUFBTCxHQUFjLEVBQWQ7O0FBRUEsZ0JBQU0sT0FBTyxFQUNULEtBQUssUUFBTCxDQUFjO0FBQ1YsNkJBQWEsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLFNBQWhDLElBQ1AsUUFETyxHQUVQO0FBSEksYUFBZCxDQURTLENBQWI7O0FBUUE7QUFDQSxnQkFBSSxLQUFLLEtBQUwsQ0FBVyxhQUFmLEVBQThCO0FBQzFCLHFCQUFLLEdBQUwsQ0FBUyxRQUFULENBQWtCLGFBQWxCO0FBQ0g7O0FBRUQsZ0JBQUksQ0FBQyxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsU0FBaEMsQ0FBTCxFQUFpRDtBQUM3QyxxQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssY0FBTCxHQUFzQixJQUFJLDJCQUFKLENBQW1CO0FBQ3RDLGdDQURzQztBQUV0Qyx3QkFBSSxLQUFLLElBQUwsQ0FBVSxpQkFBVjtBQUZrQyxpQkFBbkIsQ0FEM0I7QUFNSDs7QUFFRCxpQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssS0FBTCxHQUFhLElBQUksa0JBQUosQ0FBVTtBQUNwQiw0QkFEb0I7QUFFcEIsb0JBQUksS0FBSyxJQUFMLENBQVUsYUFBVixDQUZnQjtBQUdwQix3Q0FIb0I7QUFJcEI7QUFKb0IsYUFBVixDQURsQjs7QUFTQSxpQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssU0FBTCxHQUFpQixJQUFJLHNCQUFKLENBQWM7QUFDNUIsNEJBRDRCO0FBRTVCLG9CQUFJLEtBQUssSUFBTCxDQUFVLFlBQVY7QUFGd0IsYUFBZCxDQUR0Qjs7QUFPQSxpQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssaUJBQUwsR0FBeUIsSUFBSSw4QkFBSixDQUFzQjtBQUM1Qyw0QkFENEM7QUFFNUMsb0JBQUksS0FBSyxJQUFMLENBQVUsY0FBVjtBQUZ3QyxhQUF0QixDQUQ5Qjs7QUFPQSxnQkFDSSxDQUFDLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxnQkFBaEMsQ0FBRCxJQUNBLEVBQ0ksT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLGlCQUFoQyxLQUNBLEtBQUssS0FBTCxDQUFXLFVBRmYsQ0FEQSxJQUtBLENBQUMsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLGlCQUFoQyxDQU5MLEVBT0U7QUFDRSxxQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssY0FBTCxHQUFzQixJQUFJLDJCQUFKLENBQW1CO0FBQ3RDLGdDQURzQztBQUV0Qyx3QkFBSSxLQUFLLElBQUwsQ0FBVSxnQkFBVixDQUZrQztBQUd0QywwQkFBTTtBQUhnQyxpQkFBbkIsRUFJcEIsTUFKb0IsRUFEM0I7QUFPSDs7QUFFRCxpQkFBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixJQUFoQjs7QUFFQSxtQkFBTyxJQUFQO0FBQ0g7OztpQ0FFUTtBQUNMLGlCQUFLLE1BQUwsQ0FBWSxPQUFaLENBQW9CLFVBQUMsSUFBRDtBQUFBLHVCQUFVLEtBQUssTUFBTCxFQUFWO0FBQUEsYUFBcEI7QUFDQTtBQUNIOzs7O0VBL0ZrQyxTQUFTLEk7O3FCQUEzQixTOzs7OztBQ0NyQixJQUFBLGtCQUFBLEdBQUEsT0FBQSxDQUFBLDJCQUFBLENBQUEsQ0FBQTs7OztBQUNBLElBQUEsa0JBQUEsR0FBQSxPQUFBLENBQUEscUJBQUEsQ0FBQSxDQUFBOzs7O0FBQ0EsSUFBQSxlQUFBLEdBQUEsT0FBQSxDQUFBLGtCQUFBLENBQUEsQ0FBQTs7OztBQUNBLElBQUEsZUFBQSxHQUFBLE9BQUEsQ0FBQSxrQkFBQSxDQUFBLENBQUE7Ozs7QUFDQSxJQUFBLE1BQUEsR0FBQSxPQUFBLENBQUEsU0FBQSxDQUFBLENBQUE7Ozs7QUFDQSxJQUFBLGlCQUFBLEdBQUEsT0FBQSxDQUFBLDZCQUFBLENBQUEsQ0FBQTs7Ozs7O0FBZEEsSUFBTSxRQUFBLEdBQVcsTUFBQSxDQUFPLFFBQXhCLENBQUE7O0FBRUE7QUFDQSxJQUFNLElBQUEsR0FBTyxPQUFBLENBQVEsTUFBUixDQUFiLENBQUE7QUFDQSxJQUFNLGlCQUFBLEdBQW9CLHFoQkFBMUIsQ0FBQTs7QUFZQSxJQUFNLGlCQUFBLEdBQW9CLFFBQUEsQ0FBUyxJQUFULENBQWMsTUFBZCxDQUFxQjtJQUMzQyxTQUFBLEVBQVcsaUJBRGdDOztJQUczQyxRQUFBLEVBQVUsQ0FBQSxDQUFFLFFBQUYsQ0FBVyxpQkFBWCxDQUhpQzs7SUFLM0MsVUFMMkMsRUFBQSxTQUFBLFVBQUEsQ0FBQSxJQUFBLEVBS1Y7UUFBQSxJQUFwQixHQUFvQixHQUFBLElBQUEsQ0FBcEIsR0FBb0I7WUFBZixXQUFlLEdBQUEsSUFBQSxDQUFmLFdBQWUsQ0FBQTs7UUFDN0IsSUFBTSxLQUFBLEdBQVEsSUFBQSxDQUFLLEtBQW5CLENBQUE7O1FBRUEsSUFBTSxJQUFBLEdBQU8sQ0FBQSxDQUFFLElBQUEsQ0FBSyxRQUFMLEVBQUYsQ0FBYixDQUFBOztRQUVBLElBQUEsQ0FBSyxjQUFMLEdBQXNCLElBQUksZ0JBQUEsQ0FBQSxTQUFBLENBQUosQ0FBbUI7WUFDckMsS0FBQSxFQUFBLEtBRHFDO1lBRXJDLEVBQUEsRUFBSSxJQUFBLENBQUssSUFBTCxDQUFVLGlCQUFWLENBQUE7U0FGYyxDQUF0QixDQUFBOztRQUtBLElBQUEsQ0FBSyxLQUFMLEdBQWEsSUFBSSxPQUFBLENBQUEsU0FBQSxDQUFKLENBQVU7WUFDbkIsS0FBQSxFQUFBLEtBRG1CO1lBRW5CLEVBQUEsRUFBSSxJQUFBLENBQUssSUFBTCxDQUFVLGFBQVYsQ0FGZTtZQUduQixXQUFBLEVBQUEsV0FIbUI7WUFJbkIsUUFBQSxFQUFVLEtBQUE7U0FKRCxDQUFiLENBQUE7O1FBT0EsSUFBQSxDQUFLLFNBQUwsR0FBaUIsSUFBSSxtQkFBQSxDQUFBLFNBQUEsQ0FBSixDQUFzQjtZQUNuQyxLQUFBLEVBQUEsS0FEbUM7WUFFbkMsRUFBQSxFQUFJLElBQUEsQ0FBSyxJQUFMLENBQVUsWUFBVixDQUFBO1NBRlMsQ0FBakIsQ0FBQTs7UUFLQSxJQUFBLENBQUssaUJBQUwsR0FBeUIsSUFBSSxtQkFBQSxDQUFBLFNBQUEsQ0FBSixDQUFzQjtZQUMzQyxLQUFBLEVBQUEsS0FEMkM7WUFFM0MsRUFBQSxFQUFJLElBQUEsQ0FBSyxJQUFMLENBQVUsY0FBVixDQUZ1QztZQUczQyxJQUFBLEVBQU0sUUFIcUM7WUFJM0MsS0FBQSxFQUFPLE1BQUE7U0FKYyxDQUF6QixDQUFBOztRQU9BLElBQ0ksQ0FBQyxNQUFBLENBQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxnQkFBaEMsQ0FBRCxJQUNBLEVBQ0ksTUFBQSxDQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsaUJBQWhDLENBQUEsSUFDQSxJQUFBLENBQUssS0FBTCxDQUFXLFVBRmYsQ0FEQSxJQUtBLENBQUMsTUFBQSxDQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsaUJBQWhDLENBTkwsRUFPRTtZQUNFLElBQUEsQ0FBSyxjQUFMLEdBQXNCLElBQUksZ0JBQUEsQ0FBQSxTQUFBLENBQUosQ0FBbUI7Z0JBQ3JDLEtBQUEsRUFBQSxLQURxQztnQkFFckMsRUFBQSxFQUFJLElBQUEsQ0FBSyxJQUFMLENBQVUsZ0JBQVYsQ0FGaUM7Z0JBR3JDLElBQUEsRUFBTSxXQUFBO2FBSFksQ0FBQSxDQUluQixNQUptQixFQUF0QixDQUFBO1NBS0g7O1FBRUQsSUFBQSxDQUFLLGdCQUFMLEdBQXdCLElBQUksa0JBQUEsQ0FBQSxTQUFBLENBQUosQ0FBcUI7WUFDekMsS0FBQSxFQUFBLEtBRHlDO1lBRXpDLEVBQUEsRUFBSSxJQUFBLENBQUssSUFBTCxDQUFVLG9CQUFWLENBQUE7U0FGZ0IsQ0FBeEIsQ0FBQTs7UUFLQSxJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxJQUFkLENBQUEsQ0FBQTtLQUNIO0NBdkRxQixDQUExQixDQUFBOztBQTBEQSxNQUFBLENBQU8sT0FBUCxHQUFpQixpQkFBakIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7QUMxRUE7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBTSxLQUFLLFFBQVEsSUFBUixDQUFYO0FBQ0E7O0lBQ3FCLG1COzs7QUFFakIsdUNBQThGO0FBQUEsWUFBaEYsR0FBZ0YsUUFBaEYsR0FBZ0Y7QUFBQSxZQUEzRSxxQkFBMkUsUUFBM0UscUJBQTJFO0FBQUEsWUFBcEQsSUFBb0QsUUFBcEQsSUFBb0Q7QUFBQSxZQUE5QyxVQUE4QyxRQUE5QyxVQUE4QztBQUFBLFlBQWxDLFdBQWtDLFFBQWxDLFdBQWtDO0FBQUEsWUFBckIsUUFBcUIsUUFBckIsUUFBcUI7QUFBQSxZQUFYLE9BQVcsUUFBWCxPQUFXOztBQUFBOztBQUFBLCtJQUNqRixTQURpRjs7QUFHMUYsY0FBSyxNQUFMLEdBQXNCLEVBQXRCOztBQUVBLGNBQUssR0FBTCxHQUFzQixHQUF0QjtBQUNBLGNBQUssSUFBTCxHQUFzQixRQUFRLHNCQUE5QjtBQUNBLGNBQUssVUFBTCxHQUFzQixFQUFFLE1BQUYsQ0FBUyxFQUFULEVBQWEsVUFBYixDQUF0QjtBQUNBLGNBQUssV0FBTCxHQUFzQixXQUF0QjtBQUNBLGNBQUssUUFBTCxHQUFzQixRQUF0QjtBQUNBLGNBQUssT0FBTCxHQUFzQixPQUF0Qjs7QUFFQSxjQUFLLFlBQUwsR0FBc0IsSUFBSSx5QkFBSixDQUFpQixFQUFFLEtBQUssTUFBSyxHQUFaLEVBQWlCLGdCQUFqQixFQUFqQixDQUF0Qjs7QUFFQSxjQUFLLFFBQUwsQ0FBYyxNQUFLLFVBQW5CLEVBQStCLGNBQS9CLEVBQStDLE1BQUssa0JBQXBEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQUkseUJBQXlCLE9BQU8sU0FBUCxDQUFpQixlQUExQyxJQUE2RCxPQUFPLFNBQVAsQ0FBaUIsY0FBbEYsRUFBa0c7QUFDOUYsa0NBQ0ssWUFETCxHQUVLLElBRkwsQ0FFVSxVQUFDLFVBQUQsRUFBZ0I7QUFDbEIsc0JBQUssa0JBQUwsQ0FBd0IsVUFBeEI7QUFDSCxhQUpMO0FBS0g7O0FBRUQsY0FBSyxNQUFMO0FBM0IwRjtBQTRCN0Y7Ozs7a0RBS3FDO0FBQUEsZ0JBQWpCLE1BQWlCLFNBQWpCLE1BQWlCO0FBQUEsZ0JBQVQsS0FBUyxTQUFULEtBQVM7O0FBQ2xDLGlCQUFLLFlBQUwsQ0FBa0IsT0FBbEIsQ0FBMEIsTUFBMUIsRUFBa0MsS0FBbEM7QUFDSDs7OzJDQUVrQixVLEVBQVk7QUFBQTs7QUFDM0IsZ0JBQUksTUFBTSxFQUFWO0FBQ0EsY0FBRSxFQUFFLE1BQUYsQ0FBUyxVQUFULENBQUYsRUFBd0IsSUFBeEIsQ0FBNkIsVUFBQyxJQUFELEVBQVU7QUFDbkMsb0JBQUksRUFBRSxPQUFGLENBQVUsSUFBVixDQUFKLEVBQXFCO0FBQUE7O0FBQ2pCLGlDQUFJLElBQUosZ0NBQVksSUFBWjtBQUNILGlCQUZELE1BRU8sSUFBSSxFQUFFLFFBQUYsQ0FBVyxJQUFYLENBQUosRUFBc0I7QUFBQTs7QUFDekIsa0NBQUksSUFBSixpQ0FBWSxFQUFFLElBQUYsQ0FBTyxJQUFQLEVBQWEsR0FBYixDQUFpQixNQUFqQixDQUFaO0FBQ0gsaUJBRk0sTUFFQTtBQUNILHdCQUFJLElBQUosQ0FBUyxJQUFUO0FBQ0g7QUFDSixhQVJEO0FBU0Esa0JBQU0sRUFBRSxJQUFGLENBQU8sR0FBUCxDQUFOOztBQUVBLGdCQUFJLE9BQUosQ0FBWSxVQUFDLEVBQUQsRUFBUTtBQUNoQixvQkFBTSxRQUFRLE9BQUssVUFBTCxDQUFnQixHQUFoQixDQUFvQixFQUFwQixDQUFkOztBQUVBLG9CQUFJLEtBQUosRUFBVztBQUNQLDBCQUFNLGlCQUFOLENBQXdCLFVBQXhCO0FBQ0g7QUFDSixhQU5EOztBQVFBLGlCQUFLLHVCQUFMO0FBQ0g7OztpQ0FFUTtBQUFBOztBQUNMLGdCQUFJLE9BQU8sU0FBUyxzQkFBVCxFQUFYOztBQUVBLGlCQUFLLE1BQUwsQ0FBWSxPQUFaLENBQW9CLFVBQUMsSUFBRDtBQUFBLHVCQUFVLEtBQUssTUFBTCxFQUFWO0FBQUEsYUFBcEI7QUFDQSxpQkFBSyxNQUFMLEdBQWMsRUFBZDs7QUFFQSxpQkFBSyxVQUFMLENBQWdCLE9BQWhCLENBQXdCLFVBQUMsS0FBRCxFQUFXOztBQUUvQixzQkFBTSxHQUFOLENBQVUsT0FBVixFQUFtQixHQUFHLE1BQUgsQ0FBVSxNQUFNLEdBQU4sQ0FBVSxPQUFWLENBQVYsQ0FBbkI7O0FBRUEsc0JBQU0sVUFBTixDQUFpQixPQUFLLE9BQXRCOztBQUVBLG9CQUFJLE9BQU8sSUFBSSxPQUFLLElBQVQsQ0FBYztBQUNyQiwyQkFBYyxLQURPO0FBRXJCLHlCQUFjLE9BQUssR0FGRTtBQUdyQixpQ0FBYyxPQUFLLFdBSEU7QUFJckIsOEJBQWMsT0FBSztBQUpFLGlCQUFkLENBQVg7O0FBT0EscUJBQUssV0FBTCxDQUNJLEVBQUUsUUFBRixFQUFZO0FBQ1IsNkJBQU87QUFEQyxpQkFBWixFQUVHLE1BRkgsQ0FFVSxLQUFLLEdBRmYsRUFFb0IsQ0FGcEIsQ0FESjs7QUFNQSx1QkFBSyxNQUFMLENBQVksSUFBWixDQUFpQixJQUFqQjtBQUNILGFBcEJEOztBQXNCQSxnQkFBSSxDQUFDLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyw2QkFBaEMsQ0FBTCxFQUFvRTtBQUNoRTtBQUNBO0FBQ0Esb0JBQU0sbUJBQW1CLEVBQUUsNkJBQUYsQ0FBekI7QUFDQSxxQkFBSyxHQUFMLENBQVMsSUFBVCxDQUFjLEtBQUssVUFBbkI7QUFDQSxxQkFBSyxHQUFMLENBQVMsS0FBVCxHQUFpQixNQUFqQixDQUF3QixnQkFBeEIsRUFBMEMsTUFBMUMsQ0FBaUQsSUFBakQ7QUFDSCxhQU5ELE1BTU87QUFDSCxxQkFBSyxHQUFMLENBQVMsSUFBVCxDQUFjLEtBQUssVUFBbkI7QUFDQSxxQkFBSyxHQUFMLENBQVMsS0FBVCxHQUFpQixNQUFqQixDQUF3QixJQUF4QjtBQUNIO0FBQ0o7OztpQ0FFUTtBQUNMLGlCQUFLLE1BQUwsQ0FBWSxPQUFaLENBQW9CLFVBQUMsSUFBRDtBQUFBLHVCQUFVLEtBQUssTUFBTCxFQUFWO0FBQUEsYUFBcEI7QUFDQTtBQUNIOzs7a0RBRXlCO0FBQ3RCLGdCQUFJLE9BQU8sU0FBUCxDQUFpQixlQUFqQixJQUFvQyxPQUFPLFNBQVAsQ0FBaUIsY0FBckQsSUFBdUUseUJBQVksR0FBWixDQUFnQixRQUFoQixDQUEzRSxFQUFzRztBQUNsRyxvQkFBTSxrQkFBa0IsSUFBSSxtQ0FBSixDQUEyQixLQUFLLFVBQWhDLEVBQTRDLEtBQUssR0FBakQsQ0FBeEI7QUFDQSxnQ0FBZ0IsYUFBaEI7QUFDQSx1QkFBTyxlQUFQLEdBQXlCLGVBQXpCO0FBQ0g7QUFDSjs7OzRCQW5GYTtBQUNWLG1CQUFPLElBQVA7QUFDSDs7OztFQWpDNEMsU0FBUyxJOztxQkFBckMsbUI7Ozs7Ozs7O0FDUHJCLElBQU0sV0FBVyxPQUFPLFFBQXhCOztBQUVBLElBQU0saUJBQWlCLFNBQVMsSUFBVCxDQUFjLE1BQWQsQ0FBcUI7QUFDeEMsY0FEd0Msd0JBQzNCO0FBQ1QsYUFBSyxRQUFMLENBQWMsS0FBSyxLQUFuQixFQUEwQixRQUExQixFQUFvQyxLQUFLLE1BQXpDOztBQUVBLGFBQUssZUFBTCxHQUF1QixFQUFFLFNBQUYsQ0FBdkI7O0FBRUEsYUFBSyxNQUFMO0FBQ0gsS0FQdUM7QUFTeEMsVUFUd0Msb0JBUy9CO0FBQ0wsWUFBTSxJQUFJLEtBQUssV0FBTCxFQUFWOztBQUVBLGFBQUssZUFBTCxHQUF1QixFQUFFLFNBQUYsRUFBYSxFQUFFLFNBQWYsRUFBMEIsTUFBMUIsQ0FDbkIsRUFBRSxPQUFGLEVBQVcsRUFBRSxJQUFiLENBRG1CLENBQXZCO0FBR0EsYUFBSyxHQUFMLENBQVMsSUFBVCxDQUFjLEtBQUssZUFBbkI7QUFDQSxhQUFLLEdBQUwsQ0FBUyxJQUFULENBQWMsYUFBZCxFQUE2QixNQUE3Qjs7QUFFQSxlQUFPLElBQVA7QUFDSCxLQW5CdUM7QUFxQnhDLGVBckJ3Qyx5QkFxQjFCO0FBQ1YsWUFBSSxTQUFTO0FBQ1QsdUJBQVc7QUFDUCx5QkFBUyxDQUFDLGtCQUFELEVBQXFCLFdBQXJCO0FBREYsYUFERjtBQUlULGtCQUFNO0FBQ0Ysc0JBQU0sRUFESjtBQUVGLHNCQUFNLEtBQUssS0FBTCxDQUFXLGVBRmY7QUFHRiwwQkFBVSxDQUFDO0FBSFQ7QUFKRyxTQUFiOztBQVdBLGFBQUssTUFBTCxHQUFjLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLENBQWQ7O0FBRUEsZ0JBQVEsS0FBSyxNQUFiO0FBQ0ksaUJBQUssYUFBTDtBQUNJLHVCQUFPLFNBQVAsQ0FBaUIsT0FBakIsQ0FBeUIsSUFBekIsQ0FDSSxrQ0FESjtBQUdBLHVCQUFPLElBQVAsQ0FBWSxJQUFaLEdBQW1CLE9BQU8sSUFBUCxDQUFZLHlCQUFaLENBQW5CO0FBQ0E7QUFDSixpQkFBSyxNQUFMO0FBQ0ksdUJBQU8sU0FBUCxDQUFpQixPQUFqQixDQUF5QixJQUF6QixDQUNJLDhDQURKO0FBR0EsdUJBQU8sSUFBUCxDQUFZLElBQVosR0FBbUIsT0FBTyxJQUFQLENBQVksdUJBQVosQ0FBbkI7QUFDQTtBQUNKLGlCQUFLLFFBQUw7QUFDSSx1QkFBTyxTQUFQLENBQWlCLE9BQWpCLENBQXlCLElBQXpCLENBQ0ksZ0RBREo7QUFHQSx1QkFBTyxJQUFQLENBQVksSUFBWixHQUFtQixPQUFPLElBQVAsQ0FBWSx1QkFBWixDQUFuQjtBQUNBO0FBQ0osaUJBQUssVUFBTDtBQUNBLGlCQUFLLFVBQUw7QUFDQSxpQkFBSyxXQUFMO0FBQ0EsaUJBQUssU0FBTDtBQUNJLHVCQUFPLFNBQVAsQ0FBaUIsT0FBakIsQ0FBeUIsSUFBekIsQ0FDSSxrREFESjtBQUdBLHVCQUFPLElBQVAsQ0FBWSxJQUFaLEdBQW1CLE9BQU8sSUFBUCxDQUFZLFVBQVosQ0FBbkI7QUFDQTtBQUNKLGlCQUFLLE1BQUw7QUFDSSx1QkFBTyxTQUFQLENBQWlCLE9BQWpCLENBQXlCLElBQXpCLENBQThCLDJCQUE5QjtBQUNBLHVCQUFPLElBQVAsQ0FBWSxJQUFaLEdBQW1CLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixJQUNiLE9BQU8sSUFBUCxDQUFZLHdCQUFaLENBRGEsR0FFYixPQUFPLElBQVAsQ0FBWSxzQkFBWixDQUZOO0FBR0E7QUFDSixpQkFBSyxRQUFMO0FBQ0ksdUJBQU8sU0FBUCxDQUFpQixPQUFqQixDQUF5QixJQUF6QixDQUE4Qiw2QkFBOUI7QUFDQSx1QkFBTyxJQUFQLENBQVksSUFBWixHQUFtQixPQUFPLElBQVAsQ0FBWSxRQUFaLENBQW5CO0FBQ0E7QUFDSixpQkFBSyxTQUFMO0FBQ0ksdUJBQU8sU0FBUCxDQUFpQixPQUFqQixHQUEyQixLQUFLLGVBQUwsQ0FDdEIsSUFEc0IsQ0FDakIsT0FEaUIsRUFFdEIsS0FGc0IsQ0FFaEIsR0FGZ0IsQ0FBM0I7QUFHQSx1QkFBTyxJQUFQLENBQVksSUFBWixHQUFtQixLQUFLLGVBQUwsQ0FBcUIsSUFBckIsQ0FBMEIsU0FBMUIsRUFBcUMsSUFBckMsRUFBbkI7QUFDQTtBQTNDUjs7QUE4Q0EsZUFBTyxTQUFQLFlBQXlCLE9BQU8sU0FBUCxDQUFpQixPQUFqQixDQUF5QixJQUF6QixDQUE4QixHQUE5QixDQUF6Qjs7QUFFQSxlQUFPLE1BQVA7QUFDSDtBQXBGdUMsQ0FBckIsQ0FBdkI7O3FCQXVGZSxjOzs7Ozs7Ozs7OztBQ3pGZjs7Ozs7Ozs7Ozs7O0lBRXFCLGM7Ozs7OzRCQUNHO0FBQ2hCLG1CQUFPLEtBQUssUUFBTCxLQUFrQixTQUFsQixHQUE4QixFQUE5QixHQUFtQyxvQkFBMUM7QUFDSDs7OzRCQUVlO0FBQ1osZ0JBQU0sUUFBUSxLQUFLLEtBQUwsQ0FBVyxVQUFYLENBQXNCLEtBQXBDO0FBQ0EsbUJBQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGVBQWYsTUFBb0MsYUFBcEMsR0FDRCxPQUFPLElBQVAsQ0FBWSxvQkFBWixFQUFrQyxFQUFFLFlBQUYsRUFBbEMsQ0FEQyxHQUVELE9BQU8sSUFBUCxDQUFZLHlCQUFaLEVBQXVDLEVBQUUsWUFBRixFQUF2QyxDQUZOO0FBR0g7Ozs0QkFFZTtBQUNaLG1CQUFPLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxlQUFmLE1BQW9DLGFBQXBDLEdBQ0QsZ0JBREMsR0FFRCxzQkFGTjtBQUdIOzs7NEJBRVU7QUFDUCxnQkFBSSxLQUFLLElBQUwsS0FBYyxXQUFsQixFQUErQjtBQUMzQix1QkFBTyxFQUFQO0FBQ0g7QUFDRCxtQkFBTyxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZUFBZixNQUFvQyxhQUFwQyxHQUNELE9BQU8sSUFBUCxDQUFZLGVBQVosQ0FEQyxHQUVELE9BQU8sSUFBUCxDQUFZLG9CQUFaLENBRk47QUFHSDs7OzRCQUVRO0FBQ0wsZ0JBQU0sUUFBUSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZUFBZixNQUFvQyxhQUFsRDtBQUNBLGdCQUFJLEtBQUosRUFBVztBQUNQLHVCQUFPO0FBQ0gsNkJBQVMsS0FBSyxLQUFMLENBQVcsVUFBWCxDQUFzQixFQUQ1QjtBQUVILGdDQUFZLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsSUFBdEIsQ0FBMkI7QUFGcEMsaUJBQVA7QUFJSDtBQUNELG1CQUFPLElBQVA7QUFDSDs7O0FBRUQsa0NBQWdDO0FBQUEsWUFBbEIsSUFBa0IsUUFBbEIsSUFBa0I7QUFBQSxZQUFaLFFBQVksUUFBWixRQUFZOztBQUFBOztBQUFBLHFJQUNuQixTQURtQjs7QUFFNUIsY0FBSyxJQUFMLEdBQVksUUFBUSxXQUFwQjtBQUNBLGNBQUssUUFBTCxHQUFnQixZQUFZLFNBQTVCOztBQUVBLGNBQUssUUFBTCxDQUFjLE1BQUssS0FBbkIsRUFBMEIsc0JBQTFCLEVBQWtELE1BQUssTUFBdkQ7QUFDQSxjQUFLLElBQUwsR0FBWSxRQUFRLFdBQXBCO0FBTjRCO0FBTy9COzs7O2lDQUVRO0FBQ0wsbUJBQU8sRUFBRSxPQUFPLGNBQVQsRUFBUDtBQUNIOzs7aUNBRVE7QUFDTCxnQkFBSSxDQUFDLEtBQUssRUFBTixJQUFZLEtBQUssR0FBTCxDQUFTLE1BQVQsR0FBa0IsQ0FBbEMsRUFBcUM7QUFDakMsdUJBRGlDLENBQ3pCO0FBQ1g7O0FBRUQ7QUFDQSxnQkFBTSxlQUNGLEtBQUssRUFBTCxDQUFRLGFBQVIsQ0FBc0IsaUJBQXRCLE1BQTZDLFNBQVMsYUFEMUQ7O0FBR0EsaUJBQUssR0FBTCxDQUFTLEtBQVQ7O0FBRUEsZ0JBQU0sYUFBYSxpQ0FBdUI7QUFDdEMsb0JBQUksS0FBSyxFQUQ2QjtBQUV0QywrQkFBZSxLQUFLLGFBRmtCO0FBR3RDLDJCQUFXLEtBQUssU0FIc0I7QUFJdEMsMkJBQVcsS0FBSyxTQUpzQjtBQUt0QyxzQkFBTSxLQUFLLElBTDJCO0FBTXRDLHNDQUFzQixPQUFPLFNBQVAsQ0FBaUIsY0FBakIsR0FDaEIsRUFEZ0IsR0FFaEI7QUFSZ0MsYUFBdkIsQ0FBbkI7O0FBV0EsaUJBQUssR0FBTCxDQUFTLE1BQVQsQ0FBZ0IsVUFBaEI7O0FBRUEsZ0JBQUksWUFBSixFQUFrQjtBQUNkLHFCQUFLLEVBQUwsQ0FBUSxhQUFSLENBQXNCLGlCQUF0QixFQUF5QyxLQUF6QztBQUNIOztBQUVELG1CQUFPLElBQVA7QUFDSDs7O3VDQUVjO0FBQ1gsaUJBQUssS0FBTCxDQUFXLE9BQVgsQ0FBbUIsY0FBbkIsRUFBbUM7QUFDL0Isd0JBQVEsTUFEdUI7QUFFL0IsdUJBQU8sS0FBSztBQUZtQixhQUFuQztBQUlBLGdCQUFJLENBQUMsT0FBTyxTQUFQLENBQWlCLGNBQXRCLEVBQXNDO0FBQ2xDLHFCQUFLLFFBQUw7QUFDSDtBQUNKOzs7bUNBRVU7QUFDUCxpQkFBSyxHQUFMLENBQ0ssSUFETCxDQUNVLEdBRFYsRUFFSyxXQUZMLENBRWlCLDZCQUZqQixFQUdLLFFBSEwsQ0FHYyxvQkFIZDtBQUlIOzs7O0VBakd1QyxTQUFTLEk7O3FCQUFoQyxjOzs7Ozs7Ozs7Ozs7Ozs7SUNGZixtQjs7O0FBWUYsaUNBQVksTUFBWixFQUFvQjtBQUFBOztBQUFBLDhJQUNWLE1BRFU7O0FBQUEsY0FOcEIsUUFNb0IsR0FOVDtBQUNQLGtCQUFNLE9BQU8sU0FBUCxDQUFpQixjQUFqQixHQUNBLG9CQUFvQixPQUFwQixDQUE0QixJQUQ1QixHQUVBLG9CQUFvQixPQUFwQixDQUE0QjtBQUgzQixTQU1TOzs7QUFHaEIsWUFBSSxhQUFhLE9BQU8sU0FBUCxDQUFpQixjQUFqQixHQUNYLG9CQUFvQixPQUFwQixDQUE0QixJQURqQixHQUVYLG9CQUFvQixPQUFwQixDQUE0QixJQUZsQzs7QUFJQSxZQUFJLENBQUMsQ0FBQyxRQUFRLEdBQVIsQ0FBWSx1QkFBWixDQUFOLEVBQTRDO0FBQ3hDLHlCQUFhLFFBQVEsR0FBUixDQUFZLHVCQUFaLENBQWI7QUFDSCxTQUZELE1BRU87QUFDSCxvQkFBUSxHQUFSLENBQVksdUJBQVosRUFBcUMsVUFBckMsRUFBaUQ7QUFDN0MsMEJBQVUsS0FEbUM7QUFFN0MseUJBQVMsR0FGb0M7QUFHN0MsMEJBQVU7QUFIbUMsYUFBakQ7QUFLSDs7QUFFRCxjQUFLLEdBQUwsQ0FBUztBQUNMLGtCQUFNO0FBREQsU0FBVDs7QUFJQSxjQUFLLFFBQUwsUUFBb0IsYUFBcEIsRUFBbUMsVUFBQyxLQUFELEVBQVEsS0FBUixFQUFrQjtBQUNqRCxvQkFBUSxHQUFSLENBQVksdUJBQVosRUFBcUMsS0FBckMsRUFBNEM7QUFDeEMsMEJBQVUsS0FEOEI7QUFFeEMseUJBQVMsR0FGK0I7QUFHeEMsMEJBQVU7QUFIOEIsYUFBNUM7QUFLSCxTQU5EO0FBckJnQjtBQTRCbkI7OztFQXhDNkIsU0FBUyxLOztBQUFyQyxtQixDQUNLLE8sR0FBVTtBQUNiLFVBQU0sTUFETztBQUViLFVBQU07QUFGTyxDO3FCQTBDTixtQjs7Ozs7Ozs7Ozs7OztBQzNDZjs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7SUFFcUIsSzs7Ozs7bUNBS047QUFDUCxtQkFBTztBQUNILG9CQUFJLENBREQ7QUFFSCxrQ0FBa0IsSUFGZjtBQUdILHVCQUFPLE9BSEo7QUFJSCxnQ0FBZ0IsQ0FKYjtBQUtILHlCQUFTLEVBTE47QUFNSCx5QkFBUyxLQU5OO0FBT0gsNEJBQVksS0FQVDtBQVFILG1DQUFtQixLQVJoQjtBQVNILDZCQUFhLEtBVFY7QUFVSCw0QkFBWSxHQVZUO0FBV0gsZ0NBQWdCLENBWGI7QUFZSCxpQ0FBaUIsQ0FaZDtBQWFILDRCQUFZLENBYlQ7QUFjSCw0QkFBWSxDQWRUO0FBZUgsNkJBQWEsQ0FmVjtBQWdCSCxpQ0FBaUIsQ0FoQmQ7QUFpQkgscUNBQXFCLENBakJsQjtBQWtCSCx5Q0FBeUIsQ0FsQnRCO0FBbUJILHNDQUFzQixFQW5CbkI7QUFvQkgsa0NBQWtCLEVBcEJmO0FBcUJILDZCQUFhLEVBckJWO0FBc0JILHdCQUFRLEVBdEJMLEVBc0JTO0FBQ1osMkJBQVcsRUF2QlIsRUF1Qlk7QUFDZixzQkFBTSxFQUFFLElBQUksT0FBTixFQXhCSCxFQXdCb0I7QUFDdkIsd0JBQVEsRUF6QkwsRUF5QlM7QUFDWix1Q0FBdUIsQ0ExQnBCO0FBMkJILHlCQUFTO0FBQ0wsbUNBQWU7QUFEVixpQkEzQk47QUE4Qkg7QUFDQSw0QkFBWSxTQS9CVDtBQWdDSCwrQkFBZSxhQWhDWjtBQWlDSCw2QkFBYSxLQWpDVjtBQWtDSCxnQ0FBZ0IsSUFsQ2I7QUFtQ0gsMEJBQVUsS0FuQ1A7QUFvQ0gsZ0NBQWdCLEtBcENiO0FBcUNILDRCQUFZLEtBckNUO0FBc0NILHNDQUFzQjtBQXRDbkIsYUFBUDtBQXdDSDs7O21DQU1VLE8sRUFBUztBQUNoQixpQkFBSyxPQUFMLEdBQWUsT0FBZjtBQUNIOzs7NEJBckRpQjtBQUNkLG1CQUFPLElBQVA7QUFDSDs7OzRCQTZDbUI7QUFDaEIsbUJBQU8sS0FBSyxHQUFMLENBQVMsYUFBVCxDQUFQO0FBQ0g7OztBQU1ELG1CQUFZLEtBQVosRUFBbUIsT0FBbkIsRUFBNEIsT0FBNUIsRUFBcUM7QUFBQTs7QUFBQSxtQkFDWCxXQUFXLEVBREE7QUFBQSxZQUMzQixXQUQyQixRQUMzQixXQUQyQjs7QUFBQSxrSEFHM0IsS0FIMkIsRUFHcEIsT0FIb0I7O0FBS2pDLGNBQUssVUFBTCxDQUFnQixPQUFoQjs7QUFFQSxjQUFLLEdBQUwsQ0FDSSxFQUFFLE1BQUYsQ0FBUyxFQUFULEVBQWEsS0FBYixFQUFvQixFQUFFLFlBQVksTUFBSyxTQUFMLENBQWUsV0FBZixDQUFkLEVBQXBCLENBREo7QUFHQSxZQUFJLENBQUMsTUFBSyxhQUFWLEVBQXlCO0FBQ3JCLGtCQUFLLElBQUwsQ0FBVSxPQUFPLFlBQWpCO0FBQ0g7QUFaZ0M7QUFhcEM7Ozs7NkJBRUksRyxFQUFLO0FBQUE7O0FBQ047QUFDQSxnQkFBSSxLQUFLLEdBQVQsRUFBYztBQUNWLHFCQUFLLGFBQUwsQ0FBbUIsS0FBSyxHQUF4QixFQUE2QixjQUE3QjtBQUNBLHFCQUFLLEdBQUwsR0FBVyxJQUFYO0FBQ0g7O0FBRUQ7QUFDQSxnQkFBSSxHQUFKLEVBQVM7QUFDTCxxQkFBSyxHQUFMLEdBQVcsR0FBWDtBQUNBLHFCQUFLLFFBQUwsQ0FBYyxLQUFLLEdBQW5CLEVBQXdCLGNBQXhCLEVBQXdDLFVBQUMsVUFBRCxFQUFnQjtBQUNwRCwyQkFBSyxhQUFMLENBQW1CLFVBQW5CO0FBQ0gsaUJBRkQ7QUFHSDs7QUFFRCxtQkFBTyxJQUFQO0FBQ0g7OztzQ0FFYSxVLEVBQVk7QUFDdEIsZ0JBQUksZUFBZSxJQUFmLElBQXVCLFdBQVcsRUFBWCxLQUFrQixLQUFLLEVBQWxELEVBQXNEO0FBQ2xELGtIQUFVLFdBQVcsaUJBQVgsRUFBVjtBQUNIO0FBQ0o7Ozs4QkFFSztBQUNGLCtHQUFhLFNBQWI7QUFDQSxpQkFBSyxHQUFMLElBQVksS0FBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixjQUFqQixFQUFpQyxJQUFqQyxDQUFaO0FBQ0g7O0FBRUQ7Ozs7MENBNkVrQixXLEVBQTJCO0FBQUEsZ0JBQWQsT0FBYyx1RUFBSixFQUFJOztBQUN6QyxpQkFBSyxHQUFMLENBQ0k7QUFDSSw0QkFBWSxLQUFLLFNBQUwsQ0FBZSxXQUFmLENBRGhCO0FBRUksK0JBQWUsd0JBQVcsWUFBWCxDQUNYLEtBQUssVUFETSxFQUVYLFdBRlcsSUFJVCxnQkFKUyxHQUtULGFBUFY7QUFRSSxnQ0FBZ0Isd0JBQVcsVUFBWCxDQUNaLEtBQUssVUFETyxFQUVaLFdBRlksQ0FScEIsQ0FXTztBQVhQLGFBREosRUFjSSxPQWRKO0FBZ0JBLGdCQUFNLHNCQUFzQix3QkFBVyxrQkFBWCxDQUN4QixLQUFLLFVBRG1CLEVBRXhCLFdBRndCLENBQTVCO0FBSUEsaUJBQUssR0FBTCxDQUFTLGFBQVQsRUFBd0IsbUJBQXhCLEVBQTZDLFdBQVcsRUFBeEQ7O0FBRUEsZ0JBQU0saUJBQWlCLHdCQUFXLFVBQVgsQ0FDbkIsS0FBSyxVQURjLEVBRW5CLFdBRm1CLENBQXZCO0FBSUEsaUJBQUssR0FBTCxDQUFTLGdCQUFULEVBQTJCLGNBQTNCLEVBQTJDLFdBQVcsRUFBdEQsRUEzQnlDLENBMkJrQjtBQUM5RDs7O2lDQUVRLFcsRUFBYTtBQUNsQixnQkFBTSxTQUFTLEVBQUUsR0FBRixDQUFNLEtBQUssR0FBTCxDQUFTLFFBQVQsQ0FBTixFQUEwQixVQUFDLEtBQUQ7QUFBQSx1QkFBVyxLQUFYO0FBQUEsYUFBMUIsQ0FBZixDQURrQixDQUMwQztBQUM1RCxtQkFBTyw2Q0FBbUIsTUFBbkIsRUFBMkIsV0FBM0IsQ0FBUDtBQUNIOzs7b0NBRVcsVyxFQUFhO0FBQ3JCLGdCQUFNLFFBQVEsS0FBSyxRQUFMLENBQWMsV0FBZCxDQUFkO0FBQ0EsbUJBQVEsU0FBUyxNQUFNLElBQWhCLElBQXlCLDhCQUFZLHdCQUFaLENBQWhDO0FBQ0g7OztpREFFd0I7QUFDckIsbUJBQU8sRUFBRSxJQUFGLENBQU87QUFDVixxQkFBSyxPQUFPLEdBQVAsQ0FBVyxPQUFPLE1BQVAsQ0FBYyxtQkFBekIsRUFBOEMsRUFBRSxJQUFJLEtBQUssRUFBWCxFQUE5QyxDQURLO0FBRVYsc0JBQU0sS0FGSTtBQUdWLHlCQUFTO0FBSEMsYUFBUCxDQUFQO0FBS0g7Ozs0Q0FFbUIsUyxFQUFXO0FBQUE7O0FBQzNCLGdCQUFJLENBQUMsS0FBSyxlQUFWLEVBQTJCO0FBQ3ZCLHFCQUFLLGVBQUwsR0FBdUIsSUFBSSwyQkFBSixFQUF2QjtBQUNIO0FBQ0QsbUJBQU8sS0FBSyxlQUFMLENBQ0YsTUFERSxDQUNLLEVBQUUsU0FBUyxLQUFLLEdBQUwsQ0FBUyxJQUFULENBQVgsRUFETCxFQUVGLElBRkUsQ0FFRyxVQUFDLFFBQUQsRUFBYztBQUNoQix1QkFBSyxHQUFMLENBQVMsU0FBVCxFQUFvQixTQUFTLFNBQVQsQ0FBcEI7QUFDQSx1QkFBTyxRQUFRLE9BQVIsRUFBUDtBQUNILGFBTEUsQ0FBUDtBQU1IOzs7MkNBRWtCO0FBQ2YsZ0JBQUksU0FBUyxLQUFLLEdBQUwsQ0FBUyxZQUFULENBQWI7QUFDQSxnQkFBSSxtQkFBbUIsRUFBdkI7O0FBRUEsb0JBQVEsTUFBUjtBQUNJLHFCQUFLLGFBQUw7QUFDSSx1Q0FBbUIsT0FBTyxJQUFQLENBQVkseUJBQVosQ0FBbkI7QUFDQTtBQUNKLHFCQUFLLE1BQUw7QUFDSSx1Q0FBbUIsT0FBTyxJQUFQLENBQVksdUJBQVosQ0FBbkI7QUFDQTtBQUNKLHFCQUFLLFlBQVksU0FBakI7QUFDSSx1Q0FBbUIsT0FBTyxJQUFQLENBQVksdUJBQVosQ0FBbkI7QUFDQTtBQUNKLHFCQUFLLFVBQUw7QUFDQSxxQkFBSyxVQUFMO0FBQ0EscUJBQUssV0FBTDtBQUNBLHFCQUFLLFNBQUw7QUFDSSx1Q0FBbUIsT0FBTyxJQUFQLENBQVksVUFBWixDQUFuQjtBQUNBO0FBQ0oscUJBQUssTUFBTDtBQUNJLHdCQUFJLEtBQUssR0FBTCxDQUFTLG1CQUFULENBQUosRUFBbUM7QUFDL0IsMkNBQW1CLE9BQU8sSUFBUCxDQUFZLHdCQUFaLENBQW5CO0FBQ0E7QUFDSDs7QUFFRCx1Q0FBbUIsS0FBSyxHQUFMLENBQVMsbUJBQVQsSUFDYixPQUFPLElBQVAsQ0FBWSx3QkFBWixDQURhLEdBRWIsT0FBTyxJQUFQLENBQVksc0JBQVosQ0FGTjtBQUdBO0FBQ0oscUJBQUssUUFBTDtBQUNJLHVDQUFtQixPQUFPLElBQVAsQ0FBWSxRQUFaLENBQW5CO0FBQ0E7QUFDSixxQkFBSyxTQUFMO0FBQ0ksdUNBQW1CLE9BQU8sSUFBUCxDQUFZLFNBQVosQ0FBbkI7QUFDQTtBQS9CUjs7QUFrQ0EsbUJBQU8sZ0JBQVA7QUFDSDs7O2tDQUVTLFcsRUFBYTtBQUNuQixpQkFBSyxjQUFMLENBQW9CLFdBQXBCO0FBQ0EsbUJBQU8sd0JBQVcsUUFBWCxDQUFvQixLQUFLLFVBQXpCLEVBQXFDLFdBQXJDLENBQVA7QUFDSDs7O3VDQUVjLFcsRUFBYTtBQUN4QixpQkFBSyxHQUFMLENBQVM7QUFDTCwwQkFBVSxlQUFlLFlBQVksT0FBWixDQUFvQixPQUFwQixDQUE0QixLQUFLLEVBQWpDLElBQXVDLENBQUM7QUFENUQsYUFBVDtBQUdBLGlCQUFLLEdBQUwsQ0FBUztBQUNMLDRCQUNJLGVBQWUsWUFBWSxXQUFaLENBQXdCLE9BQXhCLENBQWdDLEtBQUssRUFBckMsSUFBMkMsQ0FBQztBQUYxRCxhQUFUO0FBSUg7Ozt3Q0FFZTtBQUNaLGdCQUFJLE9BQU8sS0FBSyxHQUFMLENBQVMsYUFBVCxFQUF3QixPQUF4QixDQUNQLDhCQURPLEVBRVAsR0FGTyxDQUFYO0FBSUEsbUJBQU8sWUFBVSxJQUFWLGFBQXdCLElBQXhCLEVBQVA7QUFDSDs7O3NDQUVhLE8sRUFBUyxPLEVBQVMsTSxFQUFRO0FBQUE7O0FBQ3BDLGNBQUUsSUFBRixDQUFPO0FBQ0gscUJBQUssT0FBTyxHQUFQLENBQVcsT0FBTyxNQUFQLENBQWMsV0FBekIsRUFBc0MsRUFBRSxJQUFJLE9BQU4sRUFBdEMsQ0FERjtBQUVILHNCQUFNLEtBRkg7QUFHSCx5QkFBUyxLQUhOO0FBSUgseUJBQVMsaUJBQUMsSUFBRCxFQUFVO0FBQ2YsMkJBQUssR0FBTCxDQUFTLElBQVQ7QUFDQSwyQkFBSyxHQUFMLENBQVMsWUFBVCxFQUF1QixPQUFLLFNBQUwsQ0FBZSxJQUFmLENBQXZCO0FBQ0E7QUFDSCxpQkFSRTtBQVNILHNCQUFNLGNBQUMsR0FBRCxFQUFTO0FBQ1gsMkJBQU8sR0FBUDtBQUNIO0FBWEUsYUFBUDtBQWFIOzs7NEJBdE55QjtBQUN0QixtQkFBTyxLQUFLLE9BQUwsSUFBZ0IsS0FBSyxPQUFMLENBQWEsb0JBQTdCLEdBQ0QsS0FBSyxPQUFMLENBQWEsb0JBQWIsQ0FBa0MsRUFEakMsR0FFRCxTQUZOO0FBR0g7Ozs0QkFFcUI7QUFDbEI7QUFDQSxnQkFBSSxRQUFRLEVBQUUsSUFBSSxLQUFLLEVBQVgsRUFBWjs7QUFFQSxnQkFBSSxLQUFLLG1CQUFULEVBQThCO0FBQzFCLHNCQUFNLEdBQU4sR0FBWSxLQUFLLG1CQUFqQjtBQUNIOztBQUVELG1CQUFPLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLE9BQXpCLEVBQWtDLEtBQWxDLENBQVA7QUFDSDs7OzRCQUV1QjtBQUNwQixtQkFDSSxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsVUFBaEMsS0FDQSxLQUFLLEdBQUwsQ0FBUyxxQkFBVCxJQUFrQyxDQUZ0QztBQUlIOzs7NEJBRTBCO0FBQ3ZCLG1CQUFPLEtBQUssaUJBQUwsSUFBMEIsS0FBSyxHQUFMLENBQVMsYUFBVCxNQUE0QixDQUE3RDtBQUNIOzs7NEJBRXdCO0FBQ3JCLG1CQUNJLEtBQUssMEJBQUwsSUFDQSxLQUFLLEdBQUwsQ0FBUyxpQkFBVCxNQUFnQyxDQURoQyxJQUVBLENBQUMsS0FBSyxHQUFMLENBQVMsZ0JBQVQsQ0FITDtBQUtIOzs7NEJBRWtCO0FBQ2YsbUJBQ0ksS0FBSyxHQUFMLENBQVMsWUFBVCxLQUNBLENBQUMsS0FBSyxHQUFMLENBQVMsVUFBVCxDQURELElBRUEsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLGVBQWhDLENBSEo7QUFLSDs7OzRCQUVpQjtBQUNkLG1CQUFPLEtBQUssR0FBTCxDQUFTLGFBQVQsS0FBMkIsS0FBSywwQkFBdkM7QUFDSDs7OzRCQUVnQztBQUM3QixtQkFDSSxLQUFLLGlCQUFMLElBQTBCLEtBQUssR0FBTCxDQUFTLHlCQUFULElBQXNDLENBRHBFO0FBR0g7Ozs0QkFFZTtBQUNaLG1CQUNJLEtBQUssR0FBTCxDQUFTLFNBQVQsTUFDQyxLQUFLLGdCQUFMLElBQXlCLEtBQUssbUJBRC9CLENBREo7QUFJSDs7OzRCQUVzQjtBQUNuQixtQkFDSSxLQUFLLEdBQUwsQ0FBUyxrQkFBVCxNQUFpQyxRQUFqQyxJQUNBLENBQUMsS0FBSyxHQUFMLENBQVMsbUJBQVQsQ0FERCxJQUVBLENBQUMsS0FBSyxHQUFMLENBQVMsYUFBVCxDQUhMO0FBS0g7Ozs0QkFFeUI7QUFDdEIsbUJBQ0ksS0FBSyxHQUFMLENBQVMsa0JBQVQsTUFBaUMsUUFBakMsSUFDQSxDQUFDLEtBQUssR0FBTCxDQUFTLGFBQVQsQ0FGTDtBQUlIOzs7NEJBOElnQjtBQUNiLG1CQUFPLEtBQUssR0FBTCxDQUFTLE1BQVQsRUFBaUIsRUFBakIsS0FBd0IsVUFBL0I7QUFDSDs7OztFQS9UOEIsU0FBUyxLOztxQkFBdkIsSzs7Ozs7Ozs7Ozs7QUNKckI7Ozs7Ozs7Ozs7OztJQUVxQixlOzs7Ozs7Ozs7Ozs0QkFDTDtBQUFFLG1CQUFPLGtCQUFQO0FBQWU7Ozs7RUFEWSxTQUFTLFU7O3FCQUFqQyxlOzs7Ozs7OztjQ0h5QixNO0lBQXRDLGMsV0FBQSxjO0lBQWdCLEksV0FBQSxJO0lBQU0sRyxXQUFBLEc7SUFBSyxNLFdBQUEsTTs7cUJBRXBCO0FBQUEsUUFDWCxPQURXLFFBQ1gsT0FEVztBQUFBLFFBRVgsb0JBRlcsUUFFWCxvQkFGVztBQUFBLFFBR1gsRUFIVyxRQUdYLEVBSFc7QUFBQSxRQUlYLEdBSlcsUUFJWCxHQUpXO0FBQUEsUUFLWCxNQUxXLFFBS1gsTUFMVztBQUFBLFFBTVgsS0FOVyxRQU1YLEtBTlc7QUFBQSxRQU9YLFNBUFcsUUFPWCxTQVBXO0FBQUEsUUFRWCxVQVJXLFFBUVgsVUFSVztBQUFBLFFBU1gsVUFUVyxRQVNYLFVBVFc7QUFBQSxRQVVYLGtCQVZXLFFBVVgsa0JBVlc7QUFBQSxRQVdYLGlCQVhXLFFBV1gsaUJBWFc7QUFBQSxRQVlYLGNBWlcsUUFZWCxjQVpXO0FBQUEsUUFhWCxlQWJXLFFBYVgsZUFiVztBQUFBLFFBY1gsZUFkVyxRQWNYLGVBZFc7QUFBQSxRQWVYLGdCQWZXLFFBZVgsZ0JBZlc7QUFBQSwrSEFrQnFFLEVBbEJyRSxnQ0FtQlEsS0FuQlIsZ0RBb0J3QixFQXBCeEIsU0FvQjhCLEdBcEI5Qix3Q0FxQmdCLFNBckJoQixxREFzQjZCLEVBdEI3QixnRUF3QlEsS0FBSyxpQkFBTCxFQUF3QixFQUFFLFlBQUYsRUFBeEIsQ0F4QlIsaUlBNkJZLEVBN0JaLFNBNkJrQixHQTdCbEIsNEtBK0JILENBQUMsQ0FBQyxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0Msc0JBQWhDLENBQUQsSUFDRyxPQURKLEtBRUEsZUFBZSxFQUZmLCtGQUtvQixVQUxwQix5QkFLa0QsRUFMbEQsc0JBS3FFLEtBTHJFLCtEQU0wQyxFQU4xQyxxQkFNNEQsTUFONUQsMkJBTXdGLGdCQU54RiwrRUFPMEQsS0FDbEQsbUJBRGtELEVBRWxELEVBQUUsUUFBUSxVQUFWLEVBQXNCLFlBQXRCLEVBRmtELENBUDFELGdDQVdVLFVBWFYsaURBY00sRUE3Q0gscUZBZ0RzQixJQUFJLE9BQU8sT0FBWCxFQUFvQjtBQUN6QztBQUR5QyxLQUFwQixDQWhEdEIsc0JBa0RnQixLQUFLLHVCQUFMLEVBQThCO0FBQ3pEO0FBRHlELEtBQTlCLENBbERoQixVQW9EUixLQUFLLGFBQUwsQ0FwRFEsc0NBdURILG1CQUFtQixvQkFBb0IsRUFBdkMsMEVBRXNELGVBRnRELFVBRTBFLEtBQ2hFLFlBRGdFLENBRjFFLGlCQUtNLEVBNURILG9CQStESCxvRkFDdUUsZUFEdkUseUJBQzBHLEVBRDFHLHFEQUM0SixrQkFENUosVUFDbUwsaUJBRG5MLG1CQS9ERyx1RUFtRStDLG9CQW5FL0Msc0JBbUVvRixLQUMvRixvQkFEK0YsRUFFL0YsRUFBRSxZQUFGLEVBRitGLENBbkVwRixVQXNFVCxLQUFLLGdCQUFMLENBdEVTO0FBQUEsQzs7Ozs7Ozs7O3FCQ0ZBO0FBQUEsUUFBRSxTQUFGLFFBQUUsU0FBRjtBQUFBLFFBQWEsZ0JBQWIsUUFBYSxnQkFBYjtBQUFBLFFBQStCLFdBQS9CLFFBQStCLFdBQS9CO0FBQUEsUUFBNEMsY0FBNUMsUUFBNEMsY0FBNUM7QUFBQSx3REFFVCxnSUFHWSxZQUFZLDZCQUFaLEdBQTRDLEVBSHhELDJCQUlZLGdCQUpaLDRDQU1RLENBQUMsV0FBRCxJQUFnQixjQUFoQixzREFFUSxjQUZSLCtDQUlFLEVBVlYsK0JBWUUsRUFkTyxnQkFlVCwyRkFHWSxZQUFZLDRCQUFaLEdBQTJDLEVBSHZELDJCQUlZLFdBSlosNENBTVEsb0VBRVEsY0FGUiwrQ0FJRSxFQVZWLCtCQVlFLEVBM0JPO0FBQUEsQzs7Ozs7Ozs7O3FCQ0FBO0FBQUEsUUFBRyxLQUFILFFBQUcsS0FBSDtBQUFBLFFBQVUsR0FBVixRQUFVLEdBQVY7QUFBQSxRQUFlLElBQWYsUUFBZSxJQUFmO0FBQUEsUUFBcUIsVUFBckIsUUFBcUIsVUFBckI7QUFBQSxRQUFpQyxhQUFqQyxRQUFpQyxhQUFqQztBQUFBLFFBQWdELE1BQWhELFFBQWdELE1BQWhEO0FBQUEsK0VBQzZDLFVBRDdDLDJCQUVBLElBRkEsbUVBSWEsSUFKYix1Q0FLYSxNQUFNLEVBTG5CLHVDQU1hLE1BQU0sS0FObkIsdUNBT2EsTUFBTSxJQUFOLENBQVcsRUFQeEIsaUZBVVcsTUFBTSxLQVZqQixXQVU0QixLQUFLLE1BQU0sSUFBTixDQUFXLEVBQWhCLENBVjVCLCtGQVl5QyxhQVp6QywrQkFhSSxHQWJKLHlCQWNELHdCQUFxQixNQUFyQixPQWRDLDZCQWVJLE1BQU0sS0FmVixXQWVxQixLQUFLLE1BQU0sSUFBTixDQUFXLEVBQWhCLENBZnJCLGtEQWdCd0IsVUFoQnhCO0FBQUEsQzs7Ozs7Ozs7O0FDQWY7O3FCQUVlO0FBQUEsUUFBRyxLQUFILFFBQUcsS0FBSDtBQUFBLFFBQVUsSUFBVixRQUFVLElBQVY7QUFBQSxRQUFnQixRQUFoQixRQUFnQixRQUFoQjtBQUFBLFFBQTBCLFVBQTFCLFFBQTBCLFVBQTFCO0FBQUEsUUFBc0MsV0FBdEMsUUFBc0MsV0FBdEM7QUFBQSxRQUFtRCxXQUFuRCxRQUFtRCxXQUFuRDtBQUFBLHFHQUVtQyxXQUFXLHNCQUFYLEdBQW9DLG9CQUZ2RSxzQkFHRixJQUhFLGlEQUtPLElBTFAsOEJBTU8sTUFBTSxFQU5iLDhCQU9PLE1BQU0sS0FQYiw4QkFRTyxNQUFNLElBQU4sQ0FBVyxFQVJsQix1Q0FTYyxXQUFXLDhCQUFYLEdBQTRDLHlDQVQxRCxXQVMwRyxNQUFNLEtBVGhILDRDQVVlLFdBQVcsRUFBWCxHQUFnQixjQVYvQixXQVVvRCxXQVZwRCxtRkFjWSxNQUFNLEtBZGxCLFdBYytCLEtBQUssTUFBTSxJQUFOLENBQVcsRUFBaEIsQ0FkL0IsOEdBaUJLLDhCQUFZLGVBQVosQ0FqQkwsNEJBa0JLLE1BQU0sS0FsQlgsV0FrQndCLEtBQUssTUFBTSxJQUFOLENBQVcsRUFBaEIsQ0FsQnhCO0FBQUEsQzs7Ozs7Ozs7O3FCQ0ZBO0FBQUEsUUFBRSxLQUFGLFFBQUUsS0FBRjtBQUFBLFFBQVMsUUFBVCxRQUFTLFFBQVQ7QUFBQSxRQUFtQixZQUFuQixRQUFtQixZQUFuQjtBQUFBLFFBQWlDLEtBQWpDLFFBQWlDLEtBQWpDO0FBQUEsUUFBd0MsR0FBeEMsUUFBd0MsR0FBeEM7QUFBQSxzQ0FDTSxLQUROLFNBQ2UsR0FEZixzREFDNkQsS0FEN0Qsd0JBQ21GLEtBRG5GLGtCQUNtRyxHQURuRyxrQ0FFTSxLQUZOLFNBRWUsR0FGZiwyQkFFc0MsS0FGdEMsNkRBRWdHLGVBQWUsWUFBZixHQUE4QixFQUY5SCxXQUVvSSxDQUFDLENBQUMsUUFBRixHQUFhLFFBQWIsR0FBd0IsRUFGNUo7QUFBQSxDOzs7Ozs7Ozs7cUJDQUE7QUFBQSxRQUFHLFdBQUgsUUFBRyxXQUFIO0FBQUEsNkRBQzZCLFdBRDdCO0FBQUEsQzs7Ozs7Ozs7O3FCQ0FBO0FBQUEsUUFBRSxNQUFGLFFBQUUsTUFBRjtBQUFBLG1CQUNiLHVGQUN1RSxNQUR2RSxjQUNzRixPQUFPLElBQVAsQ0FBWSxNQUFaLENBRHRGLGlCQUVFLEVBSFc7QUFBQSxDOzs7Ozs7Ozs7cUJDQUE7QUFBQSxRQUFHLE9BQUgsUUFBRyxPQUFIO0FBQUEsUUFBWSxLQUFaLFFBQVksS0FBWjtBQUFBLFFBQW1CLElBQW5CLFFBQW1CLElBQW5CO0FBQUEsUUFBeUIsU0FBekIsUUFBeUIsU0FBekI7QUFBQSw0QkFBd0QsS0FBeEQsZ0RBQXNHLE9BQXRHLDBEQUNjLElBRGQsc0NBQ2lELFNBRGpELHFCQUVKLEtBRkk7QUFBQSxDOzs7Ozs7Ozs7cUJDQUE7QUFBQSxNQUFFLElBQUYsUUFBRSxJQUFGO0FBQUEsNkNBQTRDLE9BQU8sSUFBUCxDQUFZLGlDQUFaLEVBQStDLEVBQUMsTUFBTSxJQUFQLEVBQS9DLENBQTVDO0FBQUEsQzs7Ozs7Ozs7O3FCQ0FBO0FBQUEsUUFBRSxFQUFGLFFBQUUsRUFBRjtBQUFBLFFBQU0sYUFBTixRQUFNLGFBQU47QUFBQSxRQUFxQixTQUFyQixRQUFxQixTQUFyQjtBQUFBLFFBQWdDLFNBQWhDLFFBQWdDLFNBQWhDO0FBQUEsUUFBMkMsSUFBM0MsUUFBMkMsSUFBM0M7QUFBQSxRQUFpRCxvQkFBakQsUUFBaUQsb0JBQWpEO0FBQUEsMkJBQ0wsb0RBQWtELEdBQUcsT0FBckQsdUJBQThFLEdBQUcsVUFBakYsR0FBZ0csRUFEM0YsaUNBRVMsYUFGVCx3Q0FJRCxTQUpDLDBCQUtDLFNBTEQsY0FLbUIsb0JBTG5CLHdDQU1ULHdEQUFzRCxJQUF0RCxlQUFzRSxFQU43RDtBQUFBLEM7Ozs7Ozs7Ozs7O0FDQWY7Ozs7Ozs7Ozs7OztBQUVBLElBQUksaUJBQWlCLE9BQU8sY0FBNUI7O0lBQ00sa0I7OztBQUNGLGtDQUFjO0FBQUE7O0FBQUEsNklBQ0QsU0FEQzs7QUFBQSxjQXdCZCxhQXhCYyxHQXdCRSxVQUFDLENBQUQ7QUFBQSxtQkFDWixDQUFDLEVBQUUsSUFBRixLQUFXLE9BQVgsSUFBc0IsRUFBRSxLQUFGLEtBQVksRUFBbEMsSUFBd0MsRUFBRSxLQUFGLEtBQVksRUFBckQsTUFDQyxFQUFFLGNBQUYsTUFBc0IsSUFEdkIsQ0FEWTtBQUFBLFNBeEJGOztBQUdWLFlBQUksTUFBSyxXQUFMLEtBQXFCLGtCQUF6QixFQUE2QztBQUN6QyxrQkFBTSxJQUFJLFNBQUosQ0FDRixvREFERSxDQUFOO0FBR0g7O0FBRUQsY0FBSyxRQUFMLENBQWMsTUFBSyxLQUFuQixFQUEwQixRQUExQixFQUFvQyxNQUFLLE1BQXpDOztBQUVBLGNBQUssR0FBTCxDQUFTLEVBQVQsQ0FBWSxnQkFBWixFQUE4QixVQUFDLENBQUQsRUFBTztBQUNqQyxnQkFBSSxNQUFLLGFBQUwsQ0FBbUIsQ0FBbkIsQ0FBSixFQUEyQjtBQUN2QixzQkFBSyxNQUFMO0FBQ0EsdUJBQU8sS0FBUDtBQUNIO0FBQ0QsbUJBQU8sSUFBUDtBQUNILFNBTkQ7QUFYVTtBQWtCYjs7OztpQ0FFUTtBQUNMLGlCQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsRUFBRSxNQUFNLEtBQUssSUFBYixFQUFmO0FBQ0g7OztpQ0FNUTtBQUNMLGdCQUFJLENBQUMsS0FBSyxJQUFOLElBQWMsQ0FBQyxLQUFLLFFBQXhCLEVBQWtDO0FBQzlCLHNCQUFNLElBQUksS0FBSixDQUFVLDBDQUFWLENBQU47QUFDSDs7QUFFRCxpQkFBSyxHQUFMLENBQVMsSUFBVCxDQUNJLEtBQUssUUFBTCxDQUFjO0FBQ1YsMEJBQVUsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE1BQWYsTUFBMkIsS0FBSztBQURoQyxhQUFkLENBREo7QUFLSDs7OztFQXZDNEIsU0FBUyxJOztJQTBDcEMsc0I7OztBQUNGLHNDQUFjO0FBQUE7O0FBQUEsc0pBQ0QsU0FEQzs7QUFFVixlQUFLLFFBQUwsR0FBZ0I7QUFBQSxnQkFBRyxRQUFILFFBQUcsUUFBSDtBQUFBLHlFQUN3QyxLQUNoRCxvQkFEZ0QsQ0FEeEMsNEZBS0EsQ0FBQyxRQUFELElBQWEsTUFMYjtBQUFBLFNBQWhCO0FBUUEsZUFBSyxJQUFMLEdBQVksaUNBQW9CLE9BQXBCLENBQTRCLElBQXhDO0FBVlU7QUFXYjs7O0VBWmdDLGtCOztJQWUvQixzQjs7O0FBQ0Ysc0NBQWM7QUFBQTs7QUFBQSxzSkFDRCxTQURDOztBQUVWLGVBQUssUUFBTCxHQUFnQjtBQUFBLGdCQUFHLFFBQUgsU0FBRyxRQUFIO0FBQUEseUVBQ3dDLEtBQ2hELG9CQURnRCxDQUR4QyxnR0FLSSxDQUFDLFFBQUQsSUFBYSxNQUxqQjtBQUFBLFNBQWhCO0FBUUEsZUFBSyxJQUFMLEdBQVksaUNBQW9CLE9BQXBCLENBQTRCLElBQXhDO0FBVlU7QUFXYjs7O0VBWmdDLGtCOztJQWUvQiwyQjs7O0FBT0YseUNBQVksT0FBWixFQUFxQjtBQUFBOztBQUFBLCtKQUNYLE9BRFc7O0FBQUEsZUFOckIsUUFNcUIsR0FOVjtBQUFBO0FBQUEsU0FNVTs7QUFHakIsZUFBSyxLQUFMLEdBQWEsSUFBSSxnQ0FBSixFQUFiOztBQUVBLGVBQUssR0FBTCxDQUFTLE9BQVQsQ0FBaUIsT0FBSyxRQUFMLEVBQWpCO0FBQ0EsWUFBSSxDQUFDLGVBQWUsU0FBZixDQUF5QixTQUF6QixDQUFMLEVBQTBDO0FBQ3RDLG1CQUFLLGNBQUwsR0FBc0IsSUFBSSxzQkFBSixDQUEyQjtBQUM3QyxvQkFBSSxPQUFLLENBQUwsQ0FBTyxpQkFBUCxDQUR5QztBQUU3Qyx1QkFBTyxPQUFLO0FBRmlDLGFBQTNCLEVBR25CLE1BSG1CLEVBQXRCO0FBSUEsbUJBQUssY0FBTCxHQUFzQixJQUFJLHNCQUFKLENBQTJCO0FBQzdDLG9CQUFJLE9BQUssQ0FBTCxDQUFPLGlCQUFQLENBRHlDO0FBRTdDLHVCQUFPLE9BQUs7QUFGaUMsYUFBM0IsRUFHbkIsTUFIbUIsRUFBdEI7QUFJSDtBQWZnQjtBQWdCcEI7OztFQXZCcUMsU0FBUyxJOztxQkEwQnBDLDJCOzs7OztBQ3JHZixJQUFNLFdBQVksT0FBTyxRQUF6Qjs7QUFFQSxJQUFNLG1CQUFtQixTQUFTLElBQVQsQ0FBYyxNQUFkLENBQXFCO0FBQzFDLGNBRDBDLHdCQUM3QjtBQUNULGFBQUssTUFBTDtBQUNILEtBSHlDO0FBSzFDLFlBTDBDLHNCQUsvQjtBQUNQLGtDQUNNLEtBQUssWUFBTCxFQUROLHNCQUVNLEtBQUssYUFBTCxFQUZOO0FBSUgsS0FWeUM7QUFZMUMsaUJBWjBDLDJCQVkxQjtBQUNaLFlBQUksS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGFBQWYsRUFBOEIsTUFBbEMsRUFBMEM7QUFDdEMsbURBQ2UsS0FBSyxLQUFMLENBQVcsZUFEMUIsa0dBRWMsT0FBTyxJQUFQLENBQVksZ0JBQVosQ0FGZDtBQUtIOztBQUVELGVBQU8sRUFBUDtBQUNILEtBdEJ5QztBQXdCMUMsZ0JBeEIwQywwQkF3QjNCO0FBQ1gsWUFBSSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsYUFBZixFQUE4QixNQUFsQyxFQUEwQztBQUN0QyxtQkFBTyxLQUFLLEtBQUwsQ0FBVyxhQUFYLEVBQVA7QUFDSDs7QUFFRCxlQUFPLE9BQU8sSUFBUCxDQUFZLDhCQUFaLENBQVA7QUFDSCxLQTlCeUM7QUFnQzFDLFVBaEMwQyxvQkFnQ2pDO0FBQ0wsYUFBSyxHQUFMLENBQVMsSUFBVCxDQUFjLEtBQUssUUFBTCxFQUFkO0FBQ0g7QUFsQ3lDLENBQXJCLENBQXpCOztBQXFDQSxPQUFPLE9BQVAsR0FBaUIsZ0JBQWpCOzs7Ozs7Ozs7Ozs7O0FDdkNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0lBRXFCLFM7Ozs7OzRCQUNEO0FBQ1osbUJBQU8sWUFBUDtBQUNIOzs7QUFFRCx5QkFBYztBQUFBOztBQUFBLDJIQUNELFNBREM7O0FBRVYsY0FBSyxNQUFMLEdBQWMsRUFBZDs7QUFFQSxjQUFLLE1BQUw7QUFKVTtBQUtiOzs7O2lDQUVRO0FBQ0wsaUJBQUssTUFBTCxDQUFZLE9BQVosQ0FBb0IsVUFBQyxJQUFEO0FBQUEsdUJBQVUsS0FBSyxNQUFMLEVBQVY7QUFBQSxhQUFwQjtBQUNBLGlCQUFLLE1BQUwsR0FBYyxFQUFkO0FBQ0g7OztpQ0FFUTtBQUNMLGlCQUFLLE1BQUw7QUFDQTtBQUNIOzs7aUNBRVE7QUFBQTs7QUFDTCxpQkFBSyxNQUFMOztBQUVBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxTQUFMLEdBQWlCLElBQUksc0JBQUosQ0FBYyxFQUFFLE9BQU8sS0FBSyxLQUFkLEVBQWQsQ0FEdEI7O0FBSUEsZ0JBQUksQ0FBQyxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsU0FBaEMsQ0FBTCxFQUFpRDtBQUM3QyxxQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssV0FBTCxHQUFtQixJQUFJLHdCQUFKLENBQWdCLEVBQUUsT0FBTyxLQUFLLEtBQWQsRUFBaEIsQ0FEeEI7QUFHQSxxQkFBSyxXQUFMLENBQWlCLEdBQWpCLENBQXFCLFFBQXJCLENBQThCLFlBQTlCO0FBQ0g7QUFDRCxnQkFBSSxLQUFLLEtBQUwsQ0FBVyxVQUFmLEVBQTJCO0FBQ3ZCLHFCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxZQUFMLEdBQW9CLElBQUkseUJBQUosQ0FBaUIsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFqQixDQUR6QjtBQUdILGFBSkQsTUFJTyxJQUFJLENBQUMsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLFNBQWhDLENBQUwsRUFBaUQ7QUFDcEQscUJBQUssTUFBTCxDQUFZLElBQVosQ0FDSyxLQUFLLFdBQUwsR0FBbUIsSUFBSSx3QkFBSixDQUFnQixFQUFFLE9BQU8sS0FBSyxLQUFkLEVBQWhCLENBRHhCO0FBR0g7O0FBRUQsaUJBQUssTUFBTCxDQUFZLElBQVosQ0FDSyxLQUFLLGdCQUFMLEdBQXdCLElBQUksNkJBQUosQ0FBcUI7QUFDMUMsd0JBQVEsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE1BQWYsRUFBdUI7QUFEVyxhQUFyQixDQUQ3Qjs7QUFNQSxpQkFBSyxHQUFMLENBQVMsS0FBVDtBQUNBLHlCQUFLLEdBQUwsRUFBUyxNQUFULGdDQUFtQixLQUFLLE1BQUwsQ0FBWSxHQUFaLENBQWdCLFVBQUMsSUFBRDtBQUFBLHVCQUFVLEtBQUssR0FBZjtBQUFBLGFBQWhCLENBQW5CO0FBQ0g7Ozs7RUFyRGtDLFNBQVMsSTs7cUJBQTNCLFM7Ozs7Ozs7Ozs7O0FDTnJCOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7Ozs7Ozs7Ozs7SUFFcUIsZTs7O0FBQ2pCLG1DQUF5QjtBQUFBLFlBQVosU0FBWSxRQUFaLFNBQVk7O0FBQUE7O0FBQUEsdUlBQ1osU0FEWTs7QUFFckIsY0FBSyxLQUFMLEdBQWEsTUFBSyxLQUFMLENBQVcsTUFBWCxFQUFiO0FBQ0EsY0FBSyxTQUFMLEdBQWlCLFNBQWpCO0FBQ0EsY0FBSyxRQUFMLENBQWMsTUFBSyxLQUFuQixFQUEwQixtQkFBMUIsRUFBK0MsTUFBSyxZQUFwRDtBQUNBLGNBQUssTUFBTDtBQUxxQjtBQU14Qjs7OztpQ0FFUTtBQUNMLG1CQUFPO0FBQ0gsbURBQW1DO0FBRGhDLGFBQVA7QUFHSDs7O2lDQUVRO0FBQ0wsaUJBQUssR0FBTCxDQUFTLEtBQVQ7QUFDQSxnQkFBRyxLQUFLLEtBQUwsQ0FBVyxvQkFBZCxFQUFtQztBQUMvQix1QkFBTyxJQUFQO0FBQ0g7O0FBRUQsZ0JBQUksS0FBSyxLQUFMLENBQVcsVUFBWCxLQUEwQixhQUE5QixFQUE2QztBQUN6QyxxQkFBSyxhQUFMO0FBQ0EsdUJBQU8sSUFBUDtBQUNILGFBSEQsTUFHTyxJQUFJLEtBQUssS0FBTCxDQUFXLGlCQUFmLEVBQWtDO0FBQ3JDLHFCQUFLLGFBQUw7QUFDQSx1QkFBTyxJQUFQO0FBQ0g7O0FBRUQsb0JBQVEsS0FBSyxLQUFMLENBQVcsZ0JBQW5CO0FBQ0kscUJBQUssUUFBTDtBQUNJLHlCQUFLLGFBQUw7QUFDQTtBQUNKLHFCQUFLLFFBQUw7QUFDSSx5QkFBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixrQ0FBd0I7QUFDcEMsbUNBQVcsS0FBSyxTQURvQjtBQUVwQywwQ0FBa0IsT0FBTyxJQUFQLENBQVksdUJBQVo7QUFGa0IscUJBQXhCLENBQWhCO0FBSUE7QUFDSixxQkFBSyxhQUFhLENBQUMsS0FBSyxLQUFMLENBQVcsV0FBOUI7QUFDSSx5QkFBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixrQ0FBd0I7QUFDcEMsbUNBQVcsS0FBSyxTQURvQjtBQUVwQywwQ0FBa0IsT0FBTyxJQUFQLENBQVksMkJBQVo7QUFGa0IscUJBQXhCLENBQWhCO0FBSUE7QUFmUjs7QUFrQkEsbUJBQU8sSUFBUDtBQUNIOzs7dUNBRWM7QUFDWCxnQkFBSSxDQUFDLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxtQkFBaEMsSUFBdUQsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFVBQWYsQ0FBdkQsR0FBb0YsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsTUFBaUMsUUFBdEgsTUFDSSxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsbUJBQWhDLElBQXVELEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLENBQXZELEdBQXNGLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLE1BQWlDLFVBRDNILENBQUosRUFDNEk7QUFDeEkscUJBQUssTUFBTDtBQUNIOztBQUVELGdCQUFHLEtBQUssS0FBTCxDQUFXLG9CQUFkLEVBQW1DO0FBQy9CLHFCQUFLLE1BQUw7QUFDSDtBQUNKOzs7d0NBRWU7QUFDWixnQkFBSSx5QkFBSjtBQUFBLGdCQUFzQixvQkFBdEI7QUFBQSxnQkFBbUMsdUJBQW5DOztBQUVBLGdCQUFNLGVBQWUsQ0FBQyxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsbUJBQWhDLElBQXVELEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxVQUFmLENBQXZELEdBQW9GLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLE1BQWlDLFFBQXRILElBQWtJLEVBQWxJLEdBQXVJLHlCQUE1Sjs7QUFFQSxnQkFBSSxLQUFLLEtBQUwsQ0FBVyxJQUFYLENBQWdCLEVBQWhCLEtBQXVCLGFBQXZCLElBQXdDLEtBQUssS0FBTCxDQUFXLGVBQVgsR0FBNkIsQ0FBckUsSUFBMEUsQ0FBQyxLQUFLLEtBQUwsQ0FBVyxXQUExRixFQUF1RztBQUNuRyxtQ0FBbUIsT0FBTyxJQUFQLENBQVksMkJBQVosQ0FBbkI7QUFDQSw2RkFFa0IsT0FBTyxJQUFQLENBQVksOEJBQVosQ0FGbEI7QUFPSCxhQVRELE1BU087O0FBRUgsb0JBQUksZ0JBQWdCO0FBQ2hCLHFDQUFpQixPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsVUFBaEMsSUFBOEMsS0FBSyxLQUFMLENBQVcsZUFBWCxHQUE2QixLQUFLLEtBQUwsQ0FBVyx1QkFBdEYsR0FBZ0gsS0FBSyxLQUFMLENBQVcsZUFENUg7QUFFaEIsaUNBQWEsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLFVBQWhDLElBQThDLEtBQUssS0FBTCxDQUFXLFdBQVgsR0FBeUIsS0FBSyxLQUFMLENBQVcsbUJBQWxGLEdBQXdHLEtBQUssS0FBTCxDQUFXO0FBRmhILGlCQUFwQjtBQUlBLG1DQUFtQixPQUFPLElBQVAsQ0FBWSx1QkFBWixFQUFxQyxhQUFyQyxDQUFuQjs7QUFFQSxvQkFBRyxLQUFLLEtBQUwsQ0FBVyxvQkFBWCxJQUFtQyxLQUFLLEtBQUwsQ0FBVyxVQUFYLEtBQTBCLGFBQWhFLEVBQThFO0FBQzFFLHVDQUFtQixPQUFPLElBQVAsQ0FBWSx1QkFBWixFQUFxQyxFQUFDLGlCQUFpQixDQUFsQixFQUFxQixhQUFhLEtBQUssS0FBTCxDQUFXLG1CQUE3QyxFQUFyQyxDQUFuQjtBQUNIOztBQUVELG9CQUFJLENBQUMsS0FBSyxLQUFMLENBQVcsV0FBWixJQUEyQixDQUFDLEtBQUssS0FBTCxDQUFXLDBCQUEzQyxFQUF1RTtBQUNuRSx3QkFBRyxDQUFDLEtBQUssS0FBTCxDQUFXLG9CQUFmLEVBQW9DO0FBQ2hDLDRCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxZQUFoQyxDQUFKLEVBQWtEO0FBQzlDLGdDQUFHLEtBQUssS0FBTCxDQUFXLE9BQWQsRUFBc0I7QUFDbEIsOENBQWMsSUFBSSw2QkFBSixDQUFzQixFQUFDLE9BQU8sS0FBSyxLQUFiLEVBQW9CLFdBQVcsT0FBTyxTQUFQLENBQWlCLFNBQWhELEVBQXRCLEVBQWtGLFlBQWhHO0FBQ0g7QUFDSix5QkFKRCxNQUtLLElBQUksQ0FBQyxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsWUFBZixDQUFMLEVBQW1DO0FBQ3BDLGdDQUFJLEtBQUssS0FBTCxDQUFXLFVBQWYsRUFBMkI7QUFDdkIsOENBQWMsT0FBTyxJQUFQLENBQVksc0JBQVosRUFBb0MsRUFBQyxZQUFZLEtBQUssS0FBTCxDQUFXLFVBQXhCLEVBQXBDLENBQWQ7QUFDSCw2QkFGRCxNQUVPLElBQUksS0FBSyxLQUFMLENBQVcsVUFBWCxLQUEwQixDQUE5QixFQUFpQztBQUNwQyw4Q0FBYyxPQUFPLElBQVAsQ0FBWSxlQUFaLENBQWQ7QUFDSDtBQUNKO0FBQ0o7QUFDRCxxQ0FBaUIsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLFlBQWhDLEtBQWlELENBQUMsS0FBSyxLQUFMLENBQVcsT0FBN0QsR0FDZixFQURlLHFEQUdJLEtBQUssS0FBTCxDQUFXLEVBSGYsMkNBSUMsT0FBTyxJQUFQLENBQVksNkJBQVosQ0FKRCw2RkFLbUQsWUFMbkQsNERBQWpCO0FBUUg7QUFDSjs7QUFFRCxpQkFBSyxHQUFMLENBQVMsTUFBVCxDQUFnQixrQ0FBd0I7QUFDcEMsMkJBQVcsS0FBSyxTQURvQjtBQUVwQyxrREFGb0M7QUFHcEMsd0NBSG9DO0FBSXBDO0FBSm9DLGFBQXhCLENBQWhCO0FBTUg7Ozt1Q0FFYztBQUFBOztBQUNYLGdCQUFJLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxZQUFoQyxDQUFKLEVBQWtEO0FBQzlDLG9CQUFLLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxtQkFBaEMsSUFBdUQsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFVBQWYsQ0FBdkQsR0FBb0YsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsTUFBaUMsUUFBMUgsRUFBcUk7QUFDakksMkJBQU8sSUFBUCxDQUFZLE9BQVosQ0FBb0IsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLElBQWYsQ0FBcEIsRUFBMEMsSUFBMUMsQ0FBK0MsVUFBQyxRQUFELEVBQWM7QUFBRTtBQUMzRCwrQkFBSyxLQUFMLENBQVcsR0FBWCxDQUFlO0FBQ1gsd0NBQVksU0FBUyxVQURWO0FBRVgsd0NBQVksU0FBUyxVQUZWO0FBR1gsOENBQWtCLFNBQVM7QUFIaEIseUJBQWY7QUFLQSwrQkFBSyxLQUFMLEdBQWEsSUFBSyxrQ0FBTCxDQUE0QixFQUFDLE9BQU8sT0FBSyxLQUFiLEVBQW9CLElBQUksT0FBSyxFQUE3QixFQUE1QixDQUFiO0FBQ0gscUJBUEQ7QUFRSCxpQkFURCxNQVVLO0FBQ0QseUJBQUssS0FBTCxHQUFhLElBQUksa0NBQUosQ0FBMkIsRUFBQyxPQUFPLEtBQUssS0FBYixFQUFvQixJQUFJLEtBQUssRUFBN0IsRUFBaUMsZUFBZSxJQUFoRCxFQUEzQixDQUFiO0FBQ0g7QUFDSixhQWRELE1BZUs7QUFDRCxvQkFBTSxhQUFhLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLENBQW5CO0FBQ0Esb0JBQU0sYUFBYSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsWUFBZixDQUFuQjtBQUNBLG9CQUFJLENBQUMsQ0FBQyxVQUFOLEVBQWtCO0FBQ2QseUJBQUssS0FBTCxHQUFhLElBQUksaUNBQUosQ0FBeUIsRUFBQyxPQUFPLEtBQUssS0FBYixFQUFvQixNQUFNLE9BQTFCLEVBQW1DLElBQUksS0FBSyxFQUE1QyxFQUF6QixDQUFiO0FBQ0gsaUJBRkQsTUFHSyxJQUFLLE9BQU8sY0FBUCxDQUFzQixTQUF0QixDQUFnQyxtQkFBaEMsSUFBdUQsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFVBQWYsQ0FBdkQsR0FBb0YsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsTUFBaUMsUUFBMUgsRUFBcUk7QUFDdEksMkJBQU8sSUFBUCxDQUFZLE9BQVosQ0FBb0IsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLElBQWYsQ0FBcEIsRUFBMEMsSUFBMUMsQ0FBK0MsVUFBQyxRQUFELEVBQWM7QUFBRTtBQUMzRCwrQkFBSyxLQUFMLENBQVcsR0FBWCxDQUFlO0FBQ1gsd0NBQVksU0FBUyxVQURWO0FBRVgsd0NBQVksU0FBUyxVQUZWO0FBR1gsOENBQWtCLFNBQVM7QUFIaEIseUJBQWY7QUFLQSwrQkFBSyxLQUFMLEdBQWEsSUFBSSxpQ0FBSixDQUF5QixFQUFDLE9BQU8sT0FBSyxLQUFiLEVBQW9CLE1BQU0saUJBQTFCLEVBQTZDLElBQUksT0FBSyxFQUF0RCxFQUF6QixDQUFiO0FBQ0gscUJBUEQ7QUFRSCxpQkFUSSxNQVVBO0FBQ0QseUJBQUssS0FBTCxHQUFhLElBQUksaUNBQUosQ0FBeUIsRUFBQyxPQUFPLEtBQUssS0FBYixFQUFvQixNQUFNLE9BQTFCLEVBQW1DLElBQUksS0FBSyxFQUE1QyxFQUF6QixDQUFiO0FBQ0g7QUFDSjtBQUNKOzs7O0VBN0p3QyxTQUFTLEk7O3FCQUFqQyxlOzs7Ozs7Ozs7Ozs7O0FDTnJCOzs7Ozs7Ozs7Ozs7Y0FDMkIsTTtJQUFuQixjLFdBQUEsYzs7SUFFYSxVOzs7OztpQ0FDUjtBQUNMLG1CQUFPO0FBQ0gsOEJBQWM7QUFEWCxhQUFQO0FBR0g7OztpQ0FFUTtBQUNMLGlCQUFLLE1BQUwsQ0FBWSxPQUFaLENBQW9CLFVBQUMsSUFBRDtBQUFBLHVCQUFVLEtBQUssTUFBTCxFQUFWO0FBQUEsYUFBcEI7QUFDQTtBQUNIOzs7NEJBRWU7QUFDWixtQkFBTyxDQUFDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixDQUFSO0FBQ0g7OztBQUVELDBCQUFjO0FBQUE7O0FBQUEsNkhBQ0QsU0FEQzs7QUFFVixjQUFLLE1BQUwsR0FBYyxFQUFkO0FBQ0EsY0FBSyxXQUFMLEdBQW1CLENBQW5CO0FBQ0EsY0FBSyxHQUFMLENBQVMsUUFBVCxDQUFrQixvQ0FBbEI7O0FBRUEsY0FBSyxHQUFMLEdBQVcsS0FBSyxNQUFMLEdBQWMsUUFBZCxDQUF1QixFQUF2QixFQUEyQixTQUEzQixDQUFxQyxDQUFyQyxDQUFYOztBQUVBO0FBQ0EsY0FBSyxRQUFMLENBQWMsTUFBSyxLQUFuQixFQUEwQix1QkFBMUIsRUFBbUQsVUFBQyxLQUFELEVBQVc7QUFDMUQsa0JBQUssTUFBTDtBQUNILFNBRkQ7QUFUVTtBQVliOzs7O2lDQUVRO0FBQUE7O0FBQ0wsZ0JBQUcsQ0FBQyxLQUFLLFNBQVQsRUFBb0I7QUFDaEIsdUJBQU8sSUFBUDtBQUNIOztBQUVELGdCQUFJLGVBQWUsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFlBQWYsS0FBZ0MsQ0FBbkQ7QUFDQSxpQkFBSyxHQUFMLENBQVMsSUFBVCxDQUFjLG9CQUFkLEVBQW9DLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLENBQXBDO0FBQ0EsaUJBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxlQUFkLEVBQStCLEtBQUssS0FBTCxDQUFXLEVBQTFDOztBQUVBLGlCQUFLLE1BQUwsQ0FBWSxPQUFaLENBQW9CLFVBQUMsSUFBRDtBQUFBLHVCQUFVLEtBQUssTUFBTCxFQUFWO0FBQUEsYUFBcEI7QUFDQSxpQkFBSyxNQUFMLENBQVksTUFBWixHQUFxQixDQUFyQjs7QUFFQSxnQkFBSSxNQUFNLElBQVY7QUFDQSxjQUFFLElBQUYsQ0FBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsRUFBYSxDQUFiLEVBQWdCLENBQWhCLENBQVAsRUFBMkIsVUFBQyxLQUFELEVBQVc7QUFDbEMsb0JBQUksV0FBVztBQUNYLDJCQUFPLEtBREk7QUFFWCxrQ0FBYyxZQUZIO0FBR1gseUJBQUssT0FBSztBQUhDLGlCQUFmO0FBS0Esb0JBQUksV0FBVyxJQUFJLHFCQUFKLENBQWEsUUFBYixDQUFmOztBQUVBLG9CQUFJLENBQUMsZUFBZSxTQUFmLENBQXlCLGdCQUF6QixDQUFMLEVBQWdEO0FBQzVDLDZCQUFTLEVBQVQsQ0FBWSxNQUFaLEVBQW9CLFVBQUMsU0FBRCxFQUFlO0FBQy9CLDRCQUFJLFlBQUosQ0FBaUIsU0FBakI7QUFDSCxxQkFGRDtBQUdBLDZCQUFTLEVBQVQsQ0FBWSxPQUFaLEVBQXFCLFVBQUMsU0FBRCxFQUFlO0FBQ2hDLDRCQUFJLGFBQUosQ0FBa0IsU0FBbEI7QUFDSCxxQkFGRDtBQUdIOztBQUVELHVCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQWlCLFFBQWpCO0FBQ0gsYUFsQkQ7O0FBb0JBLGlCQUFLLEdBQUwsQ0FBUyxLQUFUO0FBQ0EsaUJBQUssTUFBTCxDQUFZLE9BQVosQ0FBb0IsVUFBQyxJQUFELEVBQVU7QUFDMUIscUJBQUssTUFBTDtBQUNBLHVCQUFLLEdBQUwsQ0FBUyxNQUFULENBQWdCLEtBQUssR0FBckI7QUFDSCxhQUhEO0FBSUEsaUJBQUssTUFBTDs7QUFFQSxtQkFBTyxJQUFQO0FBQ0g7OzttQ0FFVyxZLEVBQWM7QUFDdEIsbUJBQU8sZUFBZSxDQUFmLElBQW9CLElBQXBCLElBQTRCLGVBQWUsQ0FBZixHQUFtQixJQUF0RDtBQUNIOzs7aUNBRVE7QUFBQTs7QUFDTCxnQkFBSSxDQUFDLEtBQUssU0FBVixFQUFxQjtBQUNqQix1QkFBTyxJQUFQO0FBQ0g7O0FBRUQsZ0JBQUksZUFBZSxDQUFDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxnQkFBZixJQUFtQyxDQUFuQyxJQUF3QyxLQUFLLFdBQTlDLElBQTZELENBQWhGO0FBQ0EsaUJBQUssR0FBTCxDQUFTLFdBQVQsQ0FBcUIsYUFBckIsRUFBb0MsWUFBcEM7QUFDQSxnQkFBSSxlQUFlLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxZQUFmLEtBQWdDLENBQW5EOztBQUVBLGNBQUUsSUFBRixDQUFPLEtBQUssTUFBWixFQUFvQixVQUFDLFFBQUQsRUFBYzs7QUFFOUIsb0JBQUksWUFBSixFQUFpQjtBQUNiLDZCQUFTLFNBQVQsQ0FBbUIsU0FBUyxLQUFULEtBQW1CLE9BQUssV0FBTCxJQUFvQixPQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZ0JBQWYsQ0FBdkMsQ0FBbkI7QUFDSCxpQkFGRCxNQUVPLElBQUksU0FBUyxLQUFULEdBQWlCLFlBQXJCLEVBQW1DO0FBQ3RDLDZCQUFTLFNBQVQsQ0FBbUIsSUFBbkI7QUFDSCxpQkFGTSxNQUVBLElBQUksU0FBUyxLQUFULEdBQWlCLENBQWpCLEdBQXFCLFlBQXpCLEVBQXVDO0FBQzFDLDZCQUFTLFNBQVQsQ0FBbUIsS0FBbkI7QUFDSCxpQkFGTSxNQUVBO0FBQ0gsNkJBQVMsU0FBVCxDQUFtQixTQUFTLEtBQVQsR0FBaUIsSUFBakIsR0FBd0IsWUFBM0MsRUFBeUQsT0FBSyxVQUFMLENBQWdCLFlBQWhCLENBQXpEO0FBQ0g7QUFDRCx5QkFBUyxHQUFULENBQWEsUUFBYixDQUFzQixZQUF0QixFQUFvQyxJQUFwQyxDQUF5QyxTQUF6QyxFQUFvRCxTQUFTLEtBQVQsS0FBbUIsT0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGdCQUFmLENBQXZFO0FBQ0gsYUFaRDs7QUFjQSxtQkFBTyxJQUFQO0FBQ0g7OztxQ0FFWSxTLEVBQVc7QUFDcEIsZ0JBQUksZ0JBQWdCLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxnQkFBZixDQUFwQjtBQUNBLGdCQUFJLGNBQWMsYUFBbEIsRUFBaUM7QUFDN0IscUJBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxnQkFBZixFQUFpQyxDQUFqQztBQUNBLHFCQUFLLGVBQUw7QUFDSCxhQUhELE1BSUs7QUFDRCxxQkFBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGdCQUFmLEVBQWlDLFNBQWpDO0FBQ0g7QUFDRCxpQkFBSyxLQUFMLENBQVcsT0FBWCxDQUFtQixjQUFuQixFQUFtQyxFQUFFLFFBQVEsUUFBVixFQUFvQixPQUFPLEtBQUssS0FBaEMsRUFBbkM7QUFDSDs7O3NDQUVhLFMsRUFBVztBQUNyQixpQkFBSyxXQUFMLEdBQW1CLFNBQW5CO0FBQ0EsaUJBQUssTUFBTDtBQUNIOzs7MENBRWlCO0FBQ2QsaUJBQUssV0FBTCxHQUFtQixDQUFuQjtBQUNBLGlCQUFLLE1BQUw7QUFDSDs7OztFQTNIbUMsU0FBUyxJOztxQkFBNUIsVTs7Ozs7Ozs7Ozs7QUNIckI7Ozs7Ozs7Ozs7OztJQUVxQixROzs7QUFHakIsNEJBQTBEO0FBQUEsWUFBN0MsS0FBNkMsUUFBN0MsS0FBNkM7QUFBQSxpQ0FBdEMsUUFBc0M7QUFBQSxZQUF0QyxRQUFzQyxpQ0FBM0IsS0FBMkI7QUFBQSxZQUFwQixZQUFvQixRQUFwQixZQUFvQjtBQUFBLFlBQU4sR0FBTSxRQUFOLEdBQU07O0FBQUE7O0FBQUEseUhBQzdDLFNBRDZDOztBQUFBLGNBRjFELFFBRTBELEdBRi9DLDZCQUUrQzs7O0FBR3RELGNBQUssS0FBTCxHQUFhLEtBQWI7QUFDQSxjQUFLLFFBQUwsR0FBZ0IsUUFBaEI7QUFDQSxjQUFLLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxjQUFLLEtBQUwsR0FBYSxPQUFPLElBQVAsQ0FBWSwyQkFBWixFQUF5QyxFQUFDLGVBQWUsTUFBSyxLQUFyQixFQUF6QyxDQUFiO0FBQ0EsY0FBSyxZQUFMLEdBQW9CLFlBQXBCO0FBQ0EsY0FBSyxHQUFMLEdBQVcsR0FBWDtBQUNBLGNBQUssR0FBTCxDQUFTLFFBQVQsQ0FBa0IsZ0JBQWxCO0FBVHNEO0FBVXpEOzs7O2lDQUVRO0FBQ0wsbUJBQU87QUFDSCwwQkFBVSxZQURQO0FBRUgsd0NBQXdCLFNBRnJCO0FBR0gsb0NBQW9CLFlBSGpCO0FBSUgsbUNBQW9CLGFBSmpCO0FBS0gsb0NBQXFCO0FBTGxCLGFBQVA7QUFPSDs7O2tDQUVTLFEsRUFBOEI7QUFBQSxnQkFBcEIsVUFBb0IsdUVBQVAsS0FBTzs7QUFDcEMsZ0JBQUksVUFBSixFQUFlO0FBQ1gscUJBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxZQUFkLEVBQTRCLFdBQTVCLENBQXdDLFFBQXhDO0FBQ0EscUJBQUssUUFBTCxHQUFnQixLQUFoQjs7QUFFQSxxQkFBSyxZQUFMLEdBQW9CLFFBQXBCO0FBQ0EscUJBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxZQUFkLEVBQTRCLFdBQTVCLENBQXdDLFlBQXhDLEVBQXNELFFBQXREO0FBQ0gsYUFORCxNQU1PO0FBQ0gscUJBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxZQUFkLEVBQTRCLFdBQTVCLENBQXdDLFlBQXhDO0FBQ0EscUJBQUssWUFBTCxHQUFvQixLQUFwQjs7QUFFQSxxQkFBSyxRQUFMLEdBQWdCLFFBQWhCO0FBQ0EscUJBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxZQUFkLEVBQTRCLFdBQTVCLENBQXdDLFFBQXhDLEVBQWtELFFBQWxEO0FBQ0g7QUFDSjs7O3FDQUVZO0FBQ1QsaUJBQUssT0FBTCxDQUFhLE1BQWIsRUFBcUIsS0FBSyxLQUExQjtBQUNBLG1CQUFPLEtBQVA7QUFDSDs7O2tDQUVTO0FBQ04saUJBQUssT0FBTCxDQUFhLE9BQWIsRUFBc0IsS0FBSyxLQUEzQjtBQUNIOztBQUVEOzs7O3NDQUNjO0FBQ1YsaUJBQUssR0FBTCxDQUFTLE1BQVQsR0FBa0IsV0FBbEIsQ0FBOEIsYUFBOUI7QUFDSDs7O2lDQUVRO0FBQ0wsZ0JBQUksS0FBSyxLQUFMLEdBQWEsQ0FBakIsRUFBb0I7QUFDaEIscUJBQUssR0FBTCxDQUFTLEtBQVQsR0FBaUIsTUFBakIsQ0FBd0IsS0FBSyxRQUFMLENBQWMsSUFBZCxDQUF4QjtBQUNILGFBRkQsTUFHSztBQUNELG9CQUFJLHlDQUNxQixLQUFLLEdBRDFCLHdFQUN3RixLQUFLLEdBRDdGLHdCQUNpSCxPQUFPLElBQVAsQ0FBWSx1QkFBWixFQUFxQyxFQUFDLFFBQVEsS0FBSyxZQUFkLEVBQXJDLENBRGpILFNBQUo7QUFFQSxxQkFBSyxHQUFMLENBQVMsS0FBVCxHQUFpQixNQUFqQixDQUF3QixjQUF4QjtBQUNIO0FBQ0o7Ozs7RUFoRWlDLFNBQVMsSTs7cUJBQTFCLFE7Ozs7Ozs7O0FDRnJCLElBQU0sUUFBQSxHQUFZLE1BQUEsQ0FBTyxRQUF6QixDQUFBO0FBQ0EsSUFBTSxjQUFBLEdBQXdCLE1BQUEsQ0FBTyxjQUFyQyxDQUFBOztBQUVBO0FBQ0EsSUFBTSxJQUFBLEdBQU8sT0FBQSxDQUFRLE1BQVIsQ0FBYixDQUFBO0FBQ0EsSUFBTSxtQkFBQSxHQUFzQiwrSEFBNUIsQ0FBQTs7QUFFQSxJQUFNLFdBQUEsR0FBYyxRQUFBLENBQVMsSUFBVCxDQUFjLE1BQWQsQ0FBcUI7SUFDckMsUUFBQSxFQUFVLENBQUEsQ0FBRSxRQUFGLENBQVcsbUJBQVgsQ0FEMkI7O0lBR3JDLFNBQUEsRUFBVyxjQUgwQjs7SUFLckMsT0FBQSxFQUFTLEdBTDRCOztJQU9yQyxVQVBxQyxFQUFBLFNBQUEsVUFBQSxHQU94QjtRQUNULElBQUksSUFBQSxDQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsTUFBZixDQUFBLENBQXVCLEVBQXZCLEtBQThCLGFBQWxDLEVBQWlEO1lBQzdDLElBQUEsQ0FBSyxNQUFMLEVBQUEsQ0FBQTtTQUNIO0tBVmdDO0lBYXJDLE1BYnFDLEVBQUEsU0FBQSxNQUFBLEdBYTVCO1FBQ0wsSUFBSSxLQUFBLEdBQVEsSUFBQSxDQUFLLEtBQUwsQ0FBVyxNQUFYLEVBQVosQ0FBQTs7UUFFQSxJQUFJLEtBQUEsQ0FBTSxnQkFBTixJQUEwQixJQUExQixJQUFrQyxDQUFDLENBQUEsQ0FBRSxPQUFGLENBQVUsS0FBQSxDQUFNLGdCQUFoQixDQUF2QyxFQUEwRTtZQUN0RSxJQUFJLFdBQUEsR0FBYyxjQUFBLENBQWUsU0FBZixDQUF5QixtQkFBekIsQ0FBQSxHQUFnRCxLQUFBLENBQU0sZ0JBQXRELEdBQXlFLENBQUEsQ0FBRSxNQUFGLENBQVMsS0FBQSxDQUFNLGdCQUFmLENBQTNGLENBQUE7O1lBRUEsSUFBTSxRQUFBLEdBQVc7Z0JBQ2IsSUFBQSxFQUFjLE1BQUEsQ0FBTyxHQUFQLENBQVcsTUFBQSxDQUFPLE1BQVAsQ0FBYyxZQUF6QixFQUF1QyxFQUFFLElBQUEsRUFBTSxXQUFSLEVBQXFCLEtBQUEsRUFBTyxLQUFBLENBQU0sY0FBbEMsRUFBa0QsTUFBQSxFQUFRLFlBQTFELEVBQXZDLENBREQ7Z0JBRWIsS0FBQSxFQUFjLE1BQUEsQ0FBTyxJQUFQLENBQVksc0JBQVosRUFBb0MsRUFBRSxNQUFBLEVBQVEsV0FBVixFQUFwQyxDQUZEO2dCQUdiLElBQUEsRUFBYyxXQUFBO2FBSGxCLENBQUE7O1lBTUEsSUFBQSxDQUFLLEdBQUwsQ0FBUyxJQUFULENBQWMsTUFBQSxDQUFPLElBQVAsQ0FBWSxRQUFaLEVBQXNCLEVBQUUsT0FBQSxFQUFTLElBQUEsQ0FBSyxRQUFMLENBQWMsUUFBZCxDQUFYLEVBQXRCLENBQWQsQ0FBQSxDQUFBO1NBVEosTUFVSztZQUNELElBQUcsQ0FBQyxjQUFBLENBQWUsU0FBZixDQUF5QixlQUF6QixDQUFKLEVBQThDO2dCQUMxQyxJQUFBLENBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxNQUFBLENBQU8sSUFBUCxDQUFZLHlCQUFaLENBQWQsQ0FBQSxDQUFBO2FBQ0g7U0FDSjtLQUNKO0NBL0JlLENBQXBCLENBQUE7O3FCQW1DZTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDekNNLFk7OztBQUNqQiw0QkFBYztBQUFBOztBQUFBLGlJQUNELFNBREM7O0FBRVYsY0FBSyxNQUFMO0FBRlU7QUFHYjs7OztpQ0FFUTtBQUNMLGdCQUFJLE9BQU8sa0NBQWdDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxTQUFmLENBQWhDLFlBQVg7QUFDQSxpQkFBSyxVQUFMLENBQWdCLElBQWhCO0FBQ0g7Ozs7RUFUcUMsU0FBUyxJOztxQkFBOUIsWTs7Ozs7Ozs7O0FDRHJCOzs7Ozs7QUFFQSxJQUFNLG1CQUFtQixTQUFTLElBQVQsQ0FBYyxNQUFkLENBQXFCO0FBQzFDLGNBRDBDLDRCQUNyQjtBQUFBLFlBQVQsTUFBUyxRQUFULE1BQVM7O0FBQ2pCLGFBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxhQUFLLE1BQUw7QUFDSCxLQUp5QztBQU0xQyxVQU4wQyxvQkFNakM7QUFDTCxhQUFLLFVBQUwsQ0FBZ0IsRUFBRSxtQ0FBeUIsRUFBQyxRQUFRLEtBQUssTUFBZCxFQUF6QixDQUFGLENBQWhCO0FBQ0g7QUFSeUMsQ0FBckIsQ0FBekI7O3FCQVdlLGdCOzs7Ozs7Ozs7OztBQ2JmOzs7Ozs7Ozs7Ozs7SUFFcUIsUzs7O0FBQ2pCLHlCQUFjO0FBQUE7O0FBQUEsMkhBQ0QsU0FEQzs7QUFHVixjQUFLLFFBQUwsR0FBZ0Isc0JBQWhCO0FBQ0EsY0FBSyxNQUFMO0FBSlU7QUFLYjs7Ozt5Q0FFZ0I7QUFDYixnQkFBSSxhQUFhLEVBQWpCOztBQUVBLHVCQUFXLElBQVgsQ0FBZ0IsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE9BQWYsQ0FBaEI7O0FBRUEsZ0JBQUksQ0FBQyxDQUFDLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxrQkFBZixDQUFOLEVBQTBDO0FBQ3RDLDJCQUFXLElBQVgsQ0FBZ0IsT0FBTyxJQUFQLENBQVksUUFBWixFQUFzQixFQUFDLFNBQVMsS0FBSyxLQUFMLENBQVcsVUFBWCxHQUF3QixLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsV0FBZixFQUE0QixJQUFwRCxHQUEyRCxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsa0JBQWYsQ0FBckUsRUFBdEIsQ0FBaEI7QUFDSDs7QUFFRCx1QkFBVyxJQUFYLENBQWdCLEtBQUssS0FBTCxDQUFXLGdCQUFYLEVBQWhCOztBQUVBLHVCQUFXLElBQVgsQ0FBZ0IsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE1BQWYsRUFBdUIsSUFBdkM7O0FBRUEsbUJBQU8sV0FBVyxJQUFYLENBQWdCLEdBQWhCLENBQVA7QUFDSDs7O2lDQUVRO0FBQ0wsZ0JBQU0sV0FBVztBQUNiLHlCQUFZLEtBQUssS0FBTCxDQUFXLEVBRFY7QUFFYixzQkFBWSxLQUFLLEtBQUwsQ0FBVyxlQUZWO0FBR2IsMkJBQVksRUFBRSxNQUFGLENBQVMsS0FBSyxjQUFMLEVBQVQsQ0FIQztBQUliLHVCQUFZLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxPQUFmO0FBSkMsYUFBakI7O0FBT0EsaUJBQUssVUFBTCxDQUFnQixFQUFFLEtBQUssUUFBTCxDQUFjLFFBQWQsQ0FBRixDQUFoQjtBQUNIOzs7O0VBakNrQyxTQUFTLEk7O3FCQUEzQixTOzs7Ozs7Ozs7OztBQ0ZyQjs7Ozs7Ozs7Ozs7O0lBRXFCLGU7OztBQUdqQiwrQkFBYztBQUFBOztBQUFBLHVJQUNELFNBREM7O0FBQUEsY0FGZCxRQUVjLEdBRkgsNEJBRUc7OztBQUdWLFlBQUcsQ0FBQyxDQUFDLE1BQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxtQkFBZixDQUFMLEVBQTBDO0FBQ3RDLGtCQUFLLE1BQUw7QUFDSDtBQUxTO0FBTWI7Ozs7aUNBRVE7QUFDTCxpQkFBSyxVQUFMLENBQWdCLEVBQUUsS0FBSyxRQUFMLENBQWMsRUFBQyxNQUFNLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxzQkFBZixDQUFQLEVBQWQsQ0FBRixDQUFoQjtBQUNIOzs7O0VBYndDLFNBQVMsSTs7cUJBQWpDLGU7Ozs7O0FDRnJCLElBQU0sV0FBd0IsT0FBTyxRQUFyQztBQUNBLElBQU0sTUFBd0IsT0FBTyxHQUFyQztBQUNBLElBQU0sU0FBd0IsT0FBTyxNQUFyQztBQUNBLElBQU0sYUFBd0IsT0FBTyxJQUFyQztBQUNBLElBQU0saUJBQXdCLE9BQU8sY0FBckM7O0FBRUEsSUFBTSxjQUFjLFNBQVMsSUFBVCxDQUFjLE1BQWQsQ0FBcUI7QUFFckMsY0FGcUMsNEJBRVY7QUFBQSxZQUFmLFlBQWUsUUFBZixZQUFlOztBQUN2QixhQUFLLGlCQUFMLEdBQXlCLGVBQWUsU0FBZixDQUF5QixnQkFBekIsS0FBK0MsT0FBTyxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZ0JBQWYsQ0FBUCxLQUE0QyxXQUFwSDtBQUNBLGFBQUssWUFBTCxHQUFvQixZQUFwQjs7QUFFQSxhQUFLLFFBQUwsQ0FBYyxLQUFLLEtBQW5CLEVBQTBCLFFBQTFCLEVBQW9DLEtBQUssTUFBekM7QUFDQSxhQUFLLE1BQUw7QUFDSCxLQVJvQztBQVVyQyxVQVZxQyxvQkFVNUI7QUFDTCxZQUFJLGVBQWUsS0FBSyxpQkFBTCxHQUNHLEVBQUMsTUFBTSxVQUFQLEVBQW1CLE9BQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGdCQUFmLEVBQWlDLFFBQTNELEVBQXFFLFFBQVEsY0FBN0UsRUFESCxHQUVHLEVBQUUsTUFBTSxRQUFSLEVBQWtCLE9BQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFFBQWYsQ0FBekIsRUFBbUQsUUFBUSxZQUEzRCxFQUZ0Qjs7QUFLQSxZQUFJLHlCQUEwQixLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsVUFBZixLQUE4QixLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsVUFBZixFQUEyQixPQUEzQixDQUFtQyxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsUUFBZixDQUFuQyxJQUErRCxDQUFDLENBQTVIOztBQUVBLFlBQUksYUFBYSxFQUFqQjtBQUNBLFlBQUksV0FBVyxFQUFmOztBQUVBLFlBQUksS0FBSyxpQkFBVCxFQUEyQjtBQUN2QixnQkFBSSxpQkFBaUIsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLGdCQUFmLENBQXJCOztBQUVBLGdCQUFNLGVBQWUsZUFBZSxZQUFwQztBQUNBLGdCQUFJLFlBQUosRUFBa0I7QUFDZCw2QkFBYSxNQUFNLFlBQU4sSUFBc0IsT0FBTyxJQUFQLENBQVksd0JBQVosRUFBc0MsRUFBQywwQkFBRCxFQUF0QyxDQUF0QixHQUE4RSxPQUFPLElBQVAsQ0FBWSwwQkFBWixFQUF3QyxFQUFDLDBCQUFELEVBQXhDLENBQTNGO0FBQ0g7O0FBRUQsZ0JBQU0sT0FBTyxlQUFlLElBQTVCO0FBQ0EsZ0JBQUcsSUFBSCxFQUFTO0FBQ0wsMkJBQVcsT0FBTyxJQUFQLENBQVksVUFBWixFQUF3QixFQUFDLFVBQUQsRUFBeEIsQ0FBWDtBQUNIO0FBRUosU0FiRCxNQWFPO0FBQ0gseUJBQWEseUJBQTBCLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxVQUFmLENBQTFCLEdBQXdELEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxRQUFmLEtBQTRCLEVBQWpHO0FBQ0EsdUJBQVcseUJBQTBCLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxVQUFmLENBQTFCLEdBQXdELEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxNQUFmLEtBQTBCLEVBQTdGO0FBQ0g7O0FBRUQsWUFBSSxLQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsTUFBZixFQUF1QixFQUF2QixLQUE4QixVQUFsQyxFQUE2QztBQUN6Qyx5QkFBYSxTQUFiLEdBQXlCLFVBQXpCO0FBQ0g7O0FBRUQsWUFBSSxZQUFZO0FBQ1osZ0JBQWMsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLElBQWYsQ0FERjtBQUVaLG1CQUFjLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxPQUFmLENBRkY7QUFHWixvQkFBYyxVQUhGO0FBSVosa0JBQWMsUUFKRjtBQUtaLHNCQUFjLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxVQUFmLEtBQThCLEVBTGhDO0FBTVosdUJBQWMsSUFBSSxPQUFPLFlBQVgsRUFBeUIsWUFBekIsQ0FORjtBQU9aLHNCQUFjLEVBQUUsS0FBRixDQUFRLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxXQUFmLEtBQStCLENBQUMsRUFBRCxDQUF2QyxDQVBGO0FBUVosd0JBQWEsRUFBRSxPQUFGLENBQVUsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFVBQWYsQ0FBVjtBQVJELFNBQWhCOztBQVdBLFlBQUksUUFBUSxFQUFFLFNBQVMsc0JBQVQsRUFBRixDQUFaOztBQUVBLFlBQUksQ0FBQyxLQUFLLFlBQU4sSUFBc0IsQ0FBQyxzQkFBdkIsSUFBaUQsQ0FBQyxFQUFFLE9BQUYsQ0FBVSxVQUFVLFFBQXBCLENBQXRELEVBQXFGO0FBQ2pGLGdCQUFJLFlBQWMsS0FBSyxjQUFMLENBQW9CLFVBQVUsUUFBOUIsRUFBd0MsVUFBVSxRQUFsRCxDQUFsQjtBQUNBLGtCQUFNLE1BQU4sQ0FBYSxTQUFiO0FBQ0g7O0FBRUQsWUFBSSxDQUFDLEVBQUUsT0FBRixDQUFVLFVBQVUsTUFBcEIsQ0FBTCxFQUFrQztBQUM5QixnQkFBRyxLQUFLLEtBQUwsQ0FBVyxVQUFYLElBQXlCLGVBQWUsU0FBZixDQUF5QixpQkFBekIsQ0FBNUIsRUFBd0U7QUFDcEUsb0JBQUksVUFBVyxLQUFLLGdCQUFMLENBQXNCLFVBQVUsVUFBaEMsRUFBNEMsVUFBVSxNQUF0RCxDQUFmO0FBQ0Esc0JBQU0sTUFBTixDQUFhLE9BQWI7QUFDSCxhQUhELE1BR0s7QUFDRCxvQkFBSSxXQUFXLEtBQUssZ0JBQUwsQ0FBc0IsVUFBVSxTQUFoQyxFQUEyQyxVQUFVLFVBQXJELEVBQWlFLFVBQVUsTUFBM0UsQ0FBZjtBQUNBLHNCQUFNLE1BQU4sQ0FBYSxRQUFiO0FBQ0g7QUFDSjs7QUFFRCxZQUFJLENBQUMsRUFBRSxPQUFGLENBQVUsVUFBVSxJQUFwQixDQUFELElBQThCLGVBQWUsU0FBZixDQUF5QixvQkFBekIsQ0FBbEMsRUFBa0Y7QUFDOUUsZ0JBQU0sUUFBUSxLQUFLLGNBQUwsQ0FBb0IsVUFBVSxVQUE5QixFQUEwQyxVQUFVLElBQXBELENBQWQ7QUFDQSxrQkFBTSxNQUFOLENBQWEsS0FBYjtBQUNIOztBQUVELGFBQUssR0FBTCxDQUFTLElBQVQsQ0FBYyxLQUFkO0FBQ0gsS0E3RW9DO0FBK0VyQyxrQkEvRXFDLDBCQStFdEIsVUEvRXNCLEVBK0VWLElBL0VVLEVBK0VMO0FBQzVCLGVBQU8sRUFBRSxPQUFGLEVBQVcsRUFBRSxzQkFBbUIsYUFBYSxXQUFiLEdBQTJCLEVBQTNCLEVBQStCLElBQWxELENBQUYsRUFBNEQsVUFBNUQsRUFBWCxDQUFQO0FBQ0gsS0FqRm9DO0FBbUZyQyxvQkFuRnFDLDRCQW1GcEIsVUFuRm9CLEVBbUZSLElBbkZRLEVBbUZIO0FBQzlCLFlBQUksT0FBTyxFQUFFLE9BQUYsRUFBVyxFQUFFLHNCQUFtQixhQUFhLFdBQWIsR0FBMkIsRUFBM0IsRUFBK0IsSUFBbEQsQ0FBRixFQUFYLENBQVg7QUFDQSxlQUFPLElBQVA7QUFDSCxLQXRGb0M7QUF3RnJDLG9CQXhGcUMsNEJBd0ZwQixTQXhGb0IsRUF3RlQsVUF4RlMsRUF3RkcsSUF4RkgsRUF3RlM7O0FBRTFDLFlBQUksT0FBTyxFQUFFLE9BQUYsRUFBVyxFQUFFLHNCQUFtQixhQUFhLFdBQWIsR0FBMkIsRUFBOUMsQ0FBRixFQUFYLENBQVg7O0FBRUEsWUFBSSxRQUFRLEVBQUUsT0FBRixFQUFXO0FBQ25CLDBCQUFjLFdBQVcsc0JBQVgsRUFBbUMsRUFBRSxRQUFRLElBQVYsRUFBbkMsQ0FESztBQUVuQixxQkFBYyxLQUFLLGlCQUFMLEdBQXlCLHNDQUF6QixHQUFrRSx1Q0FGN0Q7QUFHbkIsb0JBQWMsU0FISztBQUluQixxQkFBYyxJQUpLO0FBS25CO0FBTG1CLFNBQVgsQ0FBWjs7QUFRQSxhQUFLLE1BQUwsQ0FBWSxLQUFaOztBQUVBLGVBQU8sSUFBUDtBQUNILEtBdkdvQztBQXlHckMsa0JBekdxQywwQkF5R3RCLFFBekdzQixFQXlHWixRQXpHWSxFQXlHRjtBQUMvQixZQUFHLGVBQWUsU0FBZixDQUF5QixtQkFBekIsQ0FBSCxFQUFpRDtBQUM3QyxtQkFBTyxpQ0FBK0IsUUFBL0IsVUFBNEMsUUFBNUMsVUFBUDtBQUNILFNBRkQsTUFFSztBQUNELG1CQUFPLEVBQUUsT0FBRixFQUFXO0FBQ2QseUJBQVUsVUFESTtBQUVkLHdCQUFVLFFBRkk7QUFHZCx3QkFBVTtBQUhJLGFBQVgsQ0FBUDtBQUtIO0FBQ0o7QUFuSG9DLENBQXJCLENBQXBCOztBQXNIQSxPQUFPLE9BQVAsR0FBaUIsV0FBakI7Ozs7Ozs7Ozs7Ozs7QUM1SEE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7Ozs7SUFFcUIsaUI7Ozs7OzRCQUNEO0FBQ1osbUJBQU8sWUFBUDtBQUNIOzs7QUFFRCxpQ0FBYztBQUFBOztBQUFBLDJJQUNELFNBREM7O0FBRVYsY0FBSyxNQUFMLEdBQWMsRUFBZDs7QUFFQSxjQUFLLE1BQUw7QUFKVTtBQUtiOzs7O2lDQUVRO0FBQ0wsaUJBQUssTUFBTCxDQUFZLE9BQVosQ0FBb0IsVUFBQyxJQUFEO0FBQUEsdUJBQVUsS0FBSyxNQUFMLEVBQVY7QUFBQSxhQUFwQjtBQUNBLGlCQUFLLE1BQUwsR0FBYyxFQUFkO0FBQ0g7OztpQ0FFUTtBQUNMLGlCQUFLLE1BQUw7QUFDQTtBQUNIOzs7aUNBRVE7QUFDTCxpQkFBSyxNQUFMOztBQUVBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxXQUFMLEdBQW1CLElBQUksd0JBQUosQ0FBZ0IsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFoQixDQUR4Qjs7QUFJQSxnQkFBSSxLQUFLLEtBQUwsQ0FBVyxVQUFmLEVBQTJCO0FBQ3ZCLHFCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxZQUFMLEdBQW9CLElBQUkseUJBQUosQ0FBaUIsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFqQixDQUR6QjtBQUdILGFBSkQsTUFJTztBQUNILHFCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxXQUFMLEdBQW1CLElBQUksd0JBQUosQ0FBZ0IsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFoQixDQUR4QjtBQUdIO0FBQ0QsaUJBQUssTUFBTCxDQUFZLElBQVosQ0FDSyxLQUFLLFNBQUwsR0FBaUIsSUFBSSxzQkFBSixDQUFjLEVBQUUsT0FBTyxLQUFLLEtBQWQsRUFBZCxDQUR0QjtBQUdBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxXQUFMLEdBQW1CLElBQUksd0JBQUosQ0FBZ0IsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFoQixDQUR4QjtBQUdBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxlQUFMLEdBQXVCLElBQUksNkJBQUosQ0FBcUI7QUFDekMsd0JBQVEsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE1BQWYsRUFBdUI7QUFEVSxhQUFyQixDQUQ1QjtBQUtBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxlQUFMLEdBQXVCLElBQUksNEJBQUosQ0FBb0IsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFwQixDQUQ1QjtBQUdBLGlCQUFLLE1BQUwsQ0FBWSxJQUFaLENBQ0ssS0FBSyxlQUFMLEdBQXVCLElBQUksNEJBQUosQ0FBb0IsRUFBRSxPQUFPLEtBQUssS0FBZCxFQUFwQixDQUQ1Qjs7QUFJQSxnQkFBTSxpQkFDRCxPQUFPLGNBQVAsQ0FBc0IsU0FBdEIsQ0FBZ0MsaUJBQWhDLEtBQ0csS0FBSyxLQUFMLENBQVcsVUFEZixJQUVBLENBQUMsT0FBTyxjQUFQLENBQXNCLFNBQXRCLENBQWdDLG1CQUFoQyxDQUhMOztBQUtBLGdCQUFJLENBQUMsY0FBTCxFQUFxQjtBQUNqQixxQkFBSyxNQUFMLENBQVksSUFBWixDQUNLLEtBQUssVUFBTCxHQUFrQixJQUFJLHVCQUFKLENBQWU7QUFDOUIsMkJBQU8sS0FBSyxLQURrQjtBQUU5Qix3QkFBSSxFQUFFLFNBQUYsRUFBYSxFQUFFLFNBQU8sdUJBQVQsRUFBYixDQUYwQjtBQUc5QiwwQkFBTTtBQUh3QixpQkFBZixFQUloQixNQUpnQixFQUR2QjtBQU9IOztBQUVELGlCQUFLLEdBQUwsQ0FBUyxLQUFUO0FBQ0EsaUJBQUssR0FBTCxDQUFTLE1BQVQsQ0FDSSxLQUFLLFNBQUwsQ0FBZSxHQURuQixFQUVJLEtBQUssV0FBTCxDQUFpQixHQUFqQixDQUFxQixRQUFyQixDQUE4QixZQUE5QixDQUZKLEVBR0ksS0FBSyxXQUFMLENBQWlCLEdBSHJCLEVBSUksS0FBSyxLQUFMLENBQVcsVUFBWCxHQUNNLEtBQUssWUFBTCxDQUFrQixHQUR4QixHQUVNLEtBQUssV0FBTCxDQUFpQixHQU4zQixFQU9JLEtBQUssZUFBTCxDQUFxQixHQVB6Qjs7QUFVQSxnQkFBSSxDQUFDLENBQUMsS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLG1CQUFmLENBQU4sRUFBMkM7QUFDdkMscUJBQUssR0FBTCxDQUFTLE1BQVQsQ0FBZ0IsS0FBSyxlQUFMLENBQXFCLEdBQXJDO0FBQ0gsYUFGRCxNQUVPLElBQUksQ0FBQyxjQUFMLEVBQXFCO0FBQ3hCLHFCQUFLLEdBQUwsQ0FBUyxNQUFULENBQWdCLEtBQUssVUFBTCxDQUFnQixHQUFoQztBQUNIOztBQUVELGlCQUFLLEdBQUwsQ0FBUyxNQUFULENBQWdCLEtBQUssZUFBTCxDQUFxQixHQUFyQztBQUNIOzs7O0VBekYwQyxTQUFTLEk7O3FCQUFuQyxpQjs7Ozs7Ozs7QUNWckI7cUJBQ2UsT0FBTyxRQUFQLENBQWdCLEs7Ozs7Ozs7OztBQ0QvQjs7Ozs7O0FBRUEsSUFBTSx3QkFBd0Isa0JBQVUsTUFBVixDQUFpQjtBQUMzQyxPQUQyQyxpQkFDckM7QUFDRixlQUFPLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLFNBQXpCLENBQVA7QUFDSCxLQUgwQztBQUszQyxjQUwyQyw0QkFLdEI7QUFBQSxZQUFULE1BQVMsUUFBVCxNQUFTOztBQUNqQixhQUFLLFVBQUwsR0FBa0IsVUFBVSxPQUFPLFNBQVAsQ0FBaUIsZUFBM0IsSUFBOEMsRUFBaEU7QUFDQSxhQUFLLFdBQUwsR0FBbUIsRUFBRSxHQUFGLENBQU0sRUFBRSxLQUFGLENBQVEsS0FBSyxVQUFiLEVBQXlCLElBQXpCLENBQU4sRUFBc0MsTUFBdEMsQ0FBbkI7QUFDSCxLQVIwQztBQVUzQyxnQkFWMkMsMEJBVTVCO0FBQ1gsZUFBTyxLQUFLLFVBQUwsQ0FBZ0IsTUFBaEIsR0FDRCxLQUFLLEtBQUwsQ0FBVztBQUNULGtCQUFNLEtBQUssU0FBTCxDQUFlLEVBQUMsVUFBVSxLQUFLLFdBQWhCLEVBQWYsQ0FERztBQUVULGtCQUFNLE1BRkcsRUFFSyxhQUFhLGtCQUZsQjtBQUdULHFCQUFTLEVBQUMsY0FBYyxFQUFFLE9BQUYsRUFBVyxHQUFYLE1BQW9CLFVBQVUsS0FBN0MsRUFIQSxFQUFYLENBREMsR0FLRCxRQUFRLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FMTjtBQU1IO0FBakIwQyxDQUFqQixDQUE5Qjs7cUJBb0JlLHFCOzs7Ozs7Ozs7OztBQ3RCZjs7OztBQUNBOzs7Ozs7OztBQUNBOzs7OztJQUtxQixnQjtBQUNqQixnQ0FBYztBQUFBOztBQUNWLGFBQUssbUJBQUwsR0FBMkIsbUJBQTNCO0FBQ0EsYUFBSyxvQkFBTCxHQUE0QixvQkFBNUI7QUFDQSxhQUFLLFVBQUwsR0FBa0IsV0FBbEI7QUFDQSxhQUFLLGFBQUwsR0FBcUIsY0FBckI7QUFDQSxhQUFLLDJCQUFMLEdBQW1DLDBCQUFuQztBQUNBLGFBQUssT0FBTCxHQUFlLFNBQWY7QUFDQSxhQUFLLE1BQUwsR0FBYyxRQUFkO0FBQ0EsYUFBSyxjQUFMLEdBQXNCLGVBQXRCO0FBQ0EsYUFBSyxRQUFMLEdBQWdCLFVBQWhCO0FBQ0EsYUFBSyxJQUFMLEdBQVksTUFBWjtBQUNBLGFBQUssT0FBTCxHQUFlLFFBQWY7QUFDQSxhQUFLLHlCQUFMLEdBQWlDLDJCQUFqQztBQUNBLGFBQUssSUFBTCxHQUFZLE1BQVo7QUFDQSxhQUFLLGVBQUwsR0FBdUIsZ0JBQXZCO0FBQ0EsYUFBSyxZQUFMLEdBQW9CLGFBQXBCO0FBQ0EsYUFBSyxXQUFMLEdBQW1CLFlBQW5CO0FBQ0EsYUFBSyxhQUFMLEdBQXFCLGNBQXJCO0FBQ0EsWUFBTSxnQkFBZ0I7QUFDbEI7QUFDQSxhQUFLLG1CQUZhLEVBR2xCLEtBQUssb0JBSGEsRUFJbEIsS0FBSyxVQUphLEVBS2xCLEtBQUssYUFMYSxFQU1sQixLQUFLLDJCQU5hLENBQXRCO0FBUUEsWUFBTSxlQUFlO0FBQ2pCO0FBQ0EsYUFBSyxPQUZZLEVBR2pCLEtBQUssTUFIWSxFQUlqQixLQUFLLGNBSlksRUFLakIsS0FBSyxRQUxZLENBQXJCO0FBT0EsWUFBTSxlQUFlLENBQ2pCLEtBQUssZUFEWSxFQUVqQixLQUFLLFlBRlksRUFHakIsS0FBSyxXQUhZLEVBSWpCLEtBQUssYUFKWSxDQUFyQjtBQU1BLGFBQUssWUFBTCxHQUFvQixJQUFJLHlCQUFKLENBQ2hCLGFBRGdCLEVBRWhCLFlBRmdCLEVBR2hCLFlBSGdCLENBQXBCO0FBS0g7O0FBRUQ7Ozs7Ozs7O3NDQUljO0FBQ1YsbUJBQU8sS0FBSyxZQUFMLENBQWtCLFdBQWxCLEVBQVA7QUFDSDs7QUFFRDs7Ozs7OzsrQkFJTyxJLEVBQU07QUFDVDtBQUNBLGdCQUNJLENBQUMsRUFBRSxJQUFGLEVBQVEsUUFBUixDQUFpQixXQUFqQixDQUFELElBQ0EsQ0FBQyxFQUFFLElBQUYsRUFBUSxRQUFSLENBQWlCLGFBQWpCLENBRkwsRUFHRTtBQUNFLHFCQUFLLFlBQUwsQ0FBa0IsZ0JBQWxCO0FBQ0EscUJBQUssWUFBTCxDQUFrQixnQkFBbEIsQ0FBbUMsS0FBSyxJQUF4QztBQUNBLG9CQUFJLEVBQUUsSUFBRixFQUFRLElBQVIsQ0FBYSxPQUFiLE1BQTBCLFdBQTlCLEVBQTJDO0FBQ3ZDLHlCQUFLLFlBQUwsQ0FBa0IsUUFBbEIsQ0FDSSxLQUFLLDJCQURULEVBRUksS0FBSyxJQUZUO0FBSUgsaUJBTEQsTUFLTztBQUNILHdCQUFNLFFBQVEsRUFBRSxJQUFGLEVBQVEsSUFBUixDQUFhLFlBQWIsQ0FBZDtBQUNBLHdCQUFNLEtBQUssRUFBRSxJQUFGLEVBQVEsSUFBUixDQUFhLFNBQWIsQ0FBWDtBQUNBLHdCQUFJLFVBQVUsZUFBZCxFQUErQjtBQUMzQiw2QkFBSyxZQUFMLENBQWtCLFFBQWxCLENBQ0ksS0FBSyxtQkFEVCxFQUVJLEtBQUssSUFGVDtBQUlBLDZCQUFLLFlBQUwsQ0FBa0IsVUFBbEIsQ0FDSSxLQUFLLG9CQURULEVBRUksS0FBSyxJQUZUO0FBSUgscUJBVEQsTUFTTyxJQUFJLFVBQVUsWUFBZCxFQUE0QjtBQUMvQiw2QkFBSyxZQUFMLENBQWtCLFVBQWxCLENBQ0ksS0FBSyxtQkFEVCxFQUVJLEtBQUssSUFGVDtBQUlBLDZCQUFLLFlBQUwsQ0FBa0IsVUFBbEIsQ0FDSSxLQUFLLG9CQURULEVBRUksS0FBSyxJQUZUO0FBSUgscUJBVE0sTUFTQSxJQUFJLFVBQVUsWUFBZCxFQUE0QjtBQUMvQiw2QkFBSyxZQUFMLENBQWtCLFFBQWxCLENBQ0ksS0FBSyxvQkFEVCxFQUVJLEtBQUssSUFGVDtBQUlBLDZCQUFLLFlBQUwsQ0FBa0IsVUFBbEIsQ0FDSSxLQUFLLG1CQURULEVBRUksS0FBSyxJQUZUO0FBSUgscUJBVE0sTUFTQSxJQUFJLFVBQVUsS0FBSyxPQUFuQixFQUE0QjtBQUMvQiw2QkFBSyxZQUFMLENBQWtCLFFBQWxCLENBQ0ksS0FBSyxPQURULEVBRUksNENBQTBCLEVBQTFCLENBRko7QUFJSCxxQkFMTSxNQUtBLElBQUksVUFBVSxNQUFkLEVBQXNCO0FBQ3pCLDZCQUFLLFlBQUwsQ0FBa0IsUUFBbEIsQ0FBMkIsS0FBSyxVQUFoQyxFQUE0QyxFQUE1QztBQUNILHFCQUZNLE1BRUEsSUFBSSxVQUFVLFVBQWQsRUFBMEI7QUFDN0IsNkJBQUssWUFBTCxDQUFrQixRQUFsQixDQUEyQixLQUFLLGNBQWhDLEVBQWdELEVBQWhEO0FBQ0gscUJBRk0sTUFFQSxJQUNILENBQ0ksS0FBSyxNQURULEVBRUksS0FBSyxRQUZULEVBR0ksS0FBSyxlQUhULEVBSUksS0FBSyxZQUpULEVBS0ksS0FBSyxXQUxULEVBTUksS0FBSyxhQU5ULEVBT0UsUUFQRixDQU9XLEtBUFgsQ0FERyxFQVNMO0FBQ0UsNkJBQUssWUFBTCxDQUFrQixRQUFsQixDQUEyQixLQUEzQixFQUFrQyxFQUFsQztBQUNIO0FBQ0o7QUFDRCxvQkFBSSxDQUFDLEtBQUssWUFBTCxDQUFrQixhQUFsQixDQUFnQyxLQUFLLE9BQXJDLENBQUwsRUFBb0Q7QUFDaEQseUJBQUssWUFBTCxDQUFrQixhQUFsQixDQUNJLEtBQUssT0FEVCxFQUVJLEVBQUUseUJBQUYsRUFBNkIsR0FBN0IsRUFGSjtBQUlIO0FBQ0QscUJBQUssWUFBTCxDQUFrQixjQUFsQjtBQUNIO0FBQ0o7O0FBRUQ7Ozs7OztvQ0FHWTtBQUNSLGlCQUFLLFlBQUwsQ0FBa0IsZ0JBQWxCO0FBQ0EsaUJBQUssWUFBTCxDQUFrQixnQkFBbEIsQ0FBbUMsS0FBSyxJQUF4QztBQUNBLGlCQUFLLFlBQUwsQ0FBa0IsY0FBbEI7QUFDQSxpQkFBSyxZQUFMLENBQWtCLGNBQWxCO0FBQ0g7O0FBRUQ7Ozs7OzswQ0FHa0IsTSxFQUFRO0FBQ3RCLGlCQUFLLFlBQUwsQ0FBa0IsZ0JBQWxCO0FBQ0EsaUJBQUssWUFBTCxDQUFrQixVQUFsQixDQUE2QixLQUFLLGFBQWxDLEVBQWlELE1BQWpEO0FBQ0EsaUJBQUssWUFBTCxDQUFrQixnQkFBbEIsQ0FBbUMsS0FBSyxJQUF4QztBQUNBLGlCQUFLLFlBQUwsQ0FBa0IsY0FBbEI7QUFDSDs7QUFFRDs7Ozs7OzsrQkFJTyxJLEVBQU07QUFDVCxpQkFBSyxZQUFMLENBQWtCLGdCQUFsQjtBQUNBLGdCQUFNLFdBQVcsRUFBRSxJQUFGLEVBQVEsSUFBUixDQUFhLGdCQUFiLEVBQStCLEtBQS9CLENBQXFDLEdBQXJDLENBQWpCO0FBQ0EsZ0JBQU0sY0FBYyxFQUFFLElBQUYsRUFBUSxJQUFSLENBQWEsbUJBQWIsQ0FBcEI7QUFDQTtBQUNBLGlCQUFLLFlBQUwsQ0FBa0IsZ0JBQWxCLENBQW1DLEtBQUssSUFBeEM7QUFMUztBQUFBO0FBQUE7O0FBQUE7QUFNVCxxQ0FBZSxRQUFmLDhIQUF5QjtBQUFBLHdCQUFoQixFQUFnQjs7QUFDckIseUJBQUssWUFBTCxDQUFrQixVQUFsQixDQUNJLFdBREosRUFFSSw0Q0FBMEIsRUFBMUIsQ0FGSjtBQUlBLHdCQUFJLGdCQUFnQixLQUFLLDJCQUF6QixFQUFzRDtBQUNsRCw2QkFBSyxZQUFMLENBQWtCLFVBQWxCLENBQ0ksS0FBSyxNQURULEVBRUksS0FBSyx5QkFGVDtBQUlIO0FBQ0o7QUFqQlE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFrQlQsaUJBQUssWUFBTCxDQUFrQixjQUFsQjtBQUNIOztBQUVEOzs7Ozs7O3lDQUlpQixJLEVBQU07QUFDbkIsaUJBQUssWUFBTCxDQUFrQixnQkFBbEI7QUFDQSxnQkFBTSxjQUFjLEtBQUssSUFBTCxDQUFVLGNBQVYsQ0FBcEI7QUFDQSxnQkFBTSxXQUFXLEtBQUssSUFBTCxDQUFVLFdBQVYsQ0FBakI7QUFDQSxpQkFBSyxZQUFMLENBQWtCLGdCQUFsQixDQUFtQyxLQUFLLElBQXhDO0FBQ0EsaUJBQUssWUFBTCxDQUFrQixVQUFsQixDQUE2QixXQUE3QixFQUEwQyxRQUExQztBQUNBLGlCQUFLLFlBQUwsQ0FBa0IsUUFBbEIsQ0FDSSxLQUFLLGFBRFQsRUFFTyxXQUZQLFNBRXNCLFFBRnRCO0FBSUEsaUJBQUssWUFBTCxDQUFrQixjQUFsQjtBQUNIOzs7Ozs7cUJBbE1nQixnQjs7Ozs7Ozs7Ozs7QUNQckI7Ozs7Ozs7O0FBQ0E7Ozs7O0lBS3FCLFc7QUFDakIseUJBQVksWUFBWixFQUEwQixXQUExQixFQUF1QyxXQUF2QyxFQUFvRDtBQUFBOztBQUNoRCxhQUFLLE9BQUwsR0FDSSx5QkFBWSxLQUFaLENBQWtCLE9BQU8sUUFBUCxDQUFnQixNQUFoQixDQUF1QixNQUF2QixDQUE4QixDQUE5QixDQUFsQixLQUF1RCxFQUQzRDtBQUVBLGFBQUssYUFBTCxHQUFxQixZQUFyQixDQUhnRCxDQUdiO0FBQ25DLGFBQUssWUFBTCxHQUFvQixXQUFwQixDQUpnRCxDQUlmO0FBQ2pDLGFBQUssWUFBTCxHQUFvQixXQUFwQjtBQUNIOztBQUVEOzs7Ozs7OzJDQUdtQjtBQUNmLGlCQUFLLE9BQUwsR0FDSSx5QkFBWSxLQUFaLENBQWtCLE9BQU8sUUFBUCxDQUFnQixNQUFoQixDQUF1QixNQUF2QixDQUE4QixDQUE5QixDQUFsQixLQUF1RCxFQUQzRDtBQUVIOztBQUVEOzs7Ozs7eUNBR2lCO0FBQ2IsZ0JBQ0ksQ0FBQyxDQUFDLE9BQU8sU0FBUCxDQUFpQixlQUFuQixJQUNBLENBQUMsQ0FBQyxPQUFPLFNBQVAsQ0FBaUIsZUFBakIsQ0FBaUMsUUFEbkMsSUFFQSxPQUFPLFNBQVAsQ0FBaUIsZUFBakIsQ0FBaUMsUUFBakMsR0FBNEMsVUFGNUMsSUFHQSxDQUFDLENBQUMsT0FBTyxTQUFQLENBQWlCLGVBQWpCLENBQWlDLFVBSnZDLEVBS0U7QUFDRSxxQkFBSyxPQUFMLENBQWEsVUFBYixHQUNJLE9BQU8sU0FBUCxDQUFpQixlQUFqQixDQUFpQyxVQURyQztBQUVIOztBQUVELGdCQUNJLEtBQUssT0FBTCxDQUFhLE1BQWIsSUFDQSxLQUFLLE9BQUwsQ0FBYSxNQUFiLENBQW9CLFFBQXBCLENBQTZCLHFCQUE3QixDQURBLElBRUEsQ0FBQyxLQUFLLE9BQUwsQ0FBYSxNQUFiLENBQW9CLFFBQXBCLENBQTZCLGlDQUE3QixDQUhMLEVBSUU7QUFDRSxvQkFBTSxpQkFBaUIsS0FBSyxPQUFMLENBQWEsTUFBYixDQUFvQixPQUFwQixDQUNuQixxQkFEbUIsQ0FBdkI7QUFHQSxxQkFBSyxPQUFMLENBQWEsTUFBYixDQUFvQixjQUFwQixJQUNJLHFEQURKO0FBRUg7O0FBRUQsZ0JBQUksS0FBSyx5QkFBWSxTQUFaLENBQXNCLEtBQUssT0FBM0IsQ0FBVDs7QUFFQSxpQkFBSyxHQUFHLE1BQUgsR0FBWSxDQUFaLFNBQW9CLEVBQXBCLEdBQTJCLEVBQWhDOztBQUVBLG1CQUFPLFFBQVAsQ0FBZ0IsTUFBaEIsR0FBeUIsRUFBekI7QUFDSDs7QUFFRDs7Ozs7Ozs7aUNBS1MsSSxFQUFNLEssRUFBTztBQUNsQixnQkFBSSxLQUFLLFlBQUwsQ0FBa0IsUUFBbEIsQ0FBMkIsSUFBM0IsQ0FBSixFQUFzQztBQUNsQyxvQkFBSSxDQUFDLEtBQUssT0FBTCxDQUFhLElBQWIsQ0FBTCxFQUF5QjtBQUNyQix5QkFBSyxPQUFMLENBQWEsSUFBYixJQUFxQixDQUFDLEtBQUQsQ0FBckI7QUFDSCxpQkFGRCxNQUVPLElBQUksQ0FBQyxNQUFNLE9BQU4sQ0FBYyxLQUFLLE9BQUwsQ0FBYSxJQUFiLENBQWQsQ0FBTCxFQUF3QztBQUMzQztBQUNBLHlCQUFLLE9BQUwsQ0FBYSxJQUFiLElBQXFCLENBQUMsS0FBSyxPQUFMLENBQWEsSUFBYixDQUFELEVBQXFCLEtBQXJCLENBQXJCO0FBQ0gsaUJBSE0sTUFHQTtBQUNILHlCQUFLLE9BQUwsQ0FBYSxJQUFiLEVBQW1CLElBQW5CLENBQXdCLEtBQXhCO0FBQ0g7QUFDSixhQVRELE1BU08sSUFBSSxLQUFLLGFBQUwsQ0FBbUIsUUFBbkIsQ0FBNEIsSUFBNUIsQ0FBSixFQUF1QztBQUMxQyxxQkFBSyxPQUFMLENBQWEsSUFBYixJQUFxQixLQUFyQjtBQUNILGFBRk0sTUFFQSxJQUFJLEtBQUssWUFBTCxDQUFrQixRQUFsQixDQUEyQixJQUEzQixDQUFKLEVBQXNDO0FBQ3pDLG9CQUFNLE1BQU0sT0FBTyxLQUFuQjtBQUNBLG9CQUFNLE1BQU0sT0FBTyxLQUFuQjtBQUNBLHFCQUFLLE9BQUwsQ0FBYSxHQUFiLElBQW9CLEtBQXBCO0FBQ0EscUJBQUssT0FBTCxDQUFhLEdBQWIsSUFBb0IsS0FBcEI7QUFDSDtBQUNKOztBQUVEOzs7Ozs7OzttQ0FLVyxJLEVBQU0sSyxFQUFPO0FBQ3BCLGdCQUFJLEtBQUssWUFBTCxDQUFrQixRQUFsQixDQUEyQixJQUEzQixDQUFKLEVBQXNDO0FBQ2xDLG9CQUFNLE1BQU0sT0FBTyxLQUFuQjtBQUNBLG9CQUFNLE1BQU0sT0FBTyxLQUFuQjtBQUNBLHVCQUFPLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBUDtBQUNBLHVCQUFPLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBUDtBQUNILGFBTEQsTUFLTyxJQUFJLENBQUMsS0FBRCxJQUFVLEtBQUssYUFBTCxDQUFtQixRQUFuQixDQUE0QixJQUE1QixDQUFkLEVBQWlEO0FBQ3BELHVCQUFPLEtBQUssT0FBTCxDQUFhLElBQWIsQ0FBUDtBQUNILGFBRk0sTUFFQSxJQUFJLEtBQUssWUFBTCxDQUFrQixRQUFsQixDQUEyQixJQUEzQixDQUFKLEVBQXNDO0FBQ3pDLG9CQUFJLEtBQUssT0FBTCxDQUFhLElBQWIsS0FBc0IsTUFBTSxPQUFOLENBQWMsS0FBSyxPQUFMLENBQWEsSUFBYixDQUFkLENBQTFCLEVBQTZEO0FBQ3pELHlCQUFLLE9BQUwsQ0FBYSxJQUFiLEVBQW1CLE1BQW5CLENBQTBCLEtBQUssT0FBTCxDQUFhLElBQWIsRUFBbUIsT0FBbkIsQ0FBMkIsS0FBM0IsQ0FBMUI7QUFDQSx3QkFBSSxLQUFLLE9BQUwsQ0FBYSxJQUFiLEVBQW1CLE1BQW5CLEtBQThCLENBQWxDLEVBQXFDO0FBQ2pDLCtCQUFPLEtBQUssT0FBTCxDQUFhLElBQWIsQ0FBUDtBQUNIO0FBQ0osaUJBTEQsTUFLTztBQUNILDJCQUFPLEtBQUssT0FBTCxDQUFhLElBQWIsQ0FBUDtBQUNIO0FBQ0o7QUFDSjs7QUFFRDs7Ozs7O3lDQUdpQjtBQUFBOztBQUNiLGNBQUUsSUFBRixDQUFPLEtBQUssYUFBWixFQUEyQixVQUFDLEtBQUQsRUFBVztBQUNsQyxvQkFBSSxPQUFPLEtBQVg7QUFDQSxzQkFBSyxVQUFMLENBQWdCLElBQWhCO0FBQ0gsYUFIRDtBQUlBLGNBQUUsSUFBRixDQUFPLEtBQUssWUFBWixFQUEwQixVQUFDLEtBQUQsRUFBVztBQUNqQyxvQkFBSSxPQUFPLEtBQVg7QUFDQSxzQkFBSyxVQUFMLENBQWdCLElBQWhCO0FBQ0gsYUFIRDtBQUlBLGNBQUUsSUFBRixDQUFPLEtBQUssWUFBWixFQUEwQixVQUFDLEtBQUQsRUFBVztBQUNqQyxvQkFBSSxPQUFPLEtBQVg7QUFDQSxzQkFBSyxVQUFMLENBQWdCLElBQWhCO0FBQ0gsYUFIRDtBQUlIOztBQUVEOzs7Ozs7O3lDQUlpQixJLEVBQU07QUFDbkIsZ0JBQ0ksQ0FBQyxLQUFLLGFBQUwsQ0FBbUIsUUFBbkIsQ0FBNEIsSUFBNUIsQ0FBRCxJQUNBLENBQUMsS0FBSyxZQUFMLENBQWtCLFFBQWxCLENBQTJCLElBQTNCLENBRkwsRUFHRTtBQUNFLHVCQUFPLEtBQUssT0FBTCxDQUFhLElBQWIsQ0FBUDtBQUNIO0FBQ0o7O0FBRUQ7Ozs7Ozs7O3NDQUtjLEksRUFBTSxLLEVBQU87QUFDdkIsZ0JBQ0ksQ0FBQyxLQUFLLGFBQUwsQ0FBbUIsUUFBbkIsQ0FBNEIsSUFBNUIsQ0FBRCxJQUNBLENBQUMsS0FBSyxZQUFMLENBQWtCLFFBQWxCLENBQTJCLElBQTNCLENBRkwsRUFHRTtBQUNFLHFCQUFLLE9BQUwsQ0FBYSxJQUFiLElBQXFCLEtBQXJCO0FBQ0g7QUFDSjs7QUFFRDs7Ozs7Ozs7c0NBS2MsSSxFQUFNO0FBQ2hCLGdCQUNJLENBQUMsS0FBSyxhQUFMLENBQW1CLFFBQW5CLENBQTRCLElBQTVCLENBQUQsSUFDQSxDQUFDLEtBQUssWUFBTCxDQUFrQixRQUFsQixDQUEyQixJQUEzQixDQUZMLEVBR0U7QUFDRSx1QkFBTyxDQUFDLENBQUMsS0FBSyxPQUFMLENBQWEsSUFBYixDQUFUO0FBQ0g7QUFDRCxtQkFBTyxLQUFQO0FBQ0g7O0FBRUQ7Ozs7Ozs7O3NDQUtjO0FBQ1YsZ0JBQUksUUFBUSxDQUFaO0FBRFU7QUFBQTtBQUFBOztBQUFBO0FBRVYscUNBQWtCLEtBQUssYUFBdkIsOEhBQXNDO0FBQUEsd0JBQTdCLEtBQTZCOztBQUNsQyx3QkFBSSxLQUFLLE9BQUwsQ0FBYSxLQUFiLENBQUosRUFBeUI7QUFDckI7QUFDSDtBQUNKO0FBTlM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFPVixzQ0FBa0IsS0FBSyxZQUF2QixtSUFBcUM7QUFBQSx3QkFBNUIsTUFBNEI7O0FBQ2pDLHdCQUFJLEtBQUssT0FBTCxDQUFhLFNBQVEsS0FBckIsS0FBK0IsS0FBSyxPQUFMLENBQWEsU0FBUSxLQUFyQixDQUFuQyxFQUFnRTtBQUM1RDtBQUNIO0FBQ0o7QUFYUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQVlWLHNDQUFrQixLQUFLLFlBQXZCLG1JQUFxQztBQUFBLHdCQUE1QixPQUE0Qjs7QUFDakMsd0JBQUksS0FBSyxPQUFMLENBQWEsT0FBYixDQUFKLEVBQXlCO0FBQ3JCLDRCQUFJLE1BQU0sT0FBTixDQUFjLEtBQUssT0FBTCxDQUFhLE9BQWIsQ0FBZCxDQUFKLEVBQXdDO0FBQ3BDLHFDQUFTLEtBQUssT0FBTCxDQUFhLE9BQWIsRUFBb0IsTUFBN0I7QUFDSCx5QkFGRCxNQUVPO0FBQ0g7QUFDSDtBQUNKO0FBQ0o7QUFwQlM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFxQlYsbUJBQU8sS0FBUDtBQUNIOzs7Ozs7cUJBM0xnQixXOzs7Ozs7O0FDTnJCOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQXNIQTs7Ozs7Ozs7Y0FwSG1CLE07SUFBWCxNLFdBQUEsTTtJQUNBLFcsR0FBZ0IsT0FBTyxTLENBQXZCLFc7O0lBRUYsTTtBQUNGLDBCQUFpRDtBQUFBOztBQUFBLFlBQW5DLEdBQW1DLFFBQW5DLEdBQW1DO0FBQUEsWUFBOUIsSUFBOEIsUUFBOUIsSUFBOEI7QUFBQSxZQUF4QixvQkFBd0IsUUFBeEIsb0JBQXdCOztBQUFBOztBQUM3QyxhQUFLLEdBQUwsR0FBVyxHQUFYO0FBQ0EsYUFBSyxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUssb0JBQUwsR0FBNEIsb0JBQTVCOztBQUVBLGFBQUssaUJBQUwsR0FBeUIsRUFBRSxtQkFBRixDQUF6Qjs7QUFFQSxhQUFLLFNBQUwsR0FBaUIsSUFBSSx3Q0FBSixDQUFnQztBQUM3QyxnQkFBSSxvQkFEeUM7QUFFN0MsaUJBQUssS0FBSztBQUZtQyxTQUFoQyxFQUdkLEtBSEg7QUFJQSxhQUFLLGVBQUwsR0FBdUIsSUFBSSw0QkFBSixDQUFvQixLQUFLLE1BQXpCLENBQXZCOztBQUVBLGFBQUssbUJBQUwsR0FBMkIsSUFBSSxnQ0FBSixDQUF3QjtBQUMvQyx3QkFBWSxLQUFLLGVBRDhCO0FBRS9DLGlCQUFLLEtBQUssR0FGcUM7QUFHL0MsbUNBQXVCLElBQUksK0JBQUosQ0FBMEI7QUFDN0Msd0JBQVEsS0FBSztBQURnQyxhQUExQixDQUh3QjtBQU0vQyx3QkFBWSxLQUFLLFVBTjhCO0FBTy9DLGtCQUFNLEtBQUssY0FQb0M7QUFRL0MseUJBQWEsS0FBSyxXQVI2QjtBQVMvQyxxQkFBUztBQUNMLHNCQUFNLEtBQUssSUFETjtBQUVMLHNDQUFzQixLQUFLO0FBRnRCO0FBVHNDLFNBQXhCLENBQTNCOztBQWVBLGFBQUssU0FBTCxDQUFlLEVBQWYsQ0FBa0IsUUFBbEIsRUFBNEIsWUFBTTtBQUM5QixrQkFBSyxtQkFBTCxDQUF5QixJQUF6QixHQUFnQyxNQUFLLGNBQXJDO0FBQ0Esa0JBQUssbUJBQUwsQ0FBeUIsVUFBekIsR0FBc0MsTUFBSyxVQUEzQztBQUNBLGtCQUFLLG1CQUFMLENBQXlCLFVBQXpCLEdBQXNDLE1BQUssV0FBM0M7QUFDQSxrQkFBSyxtQkFBTCxDQUF5QixNQUF6QjtBQUNILFNBTEQ7O0FBT0EsYUFBSyxzQkFBTCxHQUE4QixLQUE5Qjs7QUFFQSxhQUFLLE1BQUw7QUFDSDs7OztpQ0EyQ1E7QUFDTCxjQUFFLG1CQUFGLEVBQXVCLE9BQXZCLENBQStCLEtBQUssbUJBQUwsQ0FBeUIsR0FBeEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQU8sWUFBUCxDQUFvQixPQUFwQixDQUE0QixlQUE1Qjs7QUFFQTtBQUNBLGdCQUNJLE9BQU8sU0FBUCxDQUFpQixlQUFqQixJQUNBLE9BQU8sU0FBUCxDQUFpQixjQURqQixJQUVBLHlCQUFZLEdBQVosQ0FBZ0IsUUFBaEIsQ0FGQSxJQUdBLEtBQUssc0JBSlQsRUFLRTtBQUNFLHFCQUFLLHNCQUFMLEdBQThCLElBQTlCO0FBQ0Esb0JBQUksa0JBQWtCLElBQUksbUNBQUosQ0FDbEIsS0FBSyxlQURhLEVBRWxCLEtBQUssR0FGYSxDQUF0QjtBQUlBLGdDQUFnQixhQUFoQjtBQUNBLHVCQUFPLGFBQVAsR0FBdUIsZUFBdkI7QUFDSDs7QUFFRDtBQUNBLGNBQUUsd0JBQUYsRUFBNEIsSUFBNUI7QUFDSDs7OzRCQXJFZ0I7QUFDYixnQkFBSSxhQUFhO0FBQ2IseUJBQU87QUFETSxhQUFqQjs7QUFJQSxnQkFBSSxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLE1BQW5CLE1BQStCLE1BQW5DLEVBQTJDO0FBQ3ZDLHNDQUFtQix1Q0FBbkI7QUFDSDs7QUFFRCxtQkFBTyxVQUFQO0FBQ0g7Ozs0QkFFaUI7QUFDZCxnQkFBSSxLQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLE1BQW5CLE1BQStCLE1BQW5DLEVBQTJDO0FBQ3ZDLHVCQUFPLEVBQUUsUUFBUSxHQUFWLEVBQWUsUUFBUSxHQUF2QixFQUE0QixTQUFTLEdBQXJDLEVBQVA7QUFDSDtBQUNELG1CQUFPLEVBQUUsUUFBUSxHQUFWLEVBQWUsUUFBUSxHQUF2QixFQUE0QixTQUFTLEdBQXJDLEVBQVA7QUFDSDs7OzRCQUVvQjtBQUNqQixnQkFBSSxhQUFKOztBQUVBLGdCQUFJLEtBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsTUFBbkIsTUFBK0IsTUFBbkMsRUFBMkM7QUFDdkMsdUJBQU8sOEJBQVA7QUFDQSxxQkFBSyxpQkFBTCxDQUNLLFdBREwsQ0FDaUIsV0FEakIsRUFFSyxRQUZMLENBRWMsV0FGZDtBQUdILGFBTEQsTUFLTztBQUNILHVCQUFPLHNCQUFQO0FBQ0EscUJBQUssaUJBQUwsQ0FDSyxXQURMLENBQ2lCLFdBRGpCLEVBRUssUUFGTCxDQUVjLFdBRmQ7QUFHSDs7QUFFRCxtQkFBTyxJQUFQO0FBQ0g7Ozs0QkFFWTtBQUNULG1CQUFPLE9BQU8sU0FBUCxDQUFpQixlQUF4QixDQURTLENBQ2dDO0FBQzVDOzs7Ozs7QUFrQ0wsT0FBTyxnQkFBUCxHQUEwQixJQUFJLDhCQUFKLEVBQTFCOztBQUVBLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBYixFQUEyQjtBQUN2QixRQUFJLGNBQWMsSUFBSSx3QkFBSixFQUFsQjs7QUFFQSxnQkFBWSxtQkFBWixDQUFnQyxPQUFPLFlBQXZDLEVBQXFELElBQXJELENBQ0ksVUFBQyxvQkFBRCxFQUEwQjtBQUN0QixhQUFLLElBQUksTUFBSixDQUFXO0FBQ1osaUJBQUssT0FBTyxZQURBO0FBRVosa0JBQU0sV0FGTTtBQUdaO0FBSFksU0FBWCxDQUFMO0FBS0gsS0FQTCxFQVFJLFVBQUMsS0FBRCxFQUFRLFVBQVIsRUFBb0IsS0FBcEIsRUFBOEI7QUFDMUIsZUFBTyxHQUFQLENBQVcsT0FBWCxFQUFvQiwyQkFBcEIsRUFBaUQ7QUFDN0MscUJBQVM7QUFEb0MsU0FBakQ7QUFHSCxLQVpMO0FBY0gsQ0FqQkQsTUFpQk87QUFDSCxTQUFLLElBQUksTUFBSixDQUFXLEVBQUUsS0FBSyxPQUFPLFlBQWQsRUFBNEIsTUFBTSxXQUFsQyxFQUFYLENBQUw7QUFDSDs7QUFFRCxFQUFFLFFBQUYsRUFBWSxLQUFaLENBQWtCLFlBQU07QUFDcEIsTUFBRSx5QkFBRixFQUE2QixXQUE3QixDQUF5QyxnQkFBekM7QUFDSCxDQUZEOzs7Ozs7Ozs7Ozs7O0lDeEpxQixZO0FBQ2pCLGdDQUE4QjtBQUFBLFlBQWhCLEdBQWdCLFFBQWhCLEdBQWdCO0FBQUEsWUFBWCxPQUFXLFFBQVgsT0FBVzs7QUFBQTs7QUFDMUIsYUFBSyxHQUFMLEdBQVcsR0FBWDs7QUFFQSxhQUFLLE9BQUwsR0FBZTtBQUNYLGtCQUFNLFNBREs7QUFFWCxrQ0FBc0I7QUFGWCxTQUFmOztBQUtBLFVBQUUsTUFBRixDQUFTLEtBQUssT0FBZCxFQUF1QixPQUF2QjtBQUNIOzs7O2dDQUVPLE0sRUFBUSxVLEVBQVk7QUFDeEIsZ0JBQUksT0FBTyxXQUFTLE1BQVQsQ0FBUCxLQUE4QixVQUFsQyxFQUE4QztBQUMxQywyQkFBUyxNQUFULEVBQW1CLFVBQW5CO0FBQ0g7QUFDSjs7O2dDQUVPLFUsRUFBWTtBQUNoQixpQkFBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixjQUFqQixFQUFpQyxVQUFqQyxFQUE2QyxLQUFLLE9BQWxEO0FBQ0g7Ozs4QkFFSyxVLEVBQVk7QUFDZCxpQkFBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixZQUFqQixFQUErQixVQUEvQixFQUEyQyxLQUFLLE9BQWhEO0FBQ0g7Ozs4QkFFSyxVLEVBQVk7QUFDZCxpQkFBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixnQkFBakIsRUFBbUMsVUFBbkMsRUFBK0MsS0FBSyxPQUFwRDtBQUNIOzs7OEJBRUssVSxFQUFZO0FBQ2QsaUJBQUssR0FBTCxDQUFTLE9BQVQsQ0FBaUIsWUFBakIsRUFBK0IsVUFBL0IsRUFBMkMsS0FBSyxPQUFoRDtBQUNIOzs7Z0NBRU8sVSxFQUFZO0FBQ2hCLGlCQUFLLEdBQUwsQ0FBUyxPQUFULENBQWlCLGNBQWpCLEVBQWlDLFVBQWpDLEVBQTZDLEtBQUssT0FBbEQ7QUFDSDs7O2lDQUVRLFUsRUFBWTtBQUNqQixpQkFBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixlQUFqQixFQUFrQyxVQUFsQyxFQUE4QyxLQUFLLE9BQW5EO0FBQ0g7OztrQ0FFUyxVLEVBQVk7QUFDbEIsaUJBQUssR0FBTCxDQUFTLE9BQVQsQ0FBaUIsZ0JBQWpCLEVBQW1DLFVBQW5DLEVBQStDLEtBQUssT0FBcEQ7QUFDSDs7O2lDQUVRLFUsRUFBWTtBQUNqQixpQkFBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixlQUFqQixFQUFrQyxVQUFsQyxFQUE4QyxLQUFLLE9BQW5EO0FBQ0g7OzsrQkFFTSxVLEVBQVk7QUFDZixpQkFBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixhQUFqQixFQUFnQyxVQUFoQyxFQUE0QyxLQUFLLE9BQWpEO0FBQ0g7OztzQ0FFYSxVLEVBQVk7QUFDdEIsaUJBQUssR0FBTCxDQUFTLE9BQVQsQ0FBaUIsb0JBQWpCLEVBQXVDLFVBQXZDLEVBQW1ELEtBQUssT0FBeEQ7QUFDSDs7O3VDQUVjLEksRUFBTTtBQUNqQixnQkFBSSxFQUFFLElBQUYsRUFBUSxPQUFSLEVBQUosRUFBdUI7QUFDbkIsdUJBQU8sS0FBSyxPQUFMLENBQWEsSUFBcEI7QUFDSCxhQUZELE1BRU87QUFDSCxxQkFBSyxPQUFMLENBQWEsSUFBYixHQUFvQixJQUFwQjtBQUNIOztBQUVELG1CQUFPLElBQVA7QUFDSDs7OzZDQUVvQixlLEVBQWlCO0FBQ2xDLGdCQUFJLEVBQUUsZUFBRixFQUFtQixPQUFuQixFQUFKLEVBQWtDO0FBQzlCLHVCQUFPLEtBQUssT0FBTCxDQUFhLGVBQXBCO0FBQ0gsYUFGRCxNQUVPO0FBQ0gscUJBQUssT0FBTCxDQUFhLGVBQWIsR0FBK0IsZUFBL0I7QUFDSDs7QUFFRCxtQkFBTyxJQUFQO0FBQ0g7Ozs7OztxQkE1RWdCLFk7Ozs7Ozs7Ozs7Ozs7SUNBZixVOzs7Ozs7O2lDQUNjLEssRUFBTyxXLEVBQWE7QUFDaEMsZ0JBQU0saUJBQWlCLE9BQU8sY0FBOUI7O0FBRUEsZ0JBQUksZUFBZSxTQUFmLENBQXlCLGdCQUF6QixDQUFKLEVBQWdEO0FBQzVDLHVCQUFPLFNBQVA7QUFDSDs7QUFFRCxnQkFBSSxVQUFVLE1BQU0sRUFBcEI7O0FBRUEsZ0JBQUksV0FBVyxlQUFlLFlBQVksT0FBWixDQUFvQixPQUFwQixDQUE0QixPQUE1QixJQUF1QyxDQUFDLENBQXRFO0FBQ0EsZ0JBQUksZ0JBQ0EsZUFBZSxZQUFZLFdBQVosQ0FBd0IsT0FBeEIsQ0FBZ0MsT0FBaEMsSUFBMkMsQ0FBQyxDQUQvRDtBQUVBLGdCQUFJLGNBQ0EsTUFBTSxXQUFOLElBQ0MsZUFBZSxTQUFmLENBQXlCLFVBQXpCLEtBQ0csTUFBTSx1QkFBTixHQUFnQyxDQUh4Qzs7QUFLQSxnQkFDSSxpQkFBaUIsSUFBakIsQ0FBc0IsT0FBTyxRQUFQLENBQWdCLElBQXRDLEtBQ0EsTUFBTSxXQUROLElBRUEsZUFBZSxTQUFmLENBQXlCLGVBQXpCLENBSEosRUFJRTtBQUNFLG9CQUFJLFFBQUosRUFBYztBQUNWLDJCQUFPLFdBQVA7QUFDSCxpQkFGRCxNQUVPLElBQ0gsTUFBTSxVQUFOLElBQW9CLENBQXBCLElBQ0EsTUFBTSxXQUFOLElBQXFCLENBRHJCLElBRUEsRUFDSSxlQUFlLFNBQWYsQ0FBeUIsVUFBekIsS0FDQSxNQUFNLGtCQUZWLENBSEcsRUFPTDtBQUNFLDJCQUFPLE9BQVA7QUFDSDtBQUNELHVCQUFPLGNBQVA7QUFDSDs7QUFFRCxnQkFBSSxhQUFKLEVBQW1CO0FBQ2YsdUJBQU8sVUFBUDtBQUNIOztBQUVELGdCQUFJLFlBQVksQ0FBQyxXQUFqQixFQUE4QjtBQUMxQix1QkFBTyxRQUFQO0FBQ0g7O0FBRUQsZ0JBQUksV0FBSixFQUFpQjtBQUNiLG9CQUFJLE1BQU0sSUFBTixDQUFXLEVBQVgsS0FBa0IsYUFBdEIsRUFBcUM7QUFDakMsMkJBQU8sTUFBUDtBQUNIOztBQUVELHVCQUFPLFFBQVA7QUFDSDs7QUFFRCxnQkFBSSxNQUFNLFVBQU4sSUFBb0IsZUFBZSxTQUFmLENBQXlCLGVBQXpCLENBQXhCLEVBQW1FO0FBQy9ELHVCQUFPLE1BQVA7QUFDSDs7QUFFRCxtQkFBTyxhQUFQO0FBQ0g7OztxQ0FFbUIsSyxFQUFPLFcsRUFBYTtBQUNwQyxtQkFBTyxlQUFlLFlBQVksVUFBWixDQUF1QixPQUF2QixDQUErQixNQUFNLEVBQXJDLElBQTJDLENBQUMsQ0FBbEU7QUFDSDs7OzJDQUV5QixLLEVBQU8sVyxFQUFhO0FBQzFDLG1CQUNJLGVBQWUsWUFBWSxnQkFBWixDQUE2QixPQUE3QixDQUFxQyxNQUFNLEVBQTNDLElBQWlELENBQUMsQ0FEckU7QUFHSDs7O21DQUVpQixLLEVBQU8sVyxFQUFhO0FBQ2xDO0FBQ0EsbUJBQ0ssZUFDRyxZQUFZLFdBRGYsSUFFRyxZQUFZLFdBQVosQ0FBd0IsTUFBTSxFQUE5QixDQUZKLElBR0EsQ0FKSjtBQU1IOzs7Ozs7cUJBR1UsVTs7Ozs7Ozs7QUNsRmY7Ozs7O0FBS0EsSUFBTSw0QkFBNEIsU0FBNUIseUJBQTRCLENBQVMsR0FBVCxFQUFjO0FBQzVDLFNBQU8sbUJBQW1CLEdBQW5CLEVBQXdCLE9BQXhCLENBQWdDLFdBQWhDLEVBQTZDLE1BQTdDLENBQVA7QUFDSCxDQUZEOztxQkFJZSx5Qjs7Ozs7Ozs7QUNUZixJQUFNLE9BQU8sT0FBTyxNQUFQLENBQWM7QUFDdkIsU0FBSyxDQURrQjtBQUV2QixXQUFPLEVBRmdCO0FBR3ZCLFVBQU0sRUFIaUI7QUFJdkIsUUFBSSxFQUptQjtBQUt2QixXQUFPLEVBTGdCO0FBTXZCLFVBQU0sRUFOaUI7QUFPdkIsV0FBTyxFQVBnQjtBQVF2QixTQUFLO0FBUmtCLENBQWQsQ0FBYjtxQkFVZSxJOzs7Ozs7Ozs7OztBQ1ZmOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7SUFFcUIsc0I7QUFDakIsb0NBQVksVUFBWixFQUF3QixHQUF4QixFQUE2QixLQUE3QixFQUFvQztBQUFBOztBQUNoQyxZQUFJLE9BQU8seUJBQVksR0FBWixDQUFnQixRQUFoQixFQUEwQixDQUExQixDQUFYO0FBQ0EsYUFBSyxTQUFMLEdBQWlCLE9BQU8sS0FBSyxLQUFMLENBQVcsR0FBWCxDQUFQLEdBQXlCLEVBQTFDO0FBQ0EsYUFBSyxNQUFMLEdBQWMsS0FBSyxTQUFMLENBQWUsQ0FBZixLQUFxQixJQUFuQztBQUNBLGFBQUssT0FBTCxHQUFlLEtBQUssU0FBTCxDQUFlLENBQWYsS0FBcUIsSUFBcEM7QUFDQSxhQUFLLE1BQUwsR0FBYyxLQUFLLFNBQUwsQ0FBZSxDQUFmLEtBQXFCLENBQW5DO0FBQ0EsYUFBSyxLQUFMLEdBQWEsU0FBUyxJQUF0QjtBQUNBLGFBQUssVUFBTCxHQUFrQixXQUFXLE1BQTdCO0FBQ0EsYUFBSyxHQUFMLEdBQVcsR0FBWDtBQUNIOztBQUVEOzs7Ozt3Q0FDZ0I7QUFBQTs7QUFDWixnQkFBSSxDQUFDLEtBQUssTUFBTixJQUFnQixDQUFDLEtBQUssT0FBMUIsRUFBbUM7QUFDL0I7QUFDSDs7QUFFRCxnQkFDSSxDQUFDLEtBQUssS0FBTixJQUNDLEtBQUssS0FBTCxJQUFjLEtBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxJQUFmLE1BQXlCLEtBQUssT0FGakQsRUFHRTtBQUNFLHFCQUFLLEtBQUwsR0FBYSxFQUFFLElBQUYsQ0FDVCxLQUFLLFVBREksRUFFVCxVQUFDLEtBQUQ7QUFBQSwyQkFBVyxNQUFNLEVBQU4sS0FBYSxNQUFLLE9BQTdCO0FBQUEsaUJBRlMsQ0FBYjtBQUlIOztBQUVELGdCQUFJLGVBQWUsSUFBSSx5QkFBSixDQUFpQixFQUFFLEtBQUssS0FBSyxHQUFaLEVBQWpCLENBQW5COztBQUVBLGdCQUFJLEtBQUssS0FBVCxFQUFnQjtBQUNaO0FBQ0EseUNBQVksTUFBWixDQUFtQixRQUFuQjtBQUNBLHFCQUFLLEtBQUwsQ0FBVyxHQUFYLENBQWUsZ0JBQWYsRUFBaUMsS0FBSyxNQUF0QztBQUNBLDZCQUFhLE9BQWIsQ0FBcUIsS0FBSyxNQUExQixFQUFrQyxLQUFLLEtBQXZDO0FBQ0gsYUFMRCxNQUtPO0FBQ0g7QUFDQSxvQkFBSSxRQUFRLElBQUksa0JBQUosRUFBWjtBQUNBLG9CQUFJLFVBQVUsSUFBSSxPQUFKLENBQVksVUFBQyxPQUFELEVBQVUsTUFBVixFQUFxQjtBQUMzQywwQkFBTSxhQUFOLENBQW9CLE1BQUssT0FBekIsRUFBa0MsT0FBbEMsRUFBMkMsTUFBM0M7QUFDSCxpQkFGYSxDQUFkOztBQUlBLHdCQUFRLElBQVIsQ0FBYSxZQUFNO0FBQ2YsMEJBQUssS0FBTCxJQUFjLE1BQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxnQkFBZixFQUFpQyxNQUFLLE1BQXRDLENBQWQ7QUFDQSxpQ0FBYSxPQUFiLENBQXFCLE1BQUssTUFBMUIsRUFBa0MsS0FBbEM7QUFDQSw2Q0FBWSxNQUFaLENBQW1CLFFBQW5CO0FBQ0gsaUJBSkQ7QUFLSDtBQUNKOzs7Ozs7cUJBaERnQixzQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qISBodHRwczovL210aHMuYmUvaGUgdjEuMi4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSxcblx0Ly8gYW5kIHVzZSBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0Ly8gQWxsIGFzdHJhbCBzeW1ib2xzLlxuXHR2YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblx0Ly8gQWxsIEFTQ0lJIHN5bWJvbHMgKG5vdCBqdXN0IHByaW50YWJsZSBBU0NJSSkgZXhjZXB0IHRob3NlIGxpc3RlZCBpbiB0aGVcblx0Ly8gZmlyc3QgY29sdW1uIG9mIHRoZSBvdmVycmlkZXMgdGFibGUuXG5cdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3RhYmxlLWNoYXJyZWYtb3ZlcnJpZGVzXG5cdHZhciByZWdleEFzY2lpV2hpdGVsaXN0ID0gL1tcXHgwMS1cXHg3Rl0vZztcblx0Ly8gQWxsIEJNUCBzeW1ib2xzIHRoYXQgYXJlIG5vdCBBU0NJSSBuZXdsaW5lcywgcHJpbnRhYmxlIEFTQ0lJIHN5bWJvbHMsIG9yXG5cdC8vIGNvZGUgcG9pbnRzIGxpc3RlZCBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBvdmVycmlkZXMgdGFibGUgb25cblx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjdGFibGUtY2hhcnJlZi1vdmVycmlkZXMuXG5cdHZhciByZWdleEJtcFdoaXRlbGlzdCA9IC9bXFx4MDEtXFx0XFx4MEJcXGZcXHgwRS1cXHgxRlxceDdGXFx4ODFcXHg4RFxceDhGXFx4OTBcXHg5RFxceEEwLVxcdUZGRkZdL2c7XG5cblx0dmFyIHJlZ2V4RW5jb2RlTm9uQXNjaWkgPSAvPFxcdTIwRDJ8PVxcdTIwRTV8PlxcdTIwRDJ8XFx1MjA1RlxcdTIwMEF8XFx1MjE5RFxcdTAzMzh8XFx1MjIwMlxcdTAzMzh8XFx1MjIyMFxcdTIwRDJ8XFx1MjIyOVxcdUZFMDB8XFx1MjIyQVxcdUZFMDB8XFx1MjIzQ1xcdTIwRDJ8XFx1MjIzRFxcdTAzMzF8XFx1MjIzRVxcdTAzMzN8XFx1MjI0MlxcdTAzMzh8XFx1MjI0QlxcdTAzMzh8XFx1MjI0RFxcdTIwRDJ8XFx1MjI0RVxcdTAzMzh8XFx1MjI0RlxcdTAzMzh8XFx1MjI1MFxcdTAzMzh8XFx1MjI2MVxcdTIwRTV8XFx1MjI2NFxcdTIwRDJ8XFx1MjI2NVxcdTIwRDJ8XFx1MjI2NlxcdTAzMzh8XFx1MjI2N1xcdTAzMzh8XFx1MjI2OFxcdUZFMDB8XFx1MjI2OVxcdUZFMDB8XFx1MjI2QVxcdTAzMzh8XFx1MjI2QVxcdTIwRDJ8XFx1MjI2QlxcdTAzMzh8XFx1MjI2QlxcdTIwRDJ8XFx1MjI3RlxcdTAzMzh8XFx1MjI4MlxcdTIwRDJ8XFx1MjI4M1xcdTIwRDJ8XFx1MjI4QVxcdUZFMDB8XFx1MjI4QlxcdUZFMDB8XFx1MjI4RlxcdTAzMzh8XFx1MjI5MFxcdTAzMzh8XFx1MjI5M1xcdUZFMDB8XFx1MjI5NFxcdUZFMDB8XFx1MjJCNFxcdTIwRDJ8XFx1MjJCNVxcdTIwRDJ8XFx1MjJEOFxcdTAzMzh8XFx1MjJEOVxcdTAzMzh8XFx1MjJEQVxcdUZFMDB8XFx1MjJEQlxcdUZFMDB8XFx1MjJGNVxcdTAzMzh8XFx1MjJGOVxcdTAzMzh8XFx1MjkzM1xcdTAzMzh8XFx1MjlDRlxcdTAzMzh8XFx1MjlEMFxcdTAzMzh8XFx1MkE2RFxcdTAzMzh8XFx1MkE3MFxcdTAzMzh8XFx1MkE3RFxcdTAzMzh8XFx1MkE3RVxcdTAzMzh8XFx1MkFBMVxcdTAzMzh8XFx1MkFBMlxcdTAzMzh8XFx1MkFBQ1xcdUZFMDB8XFx1MkFBRFxcdUZFMDB8XFx1MkFBRlxcdTAzMzh8XFx1MkFCMFxcdTAzMzh8XFx1MkFDNVxcdTAzMzh8XFx1MkFDNlxcdTAzMzh8XFx1MkFDQlxcdUZFMDB8XFx1MkFDQ1xcdUZFMDB8XFx1MkFGRFxcdTIwRTV8W1xceEEwLVxcdTAxMTNcXHUwMTE2LVxcdTAxMjJcXHUwMTI0LVxcdTAxMkJcXHUwMTJFLVxcdTAxNERcXHUwMTUwLVxcdTAxN0VcXHUwMTkyXFx1MDFCNVxcdTAxRjVcXHUwMjM3XFx1MDJDNlxcdTAyQzdcXHUwMkQ4LVxcdTAyRERcXHUwMzExXFx1MDM5MS1cXHUwM0ExXFx1MDNBMy1cXHUwM0E5XFx1MDNCMS1cXHUwM0M5XFx1MDNEMVxcdTAzRDJcXHUwM0Q1XFx1MDNENlxcdTAzRENcXHUwM0REXFx1MDNGMFxcdTAzRjFcXHUwM0Y1XFx1MDNGNlxcdTA0MDEtXFx1MDQwQ1xcdTA0MEUtXFx1MDQ0RlxcdTA0NTEtXFx1MDQ1Q1xcdTA0NUVcXHUwNDVGXFx1MjAwMi1cXHUyMDA1XFx1MjAwNy1cXHUyMDEwXFx1MjAxMy1cXHUyMDE2XFx1MjAxOC1cXHUyMDFBXFx1MjAxQy1cXHUyMDFFXFx1MjAyMC1cXHUyMDIyXFx1MjAyNVxcdTIwMjZcXHUyMDMwLVxcdTIwMzVcXHUyMDM5XFx1MjAzQVxcdTIwM0VcXHUyMDQxXFx1MjA0M1xcdTIwNDRcXHUyMDRGXFx1MjA1N1xcdTIwNUYtXFx1MjA2M1xcdTIwQUNcXHUyMERCXFx1MjBEQ1xcdTIxMDJcXHUyMTA1XFx1MjEwQS1cXHUyMTEzXFx1MjExNS1cXHUyMTFFXFx1MjEyMlxcdTIxMjRcXHUyMTI3LVxcdTIxMjlcXHUyMTJDXFx1MjEyRFxcdTIxMkYtXFx1MjEzMVxcdTIxMzMtXFx1MjEzOFxcdTIxNDUtXFx1MjE0OFxcdTIxNTMtXFx1MjE1RVxcdTIxOTAtXFx1MjE5QlxcdTIxOUQtXFx1MjFBN1xcdTIxQTktXFx1MjFBRVxcdTIxQjAtXFx1MjFCM1xcdTIxQjUtXFx1MjFCN1xcdTIxQkEtXFx1MjFEQlxcdTIxRERcXHUyMUU0XFx1MjFFNVxcdTIxRjVcXHUyMUZELVxcdTIyMDVcXHUyMjA3LVxcdTIyMDlcXHUyMjBCXFx1MjIwQ1xcdTIyMEYtXFx1MjIxNFxcdTIyMTYtXFx1MjIxOFxcdTIyMUFcXHUyMjFELVxcdTIyMzhcXHUyMjNBLVxcdTIyNTdcXHUyMjU5XFx1MjI1QVxcdTIyNUNcXHUyMjVGLVxcdTIyNjJcXHUyMjY0LVxcdTIyOEJcXHUyMjhELVxcdTIyOUJcXHUyMjlELVxcdTIyQTVcXHUyMkE3LVxcdTIyQjBcXHUyMkIyLVxcdTIyQkJcXHUyMkJELVxcdTIyREJcXHUyMkRFLVxcdTIyRTNcXHUyMkU2LVxcdTIyRjdcXHUyMkY5LVxcdTIyRkVcXHUyMzA1XFx1MjMwNlxcdTIzMDgtXFx1MjMxMFxcdTIzMTJcXHUyMzEzXFx1MjMxNVxcdTIzMTZcXHUyMzFDLVxcdTIzMUZcXHUyMzIyXFx1MjMyM1xcdTIzMkRcXHUyMzJFXFx1MjMzNlxcdTIzM0RcXHUyMzNGXFx1MjM3Q1xcdTIzQjBcXHUyM0IxXFx1MjNCNC1cXHUyM0I2XFx1MjNEQy1cXHUyM0RGXFx1MjNFMlxcdTIzRTdcXHUyNDIzXFx1MjRDOFxcdTI1MDBcXHUyNTAyXFx1MjUwQ1xcdTI1MTBcXHUyNTE0XFx1MjUxOFxcdTI1MUNcXHUyNTI0XFx1MjUyQ1xcdTI1MzRcXHUyNTNDXFx1MjU1MC1cXHUyNTZDXFx1MjU4MFxcdTI1ODRcXHUyNTg4XFx1MjU5MS1cXHUyNTkzXFx1MjVBMVxcdTI1QUFcXHUyNUFCXFx1MjVBRFxcdTI1QUVcXHUyNUIxXFx1MjVCMy1cXHUyNUI1XFx1MjVCOFxcdTI1QjlcXHUyNUJELVxcdTI1QkZcXHUyNUMyXFx1MjVDM1xcdTI1Q0FcXHUyNUNCXFx1MjVFQ1xcdTI1RUZcXHUyNUY4LVxcdTI1RkNcXHUyNjA1XFx1MjYwNlxcdTI2MEVcXHUyNjQwXFx1MjY0MlxcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjZBXFx1MjY2RC1cXHUyNjZGXFx1MjcxM1xcdTI3MTdcXHUyNzIwXFx1MjczNlxcdTI3NThcXHUyNzcyXFx1Mjc3M1xcdTI3QzhcXHUyN0M5XFx1MjdFNi1cXHUyN0VEXFx1MjdGNS1cXHUyN0ZBXFx1MjdGQ1xcdTI3RkZcXHUyOTAyLVxcdTI5MDVcXHUyOTBDLVxcdTI5MTNcXHUyOTE2XFx1MjkxOS1cXHUyOTIwXFx1MjkyMy1cXHUyOTJBXFx1MjkzM1xcdTI5MzUtXFx1MjkzOVxcdTI5M0NcXHUyOTNEXFx1Mjk0NVxcdTI5NDgtXFx1Mjk0QlxcdTI5NEUtXFx1Mjk3NlxcdTI5NzhcXHUyOTc5XFx1Mjk3Qi1cXHUyOTdGXFx1Mjk4NVxcdTI5ODZcXHUyOThCLVxcdTI5OTZcXHUyOTlBXFx1Mjk5Q1xcdTI5OURcXHUyOUE0LVxcdTI5QjdcXHUyOUI5XFx1MjlCQlxcdTI5QkNcXHUyOUJFLVxcdTI5QzVcXHUyOUM5XFx1MjlDRC1cXHUyOUQwXFx1MjlEQy1cXHUyOURFXFx1MjlFMy1cXHUyOUU1XFx1MjlFQlxcdTI5RjRcXHUyOUY2XFx1MkEwMC1cXHUyQTAyXFx1MkEwNFxcdTJBMDZcXHUyQTBDXFx1MkEwRFxcdTJBMTAtXFx1MkExN1xcdTJBMjItXFx1MkEyN1xcdTJBMjlcXHUyQTJBXFx1MkEyRC1cXHUyQTMxXFx1MkEzMy1cXHUyQTNDXFx1MkEzRlxcdTJBNDBcXHUyQTQyLVxcdTJBNERcXHUyQTUwXFx1MkE1My1cXHUyQTU4XFx1MkE1QS1cXHUyQTVEXFx1MkE1RlxcdTJBNjZcXHUyQTZBXFx1MkE2RC1cXHUyQTc1XFx1MkE3Ny1cXHUyQTlBXFx1MkE5RC1cXHUyQUEyXFx1MkFBNC1cXHUyQUIwXFx1MkFCMy1cXHUyQUM4XFx1MkFDQlxcdTJBQ0NcXHUyQUNGLVxcdTJBREJcXHUyQUU0XFx1MkFFNi1cXHUyQUU5XFx1MkFFQi1cXHUyQUYzXFx1MkFGRFxcdUZCMDAtXFx1RkIwNF18XFx1RDgzNVtcXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1REQwNFxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERDZCXS9nO1xuXHR2YXIgZW5jb2RlTWFwID0geydcXHhBRCc6J3NoeScsJ1xcdTIwMEMnOid6d25qJywnXFx1MjAwRCc6J3p3aicsJ1xcdTIwMEUnOidscm0nLCdcXHUyMDYzJzonaWMnLCdcXHUyMDYyJzonaXQnLCdcXHUyMDYxJzonYWYnLCdcXHUyMDBGJzoncmxtJywnXFx1MjAwQic6J1plcm9XaWR0aFNwYWNlJywnXFx1MjA2MCc6J05vQnJlYWsnLCdcXHUwMzExJzonRG93bkJyZXZlJywnXFx1MjBEQic6J3Rkb3QnLCdcXHUyMERDJzonRG90RG90JywnXFx0JzonVGFiJywnXFxuJzonTmV3TGluZScsJ1xcdTIwMDgnOidwdW5jc3AnLCdcXHUyMDVGJzonTWVkaXVtU3BhY2UnLCdcXHUyMDA5JzondGhpbnNwJywnXFx1MjAwQSc6J2hhaXJzcCcsJ1xcdTIwMDQnOidlbXNwMTMnLCdcXHUyMDAyJzonZW5zcCcsJ1xcdTIwMDUnOidlbXNwMTQnLCdcXHUyMDAzJzonZW1zcCcsJ1xcdTIwMDcnOidudW1zcCcsJ1xceEEwJzonbmJzcCcsJ1xcdTIwNUZcXHUyMDBBJzonVGhpY2tTcGFjZScsJ1xcdTIwM0UnOidvbGluZScsJ18nOidsb3diYXInLCdcXHUyMDEwJzonZGFzaCcsJ1xcdTIwMTMnOiduZGFzaCcsJ1xcdTIwMTQnOidtZGFzaCcsJ1xcdTIwMTUnOidob3JiYXInLCcsJzonY29tbWEnLCc7Jzonc2VtaScsJ1xcdTIwNEYnOidic2VtaScsJzonOidjb2xvbicsJ1xcdTJBNzQnOidDb2xvbmUnLCchJzonZXhjbCcsJ1xceEExJzonaWV4Y2wnLCc/JzoncXVlc3QnLCdcXHhCRic6J2lxdWVzdCcsJy4nOidwZXJpb2QnLCdcXHUyMDI1JzonbmxkcicsJ1xcdTIwMjYnOidtbGRyJywnXFx4QjcnOidtaWRkb3QnLCdcXCcnOidhcG9zJywnXFx1MjAxOCc6J2xzcXVvJywnXFx1MjAxOSc6J3JzcXVvJywnXFx1MjAxQSc6J3NicXVvJywnXFx1MjAzOSc6J2xzYXF1bycsJ1xcdTIwM0EnOidyc2FxdW8nLCdcIic6J3F1b3QnLCdcXHUyMDFDJzonbGRxdW8nLCdcXHUyMDFEJzoncmRxdW8nLCdcXHUyMDFFJzonYmRxdW8nLCdcXHhBQic6J2xhcXVvJywnXFx4QkInOidyYXF1bycsJygnOidscGFyJywnKSc6J3JwYXInLCdbJzonbHNxYicsJ10nOidyc3FiJywneyc6J2xjdWInLCd9JzoncmN1YicsJ1xcdTIzMDgnOidsY2VpbCcsJ1xcdTIzMDknOidyY2VpbCcsJ1xcdTIzMEEnOidsZmxvb3InLCdcXHUyMzBCJzoncmZsb29yJywnXFx1Mjk4NSc6J2xvcGFyJywnXFx1Mjk4Nic6J3JvcGFyJywnXFx1Mjk4Qic6J2xicmtlJywnXFx1Mjk4Qyc6J3JicmtlJywnXFx1Mjk4RCc6J2xicmtzbHUnLCdcXHUyOThFJzoncmJya3NsZCcsJ1xcdTI5OEYnOidsYnJrc2xkJywnXFx1Mjk5MCc6J3JicmtzbHUnLCdcXHUyOTkxJzonbGFuZ2QnLCdcXHUyOTkyJzoncmFuZ2QnLCdcXHUyOTkzJzonbHBhcmx0JywnXFx1Mjk5NCc6J3JwYXJndCcsJ1xcdTI5OTUnOidndGxQYXInLCdcXHUyOTk2JzonbHRyUGFyJywnXFx1MjdFNic6J2xvYnJrJywnXFx1MjdFNyc6J3JvYnJrJywnXFx1MjdFOCc6J2xhbmcnLCdcXHUyN0U5JzoncmFuZycsJ1xcdTI3RUEnOidMYW5nJywnXFx1MjdFQic6J1JhbmcnLCdcXHUyN0VDJzonbG9hbmcnLCdcXHUyN0VEJzoncm9hbmcnLCdcXHUyNzcyJzonbGJicmsnLCdcXHUyNzczJzoncmJicmsnLCdcXHUyMDE2JzonVmVydCcsJ1xceEE3Jzonc2VjdCcsJ1xceEI2JzoncGFyYScsJ0AnOidjb21tYXQnLCcqJzonYXN0JywnLyc6J3NvbCcsJ3VuZGVmaW5lZCc6bnVsbCwnJic6J2FtcCcsJyMnOidudW0nLCclJzoncGVyY250JywnXFx1MjAzMCc6J3Blcm1pbCcsJ1xcdTIwMzEnOidwZXJ0ZW5rJywnXFx1MjAyMCc6J2RhZ2dlcicsJ1xcdTIwMjEnOidEYWdnZXInLCdcXHUyMDIyJzonYnVsbCcsJ1xcdTIwNDMnOidoeWJ1bGwnLCdcXHUyMDMyJzoncHJpbWUnLCdcXHUyMDMzJzonUHJpbWUnLCdcXHUyMDM0JzondHByaW1lJywnXFx1MjA1Nyc6J3FwcmltZScsJ1xcdTIwMzUnOidicHJpbWUnLCdcXHUyMDQxJzonY2FyZXQnLCdgJzonZ3JhdmUnLCdcXHhCNCc6J2FjdXRlJywnXFx1MDJEQyc6J3RpbGRlJywnXic6J0hhdCcsJ1xceEFGJzonbWFjcicsJ1xcdTAyRDgnOidicmV2ZScsJ1xcdTAyRDknOidkb3QnLCdcXHhBOCc6J2RpZScsJ1xcdTAyREEnOidyaW5nJywnXFx1MDJERCc6J2RibGFjJywnXFx4QjgnOidjZWRpbCcsJ1xcdTAyREInOidvZ29uJywnXFx1MDJDNic6J2NpcmMnLCdcXHUwMkM3JzonY2Fyb24nLCdcXHhCMCc6J2RlZycsJ1xceEE5JzonY29weScsJ1xceEFFJzoncmVnJywnXFx1MjExNyc6J2NvcHlzcicsJ1xcdTIxMTgnOid3cCcsJ1xcdTIxMUUnOidyeCcsJ1xcdTIxMjcnOidtaG8nLCdcXHUyMTI5JzonaWlvdGEnLCdcXHUyMTkwJzonbGFycicsJ1xcdTIxOUEnOidubGFycicsJ1xcdTIxOTInOidyYXJyJywnXFx1MjE5Qic6J25yYXJyJywnXFx1MjE5MSc6J3VhcnInLCdcXHUyMTkzJzonZGFycicsJ1xcdTIxOTQnOidoYXJyJywnXFx1MjFBRSc6J25oYXJyJywnXFx1MjE5NSc6J3ZhcnInLCdcXHUyMTk2JzonbndhcnInLCdcXHUyMTk3JzonbmVhcnInLCdcXHUyMTk4Jzonc2VhcnInLCdcXHUyMTk5Jzonc3dhcnInLCdcXHUyMTlEJzoncmFycncnLCdcXHUyMTlEXFx1MDMzOCc6J25yYXJydycsJ1xcdTIxOUUnOidMYXJyJywnXFx1MjE5Ric6J1VhcnInLCdcXHUyMUEwJzonUmFycicsJ1xcdTIxQTEnOidEYXJyJywnXFx1MjFBMic6J2xhcnJ0bCcsJ1xcdTIxQTMnOidyYXJydGwnLCdcXHUyMUE0JzonbWFwc3RvbGVmdCcsJ1xcdTIxQTUnOidtYXBzdG91cCcsJ1xcdTIxQTYnOidtYXAnLCdcXHUyMUE3JzonbWFwc3RvZG93bicsJ1xcdTIxQTknOidsYXJyaGsnLCdcXHUyMUFBJzoncmFycmhrJywnXFx1MjFBQic6J2xhcnJscCcsJ1xcdTIxQUMnOidyYXJybHAnLCdcXHUyMUFEJzonaGFycncnLCdcXHUyMUIwJzonbHNoJywnXFx1MjFCMSc6J3JzaCcsJ1xcdTIxQjInOidsZHNoJywnXFx1MjFCMyc6J3Jkc2gnLCdcXHUyMUI1JzonY3JhcnInLCdcXHUyMUI2JzonY3VsYXJyJywnXFx1MjFCNyc6J2N1cmFycicsJ1xcdTIxQkEnOidvbGFycicsJ1xcdTIxQkInOidvcmFycicsJ1xcdTIxQkMnOidsaGFydScsJ1xcdTIxQkQnOidsaGFyZCcsJ1xcdTIxQkUnOid1aGFycicsJ1xcdTIxQkYnOid1aGFybCcsJ1xcdTIxQzAnOidyaGFydScsJ1xcdTIxQzEnOidyaGFyZCcsJ1xcdTIxQzInOidkaGFycicsJ1xcdTIxQzMnOidkaGFybCcsJ1xcdTIxQzQnOidybGFycicsJ1xcdTIxQzUnOid1ZGFycicsJ1xcdTIxQzYnOidscmFycicsJ1xcdTIxQzcnOidsbGFycicsJ1xcdTIxQzgnOid1dWFycicsJ1xcdTIxQzknOidycmFycicsJ1xcdTIxQ0EnOidkZGFycicsJ1xcdTIxQ0InOidscmhhcicsJ1xcdTIxQ0MnOidybGhhcicsJ1xcdTIxRDAnOidsQXJyJywnXFx1MjFDRCc6J25sQXJyJywnXFx1MjFEMSc6J3VBcnInLCdcXHUyMUQyJzonckFycicsJ1xcdTIxQ0YnOiduckFycicsJ1xcdTIxRDMnOidkQXJyJywnXFx1MjFENCc6J2lmZicsJ1xcdTIxQ0UnOiduaEFycicsJ1xcdTIxRDUnOid2QXJyJywnXFx1MjFENic6J253QXJyJywnXFx1MjFENyc6J25lQXJyJywnXFx1MjFEOCc6J3NlQXJyJywnXFx1MjFEOSc6J3N3QXJyJywnXFx1MjFEQSc6J2xBYXJyJywnXFx1MjFEQic6J3JBYXJyJywnXFx1MjFERCc6J3ppZ3JhcnInLCdcXHUyMUU0JzonbGFycmInLCdcXHUyMUU1JzoncmFycmInLCdcXHUyMUY1JzonZHVhcnInLCdcXHUyMUZEJzonbG9hcnInLCdcXHUyMUZFJzoncm9hcnInLCdcXHUyMUZGJzonaG9hcnInLCdcXHUyMjAwJzonZm9yYWxsJywnXFx1MjIwMSc6J2NvbXAnLCdcXHUyMjAyJzoncGFydCcsJ1xcdTIyMDJcXHUwMzM4JzonbnBhcnQnLCdcXHUyMjAzJzonZXhpc3QnLCdcXHUyMjA0JzonbmV4aXN0JywnXFx1MjIwNSc6J2VtcHR5JywnXFx1MjIwNyc6J0RlbCcsJ1xcdTIyMDgnOidpbicsJ1xcdTIyMDknOidub3RpbicsJ1xcdTIyMEInOiduaScsJ1xcdTIyMEMnOidub3RuaScsJ1xcdTAzRjYnOidiZXBzaScsJ1xcdTIyMEYnOidwcm9kJywnXFx1MjIxMCc6J2NvcHJvZCcsJ1xcdTIyMTEnOidzdW0nLCcrJzoncGx1cycsJ1xceEIxJzoncG0nLCdcXHhGNyc6J2RpdicsJ1xceEQ3JzondGltZXMnLCc8JzonbHQnLCdcXHUyMjZFJzonbmx0JywnPFxcdTIwRDInOidudmx0JywnPSc6J2VxdWFscycsJ1xcdTIyNjAnOiduZScsJz1cXHUyMEU1JzonYm5lJywnXFx1MkE3NSc6J0VxdWFsJywnPic6J2d0JywnXFx1MjI2Ric6J25ndCcsJz5cXHUyMEQyJzonbnZndCcsJ1xceEFDJzonbm90JywnfCc6J3ZlcnQnLCdcXHhBNic6J2JydmJhcicsJ1xcdTIyMTInOidtaW51cycsJ1xcdTIyMTMnOidtcCcsJ1xcdTIyMTQnOidwbHVzZG8nLCdcXHUyMDQ0JzonZnJhc2wnLCdcXHUyMjE2Jzonc2V0bW4nLCdcXHUyMjE3JzonbG93YXN0JywnXFx1MjIxOCc6J2NvbXBmbicsJ1xcdTIyMUEnOidTcXJ0JywnXFx1MjIxRCc6J3Byb3AnLCdcXHUyMjFFJzonaW5maW4nLCdcXHUyMjFGJzonYW5ncnQnLCdcXHUyMjIwJzonYW5nJywnXFx1MjIyMFxcdTIwRDInOiduYW5nJywnXFx1MjIyMSc6J2FuZ21zZCcsJ1xcdTIyMjInOidhbmdzcGgnLCdcXHUyMjIzJzonbWlkJywnXFx1MjIyNCc6J25taWQnLCdcXHUyMjI1JzoncGFyJywnXFx1MjIyNic6J25wYXInLCdcXHUyMjI3JzonYW5kJywnXFx1MjIyOCc6J29yJywnXFx1MjIyOSc6J2NhcCcsJ1xcdTIyMjlcXHVGRTAwJzonY2FwcycsJ1xcdTIyMkEnOidjdXAnLCdcXHUyMjJBXFx1RkUwMCc6J2N1cHMnLCdcXHUyMjJCJzonaW50JywnXFx1MjIyQyc6J0ludCcsJ1xcdTIyMkQnOid0aW50JywnXFx1MkEwQyc6J3FpbnQnLCdcXHUyMjJFJzonb2ludCcsJ1xcdTIyMkYnOidDb25pbnQnLCdcXHUyMjMwJzonQ2NvbmludCcsJ1xcdTIyMzEnOidjd2ludCcsJ1xcdTIyMzInOidjd2NvbmludCcsJ1xcdTIyMzMnOidhd2NvbmludCcsJ1xcdTIyMzQnOid0aGVyZTQnLCdcXHUyMjM1JzonYmVjYXVzJywnXFx1MjIzNic6J3JhdGlvJywnXFx1MjIzNyc6J0NvbG9uJywnXFx1MjIzOCc6J21pbnVzZCcsJ1xcdTIyM0EnOidtRERvdCcsJ1xcdTIyM0InOidob210aHQnLCdcXHUyMjNDJzonc2ltJywnXFx1MjI0MSc6J25zaW0nLCdcXHUyMjNDXFx1MjBEMic6J252c2ltJywnXFx1MjIzRCc6J2JzaW0nLCdcXHUyMjNEXFx1MDMzMSc6J3JhY2UnLCdcXHUyMjNFJzonYWMnLCdcXHUyMjNFXFx1MDMzMyc6J2FjRScsJ1xcdTIyM0YnOidhY2QnLCdcXHUyMjQwJzond3InLCdcXHUyMjQyJzonZXNpbScsJ1xcdTIyNDJcXHUwMzM4JzonbmVzaW0nLCdcXHUyMjQzJzonc2ltZScsJ1xcdTIyNDQnOiduc2ltZScsJ1xcdTIyNDUnOidjb25nJywnXFx1MjI0Nyc6J25jb25nJywnXFx1MjI0Nic6J3NpbW5lJywnXFx1MjI0OCc6J2FwJywnXFx1MjI0OSc6J25hcCcsJ1xcdTIyNEEnOidhcGUnLCdcXHUyMjRCJzonYXBpZCcsJ1xcdTIyNEJcXHUwMzM4JzonbmFwaWQnLCdcXHUyMjRDJzonYmNvbmcnLCdcXHUyMjREJzonQ3VwQ2FwJywnXFx1MjI2RCc6J05vdEN1cENhcCcsJ1xcdTIyNERcXHUyMEQyJzonbnZhcCcsJ1xcdTIyNEUnOididW1wJywnXFx1MjI0RVxcdTAzMzgnOiduYnVtcCcsJ1xcdTIyNEYnOididW1wZScsJ1xcdTIyNEZcXHUwMzM4JzonbmJ1bXBlJywnXFx1MjI1MCc6J2RvdGVxJywnXFx1MjI1MFxcdTAzMzgnOiduZWRvdCcsJ1xcdTIyNTEnOidlRG90JywnXFx1MjI1Mic6J2VmRG90JywnXFx1MjI1Myc6J2VyRG90JywnXFx1MjI1NCc6J2NvbG9uZScsJ1xcdTIyNTUnOidlY29sb24nLCdcXHUyMjU2JzonZWNpcicsJ1xcdTIyNTcnOidjaXJlJywnXFx1MjI1OSc6J3dlZGdlcScsJ1xcdTIyNUEnOid2ZWVlcScsJ1xcdTIyNUMnOid0cmllJywnXFx1MjI1Ric6J2VxdWVzdCcsJ1xcdTIyNjEnOidlcXVpdicsJ1xcdTIyNjInOiduZXF1aXYnLCdcXHUyMjYxXFx1MjBFNSc6J2JuZXF1aXYnLCdcXHUyMjY0JzonbGUnLCdcXHUyMjcwJzonbmxlJywnXFx1MjI2NFxcdTIwRDInOidudmxlJywnXFx1MjI2NSc6J2dlJywnXFx1MjI3MSc6J25nZScsJ1xcdTIyNjVcXHUyMEQyJzonbnZnZScsJ1xcdTIyNjYnOidsRScsJ1xcdTIyNjZcXHUwMzM4JzonbmxFJywnXFx1MjI2Nyc6J2dFJywnXFx1MjI2N1xcdTAzMzgnOiduZ0UnLCdcXHUyMjY4XFx1RkUwMCc6J2x2bkUnLCdcXHUyMjY4JzonbG5FJywnXFx1MjI2OSc6J2duRScsJ1xcdTIyNjlcXHVGRTAwJzonZ3ZuRScsJ1xcdTIyNkEnOidsbCcsJ1xcdTIyNkFcXHUwMzM4Jzonbkx0dicsJ1xcdTIyNkFcXHUyMEQyJzonbkx0JywnXFx1MjI2Qic6J2dnJywnXFx1MjI2QlxcdTAzMzgnOiduR3R2JywnXFx1MjI2QlxcdTIwRDInOiduR3QnLCdcXHUyMjZDJzondHdpeHQnLCdcXHUyMjcyJzonbHNpbScsJ1xcdTIyNzQnOidubHNpbScsJ1xcdTIyNzMnOidnc2ltJywnXFx1MjI3NSc6J25nc2ltJywnXFx1MjI3Nic6J2xnJywnXFx1MjI3OCc6J250bGcnLCdcXHUyMjc3JzonZ2wnLCdcXHUyMjc5JzonbnRnbCcsJ1xcdTIyN0EnOidwcicsJ1xcdTIyODAnOiducHInLCdcXHUyMjdCJzonc2MnLCdcXHUyMjgxJzonbnNjJywnXFx1MjI3Qyc6J3ByY3VlJywnXFx1MjJFMCc6J25wcmN1ZScsJ1xcdTIyN0QnOidzY2N1ZScsJ1xcdTIyRTEnOiduc2NjdWUnLCdcXHUyMjdFJzoncHJzaW0nLCdcXHUyMjdGJzonc2NzaW0nLCdcXHUyMjdGXFx1MDMzOCc6J05vdFN1Y2NlZWRzVGlsZGUnLCdcXHUyMjgyJzonc3ViJywnXFx1MjI4NCc6J25zdWInLCdcXHUyMjgyXFx1MjBEMic6J3Zuc3ViJywnXFx1MjI4Myc6J3N1cCcsJ1xcdTIyODUnOiduc3VwJywnXFx1MjI4M1xcdTIwRDInOid2bnN1cCcsJ1xcdTIyODYnOidzdWJlJywnXFx1MjI4OCc6J25zdWJlJywnXFx1MjI4Nyc6J3N1cGUnLCdcXHUyMjg5JzonbnN1cGUnLCdcXHUyMjhBXFx1RkUwMCc6J3ZzdWJuZScsJ1xcdTIyOEEnOidzdWJuZScsJ1xcdTIyOEJcXHVGRTAwJzondnN1cG5lJywnXFx1MjI4Qic6J3N1cG5lJywnXFx1MjI4RCc6J2N1cGRvdCcsJ1xcdTIyOEUnOid1cGx1cycsJ1xcdTIyOEYnOidzcXN1YicsJ1xcdTIyOEZcXHUwMzM4JzonTm90U3F1YXJlU3Vic2V0JywnXFx1MjI5MCc6J3Nxc3VwJywnXFx1MjI5MFxcdTAzMzgnOidOb3RTcXVhcmVTdXBlcnNldCcsJ1xcdTIyOTEnOidzcXN1YmUnLCdcXHUyMkUyJzonbnNxc3ViZScsJ1xcdTIyOTInOidzcXN1cGUnLCdcXHUyMkUzJzonbnNxc3VwZScsJ1xcdTIyOTMnOidzcWNhcCcsJ1xcdTIyOTNcXHVGRTAwJzonc3FjYXBzJywnXFx1MjI5NCc6J3NxY3VwJywnXFx1MjI5NFxcdUZFMDAnOidzcWN1cHMnLCdcXHUyMjk1Jzonb3BsdXMnLCdcXHUyMjk2Jzonb21pbnVzJywnXFx1MjI5Nyc6J290aW1lcycsJ1xcdTIyOTgnOidvc29sJywnXFx1MjI5OSc6J29kb3QnLCdcXHUyMjlBJzonb2NpcicsJ1xcdTIyOUInOidvYXN0JywnXFx1MjI5RCc6J29kYXNoJywnXFx1MjI5RSc6J3BsdXNiJywnXFx1MjI5Ric6J21pbnVzYicsJ1xcdTIyQTAnOid0aW1lc2InLCdcXHUyMkExJzonc2RvdGInLCdcXHUyMkEyJzondmRhc2gnLCdcXHUyMkFDJzonbnZkYXNoJywnXFx1MjJBMyc6J2Rhc2h2JywnXFx1MjJBNCc6J3RvcCcsJ1xcdTIyQTUnOidib3QnLCdcXHUyMkE3JzonbW9kZWxzJywnXFx1MjJBOCc6J3ZEYXNoJywnXFx1MjJBRCc6J252RGFzaCcsJ1xcdTIyQTknOidWZGFzaCcsJ1xcdTIyQUUnOiduVmRhc2gnLCdcXHUyMkFBJzonVnZkYXNoJywnXFx1MjJBQic6J1ZEYXNoJywnXFx1MjJBRic6J25WRGFzaCcsJ1xcdTIyQjAnOidwcnVyZWwnLCdcXHUyMkIyJzondmx0cmknLCdcXHUyMkVBJzonbmx0cmknLCdcXHUyMkIzJzondnJ0cmknLCdcXHUyMkVCJzonbnJ0cmknLCdcXHUyMkI0JzonbHRyaWUnLCdcXHUyMkVDJzonbmx0cmllJywnXFx1MjJCNFxcdTIwRDInOidudmx0cmllJywnXFx1MjJCNSc6J3J0cmllJywnXFx1MjJFRCc6J25ydHJpZScsJ1xcdTIyQjVcXHUyMEQyJzonbnZydHJpZScsJ1xcdTIyQjYnOidvcmlnb2YnLCdcXHUyMkI3JzonaW1vZicsJ1xcdTIyQjgnOidtdW1hcCcsJ1xcdTIyQjknOidoZXJjb24nLCdcXHUyMkJBJzonaW50Y2FsJywnXFx1MjJCQic6J3ZlZWJhcicsJ1xcdTIyQkQnOidiYXJ2ZWUnLCdcXHUyMkJFJzonYW5ncnR2YicsJ1xcdTIyQkYnOidscnRyaScsJ1xcdTIyQzAnOidXZWRnZScsJ1xcdTIyQzEnOidWZWUnLCdcXHUyMkMyJzoneGNhcCcsJ1xcdTIyQzMnOid4Y3VwJywnXFx1MjJDNCc6J2RpYW0nLCdcXHUyMkM1Jzonc2RvdCcsJ1xcdTIyQzYnOidTdGFyJywnXFx1MjJDNyc6J2Rpdm9ueCcsJ1xcdTIyQzgnOidib3d0aWUnLCdcXHUyMkM5JzonbHRpbWVzJywnXFx1MjJDQSc6J3J0aW1lcycsJ1xcdTIyQ0InOidsdGhyZWUnLCdcXHUyMkNDJzoncnRocmVlJywnXFx1MjJDRCc6J2JzaW1lJywnXFx1MjJDRSc6J2N1dmVlJywnXFx1MjJDRic6J2N1d2VkJywnXFx1MjJEMCc6J1N1YicsJ1xcdTIyRDEnOidTdXAnLCdcXHUyMkQyJzonQ2FwJywnXFx1MjJEMyc6J0N1cCcsJ1xcdTIyRDQnOidmb3JrJywnXFx1MjJENSc6J2VwYXInLCdcXHUyMkQ2JzonbHRkb3QnLCdcXHUyMkQ3JzonZ3Rkb3QnLCdcXHUyMkQ4JzonTGwnLCdcXHUyMkQ4XFx1MDMzOCc6J25MbCcsJ1xcdTIyRDknOidHZycsJ1xcdTIyRDlcXHUwMzM4JzonbkdnJywnXFx1MjJEQVxcdUZFMDAnOidsZXNnJywnXFx1MjJEQSc6J2xlZycsJ1xcdTIyREInOidnZWwnLCdcXHUyMkRCXFx1RkUwMCc6J2dlc2wnLCdcXHUyMkRFJzonY3VlcHInLCdcXHUyMkRGJzonY3Vlc2MnLCdcXHUyMkU2JzonbG5zaW0nLCdcXHUyMkU3JzonZ25zaW0nLCdcXHUyMkU4JzoncHJuc2ltJywnXFx1MjJFOSc6J3NjbnNpbScsJ1xcdTIyRUUnOid2ZWxsaXAnLCdcXHUyMkVGJzonY3Rkb3QnLCdcXHUyMkYwJzondXRkb3QnLCdcXHUyMkYxJzonZHRkb3QnLCdcXHUyMkYyJzonZGlzaW4nLCdcXHUyMkYzJzonaXNpbnN2JywnXFx1MjJGNCc6J2lzaW5zJywnXFx1MjJGNSc6J2lzaW5kb3QnLCdcXHUyMkY1XFx1MDMzOCc6J25vdGluZG90JywnXFx1MjJGNic6J25vdGludmMnLCdcXHUyMkY3Jzonbm90aW52YicsJ1xcdTIyRjknOidpc2luRScsJ1xcdTIyRjlcXHUwMzM4Jzonbm90aW5FJywnXFx1MjJGQSc6J25pc2QnLCdcXHUyMkZCJzoneG5pcycsJ1xcdTIyRkMnOiduaXMnLCdcXHUyMkZEJzonbm90bml2YycsJ1xcdTIyRkUnOidub3RuaXZiJywnXFx1MjMwNSc6J2JhcndlZCcsJ1xcdTIzMDYnOidCYXJ3ZWQnLCdcXHUyMzBDJzonZHJjcm9wJywnXFx1MjMwRCc6J2RsY3JvcCcsJ1xcdTIzMEUnOid1cmNyb3AnLCdcXHUyMzBGJzondWxjcm9wJywnXFx1MjMxMCc6J2Jub3QnLCdcXHUyMzEyJzoncHJvZmxpbmUnLCdcXHUyMzEzJzoncHJvZnN1cmYnLCdcXHUyMzE1JzondGVscmVjJywnXFx1MjMxNic6J3RhcmdldCcsJ1xcdTIzMUMnOid1bGNvcm4nLCdcXHUyMzFEJzondXJjb3JuJywnXFx1MjMxRSc6J2RsY29ybicsJ1xcdTIzMUYnOidkcmNvcm4nLCdcXHUyMzIyJzonZnJvd24nLCdcXHUyMzIzJzonc21pbGUnLCdcXHUyMzJEJzonY3lsY3R5JywnXFx1MjMyRSc6J3Byb2ZhbGFyJywnXFx1MjMzNic6J3RvcGJvdCcsJ1xcdTIzM0QnOidvdmJhcicsJ1xcdTIzM0YnOidzb2xiYXInLCdcXHUyMzdDJzonYW5nemFycicsJ1xcdTIzQjAnOidsbW91c3QnLCdcXHUyM0IxJzoncm1vdXN0JywnXFx1MjNCNCc6J3RicmsnLCdcXHUyM0I1JzonYmJyaycsJ1xcdTIzQjYnOidiYnJrdGJyaycsJ1xcdTIzREMnOidPdmVyUGFyZW50aGVzaXMnLCdcXHUyM0REJzonVW5kZXJQYXJlbnRoZXNpcycsJ1xcdTIzREUnOidPdmVyQnJhY2UnLCdcXHUyM0RGJzonVW5kZXJCcmFjZScsJ1xcdTIzRTInOid0cnBleml1bScsJ1xcdTIzRTcnOidlbGludGVycycsJ1xcdTI0MjMnOidibGFuaycsJ1xcdTI1MDAnOidib3hoJywnXFx1MjUwMic6J2JveHYnLCdcXHUyNTBDJzonYm94ZHInLCdcXHUyNTEwJzonYm94ZGwnLCdcXHUyNTE0JzonYm94dXInLCdcXHUyNTE4JzonYm94dWwnLCdcXHUyNTFDJzonYm94dnInLCdcXHUyNTI0JzonYm94dmwnLCdcXHUyNTJDJzonYm94aGQnLCdcXHUyNTM0JzonYm94aHUnLCdcXHUyNTNDJzonYm94dmgnLCdcXHUyNTUwJzonYm94SCcsJ1xcdTI1NTEnOidib3hWJywnXFx1MjU1Mic6J2JveGRSJywnXFx1MjU1Myc6J2JveERyJywnXFx1MjU1NCc6J2JveERSJywnXFx1MjU1NSc6J2JveGRMJywnXFx1MjU1Nic6J2JveERsJywnXFx1MjU1Nyc6J2JveERMJywnXFx1MjU1OCc6J2JveHVSJywnXFx1MjU1OSc6J2JveFVyJywnXFx1MjU1QSc6J2JveFVSJywnXFx1MjU1Qic6J2JveHVMJywnXFx1MjU1Qyc6J2JveFVsJywnXFx1MjU1RCc6J2JveFVMJywnXFx1MjU1RSc6J2JveHZSJywnXFx1MjU1Ric6J2JveFZyJywnXFx1MjU2MCc6J2JveFZSJywnXFx1MjU2MSc6J2JveHZMJywnXFx1MjU2Mic6J2JveFZsJywnXFx1MjU2Myc6J2JveFZMJywnXFx1MjU2NCc6J2JveEhkJywnXFx1MjU2NSc6J2JveGhEJywnXFx1MjU2Nic6J2JveEhEJywnXFx1MjU2Nyc6J2JveEh1JywnXFx1MjU2OCc6J2JveGhVJywnXFx1MjU2OSc6J2JveEhVJywnXFx1MjU2QSc6J2JveHZIJywnXFx1MjU2Qic6J2JveFZoJywnXFx1MjU2Qyc6J2JveFZIJywnXFx1MjU4MCc6J3VoYmxrJywnXFx1MjU4NCc6J2xoYmxrJywnXFx1MjU4OCc6J2Jsb2NrJywnXFx1MjU5MSc6J2JsazE0JywnXFx1MjU5Mic6J2JsazEyJywnXFx1MjU5Myc6J2JsazM0JywnXFx1MjVBMSc6J3NxdScsJ1xcdTI1QUEnOidzcXVmJywnXFx1MjVBQic6J0VtcHR5VmVyeVNtYWxsU3F1YXJlJywnXFx1MjVBRCc6J3JlY3QnLCdcXHUyNUFFJzonbWFya2VyJywnXFx1MjVCMSc6J2ZsdG5zJywnXFx1MjVCMyc6J3h1dHJpJywnXFx1MjVCNCc6J3V0cmlmJywnXFx1MjVCNSc6J3V0cmknLCdcXHUyNUI4JzoncnRyaWYnLCdcXHUyNUI5JzoncnRyaScsJ1xcdTI1QkQnOid4ZHRyaScsJ1xcdTI1QkUnOidkdHJpZicsJ1xcdTI1QkYnOidkdHJpJywnXFx1MjVDMic6J2x0cmlmJywnXFx1MjVDMyc6J2x0cmknLCdcXHUyNUNBJzonbG96JywnXFx1MjVDQic6J2NpcicsJ1xcdTI1RUMnOid0cmlkb3QnLCdcXHUyNUVGJzoneGNpcmMnLCdcXHUyNUY4JzondWx0cmknLCdcXHUyNUY5JzondXJ0cmknLCdcXHUyNUZBJzonbGx0cmknLCdcXHUyNUZCJzonRW1wdHlTbWFsbFNxdWFyZScsJ1xcdTI1RkMnOidGaWxsZWRTbWFsbFNxdWFyZScsJ1xcdTI2MDUnOidzdGFyZicsJ1xcdTI2MDYnOidzdGFyJywnXFx1MjYwRSc6J3Bob25lJywnXFx1MjY0MCc6J2ZlbWFsZScsJ1xcdTI2NDInOidtYWxlJywnXFx1MjY2MCc6J3NwYWRlcycsJ1xcdTI2NjMnOidjbHVicycsJ1xcdTI2NjUnOidoZWFydHMnLCdcXHUyNjY2JzonZGlhbXMnLCdcXHUyNjZBJzonc3VuZycsJ1xcdTI3MTMnOidjaGVjaycsJ1xcdTI3MTcnOidjcm9zcycsJ1xcdTI3MjAnOidtYWx0JywnXFx1MjczNic6J3NleHQnLCdcXHUyNzU4JzonVmVydGljYWxTZXBhcmF0b3InLCdcXHUyN0M4JzonYnNvbGhzdWInLCdcXHUyN0M5Jzonc3VwaHNvbCcsJ1xcdTI3RjUnOid4bGFycicsJ1xcdTI3RjYnOid4cmFycicsJ1xcdTI3RjcnOid4aGFycicsJ1xcdTI3RjgnOid4bEFycicsJ1xcdTI3RjknOid4ckFycicsJ1xcdTI3RkEnOid4aEFycicsJ1xcdTI3RkMnOid4bWFwJywnXFx1MjdGRic6J2R6aWdyYXJyJywnXFx1MjkwMic6J252bEFycicsJ1xcdTI5MDMnOidudnJBcnInLCdcXHUyOTA0JzonbnZIYXJyJywnXFx1MjkwNSc6J01hcCcsJ1xcdTI5MEMnOidsYmFycicsJ1xcdTI5MEQnOidyYmFycicsJ1xcdTI5MEUnOidsQmFycicsJ1xcdTI5MEYnOidyQmFycicsJ1xcdTI5MTAnOidSQmFycicsJ1xcdTI5MTEnOidERG90cmFoZCcsJ1xcdTI5MTInOidVcEFycm93QmFyJywnXFx1MjkxMyc6J0Rvd25BcnJvd0JhcicsJ1xcdTI5MTYnOidSYXJydGwnLCdcXHUyOTE5JzonbGF0YWlsJywnXFx1MjkxQSc6J3JhdGFpbCcsJ1xcdTI5MUInOidsQXRhaWwnLCdcXHUyOTFDJzonckF0YWlsJywnXFx1MjkxRCc6J2xhcnJmcycsJ1xcdTI5MUUnOidyYXJyZnMnLCdcXHUyOTFGJzonbGFycmJmcycsJ1xcdTI5MjAnOidyYXJyYmZzJywnXFx1MjkyMyc6J253YXJoaycsJ1xcdTI5MjQnOiduZWFyaGsnLCdcXHUyOTI1Jzonc2VhcmhrJywnXFx1MjkyNic6J3N3YXJoaycsJ1xcdTI5MjcnOidud25lYXInLCdcXHUyOTI4JzondG9lYScsJ1xcdTI5MjknOid0b3NhJywnXFx1MjkyQSc6J3N3bndhcicsJ1xcdTI5MzMnOidyYXJyYycsJ1xcdTI5MzNcXHUwMzM4JzonbnJhcnJjJywnXFx1MjkzNSc6J2N1ZGFycnInLCdcXHUyOTM2JzonbGRjYScsJ1xcdTI5MzcnOidyZGNhJywnXFx1MjkzOCc6J2N1ZGFycmwnLCdcXHUyOTM5JzonbGFycnBsJywnXFx1MjkzQyc6J2N1cmFycm0nLCdcXHUyOTNEJzonY3VsYXJycCcsJ1xcdTI5NDUnOidyYXJycGwnLCdcXHUyOTQ4JzonaGFycmNpcicsJ1xcdTI5NDknOidVYXJyb2NpcicsJ1xcdTI5NEEnOidsdXJkc2hhcicsJ1xcdTI5NEInOidsZHJ1c2hhcicsJ1xcdTI5NEUnOidMZWZ0UmlnaHRWZWN0b3InLCdcXHUyOTRGJzonUmlnaHRVcERvd25WZWN0b3InLCdcXHUyOTUwJzonRG93bkxlZnRSaWdodFZlY3RvcicsJ1xcdTI5NTEnOidMZWZ0VXBEb3duVmVjdG9yJywnXFx1Mjk1Mic6J0xlZnRWZWN0b3JCYXInLCdcXHUyOTUzJzonUmlnaHRWZWN0b3JCYXInLCdcXHUyOTU0JzonUmlnaHRVcFZlY3RvckJhcicsJ1xcdTI5NTUnOidSaWdodERvd25WZWN0b3JCYXInLCdcXHUyOTU2JzonRG93bkxlZnRWZWN0b3JCYXInLCdcXHUyOTU3JzonRG93blJpZ2h0VmVjdG9yQmFyJywnXFx1Mjk1OCc6J0xlZnRVcFZlY3RvckJhcicsJ1xcdTI5NTknOidMZWZ0RG93blZlY3RvckJhcicsJ1xcdTI5NUEnOidMZWZ0VGVlVmVjdG9yJywnXFx1Mjk1Qic6J1JpZ2h0VGVlVmVjdG9yJywnXFx1Mjk1Qyc6J1JpZ2h0VXBUZWVWZWN0b3InLCdcXHUyOTVEJzonUmlnaHREb3duVGVlVmVjdG9yJywnXFx1Mjk1RSc6J0Rvd25MZWZ0VGVlVmVjdG9yJywnXFx1Mjk1Ric6J0Rvd25SaWdodFRlZVZlY3RvcicsJ1xcdTI5NjAnOidMZWZ0VXBUZWVWZWN0b3InLCdcXHUyOTYxJzonTGVmdERvd25UZWVWZWN0b3InLCdcXHUyOTYyJzonbEhhcicsJ1xcdTI5NjMnOid1SGFyJywnXFx1Mjk2NCc6J3JIYXInLCdcXHUyOTY1JzonZEhhcicsJ1xcdTI5NjYnOidsdXJ1aGFyJywnXFx1Mjk2Nyc6J2xkcmRoYXInLCdcXHUyOTY4JzoncnVsdWhhcicsJ1xcdTI5NjknOidyZGxkaGFyJywnXFx1Mjk2QSc6J2xoYXJ1bCcsJ1xcdTI5NkInOidsbGhhcmQnLCdcXHUyOTZDJzoncmhhcnVsJywnXFx1Mjk2RCc6J2xyaGFyZCcsJ1xcdTI5NkUnOid1ZGhhcicsJ1xcdTI5NkYnOidkdWhhcicsJ1xcdTI5NzAnOidSb3VuZEltcGxpZXMnLCdcXHUyOTcxJzonZXJhcnInLCdcXHUyOTcyJzonc2ltcmFycicsJ1xcdTI5NzMnOidsYXJyc2ltJywnXFx1Mjk3NCc6J3JhcnJzaW0nLCdcXHUyOTc1JzoncmFycmFwJywnXFx1Mjk3Nic6J2x0bGFycicsJ1xcdTI5NzgnOidndHJhcnInLCdcXHUyOTc5Jzonc3VicmFycicsJ1xcdTI5N0InOidzdXBsYXJyJywnXFx1Mjk3Qyc6J2xmaXNodCcsJ1xcdTI5N0QnOidyZmlzaHQnLCdcXHUyOTdFJzondWZpc2h0JywnXFx1Mjk3Ric6J2RmaXNodCcsJ1xcdTI5OUEnOid2emlnemFnJywnXFx1Mjk5Qyc6J3ZhbmdydCcsJ1xcdTI5OUQnOidhbmdydHZiZCcsJ1xcdTI5QTQnOidhbmdlJywnXFx1MjlBNSc6J3JhbmdlJywnXFx1MjlBNic6J2R3YW5nbGUnLCdcXHUyOUE3JzondXdhbmdsZScsJ1xcdTI5QTgnOidhbmdtc2RhYScsJ1xcdTI5QTknOidhbmdtc2RhYicsJ1xcdTI5QUEnOidhbmdtc2RhYycsJ1xcdTI5QUInOidhbmdtc2RhZCcsJ1xcdTI5QUMnOidhbmdtc2RhZScsJ1xcdTI5QUQnOidhbmdtc2RhZicsJ1xcdTI5QUUnOidhbmdtc2RhZycsJ1xcdTI5QUYnOidhbmdtc2RhaCcsJ1xcdTI5QjAnOidiZW1wdHl2JywnXFx1MjlCMSc6J2RlbXB0eXYnLCdcXHUyOUIyJzonY2VtcHR5dicsJ1xcdTI5QjMnOidyYWVtcHR5dicsJ1xcdTI5QjQnOidsYWVtcHR5dicsJ1xcdTI5QjUnOidvaGJhcicsJ1xcdTI5QjYnOidvbWlkJywnXFx1MjlCNyc6J29wYXInLCdcXHUyOUI5Jzonb3BlcnAnLCdcXHUyOUJCJzonb2xjcm9zcycsJ1xcdTI5QkMnOidvZHNvbGQnLCdcXHUyOUJFJzonb2xjaXInLCdcXHUyOUJGJzonb2ZjaXInLCdcXHUyOUMwJzonb2x0JywnXFx1MjlDMSc6J29ndCcsJ1xcdTI5QzInOidjaXJzY2lyJywnXFx1MjlDMyc6J2NpckUnLCdcXHUyOUM0Jzonc29sYicsJ1xcdTI5QzUnOidic29sYicsJ1xcdTI5QzknOidib3hib3gnLCdcXHUyOUNEJzondHJpc2InLCdcXHUyOUNFJzoncnRyaWx0cmknLCdcXHUyOUNGJzonTGVmdFRyaWFuZ2xlQmFyJywnXFx1MjlDRlxcdTAzMzgnOidOb3RMZWZ0VHJpYW5nbGVCYXInLCdcXHUyOUQwJzonUmlnaHRUcmlhbmdsZUJhcicsJ1xcdTI5RDBcXHUwMzM4JzonTm90UmlnaHRUcmlhbmdsZUJhcicsJ1xcdTI5REMnOidpaW5maW4nLCdcXHUyOUREJzonaW5maW50aWUnLCdcXHUyOURFJzonbnZpbmZpbicsJ1xcdTI5RTMnOidlcGFyc2wnLCdcXHUyOUU0Jzonc21lcGFyc2wnLCdcXHUyOUU1JzonZXF2cGFyc2wnLCdcXHUyOUVCJzonbG96ZicsJ1xcdTI5RjQnOidSdWxlRGVsYXllZCcsJ1xcdTI5RjYnOidkc29sJywnXFx1MkEwMCc6J3hvZG90JywnXFx1MkEwMSc6J3hvcGx1cycsJ1xcdTJBMDInOid4b3RpbWUnLCdcXHUyQTA0JzoneHVwbHVzJywnXFx1MkEwNic6J3hzcWN1cCcsJ1xcdTJBMEQnOidmcGFydGludCcsJ1xcdTJBMTAnOidjaXJmbmludCcsJ1xcdTJBMTEnOidhd2ludCcsJ1xcdTJBMTInOidycHBvbGludCcsJ1xcdTJBMTMnOidzY3BvbGludCcsJ1xcdTJBMTQnOiducG9saW50JywnXFx1MkExNSc6J3BvaW50aW50JywnXFx1MkExNic6J3F1YXRpbnQnLCdcXHUyQTE3JzonaW50bGFyaGsnLCdcXHUyQTIyJzoncGx1c2NpcicsJ1xcdTJBMjMnOidwbHVzYWNpcicsJ1xcdTJBMjQnOidzaW1wbHVzJywnXFx1MkEyNSc6J3BsdXNkdScsJ1xcdTJBMjYnOidwbHVzc2ltJywnXFx1MkEyNyc6J3BsdXN0d28nLCdcXHUyQTI5JzonbWNvbW1hJywnXFx1MkEyQSc6J21pbnVzZHUnLCdcXHUyQTJEJzonbG9wbHVzJywnXFx1MkEyRSc6J3JvcGx1cycsJ1xcdTJBMkYnOidDcm9zcycsJ1xcdTJBMzAnOid0aW1lc2QnLCdcXHUyQTMxJzondGltZXNiYXInLCdcXHUyQTMzJzonc21hc2hwJywnXFx1MkEzNCc6J2xvdGltZXMnLCdcXHUyQTM1Jzoncm90aW1lcycsJ1xcdTJBMzYnOidvdGltZXNhcycsJ1xcdTJBMzcnOidPdGltZXMnLCdcXHUyQTM4Jzonb2RpdicsJ1xcdTJBMzknOid0cmlwbHVzJywnXFx1MkEzQSc6J3RyaW1pbnVzJywnXFx1MkEzQic6J3RyaXRpbWUnLCdcXHUyQTNDJzonaXByb2QnLCdcXHUyQTNGJzonYW1hbGcnLCdcXHUyQTQwJzonY2FwZG90JywnXFx1MkE0Mic6J25jdXAnLCdcXHUyQTQzJzonbmNhcCcsJ1xcdTJBNDQnOidjYXBhbmQnLCdcXHUyQTQ1JzonY3Vwb3InLCdcXHUyQTQ2JzonY3VwY2FwJywnXFx1MkE0Nyc6J2NhcGN1cCcsJ1xcdTJBNDgnOidjdXBicmNhcCcsJ1xcdTJBNDknOidjYXBicmN1cCcsJ1xcdTJBNEEnOidjdXBjdXAnLCdcXHUyQTRCJzonY2FwY2FwJywnXFx1MkE0Qyc6J2NjdXBzJywnXFx1MkE0RCc6J2NjYXBzJywnXFx1MkE1MCc6J2NjdXBzc20nLCdcXHUyQTUzJzonQW5kJywnXFx1MkE1NCc6J09yJywnXFx1MkE1NSc6J2FuZGFuZCcsJ1xcdTJBNTYnOidvcm9yJywnXFx1MkE1Nyc6J29yc2xvcGUnLCdcXHUyQTU4JzonYW5kc2xvcGUnLCdcXHUyQTVBJzonYW5kdicsJ1xcdTJBNUInOidvcnYnLCdcXHUyQTVDJzonYW5kZCcsJ1xcdTJBNUQnOidvcmQnLCdcXHUyQTVGJzond2VkYmFyJywnXFx1MkE2Nic6J3Nkb3RlJywnXFx1MkE2QSc6J3NpbWRvdCcsJ1xcdTJBNkQnOidjb25nZG90JywnXFx1MkE2RFxcdTAzMzgnOiduY29uZ2RvdCcsJ1xcdTJBNkUnOidlYXN0ZXInLCdcXHUyQTZGJzonYXBhY2lyJywnXFx1MkE3MCc6J2FwRScsJ1xcdTJBNzBcXHUwMzM4JzonbmFwRScsJ1xcdTJBNzEnOidlcGx1cycsJ1xcdTJBNzInOidwbHVzZScsJ1xcdTJBNzMnOidFc2ltJywnXFx1MkE3Nyc6J2VERG90JywnXFx1MkE3OCc6J2VxdWl2REQnLCdcXHUyQTc5JzonbHRjaXInLCdcXHUyQTdBJzonZ3RjaXInLCdcXHUyQTdCJzonbHRxdWVzdCcsJ1xcdTJBN0MnOidndHF1ZXN0JywnXFx1MkE3RCc6J2xlcycsJ1xcdTJBN0RcXHUwMzM4JzonbmxlcycsJ1xcdTJBN0UnOidnZXMnLCdcXHUyQTdFXFx1MDMzOCc6J25nZXMnLCdcXHUyQTdGJzonbGVzZG90JywnXFx1MkE4MCc6J2dlc2RvdCcsJ1xcdTJBODEnOidsZXNkb3RvJywnXFx1MkE4Mic6J2dlc2RvdG8nLCdcXHUyQTgzJzonbGVzZG90b3InLCdcXHUyQTg0JzonZ2VzZG90b2wnLCdcXHUyQTg1JzonbGFwJywnXFx1MkE4Nic6J2dhcCcsJ1xcdTJBODcnOidsbmUnLCdcXHUyQTg4JzonZ25lJywnXFx1MkE4OSc6J2xuYXAnLCdcXHUyQThBJzonZ25hcCcsJ1xcdTJBOEInOidsRWcnLCdcXHUyQThDJzonZ0VsJywnXFx1MkE4RCc6J2xzaW1lJywnXFx1MkE4RSc6J2dzaW1lJywnXFx1MkE4Ric6J2xzaW1nJywnXFx1MkE5MCc6J2dzaW1sJywnXFx1MkE5MSc6J2xnRScsJ1xcdTJBOTInOidnbEUnLCdcXHUyQTkzJzonbGVzZ2VzJywnXFx1MkE5NCc6J2dlc2xlcycsJ1xcdTJBOTUnOidlbHMnLCdcXHUyQTk2JzonZWdzJywnXFx1MkE5Nyc6J2Vsc2RvdCcsJ1xcdTJBOTgnOidlZ3Nkb3QnLCdcXHUyQTk5JzonZWwnLCdcXHUyQTlBJzonZWcnLCdcXHUyQTlEJzonc2ltbCcsJ1xcdTJBOUUnOidzaW1nJywnXFx1MkE5Ric6J3NpbWxFJywnXFx1MkFBMCc6J3NpbWdFJywnXFx1MkFBMSc6J0xlc3NMZXNzJywnXFx1MkFBMVxcdTAzMzgnOidOb3ROZXN0ZWRMZXNzTGVzcycsJ1xcdTJBQTInOidHcmVhdGVyR3JlYXRlcicsJ1xcdTJBQTJcXHUwMzM4JzonTm90TmVzdGVkR3JlYXRlckdyZWF0ZXInLCdcXHUyQUE0JzonZ2xqJywnXFx1MkFBNSc6J2dsYScsJ1xcdTJBQTYnOidsdGNjJywnXFx1MkFBNyc6J2d0Y2MnLCdcXHUyQUE4JzonbGVzY2MnLCdcXHUyQUE5JzonZ2VzY2MnLCdcXHUyQUFBJzonc210JywnXFx1MkFBQic6J2xhdCcsJ1xcdTJBQUMnOidzbXRlJywnXFx1MkFBQ1xcdUZFMDAnOidzbXRlcycsJ1xcdTJBQUQnOidsYXRlJywnXFx1MkFBRFxcdUZFMDAnOidsYXRlcycsJ1xcdTJBQUUnOididW1wRScsJ1xcdTJBQUYnOidwcmUnLCdcXHUyQUFGXFx1MDMzOCc6J25wcmUnLCdcXHUyQUIwJzonc2NlJywnXFx1MkFCMFxcdTAzMzgnOiduc2NlJywnXFx1MkFCMyc6J3ByRScsJ1xcdTJBQjQnOidzY0UnLCdcXHUyQUI1JzoncHJuRScsJ1xcdTJBQjYnOidzY25FJywnXFx1MkFCNyc6J3ByYXAnLCdcXHUyQUI4Jzonc2NhcCcsJ1xcdTJBQjknOidwcm5hcCcsJ1xcdTJBQkEnOidzY25hcCcsJ1xcdTJBQkInOidQcicsJ1xcdTJBQkMnOidTYycsJ1xcdTJBQkQnOidzdWJkb3QnLCdcXHUyQUJFJzonc3VwZG90JywnXFx1MkFCRic6J3N1YnBsdXMnLCdcXHUyQUMwJzonc3VwcGx1cycsJ1xcdTJBQzEnOidzdWJtdWx0JywnXFx1MkFDMic6J3N1cG11bHQnLCdcXHUyQUMzJzonc3ViZWRvdCcsJ1xcdTJBQzQnOidzdXBlZG90JywnXFx1MkFDNSc6J3N1YkUnLCdcXHUyQUM1XFx1MDMzOCc6J25zdWJFJywnXFx1MkFDNic6J3N1cEUnLCdcXHUyQUM2XFx1MDMzOCc6J25zdXBFJywnXFx1MkFDNyc6J3N1YnNpbScsJ1xcdTJBQzgnOidzdXBzaW0nLCdcXHUyQUNCXFx1RkUwMCc6J3ZzdWJuRScsJ1xcdTJBQ0InOidzdWJuRScsJ1xcdTJBQ0NcXHVGRTAwJzondnN1cG5FJywnXFx1MkFDQyc6J3N1cG5FJywnXFx1MkFDRic6J2NzdWInLCdcXHUyQUQwJzonY3N1cCcsJ1xcdTJBRDEnOidjc3ViZScsJ1xcdTJBRDInOidjc3VwZScsJ1xcdTJBRDMnOidzdWJzdXAnLCdcXHUyQUQ0Jzonc3Vwc3ViJywnXFx1MkFENSc6J3N1YnN1YicsJ1xcdTJBRDYnOidzdXBzdXAnLCdcXHUyQUQ3Jzonc3VwaHN1YicsJ1xcdTJBRDgnOidzdXBkc3ViJywnXFx1MkFEOSc6J2Zvcmt2JywnXFx1MkFEQSc6J3RvcGZvcmsnLCdcXHUyQURCJzonbWxjcCcsJ1xcdTJBRTQnOidEYXNodicsJ1xcdTJBRTYnOidWZGFzaGwnLCdcXHUyQUU3JzonQmFydicsJ1xcdTJBRTgnOid2QmFyJywnXFx1MkFFOSc6J3ZCYXJ2JywnXFx1MkFFQic6J1ZiYXInLCdcXHUyQUVDJzonTm90JywnXFx1MkFFRCc6J2JOb3QnLCdcXHUyQUVFJzoncm5taWQnLCdcXHUyQUVGJzonY2lybWlkJywnXFx1MkFGMCc6J21pZGNpcicsJ1xcdTJBRjEnOid0b3BjaXInLCdcXHUyQUYyJzonbmhwYXInLCdcXHUyQUYzJzoncGFyc2ltJywnXFx1MkFGRCc6J3BhcnNsJywnXFx1MkFGRFxcdTIwRTUnOiducGFyc2wnLCdcXHUyNjZEJzonZmxhdCcsJ1xcdTI2NkUnOiduYXR1cicsJ1xcdTI2NkYnOidzaGFycCcsJ1xceEE0JzonY3VycmVuJywnXFx4QTInOidjZW50JywnJCc6J2RvbGxhcicsJ1xceEEzJzoncG91bmQnLCdcXHhBNSc6J3llbicsJ1xcdTIwQUMnOidldXJvJywnXFx4QjknOidzdXAxJywnXFx4QkQnOidoYWxmJywnXFx1MjE1Myc6J2ZyYWMxMycsJ1xceEJDJzonZnJhYzE0JywnXFx1MjE1NSc6J2ZyYWMxNScsJ1xcdTIxNTknOidmcmFjMTYnLCdcXHUyMTVCJzonZnJhYzE4JywnXFx4QjInOidzdXAyJywnXFx1MjE1NCc6J2ZyYWMyMycsJ1xcdTIxNTYnOidmcmFjMjUnLCdcXHhCMyc6J3N1cDMnLCdcXHhCRSc6J2ZyYWMzNCcsJ1xcdTIxNTcnOidmcmFjMzUnLCdcXHUyMTVDJzonZnJhYzM4JywnXFx1MjE1OCc6J2ZyYWM0NScsJ1xcdTIxNUEnOidmcmFjNTYnLCdcXHUyMTVEJzonZnJhYzU4JywnXFx1MjE1RSc6J2ZyYWM3OCcsJ1xcdUQ4MzVcXHVEQ0I2JzonYXNjcicsJ1xcdUQ4MzVcXHVERDUyJzonYW9wZicsJ1xcdUQ4MzVcXHVERDFFJzonYWZyJywnXFx1RDgzNVxcdUREMzgnOidBb3BmJywnXFx1RDgzNVxcdUREMDQnOidBZnInLCdcXHVEODM1XFx1REM5Qyc6J0FzY3InLCdcXHhBQSc6J29yZGYnLCdcXHhFMSc6J2FhY3V0ZScsJ1xceEMxJzonQWFjdXRlJywnXFx4RTAnOidhZ3JhdmUnLCdcXHhDMCc6J0FncmF2ZScsJ1xcdTAxMDMnOidhYnJldmUnLCdcXHUwMTAyJzonQWJyZXZlJywnXFx4RTInOidhY2lyYycsJ1xceEMyJzonQWNpcmMnLCdcXHhFNSc6J2FyaW5nJywnXFx4QzUnOidhbmdzdCcsJ1xceEU0JzonYXVtbCcsJ1xceEM0JzonQXVtbCcsJ1xceEUzJzonYXRpbGRlJywnXFx4QzMnOidBdGlsZGUnLCdcXHUwMTA1JzonYW9nb24nLCdcXHUwMTA0JzonQW9nb24nLCdcXHUwMTAxJzonYW1hY3InLCdcXHUwMTAwJzonQW1hY3InLCdcXHhFNic6J2FlbGlnJywnXFx4QzYnOidBRWxpZycsJ1xcdUQ4MzVcXHVEQ0I3JzonYnNjcicsJ1xcdUQ4MzVcXHVERDUzJzonYm9wZicsJ1xcdUQ4MzVcXHVERDFGJzonYmZyJywnXFx1RDgzNVxcdUREMzknOidCb3BmJywnXFx1MjEyQyc6J0JzY3InLCdcXHVEODM1XFx1REQwNSc6J0JmcicsJ1xcdUQ4MzVcXHVERDIwJzonY2ZyJywnXFx1RDgzNVxcdURDQjgnOidjc2NyJywnXFx1RDgzNVxcdURENTQnOidjb3BmJywnXFx1MjEyRCc6J0NmcicsJ1xcdUQ4MzVcXHVEQzlFJzonQ3NjcicsJ1xcdTIxMDInOidDb3BmJywnXFx1MDEwNyc6J2NhY3V0ZScsJ1xcdTAxMDYnOidDYWN1dGUnLCdcXHUwMTA5JzonY2NpcmMnLCdcXHUwMTA4JzonQ2NpcmMnLCdcXHUwMTBEJzonY2Nhcm9uJywnXFx1MDEwQyc6J0NjYXJvbicsJ1xcdTAxMEInOidjZG90JywnXFx1MDEwQSc6J0Nkb3QnLCdcXHhFNyc6J2NjZWRpbCcsJ1xceEM3JzonQ2NlZGlsJywnXFx1MjEwNSc6J2luY2FyZScsJ1xcdUQ4MzVcXHVERDIxJzonZGZyJywnXFx1MjE0Nic6J2RkJywnXFx1RDgzNVxcdURENTUnOidkb3BmJywnXFx1RDgzNVxcdURDQjknOidkc2NyJywnXFx1RDgzNVxcdURDOUYnOidEc2NyJywnXFx1RDgzNVxcdUREMDcnOidEZnInLCdcXHUyMTQ1JzonREQnLCdcXHVEODM1XFx1REQzQic6J0RvcGYnLCdcXHUwMTBGJzonZGNhcm9uJywnXFx1MDEwRSc6J0RjYXJvbicsJ1xcdTAxMTEnOidkc3Ryb2snLCdcXHUwMTEwJzonRHN0cm9rJywnXFx4RjAnOidldGgnLCdcXHhEMCc6J0VUSCcsJ1xcdTIxNDcnOidlZScsJ1xcdTIxMkYnOidlc2NyJywnXFx1RDgzNVxcdUREMjInOidlZnInLCdcXHVEODM1XFx1REQ1Nic6J2VvcGYnLCdcXHUyMTMwJzonRXNjcicsJ1xcdUQ4MzVcXHVERDA4JzonRWZyJywnXFx1RDgzNVxcdUREM0MnOidFb3BmJywnXFx4RTknOidlYWN1dGUnLCdcXHhDOSc6J0VhY3V0ZScsJ1xceEU4JzonZWdyYXZlJywnXFx4QzgnOidFZ3JhdmUnLCdcXHhFQSc6J2VjaXJjJywnXFx4Q0EnOidFY2lyYycsJ1xcdTAxMUInOidlY2Fyb24nLCdcXHUwMTFBJzonRWNhcm9uJywnXFx4RUInOidldW1sJywnXFx4Q0InOidFdW1sJywnXFx1MDExNyc6J2Vkb3QnLCdcXHUwMTE2JzonRWRvdCcsJ1xcdTAxMTknOidlb2dvbicsJ1xcdTAxMTgnOidFb2dvbicsJ1xcdTAxMTMnOidlbWFjcicsJ1xcdTAxMTInOidFbWFjcicsJ1xcdUQ4MzVcXHVERDIzJzonZmZyJywnXFx1RDgzNVxcdURENTcnOidmb3BmJywnXFx1RDgzNVxcdURDQkInOidmc2NyJywnXFx1RDgzNVxcdUREMDknOidGZnInLCdcXHVEODM1XFx1REQzRCc6J0ZvcGYnLCdcXHUyMTMxJzonRnNjcicsJ1xcdUZCMDAnOidmZmxpZycsJ1xcdUZCMDMnOidmZmlsaWcnLCdcXHVGQjA0JzonZmZsbGlnJywnXFx1RkIwMSc6J2ZpbGlnJywnZmonOidmamxpZycsJ1xcdUZCMDInOidmbGxpZycsJ1xcdTAxOTInOidmbm9mJywnXFx1MjEwQSc6J2dzY3InLCdcXHVEODM1XFx1REQ1OCc6J2dvcGYnLCdcXHVEODM1XFx1REQyNCc6J2dmcicsJ1xcdUQ4MzVcXHVEQ0EyJzonR3NjcicsJ1xcdUQ4MzVcXHVERDNFJzonR29wZicsJ1xcdUQ4MzVcXHVERDBBJzonR2ZyJywnXFx1MDFGNSc6J2dhY3V0ZScsJ1xcdTAxMUYnOidnYnJldmUnLCdcXHUwMTFFJzonR2JyZXZlJywnXFx1MDExRCc6J2djaXJjJywnXFx1MDExQyc6J0djaXJjJywnXFx1MDEyMSc6J2dkb3QnLCdcXHUwMTIwJzonR2RvdCcsJ1xcdTAxMjInOidHY2VkaWwnLCdcXHVEODM1XFx1REQyNSc6J2hmcicsJ1xcdTIxMEUnOidwbGFuY2toJywnXFx1RDgzNVxcdURDQkQnOidoc2NyJywnXFx1RDgzNVxcdURENTknOidob3BmJywnXFx1MjEwQic6J0hzY3InLCdcXHUyMTBDJzonSGZyJywnXFx1MjEwRCc6J0hvcGYnLCdcXHUwMTI1JzonaGNpcmMnLCdcXHUwMTI0JzonSGNpcmMnLCdcXHUyMTBGJzonaGJhcicsJ1xcdTAxMjcnOidoc3Ryb2snLCdcXHUwMTI2JzonSHN0cm9rJywnXFx1RDgzNVxcdURENUEnOidpb3BmJywnXFx1RDgzNVxcdUREMjYnOidpZnInLCdcXHVEODM1XFx1RENCRSc6J2lzY3InLCdcXHUyMTQ4JzonaWknLCdcXHVEODM1XFx1REQ0MCc6J0lvcGYnLCdcXHUyMTEwJzonSXNjcicsJ1xcdTIxMTEnOidJbScsJ1xceEVEJzonaWFjdXRlJywnXFx4Q0QnOidJYWN1dGUnLCdcXHhFQyc6J2lncmF2ZScsJ1xceENDJzonSWdyYXZlJywnXFx4RUUnOidpY2lyYycsJ1xceENFJzonSWNpcmMnLCdcXHhFRic6J2l1bWwnLCdcXHhDRic6J0l1bWwnLCdcXHUwMTI5JzonaXRpbGRlJywnXFx1MDEyOCc6J0l0aWxkZScsJ1xcdTAxMzAnOidJZG90JywnXFx1MDEyRic6J2lvZ29uJywnXFx1MDEyRSc6J0lvZ29uJywnXFx1MDEyQic6J2ltYWNyJywnXFx1MDEyQSc6J0ltYWNyJywnXFx1MDEzMyc6J2lqbGlnJywnXFx1MDEzMic6J0lKbGlnJywnXFx1MDEzMSc6J2ltYXRoJywnXFx1RDgzNVxcdURDQkYnOidqc2NyJywnXFx1RDgzNVxcdURENUInOidqb3BmJywnXFx1RDgzNVxcdUREMjcnOidqZnInLCdcXHVEODM1XFx1RENBNSc6J0pzY3InLCdcXHVEODM1XFx1REQwRCc6J0pmcicsJ1xcdUQ4MzVcXHVERDQxJzonSm9wZicsJ1xcdTAxMzUnOidqY2lyYycsJ1xcdTAxMzQnOidKY2lyYycsJ1xcdTAyMzcnOidqbWF0aCcsJ1xcdUQ4MzVcXHVERDVDJzona29wZicsJ1xcdUQ4MzVcXHVEQ0MwJzona3NjcicsJ1xcdUQ4MzVcXHVERDI4Jzona2ZyJywnXFx1RDgzNVxcdURDQTYnOidLc2NyJywnXFx1RDgzNVxcdURENDInOidLb3BmJywnXFx1RDgzNVxcdUREMEUnOidLZnInLCdcXHUwMTM3Jzona2NlZGlsJywnXFx1MDEzNic6J0tjZWRpbCcsJ1xcdUQ4MzVcXHVERDI5JzonbGZyJywnXFx1RDgzNVxcdURDQzEnOidsc2NyJywnXFx1MjExMyc6J2VsbCcsJ1xcdUQ4MzVcXHVERDVEJzonbG9wZicsJ1xcdTIxMTInOidMc2NyJywnXFx1RDgzNVxcdUREMEYnOidMZnInLCdcXHVEODM1XFx1REQ0Myc6J0xvcGYnLCdcXHUwMTNBJzonbGFjdXRlJywnXFx1MDEzOSc6J0xhY3V0ZScsJ1xcdTAxM0UnOidsY2Fyb24nLCdcXHUwMTNEJzonTGNhcm9uJywnXFx1MDEzQyc6J2xjZWRpbCcsJ1xcdTAxM0InOidMY2VkaWwnLCdcXHUwMTQyJzonbHN0cm9rJywnXFx1MDE0MSc6J0xzdHJvaycsJ1xcdTAxNDAnOidsbWlkb3QnLCdcXHUwMTNGJzonTG1pZG90JywnXFx1RDgzNVxcdUREMkEnOidtZnInLCdcXHVEODM1XFx1REQ1RSc6J21vcGYnLCdcXHVEODM1XFx1RENDMic6J21zY3InLCdcXHVEODM1XFx1REQxMCc6J01mcicsJ1xcdUQ4MzVcXHVERDQ0JzonTW9wZicsJ1xcdTIxMzMnOidNc2NyJywnXFx1RDgzNVxcdUREMkInOiduZnInLCdcXHVEODM1XFx1REQ1Ric6J25vcGYnLCdcXHVEODM1XFx1RENDMyc6J25zY3InLCdcXHUyMTE1JzonTm9wZicsJ1xcdUQ4MzVcXHVEQ0E5JzonTnNjcicsJ1xcdUQ4MzVcXHVERDExJzonTmZyJywnXFx1MDE0NCc6J25hY3V0ZScsJ1xcdTAxNDMnOidOYWN1dGUnLCdcXHUwMTQ4JzonbmNhcm9uJywnXFx1MDE0Nyc6J05jYXJvbicsJ1xceEYxJzonbnRpbGRlJywnXFx4RDEnOidOdGlsZGUnLCdcXHUwMTQ2JzonbmNlZGlsJywnXFx1MDE0NSc6J05jZWRpbCcsJ1xcdTIxMTYnOidudW1lcm8nLCdcXHUwMTRCJzonZW5nJywnXFx1MDE0QSc6J0VORycsJ1xcdUQ4MzVcXHVERDYwJzonb29wZicsJ1xcdUQ4MzVcXHVERDJDJzonb2ZyJywnXFx1MjEzNCc6J29zY3InLCdcXHVEODM1XFx1RENBQSc6J09zY3InLCdcXHVEODM1XFx1REQxMic6J09mcicsJ1xcdUQ4MzVcXHVERDQ2JzonT29wZicsJ1xceEJBJzonb3JkbScsJ1xceEYzJzonb2FjdXRlJywnXFx4RDMnOidPYWN1dGUnLCdcXHhGMic6J29ncmF2ZScsJ1xceEQyJzonT2dyYXZlJywnXFx4RjQnOidvY2lyYycsJ1xceEQ0JzonT2NpcmMnLCdcXHhGNic6J291bWwnLCdcXHhENic6J091bWwnLCdcXHUwMTUxJzonb2RibGFjJywnXFx1MDE1MCc6J09kYmxhYycsJ1xceEY1Jzonb3RpbGRlJywnXFx4RDUnOidPdGlsZGUnLCdcXHhGOCc6J29zbGFzaCcsJ1xceEQ4JzonT3NsYXNoJywnXFx1MDE0RCc6J29tYWNyJywnXFx1MDE0Qyc6J09tYWNyJywnXFx1MDE1Myc6J29lbGlnJywnXFx1MDE1Mic6J09FbGlnJywnXFx1RDgzNVxcdUREMkQnOidwZnInLCdcXHVEODM1XFx1RENDNSc6J3BzY3InLCdcXHVEODM1XFx1REQ2MSc6J3BvcGYnLCdcXHUyMTE5JzonUG9wZicsJ1xcdUQ4MzVcXHVERDEzJzonUGZyJywnXFx1RDgzNVxcdURDQUInOidQc2NyJywnXFx1RDgzNVxcdURENjInOidxb3BmJywnXFx1RDgzNVxcdUREMkUnOidxZnInLCdcXHVEODM1XFx1RENDNic6J3FzY3InLCdcXHVEODM1XFx1RENBQyc6J1FzY3InLCdcXHVEODM1XFx1REQxNCc6J1FmcicsJ1xcdTIxMUEnOidRb3BmJywnXFx1MDEzOCc6J2tncmVlbicsJ1xcdUQ4MzVcXHVERDJGJzoncmZyJywnXFx1RDgzNVxcdURENjMnOidyb3BmJywnXFx1RDgzNVxcdURDQzcnOidyc2NyJywnXFx1MjExQic6J1JzY3InLCdcXHUyMTFDJzonUmUnLCdcXHUyMTFEJzonUm9wZicsJ1xcdTAxNTUnOidyYWN1dGUnLCdcXHUwMTU0JzonUmFjdXRlJywnXFx1MDE1OSc6J3JjYXJvbicsJ1xcdTAxNTgnOidSY2Fyb24nLCdcXHUwMTU3JzoncmNlZGlsJywnXFx1MDE1Nic6J1JjZWRpbCcsJ1xcdUQ4MzVcXHVERDY0Jzonc29wZicsJ1xcdUQ4MzVcXHVEQ0M4Jzonc3NjcicsJ1xcdUQ4MzVcXHVERDMwJzonc2ZyJywnXFx1RDgzNVxcdURENEEnOidTb3BmJywnXFx1RDgzNVxcdUREMTYnOidTZnInLCdcXHVEODM1XFx1RENBRSc6J1NzY3InLCdcXHUyNEM4Jzonb1MnLCdcXHUwMTVCJzonc2FjdXRlJywnXFx1MDE1QSc6J1NhY3V0ZScsJ1xcdTAxNUQnOidzY2lyYycsJ1xcdTAxNUMnOidTY2lyYycsJ1xcdTAxNjEnOidzY2Fyb24nLCdcXHUwMTYwJzonU2Nhcm9uJywnXFx1MDE1Ric6J3NjZWRpbCcsJ1xcdTAxNUUnOidTY2VkaWwnLCdcXHhERic6J3N6bGlnJywnXFx1RDgzNVxcdUREMzEnOid0ZnInLCdcXHVEODM1XFx1RENDOSc6J3RzY3InLCdcXHVEODM1XFx1REQ2NSc6J3RvcGYnLCdcXHVEODM1XFx1RENBRic6J1RzY3InLCdcXHVEODM1XFx1REQxNyc6J1RmcicsJ1xcdUQ4MzVcXHVERDRCJzonVG9wZicsJ1xcdTAxNjUnOid0Y2Fyb24nLCdcXHUwMTY0JzonVGNhcm9uJywnXFx1MDE2Myc6J3RjZWRpbCcsJ1xcdTAxNjInOidUY2VkaWwnLCdcXHUyMTIyJzondHJhZGUnLCdcXHUwMTY3JzondHN0cm9rJywnXFx1MDE2Nic6J1RzdHJvaycsJ1xcdUQ4MzVcXHVEQ0NBJzondXNjcicsJ1xcdUQ4MzVcXHVERDY2JzondW9wZicsJ1xcdUQ4MzVcXHVERDMyJzondWZyJywnXFx1RDgzNVxcdURENEMnOidVb3BmJywnXFx1RDgzNVxcdUREMTgnOidVZnInLCdcXHVEODM1XFx1RENCMCc6J1VzY3InLCdcXHhGQSc6J3VhY3V0ZScsJ1xceERBJzonVWFjdXRlJywnXFx4RjknOid1Z3JhdmUnLCdcXHhEOSc6J1VncmF2ZScsJ1xcdTAxNkQnOid1YnJldmUnLCdcXHUwMTZDJzonVWJyZXZlJywnXFx4RkInOid1Y2lyYycsJ1xceERCJzonVWNpcmMnLCdcXHUwMTZGJzondXJpbmcnLCdcXHUwMTZFJzonVXJpbmcnLCdcXHhGQyc6J3V1bWwnLCdcXHhEQyc6J1V1bWwnLCdcXHUwMTcxJzondWRibGFjJywnXFx1MDE3MCc6J1VkYmxhYycsJ1xcdTAxNjknOid1dGlsZGUnLCdcXHUwMTY4JzonVXRpbGRlJywnXFx1MDE3Myc6J3VvZ29uJywnXFx1MDE3Mic6J1VvZ29uJywnXFx1MDE2Qic6J3VtYWNyJywnXFx1MDE2QSc6J1VtYWNyJywnXFx1RDgzNVxcdUREMzMnOid2ZnInLCdcXHVEODM1XFx1REQ2Nyc6J3ZvcGYnLCdcXHVEODM1XFx1RENDQic6J3ZzY3InLCdcXHVEODM1XFx1REQxOSc6J1ZmcicsJ1xcdUQ4MzVcXHVERDREJzonVm9wZicsJ1xcdUQ4MzVcXHVEQ0IxJzonVnNjcicsJ1xcdUQ4MzVcXHVERDY4Jzond29wZicsJ1xcdUQ4MzVcXHVEQ0NDJzond3NjcicsJ1xcdUQ4MzVcXHVERDM0Jzond2ZyJywnXFx1RDgzNVxcdURDQjInOidXc2NyJywnXFx1RDgzNVxcdURENEUnOidXb3BmJywnXFx1RDgzNVxcdUREMUEnOidXZnInLCdcXHUwMTc1Jzond2NpcmMnLCdcXHUwMTc0JzonV2NpcmMnLCdcXHVEODM1XFx1REQzNSc6J3hmcicsJ1xcdUQ4MzVcXHVEQ0NEJzoneHNjcicsJ1xcdUQ4MzVcXHVERDY5JzoneG9wZicsJ1xcdUQ4MzVcXHVERDRGJzonWG9wZicsJ1xcdUQ4MzVcXHVERDFCJzonWGZyJywnXFx1RDgzNVxcdURDQjMnOidYc2NyJywnXFx1RDgzNVxcdUREMzYnOid5ZnInLCdcXHVEODM1XFx1RENDRSc6J3lzY3InLCdcXHVEODM1XFx1REQ2QSc6J3lvcGYnLCdcXHVEODM1XFx1RENCNCc6J1lzY3InLCdcXHVEODM1XFx1REQxQyc6J1lmcicsJ1xcdUQ4MzVcXHVERDUwJzonWW9wZicsJ1xceEZEJzoneWFjdXRlJywnXFx4REQnOidZYWN1dGUnLCdcXHUwMTc3JzoneWNpcmMnLCdcXHUwMTc2JzonWWNpcmMnLCdcXHhGRic6J3l1bWwnLCdcXHUwMTc4JzonWXVtbCcsJ1xcdUQ4MzVcXHVEQ0NGJzonenNjcicsJ1xcdUQ4MzVcXHVERDM3JzonemZyJywnXFx1RDgzNVxcdURENkInOid6b3BmJywnXFx1MjEyOCc6J1pmcicsJ1xcdTIxMjQnOidab3BmJywnXFx1RDgzNVxcdURDQjUnOidac2NyJywnXFx1MDE3QSc6J3phY3V0ZScsJ1xcdTAxNzknOidaYWN1dGUnLCdcXHUwMTdFJzonemNhcm9uJywnXFx1MDE3RCc6J1pjYXJvbicsJ1xcdTAxN0MnOid6ZG90JywnXFx1MDE3Qic6J1pkb3QnLCdcXHUwMUI1JzonaW1wZWQnLCdcXHhGRSc6J3Rob3JuJywnXFx4REUnOidUSE9STicsJ1xcdTAxNDknOiduYXBvcycsJ1xcdTAzQjEnOidhbHBoYScsJ1xcdTAzOTEnOidBbHBoYScsJ1xcdTAzQjInOidiZXRhJywnXFx1MDM5Mic6J0JldGEnLCdcXHUwM0IzJzonZ2FtbWEnLCdcXHUwMzkzJzonR2FtbWEnLCdcXHUwM0I0JzonZGVsdGEnLCdcXHUwMzk0JzonRGVsdGEnLCdcXHUwM0I1JzonZXBzaScsJ1xcdTAzRjUnOidlcHNpdicsJ1xcdTAzOTUnOidFcHNpbG9uJywnXFx1MDNERCc6J2dhbW1hZCcsJ1xcdTAzREMnOidHYW1tYWQnLCdcXHUwM0I2JzonemV0YScsJ1xcdTAzOTYnOidaZXRhJywnXFx1MDNCNyc6J2V0YScsJ1xcdTAzOTcnOidFdGEnLCdcXHUwM0I4JzondGhldGEnLCdcXHUwM0QxJzondGhldGF2JywnXFx1MDM5OCc6J1RoZXRhJywnXFx1MDNCOSc6J2lvdGEnLCdcXHUwMzk5JzonSW90YScsJ1xcdTAzQkEnOidrYXBwYScsJ1xcdTAzRjAnOidrYXBwYXYnLCdcXHUwMzlBJzonS2FwcGEnLCdcXHUwM0JCJzonbGFtYmRhJywnXFx1MDM5Qic6J0xhbWJkYScsJ1xcdTAzQkMnOidtdScsJ1xceEI1JzonbWljcm8nLCdcXHUwMzlDJzonTXUnLCdcXHUwM0JEJzonbnUnLCdcXHUwMzlEJzonTnUnLCdcXHUwM0JFJzoneGknLCdcXHUwMzlFJzonWGknLCdcXHUwM0JGJzonb21pY3JvbicsJ1xcdTAzOUYnOidPbWljcm9uJywnXFx1MDNDMCc6J3BpJywnXFx1MDNENic6J3BpdicsJ1xcdTAzQTAnOidQaScsJ1xcdTAzQzEnOidyaG8nLCdcXHUwM0YxJzoncmhvdicsJ1xcdTAzQTEnOidSaG8nLCdcXHUwM0MzJzonc2lnbWEnLCdcXHUwM0EzJzonU2lnbWEnLCdcXHUwM0MyJzonc2lnbWFmJywnXFx1MDNDNCc6J3RhdScsJ1xcdTAzQTQnOidUYXUnLCdcXHUwM0M1JzondXBzaScsJ1xcdTAzQTUnOidVcHNpbG9uJywnXFx1MDNEMic6J1Vwc2knLCdcXHUwM0M2JzoncGhpJywnXFx1MDNENSc6J3BoaXYnLCdcXHUwM0E2JzonUGhpJywnXFx1MDNDNyc6J2NoaScsJ1xcdTAzQTcnOidDaGknLCdcXHUwM0M4JzoncHNpJywnXFx1MDNBOCc6J1BzaScsJ1xcdTAzQzknOidvbWVnYScsJ1xcdTAzQTknOidvaG0nLCdcXHUwNDMwJzonYWN5JywnXFx1MDQxMCc6J0FjeScsJ1xcdTA0MzEnOidiY3knLCdcXHUwNDExJzonQmN5JywnXFx1MDQzMic6J3ZjeScsJ1xcdTA0MTInOidWY3knLCdcXHUwNDMzJzonZ2N5JywnXFx1MDQxMyc6J0djeScsJ1xcdTA0NTMnOidnamN5JywnXFx1MDQwMyc6J0dKY3knLCdcXHUwNDM0JzonZGN5JywnXFx1MDQxNCc6J0RjeScsJ1xcdTA0NTInOidkamN5JywnXFx1MDQwMic6J0RKY3knLCdcXHUwNDM1JzonaWVjeScsJ1xcdTA0MTUnOidJRWN5JywnXFx1MDQ1MSc6J2lvY3knLCdcXHUwNDAxJzonSU9jeScsJ1xcdTA0NTQnOidqdWtjeScsJ1xcdTA0MDQnOidKdWtjeScsJ1xcdTA0MzYnOid6aGN5JywnXFx1MDQxNic6J1pIY3knLCdcXHUwNDM3JzonemN5JywnXFx1MDQxNyc6J1pjeScsJ1xcdTA0NTUnOidkc2N5JywnXFx1MDQwNSc6J0RTY3knLCdcXHUwNDM4JzonaWN5JywnXFx1MDQxOCc6J0ljeScsJ1xcdTA0NTYnOidpdWtjeScsJ1xcdTA0MDYnOidJdWtjeScsJ1xcdTA0NTcnOid5aWN5JywnXFx1MDQwNyc6J1lJY3knLCdcXHUwNDM5JzonamN5JywnXFx1MDQxOSc6J0pjeScsJ1xcdTA0NTgnOidqc2VyY3knLCdcXHUwNDA4JzonSnNlcmN5JywnXFx1MDQzQSc6J2tjeScsJ1xcdTA0MUEnOidLY3knLCdcXHUwNDVDJzona2pjeScsJ1xcdTA0MEMnOidLSmN5JywnXFx1MDQzQic6J2xjeScsJ1xcdTA0MUInOidMY3knLCdcXHUwNDU5JzonbGpjeScsJ1xcdTA0MDknOidMSmN5JywnXFx1MDQzQyc6J21jeScsJ1xcdTA0MUMnOidNY3knLCdcXHUwNDNEJzonbmN5JywnXFx1MDQxRCc6J05jeScsJ1xcdTA0NUEnOiduamN5JywnXFx1MDQwQSc6J05KY3knLCdcXHUwNDNFJzonb2N5JywnXFx1MDQxRSc6J09jeScsJ1xcdTA0M0YnOidwY3knLCdcXHUwNDFGJzonUGN5JywnXFx1MDQ0MCc6J3JjeScsJ1xcdTA0MjAnOidSY3knLCdcXHUwNDQxJzonc2N5JywnXFx1MDQyMSc6J1NjeScsJ1xcdTA0NDInOid0Y3knLCdcXHUwNDIyJzonVGN5JywnXFx1MDQ1Qic6J3RzaGN5JywnXFx1MDQwQic6J1RTSGN5JywnXFx1MDQ0Myc6J3VjeScsJ1xcdTA0MjMnOidVY3knLCdcXHUwNDVFJzondWJyY3knLCdcXHUwNDBFJzonVWJyY3knLCdcXHUwNDQ0JzonZmN5JywnXFx1MDQyNCc6J0ZjeScsJ1xcdTA0NDUnOidraGN5JywnXFx1MDQyNSc6J0tIY3knLCdcXHUwNDQ2JzondHNjeScsJ1xcdTA0MjYnOidUU2N5JywnXFx1MDQ0Nyc6J2NoY3knLCdcXHUwNDI3JzonQ0hjeScsJ1xcdTA0NUYnOidkemN5JywnXFx1MDQwRic6J0RaY3knLCdcXHUwNDQ4Jzonc2hjeScsJ1xcdTA0MjgnOidTSGN5JywnXFx1MDQ0OSc6J3NoY2hjeScsJ1xcdTA0MjknOidTSENIY3knLCdcXHUwNDRBJzonaGFyZGN5JywnXFx1MDQyQSc6J0hBUkRjeScsJ1xcdTA0NEInOid5Y3knLCdcXHUwNDJCJzonWWN5JywnXFx1MDQ0Qyc6J3NvZnRjeScsJ1xcdTA0MkMnOidTT0ZUY3knLCdcXHUwNDREJzonZWN5JywnXFx1MDQyRCc6J0VjeScsJ1xcdTA0NEUnOid5dWN5JywnXFx1MDQyRSc6J1lVY3knLCdcXHUwNDRGJzoneWFjeScsJ1xcdTA0MkYnOidZQWN5JywnXFx1MjEzNSc6J2FsZXBoJywnXFx1MjEzNic6J2JldGgnLCdcXHUyMTM3JzonZ2ltZWwnLCdcXHUyMTM4JzonZGFsZXRoJ307XG5cblx0dmFyIHJlZ2V4RXNjYXBlID0gL1tcIiYnPD5gXS9nO1xuXHR2YXIgZXNjYXBlTWFwID0ge1xuXHRcdCdcIic6ICcmcXVvdDsnLFxuXHRcdCcmJzogJyZhbXA7Jyxcblx0XHQnXFwnJzogJyYjeDI3OycsXG5cdFx0JzwnOiAnJmx0OycsXG5cdFx0Ly8gU2VlIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kczogaW4gSFRNTCwgdGhlXG5cdFx0Ly8gZm9sbG93aW5nIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdW5sZXNzIGl04oCZcyBwYXJ0IG9mIGEgdGFnIG9yIGFuXG5cdFx0Ly8gdW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiBXZeKAmXJlIG9ubHkgZXNjYXBpbmcgaXQgdG8gc3VwcG9ydCB0aG9zZVxuXHRcdC8vIHNpdHVhdGlvbnMsIGFuZCBmb3IgWE1MIHN1cHBvcnQuXG5cdFx0Jz4nOiAnJmd0OycsXG5cdFx0Ly8gSW4gSW50ZXJuZXQgRXhwbG9yZXIg4omkIDgsIHRoZSBiYWNrdGljayBjaGFyYWN0ZXIgY2FuIGJlIHVzZWRcblx0XHQvLyB0byBicmVhayBvdXQgb2YgKHVuKXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIG9yIEhUTUwgY29tbWVudHMuXG5cdFx0Ly8gU2VlIGh0dHA6Ly9odG1sNXNlYy5vcmcvIzEwMiwgaHR0cDovL2h0bWw1c2VjLm9yZy8jMTA4LCBhbmRcblx0XHQvLyBodHRwOi8vaHRtbDVzZWMub3JnLyMxMzMuXG5cdFx0J2AnOiAnJiN4NjA7J1xuXHR9O1xuXG5cdHZhciByZWdleEludmFsaWRFbnRpdHkgPSAvJiMoPzpbeFhdW15hLWZBLUYwLTldfFteMC05eFhdKS87XG5cdHZhciByZWdleEludmFsaWRSYXdDb2RlUG9pbnQgPSAvW1xcMC1cXHgwOFxceDBCXFx4MEUtXFx4MUZcXHg3Ri1cXHg5RlxcdUZERDAtXFx1RkRFRlxcdUZGRkVcXHVGRkZGXXxbXFx1RDgzRlxcdUQ4N0ZcXHVEOEJGXFx1RDhGRlxcdUQ5M0ZcXHVEOTdGXFx1RDlCRlxcdUQ5RkZcXHVEQTNGXFx1REE3RlxcdURBQkZcXHVEQUZGXFx1REIzRlxcdURCN0ZcXHVEQkJGXFx1REJGRl1bXFx1REZGRVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcblx0dmFyIHJlZ2V4RGVjb2RlID0gLyYoQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbHxEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3d8Q2xvY2t3aXNlQ29udG91ckludGVncmFsfE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyfE5vdFNxdWFyZVN1cGVyc2V0RXF1YWx8RGlhY3JpdGljYWxEb3VibGVBY3V0ZXxOb3RSaWdodFRyaWFuZ2xlRXF1YWx8Tm90U3VjY2VlZHNTbGFudEVxdWFsfE5vdFByZWNlZGVzU2xhbnRFcXVhbHxDbG9zZUN1cmx5RG91YmxlUXVvdGV8TmVnYXRpdmVWZXJ5VGhpblNwYWNlfERvdWJsZUNvbnRvdXJJbnRlZ3JhbHxGaWxsZWRWZXJ5U21hbGxTcXVhcmV8Q2FwaXRhbERpZmZlcmVudGlhbER8T3BlbkN1cmx5RG91YmxlUXVvdGV8RW1wdHlWZXJ5U21hbGxTcXVhcmV8TmVzdGVkR3JlYXRlckdyZWF0ZXJ8RG91YmxlTG9uZ1JpZ2h0QXJyb3d8Tm90TGVmdFRyaWFuZ2xlRXF1YWx8Tm90R3JlYXRlclNsYW50RXF1YWx8UmV2ZXJzZVVwRXF1aWxpYnJpdW18RG91YmxlTGVmdFJpZ2h0QXJyb3d8Tm90U3F1YXJlU3Vic2V0RXF1YWx8Tm90RG91YmxlVmVydGljYWxCYXJ8UmlnaHRBcnJvd0xlZnRBcnJvd3xOb3RHcmVhdGVyRnVsbEVxdWFsfE5vdFJpZ2h0VHJpYW5nbGVCYXJ8U3F1YXJlU3VwZXJzZXRFcXVhbHxEb3duTGVmdFJpZ2h0VmVjdG9yfERvdWJsZUxvbmdMZWZ0QXJyb3d8bGVmdHJpZ2h0c3F1aWdhcnJvd3xMZWZ0QXJyb3dSaWdodEFycm93fE5lZ2F0aXZlTWVkaXVtU3BhY2V8YmxhY2t0cmlhbmdsZXJpZ2h0fFJpZ2h0RG93blZlY3RvckJhcnxQcmVjZWRlc1NsYW50RXF1YWx8UmlnaHREb3VibGVCcmFja2V0fFN1Y2NlZWRzU2xhbnRFcXVhbHxOb3RMZWZ0VHJpYW5nbGVCYXJ8UmlnaHRUcmlhbmdsZUVxdWFsfFNxdWFyZUludGVyc2VjdGlvbnxSaWdodERvd25UZWVWZWN0b3J8UmV2ZXJzZUVxdWlsaWJyaXVtfE5lZ2F0aXZlVGhpY2tTcGFjZXxsb25nbGVmdHJpZ2h0YXJyb3d8TG9uZ2xlZnRyaWdodGFycm93fExvbmdMZWZ0UmlnaHRBcnJvd3xEb3duUmlnaHRUZWVWZWN0b3J8RG93blJpZ2h0VmVjdG9yQmFyfEdyZWF0ZXJTbGFudEVxdWFsfFNxdWFyZVN1YnNldEVxdWFsfExlZnREb3duVmVjdG9yQmFyfExlZnREb3VibGVCcmFja2V0fFZlcnRpY2FsU2VwYXJhdG9yfHJpZ2h0bGVmdGhhcnBvb25zfE5vdEdyZWF0ZXJHcmVhdGVyfE5vdFNxdWFyZVN1cGVyc2V0fGJsYWNrdHJpYW5nbGVsZWZ0fGJsYWNrdHJpYW5nbGVkb3dufE5lZ2F0aXZlVGhpblNwYWNlfExlZnREb3duVGVlVmVjdG9yfE5vdExlc3NTbGFudEVxdWFsfGxlZnRyaWdodGhhcnBvb25zfERvdWJsZVVwRG93bkFycm93fERvdWJsZVZlcnRpY2FsQmFyfExlZnRUcmlhbmdsZUVxdWFsfEZpbGxlZFNtYWxsU3F1YXJlfHR3b2hlYWRyaWdodGFycm93fE5vdE5lc3RlZExlc3NMZXNzfERvd25MZWZ0VGVlVmVjdG9yfERvd25MZWZ0VmVjdG9yQmFyfFJpZ2h0QW5nbGVCcmFja2V0fE5vdFRpbGRlRnVsbEVxdWFsfE5vdFJldmVyc2VFbGVtZW50fFJpZ2h0VXBEb3duVmVjdG9yfERpYWNyaXRpY2FsVGlsZGV8Tm90U3VjY2VlZHNUaWxkZXxjaXJjbGVhcnJvd3JpZ2h0fE5vdFByZWNlZGVzRXF1YWx8cmlnaHRoYXJwb29uZG93bnxEb3VibGVSaWdodEFycm93fE5vdFN1Y2NlZWRzRXF1YWx8Tm9uQnJlYWtpbmdTcGFjZXxOb3RSaWdodFRyaWFuZ2xlfExlc3NFcXVhbEdyZWF0ZXJ8UmlnaHRVcFRlZVZlY3RvcnxMZWZ0QW5nbGVCcmFja2V0fEdyZWF0ZXJGdWxsRXF1YWx8RG93bkFycm93VXBBcnJvd3xSaWdodFVwVmVjdG9yQmFyfHR3b2hlYWRsZWZ0YXJyb3d8R3JlYXRlckVxdWFsTGVzc3xkb3duaGFycG9vbnJpZ2h0fFJpZ2h0VHJpYW5nbGVCYXJ8bnRyaWFuZ2xlcmlnaHRlcXxOb3RTdXBlcnNldEVxdWFsfExlZnRVcERvd25WZWN0b3J8RGlhY3JpdGljYWxBY3V0ZXxyaWdodHJpZ2h0YXJyb3dzfHZhcnRyaWFuZ2xlcmlnaHR8VXBBcnJvd0Rvd25BcnJvd3xEaWFjcml0aWNhbEdyYXZlfFVuZGVyUGFyZW50aGVzaXN8RW1wdHlTbWFsbFNxdWFyZXxMZWZ0VXBWZWN0b3JCYXJ8bGVmdHJpZ2h0YXJyb3dzfERvd25SaWdodFZlY3Rvcnxkb3duaGFycG9vbmxlZnR8dHJpYW5nbGVyaWdodGVxfFNob3J0UmlnaHRBcnJvd3xPdmVyUGFyZW50aGVzaXN8RG91YmxlTGVmdEFycm93fERvdWJsZURvd25BcnJvd3xOb3RTcXVhcmVTdWJzZXR8YmlndHJpYW5nbGVkb3dufG50cmlhbmdsZWxlZnRlcXxVcHBlclJpZ2h0QXJyb3d8Y3VydmVhcnJvd3JpZ2h0fHZhcnRyaWFuZ2xlbGVmdHxOb3RMZWZ0VHJpYW5nbGV8bmxlZnRyaWdodGFycm93fExvd2VyUmlnaHRBcnJvd3xOb3RIdW1wRG93bkh1bXB8Tm90R3JlYXRlclRpbGRlfHJpZ2h0dGhyZWV0aW1lc3xMZWZ0VXBUZWVWZWN0b3J8Tm90R3JlYXRlckVxdWFsfHN0cmFpZ2h0ZXBzaWxvbnxMZWZ0VHJpYW5nbGVCYXJ8cmlnaHRzcXVpZ2Fycm93fENvbnRvdXJJbnRlZ3JhbHxyaWdodGxlZnRhcnJvd3N8Q2xvc2VDdXJseVF1b3RlfFJpZ2h0RG93blZlY3RvcnxMZWZ0UmlnaHRWZWN0b3J8bkxlZnRyaWdodGFycm93fGxlZnRoYXJwb29uZG93bnxjaXJjbGVhcnJvd2xlZnR8U3F1YXJlU3VwZXJzZXR8T3BlbkN1cmx5UXVvdGV8aG9va3JpZ2h0YXJyb3d8SG9yaXpvbnRhbExpbmV8RGlhY3JpdGljYWxEb3R8Tm90TGVzc0dyZWF0ZXJ8bnRyaWFuZ2xlcmlnaHR8RG91YmxlUmlnaHRUZWV8SW52aXNpYmxlQ29tbWF8SW52aXNpYmxlVGltZXN8TG93ZXJMZWZ0QXJyb3d8RG93bkxlZnRWZWN0b3J8Tm90U3Vic2V0RXF1YWx8Y3VydmVhcnJvd2xlZnR8dHJpYW5nbGVsZWZ0ZXF8Tm90VmVydGljYWxCYXJ8VGlsZGVGdWxsRXF1YWx8ZG93bmRvd25hcnJvd3N8Tm90R3JlYXRlckxlc3N8UmlnaHRUZWVWZWN0b3J8WmVyb1dpZHRoU3BhY2V8bG9vcGFycm93cmlnaHR8TG9uZ1JpZ2h0QXJyb3d8ZG91YmxlYmFyd2VkZ2V8U2hvcnRMZWZ0QXJyb3d8U2hvcnREb3duQXJyb3d8UmlnaHRWZWN0b3JCYXJ8R3JlYXRlckdyZWF0ZXJ8UmV2ZXJzZUVsZW1lbnR8cmlnaHRoYXJwb29udXB8TGVzc1NsYW50RXF1YWx8bGVmdHRocmVldGltZXN8dXBoYXJwb29ucmlnaHR8cmlnaHRhcnJvd3RhaWx8TGVmdERvd25WZWN0b3J8TG9uZ3JpZ2h0YXJyb3d8TmVzdGVkTGVzc0xlc3N8VXBwZXJMZWZ0QXJyb3d8bnNob3J0cGFyYWxsZWx8bGVmdGxlZnRhcnJvd3N8bGVmdHJpZ2h0YXJyb3d8TGVmdHJpZ2h0YXJyb3d8TGVmdFJpZ2h0QXJyb3d8bG9uZ3JpZ2h0YXJyb3d8dXBoYXJwb29ubGVmdHxSaWdodEFycm93QmFyfEFwcGx5RnVuY3Rpb258TGVmdFRlZVZlY3RvcnxsZWZ0YXJyb3d0YWlsfE5vdEVxdWFsVGlsZGV8dmFyc3Vic2V0bmVxcXx2YXJzdXBzZXRuZXFxfFJpZ2h0VGVlQXJyb3d8U3VjY2VlZHNFcXVhbHxTdWNjZWVkc1RpbGRlfExlZnRWZWN0b3JCYXJ8U3VwZXJzZXRFcXVhbHxob29rbGVmdGFycm93fERpZmZlcmVudGlhbER8VmVydGljYWxUaWxkZXxWZXJ5VGhpblNwYWNlfGJsYWNrdHJpYW5nbGV8YmlndHJpYW5nbGV1cHxMZXNzRnVsbEVxdWFsfGRpdmlkZW9udGltZXN8bGVmdGhhcnBvb251cHxVcEVxdWlsaWJyaXVtfG50cmlhbmdsZWxlZnR8UmlnaHRUcmlhbmdsZXxtZWFzdXJlZGFuZ2xlfHNob3J0cGFyYWxsZWx8bG9uZ2xlZnRhcnJvd3xMb25nbGVmdGFycm93fExvbmdMZWZ0QXJyb3d8RG91YmxlTGVmdFRlZXxQb2luY2FyZXBsYW5lfFByZWNlZGVzRXF1YWx8dHJpYW5nbGVyaWdodHxEb3VibGVVcEFycm93fFJpZ2h0VXBWZWN0b3J8ZmFsbGluZ2RvdHNlcXxsb29wYXJyb3dsZWZ0fFByZWNlZGVzVGlsZGV8Tm90VGlsZGVFcXVhbHxOb3RUaWxkZVRpbGRlfHNtYWxsc2V0bWludXN8UHJvcG9ydGlvbmFsfHRyaWFuZ2xlbGVmdHx0cmlhbmdsZWRvd258VW5kZXJCcmFja2V0fE5vdEh1bXBFcXVhbHxleHBvbmVudGlhbGV8RXhwb25lbnRpYWxFfE5vdExlc3NUaWxkZXxIaWxiZXJ0U3BhY2V8UmlnaHRDZWlsaW5nfGJsYWNrbG96ZW5nZXx2YXJzdXBzZXRuZXF8SHVtcERvd25IdW1wfEdyZWF0ZXJFcXVhbHxWZXJ0aWNhbExpbmV8TGVmdFRlZUFycm93fE5vdExlc3NFcXVhbHxEb3duVGVlQXJyb3d8TGVmdFRyaWFuZ2xlfHZhcnN1YnNldG5lcXxJbnRlcnNlY3Rpb258Tm90Q29uZ3J1ZW50fERvd25BcnJvd0JhcnxMZWZ0VXBWZWN0b3J8TGVmdEFycm93QmFyfHJpc2luZ2RvdHNlcXxHcmVhdGVyVGlsZGV8Um91bmRJbXBsaWVzfFNxdWFyZVN1YnNldHxTaG9ydFVwQXJyb3d8Tm90U3VwZXJzZXR8cXVhdGVybmlvbnN8cHJlY25hcHByb3h8YmFja2Vwc2lsb258cHJlY2N1cmx5ZXF8T3ZlckJyYWNrZXR8YmxhY2tzcXVhcmV8TWVkaXVtU3BhY2V8VmVydGljYWxCYXJ8Y2lyY2xlZGNpcmN8Y2lyY2xlZGRhc2h8Q2lyY2xlTWludXN8Q2lyY2xlVGltZXN8TGVzc0dyZWF0ZXJ8Y3VybHllcXByZWN8Y3VybHllcXN1Y2N8ZGlhbW9uZHN1aXR8VXBEb3duQXJyb3d8VXBkb3duYXJyb3d8UnVsZURlbGF5ZWR8UnJpZ2h0YXJyb3d8dXBkb3duYXJyb3d8UmlnaHRWZWN0b3J8blJpZ2h0YXJyb3d8bnJpZ2h0YXJyb3d8ZXFzbGFudGxlc3N8TGVmdENlaWxpbmd8RXF1aWxpYnJpdW18U21hbGxDaXJjbGV8ZXhwZWN0YXRpb258Tm90U3VjY2VlZHN8dGhpY2thcHByb3h8R3JlYXRlckxlc3N8U3F1YXJlVW5pb258Tm90UHJlY2VkZXN8Tm90TGVzc0xlc3N8c3RyYWlnaHRwaGl8c3VjY25hcHByb3h8c3VjY2N1cmx5ZXF8U3Vic2V0RXF1YWx8c3FzdXBzZXRlcXxQcm9wb3J0aW9ufExhcGxhY2V0cmZ8SW1hZ2luYXJ5SXxzdXBzZXRuZXFxfE5vdEdyZWF0ZXJ8Z3RyZXFxbGVzc3xOb3RFbGVtZW50fFRoaWNrU3BhY2V8VGlsZGVFcXVhbHxUaWxkZVRpbGRlfEZvdXJpZXJ0cmZ8cm1vdXN0YWNoZXxFcXVhbFRpbGRlfGVxc2xhbnRndHJ8VW5kZXJCcmFjZXxMZWZ0VmVjdG9yfFVwQXJyb3dCYXJ8bkxlZnRhcnJvd3xuc3Vic2V0ZXFxfHN1YnNldG5lcXF8bnN1cHNldGVxcXxubGVmdGFycm93fHN1Y2NhcHByb3h8bGVzc2FwcHJveHxVcFRlZUFycm93fHVwdXBhcnJvd3N8Y3VybHl3ZWRnZXxsZXNzZXFxZ3RyfHZhcmVwc2lsb258dmFybm90aGluZ3xSaWdodEZsb29yfGNvbXBsZW1lbnR8Q2lyY2xlUGx1c3xzcXN1YnNldGVxfExsZWZ0YXJyb3d8Y2lyY2xlZGFzdHxSaWdodEFycm93fFJpZ2h0YXJyb3d8cmlnaHRhcnJvd3xsbW91c3RhY2hlfEJlcm5vdWxsaXN8cHJlY2FwcHJveHxtYXBzdG9sZWZ0fG1hcHN0b2Rvd258bG9uZ21hcHN0b3xkb3RzcXVhcmV8ZG93bmFycm93fERvdWJsZURvdHxuc3Vic2V0ZXF8c3Vwc2V0bmVxfGxlZnRhcnJvd3xuc3Vwc2V0ZXF8c3Vic2V0bmVxfFRoaW5TcGFjZXxuZ2Vxc2xhbnR8c3Vic2V0ZXFxfEh1bXBFcXVhbHxOb3RTdWJzZXR8dHJpYW5nbGVxfE5vdEN1cENhcHxsZXNzZXFndHJ8aGVhcnRzdWl0fFRyaXBsZURvdHxMZWZ0YXJyb3d8Q29wcm9kdWN0fENvbmdydWVudHx2YXJwcm9wdG98Y29tcGxleGVzfGd2ZXJ0bmVxcXxMZWZ0QXJyb3d8TGVzc1RpbGRlfHN1cHNldGVxcXxNaW51c1BsdXN8Q2lyY2xlRG90fG5sZXFzbGFudHxOb3RFeGlzdHN8Z3RyZXFsZXNzfG5wYXJhbGxlbHxVbmlvblBsdXN8TGVmdEZsb29yfGNoZWNrbWFya3xDZW50ZXJEb3R8Y2VudGVyZG90fE1lbGxpbnRyZnxndHJhcHByb3h8Ymlnb3RpbWVzfE92ZXJCcmFjZXxzcGFkZXN1aXR8dGhlcmVmb3JlfHBpdGNoZm9ya3xyYXRpb25hbHN8UGx1c01pbnVzfEJhY2tzbGFzaHxUaGVyZWZvcmV8RG93bkJyZXZlfGJhY2tzaW1lcXxiYWNrcHJpbWV8RG93bkFycm93fG5zaG9ydG1pZHxEb3duYXJyb3d8bHZlcnRuZXFxfGVxdnBhcnNsfGltYWdsaW5lfGltYWdwYXJ0fGluZmludGllfGludGVnZXJzfEludGVncmFsfGludGVyY2FsfExlc3NMZXNzfFVhcnJvY2lyfGludGxhcmhrfHNxc3Vwc2V0fGFuZ21zZGFmfHNxc3Vic2V0fGxsY29ybmVyfHZhcnRoZXRhfGN1cGJyY2FwfGxuYXBwcm94fFN1cGVyc2V0fFN1Y2hUaGF0fHN1Y2Nuc2ltfHN1Y2NuZXFxfGFuZ21zZGFnfGJpZ3VwbHVzfGN1cmx5dmVlfHRycGV6aXVtfFN1Y2NlZWRzfE5vdFRpbGRlfGJpZ3dlZGdlfGFuZ21zZGFofGFuZ3J0dmJkfHRyaW1pbnVzfGN3Y29uaW50fGZwYXJ0aW50fGxyY29ybmVyfHNtZXBhcnNsfHN1YnNldGVxfHVyY29ybmVyfGx1cmRzaGFyfGxhZW1wdHl2fEREb3RyYWhkfGFwcHJveGVxfGxkcnVzaGFyfGF3Y29uaW50fG1hcHN0b3VwfGJhY2tjb25nfHNob3J0bWlkfHRyaWFuZ2xlfGdlcXNsYW50fGdlc2RvdG9sfHRpbWVzYmFyfGNpcmNsZWRSfGNpcmNsZWRTfHNldG1pbnVzfG11bHRpbWFwfG5hdHVyYWxzfHNjcG9saW50fG5jb25nZG90fFJpZ2h0VGVlfGJveG1pbnVzfGduYXBwcm94fGJveHRpbWVzfGFuZHNsb3BlfHRoaWNrc2ltfGFuZ21zZGFhfHZhcnNpZ21hfGNpcmZuaW50fHJ0cmlsdHJpfGFuZ21zZGFifHJwcG9saW50fGFuZ21zZGFjfGJhcndlZGdlfGRyYmthcm93fGNsdWJzdWl0fHRoZXRhc3ltfGJzb2xoc3VifGNhcGJyY3VwfGR6aWdyYXJyfGRvdGVxZG90fERvdEVxdWFsfGRvdG1pbnVzfFVuZGVyQmFyfE5vdEVxdWFsfHJlYWxwYXJ0fG90aW1lc2FzfHVsY29ybmVyfGhrc2Vhcm93fGhrc3dhcm93fHBhcmFsbGVsfFBhcnRpYWxEfGVsaW50ZXJzfGVtcHR5c2V0fHBsdXNhY2lyfGJicmt0YnJrfGFuZ21zZGFkfHBvaW50aW50fGJpZ29wbHVzfGFuZ21zZGFlfFByZWNlZGVzfGJpZ3NxY3VwfHZhcmthcHBhfG5vdGluZG90fHN1cHNldGVxfHByZWNuZXFxfHByZWNuc2ltfHByb2ZhbGFyfHByb2ZsaW5lfHByb2ZzdXJmfGxlcXNsYW50fGxlc2RvdG9yfHJhZW1wdHl2fHN1YnBsdXN8bm90bml2Ynxub3RuaXZjfHN1YnJhcnJ8emlncmFycnx2emlnemFnfHN1Ym11bHR8c3ViZWRvdHxFbGVtZW50fGJldHdlZW58Y2lyc2NpcnxsYXJyYmZzfGxhcnJzaW18bG90aW1lc3xsYnJrc2xkfGxicmtzbHV8bG96ZW5nZXxsZHJkaGFyfGRia2Fyb3d8YmlnY2lyY3xlcHNpbG9ufHNpbXJhcnJ8c2ltcGx1c3xsdHF1ZXN0fEVwc2lsb258bHVydWhhcnxndHF1ZXN0fG1hbHRlc2V8bnBvbGludHxlcWNvbG9ufG5wcmVjZXF8Ymlnb2RvdHxkZGFnZ2VyfGd0cmxlc3N8Ym5lcXVpdnxoYXJyY2lyfGRkb3RzZXF8ZXF1aXZERHxiYWNrc2ltfGRlbXB0eXZ8bnNxc3ViZXxuc3FzdXBlfFVwc2lsb258bnN1YnNldHx1cHNpbG9ufG1pbnVzZHV8bnN1Y2NlcXxzd2Fycm93fG5zdXBzZXR8Y29sb25lcXxzZWFycm93fGJveHBsdXN8bmFwcHJveHxuYXR1cmFsfGFzeW1wZXF8YWxlZnN5bXxjb25nZG90fG5lYXJyb3d8Ymlnc3RhcnxkaWFtb25kfHN1cHBsdXN8dHJpdGltZXxMZWZ0VGVlfG52aW5maW58dHJpcGx1c3xOZXdMaW5lfG52bHRyaWV8bnZydHJpZXxud2Fycm93fG5leGlzdHN8RGlhbW9uZHxydWx1aGFyfEltcGxpZXN8c3VwbXVsdHxhbmd6YXJyfHN1cGxhcnJ8c3VwaHN1YnxxdWVzdGVxfGJlY2F1c2V8ZGlnYW1tYXxCZWNhdXNlfG9sY3Jvc3N8YmVtcHR5dnxvbWljcm9ufE9taWNyb258cm90aW1lc3xOb0JyZWFrfGludHByb2R8YW5ncnR2YnxvcmRlcm9mfHV3YW5nbGV8c3VwaHNvbHxsZXNkb3RvfG9yc2xvcGV8RG93blRlZXxyZWFsaW5lfGN1ZGFycmx8cmRsZGhhcnxPdmVyQmFyfHN1cGVkb3R8bGVzc2RvdHxzdXBkc3VifHRvcGZvcmt8c3VjY3NpbXxyYnJrc2x1fHJicmtzbGR8cGVydGVua3xjdWRhcnJyfGlzaW5kb3R8cGxhbmNraHxsZXNzZ3RyfHBsdXNjaXJ8Z2VzZG90b3xwbHVzc2ltfHBsdXN0d298bGVzc3NpbXxjdWxhcnJwfHJhcnJzaW18Q2F5bGV5c3xub3RpbnZhfG5vdGludmJ8bm90aW52Y3xVcEFycm93fFVwYXJyb3d8dXBhcnJvd3xOb3RMZXNzfGR3YW5nbGV8cHJlY3NpbXxQcm9kdWN0fGN1cmFycm18Q2NvbmludHxkb3RwbHVzfHJhcnJiZnN8Y2N1cHNzbXxDZWRpbGxhfGNlbXB0eXZ8bm90bml2YXxxdWF0aW50fGZyYWMzNXxmcmFjMzh8ZnJhYzQ1fGZyYWM1NnxmcmFjNTh8ZnJhYzc4fHRyaWRvdHx4b3BsdXN8Z2FjdXRlfGdhbW1hZHxHYW1tYWR8bGZpc2h0fGxmbG9vcnxiaWdjdXB8c3FzdXBlfGdicmV2ZXxHYnJldmV8bGhhcnVsfHNxc3ViZXxzcWN1cHN8R2NlZGlsfGFwYWNpcnxsbGhhcmR8bG1pZG90fExtaWRvdHxsbW91c3R8YW5kYW5kfHNxY2Fwc3xhcHByb3h8QWJyZXZlfHNwYWRlc3xjaXJjZXF8dHByaW1lfGRpdmlkZXx0b3BjaXJ8QXNzaWdufHRvcGJvdHxnZXNkb3R8ZGl2b254fHh1cGx1c3x0aW1lc2R8Z2VzbGVzfGF0aWxkZXxzb2xiYXJ8U09GVGN5fGxvcGx1c3x0aW1lc2J8bG93YXN0fGxvd2JhcnxkbGNvcm58ZGxjcm9wfHNvZnRjeXxkb2xsYXJ8bHBhcmx0fHRoa3NpbXxscmhhcmR8QXRpbGRlfGxzYXF1b3xzbWFzaHB8YmlndmVlfHRoaW5zcHx3cmVhdGh8Ymthcm93fGxzcXVvcnxsc3Ryb2t8THN0cm9rfGx0aHJlZXxsdGltZXN8bHRsYXJyfERvdERvdHxzaW1kb3R8bHRyUGFyfHdlaWVycHx4c3FjdXB8YW5nbXNkfHNpZ21hdnxzaWdtYWZ8emVldHJmfFpjYXJvbnx6Y2Fyb258bWFwc3RvfHZzdXBuZXx0aGV0YXZ8Y2lybWlkfG1hcmtlcnxtY29tbWF8WmFjdXRlfHZzdWJuRXx0aGVyZTR8Z3RsUGFyfHZzdWJuZXxib3R0b218Z3RyYXJyfFNIQ0hjeXxzaGNoY3l8bWlkYXN0fG1pZGNpcnxtaWRkb3R8bWludXNifG1pbnVzZHxndHJkb3R8Ym93dGllfHNmcm93bnxtbnBsdXN8bW9kZWxzfGNvbG9uZXxzZXN3YXJ8Q29sb25lfG1zdHBvc3xzZWFyaGt8Z3Ryc2ltfG5hY3V0ZXxOYWN1dGV8Ym94Ym94fHRlbHJlY3xoYWlyc3B8VGNlZGlsfG5idW1wZXxzY25zaW18bmNhcm9ufE5jYXJvbnxuY2VkaWx8TmNlZGlsfGhhbWlsdHxTY2VkaWx8bmVhcmhrfGhhcmRjeXxIQVJEY3l8dGNlZGlsfFRjYXJvbnxjb21tYXR8bmVxdWl2fG5lc2Vhcnx0Y2Fyb258dGFyZ2V0fGhlYXJ0c3xuZXhpc3R8dmFycmhvfHNjZWRpbHxTY2Fyb258c2Nhcm9ufGhlbGxpcHxTYWN1dGV8c2FjdXRlfGhlcmNvbnxzd253YXJ8Y29tcGZufHJ0aW1lc3xydGhyZWV8cnNxdW9yfHJzYXF1b3x6YWN1dGV8d2VkZ2VxfGhvbXRodHxiYXJ2ZWV8YmFyd2VkfEJhcndlZHxycGFyZ3R8aG9yYmFyfGNvbmludHxzd2FyaGt8cm9wbHVzfG5sdHJpZXxoc2xhc2h8aHN0cm9rfEhzdHJva3xybW91c3R8Q29uaW50fGJwcmltZXxoeWJ1bGx8aHlwaGVufGlhY3V0ZXxJYWN1dGV8c3Vwc3VwfHN1cHN1YnxzdXBzaW18dmFycGhpfGNvcHJvZHxicnZiYXJ8YWdyYXZlfFN1cHNldHxzdXBzZXR8aWdyYXZlfElncmF2ZXxub3RpbkV8QWdyYXZlfGlpaWludHxpaW5maW58Y29weXNyfHdlZGJhcnxWZXJiYXJ8dmFuZ3J0fGJlY2F1c3xpbmNhcmV8dmVyYmFyfGlub2RvdHxidWxsZXR8ZHJjb3JufGludGNhbHxkcmNyb3B8Y3VsYXJyfHZlbGxpcHxVdGlsZGV8YnVtcGVxfGN1cGNhcHxkc3Ryb2t8RHN0cm9rfEN1cENhcHxjdXBjdXB8Y3VwZG90fGVhY3V0ZXxFYWN1dGV8c3VwZG90fGlxdWVzdHxlYXN0ZXJ8ZWNhcm9ufEVjYXJvbnxlY29sb258aXNpbnN2fHV0aWxkZXxpdGlsZGV8SXRpbGRlfGN1cmFycnxzdWNjZXF8QnVtcGVxfGNhY3V0ZXx1bGNyb3B8bnBhcnNsfENhY3V0ZXxucHJjdWV8ZWdyYXZlfEVncmF2ZXxucmFycmN8bnJhcnJ3fHN1YnN1cHxzdWJzdWJ8bnJ0cmllfGpzZXJjeXxuc2NjdWV8SnNlcmN5fGthcHBhdnxrY2VkaWx8S2NlZGlsfHN1YnNpbXx1bGNvcm58bnNpbWVxfGVnc2RvdHx2ZWViYXJ8a2dyZWVufGNhcGFuZHxlbHNkb3R8U3Vic2V0fHN1YnNldHxjdXJyZW58YWFjdXRlfGxhY3V0ZXxMYWN1dGV8ZW1wdHl2fG50aWxkZXxOdGlsZGV8bGFncmFufGxhbWJkYXxMYW1iZGF8Y2FwY2FwfFVncmF2ZXxsYW5nbGV8c3ViZG90fGVtc3AxM3xudW1lcm98ZW1zcDE0fG52ZGFzaHxudkRhc2h8blZkYXNofG5WRGFzaHx1Z3JhdmV8dWZpc2h0fG52SGFycnxsYXJyZnN8bnZsQXJyfGxhcnJoa3xsYXJybHB8bGFycnBsfG52ckFycnxVZGJsYWN8bndhcmhrfGxhcnJ0bHxud25lYXJ8b2FjdXRlfE9hY3V0ZXxsYXRhaWx8bEF0YWlsfHNzdGFyZnxsYnJhY2V8b2RibGFjfE9kYmxhY3xsYnJhY2t8dWRibGFjfG9kc29sZHxlcGFyc2x8bGNhcm9ufExjYXJvbnxvZ3JhdmV8T2dyYXZlfGxjZWRpbHxMY2VkaWx8QWFjdXRlfHNzbWlsZXxzc2V0bW58c3F1YXJmfGxkcXVvcnxjYXBjdXB8b21pbnVzfGN5bGN0eXxyaGFydWx8ZXFjaXJjfGRhZ2dlcnxyZmxvb3J8cmZpc2h0fERhZ2dlcnxkYWxldGh8ZXF1YWxzfG9yaWdvZnxjYXBkb3R8ZXF1ZXN0fGRjYXJvbnxEY2Fyb258cmRxdW9yfG9zbGFzaHxPc2xhc2h8b3RpbGRlfE90aWxkZXxvdGltZXN8T3RpbWVzfHVyY3JvcHxVYnJldmV8dWJyZXZlfFlhY3V0ZXxVYWN1dGV8dWFjdXRlfFJjZWRpbHxyY2VkaWx8dXJjb3JufHBhcnNpbXxSY2Fyb258VmRhc2hsfHJjYXJvbnxUc3Ryb2t8cGVyY250fHBlcmlvZHxwZXJtaWx8RXhpc3RzfHlhY3V0ZXxyYnJhY2t8cmJyYWNlfHBobW1hdHxjY2Fyb258Q2Nhcm9ufHBsYW5ja3xjY2VkaWx8cGxhbmt2fHRzdHJva3xmZW1hbGV8cGx1c2RvfHBsdXNkdXxmZmlsaWd8cGx1c21ufGZmbGxpZ3xDY2VkaWx8ckF0YWlsfGRmaXNodHxiZXJub3V8cmF0YWlsfFJhcnJ0bHxyYXJydGx8YW5nc3BofHJhcnJwbHxyYXJybHB8cmFycmhrfHh3ZWRnZXx4b3RpbWV8Zm9yYWxsfEZvckFsbHxWdmRhc2h8dnN1cG5FfHByZWNlcXxiaWdjYXB8ZnJhYzEyfGZyYWMxM3xmcmFjMTR8cHJpbWVzfHJhcnJmc3xwcm5zaW18ZnJhYzE1fFNxdWFyZXxmcmFjMTZ8c3F1YXJlfGxlc2RvdHxmcmFjMTh8ZnJhYzIzfHByb3B0b3xwcnVyZWx8cmFycmFwfHJhbmdsZXxwdW5jc3B8ZnJhYzI1fFJhY3V0ZXxxcHJpbWV8cmFjdXRlfGxlc2dlc3xmcmFjMzR8YWJyZXZlfEFFbGlnfGVxc2ltfHV0ZG90fHNldG1ufHVydHJpfEVxdWFsfFVyaW5nfHNlQXJyfHVyaW5nfHNlYXJyfGRhc2h2fERhc2h2fG11bWFwfG5hYmxhfGlvZ29ufElvZ29ufHNkb3RlfHNkb3RifHNjc2ltfG5hcGlkfG5hcG9zfGVxdWl2fG5hdHVyfEFjaXJjfGRibGFjfGVyYXJyfG5idW1wfGlwcm9kfGVyRG90fHVjaXJjfGF3aW50fGVzZG90fGFuZ3J0fG5jb25nfGlzaW5FfHNjbmFwfFNjaXJjfHNjaXJjfG5kYXNofGlzaW5zfFVicmN5fG5lYXJyfG5lQXJyfGlzaW52fG5lZG90fHVicmN5fGFjdXRlfFljaXJjfGl1a2N5fEl1a2N5fHh1dHJpfG5lc2ltfGNhcmV0fGpjaXJjfEpjaXJjfGNhcm9ufHR3aXh0fGRkYXJyfHNjY3VlfGV4aXN0fGptYXRofHNicXVvfG5nZXFxfGFuZ3N0fGNjYXBzfGxjZWlsfG5nc2ltfFVwVGVlfGRlbHRhfERlbHRhfHJ0cmlmfG5oYXJyfG5oQXJyfG5ocGFyfHJ0cmllfGp1a2N5fEp1a2N5fGthcHBhfHJzcXVvfEthcHBhfG5sYXJyfG5sQXJyfFRTSGN5fHJyYXJyfGFvZ29ufEFvZ29ufGZmbGlnfHhyYXJyfHRzaGN5fGNjaXJjfG5sZXFxfGZpbGlnfHVwc2lofG5sZXNzfGRoYXJsfG5sc2ltfGZqbGlnfHJvcGFyfG5sdHJpfGRoYXJyfHJvYnJrfHJvYXJyfGZsbGlnfGZsdG5zfHJvYW5nfHJubWlkfHN1Ym5FfHN1Ym5lfGxBYXJyfHRyaXNifENjaXJjfGFjaXJjfGNjdXBzfGJsYW5rfFZEYXNofGZvcmt2fFZkYXNofGxhbmdkfGNlZGlsfGJsazEyfGJsazE0fGxhcXVvfHN0cm5zfGRpYW1zfG5vdGlufHZEYXNofGxhcnJifGJsazM0fGJsb2NrfGRpc2lufHVwbHVzfHZkYXNofHZCYXJ2fGFlbGlnfHN0YXJmfFdlZGdlfGNoZWNrfHhyQXJyfGxhdGVzfGxiYXJyfGxCYXJyfG5vdG5pfGxiYnJrfGJjb25nfGZyYXNsfGxicmtlfGZyb3dufHZydHJpfHZwcm9wfHZuc3VwfGdhbW1hfEdhbW1hfHdlZGdlfHhvZG90fGJkcXVvfHNyYXJyfGRvdGVxfGxkcXVvfGJveGRsfGJveGRMfGdjaXJjfEdjaXJjfGJveERsfGJveERMfGJveGRyfGJveGRSfGJveERyfFRSQURFfHRyYWRlfHJsaGFyfGJveERSfHZuc3VifG5wYXJ0fHZsdHJpfHJsYXJyfGJveGhkfGJveGhEfG5wcmVjfGdlc2NjfG5yYXJyfG5yQXJyfGJveEhkfGJveEhEfGJveGh1fGJveGhVfG5ydHJpfGJveEh1fGNsdWJzfGJveEhVfHRpbWVzfGNvbG9ufENvbG9ufGdpbWVsfHhsQXJyfFRpbGRlfG5zaW1lfHRpbGRlfG5zbWlkfG5zcGFyfFRIT1JOfHRob3JufHhsYXJyfG5zdWJlfG5zdWJFfHRoa2FwfHhoQXJyfGNvbW1hfG5zdWNjfGJveHVsfGJveHVMfG5zdXBlfG5zdXBFfGduZXFxfGduc2ltfGJveFVsfGJveFVMfGdyYXZlfGJveHVyfGJveHVSfGJveFVyfGJveFVSfGxlc2NjfGFuZ2xlfGJlcHNpfGJveHZofHZhcnBpfGJveHZIfG51bXNwfFRoZXRhfGdzaW1lfGdzaW1sfHRoZXRhfGJveFZofGJveFZIfGJveHZsfGd0Y2lyfGd0ZG90fGJveHZMfGJveFZsfGJveFZMfGNyYXJyfGNyb3NzfENyb3NzfG52c2ltfGJveHZyfG53YXJyfG53QXJyfHNxc3VwfGR0ZG90fFVvZ29ufGxoYXJkfGxoYXJ1fGR0cmlmfG9jaXJjfE9jaXJjfGxoYmxrfGR1YXJyfG9kYXNofHNxc3VifEhhY2VrfHNxY3VwfGxsYXJyfGR1aGFyfG9lbGlnfE9FbGlnfG9mY2lyfGJveHZSfHVvZ29ufGxsdHJpfGJveFZyfGNzdWJlfHV1YXJyfG9oYmFyfGNzdXBlfGN0ZG90fG9sYXJyfG9sY2lyfGhhcnJ3fG9saW5lfHNxY2FwfG9tYWNyfE9tYWNyfG9tZWdhfE9tZWdhfGJveFZSfGFsZXBofGxuZXFxfGxuc2ltfGxvYW5nfGxvYXJyfHJoYXJ1fGxvYnJrfGhjaXJjfG9wZXJwfG9wbHVzfHJoYXJkfEhjaXJjfG9yYXJyfFVuaW9ufG9yZGVyfGVjaXJjfEVjaXJjfGN1ZXByfHN6bGlnfGN1ZXNjfGJyZXZlfHJlYWxzfGVERG90fEJyZXZlfGhvYXJyfGxvcGFyfHV0cmlmfHJkcXVvfFVtYWNyfHVtYWNyfGVmRG90fHN3QXJyfHVsdHJpfGFscGhhfHJjZWlsfG92YmFyfHN3YXJyfFdjaXJjfHdjaXJjfHNtdGVzfHNtaWxlfGJzZW1pfGxyYXJyfGFyaW5nfHBhcnNsfGxyaGFyfGJzaW1lfHVoYmxrfGxydHJpfGN1cG9yfEFyaW5nfHVoYXJyfHVoYXJsfHNsYXJyfHJicmtlfGJzb2xifGxzaW1lfHJiYnJrfFJCYXJyfGxzaW1nfHBob25lfHJCYXJyfHJiYXJyfGljaXJjfGxzcXVvfEljaXJjfGVtYWNyfEVtYWNyfHJhdGlvfHNpbW5lfHBsdXNifHNpbWxFfHNpbWdFfHNpbWVxfHBsdXNlfGx0Y2lyfGx0ZG90fGVtcHR5fHhoYXJyfHhkdHJpfGlleGNsfEFscGhhfGx0cmllfHJhcnJ3fHBvdW5kfGx0cmlmfHhjaXJjfGJ1bXBlfHByY3VlfGJ1bXBFfGFzeW1wfGFtYWNyfGN1dmVlfFNpZ21hfHNpZ21hfGlpaW50fHVkaGFyfGlpb3RhfGlqbGlnfElKbGlnfHN1cG5FfGltYWNyfEltYWNyfHByaW1lfFByaW1lfGltYWdlfHBybmFwfGVvZ29ufEVvZ29ufHJhcnJjfG1kYXNofG1ERG90fGN1d2VkfGltYXRofHN1cG5lfGltcGVkfEFtYWNyfHVkYXJyfHByc2ltfG1pY3JvfHJhcnJifGN3aW50fHJhcXVvfGluZmlufGVwbHVzfHJhbmdlfHJhbmdkfFVjaXJjfHJhZGljfG1pbnVzfGFtYWxnfHZlZWVxfHJBYXJyfGVwc2l2fHljaXJjfHF1ZXN0fHNoYXJwfHF1b3R8enduanxRc2NyfHJhY2V8cXNjcnxRb3BmfHFvcGZ8cWludHxyYW5nfFJhbmd8WnNjcnx6c2NyfFpvcGZ8em9wZnxyYXJyfHJBcnJ8UmFycnxQc2NyfHBzY3J8cHJvcHxwcm9kfHBybkV8cHJlY3xaSGN5fHpoY3l8cHJhcHxaZXRhfHpldGF8UG9wZnxwb3BmfFpkb3R8cGx1c3x6ZG90fFl1bWx8eXVtbHxwaGl2fFlVY3l8eXVjeXxZc2NyfHlzY3J8cGVycHxZb3BmfHlvcGZ8cGFydHxwYXJhfFlJY3l8T3VtbHxyY3VifHlpY3l8WUFjeXxyZGNhfG91bWx8b3NvbHxPc2NyfHJkc2h8eWFjeXxyZWFsfG9zY3J8eHZlZXxhbmRkfHJlY3R8YW5kdnxYc2NyfG9yb3J8b3JkbXxvcmRmfHhzY3J8YW5nZXxhb3BmfEFvcGZ8ckhhcnxYb3BmfG9wYXJ8T29wZnx4b3BmfHhuaXN8cmhvdnxvb3BmfG9taWR8eG1hcHxvaW50fGFwaWR8YXBvc3xvZ29ufGFzY3J8QXNjcnxvZG90fG9kaXZ8eGN1cHx4Y2FwfG9jaXJ8b2FzdHxudmx0fG52bGV8bnZndHxudmdlfG52YXB8V3Njcnx3c2NyfGF1bWx8bnRsZ3xudGdsfG5zdXB8bnN1Ynxuc2ltfE5zY3J8bnNjcnxuc2NlfFdvcGZ8cmluZ3xucHJlfHdvcGZ8bnBhcnxBdW1sfEJhcnZ8YmJya3xOb3BmfG5vcGZ8bm1pZHxuTHR2fGJldGF8cm9wZnxSb3BmfEJldGF8YmV0aHxubGVzfHJwYXJ8bmxlcXxibm90fGJOb3R8bmxkcnxOSmN5fHJzY3J8UnNjcnxWc2NyfHZzY3J8cnNxYnxuamN5fGJvcGZ8bmlzZHxCb3BmfHJ0cml8Vm9wZnxuR3R2fG5ndHJ8dm9wZnxib3hofGJveEh8Ym94dnxuZ2VzfG5nZXF8Ym94Vnxic2NyfHNjYXB8QnNjcnxic2ltfFZlcnR8dmVydHxic29sfGJ1bGx8YnVtcHxjYXBzfGNkb3R8bmN1cHxzY25FfG5jYXB8bmJzcHxuYXBFfENkb3R8Y2VudHxzZG90fFZiYXJ8bmFuZ3x2QmFyfGNoY3l8TXNjcnxtc2NyfHNlY3R8c2VtaXxDSGN5fE1vcGZ8bW9wZnxzZXh0fGNpcmN8Y2lyZXxtbGRyfG1sY3B8Y2lyRXxjb21wfHNoY3l8U0hjeXx2QXJyfHZhcnJ8Y29uZ3xjb3BmfENvcGZ8Y29weXxDT1BZfG1hbHR8bWFsZXxtYWNyfGx2bkV8Y3NjcnxsdHJpfHNpbWV8bHRjY3xzaW1nfENzY3J8c2ltbHxjc3VifFV1bWx8bHNxYnxsc2ltfHV1bWx8Y3N1cHxMc2NyfGxzY3J8dXRyaXxzbWlkfGxwYXJ8Y3Vwc3xzbXRlfGxvemZ8ZGFycnxMb3BmfFVzY3J8c29sYnxsb3BmfHNvcGZ8U29wZnxsbmVxfHVzY3J8c3BhcnxkQXJyfGxuYXB8RGFycnxkYXNofFNxcnR8TEpjeXxsamN5fGxIYXJ8ZEhhcnxVcHNpfHVwc2l8ZGlhbXxsZXNnfGRqY3l8REpjeXxsZXFxfGRvcGZ8RG9wZnxkc2NyfERzY3J8ZHNjeXxsZHNofGxkY2F8c3F1ZnxEU2N5fHNzY3J8U3Njcnxkc29sfGxjdWJ8bGF0ZXxzdGFyfFN0YXJ8VW9wZnxMYXJyfGxBcnJ8bGFycnx1b3BmfGR0cml8ZHpjeXxzdWJlfHN1YkV8TGFuZ3xsYW5nfEtzY3J8a3NjcnxLb3BmfGtvcGZ8S0pjeXxramN5fEtIY3l8a2hjeXxEWmN5fGVjaXJ8ZWRvdHxlRG90fEpzY3J8anNjcnxzdWNjfEpvcGZ8am9wZnxFZG90fHVIYXJ8ZW1zcHxlbnNwfEl1bWx8aXVtbHxlb3BmfGlzaW58SXNjcnxpc2NyfEVvcGZ8ZXBhcnxzdW5nfGVwc2l8ZXNjcnxzdXAxfHN1cDJ8c3VwM3xJb3RhfGlvdGF8c3VwZXxzdXBFfElvcGZ8aW9wZnxJT2N5fGlvY3l8RXNjcnxlc2ltfEVzaW18aW1vZnxVYXJyfFFVT1R8dUFycnx1YXJyfGV1bWx8SUVjeXxpZWN5fElkb3R8RXVtbHxldXJvfGV4Y2x8SHNjcnxoc2NyfEhvcGZ8aG9wZnxUU2N5fHRzY3l8VHNjcnxoYmFyfHRzY3J8ZmxhdHx0YnJrfGZub2Z8aEFycnxoYXJyfGhhbGZ8Zm9wZnxGb3BmfHRkb3R8Z3ZuRXxmb3JrfHRyaWV8Z3RjY3xmc2NyfEZzY3J8Z2RvdHxnc2ltfEdzY3J8Z3NjcnxHb3BmfGdvcGZ8Z25lcXxHZG90fHRvc2F8Z25hcHxUb3BmfHRvcGZ8Z2VxcXx0b2VhfEdKY3l8Z2pjeXx0aW50fGdlc2x8bWlkfFNmcnxnZ2d8dG9wfGdlc3xnbGF8Z2xFfGdsanxnZXF8Z25lfGdFbHxnZWx8Z25FfEdjeXxnY3l8Z2FwfFRmcnx0ZnJ8VGN5fHRjeXxIYXR8VGF1fEZmcnx0YXV8VGFifGhmcnxIZnJ8ZmZyfEZjeXxmY3l8aWN5fEljeXxpZmZ8RVRIfGV0aHxpZnJ8SWZyfEV0YXxldGF8aW50fEludHxTdXB8c3VwfHVjeXxVY3l8U3VtfHN1bXxqY3l8RU5HfHVmcnxVZnJ8ZW5nfEpjeXxqZnJ8ZWxzfGVsbHxlZ3N8RWZyfGVmcnxKZnJ8dW1sfGtjeXxLY3l8RWN5fGVjeXxrZnJ8S2ZyfGxhcHxTdWJ8c3VifGxhdHxsY3l8TGN5fGxlZ3xEb3R8ZG90fGxFZ3xsZXF8bGVzfHNxdXxkaXZ8ZGllfGxmcnxMZnJ8bGdFfERmcnxkZnJ8RGVsfGRlZ3xEY3l8ZGN5fGxuZXxsbkV8c29sfGxvenxzbXR8Q3VwfGxybXxjdXB8bHNofExzaHxzaW18c2h5fG1hcHxNYXB8bWN5fE1jeXxtZnJ8TWZyfG1ob3xnZnJ8R2ZyfHNmcnxjaXJ8Q2hpfGNoaXxuYXB8Q2ZyfHZjeXxWY3l8Y2ZyfFNjeXxzY3l8bmN5fE5jeXx2ZWV8VmVlfENhcHxjYXB8bmZyfHNjRXxzY2V8TmZyfG5nZXxuZ0V8bkdnfHZmcnxWZnJ8bmd0fGJvdHxuR3R8bmlzfG5pdnxSc2h8cnNofG5sZXxubEV8Ym5lfEJmcnxiZnJ8bkxsfG5sdHxuTHR8QmN5fGJjeXxub3R8Tm90fHJsbXx3ZnJ8V2ZyfG5wcnxuc2N8bnVtfG9jeXxhc3R8T2N5fG9mcnx4ZnJ8WGZyfE9mcnxvZ3R8b2htfGFwRXxvbHR8UmhvfGFwZXxyaG98UmZyfHJmcnxvcmR8UkVHfGFuZ3xyZWd8b3J2fEFuZHxhbmR8QU1QfFJjeXxhbXB8QWZyfHljeXxZY3l8eWVufHlmcnxZZnJ8cmN5fHBhcnxwY3l8UGN5fHBmcnxQZnJ8cGhpfFBoaXxhZnJ8QWN5fGFjeXx6Y3l8WmN5fHBpdnxhY0V8YWNkfHpmcnxaZnJ8cHJlfHByRXxwc2l8UHNpfHFmcnxRZnJ8endqfE9yfGdlfEdnfGd0fGdnfGVsfG9TfGx0fEx0fExUfFJlfGxnfGdsfGVnfG5lfEltfGl0fGxlfEREfHdwfHdyfG51fE51fGRkfGxFfFNjfHNjfHBpfFBpfGVlfGFmfGxsfExsfHJ4fGdFfHhpfHBtfFhpfGljfHByfFByfGlufG5pfG1wfG11fGFjfE11fG9yfGFwfEd0fEdUfGlpKTt8JihBYWN1dGV8QWdyYXZlfEF0aWxkZXxDY2VkaWx8RWFjdXRlfEVncmF2ZXxJYWN1dGV8SWdyYXZlfE50aWxkZXxPYWN1dGV8T2dyYXZlfE9zbGFzaHxPdGlsZGV8VWFjdXRlfFVncmF2ZXxZYWN1dGV8YWFjdXRlfGFncmF2ZXxhdGlsZGV8YnJ2YmFyfGNjZWRpbHxjdXJyZW58ZGl2aWRlfGVhY3V0ZXxlZ3JhdmV8ZnJhYzEyfGZyYWMxNHxmcmFjMzR8aWFjdXRlfGlncmF2ZXxpcXVlc3R8bWlkZG90fG50aWxkZXxvYWN1dGV8b2dyYXZlfG9zbGFzaHxvdGlsZGV8cGx1c21ufHVhY3V0ZXx1Z3JhdmV8eWFjdXRlfEFFbGlnfEFjaXJjfEFyaW5nfEVjaXJjfEljaXJjfE9jaXJjfFRIT1JOfFVjaXJjfGFjaXJjfGFjdXRlfGFlbGlnfGFyaW5nfGNlZGlsfGVjaXJjfGljaXJjfGlleGNsfGxhcXVvfG1pY3JvfG9jaXJjfHBvdW5kfHJhcXVvfHN6bGlnfHRob3JufHRpbWVzfHVjaXJjfEF1bWx8Q09QWXxFdW1sfEl1bWx8T3VtbHxRVU9UfFV1bWx8YXVtbHxjZW50fGNvcHl8ZXVtbHxpdW1sfG1hY3J8bmJzcHxvcmRmfG9yZG18b3VtbHxwYXJhfHF1b3R8c2VjdHxzdXAxfHN1cDJ8c3VwM3x1dW1sfHl1bWx8QU1QfEVUSHxSRUd8YW1wfGRlZ3xldGh8bm90fHJlZ3xzaHl8dW1sfHllbnxHVHxMVHxndHxsdCkoPyE7KShbPWEtekEtWjAtOV0/KXwmIyhbMC05XSspKDs/KXwmI1t4WF0oW2EtZkEtRjAtOV0rKSg7Pyl8JihbMC05YS16QS1aXSspL2c7XG5cdHZhciBkZWNvZGVNYXAgPSB7J2FhY3V0ZSc6J1xceEUxJywnQWFjdXRlJzonXFx4QzEnLCdhYnJldmUnOidcXHUwMTAzJywnQWJyZXZlJzonXFx1MDEwMicsJ2FjJzonXFx1MjIzRScsJ2FjZCc6J1xcdTIyM0YnLCdhY0UnOidcXHUyMjNFXFx1MDMzMycsJ2FjaXJjJzonXFx4RTInLCdBY2lyYyc6J1xceEMyJywnYWN1dGUnOidcXHhCNCcsJ2FjeSc6J1xcdTA0MzAnLCdBY3knOidcXHUwNDEwJywnYWVsaWcnOidcXHhFNicsJ0FFbGlnJzonXFx4QzYnLCdhZic6J1xcdTIwNjEnLCdhZnInOidcXHVEODM1XFx1REQxRScsJ0Fmcic6J1xcdUQ4MzVcXHVERDA0JywnYWdyYXZlJzonXFx4RTAnLCdBZ3JhdmUnOidcXHhDMCcsJ2FsZWZzeW0nOidcXHUyMTM1JywnYWxlcGgnOidcXHUyMTM1JywnYWxwaGEnOidcXHUwM0IxJywnQWxwaGEnOidcXHUwMzkxJywnYW1hY3InOidcXHUwMTAxJywnQW1hY3InOidcXHUwMTAwJywnYW1hbGcnOidcXHUyQTNGJywnYW1wJzonJicsJ0FNUCc6JyYnLCdhbmQnOidcXHUyMjI3JywnQW5kJzonXFx1MkE1MycsJ2FuZGFuZCc6J1xcdTJBNTUnLCdhbmRkJzonXFx1MkE1QycsJ2FuZHNsb3BlJzonXFx1MkE1OCcsJ2FuZHYnOidcXHUyQTVBJywnYW5nJzonXFx1MjIyMCcsJ2FuZ2UnOidcXHUyOUE0JywnYW5nbGUnOidcXHUyMjIwJywnYW5nbXNkJzonXFx1MjIyMScsJ2FuZ21zZGFhJzonXFx1MjlBOCcsJ2FuZ21zZGFiJzonXFx1MjlBOScsJ2FuZ21zZGFjJzonXFx1MjlBQScsJ2FuZ21zZGFkJzonXFx1MjlBQicsJ2FuZ21zZGFlJzonXFx1MjlBQycsJ2FuZ21zZGFmJzonXFx1MjlBRCcsJ2FuZ21zZGFnJzonXFx1MjlBRScsJ2FuZ21zZGFoJzonXFx1MjlBRicsJ2FuZ3J0JzonXFx1MjIxRicsJ2FuZ3J0dmInOidcXHUyMkJFJywnYW5ncnR2YmQnOidcXHUyOTlEJywnYW5nc3BoJzonXFx1MjIyMicsJ2FuZ3N0JzonXFx4QzUnLCdhbmd6YXJyJzonXFx1MjM3QycsJ2FvZ29uJzonXFx1MDEwNScsJ0FvZ29uJzonXFx1MDEwNCcsJ2FvcGYnOidcXHVEODM1XFx1REQ1MicsJ0FvcGYnOidcXHVEODM1XFx1REQzOCcsJ2FwJzonXFx1MjI0OCcsJ2FwYWNpcic6J1xcdTJBNkYnLCdhcGUnOidcXHUyMjRBJywnYXBFJzonXFx1MkE3MCcsJ2FwaWQnOidcXHUyMjRCJywnYXBvcyc6J1xcJycsJ0FwcGx5RnVuY3Rpb24nOidcXHUyMDYxJywnYXBwcm94JzonXFx1MjI0OCcsJ2FwcHJveGVxJzonXFx1MjI0QScsJ2FyaW5nJzonXFx4RTUnLCdBcmluZyc6J1xceEM1JywnYXNjcic6J1xcdUQ4MzVcXHVEQ0I2JywnQXNjcic6J1xcdUQ4MzVcXHVEQzlDJywnQXNzaWduJzonXFx1MjI1NCcsJ2FzdCc6JyonLCdhc3ltcCc6J1xcdTIyNDgnLCdhc3ltcGVxJzonXFx1MjI0RCcsJ2F0aWxkZSc6J1xceEUzJywnQXRpbGRlJzonXFx4QzMnLCdhdW1sJzonXFx4RTQnLCdBdW1sJzonXFx4QzQnLCdhd2NvbmludCc6J1xcdTIyMzMnLCdhd2ludCc6J1xcdTJBMTEnLCdiYWNrY29uZyc6J1xcdTIyNEMnLCdiYWNrZXBzaWxvbic6J1xcdTAzRjYnLCdiYWNrcHJpbWUnOidcXHUyMDM1JywnYmFja3NpbSc6J1xcdTIyM0QnLCdiYWNrc2ltZXEnOidcXHUyMkNEJywnQmFja3NsYXNoJzonXFx1MjIxNicsJ0JhcnYnOidcXHUyQUU3JywnYmFydmVlJzonXFx1MjJCRCcsJ2JhcndlZCc6J1xcdTIzMDUnLCdCYXJ3ZWQnOidcXHUyMzA2JywnYmFyd2VkZ2UnOidcXHUyMzA1JywnYmJyayc6J1xcdTIzQjUnLCdiYnJrdGJyayc6J1xcdTIzQjYnLCdiY29uZyc6J1xcdTIyNEMnLCdiY3knOidcXHUwNDMxJywnQmN5JzonXFx1MDQxMScsJ2JkcXVvJzonXFx1MjAxRScsJ2JlY2F1cyc6J1xcdTIyMzUnLCdiZWNhdXNlJzonXFx1MjIzNScsJ0JlY2F1c2UnOidcXHUyMjM1JywnYmVtcHR5dic6J1xcdTI5QjAnLCdiZXBzaSc6J1xcdTAzRjYnLCdiZXJub3UnOidcXHUyMTJDJywnQmVybm91bGxpcyc6J1xcdTIxMkMnLCdiZXRhJzonXFx1MDNCMicsJ0JldGEnOidcXHUwMzkyJywnYmV0aCc6J1xcdTIxMzYnLCdiZXR3ZWVuJzonXFx1MjI2QycsJ2Jmcic6J1xcdUQ4MzVcXHVERDFGJywnQmZyJzonXFx1RDgzNVxcdUREMDUnLCdiaWdjYXAnOidcXHUyMkMyJywnYmlnY2lyYyc6J1xcdTI1RUYnLCdiaWdjdXAnOidcXHUyMkMzJywnYmlnb2RvdCc6J1xcdTJBMDAnLCdiaWdvcGx1cyc6J1xcdTJBMDEnLCdiaWdvdGltZXMnOidcXHUyQTAyJywnYmlnc3FjdXAnOidcXHUyQTA2JywnYmlnc3Rhcic6J1xcdTI2MDUnLCdiaWd0cmlhbmdsZWRvd24nOidcXHUyNUJEJywnYmlndHJpYW5nbGV1cCc6J1xcdTI1QjMnLCdiaWd1cGx1cyc6J1xcdTJBMDQnLCdiaWd2ZWUnOidcXHUyMkMxJywnYmlnd2VkZ2UnOidcXHUyMkMwJywnYmthcm93JzonXFx1MjkwRCcsJ2JsYWNrbG96ZW5nZSc6J1xcdTI5RUInLCdibGFja3NxdWFyZSc6J1xcdTI1QUEnLCdibGFja3RyaWFuZ2xlJzonXFx1MjVCNCcsJ2JsYWNrdHJpYW5nbGVkb3duJzonXFx1MjVCRScsJ2JsYWNrdHJpYW5nbGVsZWZ0JzonXFx1MjVDMicsJ2JsYWNrdHJpYW5nbGVyaWdodCc6J1xcdTI1QjgnLCdibGFuayc6J1xcdTI0MjMnLCdibGsxMic6J1xcdTI1OTInLCdibGsxNCc6J1xcdTI1OTEnLCdibGszNCc6J1xcdTI1OTMnLCdibG9jayc6J1xcdTI1ODgnLCdibmUnOic9XFx1MjBFNScsJ2JuZXF1aXYnOidcXHUyMjYxXFx1MjBFNScsJ2Jub3QnOidcXHUyMzEwJywnYk5vdCc6J1xcdTJBRUQnLCdib3BmJzonXFx1RDgzNVxcdURENTMnLCdCb3BmJzonXFx1RDgzNVxcdUREMzknLCdib3QnOidcXHUyMkE1JywnYm90dG9tJzonXFx1MjJBNScsJ2Jvd3RpZSc6J1xcdTIyQzgnLCdib3hib3gnOidcXHUyOUM5JywnYm94ZGwnOidcXHUyNTEwJywnYm94ZEwnOidcXHUyNTU1JywnYm94RGwnOidcXHUyNTU2JywnYm94REwnOidcXHUyNTU3JywnYm94ZHInOidcXHUyNTBDJywnYm94ZFInOidcXHUyNTUyJywnYm94RHInOidcXHUyNTUzJywnYm94RFInOidcXHUyNTU0JywnYm94aCc6J1xcdTI1MDAnLCdib3hIJzonXFx1MjU1MCcsJ2JveGhkJzonXFx1MjUyQycsJ2JveGhEJzonXFx1MjU2NScsJ2JveEhkJzonXFx1MjU2NCcsJ2JveEhEJzonXFx1MjU2NicsJ2JveGh1JzonXFx1MjUzNCcsJ2JveGhVJzonXFx1MjU2OCcsJ2JveEh1JzonXFx1MjU2NycsJ2JveEhVJzonXFx1MjU2OScsJ2JveG1pbnVzJzonXFx1MjI5RicsJ2JveHBsdXMnOidcXHUyMjlFJywnYm94dGltZXMnOidcXHUyMkEwJywnYm94dWwnOidcXHUyNTE4JywnYm94dUwnOidcXHUyNTVCJywnYm94VWwnOidcXHUyNTVDJywnYm94VUwnOidcXHUyNTVEJywnYm94dXInOidcXHUyNTE0JywnYm94dVInOidcXHUyNTU4JywnYm94VXInOidcXHUyNTU5JywnYm94VVInOidcXHUyNTVBJywnYm94dic6J1xcdTI1MDInLCdib3hWJzonXFx1MjU1MScsJ2JveHZoJzonXFx1MjUzQycsJ2JveHZIJzonXFx1MjU2QScsJ2JveFZoJzonXFx1MjU2QicsJ2JveFZIJzonXFx1MjU2QycsJ2JveHZsJzonXFx1MjUyNCcsJ2JveHZMJzonXFx1MjU2MScsJ2JveFZsJzonXFx1MjU2MicsJ2JveFZMJzonXFx1MjU2MycsJ2JveHZyJzonXFx1MjUxQycsJ2JveHZSJzonXFx1MjU1RScsJ2JveFZyJzonXFx1MjU1RicsJ2JveFZSJzonXFx1MjU2MCcsJ2JwcmltZSc6J1xcdTIwMzUnLCdicmV2ZSc6J1xcdTAyRDgnLCdCcmV2ZSc6J1xcdTAyRDgnLCdicnZiYXInOidcXHhBNicsJ2JzY3InOidcXHVEODM1XFx1RENCNycsJ0JzY3InOidcXHUyMTJDJywnYnNlbWknOidcXHUyMDRGJywnYnNpbSc6J1xcdTIyM0QnLCdic2ltZSc6J1xcdTIyQ0QnLCdic29sJzonXFxcXCcsJ2Jzb2xiJzonXFx1MjlDNScsJ2Jzb2xoc3ViJzonXFx1MjdDOCcsJ2J1bGwnOidcXHUyMDIyJywnYnVsbGV0JzonXFx1MjAyMicsJ2J1bXAnOidcXHUyMjRFJywnYnVtcGUnOidcXHUyMjRGJywnYnVtcEUnOidcXHUyQUFFJywnYnVtcGVxJzonXFx1MjI0RicsJ0J1bXBlcSc6J1xcdTIyNEUnLCdjYWN1dGUnOidcXHUwMTA3JywnQ2FjdXRlJzonXFx1MDEwNicsJ2NhcCc6J1xcdTIyMjknLCdDYXAnOidcXHUyMkQyJywnY2FwYW5kJzonXFx1MkE0NCcsJ2NhcGJyY3VwJzonXFx1MkE0OScsJ2NhcGNhcCc6J1xcdTJBNEInLCdjYXBjdXAnOidcXHUyQTQ3JywnY2FwZG90JzonXFx1MkE0MCcsJ0NhcGl0YWxEaWZmZXJlbnRpYWxEJzonXFx1MjE0NScsJ2NhcHMnOidcXHUyMjI5XFx1RkUwMCcsJ2NhcmV0JzonXFx1MjA0MScsJ2Nhcm9uJzonXFx1MDJDNycsJ0NheWxleXMnOidcXHUyMTJEJywnY2NhcHMnOidcXHUyQTREJywnY2Nhcm9uJzonXFx1MDEwRCcsJ0NjYXJvbic6J1xcdTAxMEMnLCdjY2VkaWwnOidcXHhFNycsJ0NjZWRpbCc6J1xceEM3JywnY2NpcmMnOidcXHUwMTA5JywnQ2NpcmMnOidcXHUwMTA4JywnQ2NvbmludCc6J1xcdTIyMzAnLCdjY3Vwcyc6J1xcdTJBNEMnLCdjY3Vwc3NtJzonXFx1MkE1MCcsJ2Nkb3QnOidcXHUwMTBCJywnQ2RvdCc6J1xcdTAxMEEnLCdjZWRpbCc6J1xceEI4JywnQ2VkaWxsYSc6J1xceEI4JywnY2VtcHR5dic6J1xcdTI5QjInLCdjZW50JzonXFx4QTInLCdjZW50ZXJkb3QnOidcXHhCNycsJ0NlbnRlckRvdCc6J1xceEI3JywnY2ZyJzonXFx1RDgzNVxcdUREMjAnLCdDZnInOidcXHUyMTJEJywnY2hjeSc6J1xcdTA0NDcnLCdDSGN5JzonXFx1MDQyNycsJ2NoZWNrJzonXFx1MjcxMycsJ2NoZWNrbWFyayc6J1xcdTI3MTMnLCdjaGknOidcXHUwM0M3JywnQ2hpJzonXFx1MDNBNycsJ2Npcic6J1xcdTI1Q0InLCdjaXJjJzonXFx1MDJDNicsJ2NpcmNlcSc6J1xcdTIyNTcnLCdjaXJjbGVhcnJvd2xlZnQnOidcXHUyMUJBJywnY2lyY2xlYXJyb3dyaWdodCc6J1xcdTIxQkInLCdjaXJjbGVkYXN0JzonXFx1MjI5QicsJ2NpcmNsZWRjaXJjJzonXFx1MjI5QScsJ2NpcmNsZWRkYXNoJzonXFx1MjI5RCcsJ0NpcmNsZURvdCc6J1xcdTIyOTknLCdjaXJjbGVkUic6J1xceEFFJywnY2lyY2xlZFMnOidcXHUyNEM4JywnQ2lyY2xlTWludXMnOidcXHUyMjk2JywnQ2lyY2xlUGx1cyc6J1xcdTIyOTUnLCdDaXJjbGVUaW1lcyc6J1xcdTIyOTcnLCdjaXJlJzonXFx1MjI1NycsJ2NpckUnOidcXHUyOUMzJywnY2lyZm5pbnQnOidcXHUyQTEwJywnY2lybWlkJzonXFx1MkFFRicsJ2NpcnNjaXInOidcXHUyOUMyJywnQ2xvY2t3aXNlQ29udG91ckludGVncmFsJzonXFx1MjIzMicsJ0Nsb3NlQ3VybHlEb3VibGVRdW90ZSc6J1xcdTIwMUQnLCdDbG9zZUN1cmx5UXVvdGUnOidcXHUyMDE5JywnY2x1YnMnOidcXHUyNjYzJywnY2x1YnN1aXQnOidcXHUyNjYzJywnY29sb24nOic6JywnQ29sb24nOidcXHUyMjM3JywnY29sb25lJzonXFx1MjI1NCcsJ0NvbG9uZSc6J1xcdTJBNzQnLCdjb2xvbmVxJzonXFx1MjI1NCcsJ2NvbW1hJzonLCcsJ2NvbW1hdCc6J0AnLCdjb21wJzonXFx1MjIwMScsJ2NvbXBmbic6J1xcdTIyMTgnLCdjb21wbGVtZW50JzonXFx1MjIwMScsJ2NvbXBsZXhlcyc6J1xcdTIxMDInLCdjb25nJzonXFx1MjI0NScsJ2Nvbmdkb3QnOidcXHUyQTZEJywnQ29uZ3J1ZW50JzonXFx1MjI2MScsJ2NvbmludCc6J1xcdTIyMkUnLCdDb25pbnQnOidcXHUyMjJGJywnQ29udG91ckludGVncmFsJzonXFx1MjIyRScsJ2NvcGYnOidcXHVEODM1XFx1REQ1NCcsJ0NvcGYnOidcXHUyMTAyJywnY29wcm9kJzonXFx1MjIxMCcsJ0NvcHJvZHVjdCc6J1xcdTIyMTAnLCdjb3B5JzonXFx4QTknLCdDT1BZJzonXFx4QTknLCdjb3B5c3InOidcXHUyMTE3JywnQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMzMnLCdjcmFycic6J1xcdTIxQjUnLCdjcm9zcyc6J1xcdTI3MTcnLCdDcm9zcyc6J1xcdTJBMkYnLCdjc2NyJzonXFx1RDgzNVxcdURDQjgnLCdDc2NyJzonXFx1RDgzNVxcdURDOUUnLCdjc3ViJzonXFx1MkFDRicsJ2NzdWJlJzonXFx1MkFEMScsJ2NzdXAnOidcXHUyQUQwJywnY3N1cGUnOidcXHUyQUQyJywnY3Rkb3QnOidcXHUyMkVGJywnY3VkYXJybCc6J1xcdTI5MzgnLCdjdWRhcnJyJzonXFx1MjkzNScsJ2N1ZXByJzonXFx1MjJERScsJ2N1ZXNjJzonXFx1MjJERicsJ2N1bGFycic6J1xcdTIxQjYnLCdjdWxhcnJwJzonXFx1MjkzRCcsJ2N1cCc6J1xcdTIyMkEnLCdDdXAnOidcXHUyMkQzJywnY3VwYnJjYXAnOidcXHUyQTQ4JywnY3VwY2FwJzonXFx1MkE0NicsJ0N1cENhcCc6J1xcdTIyNEQnLCdjdXBjdXAnOidcXHUyQTRBJywnY3VwZG90JzonXFx1MjI4RCcsJ2N1cG9yJzonXFx1MkE0NScsJ2N1cHMnOidcXHUyMjJBXFx1RkUwMCcsJ2N1cmFycic6J1xcdTIxQjcnLCdjdXJhcnJtJzonXFx1MjkzQycsJ2N1cmx5ZXFwcmVjJzonXFx1MjJERScsJ2N1cmx5ZXFzdWNjJzonXFx1MjJERicsJ2N1cmx5dmVlJzonXFx1MjJDRScsJ2N1cmx5d2VkZ2UnOidcXHUyMkNGJywnY3VycmVuJzonXFx4QTQnLCdjdXJ2ZWFycm93bGVmdCc6J1xcdTIxQjYnLCdjdXJ2ZWFycm93cmlnaHQnOidcXHUyMUI3JywnY3V2ZWUnOidcXHUyMkNFJywnY3V3ZWQnOidcXHUyMkNGJywnY3djb25pbnQnOidcXHUyMjMyJywnY3dpbnQnOidcXHUyMjMxJywnY3lsY3R5JzonXFx1MjMyRCcsJ2RhZ2dlcic6J1xcdTIwMjAnLCdEYWdnZXInOidcXHUyMDIxJywnZGFsZXRoJzonXFx1MjEzOCcsJ2RhcnInOidcXHUyMTkzJywnZEFycic6J1xcdTIxRDMnLCdEYXJyJzonXFx1MjFBMScsJ2Rhc2gnOidcXHUyMDEwJywnZGFzaHYnOidcXHUyMkEzJywnRGFzaHYnOidcXHUyQUU0JywnZGJrYXJvdyc6J1xcdTI5MEYnLCdkYmxhYyc6J1xcdTAyREQnLCdkY2Fyb24nOidcXHUwMTBGJywnRGNhcm9uJzonXFx1MDEwRScsJ2RjeSc6J1xcdTA0MzQnLCdEY3knOidcXHUwNDE0JywnZGQnOidcXHUyMTQ2JywnREQnOidcXHUyMTQ1JywnZGRhZ2dlcic6J1xcdTIwMjEnLCdkZGFycic6J1xcdTIxQ0EnLCdERG90cmFoZCc6J1xcdTI5MTEnLCdkZG90c2VxJzonXFx1MkE3NycsJ2RlZyc6J1xceEIwJywnRGVsJzonXFx1MjIwNycsJ2RlbHRhJzonXFx1MDNCNCcsJ0RlbHRhJzonXFx1MDM5NCcsJ2RlbXB0eXYnOidcXHUyOUIxJywnZGZpc2h0JzonXFx1Mjk3RicsJ2Rmcic6J1xcdUQ4MzVcXHVERDIxJywnRGZyJzonXFx1RDgzNVxcdUREMDcnLCdkSGFyJzonXFx1Mjk2NScsJ2RoYXJsJzonXFx1MjFDMycsJ2RoYXJyJzonXFx1MjFDMicsJ0RpYWNyaXRpY2FsQWN1dGUnOidcXHhCNCcsJ0RpYWNyaXRpY2FsRG90JzonXFx1MDJEOScsJ0RpYWNyaXRpY2FsRG91YmxlQWN1dGUnOidcXHUwMkREJywnRGlhY3JpdGljYWxHcmF2ZSc6J2AnLCdEaWFjcml0aWNhbFRpbGRlJzonXFx1MDJEQycsJ2RpYW0nOidcXHUyMkM0JywnZGlhbW9uZCc6J1xcdTIyQzQnLCdEaWFtb25kJzonXFx1MjJDNCcsJ2RpYW1vbmRzdWl0JzonXFx1MjY2NicsJ2RpYW1zJzonXFx1MjY2NicsJ2RpZSc6J1xceEE4JywnRGlmZmVyZW50aWFsRCc6J1xcdTIxNDYnLCdkaWdhbW1hJzonXFx1MDNERCcsJ2Rpc2luJzonXFx1MjJGMicsJ2Rpdic6J1xceEY3JywnZGl2aWRlJzonXFx4RjcnLCdkaXZpZGVvbnRpbWVzJzonXFx1MjJDNycsJ2Rpdm9ueCc6J1xcdTIyQzcnLCdkamN5JzonXFx1MDQ1MicsJ0RKY3knOidcXHUwNDAyJywnZGxjb3JuJzonXFx1MjMxRScsJ2RsY3JvcCc6J1xcdTIzMEQnLCdkb2xsYXInOickJywnZG9wZic6J1xcdUQ4MzVcXHVERDU1JywnRG9wZic6J1xcdUQ4MzVcXHVERDNCJywnZG90JzonXFx1MDJEOScsJ0RvdCc6J1xceEE4JywnRG90RG90JzonXFx1MjBEQycsJ2RvdGVxJzonXFx1MjI1MCcsJ2RvdGVxZG90JzonXFx1MjI1MScsJ0RvdEVxdWFsJzonXFx1MjI1MCcsJ2RvdG1pbnVzJzonXFx1MjIzOCcsJ2RvdHBsdXMnOidcXHUyMjE0JywnZG90c3F1YXJlJzonXFx1MjJBMScsJ2RvdWJsZWJhcndlZGdlJzonXFx1MjMwNicsJ0RvdWJsZUNvbnRvdXJJbnRlZ3JhbCc6J1xcdTIyMkYnLCdEb3VibGVEb3QnOidcXHhBOCcsJ0RvdWJsZURvd25BcnJvdyc6J1xcdTIxRDMnLCdEb3VibGVMZWZ0QXJyb3cnOidcXHUyMUQwJywnRG91YmxlTGVmdFJpZ2h0QXJyb3cnOidcXHUyMUQ0JywnRG91YmxlTGVmdFRlZSc6J1xcdTJBRTQnLCdEb3VibGVMb25nTGVmdEFycm93JzonXFx1MjdGOCcsJ0RvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdyc6J1xcdTI3RkEnLCdEb3VibGVMb25nUmlnaHRBcnJvdyc6J1xcdTI3RjknLCdEb3VibGVSaWdodEFycm93JzonXFx1MjFEMicsJ0RvdWJsZVJpZ2h0VGVlJzonXFx1MjJBOCcsJ0RvdWJsZVVwQXJyb3cnOidcXHUyMUQxJywnRG91YmxlVXBEb3duQXJyb3cnOidcXHUyMUQ1JywnRG91YmxlVmVydGljYWxCYXInOidcXHUyMjI1JywnZG93bmFycm93JzonXFx1MjE5MycsJ0Rvd25hcnJvdyc6J1xcdTIxRDMnLCdEb3duQXJyb3cnOidcXHUyMTkzJywnRG93bkFycm93QmFyJzonXFx1MjkxMycsJ0Rvd25BcnJvd1VwQXJyb3cnOidcXHUyMUY1JywnRG93bkJyZXZlJzonXFx1MDMxMScsJ2Rvd25kb3duYXJyb3dzJzonXFx1MjFDQScsJ2Rvd25oYXJwb29ubGVmdCc6J1xcdTIxQzMnLCdkb3duaGFycG9vbnJpZ2h0JzonXFx1MjFDMicsJ0Rvd25MZWZ0UmlnaHRWZWN0b3InOidcXHUyOTUwJywnRG93bkxlZnRUZWVWZWN0b3InOidcXHUyOTVFJywnRG93bkxlZnRWZWN0b3InOidcXHUyMUJEJywnRG93bkxlZnRWZWN0b3JCYXInOidcXHUyOTU2JywnRG93blJpZ2h0VGVlVmVjdG9yJzonXFx1Mjk1RicsJ0Rvd25SaWdodFZlY3Rvcic6J1xcdTIxQzEnLCdEb3duUmlnaHRWZWN0b3JCYXInOidcXHUyOTU3JywnRG93blRlZSc6J1xcdTIyQTQnLCdEb3duVGVlQXJyb3cnOidcXHUyMUE3JywnZHJia2Fyb3cnOidcXHUyOTEwJywnZHJjb3JuJzonXFx1MjMxRicsJ2RyY3JvcCc6J1xcdTIzMEMnLCdkc2NyJzonXFx1RDgzNVxcdURDQjknLCdEc2NyJzonXFx1RDgzNVxcdURDOUYnLCdkc2N5JzonXFx1MDQ1NScsJ0RTY3knOidcXHUwNDA1JywnZHNvbCc6J1xcdTI5RjYnLCdkc3Ryb2snOidcXHUwMTExJywnRHN0cm9rJzonXFx1MDExMCcsJ2R0ZG90JzonXFx1MjJGMScsJ2R0cmknOidcXHUyNUJGJywnZHRyaWYnOidcXHUyNUJFJywnZHVhcnInOidcXHUyMUY1JywnZHVoYXInOidcXHUyOTZGJywnZHdhbmdsZSc6J1xcdTI5QTYnLCdkemN5JzonXFx1MDQ1RicsJ0RaY3knOidcXHUwNDBGJywnZHppZ3JhcnInOidcXHUyN0ZGJywnZWFjdXRlJzonXFx4RTknLCdFYWN1dGUnOidcXHhDOScsJ2Vhc3Rlcic6J1xcdTJBNkUnLCdlY2Fyb24nOidcXHUwMTFCJywnRWNhcm9uJzonXFx1MDExQScsJ2VjaXInOidcXHUyMjU2JywnZWNpcmMnOidcXHhFQScsJ0VjaXJjJzonXFx4Q0EnLCdlY29sb24nOidcXHUyMjU1JywnZWN5JzonXFx1MDQ0RCcsJ0VjeSc6J1xcdTA0MkQnLCdlRERvdCc6J1xcdTJBNzcnLCdlZG90JzonXFx1MDExNycsJ2VEb3QnOidcXHUyMjUxJywnRWRvdCc6J1xcdTAxMTYnLCdlZSc6J1xcdTIxNDcnLCdlZkRvdCc6J1xcdTIyNTInLCdlZnInOidcXHVEODM1XFx1REQyMicsJ0Vmcic6J1xcdUQ4MzVcXHVERDA4JywnZWcnOidcXHUyQTlBJywnZWdyYXZlJzonXFx4RTgnLCdFZ3JhdmUnOidcXHhDOCcsJ2Vncyc6J1xcdTJBOTYnLCdlZ3Nkb3QnOidcXHUyQTk4JywnZWwnOidcXHUyQTk5JywnRWxlbWVudCc6J1xcdTIyMDgnLCdlbGludGVycyc6J1xcdTIzRTcnLCdlbGwnOidcXHUyMTEzJywnZWxzJzonXFx1MkE5NScsJ2Vsc2RvdCc6J1xcdTJBOTcnLCdlbWFjcic6J1xcdTAxMTMnLCdFbWFjcic6J1xcdTAxMTInLCdlbXB0eSc6J1xcdTIyMDUnLCdlbXB0eXNldCc6J1xcdTIyMDUnLCdFbXB0eVNtYWxsU3F1YXJlJzonXFx1MjVGQicsJ2VtcHR5dic6J1xcdTIyMDUnLCdFbXB0eVZlcnlTbWFsbFNxdWFyZSc6J1xcdTI1QUInLCdlbXNwJzonXFx1MjAwMycsJ2Vtc3AxMyc6J1xcdTIwMDQnLCdlbXNwMTQnOidcXHUyMDA1JywnZW5nJzonXFx1MDE0QicsJ0VORyc6J1xcdTAxNEEnLCdlbnNwJzonXFx1MjAwMicsJ2VvZ29uJzonXFx1MDExOScsJ0VvZ29uJzonXFx1MDExOCcsJ2VvcGYnOidcXHVEODM1XFx1REQ1NicsJ0VvcGYnOidcXHVEODM1XFx1REQzQycsJ2VwYXInOidcXHUyMkQ1JywnZXBhcnNsJzonXFx1MjlFMycsJ2VwbHVzJzonXFx1MkE3MScsJ2Vwc2knOidcXHUwM0I1JywnZXBzaWxvbic6J1xcdTAzQjUnLCdFcHNpbG9uJzonXFx1MDM5NScsJ2Vwc2l2JzonXFx1MDNGNScsJ2VxY2lyYyc6J1xcdTIyNTYnLCdlcWNvbG9uJzonXFx1MjI1NScsJ2Vxc2ltJzonXFx1MjI0MicsJ2Vxc2xhbnRndHInOidcXHUyQTk2JywnZXFzbGFudGxlc3MnOidcXHUyQTk1JywnRXF1YWwnOidcXHUyQTc1JywnZXF1YWxzJzonPScsJ0VxdWFsVGlsZGUnOidcXHUyMjQyJywnZXF1ZXN0JzonXFx1MjI1RicsJ0VxdWlsaWJyaXVtJzonXFx1MjFDQycsJ2VxdWl2JzonXFx1MjI2MScsJ2VxdWl2REQnOidcXHUyQTc4JywnZXF2cGFyc2wnOidcXHUyOUU1JywnZXJhcnInOidcXHUyOTcxJywnZXJEb3QnOidcXHUyMjUzJywnZXNjcic6J1xcdTIxMkYnLCdFc2NyJzonXFx1MjEzMCcsJ2VzZG90JzonXFx1MjI1MCcsJ2VzaW0nOidcXHUyMjQyJywnRXNpbSc6J1xcdTJBNzMnLCdldGEnOidcXHUwM0I3JywnRXRhJzonXFx1MDM5NycsJ2V0aCc6J1xceEYwJywnRVRIJzonXFx4RDAnLCdldW1sJzonXFx4RUInLCdFdW1sJzonXFx4Q0InLCdldXJvJzonXFx1MjBBQycsJ2V4Y2wnOichJywnZXhpc3QnOidcXHUyMjAzJywnRXhpc3RzJzonXFx1MjIwMycsJ2V4cGVjdGF0aW9uJzonXFx1MjEzMCcsJ2V4cG9uZW50aWFsZSc6J1xcdTIxNDcnLCdFeHBvbmVudGlhbEUnOidcXHUyMTQ3JywnZmFsbGluZ2RvdHNlcSc6J1xcdTIyNTInLCdmY3knOidcXHUwNDQ0JywnRmN5JzonXFx1MDQyNCcsJ2ZlbWFsZSc6J1xcdTI2NDAnLCdmZmlsaWcnOidcXHVGQjAzJywnZmZsaWcnOidcXHVGQjAwJywnZmZsbGlnJzonXFx1RkIwNCcsJ2Zmcic6J1xcdUQ4MzVcXHVERDIzJywnRmZyJzonXFx1RDgzNVxcdUREMDknLCdmaWxpZyc6J1xcdUZCMDEnLCdGaWxsZWRTbWFsbFNxdWFyZSc6J1xcdTI1RkMnLCdGaWxsZWRWZXJ5U21hbGxTcXVhcmUnOidcXHUyNUFBJywnZmpsaWcnOidmaicsJ2ZsYXQnOidcXHUyNjZEJywnZmxsaWcnOidcXHVGQjAyJywnZmx0bnMnOidcXHUyNUIxJywnZm5vZic6J1xcdTAxOTInLCdmb3BmJzonXFx1RDgzNVxcdURENTcnLCdGb3BmJzonXFx1RDgzNVxcdUREM0QnLCdmb3JhbGwnOidcXHUyMjAwJywnRm9yQWxsJzonXFx1MjIwMCcsJ2ZvcmsnOidcXHUyMkQ0JywnZm9ya3YnOidcXHUyQUQ5JywnRm91cmllcnRyZic6J1xcdTIxMzEnLCdmcGFydGludCc6J1xcdTJBMEQnLCdmcmFjMTInOidcXHhCRCcsJ2ZyYWMxMyc6J1xcdTIxNTMnLCdmcmFjMTQnOidcXHhCQycsJ2ZyYWMxNSc6J1xcdTIxNTUnLCdmcmFjMTYnOidcXHUyMTU5JywnZnJhYzE4JzonXFx1MjE1QicsJ2ZyYWMyMyc6J1xcdTIxNTQnLCdmcmFjMjUnOidcXHUyMTU2JywnZnJhYzM0JzonXFx4QkUnLCdmcmFjMzUnOidcXHUyMTU3JywnZnJhYzM4JzonXFx1MjE1QycsJ2ZyYWM0NSc6J1xcdTIxNTgnLCdmcmFjNTYnOidcXHUyMTVBJywnZnJhYzU4JzonXFx1MjE1RCcsJ2ZyYWM3OCc6J1xcdTIxNUUnLCdmcmFzbCc6J1xcdTIwNDQnLCdmcm93bic6J1xcdTIzMjInLCdmc2NyJzonXFx1RDgzNVxcdURDQkInLCdGc2NyJzonXFx1MjEzMScsJ2dhY3V0ZSc6J1xcdTAxRjUnLCdnYW1tYSc6J1xcdTAzQjMnLCdHYW1tYSc6J1xcdTAzOTMnLCdnYW1tYWQnOidcXHUwM0REJywnR2FtbWFkJzonXFx1MDNEQycsJ2dhcCc6J1xcdTJBODYnLCdnYnJldmUnOidcXHUwMTFGJywnR2JyZXZlJzonXFx1MDExRScsJ0djZWRpbCc6J1xcdTAxMjInLCdnY2lyYyc6J1xcdTAxMUQnLCdHY2lyYyc6J1xcdTAxMUMnLCdnY3knOidcXHUwNDMzJywnR2N5JzonXFx1MDQxMycsJ2dkb3QnOidcXHUwMTIxJywnR2RvdCc6J1xcdTAxMjAnLCdnZSc6J1xcdTIyNjUnLCdnRSc6J1xcdTIyNjcnLCdnZWwnOidcXHUyMkRCJywnZ0VsJzonXFx1MkE4QycsJ2dlcSc6J1xcdTIyNjUnLCdnZXFxJzonXFx1MjI2NycsJ2dlcXNsYW50JzonXFx1MkE3RScsJ2dlcyc6J1xcdTJBN0UnLCdnZXNjYyc6J1xcdTJBQTknLCdnZXNkb3QnOidcXHUyQTgwJywnZ2VzZG90byc6J1xcdTJBODInLCdnZXNkb3RvbCc6J1xcdTJBODQnLCdnZXNsJzonXFx1MjJEQlxcdUZFMDAnLCdnZXNsZXMnOidcXHUyQTk0JywnZ2ZyJzonXFx1RDgzNVxcdUREMjQnLCdHZnInOidcXHVEODM1XFx1REQwQScsJ2dnJzonXFx1MjI2QicsJ0dnJzonXFx1MjJEOScsJ2dnZyc6J1xcdTIyRDknLCdnaW1lbCc6J1xcdTIxMzcnLCdnamN5JzonXFx1MDQ1MycsJ0dKY3knOidcXHUwNDAzJywnZ2wnOidcXHUyMjc3JywnZ2xhJzonXFx1MkFBNScsJ2dsRSc6J1xcdTJBOTInLCdnbGonOidcXHUyQUE0JywnZ25hcCc6J1xcdTJBOEEnLCdnbmFwcHJveCc6J1xcdTJBOEEnLCdnbmUnOidcXHUyQTg4JywnZ25FJzonXFx1MjI2OScsJ2duZXEnOidcXHUyQTg4JywnZ25lcXEnOidcXHUyMjY5JywnZ25zaW0nOidcXHUyMkU3JywnZ29wZic6J1xcdUQ4MzVcXHVERDU4JywnR29wZic6J1xcdUQ4MzVcXHVERDNFJywnZ3JhdmUnOidgJywnR3JlYXRlckVxdWFsJzonXFx1MjI2NScsJ0dyZWF0ZXJFcXVhbExlc3MnOidcXHUyMkRCJywnR3JlYXRlckZ1bGxFcXVhbCc6J1xcdTIyNjcnLCdHcmVhdGVyR3JlYXRlcic6J1xcdTJBQTInLCdHcmVhdGVyTGVzcyc6J1xcdTIyNzcnLCdHcmVhdGVyU2xhbnRFcXVhbCc6J1xcdTJBN0UnLCdHcmVhdGVyVGlsZGUnOidcXHUyMjczJywnZ3Njcic6J1xcdTIxMEEnLCdHc2NyJzonXFx1RDgzNVxcdURDQTInLCdnc2ltJzonXFx1MjI3MycsJ2dzaW1lJzonXFx1MkE4RScsJ2dzaW1sJzonXFx1MkE5MCcsJ2d0JzonPicsJ0d0JzonXFx1MjI2QicsJ0dUJzonPicsJ2d0Y2MnOidcXHUyQUE3JywnZ3RjaXInOidcXHUyQTdBJywnZ3Rkb3QnOidcXHUyMkQ3JywnZ3RsUGFyJzonXFx1Mjk5NScsJ2d0cXVlc3QnOidcXHUyQTdDJywnZ3RyYXBwcm94JzonXFx1MkE4NicsJ2d0cmFycic6J1xcdTI5NzgnLCdndHJkb3QnOidcXHUyMkQ3JywnZ3RyZXFsZXNzJzonXFx1MjJEQicsJ2d0cmVxcWxlc3MnOidcXHUyQThDJywnZ3RybGVzcyc6J1xcdTIyNzcnLCdndHJzaW0nOidcXHUyMjczJywnZ3ZlcnRuZXFxJzonXFx1MjI2OVxcdUZFMDAnLCdndm5FJzonXFx1MjI2OVxcdUZFMDAnLCdIYWNlayc6J1xcdTAyQzcnLCdoYWlyc3AnOidcXHUyMDBBJywnaGFsZic6J1xceEJEJywnaGFtaWx0JzonXFx1MjEwQicsJ2hhcmRjeSc6J1xcdTA0NEEnLCdIQVJEY3knOidcXHUwNDJBJywnaGFycic6J1xcdTIxOTQnLCdoQXJyJzonXFx1MjFENCcsJ2hhcnJjaXInOidcXHUyOTQ4JywnaGFycncnOidcXHUyMUFEJywnSGF0JzonXicsJ2hiYXInOidcXHUyMTBGJywnaGNpcmMnOidcXHUwMTI1JywnSGNpcmMnOidcXHUwMTI0JywnaGVhcnRzJzonXFx1MjY2NScsJ2hlYXJ0c3VpdCc6J1xcdTI2NjUnLCdoZWxsaXAnOidcXHUyMDI2JywnaGVyY29uJzonXFx1MjJCOScsJ2hmcic6J1xcdUQ4MzVcXHVERDI1JywnSGZyJzonXFx1MjEwQycsJ0hpbGJlcnRTcGFjZSc6J1xcdTIxMEInLCdoa3NlYXJvdyc6J1xcdTI5MjUnLCdoa3N3YXJvdyc6J1xcdTI5MjYnLCdob2Fycic6J1xcdTIxRkYnLCdob210aHQnOidcXHUyMjNCJywnaG9va2xlZnRhcnJvdyc6J1xcdTIxQTknLCdob29rcmlnaHRhcnJvdyc6J1xcdTIxQUEnLCdob3BmJzonXFx1RDgzNVxcdURENTknLCdIb3BmJzonXFx1MjEwRCcsJ2hvcmJhcic6J1xcdTIwMTUnLCdIb3Jpem9udGFsTGluZSc6J1xcdTI1MDAnLCdoc2NyJzonXFx1RDgzNVxcdURDQkQnLCdIc2NyJzonXFx1MjEwQicsJ2hzbGFzaCc6J1xcdTIxMEYnLCdoc3Ryb2snOidcXHUwMTI3JywnSHN0cm9rJzonXFx1MDEyNicsJ0h1bXBEb3duSHVtcCc6J1xcdTIyNEUnLCdIdW1wRXF1YWwnOidcXHUyMjRGJywnaHlidWxsJzonXFx1MjA0MycsJ2h5cGhlbic6J1xcdTIwMTAnLCdpYWN1dGUnOidcXHhFRCcsJ0lhY3V0ZSc6J1xceENEJywnaWMnOidcXHUyMDYzJywnaWNpcmMnOidcXHhFRScsJ0ljaXJjJzonXFx4Q0UnLCdpY3knOidcXHUwNDM4JywnSWN5JzonXFx1MDQxOCcsJ0lkb3QnOidcXHUwMTMwJywnaWVjeSc6J1xcdTA0MzUnLCdJRWN5JzonXFx1MDQxNScsJ2lleGNsJzonXFx4QTEnLCdpZmYnOidcXHUyMUQ0JywnaWZyJzonXFx1RDgzNVxcdUREMjYnLCdJZnInOidcXHUyMTExJywnaWdyYXZlJzonXFx4RUMnLCdJZ3JhdmUnOidcXHhDQycsJ2lpJzonXFx1MjE0OCcsJ2lpaWludCc6J1xcdTJBMEMnLCdpaWludCc6J1xcdTIyMkQnLCdpaW5maW4nOidcXHUyOURDJywnaWlvdGEnOidcXHUyMTI5JywnaWpsaWcnOidcXHUwMTMzJywnSUpsaWcnOidcXHUwMTMyJywnSW0nOidcXHUyMTExJywnaW1hY3InOidcXHUwMTJCJywnSW1hY3InOidcXHUwMTJBJywnaW1hZ2UnOidcXHUyMTExJywnSW1hZ2luYXJ5SSc6J1xcdTIxNDgnLCdpbWFnbGluZSc6J1xcdTIxMTAnLCdpbWFncGFydCc6J1xcdTIxMTEnLCdpbWF0aCc6J1xcdTAxMzEnLCdpbW9mJzonXFx1MjJCNycsJ2ltcGVkJzonXFx1MDFCNScsJ0ltcGxpZXMnOidcXHUyMUQyJywnaW4nOidcXHUyMjA4JywnaW5jYXJlJzonXFx1MjEwNScsJ2luZmluJzonXFx1MjIxRScsJ2luZmludGllJzonXFx1MjlERCcsJ2lub2RvdCc6J1xcdTAxMzEnLCdpbnQnOidcXHUyMjJCJywnSW50JzonXFx1MjIyQycsJ2ludGNhbCc6J1xcdTIyQkEnLCdpbnRlZ2Vycyc6J1xcdTIxMjQnLCdJbnRlZ3JhbCc6J1xcdTIyMkInLCdpbnRlcmNhbCc6J1xcdTIyQkEnLCdJbnRlcnNlY3Rpb24nOidcXHUyMkMyJywnaW50bGFyaGsnOidcXHUyQTE3JywnaW50cHJvZCc6J1xcdTJBM0MnLCdJbnZpc2libGVDb21tYSc6J1xcdTIwNjMnLCdJbnZpc2libGVUaW1lcyc6J1xcdTIwNjInLCdpb2N5JzonXFx1MDQ1MScsJ0lPY3knOidcXHUwNDAxJywnaW9nb24nOidcXHUwMTJGJywnSW9nb24nOidcXHUwMTJFJywnaW9wZic6J1xcdUQ4MzVcXHVERDVBJywnSW9wZic6J1xcdUQ4MzVcXHVERDQwJywnaW90YSc6J1xcdTAzQjknLCdJb3RhJzonXFx1MDM5OScsJ2lwcm9kJzonXFx1MkEzQycsJ2lxdWVzdCc6J1xceEJGJywnaXNjcic6J1xcdUQ4MzVcXHVEQ0JFJywnSXNjcic6J1xcdTIxMTAnLCdpc2luJzonXFx1MjIwOCcsJ2lzaW5kb3QnOidcXHUyMkY1JywnaXNpbkUnOidcXHUyMkY5JywnaXNpbnMnOidcXHUyMkY0JywnaXNpbnN2JzonXFx1MjJGMycsJ2lzaW52JzonXFx1MjIwOCcsJ2l0JzonXFx1MjA2MicsJ2l0aWxkZSc6J1xcdTAxMjknLCdJdGlsZGUnOidcXHUwMTI4JywnaXVrY3knOidcXHUwNDU2JywnSXVrY3knOidcXHUwNDA2JywnaXVtbCc6J1xceEVGJywnSXVtbCc6J1xceENGJywnamNpcmMnOidcXHUwMTM1JywnSmNpcmMnOidcXHUwMTM0JywnamN5JzonXFx1MDQzOScsJ0pjeSc6J1xcdTA0MTknLCdqZnInOidcXHVEODM1XFx1REQyNycsJ0pmcic6J1xcdUQ4MzVcXHVERDBEJywnam1hdGgnOidcXHUwMjM3Jywnam9wZic6J1xcdUQ4MzVcXHVERDVCJywnSm9wZic6J1xcdUQ4MzVcXHVERDQxJywnanNjcic6J1xcdUQ4MzVcXHVEQ0JGJywnSnNjcic6J1xcdUQ4MzVcXHVEQ0E1JywnanNlcmN5JzonXFx1MDQ1OCcsJ0pzZXJjeSc6J1xcdTA0MDgnLCdqdWtjeSc6J1xcdTA0NTQnLCdKdWtjeSc6J1xcdTA0MDQnLCdrYXBwYSc6J1xcdTAzQkEnLCdLYXBwYSc6J1xcdTAzOUEnLCdrYXBwYXYnOidcXHUwM0YwJywna2NlZGlsJzonXFx1MDEzNycsJ0tjZWRpbCc6J1xcdTAxMzYnLCdrY3knOidcXHUwNDNBJywnS2N5JzonXFx1MDQxQScsJ2tmcic6J1xcdUQ4MzVcXHVERDI4JywnS2ZyJzonXFx1RDgzNVxcdUREMEUnLCdrZ3JlZW4nOidcXHUwMTM4Jywna2hjeSc6J1xcdTA0NDUnLCdLSGN5JzonXFx1MDQyNScsJ2tqY3knOidcXHUwNDVDJywnS0pjeSc6J1xcdTA0MEMnLCdrb3BmJzonXFx1RDgzNVxcdURENUMnLCdLb3BmJzonXFx1RDgzNVxcdURENDInLCdrc2NyJzonXFx1RDgzNVxcdURDQzAnLCdLc2NyJzonXFx1RDgzNVxcdURDQTYnLCdsQWFycic6J1xcdTIxREEnLCdsYWN1dGUnOidcXHUwMTNBJywnTGFjdXRlJzonXFx1MDEzOScsJ2xhZW1wdHl2JzonXFx1MjlCNCcsJ2xhZ3Jhbic6J1xcdTIxMTInLCdsYW1iZGEnOidcXHUwM0JCJywnTGFtYmRhJzonXFx1MDM5QicsJ2xhbmcnOidcXHUyN0U4JywnTGFuZyc6J1xcdTI3RUEnLCdsYW5nZCc6J1xcdTI5OTEnLCdsYW5nbGUnOidcXHUyN0U4JywnbGFwJzonXFx1MkE4NScsJ0xhcGxhY2V0cmYnOidcXHUyMTEyJywnbGFxdW8nOidcXHhBQicsJ2xhcnInOidcXHUyMTkwJywnbEFycic6J1xcdTIxRDAnLCdMYXJyJzonXFx1MjE5RScsJ2xhcnJiJzonXFx1MjFFNCcsJ2xhcnJiZnMnOidcXHUyOTFGJywnbGFycmZzJzonXFx1MjkxRCcsJ2xhcnJoayc6J1xcdTIxQTknLCdsYXJybHAnOidcXHUyMUFCJywnbGFycnBsJzonXFx1MjkzOScsJ2xhcnJzaW0nOidcXHUyOTczJywnbGFycnRsJzonXFx1MjFBMicsJ2xhdCc6J1xcdTJBQUInLCdsYXRhaWwnOidcXHUyOTE5JywnbEF0YWlsJzonXFx1MjkxQicsJ2xhdGUnOidcXHUyQUFEJywnbGF0ZXMnOidcXHUyQUFEXFx1RkUwMCcsJ2xiYXJyJzonXFx1MjkwQycsJ2xCYXJyJzonXFx1MjkwRScsJ2xiYnJrJzonXFx1Mjc3MicsJ2xicmFjZSc6J3snLCdsYnJhY2snOidbJywnbGJya2UnOidcXHUyOThCJywnbGJya3NsZCc6J1xcdTI5OEYnLCdsYnJrc2x1JzonXFx1Mjk4RCcsJ2xjYXJvbic6J1xcdTAxM0UnLCdMY2Fyb24nOidcXHUwMTNEJywnbGNlZGlsJzonXFx1MDEzQycsJ0xjZWRpbCc6J1xcdTAxM0InLCdsY2VpbCc6J1xcdTIzMDgnLCdsY3ViJzoneycsJ2xjeSc6J1xcdTA0M0InLCdMY3knOidcXHUwNDFCJywnbGRjYSc6J1xcdTI5MzYnLCdsZHF1byc6J1xcdTIwMUMnLCdsZHF1b3InOidcXHUyMDFFJywnbGRyZGhhcic6J1xcdTI5NjcnLCdsZHJ1c2hhcic6J1xcdTI5NEInLCdsZHNoJzonXFx1MjFCMicsJ2xlJzonXFx1MjI2NCcsJ2xFJzonXFx1MjI2NicsJ0xlZnRBbmdsZUJyYWNrZXQnOidcXHUyN0U4JywnbGVmdGFycm93JzonXFx1MjE5MCcsJ0xlZnRhcnJvdyc6J1xcdTIxRDAnLCdMZWZ0QXJyb3cnOidcXHUyMTkwJywnTGVmdEFycm93QmFyJzonXFx1MjFFNCcsJ0xlZnRBcnJvd1JpZ2h0QXJyb3cnOidcXHUyMUM2JywnbGVmdGFycm93dGFpbCc6J1xcdTIxQTInLCdMZWZ0Q2VpbGluZyc6J1xcdTIzMDgnLCdMZWZ0RG91YmxlQnJhY2tldCc6J1xcdTI3RTYnLCdMZWZ0RG93blRlZVZlY3Rvcic6J1xcdTI5NjEnLCdMZWZ0RG93blZlY3Rvcic6J1xcdTIxQzMnLCdMZWZ0RG93blZlY3RvckJhcic6J1xcdTI5NTknLCdMZWZ0Rmxvb3InOidcXHUyMzBBJywnbGVmdGhhcnBvb25kb3duJzonXFx1MjFCRCcsJ2xlZnRoYXJwb29udXAnOidcXHUyMUJDJywnbGVmdGxlZnRhcnJvd3MnOidcXHUyMUM3JywnbGVmdHJpZ2h0YXJyb3cnOidcXHUyMTk0JywnTGVmdHJpZ2h0YXJyb3cnOidcXHUyMUQ0JywnTGVmdFJpZ2h0QXJyb3cnOidcXHUyMTk0JywnbGVmdHJpZ2h0YXJyb3dzJzonXFx1MjFDNicsJ2xlZnRyaWdodGhhcnBvb25zJzonXFx1MjFDQicsJ2xlZnRyaWdodHNxdWlnYXJyb3cnOidcXHUyMUFEJywnTGVmdFJpZ2h0VmVjdG9yJzonXFx1Mjk0RScsJ0xlZnRUZWUnOidcXHUyMkEzJywnTGVmdFRlZUFycm93JzonXFx1MjFBNCcsJ0xlZnRUZWVWZWN0b3InOidcXHUyOTVBJywnbGVmdHRocmVldGltZXMnOidcXHUyMkNCJywnTGVmdFRyaWFuZ2xlJzonXFx1MjJCMicsJ0xlZnRUcmlhbmdsZUJhcic6J1xcdTI5Q0YnLCdMZWZ0VHJpYW5nbGVFcXVhbCc6J1xcdTIyQjQnLCdMZWZ0VXBEb3duVmVjdG9yJzonXFx1Mjk1MScsJ0xlZnRVcFRlZVZlY3Rvcic6J1xcdTI5NjAnLCdMZWZ0VXBWZWN0b3InOidcXHUyMUJGJywnTGVmdFVwVmVjdG9yQmFyJzonXFx1Mjk1OCcsJ0xlZnRWZWN0b3InOidcXHUyMUJDJywnTGVmdFZlY3RvckJhcic6J1xcdTI5NTInLCdsZWcnOidcXHUyMkRBJywnbEVnJzonXFx1MkE4QicsJ2xlcSc6J1xcdTIyNjQnLCdsZXFxJzonXFx1MjI2NicsJ2xlcXNsYW50JzonXFx1MkE3RCcsJ2xlcyc6J1xcdTJBN0QnLCdsZXNjYyc6J1xcdTJBQTgnLCdsZXNkb3QnOidcXHUyQTdGJywnbGVzZG90byc6J1xcdTJBODEnLCdsZXNkb3Rvcic6J1xcdTJBODMnLCdsZXNnJzonXFx1MjJEQVxcdUZFMDAnLCdsZXNnZXMnOidcXHUyQTkzJywnbGVzc2FwcHJveCc6J1xcdTJBODUnLCdsZXNzZG90JzonXFx1MjJENicsJ2xlc3NlcWd0cic6J1xcdTIyREEnLCdsZXNzZXFxZ3RyJzonXFx1MkE4QicsJ0xlc3NFcXVhbEdyZWF0ZXInOidcXHUyMkRBJywnTGVzc0Z1bGxFcXVhbCc6J1xcdTIyNjYnLCdMZXNzR3JlYXRlcic6J1xcdTIyNzYnLCdsZXNzZ3RyJzonXFx1MjI3NicsJ0xlc3NMZXNzJzonXFx1MkFBMScsJ2xlc3NzaW0nOidcXHUyMjcyJywnTGVzc1NsYW50RXF1YWwnOidcXHUyQTdEJywnTGVzc1RpbGRlJzonXFx1MjI3MicsJ2xmaXNodCc6J1xcdTI5N0MnLCdsZmxvb3InOidcXHUyMzBBJywnbGZyJzonXFx1RDgzNVxcdUREMjknLCdMZnInOidcXHVEODM1XFx1REQwRicsJ2xnJzonXFx1MjI3NicsJ2xnRSc6J1xcdTJBOTEnLCdsSGFyJzonXFx1Mjk2MicsJ2xoYXJkJzonXFx1MjFCRCcsJ2xoYXJ1JzonXFx1MjFCQycsJ2xoYXJ1bCc6J1xcdTI5NkEnLCdsaGJsayc6J1xcdTI1ODQnLCdsamN5JzonXFx1MDQ1OScsJ0xKY3knOidcXHUwNDA5JywnbGwnOidcXHUyMjZBJywnTGwnOidcXHUyMkQ4JywnbGxhcnInOidcXHUyMUM3JywnbGxjb3JuZXInOidcXHUyMzFFJywnTGxlZnRhcnJvdyc6J1xcdTIxREEnLCdsbGhhcmQnOidcXHUyOTZCJywnbGx0cmknOidcXHUyNUZBJywnbG1pZG90JzonXFx1MDE0MCcsJ0xtaWRvdCc6J1xcdTAxM0YnLCdsbW91c3QnOidcXHUyM0IwJywnbG1vdXN0YWNoZSc6J1xcdTIzQjAnLCdsbmFwJzonXFx1MkE4OScsJ2xuYXBwcm94JzonXFx1MkE4OScsJ2xuZSc6J1xcdTJBODcnLCdsbkUnOidcXHUyMjY4JywnbG5lcSc6J1xcdTJBODcnLCdsbmVxcSc6J1xcdTIyNjgnLCdsbnNpbSc6J1xcdTIyRTYnLCdsb2FuZyc6J1xcdTI3RUMnLCdsb2Fycic6J1xcdTIxRkQnLCdsb2Jyayc6J1xcdTI3RTYnLCdsb25nbGVmdGFycm93JzonXFx1MjdGNScsJ0xvbmdsZWZ0YXJyb3cnOidcXHUyN0Y4JywnTG9uZ0xlZnRBcnJvdyc6J1xcdTI3RjUnLCdsb25nbGVmdHJpZ2h0YXJyb3cnOidcXHUyN0Y3JywnTG9uZ2xlZnRyaWdodGFycm93JzonXFx1MjdGQScsJ0xvbmdMZWZ0UmlnaHRBcnJvdyc6J1xcdTI3RjcnLCdsb25nbWFwc3RvJzonXFx1MjdGQycsJ2xvbmdyaWdodGFycm93JzonXFx1MjdGNicsJ0xvbmdyaWdodGFycm93JzonXFx1MjdGOScsJ0xvbmdSaWdodEFycm93JzonXFx1MjdGNicsJ2xvb3BhcnJvd2xlZnQnOidcXHUyMUFCJywnbG9vcGFycm93cmlnaHQnOidcXHUyMUFDJywnbG9wYXInOidcXHUyOTg1JywnbG9wZic6J1xcdUQ4MzVcXHVERDVEJywnTG9wZic6J1xcdUQ4MzVcXHVERDQzJywnbG9wbHVzJzonXFx1MkEyRCcsJ2xvdGltZXMnOidcXHUyQTM0JywnbG93YXN0JzonXFx1MjIxNycsJ2xvd2Jhcic6J18nLCdMb3dlckxlZnRBcnJvdyc6J1xcdTIxOTknLCdMb3dlclJpZ2h0QXJyb3cnOidcXHUyMTk4JywnbG96JzonXFx1MjVDQScsJ2xvemVuZ2UnOidcXHUyNUNBJywnbG96Zic6J1xcdTI5RUInLCdscGFyJzonKCcsJ2xwYXJsdCc6J1xcdTI5OTMnLCdscmFycic6J1xcdTIxQzYnLCdscmNvcm5lcic6J1xcdTIzMUYnLCdscmhhcic6J1xcdTIxQ0InLCdscmhhcmQnOidcXHUyOTZEJywnbHJtJzonXFx1MjAwRScsJ2xydHJpJzonXFx1MjJCRicsJ2xzYXF1byc6J1xcdTIwMzknLCdsc2NyJzonXFx1RDgzNVxcdURDQzEnLCdMc2NyJzonXFx1MjExMicsJ2xzaCc6J1xcdTIxQjAnLCdMc2gnOidcXHUyMUIwJywnbHNpbSc6J1xcdTIyNzInLCdsc2ltZSc6J1xcdTJBOEQnLCdsc2ltZyc6J1xcdTJBOEYnLCdsc3FiJzonWycsJ2xzcXVvJzonXFx1MjAxOCcsJ2xzcXVvcic6J1xcdTIwMUEnLCdsc3Ryb2snOidcXHUwMTQyJywnTHN0cm9rJzonXFx1MDE0MScsJ2x0JzonPCcsJ0x0JzonXFx1MjI2QScsJ0xUJzonPCcsJ2x0Y2MnOidcXHUyQUE2JywnbHRjaXInOidcXHUyQTc5JywnbHRkb3QnOidcXHUyMkQ2JywnbHRocmVlJzonXFx1MjJDQicsJ2x0aW1lcyc6J1xcdTIyQzknLCdsdGxhcnInOidcXHUyOTc2JywnbHRxdWVzdCc6J1xcdTJBN0InLCdsdHJpJzonXFx1MjVDMycsJ2x0cmllJzonXFx1MjJCNCcsJ2x0cmlmJzonXFx1MjVDMicsJ2x0clBhcic6J1xcdTI5OTYnLCdsdXJkc2hhcic6J1xcdTI5NEEnLCdsdXJ1aGFyJzonXFx1Mjk2NicsJ2x2ZXJ0bmVxcSc6J1xcdTIyNjhcXHVGRTAwJywnbHZuRSc6J1xcdTIyNjhcXHVGRTAwJywnbWFjcic6J1xceEFGJywnbWFsZSc6J1xcdTI2NDInLCdtYWx0JzonXFx1MjcyMCcsJ21hbHRlc2UnOidcXHUyNzIwJywnbWFwJzonXFx1MjFBNicsJ01hcCc6J1xcdTI5MDUnLCdtYXBzdG8nOidcXHUyMUE2JywnbWFwc3RvZG93bic6J1xcdTIxQTcnLCdtYXBzdG9sZWZ0JzonXFx1MjFBNCcsJ21hcHN0b3VwJzonXFx1MjFBNScsJ21hcmtlcic6J1xcdTI1QUUnLCdtY29tbWEnOidcXHUyQTI5JywnbWN5JzonXFx1MDQzQycsJ01jeSc6J1xcdTA0MUMnLCdtZGFzaCc6J1xcdTIwMTQnLCdtRERvdCc6J1xcdTIyM0EnLCdtZWFzdXJlZGFuZ2xlJzonXFx1MjIyMScsJ01lZGl1bVNwYWNlJzonXFx1MjA1RicsJ01lbGxpbnRyZic6J1xcdTIxMzMnLCdtZnInOidcXHVEODM1XFx1REQyQScsJ01mcic6J1xcdUQ4MzVcXHVERDEwJywnbWhvJzonXFx1MjEyNycsJ21pY3JvJzonXFx4QjUnLCdtaWQnOidcXHUyMjIzJywnbWlkYXN0JzonKicsJ21pZGNpcic6J1xcdTJBRjAnLCdtaWRkb3QnOidcXHhCNycsJ21pbnVzJzonXFx1MjIxMicsJ21pbnVzYic6J1xcdTIyOUYnLCdtaW51c2QnOidcXHUyMjM4JywnbWludXNkdSc6J1xcdTJBMkEnLCdNaW51c1BsdXMnOidcXHUyMjEzJywnbWxjcCc6J1xcdTJBREInLCdtbGRyJzonXFx1MjAyNicsJ21ucGx1cyc6J1xcdTIyMTMnLCdtb2RlbHMnOidcXHUyMkE3JywnbW9wZic6J1xcdUQ4MzVcXHVERDVFJywnTW9wZic6J1xcdUQ4MzVcXHVERDQ0JywnbXAnOidcXHUyMjEzJywnbXNjcic6J1xcdUQ4MzVcXHVEQ0MyJywnTXNjcic6J1xcdTIxMzMnLCdtc3Rwb3MnOidcXHUyMjNFJywnbXUnOidcXHUwM0JDJywnTXUnOidcXHUwMzlDJywnbXVsdGltYXAnOidcXHUyMkI4JywnbXVtYXAnOidcXHUyMkI4JywnbmFibGEnOidcXHUyMjA3JywnbmFjdXRlJzonXFx1MDE0NCcsJ05hY3V0ZSc6J1xcdTAxNDMnLCduYW5nJzonXFx1MjIyMFxcdTIwRDInLCduYXAnOidcXHUyMjQ5JywnbmFwRSc6J1xcdTJBNzBcXHUwMzM4JywnbmFwaWQnOidcXHUyMjRCXFx1MDMzOCcsJ25hcG9zJzonXFx1MDE0OScsJ25hcHByb3gnOidcXHUyMjQ5JywnbmF0dXInOidcXHUyNjZFJywnbmF0dXJhbCc6J1xcdTI2NkUnLCduYXR1cmFscyc6J1xcdTIxMTUnLCduYnNwJzonXFx4QTAnLCduYnVtcCc6J1xcdTIyNEVcXHUwMzM4JywnbmJ1bXBlJzonXFx1MjI0RlxcdTAzMzgnLCduY2FwJzonXFx1MkE0MycsJ25jYXJvbic6J1xcdTAxNDgnLCdOY2Fyb24nOidcXHUwMTQ3JywnbmNlZGlsJzonXFx1MDE0NicsJ05jZWRpbCc6J1xcdTAxNDUnLCduY29uZyc6J1xcdTIyNDcnLCduY29uZ2RvdCc6J1xcdTJBNkRcXHUwMzM4JywnbmN1cCc6J1xcdTJBNDInLCduY3knOidcXHUwNDNEJywnTmN5JzonXFx1MDQxRCcsJ25kYXNoJzonXFx1MjAxMycsJ25lJzonXFx1MjI2MCcsJ25lYXJoayc6J1xcdTI5MjQnLCduZWFycic6J1xcdTIxOTcnLCduZUFycic6J1xcdTIxRDcnLCduZWFycm93JzonXFx1MjE5NycsJ25lZG90JzonXFx1MjI1MFxcdTAzMzgnLCdOZWdhdGl2ZU1lZGl1bVNwYWNlJzonXFx1MjAwQicsJ05lZ2F0aXZlVGhpY2tTcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVRoaW5TcGFjZSc6J1xcdTIwMEInLCdOZWdhdGl2ZVZlcnlUaGluU3BhY2UnOidcXHUyMDBCJywnbmVxdWl2JzonXFx1MjI2MicsJ25lc2Vhcic6J1xcdTI5MjgnLCduZXNpbSc6J1xcdTIyNDJcXHUwMzM4JywnTmVzdGVkR3JlYXRlckdyZWF0ZXInOidcXHUyMjZCJywnTmVzdGVkTGVzc0xlc3MnOidcXHUyMjZBJywnTmV3TGluZSc6J1xcbicsJ25leGlzdCc6J1xcdTIyMDQnLCduZXhpc3RzJzonXFx1MjIwNCcsJ25mcic6J1xcdUQ4MzVcXHVERDJCJywnTmZyJzonXFx1RDgzNVxcdUREMTEnLCduZ2UnOidcXHUyMjcxJywnbmdFJzonXFx1MjI2N1xcdTAzMzgnLCduZ2VxJzonXFx1MjI3MScsJ25nZXFxJzonXFx1MjI2N1xcdTAzMzgnLCduZ2Vxc2xhbnQnOidcXHUyQTdFXFx1MDMzOCcsJ25nZXMnOidcXHUyQTdFXFx1MDMzOCcsJ25HZyc6J1xcdTIyRDlcXHUwMzM4JywnbmdzaW0nOidcXHUyMjc1Jywnbmd0JzonXFx1MjI2RicsJ25HdCc6J1xcdTIyNkJcXHUyMEQyJywnbmd0cic6J1xcdTIyNkYnLCduR3R2JzonXFx1MjI2QlxcdTAzMzgnLCduaGFycic6J1xcdTIxQUUnLCduaEFycic6J1xcdTIxQ0UnLCduaHBhcic6J1xcdTJBRjInLCduaSc6J1xcdTIyMEInLCduaXMnOidcXHUyMkZDJywnbmlzZCc6J1xcdTIyRkEnLCduaXYnOidcXHUyMjBCJywnbmpjeSc6J1xcdTA0NUEnLCdOSmN5JzonXFx1MDQwQScsJ25sYXJyJzonXFx1MjE5QScsJ25sQXJyJzonXFx1MjFDRCcsJ25sZHInOidcXHUyMDI1JywnbmxlJzonXFx1MjI3MCcsJ25sRSc6J1xcdTIyNjZcXHUwMzM4JywnbmxlZnRhcnJvdyc6J1xcdTIxOUEnLCduTGVmdGFycm93JzonXFx1MjFDRCcsJ25sZWZ0cmlnaHRhcnJvdyc6J1xcdTIxQUUnLCduTGVmdHJpZ2h0YXJyb3cnOidcXHUyMUNFJywnbmxlcSc6J1xcdTIyNzAnLCdubGVxcSc6J1xcdTIyNjZcXHUwMzM4JywnbmxlcXNsYW50JzonXFx1MkE3RFxcdTAzMzgnLCdubGVzJzonXFx1MkE3RFxcdTAzMzgnLCdubGVzcyc6J1xcdTIyNkUnLCduTGwnOidcXHUyMkQ4XFx1MDMzOCcsJ25sc2ltJzonXFx1MjI3NCcsJ25sdCc6J1xcdTIyNkUnLCduTHQnOidcXHUyMjZBXFx1MjBEMicsJ25sdHJpJzonXFx1MjJFQScsJ25sdHJpZSc6J1xcdTIyRUMnLCduTHR2JzonXFx1MjI2QVxcdTAzMzgnLCdubWlkJzonXFx1MjIyNCcsJ05vQnJlYWsnOidcXHUyMDYwJywnTm9uQnJlYWtpbmdTcGFjZSc6J1xceEEwJywnbm9wZic6J1xcdUQ4MzVcXHVERDVGJywnTm9wZic6J1xcdTIxMTUnLCdub3QnOidcXHhBQycsJ05vdCc6J1xcdTJBRUMnLCdOb3RDb25ncnVlbnQnOidcXHUyMjYyJywnTm90Q3VwQ2FwJzonXFx1MjI2RCcsJ05vdERvdWJsZVZlcnRpY2FsQmFyJzonXFx1MjIyNicsJ05vdEVsZW1lbnQnOidcXHUyMjA5JywnTm90RXF1YWwnOidcXHUyMjYwJywnTm90RXF1YWxUaWxkZSc6J1xcdTIyNDJcXHUwMzM4JywnTm90RXhpc3RzJzonXFx1MjIwNCcsJ05vdEdyZWF0ZXInOidcXHUyMjZGJywnTm90R3JlYXRlckVxdWFsJzonXFx1MjI3MScsJ05vdEdyZWF0ZXJGdWxsRXF1YWwnOidcXHUyMjY3XFx1MDMzOCcsJ05vdEdyZWF0ZXJHcmVhdGVyJzonXFx1MjI2QlxcdTAzMzgnLCdOb3RHcmVhdGVyTGVzcyc6J1xcdTIyNzknLCdOb3RHcmVhdGVyU2xhbnRFcXVhbCc6J1xcdTJBN0VcXHUwMzM4JywnTm90R3JlYXRlclRpbGRlJzonXFx1MjI3NScsJ05vdEh1bXBEb3duSHVtcCc6J1xcdTIyNEVcXHUwMzM4JywnTm90SHVtcEVxdWFsJzonXFx1MjI0RlxcdTAzMzgnLCdub3Rpbic6J1xcdTIyMDknLCdub3RpbmRvdCc6J1xcdTIyRjVcXHUwMzM4Jywnbm90aW5FJzonXFx1MjJGOVxcdTAzMzgnLCdub3RpbnZhJzonXFx1MjIwOScsJ25vdGludmInOidcXHUyMkY3Jywnbm90aW52Yyc6J1xcdTIyRjYnLCdOb3RMZWZ0VHJpYW5nbGUnOidcXHUyMkVBJywnTm90TGVmdFRyaWFuZ2xlQmFyJzonXFx1MjlDRlxcdTAzMzgnLCdOb3RMZWZ0VHJpYW5nbGVFcXVhbCc6J1xcdTIyRUMnLCdOb3RMZXNzJzonXFx1MjI2RScsJ05vdExlc3NFcXVhbCc6J1xcdTIyNzAnLCdOb3RMZXNzR3JlYXRlcic6J1xcdTIyNzgnLCdOb3RMZXNzTGVzcyc6J1xcdTIyNkFcXHUwMzM4JywnTm90TGVzc1NsYW50RXF1YWwnOidcXHUyQTdEXFx1MDMzOCcsJ05vdExlc3NUaWxkZSc6J1xcdTIyNzQnLCdOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcic6J1xcdTJBQTJcXHUwMzM4JywnTm90TmVzdGVkTGVzc0xlc3MnOidcXHUyQUExXFx1MDMzOCcsJ25vdG5pJzonXFx1MjIwQycsJ25vdG5pdmEnOidcXHUyMjBDJywnbm90bml2Yic6J1xcdTIyRkUnLCdub3RuaXZjJzonXFx1MjJGRCcsJ05vdFByZWNlZGVzJzonXFx1MjI4MCcsJ05vdFByZWNlZGVzRXF1YWwnOidcXHUyQUFGXFx1MDMzOCcsJ05vdFByZWNlZGVzU2xhbnRFcXVhbCc6J1xcdTIyRTAnLCdOb3RSZXZlcnNlRWxlbWVudCc6J1xcdTIyMEMnLCdOb3RSaWdodFRyaWFuZ2xlJzonXFx1MjJFQicsJ05vdFJpZ2h0VHJpYW5nbGVCYXInOidcXHUyOUQwXFx1MDMzOCcsJ05vdFJpZ2h0VHJpYW5nbGVFcXVhbCc6J1xcdTIyRUQnLCdOb3RTcXVhcmVTdWJzZXQnOidcXHUyMjhGXFx1MDMzOCcsJ05vdFNxdWFyZVN1YnNldEVxdWFsJzonXFx1MjJFMicsJ05vdFNxdWFyZVN1cGVyc2V0JzonXFx1MjI5MFxcdTAzMzgnLCdOb3RTcXVhcmVTdXBlcnNldEVxdWFsJzonXFx1MjJFMycsJ05vdFN1YnNldCc6J1xcdTIyODJcXHUyMEQyJywnTm90U3Vic2V0RXF1YWwnOidcXHUyMjg4JywnTm90U3VjY2VlZHMnOidcXHUyMjgxJywnTm90U3VjY2VlZHNFcXVhbCc6J1xcdTJBQjBcXHUwMzM4JywnTm90U3VjY2VlZHNTbGFudEVxdWFsJzonXFx1MjJFMScsJ05vdFN1Y2NlZWRzVGlsZGUnOidcXHUyMjdGXFx1MDMzOCcsJ05vdFN1cGVyc2V0JzonXFx1MjI4M1xcdTIwRDInLCdOb3RTdXBlcnNldEVxdWFsJzonXFx1MjI4OScsJ05vdFRpbGRlJzonXFx1MjI0MScsJ05vdFRpbGRlRXF1YWwnOidcXHUyMjQ0JywnTm90VGlsZGVGdWxsRXF1YWwnOidcXHUyMjQ3JywnTm90VGlsZGVUaWxkZSc6J1xcdTIyNDknLCdOb3RWZXJ0aWNhbEJhcic6J1xcdTIyMjQnLCducGFyJzonXFx1MjIyNicsJ25wYXJhbGxlbCc6J1xcdTIyMjYnLCducGFyc2wnOidcXHUyQUZEXFx1MjBFNScsJ25wYXJ0JzonXFx1MjIwMlxcdTAzMzgnLCducG9saW50JzonXFx1MkExNCcsJ25wcic6J1xcdTIyODAnLCducHJjdWUnOidcXHUyMkUwJywnbnByZSc6J1xcdTJBQUZcXHUwMzM4JywnbnByZWMnOidcXHUyMjgwJywnbnByZWNlcSc6J1xcdTJBQUZcXHUwMzM4JywnbnJhcnInOidcXHUyMTlCJywnbnJBcnInOidcXHUyMUNGJywnbnJhcnJjJzonXFx1MjkzM1xcdTAzMzgnLCducmFycncnOidcXHUyMTlEXFx1MDMzOCcsJ25yaWdodGFycm93JzonXFx1MjE5QicsJ25SaWdodGFycm93JzonXFx1MjFDRicsJ25ydHJpJzonXFx1MjJFQicsJ25ydHJpZSc6J1xcdTIyRUQnLCduc2MnOidcXHUyMjgxJywnbnNjY3VlJzonXFx1MjJFMScsJ25zY2UnOidcXHUyQUIwXFx1MDMzOCcsJ25zY3InOidcXHVEODM1XFx1RENDMycsJ05zY3InOidcXHVEODM1XFx1RENBOScsJ25zaG9ydG1pZCc6J1xcdTIyMjQnLCduc2hvcnRwYXJhbGxlbCc6J1xcdTIyMjYnLCduc2ltJzonXFx1MjI0MScsJ25zaW1lJzonXFx1MjI0NCcsJ25zaW1lcSc6J1xcdTIyNDQnLCduc21pZCc6J1xcdTIyMjQnLCduc3Bhcic6J1xcdTIyMjYnLCduc3FzdWJlJzonXFx1MjJFMicsJ25zcXN1cGUnOidcXHUyMkUzJywnbnN1Yic6J1xcdTIyODQnLCduc3ViZSc6J1xcdTIyODgnLCduc3ViRSc6J1xcdTJBQzVcXHUwMzM4JywnbnN1YnNldCc6J1xcdTIyODJcXHUyMEQyJywnbnN1YnNldGVxJzonXFx1MjI4OCcsJ25zdWJzZXRlcXEnOidcXHUyQUM1XFx1MDMzOCcsJ25zdWNjJzonXFx1MjI4MScsJ25zdWNjZXEnOidcXHUyQUIwXFx1MDMzOCcsJ25zdXAnOidcXHUyMjg1JywnbnN1cGUnOidcXHUyMjg5JywnbnN1cEUnOidcXHUyQUM2XFx1MDMzOCcsJ25zdXBzZXQnOidcXHUyMjgzXFx1MjBEMicsJ25zdXBzZXRlcSc6J1xcdTIyODknLCduc3Vwc2V0ZXFxJzonXFx1MkFDNlxcdTAzMzgnLCdudGdsJzonXFx1MjI3OScsJ250aWxkZSc6J1xceEYxJywnTnRpbGRlJzonXFx4RDEnLCdudGxnJzonXFx1MjI3OCcsJ250cmlhbmdsZWxlZnQnOidcXHUyMkVBJywnbnRyaWFuZ2xlbGVmdGVxJzonXFx1MjJFQycsJ250cmlhbmdsZXJpZ2h0JzonXFx1MjJFQicsJ250cmlhbmdsZXJpZ2h0ZXEnOidcXHUyMkVEJywnbnUnOidcXHUwM0JEJywnTnUnOidcXHUwMzlEJywnbnVtJzonIycsJ251bWVybyc6J1xcdTIxMTYnLCdudW1zcCc6J1xcdTIwMDcnLCdudmFwJzonXFx1MjI0RFxcdTIwRDInLCdudmRhc2gnOidcXHUyMkFDJywnbnZEYXNoJzonXFx1MjJBRCcsJ25WZGFzaCc6J1xcdTIyQUUnLCduVkRhc2gnOidcXHUyMkFGJywnbnZnZSc6J1xcdTIyNjVcXHUyMEQyJywnbnZndCc6Jz5cXHUyMEQyJywnbnZIYXJyJzonXFx1MjkwNCcsJ252aW5maW4nOidcXHUyOURFJywnbnZsQXJyJzonXFx1MjkwMicsJ252bGUnOidcXHUyMjY0XFx1MjBEMicsJ252bHQnOic8XFx1MjBEMicsJ252bHRyaWUnOidcXHUyMkI0XFx1MjBEMicsJ252ckFycic6J1xcdTI5MDMnLCdudnJ0cmllJzonXFx1MjJCNVxcdTIwRDInLCdudnNpbSc6J1xcdTIyM0NcXHUyMEQyJywnbndhcmhrJzonXFx1MjkyMycsJ253YXJyJzonXFx1MjE5NicsJ253QXJyJzonXFx1MjFENicsJ253YXJyb3cnOidcXHUyMTk2JywnbnduZWFyJzonXFx1MjkyNycsJ29hY3V0ZSc6J1xceEYzJywnT2FjdXRlJzonXFx4RDMnLCdvYXN0JzonXFx1MjI5QicsJ29jaXInOidcXHUyMjlBJywnb2NpcmMnOidcXHhGNCcsJ09jaXJjJzonXFx4RDQnLCdvY3knOidcXHUwNDNFJywnT2N5JzonXFx1MDQxRScsJ29kYXNoJzonXFx1MjI5RCcsJ29kYmxhYyc6J1xcdTAxNTEnLCdPZGJsYWMnOidcXHUwMTUwJywnb2Rpdic6J1xcdTJBMzgnLCdvZG90JzonXFx1MjI5OScsJ29kc29sZCc6J1xcdTI5QkMnLCdvZWxpZyc6J1xcdTAxNTMnLCdPRWxpZyc6J1xcdTAxNTInLCdvZmNpcic6J1xcdTI5QkYnLCdvZnInOidcXHVEODM1XFx1REQyQycsJ09mcic6J1xcdUQ4MzVcXHVERDEyJywnb2dvbic6J1xcdTAyREInLCdvZ3JhdmUnOidcXHhGMicsJ09ncmF2ZSc6J1xceEQyJywnb2d0JzonXFx1MjlDMScsJ29oYmFyJzonXFx1MjlCNScsJ29obSc6J1xcdTAzQTknLCdvaW50JzonXFx1MjIyRScsJ29sYXJyJzonXFx1MjFCQScsJ29sY2lyJzonXFx1MjlCRScsJ29sY3Jvc3MnOidcXHUyOUJCJywnb2xpbmUnOidcXHUyMDNFJywnb2x0JzonXFx1MjlDMCcsJ29tYWNyJzonXFx1MDE0RCcsJ09tYWNyJzonXFx1MDE0QycsJ29tZWdhJzonXFx1MDNDOScsJ09tZWdhJzonXFx1MDNBOScsJ29taWNyb24nOidcXHUwM0JGJywnT21pY3Jvbic6J1xcdTAzOUYnLCdvbWlkJzonXFx1MjlCNicsJ29taW51cyc6J1xcdTIyOTYnLCdvb3BmJzonXFx1RDgzNVxcdURENjAnLCdPb3BmJzonXFx1RDgzNVxcdURENDYnLCdvcGFyJzonXFx1MjlCNycsJ09wZW5DdXJseURvdWJsZVF1b3RlJzonXFx1MjAxQycsJ09wZW5DdXJseVF1b3RlJzonXFx1MjAxOCcsJ29wZXJwJzonXFx1MjlCOScsJ29wbHVzJzonXFx1MjI5NScsJ29yJzonXFx1MjIyOCcsJ09yJzonXFx1MkE1NCcsJ29yYXJyJzonXFx1MjFCQicsJ29yZCc6J1xcdTJBNUQnLCdvcmRlcic6J1xcdTIxMzQnLCdvcmRlcm9mJzonXFx1MjEzNCcsJ29yZGYnOidcXHhBQScsJ29yZG0nOidcXHhCQScsJ29yaWdvZic6J1xcdTIyQjYnLCdvcm9yJzonXFx1MkE1NicsJ29yc2xvcGUnOidcXHUyQTU3Jywnb3J2JzonXFx1MkE1QicsJ29TJzonXFx1MjRDOCcsJ29zY3InOidcXHUyMTM0JywnT3Njcic6J1xcdUQ4MzVcXHVEQ0FBJywnb3NsYXNoJzonXFx4RjgnLCdPc2xhc2gnOidcXHhEOCcsJ29zb2wnOidcXHUyMjk4Jywnb3RpbGRlJzonXFx4RjUnLCdPdGlsZGUnOidcXHhENScsJ290aW1lcyc6J1xcdTIyOTcnLCdPdGltZXMnOidcXHUyQTM3Jywnb3RpbWVzYXMnOidcXHUyQTM2Jywnb3VtbCc6J1xceEY2JywnT3VtbCc6J1xceEQ2Jywnb3ZiYXInOidcXHUyMzNEJywnT3ZlckJhcic6J1xcdTIwM0UnLCdPdmVyQnJhY2UnOidcXHUyM0RFJywnT3ZlckJyYWNrZXQnOidcXHUyM0I0JywnT3ZlclBhcmVudGhlc2lzJzonXFx1MjNEQycsJ3Bhcic6J1xcdTIyMjUnLCdwYXJhJzonXFx4QjYnLCdwYXJhbGxlbCc6J1xcdTIyMjUnLCdwYXJzaW0nOidcXHUyQUYzJywncGFyc2wnOidcXHUyQUZEJywncGFydCc6J1xcdTIyMDInLCdQYXJ0aWFsRCc6J1xcdTIyMDInLCdwY3knOidcXHUwNDNGJywnUGN5JzonXFx1MDQxRicsJ3BlcmNudCc6JyUnLCdwZXJpb2QnOicuJywncGVybWlsJzonXFx1MjAzMCcsJ3BlcnAnOidcXHUyMkE1JywncGVydGVuayc6J1xcdTIwMzEnLCdwZnInOidcXHVEODM1XFx1REQyRCcsJ1Bmcic6J1xcdUQ4MzVcXHVERDEzJywncGhpJzonXFx1MDNDNicsJ1BoaSc6J1xcdTAzQTYnLCdwaGl2JzonXFx1MDNENScsJ3BobW1hdCc6J1xcdTIxMzMnLCdwaG9uZSc6J1xcdTI2MEUnLCdwaSc6J1xcdTAzQzAnLCdQaSc6J1xcdTAzQTAnLCdwaXRjaGZvcmsnOidcXHUyMkQ0JywncGl2JzonXFx1MDNENicsJ3BsYW5jayc6J1xcdTIxMEYnLCdwbGFuY2toJzonXFx1MjEwRScsJ3BsYW5rdic6J1xcdTIxMEYnLCdwbHVzJzonKycsJ3BsdXNhY2lyJzonXFx1MkEyMycsJ3BsdXNiJzonXFx1MjI5RScsJ3BsdXNjaXInOidcXHUyQTIyJywncGx1c2RvJzonXFx1MjIxNCcsJ3BsdXNkdSc6J1xcdTJBMjUnLCdwbHVzZSc6J1xcdTJBNzInLCdQbHVzTWludXMnOidcXHhCMScsJ3BsdXNtbic6J1xceEIxJywncGx1c3NpbSc6J1xcdTJBMjYnLCdwbHVzdHdvJzonXFx1MkEyNycsJ3BtJzonXFx4QjEnLCdQb2luY2FyZXBsYW5lJzonXFx1MjEwQycsJ3BvaW50aW50JzonXFx1MkExNScsJ3BvcGYnOidcXHVEODM1XFx1REQ2MScsJ1BvcGYnOidcXHUyMTE5JywncG91bmQnOidcXHhBMycsJ3ByJzonXFx1MjI3QScsJ1ByJzonXFx1MkFCQicsJ3ByYXAnOidcXHUyQUI3JywncHJjdWUnOidcXHUyMjdDJywncHJlJzonXFx1MkFBRicsJ3ByRSc6J1xcdTJBQjMnLCdwcmVjJzonXFx1MjI3QScsJ3ByZWNhcHByb3gnOidcXHUyQUI3JywncHJlY2N1cmx5ZXEnOidcXHUyMjdDJywnUHJlY2VkZXMnOidcXHUyMjdBJywnUHJlY2VkZXNFcXVhbCc6J1xcdTJBQUYnLCdQcmVjZWRlc1NsYW50RXF1YWwnOidcXHUyMjdDJywnUHJlY2VkZXNUaWxkZSc6J1xcdTIyN0UnLCdwcmVjZXEnOidcXHUyQUFGJywncHJlY25hcHByb3gnOidcXHUyQUI5JywncHJlY25lcXEnOidcXHUyQUI1JywncHJlY25zaW0nOidcXHUyMkU4JywncHJlY3NpbSc6J1xcdTIyN0UnLCdwcmltZSc6J1xcdTIwMzInLCdQcmltZSc6J1xcdTIwMzMnLCdwcmltZXMnOidcXHUyMTE5JywncHJuYXAnOidcXHUyQUI5JywncHJuRSc6J1xcdTJBQjUnLCdwcm5zaW0nOidcXHUyMkU4JywncHJvZCc6J1xcdTIyMEYnLCdQcm9kdWN0JzonXFx1MjIwRicsJ3Byb2ZhbGFyJzonXFx1MjMyRScsJ3Byb2ZsaW5lJzonXFx1MjMxMicsJ3Byb2ZzdXJmJzonXFx1MjMxMycsJ3Byb3AnOidcXHUyMjFEJywnUHJvcG9ydGlvbic6J1xcdTIyMzcnLCdQcm9wb3J0aW9uYWwnOidcXHUyMjFEJywncHJvcHRvJzonXFx1MjIxRCcsJ3Byc2ltJzonXFx1MjI3RScsJ3BydXJlbCc6J1xcdTIyQjAnLCdwc2NyJzonXFx1RDgzNVxcdURDQzUnLCdQc2NyJzonXFx1RDgzNVxcdURDQUInLCdwc2knOidcXHUwM0M4JywnUHNpJzonXFx1MDNBOCcsJ3B1bmNzcCc6J1xcdTIwMDgnLCdxZnInOidcXHVEODM1XFx1REQyRScsJ1Fmcic6J1xcdUQ4MzVcXHVERDE0JywncWludCc6J1xcdTJBMEMnLCdxb3BmJzonXFx1RDgzNVxcdURENjInLCdRb3BmJzonXFx1MjExQScsJ3FwcmltZSc6J1xcdTIwNTcnLCdxc2NyJzonXFx1RDgzNVxcdURDQzYnLCdRc2NyJzonXFx1RDgzNVxcdURDQUMnLCdxdWF0ZXJuaW9ucyc6J1xcdTIxMEQnLCdxdWF0aW50JzonXFx1MkExNicsJ3F1ZXN0JzonPycsJ3F1ZXN0ZXEnOidcXHUyMjVGJywncXVvdCc6J1wiJywnUVVPVCc6J1wiJywnckFhcnInOidcXHUyMURCJywncmFjZSc6J1xcdTIyM0RcXHUwMzMxJywncmFjdXRlJzonXFx1MDE1NScsJ1JhY3V0ZSc6J1xcdTAxNTQnLCdyYWRpYyc6J1xcdTIyMUEnLCdyYWVtcHR5dic6J1xcdTI5QjMnLCdyYW5nJzonXFx1MjdFOScsJ1JhbmcnOidcXHUyN0VCJywncmFuZ2QnOidcXHUyOTkyJywncmFuZ2UnOidcXHUyOUE1JywncmFuZ2xlJzonXFx1MjdFOScsJ3JhcXVvJzonXFx4QkInLCdyYXJyJzonXFx1MjE5MicsJ3JBcnInOidcXHUyMUQyJywnUmFycic6J1xcdTIxQTAnLCdyYXJyYXAnOidcXHUyOTc1JywncmFycmInOidcXHUyMUU1JywncmFycmJmcyc6J1xcdTI5MjAnLCdyYXJyYyc6J1xcdTI5MzMnLCdyYXJyZnMnOidcXHUyOTFFJywncmFycmhrJzonXFx1MjFBQScsJ3JhcnJscCc6J1xcdTIxQUMnLCdyYXJycGwnOidcXHUyOTQ1JywncmFycnNpbSc6J1xcdTI5NzQnLCdyYXJydGwnOidcXHUyMUEzJywnUmFycnRsJzonXFx1MjkxNicsJ3JhcnJ3JzonXFx1MjE5RCcsJ3JhdGFpbCc6J1xcdTI5MUEnLCdyQXRhaWwnOidcXHUyOTFDJywncmF0aW8nOidcXHUyMjM2JywncmF0aW9uYWxzJzonXFx1MjExQScsJ3JiYXJyJzonXFx1MjkwRCcsJ3JCYXJyJzonXFx1MjkwRicsJ1JCYXJyJzonXFx1MjkxMCcsJ3JiYnJrJzonXFx1Mjc3MycsJ3JicmFjZSc6J30nLCdyYnJhY2snOiddJywncmJya2UnOidcXHUyOThDJywncmJya3NsZCc6J1xcdTI5OEUnLCdyYnJrc2x1JzonXFx1Mjk5MCcsJ3JjYXJvbic6J1xcdTAxNTknLCdSY2Fyb24nOidcXHUwMTU4JywncmNlZGlsJzonXFx1MDE1NycsJ1JjZWRpbCc6J1xcdTAxNTYnLCdyY2VpbCc6J1xcdTIzMDknLCdyY3ViJzonfScsJ3JjeSc6J1xcdTA0NDAnLCdSY3knOidcXHUwNDIwJywncmRjYSc6J1xcdTI5MzcnLCdyZGxkaGFyJzonXFx1Mjk2OScsJ3JkcXVvJzonXFx1MjAxRCcsJ3JkcXVvcic6J1xcdTIwMUQnLCdyZHNoJzonXFx1MjFCMycsJ1JlJzonXFx1MjExQycsJ3JlYWwnOidcXHUyMTFDJywncmVhbGluZSc6J1xcdTIxMUInLCdyZWFscGFydCc6J1xcdTIxMUMnLCdyZWFscyc6J1xcdTIxMUQnLCdyZWN0JzonXFx1MjVBRCcsJ3JlZyc6J1xceEFFJywnUkVHJzonXFx4QUUnLCdSZXZlcnNlRWxlbWVudCc6J1xcdTIyMEInLCdSZXZlcnNlRXF1aWxpYnJpdW0nOidcXHUyMUNCJywnUmV2ZXJzZVVwRXF1aWxpYnJpdW0nOidcXHUyOTZGJywncmZpc2h0JzonXFx1Mjk3RCcsJ3JmbG9vcic6J1xcdTIzMEInLCdyZnInOidcXHVEODM1XFx1REQyRicsJ1Jmcic6J1xcdTIxMUMnLCdySGFyJzonXFx1Mjk2NCcsJ3JoYXJkJzonXFx1MjFDMScsJ3JoYXJ1JzonXFx1MjFDMCcsJ3JoYXJ1bCc6J1xcdTI5NkMnLCdyaG8nOidcXHUwM0MxJywnUmhvJzonXFx1MDNBMScsJ3Job3YnOidcXHUwM0YxJywnUmlnaHRBbmdsZUJyYWNrZXQnOidcXHUyN0U5JywncmlnaHRhcnJvdyc6J1xcdTIxOTInLCdSaWdodGFycm93JzonXFx1MjFEMicsJ1JpZ2h0QXJyb3cnOidcXHUyMTkyJywnUmlnaHRBcnJvd0Jhcic6J1xcdTIxRTUnLCdSaWdodEFycm93TGVmdEFycm93JzonXFx1MjFDNCcsJ3JpZ2h0YXJyb3d0YWlsJzonXFx1MjFBMycsJ1JpZ2h0Q2VpbGluZyc6J1xcdTIzMDknLCdSaWdodERvdWJsZUJyYWNrZXQnOidcXHUyN0U3JywnUmlnaHREb3duVGVlVmVjdG9yJzonXFx1Mjk1RCcsJ1JpZ2h0RG93blZlY3Rvcic6J1xcdTIxQzInLCdSaWdodERvd25WZWN0b3JCYXInOidcXHUyOTU1JywnUmlnaHRGbG9vcic6J1xcdTIzMEInLCdyaWdodGhhcnBvb25kb3duJzonXFx1MjFDMScsJ3JpZ2h0aGFycG9vbnVwJzonXFx1MjFDMCcsJ3JpZ2h0bGVmdGFycm93cyc6J1xcdTIxQzQnLCdyaWdodGxlZnRoYXJwb29ucyc6J1xcdTIxQ0MnLCdyaWdodHJpZ2h0YXJyb3dzJzonXFx1MjFDOScsJ3JpZ2h0c3F1aWdhcnJvdyc6J1xcdTIxOUQnLCdSaWdodFRlZSc6J1xcdTIyQTInLCdSaWdodFRlZUFycm93JzonXFx1MjFBNicsJ1JpZ2h0VGVlVmVjdG9yJzonXFx1Mjk1QicsJ3JpZ2h0dGhyZWV0aW1lcyc6J1xcdTIyQ0MnLCdSaWdodFRyaWFuZ2xlJzonXFx1MjJCMycsJ1JpZ2h0VHJpYW5nbGVCYXInOidcXHUyOUQwJywnUmlnaHRUcmlhbmdsZUVxdWFsJzonXFx1MjJCNScsJ1JpZ2h0VXBEb3duVmVjdG9yJzonXFx1Mjk0RicsJ1JpZ2h0VXBUZWVWZWN0b3InOidcXHUyOTVDJywnUmlnaHRVcFZlY3Rvcic6J1xcdTIxQkUnLCdSaWdodFVwVmVjdG9yQmFyJzonXFx1Mjk1NCcsJ1JpZ2h0VmVjdG9yJzonXFx1MjFDMCcsJ1JpZ2h0VmVjdG9yQmFyJzonXFx1Mjk1MycsJ3JpbmcnOidcXHUwMkRBJywncmlzaW5nZG90c2VxJzonXFx1MjI1MycsJ3JsYXJyJzonXFx1MjFDNCcsJ3JsaGFyJzonXFx1MjFDQycsJ3JsbSc6J1xcdTIwMEYnLCdybW91c3QnOidcXHUyM0IxJywncm1vdXN0YWNoZSc6J1xcdTIzQjEnLCdybm1pZCc6J1xcdTJBRUUnLCdyb2FuZyc6J1xcdTI3RUQnLCdyb2Fycic6J1xcdTIxRkUnLCdyb2Jyayc6J1xcdTI3RTcnLCdyb3Bhcic6J1xcdTI5ODYnLCdyb3BmJzonXFx1RDgzNVxcdURENjMnLCdSb3BmJzonXFx1MjExRCcsJ3JvcGx1cyc6J1xcdTJBMkUnLCdyb3RpbWVzJzonXFx1MkEzNScsJ1JvdW5kSW1wbGllcyc6J1xcdTI5NzAnLCdycGFyJzonKScsJ3JwYXJndCc6J1xcdTI5OTQnLCdycHBvbGludCc6J1xcdTJBMTInLCdycmFycic6J1xcdTIxQzknLCdScmlnaHRhcnJvdyc6J1xcdTIxREInLCdyc2FxdW8nOidcXHUyMDNBJywncnNjcic6J1xcdUQ4MzVcXHVEQ0M3JywnUnNjcic6J1xcdTIxMUInLCdyc2gnOidcXHUyMUIxJywnUnNoJzonXFx1MjFCMScsJ3JzcWInOiddJywncnNxdW8nOidcXHUyMDE5JywncnNxdW9yJzonXFx1MjAxOScsJ3J0aHJlZSc6J1xcdTIyQ0MnLCdydGltZXMnOidcXHUyMkNBJywncnRyaSc6J1xcdTI1QjknLCdydHJpZSc6J1xcdTIyQjUnLCdydHJpZic6J1xcdTI1QjgnLCdydHJpbHRyaSc6J1xcdTI5Q0UnLCdSdWxlRGVsYXllZCc6J1xcdTI5RjQnLCdydWx1aGFyJzonXFx1Mjk2OCcsJ3J4JzonXFx1MjExRScsJ3NhY3V0ZSc6J1xcdTAxNUInLCdTYWN1dGUnOidcXHUwMTVBJywnc2JxdW8nOidcXHUyMDFBJywnc2MnOidcXHUyMjdCJywnU2MnOidcXHUyQUJDJywnc2NhcCc6J1xcdTJBQjgnLCdzY2Fyb24nOidcXHUwMTYxJywnU2Nhcm9uJzonXFx1MDE2MCcsJ3NjY3VlJzonXFx1MjI3RCcsJ3NjZSc6J1xcdTJBQjAnLCdzY0UnOidcXHUyQUI0Jywnc2NlZGlsJzonXFx1MDE1RicsJ1NjZWRpbCc6J1xcdTAxNUUnLCdzY2lyYyc6J1xcdTAxNUQnLCdTY2lyYyc6J1xcdTAxNUMnLCdzY25hcCc6J1xcdTJBQkEnLCdzY25FJzonXFx1MkFCNicsJ3NjbnNpbSc6J1xcdTIyRTknLCdzY3BvbGludCc6J1xcdTJBMTMnLCdzY3NpbSc6J1xcdTIyN0YnLCdzY3knOidcXHUwNDQxJywnU2N5JzonXFx1MDQyMScsJ3Nkb3QnOidcXHUyMkM1Jywnc2RvdGInOidcXHUyMkExJywnc2RvdGUnOidcXHUyQTY2Jywnc2VhcmhrJzonXFx1MjkyNScsJ3NlYXJyJzonXFx1MjE5OCcsJ3NlQXJyJzonXFx1MjFEOCcsJ3NlYXJyb3cnOidcXHUyMTk4Jywnc2VjdCc6J1xceEE3Jywnc2VtaSc6JzsnLCdzZXN3YXInOidcXHUyOTI5Jywnc2V0bWludXMnOidcXHUyMjE2Jywnc2V0bW4nOidcXHUyMjE2Jywnc2V4dCc6J1xcdTI3MzYnLCdzZnInOidcXHVEODM1XFx1REQzMCcsJ1Nmcic6J1xcdUQ4MzVcXHVERDE2Jywnc2Zyb3duJzonXFx1MjMyMicsJ3NoYXJwJzonXFx1MjY2RicsJ3NoY2hjeSc6J1xcdTA0NDknLCdTSENIY3knOidcXHUwNDI5Jywnc2hjeSc6J1xcdTA0NDgnLCdTSGN5JzonXFx1MDQyOCcsJ1Nob3J0RG93bkFycm93JzonXFx1MjE5MycsJ1Nob3J0TGVmdEFycm93JzonXFx1MjE5MCcsJ3Nob3J0bWlkJzonXFx1MjIyMycsJ3Nob3J0cGFyYWxsZWwnOidcXHUyMjI1JywnU2hvcnRSaWdodEFycm93JzonXFx1MjE5MicsJ1Nob3J0VXBBcnJvdyc6J1xcdTIxOTEnLCdzaHknOidcXHhBRCcsJ3NpZ21hJzonXFx1MDNDMycsJ1NpZ21hJzonXFx1MDNBMycsJ3NpZ21hZic6J1xcdTAzQzInLCdzaWdtYXYnOidcXHUwM0MyJywnc2ltJzonXFx1MjIzQycsJ3NpbWRvdCc6J1xcdTJBNkEnLCdzaW1lJzonXFx1MjI0MycsJ3NpbWVxJzonXFx1MjI0MycsJ3NpbWcnOidcXHUyQTlFJywnc2ltZ0UnOidcXHUyQUEwJywnc2ltbCc6J1xcdTJBOUQnLCdzaW1sRSc6J1xcdTJBOUYnLCdzaW1uZSc6J1xcdTIyNDYnLCdzaW1wbHVzJzonXFx1MkEyNCcsJ3NpbXJhcnInOidcXHUyOTcyJywnc2xhcnInOidcXHUyMTkwJywnU21hbGxDaXJjbGUnOidcXHUyMjE4Jywnc21hbGxzZXRtaW51cyc6J1xcdTIyMTYnLCdzbWFzaHAnOidcXHUyQTMzJywnc21lcGFyc2wnOidcXHUyOUU0Jywnc21pZCc6J1xcdTIyMjMnLCdzbWlsZSc6J1xcdTIzMjMnLCdzbXQnOidcXHUyQUFBJywnc210ZSc6J1xcdTJBQUMnLCdzbXRlcyc6J1xcdTJBQUNcXHVGRTAwJywnc29mdGN5JzonXFx1MDQ0QycsJ1NPRlRjeSc6J1xcdTA0MkMnLCdzb2wnOicvJywnc29sYic6J1xcdTI5QzQnLCdzb2xiYXInOidcXHUyMzNGJywnc29wZic6J1xcdUQ4MzVcXHVERDY0JywnU29wZic6J1xcdUQ4MzVcXHVERDRBJywnc3BhZGVzJzonXFx1MjY2MCcsJ3NwYWRlc3VpdCc6J1xcdTI2NjAnLCdzcGFyJzonXFx1MjIyNScsJ3NxY2FwJzonXFx1MjI5MycsJ3NxY2Fwcyc6J1xcdTIyOTNcXHVGRTAwJywnc3FjdXAnOidcXHUyMjk0Jywnc3FjdXBzJzonXFx1MjI5NFxcdUZFMDAnLCdTcXJ0JzonXFx1MjIxQScsJ3Nxc3ViJzonXFx1MjI4RicsJ3Nxc3ViZSc6J1xcdTIyOTEnLCdzcXN1YnNldCc6J1xcdTIyOEYnLCdzcXN1YnNldGVxJzonXFx1MjI5MScsJ3Nxc3VwJzonXFx1MjI5MCcsJ3Nxc3VwZSc6J1xcdTIyOTInLCdzcXN1cHNldCc6J1xcdTIyOTAnLCdzcXN1cHNldGVxJzonXFx1MjI5MicsJ3NxdSc6J1xcdTI1QTEnLCdzcXVhcmUnOidcXHUyNUExJywnU3F1YXJlJzonXFx1MjVBMScsJ1NxdWFyZUludGVyc2VjdGlvbic6J1xcdTIyOTMnLCdTcXVhcmVTdWJzZXQnOidcXHUyMjhGJywnU3F1YXJlU3Vic2V0RXF1YWwnOidcXHUyMjkxJywnU3F1YXJlU3VwZXJzZXQnOidcXHUyMjkwJywnU3F1YXJlU3VwZXJzZXRFcXVhbCc6J1xcdTIyOTInLCdTcXVhcmVVbmlvbic6J1xcdTIyOTQnLCdzcXVhcmYnOidcXHUyNUFBJywnc3F1Zic6J1xcdTI1QUEnLCdzcmFycic6J1xcdTIxOTInLCdzc2NyJzonXFx1RDgzNVxcdURDQzgnLCdTc2NyJzonXFx1RDgzNVxcdURDQUUnLCdzc2V0bW4nOidcXHUyMjE2Jywnc3NtaWxlJzonXFx1MjMyMycsJ3NzdGFyZic6J1xcdTIyQzYnLCdzdGFyJzonXFx1MjYwNicsJ1N0YXInOidcXHUyMkM2Jywnc3RhcmYnOidcXHUyNjA1Jywnc3RyYWlnaHRlcHNpbG9uJzonXFx1MDNGNScsJ3N0cmFpZ2h0cGhpJzonXFx1MDNENScsJ3N0cm5zJzonXFx4QUYnLCdzdWInOidcXHUyMjgyJywnU3ViJzonXFx1MjJEMCcsJ3N1YmRvdCc6J1xcdTJBQkQnLCdzdWJlJzonXFx1MjI4NicsJ3N1YkUnOidcXHUyQUM1Jywnc3ViZWRvdCc6J1xcdTJBQzMnLCdzdWJtdWx0JzonXFx1MkFDMScsJ3N1Ym5lJzonXFx1MjI4QScsJ3N1Ym5FJzonXFx1MkFDQicsJ3N1YnBsdXMnOidcXHUyQUJGJywnc3VicmFycic6J1xcdTI5NzknLCdzdWJzZXQnOidcXHUyMjgyJywnU3Vic2V0JzonXFx1MjJEMCcsJ3N1YnNldGVxJzonXFx1MjI4NicsJ3N1YnNldGVxcSc6J1xcdTJBQzUnLCdTdWJzZXRFcXVhbCc6J1xcdTIyODYnLCdzdWJzZXRuZXEnOidcXHUyMjhBJywnc3Vic2V0bmVxcSc6J1xcdTJBQ0InLCdzdWJzaW0nOidcXHUyQUM3Jywnc3Vic3ViJzonXFx1MkFENScsJ3N1YnN1cCc6J1xcdTJBRDMnLCdzdWNjJzonXFx1MjI3QicsJ3N1Y2NhcHByb3gnOidcXHUyQUI4Jywnc3VjY2N1cmx5ZXEnOidcXHUyMjdEJywnU3VjY2VlZHMnOidcXHUyMjdCJywnU3VjY2VlZHNFcXVhbCc6J1xcdTJBQjAnLCdTdWNjZWVkc1NsYW50RXF1YWwnOidcXHUyMjdEJywnU3VjY2VlZHNUaWxkZSc6J1xcdTIyN0YnLCdzdWNjZXEnOidcXHUyQUIwJywnc3VjY25hcHByb3gnOidcXHUyQUJBJywnc3VjY25lcXEnOidcXHUyQUI2Jywnc3VjY25zaW0nOidcXHUyMkU5Jywnc3VjY3NpbSc6J1xcdTIyN0YnLCdTdWNoVGhhdCc6J1xcdTIyMEInLCdzdW0nOidcXHUyMjExJywnU3VtJzonXFx1MjIxMScsJ3N1bmcnOidcXHUyNjZBJywnc3VwJzonXFx1MjI4MycsJ1N1cCc6J1xcdTIyRDEnLCdzdXAxJzonXFx4QjknLCdzdXAyJzonXFx4QjInLCdzdXAzJzonXFx4QjMnLCdzdXBkb3QnOidcXHUyQUJFJywnc3VwZHN1Yic6J1xcdTJBRDgnLCdzdXBlJzonXFx1MjI4NycsJ3N1cEUnOidcXHUyQUM2Jywnc3VwZWRvdCc6J1xcdTJBQzQnLCdTdXBlcnNldCc6J1xcdTIyODMnLCdTdXBlcnNldEVxdWFsJzonXFx1MjI4NycsJ3N1cGhzb2wnOidcXHUyN0M5Jywnc3VwaHN1Yic6J1xcdTJBRDcnLCdzdXBsYXJyJzonXFx1Mjk3QicsJ3N1cG11bHQnOidcXHUyQUMyJywnc3VwbmUnOidcXHUyMjhCJywnc3VwbkUnOidcXHUyQUNDJywnc3VwcGx1cyc6J1xcdTJBQzAnLCdzdXBzZXQnOidcXHUyMjgzJywnU3Vwc2V0JzonXFx1MjJEMScsJ3N1cHNldGVxJzonXFx1MjI4NycsJ3N1cHNldGVxcSc6J1xcdTJBQzYnLCdzdXBzZXRuZXEnOidcXHUyMjhCJywnc3Vwc2V0bmVxcSc6J1xcdTJBQ0MnLCdzdXBzaW0nOidcXHUyQUM4Jywnc3Vwc3ViJzonXFx1MkFENCcsJ3N1cHN1cCc6J1xcdTJBRDYnLCdzd2FyaGsnOidcXHUyOTI2Jywnc3dhcnInOidcXHUyMTk5Jywnc3dBcnInOidcXHUyMUQ5Jywnc3dhcnJvdyc6J1xcdTIxOTknLCdzd253YXInOidcXHUyOTJBJywnc3psaWcnOidcXHhERicsJ1RhYic6J1xcdCcsJ3RhcmdldCc6J1xcdTIzMTYnLCd0YXUnOidcXHUwM0M0JywnVGF1JzonXFx1MDNBNCcsJ3RicmsnOidcXHUyM0I0JywndGNhcm9uJzonXFx1MDE2NScsJ1RjYXJvbic6J1xcdTAxNjQnLCd0Y2VkaWwnOidcXHUwMTYzJywnVGNlZGlsJzonXFx1MDE2MicsJ3RjeSc6J1xcdTA0NDInLCdUY3knOidcXHUwNDIyJywndGRvdCc6J1xcdTIwREInLCd0ZWxyZWMnOidcXHUyMzE1JywndGZyJzonXFx1RDgzNVxcdUREMzEnLCdUZnInOidcXHVEODM1XFx1REQxNycsJ3RoZXJlNCc6J1xcdTIyMzQnLCd0aGVyZWZvcmUnOidcXHUyMjM0JywnVGhlcmVmb3JlJzonXFx1MjIzNCcsJ3RoZXRhJzonXFx1MDNCOCcsJ1RoZXRhJzonXFx1MDM5OCcsJ3RoZXRhc3ltJzonXFx1MDNEMScsJ3RoZXRhdic6J1xcdTAzRDEnLCd0aGlja2FwcHJveCc6J1xcdTIyNDgnLCd0aGlja3NpbSc6J1xcdTIyM0MnLCdUaGlja1NwYWNlJzonXFx1MjA1RlxcdTIwMEEnLCd0aGluc3AnOidcXHUyMDA5JywnVGhpblNwYWNlJzonXFx1MjAwOScsJ3Roa2FwJzonXFx1MjI0OCcsJ3Roa3NpbSc6J1xcdTIyM0MnLCd0aG9ybic6J1xceEZFJywnVEhPUk4nOidcXHhERScsJ3RpbGRlJzonXFx1MDJEQycsJ1RpbGRlJzonXFx1MjIzQycsJ1RpbGRlRXF1YWwnOidcXHUyMjQzJywnVGlsZGVGdWxsRXF1YWwnOidcXHUyMjQ1JywnVGlsZGVUaWxkZSc6J1xcdTIyNDgnLCd0aW1lcyc6J1xceEQ3JywndGltZXNiJzonXFx1MjJBMCcsJ3RpbWVzYmFyJzonXFx1MkEzMScsJ3RpbWVzZCc6J1xcdTJBMzAnLCd0aW50JzonXFx1MjIyRCcsJ3RvZWEnOidcXHUyOTI4JywndG9wJzonXFx1MjJBNCcsJ3RvcGJvdCc6J1xcdTIzMzYnLCd0b3BjaXInOidcXHUyQUYxJywndG9wZic6J1xcdUQ4MzVcXHVERDY1JywnVG9wZic6J1xcdUQ4MzVcXHVERDRCJywndG9wZm9yayc6J1xcdTJBREEnLCd0b3NhJzonXFx1MjkyOScsJ3RwcmltZSc6J1xcdTIwMzQnLCd0cmFkZSc6J1xcdTIxMjInLCdUUkFERSc6J1xcdTIxMjInLCd0cmlhbmdsZSc6J1xcdTI1QjUnLCd0cmlhbmdsZWRvd24nOidcXHUyNUJGJywndHJpYW5nbGVsZWZ0JzonXFx1MjVDMycsJ3RyaWFuZ2xlbGVmdGVxJzonXFx1MjJCNCcsJ3RyaWFuZ2xlcSc6J1xcdTIyNUMnLCd0cmlhbmdsZXJpZ2h0JzonXFx1MjVCOScsJ3RyaWFuZ2xlcmlnaHRlcSc6J1xcdTIyQjUnLCd0cmlkb3QnOidcXHUyNUVDJywndHJpZSc6J1xcdTIyNUMnLCd0cmltaW51cyc6J1xcdTJBM0EnLCdUcmlwbGVEb3QnOidcXHUyMERCJywndHJpcGx1cyc6J1xcdTJBMzknLCd0cmlzYic6J1xcdTI5Q0QnLCd0cml0aW1lJzonXFx1MkEzQicsJ3RycGV6aXVtJzonXFx1MjNFMicsJ3RzY3InOidcXHVEODM1XFx1RENDOScsJ1RzY3InOidcXHVEODM1XFx1RENBRicsJ3RzY3knOidcXHUwNDQ2JywnVFNjeSc6J1xcdTA0MjYnLCd0c2hjeSc6J1xcdTA0NUInLCdUU0hjeSc6J1xcdTA0MEInLCd0c3Ryb2snOidcXHUwMTY3JywnVHN0cm9rJzonXFx1MDE2NicsJ3R3aXh0JzonXFx1MjI2QycsJ3R3b2hlYWRsZWZ0YXJyb3cnOidcXHUyMTlFJywndHdvaGVhZHJpZ2h0YXJyb3cnOidcXHUyMUEwJywndWFjdXRlJzonXFx4RkEnLCdVYWN1dGUnOidcXHhEQScsJ3VhcnInOidcXHUyMTkxJywndUFycic6J1xcdTIxRDEnLCdVYXJyJzonXFx1MjE5RicsJ1VhcnJvY2lyJzonXFx1Mjk0OScsJ3VicmN5JzonXFx1MDQ1RScsJ1VicmN5JzonXFx1MDQwRScsJ3VicmV2ZSc6J1xcdTAxNkQnLCdVYnJldmUnOidcXHUwMTZDJywndWNpcmMnOidcXHhGQicsJ1VjaXJjJzonXFx4REInLCd1Y3knOidcXHUwNDQzJywnVWN5JzonXFx1MDQyMycsJ3VkYXJyJzonXFx1MjFDNScsJ3VkYmxhYyc6J1xcdTAxNzEnLCdVZGJsYWMnOidcXHUwMTcwJywndWRoYXInOidcXHUyOTZFJywndWZpc2h0JzonXFx1Mjk3RScsJ3Vmcic6J1xcdUQ4MzVcXHVERDMyJywnVWZyJzonXFx1RDgzNVxcdUREMTgnLCd1Z3JhdmUnOidcXHhGOScsJ1VncmF2ZSc6J1xceEQ5JywndUhhcic6J1xcdTI5NjMnLCd1aGFybCc6J1xcdTIxQkYnLCd1aGFycic6J1xcdTIxQkUnLCd1aGJsayc6J1xcdTI1ODAnLCd1bGNvcm4nOidcXHUyMzFDJywndWxjb3JuZXInOidcXHUyMzFDJywndWxjcm9wJzonXFx1MjMwRicsJ3VsdHJpJzonXFx1MjVGOCcsJ3VtYWNyJzonXFx1MDE2QicsJ1VtYWNyJzonXFx1MDE2QScsJ3VtbCc6J1xceEE4JywnVW5kZXJCYXInOidfJywnVW5kZXJCcmFjZSc6J1xcdTIzREYnLCdVbmRlckJyYWNrZXQnOidcXHUyM0I1JywnVW5kZXJQYXJlbnRoZXNpcyc6J1xcdTIzREQnLCdVbmlvbic6J1xcdTIyQzMnLCdVbmlvblBsdXMnOidcXHUyMjhFJywndW9nb24nOidcXHUwMTczJywnVW9nb24nOidcXHUwMTcyJywndW9wZic6J1xcdUQ4MzVcXHVERDY2JywnVW9wZic6J1xcdUQ4MzVcXHVERDRDJywndXBhcnJvdyc6J1xcdTIxOTEnLCdVcGFycm93JzonXFx1MjFEMScsJ1VwQXJyb3cnOidcXHUyMTkxJywnVXBBcnJvd0Jhcic6J1xcdTI5MTInLCdVcEFycm93RG93bkFycm93JzonXFx1MjFDNScsJ3VwZG93bmFycm93JzonXFx1MjE5NScsJ1VwZG93bmFycm93JzonXFx1MjFENScsJ1VwRG93bkFycm93JzonXFx1MjE5NScsJ1VwRXF1aWxpYnJpdW0nOidcXHUyOTZFJywndXBoYXJwb29ubGVmdCc6J1xcdTIxQkYnLCd1cGhhcnBvb25yaWdodCc6J1xcdTIxQkUnLCd1cGx1cyc6J1xcdTIyOEUnLCdVcHBlckxlZnRBcnJvdyc6J1xcdTIxOTYnLCdVcHBlclJpZ2h0QXJyb3cnOidcXHUyMTk3JywndXBzaSc6J1xcdTAzQzUnLCdVcHNpJzonXFx1MDNEMicsJ3Vwc2loJzonXFx1MDNEMicsJ3Vwc2lsb24nOidcXHUwM0M1JywnVXBzaWxvbic6J1xcdTAzQTUnLCdVcFRlZSc6J1xcdTIyQTUnLCdVcFRlZUFycm93JzonXFx1MjFBNScsJ3VwdXBhcnJvd3MnOidcXHUyMUM4JywndXJjb3JuJzonXFx1MjMxRCcsJ3VyY29ybmVyJzonXFx1MjMxRCcsJ3VyY3JvcCc6J1xcdTIzMEUnLCd1cmluZyc6J1xcdTAxNkYnLCdVcmluZyc6J1xcdTAxNkUnLCd1cnRyaSc6J1xcdTI1RjknLCd1c2NyJzonXFx1RDgzNVxcdURDQ0EnLCdVc2NyJzonXFx1RDgzNVxcdURDQjAnLCd1dGRvdCc6J1xcdTIyRjAnLCd1dGlsZGUnOidcXHUwMTY5JywnVXRpbGRlJzonXFx1MDE2OCcsJ3V0cmknOidcXHUyNUI1JywndXRyaWYnOidcXHUyNUI0JywndXVhcnInOidcXHUyMUM4JywndXVtbCc6J1xceEZDJywnVXVtbCc6J1xceERDJywndXdhbmdsZSc6J1xcdTI5QTcnLCd2YW5ncnQnOidcXHUyOTlDJywndmFyZXBzaWxvbic6J1xcdTAzRjUnLCd2YXJrYXBwYSc6J1xcdTAzRjAnLCd2YXJub3RoaW5nJzonXFx1MjIwNScsJ3ZhcnBoaSc6J1xcdTAzRDUnLCd2YXJwaSc6J1xcdTAzRDYnLCd2YXJwcm9wdG8nOidcXHUyMjFEJywndmFycic6J1xcdTIxOTUnLCd2QXJyJzonXFx1MjFENScsJ3ZhcnJobyc6J1xcdTAzRjEnLCd2YXJzaWdtYSc6J1xcdTAzQzInLCd2YXJzdWJzZXRuZXEnOidcXHUyMjhBXFx1RkUwMCcsJ3ZhcnN1YnNldG5lcXEnOidcXHUyQUNCXFx1RkUwMCcsJ3ZhcnN1cHNldG5lcSc6J1xcdTIyOEJcXHVGRTAwJywndmFyc3Vwc2V0bmVxcSc6J1xcdTJBQ0NcXHVGRTAwJywndmFydGhldGEnOidcXHUwM0QxJywndmFydHJpYW5nbGVsZWZ0JzonXFx1MjJCMicsJ3ZhcnRyaWFuZ2xlcmlnaHQnOidcXHUyMkIzJywndkJhcic6J1xcdTJBRTgnLCdWYmFyJzonXFx1MkFFQicsJ3ZCYXJ2JzonXFx1MkFFOScsJ3ZjeSc6J1xcdTA0MzInLCdWY3knOidcXHUwNDEyJywndmRhc2gnOidcXHUyMkEyJywndkRhc2gnOidcXHUyMkE4JywnVmRhc2gnOidcXHUyMkE5JywnVkRhc2gnOidcXHUyMkFCJywnVmRhc2hsJzonXFx1MkFFNicsJ3ZlZSc6J1xcdTIyMjgnLCdWZWUnOidcXHUyMkMxJywndmVlYmFyJzonXFx1MjJCQicsJ3ZlZWVxJzonXFx1MjI1QScsJ3ZlbGxpcCc6J1xcdTIyRUUnLCd2ZXJiYXInOid8JywnVmVyYmFyJzonXFx1MjAxNicsJ3ZlcnQnOid8JywnVmVydCc6J1xcdTIwMTYnLCdWZXJ0aWNhbEJhcic6J1xcdTIyMjMnLCdWZXJ0aWNhbExpbmUnOid8JywnVmVydGljYWxTZXBhcmF0b3InOidcXHUyNzU4JywnVmVydGljYWxUaWxkZSc6J1xcdTIyNDAnLCdWZXJ5VGhpblNwYWNlJzonXFx1MjAwQScsJ3Zmcic6J1xcdUQ4MzVcXHVERDMzJywnVmZyJzonXFx1RDgzNVxcdUREMTknLCd2bHRyaSc6J1xcdTIyQjInLCd2bnN1Yic6J1xcdTIyODJcXHUyMEQyJywndm5zdXAnOidcXHUyMjgzXFx1MjBEMicsJ3ZvcGYnOidcXHVEODM1XFx1REQ2NycsJ1ZvcGYnOidcXHVEODM1XFx1REQ0RCcsJ3Zwcm9wJzonXFx1MjIxRCcsJ3ZydHJpJzonXFx1MjJCMycsJ3ZzY3InOidcXHVEODM1XFx1RENDQicsJ1ZzY3InOidcXHVEODM1XFx1RENCMScsJ3ZzdWJuZSc6J1xcdTIyOEFcXHVGRTAwJywndnN1Ym5FJzonXFx1MkFDQlxcdUZFMDAnLCd2c3VwbmUnOidcXHUyMjhCXFx1RkUwMCcsJ3ZzdXBuRSc6J1xcdTJBQ0NcXHVGRTAwJywnVnZkYXNoJzonXFx1MjJBQScsJ3Z6aWd6YWcnOidcXHUyOTlBJywnd2NpcmMnOidcXHUwMTc1JywnV2NpcmMnOidcXHUwMTc0Jywnd2VkYmFyJzonXFx1MkE1RicsJ3dlZGdlJzonXFx1MjIyNycsJ1dlZGdlJzonXFx1MjJDMCcsJ3dlZGdlcSc6J1xcdTIyNTknLCd3ZWllcnAnOidcXHUyMTE4Jywnd2ZyJzonXFx1RDgzNVxcdUREMzQnLCdXZnInOidcXHVEODM1XFx1REQxQScsJ3dvcGYnOidcXHVEODM1XFx1REQ2OCcsJ1dvcGYnOidcXHVEODM1XFx1REQ0RScsJ3dwJzonXFx1MjExOCcsJ3dyJzonXFx1MjI0MCcsJ3dyZWF0aCc6J1xcdTIyNDAnLCd3c2NyJzonXFx1RDgzNVxcdURDQ0MnLCdXc2NyJzonXFx1RDgzNVxcdURDQjInLCd4Y2FwJzonXFx1MjJDMicsJ3hjaXJjJzonXFx1MjVFRicsJ3hjdXAnOidcXHUyMkMzJywneGR0cmknOidcXHUyNUJEJywneGZyJzonXFx1RDgzNVxcdUREMzUnLCdYZnInOidcXHVEODM1XFx1REQxQicsJ3hoYXJyJzonXFx1MjdGNycsJ3hoQXJyJzonXFx1MjdGQScsJ3hpJzonXFx1MDNCRScsJ1hpJzonXFx1MDM5RScsJ3hsYXJyJzonXFx1MjdGNScsJ3hsQXJyJzonXFx1MjdGOCcsJ3htYXAnOidcXHUyN0ZDJywneG5pcyc6J1xcdTIyRkInLCd4b2RvdCc6J1xcdTJBMDAnLCd4b3BmJzonXFx1RDgzNVxcdURENjknLCdYb3BmJzonXFx1RDgzNVxcdURENEYnLCd4b3BsdXMnOidcXHUyQTAxJywneG90aW1lJzonXFx1MkEwMicsJ3hyYXJyJzonXFx1MjdGNicsJ3hyQXJyJzonXFx1MjdGOScsJ3hzY3InOidcXHVEODM1XFx1RENDRCcsJ1hzY3InOidcXHVEODM1XFx1RENCMycsJ3hzcWN1cCc6J1xcdTJBMDYnLCd4dXBsdXMnOidcXHUyQTA0JywneHV0cmknOidcXHUyNUIzJywneHZlZSc6J1xcdTIyQzEnLCd4d2VkZ2UnOidcXHUyMkMwJywneWFjdXRlJzonXFx4RkQnLCdZYWN1dGUnOidcXHhERCcsJ3lhY3knOidcXHUwNDRGJywnWUFjeSc6J1xcdTA0MkYnLCd5Y2lyYyc6J1xcdTAxNzcnLCdZY2lyYyc6J1xcdTAxNzYnLCd5Y3knOidcXHUwNDRCJywnWWN5JzonXFx1MDQyQicsJ3llbic6J1xceEE1JywneWZyJzonXFx1RDgzNVxcdUREMzYnLCdZZnInOidcXHVEODM1XFx1REQxQycsJ3lpY3knOidcXHUwNDU3JywnWUljeSc6J1xcdTA0MDcnLCd5b3BmJzonXFx1RDgzNVxcdURENkEnLCdZb3BmJzonXFx1RDgzNVxcdURENTAnLCd5c2NyJzonXFx1RDgzNVxcdURDQ0UnLCdZc2NyJzonXFx1RDgzNVxcdURDQjQnLCd5dWN5JzonXFx1MDQ0RScsJ1lVY3knOidcXHUwNDJFJywneXVtbCc6J1xceEZGJywnWXVtbCc6J1xcdTAxNzgnLCd6YWN1dGUnOidcXHUwMTdBJywnWmFjdXRlJzonXFx1MDE3OScsJ3pjYXJvbic6J1xcdTAxN0UnLCdaY2Fyb24nOidcXHUwMTdEJywnemN5JzonXFx1MDQzNycsJ1pjeSc6J1xcdTA0MTcnLCd6ZG90JzonXFx1MDE3QycsJ1pkb3QnOidcXHUwMTdCJywnemVldHJmJzonXFx1MjEyOCcsJ1plcm9XaWR0aFNwYWNlJzonXFx1MjAwQicsJ3pldGEnOidcXHUwM0I2JywnWmV0YSc6J1xcdTAzOTYnLCd6ZnInOidcXHVEODM1XFx1REQzNycsJ1pmcic6J1xcdTIxMjgnLCd6aGN5JzonXFx1MDQzNicsJ1pIY3knOidcXHUwNDE2JywnemlncmFycic6J1xcdTIxREQnLCd6b3BmJzonXFx1RDgzNVxcdURENkInLCdab3BmJzonXFx1MjEyNCcsJ3pzY3InOidcXHVEODM1XFx1RENDRicsJ1pzY3InOidcXHVEODM1XFx1RENCNScsJ3p3aic6J1xcdTIwMEQnLCd6d25qJzonXFx1MjAwQyd9O1xuXHR2YXIgZGVjb2RlTWFwTGVnYWN5ID0geydhYWN1dGUnOidcXHhFMScsJ0FhY3V0ZSc6J1xceEMxJywnYWNpcmMnOidcXHhFMicsJ0FjaXJjJzonXFx4QzInLCdhY3V0ZSc6J1xceEI0JywnYWVsaWcnOidcXHhFNicsJ0FFbGlnJzonXFx4QzYnLCdhZ3JhdmUnOidcXHhFMCcsJ0FncmF2ZSc6J1xceEMwJywnYW1wJzonJicsJ0FNUCc6JyYnLCdhcmluZyc6J1xceEU1JywnQXJpbmcnOidcXHhDNScsJ2F0aWxkZSc6J1xceEUzJywnQXRpbGRlJzonXFx4QzMnLCdhdW1sJzonXFx4RTQnLCdBdW1sJzonXFx4QzQnLCdicnZiYXInOidcXHhBNicsJ2NjZWRpbCc6J1xceEU3JywnQ2NlZGlsJzonXFx4QzcnLCdjZWRpbCc6J1xceEI4JywnY2VudCc6J1xceEEyJywnY29weSc6J1xceEE5JywnQ09QWSc6J1xceEE5JywnY3VycmVuJzonXFx4QTQnLCdkZWcnOidcXHhCMCcsJ2RpdmlkZSc6J1xceEY3JywnZWFjdXRlJzonXFx4RTknLCdFYWN1dGUnOidcXHhDOScsJ2VjaXJjJzonXFx4RUEnLCdFY2lyYyc6J1xceENBJywnZWdyYXZlJzonXFx4RTgnLCdFZ3JhdmUnOidcXHhDOCcsJ2V0aCc6J1xceEYwJywnRVRIJzonXFx4RDAnLCdldW1sJzonXFx4RUInLCdFdW1sJzonXFx4Q0InLCdmcmFjMTInOidcXHhCRCcsJ2ZyYWMxNCc6J1xceEJDJywnZnJhYzM0JzonXFx4QkUnLCdndCc6Jz4nLCdHVCc6Jz4nLCdpYWN1dGUnOidcXHhFRCcsJ0lhY3V0ZSc6J1xceENEJywnaWNpcmMnOidcXHhFRScsJ0ljaXJjJzonXFx4Q0UnLCdpZXhjbCc6J1xceEExJywnaWdyYXZlJzonXFx4RUMnLCdJZ3JhdmUnOidcXHhDQycsJ2lxdWVzdCc6J1xceEJGJywnaXVtbCc6J1xceEVGJywnSXVtbCc6J1xceENGJywnbGFxdW8nOidcXHhBQicsJ2x0JzonPCcsJ0xUJzonPCcsJ21hY3InOidcXHhBRicsJ21pY3JvJzonXFx4QjUnLCdtaWRkb3QnOidcXHhCNycsJ25ic3AnOidcXHhBMCcsJ25vdCc6J1xceEFDJywnbnRpbGRlJzonXFx4RjEnLCdOdGlsZGUnOidcXHhEMScsJ29hY3V0ZSc6J1xceEYzJywnT2FjdXRlJzonXFx4RDMnLCdvY2lyYyc6J1xceEY0JywnT2NpcmMnOidcXHhENCcsJ29ncmF2ZSc6J1xceEYyJywnT2dyYXZlJzonXFx4RDInLCdvcmRmJzonXFx4QUEnLCdvcmRtJzonXFx4QkEnLCdvc2xhc2gnOidcXHhGOCcsJ09zbGFzaCc6J1xceEQ4Jywnb3RpbGRlJzonXFx4RjUnLCdPdGlsZGUnOidcXHhENScsJ291bWwnOidcXHhGNicsJ091bWwnOidcXHhENicsJ3BhcmEnOidcXHhCNicsJ3BsdXNtbic6J1xceEIxJywncG91bmQnOidcXHhBMycsJ3F1b3QnOidcIicsJ1FVT1QnOidcIicsJ3JhcXVvJzonXFx4QkInLCdyZWcnOidcXHhBRScsJ1JFRyc6J1xceEFFJywnc2VjdCc6J1xceEE3Jywnc2h5JzonXFx4QUQnLCdzdXAxJzonXFx4QjknLCdzdXAyJzonXFx4QjInLCdzdXAzJzonXFx4QjMnLCdzemxpZyc6J1xceERGJywndGhvcm4nOidcXHhGRScsJ1RIT1JOJzonXFx4REUnLCd0aW1lcyc6J1xceEQ3JywndWFjdXRlJzonXFx4RkEnLCdVYWN1dGUnOidcXHhEQScsJ3VjaXJjJzonXFx4RkInLCdVY2lyYyc6J1xceERCJywndWdyYXZlJzonXFx4RjknLCdVZ3JhdmUnOidcXHhEOScsJ3VtbCc6J1xceEE4JywndXVtbCc6J1xceEZDJywnVXVtbCc6J1xceERDJywneWFjdXRlJzonXFx4RkQnLCdZYWN1dGUnOidcXHhERCcsJ3llbic6J1xceEE1JywneXVtbCc6J1xceEZGJ307XG5cdHZhciBkZWNvZGVNYXBOdW1lcmljID0geycwJzonXFx1RkZGRCcsJzEyOCc6J1xcdTIwQUMnLCcxMzAnOidcXHUyMDFBJywnMTMxJzonXFx1MDE5MicsJzEzMic6J1xcdTIwMUUnLCcxMzMnOidcXHUyMDI2JywnMTM0JzonXFx1MjAyMCcsJzEzNSc6J1xcdTIwMjEnLCcxMzYnOidcXHUwMkM2JywnMTM3JzonXFx1MjAzMCcsJzEzOCc6J1xcdTAxNjAnLCcxMzknOidcXHUyMDM5JywnMTQwJzonXFx1MDE1MicsJzE0Mic6J1xcdTAxN0QnLCcxNDUnOidcXHUyMDE4JywnMTQ2JzonXFx1MjAxOScsJzE0Nyc6J1xcdTIwMUMnLCcxNDgnOidcXHUyMDFEJywnMTQ5JzonXFx1MjAyMicsJzE1MCc6J1xcdTIwMTMnLCcxNTEnOidcXHUyMDE0JywnMTUyJzonXFx1MDJEQycsJzE1Myc6J1xcdTIxMjInLCcxNTQnOidcXHUwMTYxJywnMTU1JzonXFx1MjAzQScsJzE1Nic6J1xcdTAxNTMnLCcxNTgnOidcXHUwMTdFJywnMTU5JzonXFx1MDE3OCd9O1xuXHR2YXIgaW52YWxpZFJlZmVyZW5jZUNvZGVQb2ludHMgPSBbMSwyLDMsNCw1LDYsNyw4LDExLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDY0OTc2LDY0OTc3LDY0OTc4LDY0OTc5LDY0OTgwLDY0OTgxLDY0OTgyLDY0OTgzLDY0OTg0LDY0OTg1LDY0OTg2LDY0OTg3LDY0OTg4LDY0OTg5LDY0OTkwLDY0OTkxLDY0OTkyLDY0OTkzLDY0OTk0LDY0OTk1LDY0OTk2LDY0OTk3LDY0OTk4LDY0OTk5LDY1MDAwLDY1MDAxLDY1MDAyLDY1MDAzLDY1MDA0LDY1MDA1LDY1MDA2LDY1MDA3LDY1NTM0LDY1NTM1LDEzMTA3MCwxMzEwNzEsMTk2NjA2LDE5NjYwNywyNjIxNDIsMjYyMTQzLDMyNzY3OCwzMjc2NzksMzkzMjE0LDM5MzIxNSw0NTg3NTAsNDU4NzUxLDUyNDI4Niw1MjQyODcsNTg5ODIyLDU4OTgyMyw2NTUzNTgsNjU1MzU5LDcyMDg5NCw3MjA4OTUsNzg2NDMwLDc4NjQzMSw4NTE5NjYsODUxOTY3LDkxNzUwMiw5MTc1MDMsOTgzMDM4LDk4MzAzOSwxMDQ4NTc0LDEwNDg1NzUsMTExNDExMCwxMTE0MTExXTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuXHR2YXIgb2JqZWN0ID0ge307XG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIGhhcyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHlOYW1lKSB7XG5cdFx0cmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eU5hbWUpO1xuXHR9O1xuXG5cdHZhciBjb250YWlucyA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkge1xuXHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdGlmIChhcnJheVtpbmRleF0gPT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR2YXIgbWVyZ2UgPSBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0cykge1xuXHRcdGlmICghb3B0aW9ucykge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRzO1xuXHRcdH1cblx0XHR2YXIgcmVzdWx0ID0ge307XG5cdFx0dmFyIGtleTtcblx0XHRmb3IgKGtleSBpbiBkZWZhdWx0cykge1xuXHRcdFx0Ly8gQSBgaGFzT3duUHJvcGVydHlgIGNoZWNrIGlzIG5vdCBuZWVkZWQgaGVyZSwgc2luY2Ugb25seSByZWNvZ25pemVkXG5cdFx0XHQvLyBvcHRpb24gbmFtZXMgYXJlIHVzZWQgYW55d2F5LiBBbnkgb3RoZXJzIGFyZSBpZ25vcmVkLlxuXHRcdFx0cmVzdWx0W2tleV0gPSBoYXMob3B0aW9ucywga2V5KSA/IG9wdGlvbnNba2V5XSA6IGRlZmF1bHRzW2tleV07XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH07XG5cblx0Ly8gTW9kaWZpZWQgdmVyc2lvbiBvZiBgdWNzMmVuY29kZWA7IHNlZSBodHRwczovL210aHMuYmUvcHVueWNvZGUuXG5cdHZhciBjb2RlUG9pbnRUb1N5bWJvbCA9IGZ1bmN0aW9uKGNvZGVQb2ludCwgc3RyaWN0KSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdGlmICgoY29kZVBvaW50ID49IDB4RDgwMCAmJiBjb2RlUG9pbnQgPD0gMHhERkZGKSB8fCBjb2RlUG9pbnQgPiAweDEwRkZGRikge1xuXHRcdFx0Ly8gU2VlIGlzc3VlICM0OlxuXHRcdFx0Ly8g4oCcT3RoZXJ3aXNlLCBpZiB0aGUgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAweEQ4MDAgdG8gMHhERkZGIG9yIGlzXG5cdFx0XHQvLyBncmVhdGVyIHRoYW4gMHgxMEZGRkYsIHRoZW4gdGhpcyBpcyBhIHBhcnNlIGVycm9yLiBSZXR1cm4gYSBVK0ZGRkRcblx0XHRcdC8vIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi7igJ1cblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSBvdXRzaWRlIHRoZSBwZXJtaXNzaWJsZSBVbmljb2RlIHJhbmdlJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJ1xcdUZGRkQnO1xuXHRcdH1cblx0XHRpZiAoaGFzKGRlY29kZU1hcE51bWVyaWMsIGNvZGVQb2ludCkpIHtcblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcignZGlzYWxsb3dlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGVjb2RlTWFwTnVtZXJpY1tjb2RlUG9pbnRdO1xuXHRcdH1cblx0XHRpZiAoc3RyaWN0ICYmIGNvbnRhaW5zKGludmFsaWRSZWZlcmVuY2VDb2RlUG9pbnRzLCBjb2RlUG9pbnQpKSB7XG5cdFx0XHRwYXJzZUVycm9yKCdkaXNhbGxvd2VkIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuXHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRjtcblx0XHR9XG5cdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGhleEVzY2FwZSA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRcdHJldHVybiAnJiN4JyArIGNvZGVQb2ludC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArICc7Jztcblx0fTtcblxuXHR2YXIgZGVjRXNjYXBlID0gZnVuY3Rpb24oY29kZVBvaW50KSB7XG5cdFx0cmV0dXJuICcmIycgKyBjb2RlUG9pbnQgKyAnOyc7XG5cdH07XG5cblx0dmFyIHBhcnNlRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhyb3cgRXJyb3IoJ1BhcnNlIGVycm9yOiAnICsgbWVzc2FnZSk7XG5cdH07XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKHN0cmluZywgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBlbmNvZGUub3B0aW9ucyk7XG5cdFx0dmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXHRcdGlmIChzdHJpY3QgJiYgcmVnZXhJbnZhbGlkUmF3Q29kZVBvaW50LnRlc3Qoc3RyaW5nKSkge1xuXHRcdFx0cGFyc2VFcnJvcignZm9yYmlkZGVuIGNvZGUgcG9pbnQnKTtcblx0XHR9XG5cdFx0dmFyIGVuY29kZUV2ZXJ5dGhpbmcgPSBvcHRpb25zLmVuY29kZUV2ZXJ5dGhpbmc7XG5cdFx0dmFyIHVzZU5hbWVkUmVmZXJlbmNlcyA9IG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzO1xuXHRcdHZhciBhbGxvd1Vuc2FmZVN5bWJvbHMgPSBvcHRpb25zLmFsbG93VW5zYWZlU3ltYm9scztcblx0XHR2YXIgZXNjYXBlQ29kZVBvaW50ID0gb3B0aW9ucy5kZWNpbWFsID8gZGVjRXNjYXBlIDogaGV4RXNjYXBlO1xuXG5cdFx0dmFyIGVzY2FwZUJtcFN5bWJvbCA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0cmV0dXJuIGVzY2FwZUNvZGVQb2ludChzeW1ib2wuY2hhckNvZGVBdCgwKSk7XG5cdFx0fTtcblxuXHRcdGlmIChlbmNvZGVFdmVyeXRoaW5nKSB7XG5cdFx0XHQvLyBFbmNvZGUgQVNDSUkgc3ltYm9scy5cblx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4QXNjaWlXaGl0ZWxpc3QsIGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdFx0XHQvLyBVc2UgbmFtZWQgcmVmZXJlbmNlcyBpZiByZXF1ZXN0ZWQgJiBwb3NzaWJsZS5cblx0XHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcyAmJiBoYXMoZW5jb2RlTWFwLCBzeW1ib2wpKSB7XG5cdFx0XHRcdFx0cmV0dXJuICcmJyArIGVuY29kZU1hcFtzeW1ib2xdICsgJzsnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBlc2NhcGVCbXBTeW1ib2woc3ltYm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gU2hvcnRlbiBhIGZldyBlc2NhcGVzIHRoYXQgcmVwcmVzZW50IHR3byBzeW1ib2xzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmVcblx0XHRcdC8vIGlzIHdpdGhpbiB0aGUgQVNDSUkgcmFuZ2UuXG5cdFx0XHRpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZ1xuXHRcdFx0XHRcdC5yZXBsYWNlKC8mZ3Q7XFx1MjBEMi9nLCAnJm52Z3Q7Jylcblx0XHRcdFx0XHQucmVwbGFjZSgvJmx0O1xcdTIwRDIvZywgJyZudmx0OycpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyYjeDY2OyYjeDZBOy9nLCAnJmZqbGlnOycpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW5jb2RlIG5vbi1BU0NJSSBzeW1ib2xzLlxuXHRcdFx0aWYgKHVzZU5hbWVkUmVmZXJlbmNlcykge1xuXHRcdFx0XHQvLyBFbmNvZGUgbm9uLUFTQ0lJIHN5bWJvbHMgdGhhdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIG5hbWVkIHJlZmVyZW5jZS5cblx0XHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFbmNvZGVOb25Bc2NpaSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGVuY29kZU1hcCwgc3RyaW5nKWAgaGVyZS5cblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gTm90ZTogYW55IHJlbWFpbmluZyBub24tQVNDSUkgc3ltYm9scyBhcmUgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBgaWZgLlxuXHRcdH0gZWxzZSBpZiAodXNlTmFtZWRSZWZlcmVuY2VzKSB7XG5cdFx0XHQvLyBBcHBseSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdC8vIEVuY29kZSBgPD5cIicmYCB1c2luZyBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy5cblx0XHRcdGlmICghYWxsb3dVbnNhZmVTeW1ib2xzKSB7XG5cdFx0XHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4RXNjYXBlLCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyYnICsgZW5jb2RlTWFwW3N0cmluZ10gKyAnOyc7IC8vIG5vIG5lZWQgdG8gY2hlY2sgYGhhcygpYCBoZXJlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gU2hvcnRlbiBlc2NhcGVzIHRoYXQgcmVwcmVzZW50IHR3byBzeW1ib2xzLCBvZiB3aGljaCBhdCBsZWFzdCBvbmUgaXNcblx0XHRcdC8vIGA8PlwiJyZgLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nXG5cdFx0XHRcdC5yZXBsYWNlKC8mZ3Q7XFx1MjBEMi9nLCAnJm52Z3Q7Jylcblx0XHRcdFx0LnJlcGxhY2UoLyZsdDtcXHUyMEQyL2csICcmbnZsdDsnKTtcblx0XHRcdC8vIEVuY29kZSBub24tQVNDSUkgc3ltYm9scyB0aGF0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgbmFtZWQgcmVmZXJlbmNlLlxuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhFbmNvZGVOb25Bc2NpaSwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhlbmNvZGVNYXAsIHN0cmluZylgIGhlcmUuXG5cdFx0XHRcdHJldHVybiAnJicgKyBlbmNvZGVNYXBbc3RyaW5nXSArICc7Jztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoIWFsbG93VW5zYWZlU3ltYm9scykge1xuXHRcdFx0Ly8gRW5jb2RlIGA8PlwiJyZgIHVzaW5nIGhleGFkZWNpbWFsIGVzY2FwZXMsIG5vdyB0aGF0IHRoZXnigJlyZSBub3QgaGFuZGxlZFxuXHRcdFx0Ly8gdXNpbmcgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMuXG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleEVzY2FwZSwgZXNjYXBlQm1wU3ltYm9sKTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0cmluZ1xuXHRcdFx0Ly8gRW5jb2RlIGFzdHJhbCBzeW1ib2xzLlxuXHRcdFx0LnJlcGxhY2UocmVnZXhBc3RyYWxTeW1ib2xzLCBmdW5jdGlvbigkMCkge1xuXHRcdFx0XHQvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcblx0XHRcdFx0dmFyIGhpZ2ggPSAkMC5jaGFyQ29kZUF0KDApO1xuXHRcdFx0XHR2YXIgbG93ID0gJDAuY2hhckNvZGVBdCgxKTtcblx0XHRcdFx0dmFyIGNvZGVQb2ludCA9IChoaWdoIC0gMHhEODAwKSAqIDB4NDAwICsgbG93IC0gMHhEQzAwICsgMHgxMDAwMDtcblx0XHRcdFx0cmV0dXJuIGVzY2FwZUNvZGVQb2ludChjb2RlUG9pbnQpO1xuXHRcdFx0fSlcblx0XHRcdC8vIEVuY29kZSBhbnkgcmVtYWluaW5nIEJNUCBzeW1ib2xzIHRoYXQgYXJlIG5vdCBwcmludGFibGUgQVNDSUkgc3ltYm9sc1xuXHRcdFx0Ly8gdXNpbmcgYSBoZXhhZGVjaW1hbCBlc2NhcGUuXG5cdFx0XHQucmVwbGFjZShyZWdleEJtcFdoaXRlbGlzdCwgZXNjYXBlQm1wU3ltYm9sKTtcblx0fTtcblx0Ly8gRXhwb3NlIGRlZmF1bHQgb3B0aW9ucyAoc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSkuXG5cdGVuY29kZS5vcHRpb25zID0ge1xuXHRcdCdhbGxvd1Vuc2FmZVN5bWJvbHMnOiBmYWxzZSxcblx0XHQnZW5jb2RlRXZlcnl0aGluZyc6IGZhbHNlLFxuXHRcdCdzdHJpY3QnOiBmYWxzZSxcblx0XHQndXNlTmFtZWRSZWZlcmVuY2VzJzogZmFsc2UsXG5cdFx0J2RlY2ltYWwnIDogZmFsc2Vcblx0fTtcblxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaHRtbCwgb3B0aW9ucykge1xuXHRcdG9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCBkZWNvZGUub3B0aW9ucyk7XG5cdFx0dmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXHRcdGlmIChzdHJpY3QgJiYgcmVnZXhJbnZhbGlkRW50aXR5LnRlc3QoaHRtbCkpIHtcblx0XHRcdHBhcnNlRXJyb3IoJ21hbGZvcm1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyk7XG5cdFx0fVxuXHRcdHJldHVybiBodG1sLnJlcGxhY2UocmVnZXhEZWNvZGUsIGZ1bmN0aW9uKCQwLCAkMSwgJDIsICQzLCAkNCwgJDUsICQ2LCAkNywgJDgpIHtcblx0XHRcdHZhciBjb2RlUG9pbnQ7XG5cdFx0XHR2YXIgc2VtaWNvbG9uO1xuXHRcdFx0dmFyIGRlY0RpZ2l0cztcblx0XHRcdHZhciBoZXhEaWdpdHM7XG5cdFx0XHR2YXIgcmVmZXJlbmNlO1xuXHRcdFx0dmFyIG5leHQ7XG5cblx0XHRcdGlmICgkMSkge1xuXHRcdFx0XHRyZWZlcmVuY2UgPSAkMTtcblx0XHRcdFx0Ly8gTm90ZTogdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBgaGFzKGRlY29kZU1hcCwgcmVmZXJlbmNlKWAuXG5cdFx0XHRcdHJldHVybiBkZWNvZGVNYXBbcmVmZXJlbmNlXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCQyKSB7XG5cdFx0XHRcdC8vIERlY29kZSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB3aXRob3V0IHRyYWlsaW5nIGA7YCwgZS5nLiBgJmFtcGAuXG5cdFx0XHRcdC8vIFRoaXMgaXMgb25seSBhIHBhcnNlIGVycm9yIGlmIGl0IGdldHMgY29udmVydGVkIHRvIGAmYCwgb3IgaWYgaXQgaXNcblx0XHRcdFx0Ly8gZm9sbG93ZWQgYnkgYD1gIGluIGFuIGF0dHJpYnV0ZSBjb250ZXh0LlxuXHRcdFx0XHRyZWZlcmVuY2UgPSAkMjtcblx0XHRcdFx0bmV4dCA9ICQzO1xuXHRcdFx0XHRpZiAobmV4dCAmJiBvcHRpb25zLmlzQXR0cmlidXRlVmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoc3RyaWN0ICYmIG5leHQgPT0gJz0nKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUVycm9yKCdgJmAgZGlkIG5vdCBzdGFydCBhIGNoYXJhY3RlciByZWZlcmVuY2UnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuICQwO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0XHRcdHBhcnNlRXJyb3IoXG5cdFx0XHRcdFx0XHRcdCduYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbidcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIE5vdGU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYGhhcyhkZWNvZGVNYXBMZWdhY3ksIHJlZmVyZW5jZSlgLlxuXHRcdFx0XHRcdHJldHVybiBkZWNvZGVNYXBMZWdhY3lbcmVmZXJlbmNlXSArIChuZXh0IHx8ICcnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDQpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIGRlY2ltYWwgZXNjYXBlcywgZS5nLiBgJiMxMTk1NTg7YC5cblx0XHRcdFx0ZGVjRGlnaXRzID0gJDQ7XG5cdFx0XHRcdHNlbWljb2xvbiA9ICQ1O1xuXHRcdFx0XHRpZiAoc3RyaWN0ICYmICFzZW1pY29sb24pIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKCdjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhcyBub3QgdGVybWluYXRlZCBieSBhIHNlbWljb2xvbicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvZGVQb2ludCA9IHBhcnNlSW50KGRlY0RpZ2l0cywgMTApO1xuXHRcdFx0XHRyZXR1cm4gY29kZVBvaW50VG9TeW1ib2woY29kZVBvaW50LCBzdHJpY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoJDYpIHtcblx0XHRcdFx0Ly8gRGVjb2RlIGhleGFkZWNpbWFsIGVzY2FwZXMsIGUuZy4gYCYjeDFEMzA2O2AuXG5cdFx0XHRcdGhleERpZ2l0cyA9ICQ2O1xuXHRcdFx0XHRzZW1pY29sb24gPSAkNztcblx0XHRcdFx0aWYgKHN0cmljdCAmJiAhc2VtaWNvbG9uKSB7XG5cdFx0XHRcdFx0cGFyc2VFcnJvcignY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb2RlUG9pbnQgPSBwYXJzZUludChoZXhEaWdpdHMsIDE2KTtcblx0XHRcdFx0cmV0dXJuIGNvZGVQb2ludFRvU3ltYm9sKGNvZGVQb2ludCwgc3RyaWN0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2XigJlyZSBzdGlsbCBoZXJlLCBgaWYgKCQ3KWAgaXMgaW1wbGllZDsgaXTigJlzIGFuIGFtYmlndW91c1xuXHRcdFx0Ly8gYW1wZXJzYW5kIGZvciBzdXJlLiBodHRwczovL210aHMuYmUvbm90ZXMvYW1iaWd1b3VzLWFtcGVyc2FuZHNcblx0XHRcdGlmIChzdHJpY3QpIHtcblx0XHRcdFx0cGFyc2VFcnJvcihcblx0XHRcdFx0XHQnbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb24nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gJDA7XG5cdFx0fSk7XG5cdH07XG5cdC8vIEV4cG9zZSBkZWZhdWx0IG9wdGlvbnMgKHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gZ2xvYmFsbHkpLlxuXHRkZWNvZGUub3B0aW9ucyA9IHtcblx0XHQnaXNBdHRyaWJ1dGVWYWx1ZSc6IGZhbHNlLFxuXHRcdCdzdHJpY3QnOiBmYWxzZVxuXHR9O1xuXG5cdHZhciBlc2NhcGUgPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXhFc2NhcGUsIGZ1bmN0aW9uKCQwKSB7XG5cdFx0XHQvLyBOb3RlOiB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGBoYXMoZXNjYXBlTWFwLCAkMClgIGhlcmUuXG5cdFx0XHRyZXR1cm4gZXNjYXBlTWFwWyQwXTtcblx0XHR9KTtcblx0fTtcblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgaGUgPSB7XG5cdFx0J3ZlcnNpb24nOiAnMS4yLjAnLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQnZXNjYXBlJzogZXNjYXBlLFxuXHRcdCd1bmVzY2FwZSc6IGRlY29kZVxuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGhlO1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzLCBpby5qcywgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBoZTtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGhlKSB7XG5cdFx0XHRcdGhhcyhoZSwga2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGhlW2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuaGUgPSBoZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8vICdwYXRoJyBtb2R1bGUgZXh0cmFjdGVkIGZyb20gTm9kZS5qcyB2OC4xMS4xIChvbmx5IHRoZSBwb3NpeCBwYXJ0KVxuLy8gdHJhbnNwbGl0ZWQgd2l0aCBCYWJlbFxuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIEpTT04uc3RyaW5naWZ5KHBhdGgpKTtcbiAgfVxufVxuXG4vLyBSZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggd2l0aCBkaXJlY3RvcnkgbmFtZXNcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHBhdGgsIGFsbG93QWJvdmVSb290KSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgdmFyIGxhc3RTbGFzaCA9IC0xO1xuICB2YXIgZG90cyA9IDA7XG4gIHZhciBjb2RlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8PSBwYXRoLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPCBwYXRoLmxlbmd0aClcbiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgZWxzZSBpZiAoY29kZSA9PT0gNDcgLyovKi8pXG4gICAgICBicmVhaztcbiAgICBlbHNlXG4gICAgICBjb2RlID0gNDcgLyovKi87XG4gICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpIC0gMSB8fCBkb3RzID09PSAxKSB7XG4gICAgICAgIC8vIE5PT1BcbiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpIC0gMSAmJiBkb3RzID09PSAyKSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoIDwgMiB8fCBsYXN0U2VnbWVudExlbmd0aCAhPT0gMiB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMSkgIT09IDQ2IC8qLiovIHx8IHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAyKSAhPT0gNDYgLyouKi8pIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSByZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gJyc7XG4gICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCk7XG4gICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDIgfHwgcmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmVzID0gJyc7XG4gICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmVzICs9ICcvLi4nO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJlcyA9ICcuLic7XG4gICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApXG4gICAgICAgICAgcmVzICs9ICcvJyArIHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXMgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgIGRvdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNDYgLyouKi8gJiYgZG90cyAhPT0gLTEpIHtcbiAgICAgICsrZG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBfZm9ybWF0KHNlcCwgcGF0aE9iamVjdCkge1xuICB2YXIgZGlyID0gcGF0aE9iamVjdC5kaXIgfHwgcGF0aE9iamVjdC5yb290O1xuICB2YXIgYmFzZSA9IHBhdGhPYmplY3QuYmFzZSB8fCAocGF0aE9iamVjdC5uYW1lIHx8ICcnKSArIChwYXRoT2JqZWN0LmV4dCB8fCAnJyk7XG4gIGlmICghZGlyKSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbiAgaWYgKGRpciA9PT0gcGF0aE9iamVjdC5yb290KSB7XG4gICAgcmV0dXJuIGRpciArIGJhc2U7XG4gIH1cbiAgcmV0dXJuIGRpciArIHNlcCArIGJhc2U7XG59XG5cbnZhciBwb3NpeCA9IHtcbiAgLy8gcGF0aC5yZXNvbHZlKFtmcm9tIC4uLl0sIHRvKVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgIHZhciByZXNvbHZlZFBhdGggPSAnJztcbiAgICB2YXIgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuICAgIHZhciBjd2Q7XG5cbiAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgICAgdmFyIHBhdGg7XG4gICAgICBpZiAoaSA+PSAwKVxuICAgICAgICBwYXRoID0gYXJndW1lbnRzW2ldO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChjd2QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICBwYXRoID0gY3dkO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgICAvLyBTa2lwIGVtcHR5IGVudHJpZXNcbiAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IDQ3IC8qLyovO1xuICAgIH1cblxuICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICAgIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHJlc29sdmVkUGF0aCwgIXJlc29sdmVkQWJzb2x1dGUpO1xuXG4gICAgaWYgKHJlc29sdmVkQWJzb2x1dGUpIHtcbiAgICAgIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuICcvJztcbiAgICB9IGVsc2UgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJy4nO1xuICAgIH1cbiAgfSxcblxuICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcblxuICAgIHZhciBpc0Fic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgICB2YXIgdHJhaWxpbmdTZXBhcmF0b3IgPSBwYXRoLmNoYXJDb2RlQXQocGF0aC5sZW5ndGggLSAxKSA9PT0gNDcgLyovKi87XG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgICBwYXRoID0gbm9ybWFsaXplU3RyaW5nUG9zaXgocGF0aCwgIWlzQWJzb2x1dGUpO1xuXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwICYmICFpc0Fic29sdXRlKSBwYXRoID0gJy4nO1xuICAgIGlmIChwYXRoLmxlbmd0aCA+IDAgJiYgdHJhaWxpbmdTZXBhcmF0b3IpIHBhdGggKz0gJy8nO1xuXG4gICAgaWYgKGlzQWJzb2x1dGUpIHJldHVybiAnLycgKyBwYXRoO1xuICAgIHJldHVybiBwYXRoO1xuICB9LFxuXG4gIGlzQWJzb2x1dGU6IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG4gICAgcmV0dXJuIHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IDQ3IC8qLyovO1xuICB9LFxuXG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gJy4nO1xuICAgIHZhciBqb2luZWQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICBhc3NlcnRQYXRoKGFyZyk7XG4gICAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIGpvaW5lZCA9IGFyZztcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGpvaW5lZCArPSAnLycgKyBhcmc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiAnLic7XG4gICAgcmV0dXJuIHBvc2l4Lm5vcm1hbGl6ZShqb2luZWQpO1xuICB9LFxuXG4gIHJlbGF0aXZlOiBmdW5jdGlvbiByZWxhdGl2ZShmcm9tLCB0bykge1xuICAgIGFzc2VydFBhdGgoZnJvbSk7XG4gICAgYXNzZXJ0UGF0aCh0byk7XG5cbiAgICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiAnJztcblxuICAgIGZyb20gPSBwb3NpeC5yZXNvbHZlKGZyb20pO1xuICAgIHRvID0gcG9zaXgucmVzb2x2ZSh0byk7XG5cbiAgICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiAnJztcblxuICAgIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgICB2YXIgZnJvbVN0YXJ0ID0gMTtcbiAgICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbS5sZW5ndGg7ICsrZnJvbVN0YXJ0KSB7XG4gICAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IDQ3IC8qLyovKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZyb21FbmQgPSBmcm9tLmxlbmd0aDtcbiAgICB2YXIgZnJvbUxlbiA9IGZyb21FbmQgLSBmcm9tU3RhcnQ7XG5cbiAgICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gICAgdmFyIHRvU3RhcnQgPSAxO1xuICAgIGZvciAoOyB0b1N0YXJ0IDwgdG8ubGVuZ3RoOyArK3RvU3RhcnQpIHtcbiAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSA0NyAvKi8qLylcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciB0b0VuZCA9IHRvLmxlbmd0aDtcbiAgICB2YXIgdG9MZW4gPSB0b0VuZCAtIHRvU3RhcnQ7XG5cbiAgICAvLyBDb21wYXJlIHBhdGhzIHRvIGZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHBhdGggZnJvbSByb290XG4gICAgdmFyIGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjtcbiAgICB2YXIgbGFzdENvbW1vblNlcCA9IC0xO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8PSBsZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgICBpZiAodG9MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYHRvYC5cbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhcic7IHRvPScvZm9vL2Jhci9iYXonXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgcm9vdFxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy8nOyB0bz0nL2ZvbydcbiAgICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgZnJvbWAuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXIvYmF6JzsgdG89Jy9mb28vYmFyJ1xuICAgICAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSByb290LlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28nOyB0bz0nLydcbiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHZhciBmcm9tQ29kZSA9IGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKTtcbiAgICAgIHZhciB0b0NvZGUgPSB0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKTtcbiAgICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKVxuICAgICAgICBicmVhaztcbiAgICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSA0NyAvKi8qLylcbiAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9ICcnO1xuICAgIC8vIEdlbmVyYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJhc2VkIG9uIHRoZSBwYXRoIGRpZmZlcmVuY2UgYmV0d2VlbiBgdG9gXG4gICAgLy8gYW5kIGBmcm9tYFxuICAgIGZvciAoaSA9IGZyb21TdGFydCArIGxhc3RDb21tb25TZXAgKyAxOyBpIDw9IGZyb21FbmQ7ICsraSkge1xuICAgICAgaWYgKGkgPT09IGZyb21FbmQgfHwgZnJvbS5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICBpZiAob3V0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICBvdXQgKz0gJy4uJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG91dCArPSAnLy4uJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXN0bHksIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgZGVzdGluYXRpb24gKGB0b2ApIHBhdGggdGhhdCBjb21lcyBhZnRlclxuICAgIC8vIHRoZSBjb21tb24gcGF0aCBwYXJ0c1xuICAgIGlmIChvdXQubGVuZ3RoID4gMClcbiAgICAgIHJldHVybiBvdXQgKyB0by5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCk7XG4gICAgZWxzZSB7XG4gICAgICB0b1N0YXJ0ICs9IGxhc3RDb21tb25TZXA7XG4gICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSA9PT0gNDcgLyovKi8pXG4gICAgICAgICsrdG9TdGFydDtcbiAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0KTtcbiAgICB9XG4gIH0sXG5cbiAgX21ha2VMb25nOiBmdW5jdGlvbiBfbWFrZUxvbmcocGF0aCkge1xuICAgIHJldHVybiBwYXRoO1xuICB9LFxuXG4gIGRpcm5hbWU6IGZ1bmN0aW9uIGRpcm5hbWUocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gJy4nO1xuICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciBoYXNSb290ID0gY29kZSA9PT0gNDcgLyovKi87XG4gICAgdmFyIGVuZCA9IC0xO1xuICAgIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yXG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmQgPT09IC0xKSByZXR1cm4gaGFzUm9vdCA/ICcvJyA6ICcuJztcbiAgICBpZiAoaGFzUm9vdCAmJiBlbmQgPT09IDEpIHJldHVybiAnLy8nO1xuICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIGVuZCk7XG4gIH0sXG5cbiAgYmFzZW5hbWU6IGZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgsIGV4dCkge1xuICAgIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZXh0ICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIHZhciBzdGFydCA9IDA7XG4gICAgdmFyIGVuZCA9IC0xO1xuICAgIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIGV4dC5sZW5ndGggPiAwICYmIGV4dC5sZW5ndGggPD0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIGlmIChleHQubGVuZ3RoID09PSBwYXRoLmxlbmd0aCAmJiBleHQgPT09IHBhdGgpIHJldHVybiAnJztcbiAgICAgIHZhciBleHRJZHggPSBleHQubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBmaXJzdE5vblNsYXNoRW5kID0gLTE7XG4gICAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPT09IC0xKSB7XG4gICAgICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgcmVtZW1iZXIgdGhpcyBpbmRleCBpbiBjYXNlXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIGl0IGlmIHRoZSBleHRlbnNpb24gZW5kcyB1cCBub3QgbWF0Y2hpbmdcbiAgICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGkgKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXh0SWR4ID49IDApIHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZXhwbGljaXQgZXh0ZW5zaW9uXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gZXh0LmNoYXJDb2RlQXQoZXh0SWR4KSkge1xuICAgICAgICAgICAgICBpZiAoLS1leHRJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgZXh0ZW5zaW9uLCBzbyBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIgcGF0aFxuICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEV4dGVuc2lvbiBkb2VzIG5vdCBtYXRjaCwgc28gb3VyIHJlc3VsdCBpcyB0aGUgZW50aXJlIHBhdGhcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICAgIGV4dElkeCA9IC0xO1xuICAgICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQgPT09IGVuZCkgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtlbHNlIGlmIChlbmQgPT09IC0xKSBlbmQgPSBwYXRoLmxlbmd0aDtcbiAgICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgICAgLy8gcGF0aCBjb21wb25lbnRcbiAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuICB9LFxuXG4gIGV4dG5hbWU6IGZ1bmN0aW9uIGV4dG5hbWUocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG4gICAgdmFyIHN0YXJ0RG90ID0gLTE7XG4gICAgdmFyIHN0YXJ0UGFydCA9IDA7XG4gICAgdmFyIGVuZCA9IC0xO1xuICAgIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAgIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICAgIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgICAgLy8gZXh0ZW5zaW9uXG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlID09PSA0NiAvKi4qLykge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpXG4gICAgICAgICAgICBzdGFydERvdCA9IGk7XG4gICAgICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpXG4gICAgICAgICAgICBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFydERvdCA9PT0gLTEgfHwgZW5kID09PSAtMSB8fFxuICAgICAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgICAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgICAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICB9LFxuXG4gIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3QpIHtcbiAgICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgcGF0aE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBfZm9ybWF0KCcvJywgcGF0aE9iamVjdCk7XG4gIH0sXG5cbiAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgdmFyIHJldCA9IHsgcm9vdDogJycsIGRpcjogJycsIGJhc2U6ICcnLCBleHQ6ICcnLCBuYW1lOiAnJyB9O1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgaXNBYnNvbHV0ZSA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICAgIHZhciBzdGFydDtcbiAgICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgICAgcmV0LnJvb3QgPSAnLyc7XG4gICAgICBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgdmFyIHN0YXJ0RG90ID0gLTE7XG4gICAgdmFyIHN0YXJ0UGFydCA9IDA7XG4gICAgdmFyIGVuZCA9IC0xO1xuICAgIHZhciBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAgIHZhciBpID0gcGF0aC5sZW5ndGggLSAxO1xuXG4gICAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAgIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gICAgdmFyIHByZURvdFN0YXRlID0gMDtcblxuICAgIC8vIEdldCBub24tZGlyIGluZm9cbiAgICBmb3IgKDsgaSA+PSBzdGFydDsgLS1pKSB7XG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgICAgLy8gZXh0ZW5zaW9uXG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlID09PSA0NiAvKi4qLykge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFydERvdCA9PT0gLTEgfHwgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIGlmIChlbmQgIT09IC0xKSB7XG4gICAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgZW5kKTtlbHNlIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSB7XG4gICAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBzdGFydERvdCk7XG4gICAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZSgxLCBlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgc3RhcnREb3QpO1xuICAgICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgcmV0LmV4dCA9IHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0UGFydCA+IDApIHJldC5kaXIgPSBwYXRoLnNsaWNlKDAsIHN0YXJ0UGFydCAtIDEpO2Vsc2UgaWYgKGlzQWJzb2x1dGUpIHJldC5kaXIgPSAnLyc7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIHNlcDogJy8nLFxuICBkZWxpbWl0ZXI6ICc6JyxcbiAgd2luMzI6IG51bGwsXG4gIHBvc2l4OiBudWxsXG59O1xuXG5wb3NpeC5wb3NpeCA9IHBvc2l4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvc2l4O1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbWFwKG9iamVjdEtleXMob2JqKSwgZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcChvYmpba10sIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbmZ1bmN0aW9uIG1hcCAoeHMsIGYpIHtcbiAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnB1c2goZih4c1tpXSwgaSkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoJ3VuZGVyc2NvcmUnLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBnbG9iYWwuXztcbiAgICB2YXIgZXhwb3J0cyA9IGdsb2JhbC5fID0gZmFjdG9yeSgpO1xuICAgIGV4cG9ydHMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsgZ2xvYmFsLl8gPSBjdXJyZW50OyByZXR1cm4gZXhwb3J0czsgfTtcbiAgfSgpKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7XG4gIC8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNlxuICAvLyAgICAgaHR0cHM6Ly91bmRlcnNjb3JlanMub3JnXG4gIC8vICAgICAoYykgMjAwOS0yMDIyIEplcmVteSBBc2hrZW5hcywgSnVsaWFuIEdvbmdncmlqcCwgYW5kIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICAvLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cblxuICAvLyBDdXJyZW50IHZlcnNpb24uXG4gIHZhciBWRVJTSU9OID0gJzEuMTMuNic7XG5cbiAgLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgKGBzZWxmYCkgaW4gdGhlIGJyb3dzZXIsIGBnbG9iYWxgXG4gIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmBcbiAgLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC5cbiAgdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYpIHx8XG4gICAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKSB8fFxuICAgICAgICAgICAge307XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uXG4gIHZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyxcbiAgICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byB0aGVzZSBidWlsdGluIGZ1bmN0aW9ucyBiZWNhdXNlIHdlIG92ZXJyaWRlIHRoZW0uXG4gIHZhciBfaXNOYU4gPSBpc05hTixcbiAgICAgIF9pc0Zpbml0ZSA9IGlzRmluaXRlO1xuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgLy8gVGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LlxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuICAvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbiAgLy8gYXJndW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgdmFsdWVzIHRvIG9wZXJhdGVcbiAgLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZc1xuICAvLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4gIC8vIHRoZSBsYXN0IGFyZ3VtZW50LiBTaW1pbGFyIHRvIEVTNuKAmXMgXCJyZXN0IHBhcmFtZXRlclwiLlxuICBmdW5jdGlvbiByZXN0QXJndW1lbnRzKGZ1bmMsIHN0YXJ0SW5kZXgpIHtcbiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKSxcbiAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIHJlc3QpO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFyZ3Nbc3RhcnRJbmRleF0gPSByZXN0O1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgKHR5cGUgPT09ICdvYmplY3QnICYmICEhb2JqKTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD9cbiAgZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD9cbiAgZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdm9pZCAwO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB0cnVlIHx8IG9iaiA9PT0gZmFsc2UgfHwgdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLlxuICBmdW5jdGlvbiB0YWdUZXN0ZXIobmFtZSkge1xuICAgIHZhciB0YWcgPSAnW29iamVjdCAnICsgbmFtZSArICddJztcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSB0YWc7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpc1N0cmluZyA9IHRhZ1Rlc3RlcignU3RyaW5nJyk7XG5cbiAgdmFyIGlzTnVtYmVyID0gdGFnVGVzdGVyKCdOdW1iZXInKTtcblxuICB2YXIgaXNEYXRlID0gdGFnVGVzdGVyKCdEYXRlJyk7XG5cbiAgdmFyIGlzUmVnRXhwID0gdGFnVGVzdGVyKCdSZWdFeHAnKTtcblxuICB2YXIgaXNFcnJvciA9IHRhZ1Rlc3RlcignRXJyb3InKTtcblxuICB2YXIgaXNTeW1ib2wgPSB0YWdUZXN0ZXIoJ1N5bWJvbCcpO1xuXG4gIHZhciBpc0FycmF5QnVmZmVyID0gdGFnVGVzdGVyKCdBcnJheUJ1ZmZlcicpO1xuXG4gIHZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpO1xuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSBgdHlwZW9mYCBidWdzIGluIG9sZFxuICAvLyB2OCwgSUUgMTEgKCMxNjIxKSwgU2FmYXJpIDggKCMxOTI5KSwgYW5kIFBoYW50b21KUyAoIzIyMzYpLlxuICB2YXIgbm9kZWxpc3QgPSByb290LmRvY3VtZW50ICYmIHJvb3QuZG9jdW1lbnQuY2hpbGROb2RlcztcbiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnICYmIHR5cGVvZiBub2RlbGlzdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJyB8fCBmYWxzZTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGlzRnVuY3Rpb24kMSA9IGlzRnVuY3Rpb247XG5cbiAgdmFyIGhhc09iamVjdFRhZyA9IHRhZ1Rlc3RlcignT2JqZWN0Jyk7XG5cbiAgLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCBgRGF0YVZpZXdgIGhhcyBzdHJpbmcgdGFnIGAnW29iamVjdCBPYmplY3RdJ2AuXG4gIC8vIEluIElFIDExLCB0aGUgbW9zdCBjb21tb24gYW1vbmcgdGhlbSwgdGhpcyBwcm9ibGVtIGFsc28gYXBwbGllcyB0b1xuICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC5cbiAgdmFyIGhhc1N0cmluZ1RhZ0J1ZyA9IChcbiAgICAgICAgc3VwcG9ydHNEYXRhVmlldyAmJiBoYXNPYmplY3RUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkpXG4gICAgICApLFxuICAgICAgaXNJRTExID0gKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnICYmIGhhc09iamVjdFRhZyhuZXcgTWFwKSk7XG5cbiAgdmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7XG5cbiAgLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCB3ZSBuZWVkIGEgZGlmZmVyZW50IGhldXJpc3RpY1xuICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLlxuICBmdW5jdGlvbiBpZTEwSXNEYXRhVmlldyhvYmopIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaXNGdW5jdGlvbiQxKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpO1xuICB9XG5cbiAgdmFyIGlzRGF0YVZpZXckMSA9IChoYXNTdHJpbmdUYWdCdWcgPyBpZTEwSXNEYXRhVmlldyA6IGlzRGF0YVZpZXcpO1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBgQXJyYXkuaXNBcnJheWAuXG4gIHZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCB0YWdUZXN0ZXIoJ0FycmF5Jyk7XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBga2V5YCBpcyBhbiBvd24gcHJvcGVydHkgbmFtZSBvZiBgb2JqYC5cbiAgZnVuY3Rpb24gaGFzJDEob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH1cblxuICB2YXIgaXNBcmd1bWVudHMgPSB0YWdUZXN0ZXIoJ0FyZ3VtZW50cycpO1xuXG4gIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmVcbiAgLy8gdGhlcmUgaXNuJ3QgYW55IGluc3BlY3RhYmxlIFwiQXJndW1lbnRzXCIgdHlwZS5cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYXJndW1lbnRzKSkge1xuICAgICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIGhhcyQxKG9iaiwgJ2NhbGxlZScpO1xuICAgICAgfTtcbiAgICB9XG4gIH0oKSk7XG5cbiAgdmFyIGlzQXJndW1lbnRzJDEgPSBpc0FyZ3VtZW50cztcblxuICAvLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/XG4gIGZ1bmN0aW9uIGlzRmluaXRlJDEob2JqKSB7XG4gICAgcmV0dXJuICFpc1N5bWJvbChvYmopICYmIF9pc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9XG5cbiAgLy8gSXMgdGhlIGdpdmVuIHZhbHVlIGBOYU5gP1xuICBmdW5jdGlvbiBpc05hTiQxKG9iaikge1xuICAgIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopO1xuICB9XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH1cblxuICAvLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLlxuICBmdW5jdGlvbiBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRTaXplUHJvcGVydHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikge1xuICAgICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTtcbiAgICAgIHJldHVybiB0eXBlb2Ygc2l6ZVByb3BlcnR5ID09ICdudW1iZXInICYmIHNpemVQcm9wZXJ0eSA+PSAwICYmIHNpemVQcm9wZXJ0eSA8PSBNQVhfQVJSQVlfSU5ERVg7XG4gICAgfVxuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuXG4gIGZ1bmN0aW9uIHNoYWxsb3dQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGJ5dGVMZW5ndGhgIHByb3BlcnR5IG9mIGFuIG9iamVjdC5cbiAgdmFyIGdldEJ5dGVMZW5ndGggPSBzaGFsbG93UHJvcGVydHkoJ2J5dGVMZW5ndGgnKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNwZW5kIGV4dGVuc2l2ZSBjaGVja3MgYWdhaW5zdFxuICAvLyBgQXJyYXlCdWZmZXJgIGV0IGFsLlxuICB2YXIgaXNCdWZmZXJMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIHR5cGVkIGFycmF5P1xuICB2YXIgdHlwZWRBcnJheVBhdHRlcm4gPSAvXFxbb2JqZWN0ICgoSXxVaSludCg4fDE2fDMyKXxGbG9hdCgzMnw2NCl8VWludDhDbGFtcGVkfEJpZyhJfFVpKW50NjQpQXJyYXlcXF0vO1xuICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7XG4gICAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuXG4gICAgLy8gT3RoZXJ3aXNlLCBmYWxsIGJhY2sgb24gdGhlIGFib3ZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3JDEob2JqKSkgOlxuICAgICAgICAgICAgICAgICAgaXNCdWZmZXJMaWtlKG9iaikgJiYgdHlwZWRBcnJheVBhdHRlcm4udGVzdCh0b1N0cmluZy5jYWxsKG9iaikpO1xuICB9XG5cbiAgdmFyIGlzVHlwZWRBcnJheSQxID0gc3VwcG9ydHNBcnJheUJ1ZmZlciA/IGlzVHlwZWRBcnJheSA6IGNvbnN0YW50KGZhbHNlKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuXG4gIHZhciBnZXRMZW5ndGggPSBzaGFsbG93UHJvcGVydHkoJ2xlbmd0aCcpO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgbG9va3VwIHN0cnVjdHVyZS5cbiAgLy8gYGNvbGxlY3ROb25FbnVtUHJvcHNgIHVzZWQgdG8gZGVwZW5kIG9uIGBfLmNvbnRhaW5zYCwgYnV0IHRoaXMgbGVkIHRvXG4gIC8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3JcbiAgLy8gYXJyYXlzIG9mIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGVtdWxhdGVkU2V0KGtleXMpIHtcbiAgICB2YXIgaGFzaCA9IHt9O1xuICAgIGZvciAodmFyIGwgPSBrZXlzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyArK2kpIGhhc2hba2V5c1tpXV0gPSB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sXG4gICAgICBwdXNoOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaGFzaFtrZXldID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBoZWxwZXIuIENoZWNrcyBga2V5c2AgZm9yIHRoZSBwcmVzZW5jZSBvZiBrZXlzIGluIElFIDwgOSB0aGF0IHdvbid0XG4gIC8vIGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLiBFeHRlbmRzIGBrZXlzYCBpbiBwbGFjZSBpZlxuICAvLyBuZWVkZWQuXG4gIGZ1bmN0aW9uIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKSB7XG4gICAga2V5cyA9IGVtdWxhdGVkU2V0KGtleXMpO1xuICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gICAgdmFyIHByb3RvID0gKGlzRnVuY3Rpb24kMShjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlKSB8fCBPYmpQcm90bztcblxuICAgIC8vIENvbnN0cnVjdG9yIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIHZhciBwcm9wID0gJ2NvbnN0cnVjdG9yJztcbiAgICBpZiAoaGFzJDEob2JqLCBwcm9wKSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkga2V5cy5wdXNoKHByb3ApO1xuXG4gICAgd2hpbGUgKG5vbkVudW1JZHgtLSkge1xuICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTtcbiAgICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSB7XG4gICAgICAgIGtleXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBPYmplY3Qua2V5c2AuXG4gIGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgaWYgKG5hdGl2ZUtleXMpIHJldHVybiBuYXRpdmVLZXlzKG9iaik7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoaGFzJDEob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gICAgLy8gU2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIGNoZWNrcyBpZiBgb2JqYCBoYXMgbm9cbiAgICAvLyBgLmxlbmd0aGAuXG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopO1xuICAgIGlmICh0eXBlb2YgbGVuZ3RoID09ICdudW1iZXInICYmIChcbiAgICAgIGlzQXJyYXkob2JqKSB8fCBpc1N0cmluZyhvYmopIHx8IGlzQXJndW1lbnRzJDEob2JqKVxuICAgICkpIHJldHVybiBsZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIGdldExlbmd0aChrZXlzKG9iaikpID09PSAwO1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YgYGtleTp2YWx1ZWAgcGFpcnMuXG4gIGZ1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LCBhdHRycykge1xuICAgIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gIWxlbmd0aDtcbiAgICB2YXIgb2JqID0gT2JqZWN0KG9iamVjdCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IF9rZXlzW2ldO1xuICAgICAgaWYgKGF0dHJzW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdCBjYW5cbiAgLy8gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIGZ1bmN0aW9ucyBhZGRlZFxuICAvLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLlxuICBmdW5jdGlvbiBfJDEob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8kMSkgcmV0dXJuIG9iajtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXyQxKSkgcmV0dXJuIG5ldyBfJDEob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9XG5cbiAgXyQxLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4gIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LlxuICBfJDEucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gIH07XG5cbiAgLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3hpZXMgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zXG4gIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uXG4gIF8kMS5wcm90b3R5cGUudmFsdWVPZiA9IF8kMS5wcm90b3R5cGUudG9KU09OID0gXyQxLnByb3RvdHlwZS52YWx1ZTtcblxuICBfJDEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLl93cmFwcGVkKTtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byB3cmFwIG9yIHNoYWxsb3ctY29weSBhbiBBcnJheUJ1ZmZlcixcbiAgLy8gdHlwZWQgYXJyYXkgb3IgRGF0YVZpZXcgdG8gYSBuZXcgdmlldywgcmV1c2luZyB0aGUgYnVmZmVyLlxuICBmdW5jdGlvbiB0b0J1ZmZlclZpZXcoYnVmZmVyU291cmNlKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFxuICAgICAgYnVmZmVyU291cmNlLmJ1ZmZlciB8fCBidWZmZXJTb3VyY2UsXG4gICAgICBidWZmZXJTb3VyY2UuYnl0ZU9mZnNldCB8fCAwLFxuICAgICAgZ2V0Qnl0ZUxlbmd0aChidWZmZXJTb3VyY2UpXG4gICAgKTtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIHN0cmluZyB0d2ljZSwgc28gZ2l2ZSBpdCBhIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi5cbiAgdmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYF8uaXNFcXVhbGAuXG4gIGZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7XG4gICAgLy8gSWRlbnRpY2FsIG9iamVjdHMgYXJlIGVxdWFsLiBgMCA9PT0gLTBgLCBidXQgdGhleSBhcmVuJ3QgaWRlbnRpY2FsLlxuICAgIC8vIFNlZSB0aGUgW0hhcm1vbnkgYGVnYWxgIHByb3Bvc2FsXShodHRwczovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICAgIC8vIGBudWxsYCBvciBgdW5kZWZpbmVkYCBvbmx5IGVxdWFsIHRvIGl0c2VsZiAoc3RyaWN0IGNvbXBhcmlzb24pLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICBpZiAoYSAhPT0gYSkgcmV0dXJuIGIgIT09IGI7XG4gICAgLy8gRXhoYXVzdCBwcmltaXRpdmUgY2hlY2tzXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgYTtcbiAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLlxuICBmdW5jdGlvbiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8kMSkgYSA9IGEuX3dyYXBwZWQ7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBfJDEpIGIgPSBiLl93cmFwcGVkO1xuICAgIC8vIENvbXBhcmUgYFtbQ2xhc3NdXWAgbmFtZXMuXG4gICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIElFIDEwIC0gRWRnZSAxMy5cbiAgICBpZiAoaGFzU3RyaW5nVGFnQnVnICYmIGNsYXNzTmFtZSA9PSAnW29iamVjdCBPYmplY3RdJyAmJiBpc0RhdGFWaWV3JDEoYSkpIHtcbiAgICAgIGlmICghaXNEYXRhVmlldyQxKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjbGFzc05hbWUgPSB0YWdEYXRhVmlldztcbiAgICB9XG4gICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLlxuICAgICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09PSArYjtcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6XG4gICAgICAgIHJldHVybiBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYSkgPT09IFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChiKTtcbiAgICAgIGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcbiAgICAgIGNhc2UgdGFnRGF0YVZpZXc6XG4gICAgICAgIC8vIENvZXJjZSB0byB0eXBlZCBhcnJheSBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLlxuICAgICAgICByZXR1cm4gZGVlcEVxKHRvQnVmZmVyVmlldyhhKSwgdG9CdWZmZXJWaWV3KGIpLCBhU3RhY2ssIGJTdGFjayk7XG4gICAgfVxuXG4gICAgdmFyIGFyZUFycmF5cyA9IGNsYXNzTmFtZSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkkMShhKSkge1xuICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IGdldEJ5dGVMZW5ndGgoYSk7XG4gICAgICAgIGlmIChieXRlTGVuZ3RoICE9PSBnZXRCeXRlTGVuZ3RoKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlO1xuICAgICAgICBhcmVBcnJheXMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgaWYgKHR5cGVvZiBhICE9ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgc1xuICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgIHZhciBhQ3RvciA9IGEuY29uc3RydWN0b3IsIGJDdG9yID0gYi5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uJDEoYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uJDEoYkN0b3IpICYmIGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmICgnY29uc3RydWN0b3InIGluIGEgJiYgJ2NvbnN0cnVjdG9yJyBpbiBiKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWNcbiAgICAvLyBzdHJ1Y3R1cmVzIGlzIGFkYXB0ZWQgZnJvbSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLCBhYnN0cmFjdCBvcGVyYXRpb24gYEpPYC5cblxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wdXNoKGEpO1xuICAgIGJTdGFjay5wdXNoKGIpO1xuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWVwIGNvbXBhcmUgb2JqZWN0cy5cbiAgICAgIHZhciBfa2V5cyA9IGtleXMoYSksIGtleTtcbiAgICAgIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICAgIC8vIEVuc3VyZSB0aGF0IGJvdGggb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wYXJpbmcgZGVlcCBlcXVhbGl0eS5cbiAgICAgIGlmIChrZXlzKGIpLmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyXG4gICAgICAgIGtleSA9IF9rZXlzW2xlbmd0aF07XG4gICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLlxuICBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgICByZXR1cm4gZXEoYSwgYik7XG4gIH1cblxuICAvLyBSZXRyaWV2ZSBhbGwgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBhbGxLZXlzKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIFtdO1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gICAgLy8gQWhlbSwgSUUgPCA5LlxuICAgIGlmIChoYXNFbnVtQnVnKSBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cyk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cblxuICAvLyBTaW5jZSB0aGUgcmVndWxhciBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdHlwZSB0ZXN0cyBkb24ndCB3b3JrIGZvclxuICAvLyBzb21lIHR5cGVzIGluIElFIDExLCB3ZSB1c2UgYSBmaW5nZXJwcmludGluZyBoZXVyaXN0aWMgaW5zdGVhZCwgYmFzZWRcbiAgLy8gb24gdGhlIG1ldGhvZHMuIEl0J3Mgbm90IGdyZWF0LCBidXQgaXQncyB0aGUgYmVzdCB3ZSBnb3QuXG4gIC8vIFRoZSBmaW5nZXJwcmludCBtZXRob2QgbGlzdHMgYXJlIGRlZmluZWQgYmVsb3cuXG4gIGZ1bmN0aW9uIGllMTFmaW5nZXJwcmludChtZXRob2RzKSB7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChtZXRob2RzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGhhdmUgbm8gZW51bWVyYWJsZSBrZXlzLlxuICAgICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgICBpZiAoZ2V0TGVuZ3RoKGtleXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNGdW5jdGlvbiQxKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QgYFdlYWtNYXBgLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0XG4gICAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoXG4gICAgICAvLyBpdCBmcm9tIGEgcmVndWxhciBgTWFwYC5cbiAgICAgIHJldHVybiBtZXRob2RzICE9PSB3ZWFrTWFwTWV0aG9kcyB8fCAhaXNGdW5jdGlvbiQxKG9ialtmb3JFYWNoTmFtZV0pO1xuICAgIH07XG4gIH1cblxuICAvLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlXG4gIC8vIGVhY2ggc3RyaW5nIGluIHRoZSBmaW5nZXJwcmludHMgb25seSBvbmNlLlxuICB2YXIgZm9yRWFjaE5hbWUgPSAnZm9yRWFjaCcsXG4gICAgICBoYXNOYW1lID0gJ2hhcycsXG4gICAgICBjb21tb25Jbml0ID0gWydjbGVhcicsICdkZWxldGUnXSxcbiAgICAgIG1hcFRhaWwgPSBbJ2dldCcsIGhhc05hbWUsICdzZXQnXTtcblxuICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBlYWNoIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50XG4gIC8vIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgc3VibGlzdHMuXG4gIHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLFxuICAgICAgd2Vha01hcE1ldGhvZHMgPSBjb21tb25Jbml0LmNvbmNhdChtYXBUYWlsKSxcbiAgICAgIHNldE1ldGhvZHMgPSBbJ2FkZCddLmNvbmNhdChjb21tb25Jbml0LCBmb3JFYWNoTmFtZSwgaGFzTmFtZSk7XG5cbiAgdmFyIGlzTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KG1hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdNYXAnKTtcblxuICB2YXIgaXNXZWFrTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpO1xuXG4gIHZhciBpc1NldCA9IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChzZXRNZXRob2RzKSA6IHRhZ1Rlc3RlcignU2V0Jyk7XG5cbiAgdmFyIGlzV2Vha1NldCA9IHRhZ1Rlc3RlcignV2Vha1NldCcpO1xuXG4gIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gdmFsdWVzKG9iaikge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tpXSA9IG9ialtfa2V5c1tpXV07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvLyBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBgW2tleSwgdmFsdWVdYCBwYWlycy5cbiAgLy8gVGhlIG9wcG9zaXRlIG9mIGBfLm9iamVjdGAgd2l0aCBvbmUgYXJndW1lbnQuXG4gIGZ1bmN0aW9uIHBhaXJzKG9iaikge1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgIHZhciBwYWlycyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcGFpcnNbaV0gPSBbX2tleXNbaV0sIG9ialtfa2V5c1tpXV1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIGZ1bmN0aW9uIGludmVydChvYmopIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W29ialtfa2V5c1tpXV1dID0gX2tleXNbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmopIHtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbiQxKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZXMuc29ydCgpO1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0Z1bmMsIGRlZmF1bHRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoZGVmYXVsdHMpIG9iaiA9IE9iamVjdChvYmopO1xuICAgICAgaWYgKGxlbmd0aCA8IDIgfHwgb2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdLFxuICAgICAgICAgICAga2V5cyA9IGtleXNGdW5jKHNvdXJjZSksXG4gICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gIH1cblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgdmFyIGV4dGVuZCA9IGNyZWF0ZUFzc2lnbmVyKGFsbEtleXMpO1xuXG4gIC8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW5cbiAgLy8gb2JqZWN0KHMpLlxuICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbilcbiAgdmFyIGV4dGVuZE93biA9IGNyZWF0ZUFzc2lnbmVyKGtleXMpO1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIHZhciBkZWZhdWx0cyA9IGNyZWF0ZUFzc2lnbmVyKGFsbEtleXMsIHRydWUpO1xuXG4gIC8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy5cbiAgZnVuY3Rpb24gY3RvcigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXt9O1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci5cbiAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90b3R5cGUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTtcbiAgICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgdmFyIEN0b3IgPSBjdG9yKCk7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yO1xuICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBnaXZlbiBwcm90b3R5cGUgb2JqZWN0LlxuICAvLyBJZiBhZGRpdGlvbmFsIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkIHRoZW4gdGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuICAvLyBjcmVhdGVkIG9iamVjdC5cbiAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpO1xuICAgIGlmIChwcm9wcykgZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDcmVhdGUgYSAoc2hhbGxvdy1jbG9uZWQpIGR1cGxpY2F0ZSBvZiBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIGNsb25lKG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBleHRlbmQoe30sIG9iaik7XG4gIH1cblxuICAvLyBJbnZva2VzIGBpbnRlcmNlcHRvcmAgd2l0aCB0aGUgYG9iamAgYW5kIHRoZW4gcmV0dXJucyBgb2JqYC5cbiAgLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4sIGluXG4gIC8vIG9yZGVyIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBpbnRlcm1lZGlhdGUgcmVzdWx0cyB3aXRoaW4gdGhlIGNoYWluLlxuICBmdW5jdGlvbiB0YXAob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBhIChkZWVwKSBwcm9wZXJ0eSBgcGF0aGAgdG8gYXJyYXkuXG4gIC8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLlxuICBmdW5jdGlvbiB0b1BhdGgkMShwYXRoKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdO1xuICB9XG4gIF8kMS50b1BhdGggPSB0b1BhdGgkMTtcblxuICAvLyBJbnRlcm5hbCB3cmFwcGVyIGZvciBgXy50b1BhdGhgIHRvIGVuYWJsZSBtaW5pZmljYXRpb24uXG4gIC8vIFNpbWlsYXIgdG8gYGNiYCBmb3IgYF8uaXRlcmF0ZWVgLlxuICBmdW5jdGlvbiB0b1BhdGgocGF0aCkge1xuICAgIHJldHVybiBfJDEudG9QYXRoKHBhdGgpO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC5cbiAgZnVuY3Rpb24gZGVlcEdldChvYmosIHBhdGgpIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdm9pZCAwO1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoID8gb2JqIDogdm9pZCAwO1xuICB9XG5cbiAgLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgKGRlZXApIHByb3BlcnR5IG9uIGBwYXRoYCBmcm9tIGBvYmplY3RgLlxuICAvLyBJZiBhbnkgcHJvcGVydHkgaW4gYHBhdGhgIGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSB2YWx1ZSBpc1xuICAvLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuXG4gIC8vIFRoZSBgcGF0aGAgaXMgbm9ybWFsaXplZCB0aHJvdWdoIGBfLnRvUGF0aGAuXG4gIGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgfVxuXG4gIC8vIFNob3J0Y3V0IGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcHJvcGVydHkgZGlyZWN0bHkgb25cbiAgLy8gaXRzZWxmIChpbiBvdGhlciB3b3Jkcywgbm90IG9uIGEgcHJvdG90eXBlKS4gVW5saWtlIHRoZSBpbnRlcm5hbCBgaGFzYFxuICAvLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy5cbiAgZnVuY3Rpb24gaGFzKG9iaiwgcGF0aCkge1xuICAgIHBhdGggPSB0b1BhdGgocGF0aCk7XG4gICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgICAgaWYgKCFoYXMkMShvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gISFsZW5ndGg7XG4gIH1cblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLlxuICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZlxuICAvLyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gbWF0Y2hlcihhdHRycykge1xuICAgIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIGlzTWF0Y2gob2JqLCBhdHRycyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIHBhc3NlZCBhbiBvYmplY3QsIHdpbGwgdHJhdmVyc2UgdGhhdCBvYmplY3TigJlzXG4gIC8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLlxuICBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gZGVlcEdldChvYmosIHBhdGgpO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZWZmaWNpZW50IChmb3IgY3VycmVudCBlbmdpbmVzKSB2ZXJzaW9uXG4gIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlXG4gIC8vIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gb3B0aW1pemVDYihmdW5jLCBjb250ZXh0LCBhcmdDb3VudCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jO1xuICAgIHN3aXRjaCAoYXJnQ291bnQgPT0gbnVsbCA/IDMgOiBhcmdDb3VudCkge1xuICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgLy8gVGhlIDItYXJndW1lbnQgY2FzZSBpcyBvbWl0dGVkIGJlY2F1c2Ugd2XigJlyZSBub3QgdXNpbmcgaXQuXG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2hcbiAgLy8gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlciBgXy5pZGVudGl0eWAsXG4gIC8vIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLlxuICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkgcmV0dXJuIG1hdGNoZXIodmFsdWUpO1xuICAgIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICAvLyBFeHRlcm5hbCB3cmFwcGVyIGZvciBvdXIgY2FsbGJhY2sgZ2VuZXJhdG9yLiBVc2VycyBtYXkgY3VzdG9taXplXG4gIC8vIGBfLml0ZXJhdGVlYCBpZiB0aGV5IHdhbnQgYWRkaXRpb25hbCBwcmVkaWNhdGUvaXRlcmF0ZWUgc2hvcnRoYW5kIHN0eWxlcy5cbiAgLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBgYXJnQ291bnRgIGFyZ3VtZW50LlxuICBmdW5jdGlvbiBpdGVyYXRlZSh2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIEluZmluaXR5KTtcbiAgfVxuICBfJDEuaXRlcmF0ZWUgPSBpdGVyYXRlZTtcblxuICAvLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXNcbiAgLy8gYF8uaXRlcmF0ZWVgIGlmIG92ZXJyaWRkZW4sIG90aGVyd2lzZSBgYmFzZUl0ZXJhdGVlYC5cbiAgZnVuY3Rpb24gY2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKF8kMS5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfJDEuaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLlxuICAvLyBJbiBjb250cmFzdCB0byBgXy5tYXBgIGl0IHJldHVybnMgYW4gb2JqZWN0LlxuICBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLFxuICAgICAgICByZXN1bHRzID0ge307XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07XG4gICAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBmdW5jdGlvbiBub29wKCl7fVxuXG4gIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgZnVuY3Rpb24gcHJvcGVydHlPZihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBub29wO1xuICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gZ2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLlxuICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgIChpbmNsdXNpdmUpLlxuICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09IG51bGwpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpO1xuICB9XG5cbiAgLy8gQSAocG9zc2libHkgZmFzdGVyKSB3YXkgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBhcyBhbiBpbnRlZ2VyLlxuICB2YXIgbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3NcbiAgLy8gdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uXG4gIGZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7XG4gICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hcFttYXRjaF07XG4gICAgfTtcbiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuXG4gICAgdmFyIHNvdXJjZSA9ICcoPzonICsga2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJztcbiAgICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpO1xuICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7XG4gICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZztcbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy5cbiAgdmFyIGVzY2FwZU1hcCA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICdgJzogJyYjeDYwOydcbiAgfTtcblxuICAvLyBGdW5jdGlvbiBmb3IgZXNjYXBpbmcgc3RyaW5ncyB0byBIVE1MIGludGVycG9sYXRpb24uXG4gIHZhciBfZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApO1xuXG4gIC8vIEludGVybmFsIGxpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgdW5lc2NhcGluZy5cbiAgdmFyIHVuZXNjYXBlTWFwID0gaW52ZXJ0KGVzY2FwZU1hcCk7XG5cbiAgLy8gRnVuY3Rpb24gZm9yIHVuZXNjYXBpbmcgc3RyaW5ncyBmcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIF91bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApO1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycy4gQ2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIHZhciB0ZW1wbGF0ZVNldHRpbmdzID0gXyQxLnRlbXBsYXRlU2V0dGluZ3MgPSB7XG4gICAgZXZhbHVhdGU6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGU6IC88JT0oW1xcc1xcU10rPyklPi9nLFxuICAgIGVzY2FwZTogLzwlLShbXFxzXFxTXSs/KSU+L2dcbiAgfTtcblxuICAvLyBXaGVuIGN1c3RvbWl6aW5nIGBfLnRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW5cbiAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpc1xuICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC5cbiAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87XG5cbiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGFcbiAgLy8gc3RyaW5nIGxpdGVyYWwuXG4gIHZhciBlc2NhcGVzID0ge1xuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAgICdcXHUyMDI5JzogJ3UyMDI5J1xuICB9O1xuXG4gIHZhciBlc2NhcGVSZWdFeHAgPSAvXFxcXHwnfFxccnxcXG58XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgZnVuY3Rpb24gZXNjYXBlQ2hhcihtYXRjaCkge1xuICAgIHJldHVybiAnXFxcXCcgKyBlc2NhcGVzW21hdGNoXTtcbiAgfVxuXG4gIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24gdGhyb3VnaFxuICAvLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhclxuICAvLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWRcbiAgLy8gaWRlbnRpZmllcnMsIGJ1dCBzdGlsbCBwcmV2ZW50cyBwb3NzaWJsZSBsb29waG9sZXMgdGhyb3VnaCBkZWZhdWx0cyBvclxuICAvLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuXG4gIHZhciBiYXJlSWRlbnRpZmllciA9IC9eXFxzKihcXHd8XFwkKStcXHMqJC87XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZXh0LCBzZXR0aW5ncywgb2xkU2V0dGluZ3MpIHtcbiAgICBpZiAoIXNldHRpbmdzICYmIG9sZFNldHRpbmdzKSBzZXR0aW5ncyA9IG9sZFNldHRpbmdzO1xuICAgIHNldHRpbmdzID0gZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfJDEudGVtcGxhdGVTZXR0aW5ncyk7XG5cbiAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi5cbiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbXG4gICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsXG4gICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlXG4gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpO1xuXG4gICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS5cbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzb3VyY2UgPSBcIl9fcCs9J1wiO1xuICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkge1xuICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpO1xuICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgIGlmIChlc2NhcGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBlc2NhcGUgKyBcIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZSArIFwiXFxuX19wKz0nXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkb2JlIFZNcyBuZWVkIHRoZSBtYXRjaCByZXR1cm5lZCB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IG9mZnNldC5cbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9KTtcbiAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7XG4gICAgaWYgKGFyZ3VtZW50KSB7XG4gICAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KVxuICAgICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSkgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuXG4gICAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcXG4nICsgc291cmNlICsgJ31cXG4nO1xuICAgICAgYXJndW1lbnQgPSAnb2JqJztcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgJ3JldHVybiBfX3A7XFxuJztcblxuICAgIHZhciByZW5kZXI7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyQxKTtcbiAgICB9O1xuXG4gICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLlxuICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXRcbiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsXG4gIC8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuXG4gIGZ1bmN0aW9uIHJlc3VsdChvYmosIHBhdGgsIGZhbGxiYWNrKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgIHJldHVybiBpc0Z1bmN0aW9uJDEoZmFsbGJhY2spID8gZmFsbGJhY2suY2FsbChvYmopIDogZmFsbGJhY2s7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpbcGF0aFtpXV07XG4gICAgICBpZiAocHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHByb3AgPSBmYWxsYmFjaztcbiAgICAgICAgaSA9IGxlbmd0aDsgLy8gRW5zdXJlIHdlIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZy5cbiAgICAgIH1cbiAgICAgIG9iaiA9IGlzRnVuY3Rpb24kMShwcm9wKSA/IHByb3AuY2FsbChvYmopIDogcHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGludGVnZXIgaWQgKHVuaXF1ZSB3aXRoaW4gdGhlIGVudGlyZSBjbGllbnQgc2Vzc2lvbikuXG4gIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuXG4gIHZhciBpZENvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9XG5cbiAgLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBmdW5jdGlvbiBjaGFpbihvYmopIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBfJDEob2JqKTtcbiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYHNvdXJjZUZ1bmNgIGJvdW5kIHRvIGBjb250ZXh0YCB3aXRoIG9wdGlvbmFsXG4gIC8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGFcbiAgLy8gbm9ybWFsIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBleGVjdXRlQm91bmQoc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykge1xuICAgIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTtcbiAgICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHNcbiAgLy8gYXJndW1lbnRzIHByZS1maWxsZWQsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGR5bmFtaWMgYHRoaXNgIGNvbnRleHQuIGBfYCBhY3RzXG4gIC8vIGFzIGEgcGxhY2Vob2xkZXIgYnkgZGVmYXVsdCwgYWxsb3dpbmcgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB0byBiZVxuICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LlxuICB2YXIgcGFydGlhbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgYm91bmRBcmdzKSB7XG4gICAgdmFyIHBsYWNlaG9sZGVyID0gcGFydGlhbC5wbGFjZWhvbGRlcjtcbiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGJvdW5kQXJncy5sZW5ndGg7XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaV0gPSBib3VuZEFyZ3NbaV0gPT09IHBsYWNlaG9sZGVyID8gYXJndW1lbnRzW3Bvc2l0aW9uKytdIDogYm91bmRBcmdzW2ldO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7XG4gICAgICByZXR1cm4gZXhlY3V0ZUJvdW5kKGZ1bmMsIGJvdW5kLCB0aGlzLCB0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiBib3VuZDtcbiAgfSk7XG5cbiAgcGFydGlhbC5wbGFjZWhvbGRlciA9IF8kMTtcblxuICAvLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cyxcbiAgLy8gb3B0aW9uYWxseSkuXG4gIHZhciBiaW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCFpc0Z1bmN0aW9uJDEoZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpO1xuICAgIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KGNhbGxBcmdzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb25cbiAgLy8gc2hvdWxkIGJlIGl0ZXJhdGVkIGFzIGFuIGFycmF5IG9yIGFzIGFuIG9iamVjdC5cbiAgLy8gUmVsYXRlZDogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLXRvbGVuZ3RoXG4gIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0XG4gIHZhciBpc0FycmF5TGlrZSA9IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldExlbmd0aCk7XG5cbiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBmbGF0dGVuJDEoaW5wdXQsIGRlcHRoLCBzdHJpY3QsIG91dHB1dCkge1xuICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcbiAgICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7XG4gICAgICBkZXB0aCA9IEluZmluaXR5O1xuICAgIH0gZWxzZSBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpO1xuICAgIH1cbiAgICB2YXIgaWR4ID0gb3V0cHV0Lmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzJDEodmFsdWUpKSkge1xuICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC5cbiAgICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAgIGZsYXR0ZW4kMSh2YWx1ZSwgZGVwdGggLSAxLCBzdHJpY3QsIG91dHB1dCk7XG4gICAgICAgICAgaWR4ID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaiA9IDAsIGxlbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCkge1xuICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHNcbiAgLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzXG4gIC8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC5cbiAgdmFyIGJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9KTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikge1xuICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlO1xuICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7XG4gICAgICBpZiAoIWhhcyQxKGNhY2hlLCBhZGRyZXNzKSkgY2FjaGVbYWRkcmVzc10gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gY2FjaGVbYWRkcmVzc107XG4gICAgfTtcbiAgICBtZW1vaXplLmNhY2hlID0ge307XG4gICAgcmV0dXJuIG1lbW9pemU7XG4gIH1cblxuICAvLyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzXG4gIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC5cbiAgdmFyIGRlbGF5ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9LCB3YWl0KTtcbiAgfSk7XG5cbiAgLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzXG4gIC8vIGNsZWFyZWQuXG4gIHZhciBkZWZlciA9IHBhcnRpYWwoZGVsYXksIF8kMSwgMSk7XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCB3aGVuIGludm9rZWQsIHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgYXQgbW9zdCBvbmNlXG4gIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1blxuICAvLyBhcyBtdWNoIGFzIGl0IGNhbiwgd2l0aG91dCBldmVyIGdvaW5nIG1vcmUgdGhhbiBvbmNlIHBlciBgd2FpdGAgZHVyYXRpb247XG4gIC8vIGJ1dCBpZiB5b3UnZCBsaWtlIHRvIGRpc2FibGUgdGhlIGV4ZWN1dGlvbiBvbiB0aGUgbGVhZGluZyBlZGdlLCBwYXNzXG4gIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLlxuICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRpbWVvdXQsIGNvbnRleHQsIGFyZ3MsIHJlc3VsdDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIF9ub3cgPSBub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBfbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAoX25vdyAtIHByZXZpb3VzKTtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gX25vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRocm90dGxlZDtcbiAgfVxuXG4gIC8vIFdoZW4gYSBzZXF1ZW5jZSBvZiBjYWxscyBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gZW5kcywgdGhlIGFyZ3VtZW50XG4gIC8vIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhlIGVuZCBvZiBhIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgdGhlIGB3YWl0YFxuICAvLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmVcbiAgLy8gdHJpZ2dlcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGluc3RlYWQgb2YgYXQgdGhlIGVuZC5cbiAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBwYXNzZWQgPSBub3coKSAtIHByZXZpb3VzO1xuICAgICAgaWYgKHdhaXQgPiBwYXNzZWQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBwYXNzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIGBmdW5jYCBjYW4gcmVjdXJzaXZlbHkgaW52b2tlIGBkZWJvdW5jZWRgLlxuICAgICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGRlYm91bmNlZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oX2FyZ3MpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgYXJncyA9IF9hcmdzO1xuICAgICAgcHJldmlvdXMgPSBub3coKTtcbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgZGVib3VuY2VkLmNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLFxuICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kXG4gIC8vIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIHdyYXAoZnVuYywgd3JhcHBlcikge1xuICAgIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS5cbiAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0YXJ0ID0gYXJncy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gc3RhcnQ7XG4gICAgICB2YXIgcmVzdWx0ID0gYXJnc1tzdGFydF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uIGFuZCBhZnRlciB0aGUgTnRoIGNhbGwuXG4gIGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPCAxKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZVxuICAvLyBOdGggY2FsbC5cbiAgZnVuY3Rpb24gYmVmb3JlKHRpbWVzLCBmdW5jKSB7XG4gICAgdmFyIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGltZXMgPiAwKSB7XG4gICAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIHZhciBvbmNlID0gcGFydGlhbChiZWZvcmUsIDIpO1xuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGtleSBvbiBhbiBvYmplY3QgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaW5kS2V5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaiksIGtleTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IF9rZXlzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShvYmpba2V5XSwga2V5LCBvYmopKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLlxuICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikge1xuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgdmFyIGZpbmRJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpO1xuXG4gIC8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIHZhciBmaW5kTGFzdEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7XG4gICAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsb3c7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgYF8uaW5kZXhPZmAgYW5kIGBfLmxhc3RJbmRleE9mYCBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluZGV4RmluZGVyKGRpciwgcHJlZGljYXRlRmluZCwgc29ydGVkSW5kZXgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkge1xuICAgICAgdmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpO1xuICAgICAgaWYgKHR5cGVvZiBpZHggPT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRpciA+IDApIHtcbiAgICAgICAgICBpID0gaWR4ID49IDAgPyBpZHggOiBNYXRoLm1heChpZHggKyBsZW5ndGgsIGkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ydGVkSW5kZXggJiYgaWR4ICYmIGxlbmd0aCkge1xuICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBhcnJheVtpZHhdID09PSBpdGVtID8gaWR4IDogLTE7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICBpZHggPSBwcmVkaWNhdGVGaW5kKHNsaWNlLmNhbGwoYXJyYXksIGksIGxlbmd0aCksIGlzTmFOJDEpO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyBpIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKGlkeCA9IGRpciA+IDAgPyBpIDogbGVuZ3RoIC0gMTsgaWR4ID49IDAgJiYgaWR4IDwgbGVuZ3RoOyBpZHggKz0gZGlyKSB7XG4gICAgICAgIGlmIChhcnJheVtpZHhdID09PSBpdGVtKSByZXR1cm4gaWR4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIC8vIElmIHRoZSBhcnJheSBpcyBsYXJnZSBhbmQgYWxyZWFkeSBpbiBzb3J0IG9yZGVyLCBwYXNzIGB0cnVlYFxuICAvLyBmb3IgKippc1NvcnRlZCoqIHRvIHVzZSBiaW5hcnkgc2VhcmNoLlxuICB2YXIgaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpO1xuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LFxuICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICB2YXIgbGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgZmluZExhc3RJbmRleCk7XG5cbiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBmaW5kKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIGtleUZpbmRlciA9IGlzQXJyYXlMaWtlKG9iaikgPyBmaW5kSW5kZXggOiBmaW5kS2V5O1xuICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbmRgOiBnZXR0aW5nIHRoZSBmaXJzdFxuICAvLyBvYmplY3QgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gZmluZChvYmosIG1hdGNoZXIoYXR0cnMpKTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYFxuICAvLyBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC5cbiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbFxuICAvLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLlxuICBmdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciBpLCBsZW5ndGg7XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTtcbiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuXG4gIGZ1bmN0aW9uIG1hcChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSByZWR1Y2luZyBmdW5jdGlvbiwgaXRlcmF0aW5nIGxlZnQgb3IgcmlnaHQuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShkaXIpIHtcbiAgICAvLyBXcmFwIGNvZGUgdGhhdCByZWFzc2lnbnMgYXJndW1lbnQgdmFyaWFibGVzIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdGhhblxuICAgIC8vIHRoZSBvbmUgdGhhdCBhY2Nlc3NlcyBgYXJndW1lbnRzLmxlbmd0aGAgdG8gYXZvaWQgYSBwZXJmIGhpdC4gKCMxOTkxKVxuICAgIHZhciByZWR1Y2VyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgaW5pdGlhbCkge1xuICAgICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLFxuICAgICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGRpciA+IDAgPyAwIDogbGVuZ3RoIC0gMTtcbiAgICAgIGlmICghaW5pdGlhbCkge1xuICAgICAgICBtZW1vID0gb2JqW19rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBkaXI7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkge1xuICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7XG4gICAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gKipSZWR1Y2UqKiBidWlsZHMgdXAgYSBzaW5nbGUgcmVzdWx0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYWthIGBpbmplY3RgLFxuICAvLyBvciBgZm9sZGxgLlxuICB2YXIgcmVkdWNlID0gY3JlYXRlUmVkdWNlKDEpO1xuXG4gIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLlxuICB2YXIgcmVkdWNlUmlnaHQgPSBjcmVhdGVSZWR1Y2UoLTEpO1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbHRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSB0cnV0aCB0ZXN0IGZhaWxzLlxuICBmdW5jdGlvbiByZWplY3Qob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgcGFzcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGV2ZXJ5KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAoIXByZWRpY2F0ZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICBmdW5jdGlvbiBzb21lKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLlxuICBmdW5jdGlvbiBjb250YWlucyhvYmosIGl0ZW0sIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopO1xuICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwO1xuICAgIHJldHVybiBpbmRleE9mKG9iaiwgaXRlbSwgZnJvbUluZGV4KSA+PSAwO1xuICB9XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIHZhciBpbnZva2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwgcGF0aCwgYXJncykge1xuICAgIHZhciBjb250ZXh0UGF0aCwgZnVuYztcbiAgICBpZiAoaXNGdW5jdGlvbiQxKHBhdGgpKSB7XG4gICAgICBmdW5jID0gcGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICAgIGNvbnRleHRQYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gICAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbWFwKG9iaiwgZnVuY3Rpb24oY29udGV4dCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7XG4gICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICBpZiAoY29udGV4dFBhdGggJiYgY29udGV4dFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kID09IG51bGwgPyBtZXRob2QgOiBtZXRob2QuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS5cbiAgZnVuY3Rpb24gcGx1Y2sob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gbWFwKG9iaiwgcHJvcGVydHkoa2V5KSk7XG4gIH1cblxuICAvLyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mIGBfLmZpbHRlcmA6IHNlbGVjdGluZyBvbmx5XG4gIC8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gd2hlcmUob2JqLCBhdHRycykge1xuICAgIHJldHVybiBmaWx0ZXIob2JqLCBtYXRjaGVyKGF0dHJzKSk7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdCA9IC1JbmZpbml0eSwgbGFzdENvbXB1dGVkID0gLUluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLlxuICBmdW5jdGlvbiBtaW4ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7XG4gICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7XG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpO1xuICAgICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gU2FmZWx5IGNyZWF0ZSBhIHJlYWwsIGxpdmUgYXJyYXkgZnJvbSBhbnl0aGluZyBpdGVyYWJsZS5cbiAgdmFyIHJlU3RyU3ltYm9sID0gL1teXFx1ZDgwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdfFtcXHVkODAwLVxcdWRmZmZdL2c7XG4gIGZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gICAgaWYgKCFvYmopIHJldHVybiBbXTtcbiAgICBpZiAoaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuXG4gICAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7XG4gICAgcmV0dXJuIHZhbHVlcyhvYmopO1xuICB9XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIHNhbXBsZShvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbcmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHZhciBzYW1wbGUgPSB0b0FycmF5KG9iaik7XG4gICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChzYW1wbGUpO1xuICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTtcbiAgICB2YXIgbGFzdCA9IGxlbmd0aCAtIDE7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG47IGluZGV4KyspIHtcbiAgICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTtcbiAgICAgIHZhciB0ZW1wID0gc2FtcGxlW2luZGV4XTtcbiAgICAgIHNhbXBsZVtpbmRleF0gPSBzYW1wbGVbcmFuZF07XG4gICAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wO1xuICAgIH1cbiAgICByZXR1cm4gc2FtcGxlLnNsaWNlKDAsIG4pO1xuICB9XG5cbiAgLy8gU2h1ZmZsZSBhIGNvbGxlY3Rpb24uXG4gIGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7XG4gICAgcmV0dXJuIHNhbXBsZShvYmosIEluZmluaXR5KTtcbiAgfVxuXG4gIC8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS5cbiAgZnVuY3Rpb24gc29ydEJ5KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBwbHVjayhtYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBsaXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGluZGV4OiBpbmRleCsrLFxuICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdClcbiAgICAgIH07XG4gICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhO1xuICAgICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTtcbiAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICAgIH0pLCAndmFsdWUnKTtcbiAgfVxuXG4gIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgZm9yIGFnZ3JlZ2F0ZSBcImdyb3VwIGJ5XCIgb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gZ3JvdXAoYmVoYXZpb3IsIHBhcnRpdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTtcbiAgICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopO1xuICAgICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICAvLyBHcm91cHMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbi4gUGFzcyBlaXRoZXIgYSBzdHJpbmcgYXR0cmlidXRlXG4gIC8vIHRvIGdyb3VwIGJ5LCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY3JpdGVyaW9uLlxuICB2YXIgZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgIGlmIChoYXMkMShyZXN1bHQsIGtleSkpIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOyBlbHNlIHJlc3VsdFtrZXldID0gW3ZhbHVlXTtcbiAgfSk7XG5cbiAgLy8gSW5kZXhlcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLCBzaW1pbGFyIHRvIGBfLmdyb3VwQnlgLCBidXQgZm9yXG4gIC8vIHdoZW4geW91IGtub3cgdGhhdCB5b3VyIGluZGV4IHZhbHVlcyB3aWxsIGJlIHVuaXF1ZS5cbiAgdmFyIGluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICAvLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3NcbiAgLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gIC8vIGNyaXRlcmlvbi5cbiAgdmFyIGNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaGFzJDEocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTtcbiAgfSk7XG5cbiAgLy8gU3BsaXQgYSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5czogb25lIHdob3NlIGVsZW1lbnRzIGFsbCBwYXNzIHRoZSBnaXZlblxuICAvLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC5cbiAgdmFyIHBhcnRpdGlvbiA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIHBhc3MpIHtcbiAgICByZXN1bHRbcGFzcyA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBjb2xsZWN0aW9uLlxuICBmdW5jdGlvbiBzaXplKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDoga2V5cyhvYmopLmxlbmd0aDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGBfLnBpY2tgIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBga2V5YCBpcyBhbiBlbnVtZXJhYmxlXG4gIC8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG4gIGZ1bmN0aW9uIGtleUluT2JqKHZhbHVlLCBrZXksIG9iaikge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IG9ubHkgY29udGFpbmluZyB0aGUgYWxsb3dlZCBwcm9wZXJ0aWVzLlxuICB2YXIgcGljayA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9LCBpdGVyYXRlZSA9IGtleXNbMF07XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGtleXNbMV0pO1xuICAgICAga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBrZXlJbk9iajtcbiAgICAgIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTtcbiAgICAgIG9iaiA9IE9iamVjdChvYmopO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGlmIChpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmopKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgZGlzYWxsb3dlZCBwcm9wZXJ0aWVzLlxuICB2YXIgb21pdCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAgdmFyIGl0ZXJhdGVlID0ga2V5c1swXSwgY29udGV4dDtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKGl0ZXJhdGVlKSkge1xuICAgICAgaXRlcmF0ZWUgPSBuZWdhdGUoaXRlcmF0ZWUpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBtYXAoZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSksIFN0cmluZyk7XG4gICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuICFjb250YWlucyhrZXlzLCBrZXkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBpY2sob2JqLCBpdGVyYXRlZSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpblxuICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLlxuICBmdW5jdGlvbiBpbml0aWFsKGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gdGhlIGZpcnN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIGZpcnN0KGFycmF5LCBuLCBndWFyZCkge1xuICAgIGlmIChhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA8IDEpIHJldHVybiBuID09IG51bGwgfHwgZ3VhcmQgPyB2b2lkIDAgOiBbXTtcbiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07XG4gICAgcmV0dXJuIGluaXRpYWwoYXJyYXksIGFycmF5Lmxlbmd0aCAtIG4pO1xuICB9XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgZW50cnkgb2YgdGhlIGBhcnJheWAuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm4gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlXG4gIC8vIGBhcnJheWAuXG4gIGZ1bmN0aW9uIHJlc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE5cbiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS5cbiAgZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7XG4gIH1cblxuICAvLyBUcmltIG91dCBhbGwgZmFsc3kgdmFsdWVzIGZyb20gYW4gYXJyYXkuXG4gIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTtcbiAgfVxuXG4gIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLlxuICAvLyBQYXNzaW5nIGB0cnVlYCBvciBgZmFsc2VgIGFzIGBkZXB0aGAgbWVhbnMgYDFgIG9yIGBJbmZpbml0eWAsIHJlc3BlY3RpdmVseS5cbiAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSwgZGVwdGgpIHtcbiAgICByZXR1cm4gZmxhdHRlbiQxKGFycmF5LCBkZXB0aCwgZmFsc2UpO1xuICB9XG5cbiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLlxuICAvLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLlxuICB2YXIgZGlmZmVyZW5jZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHtcbiAgICByZXN0ID0gZmxhdHRlbiQxKHJlc3QsIHRydWUsIHRydWUpO1xuICAgIHJldHVybiBmaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgdmFyIHdpdGhvdXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCBvdGhlckFycmF5cykge1xuICAgIHJldHVybiBkaWZmZXJlbmNlKGFycmF5LCBvdGhlckFycmF5cyk7XG4gIH0pO1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gVGhlIGZhc3RlciBhbGdvcml0aG0gd2lsbCBub3Qgd29yayB3aXRoIGFuIGl0ZXJhdGVlIGlmIHRoZSBpdGVyYXRlZVxuICAvLyBpcyBub3QgYSBvbmUtdG8tb25lIGZ1bmN0aW9uLCBzbyBwcm92aWRpbmcgYW4gaXRlcmF0ZWUgd2lsbCBkaXNhYmxlXG4gIC8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLlxuICBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzQm9vbGVhbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTtcbiAgICAgIGl0ZXJhdGVlID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0ZWUgIT0gbnVsbCkgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBzZWVuID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaV0sXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTtcbiAgICAgIGlmIChpc1NvcnRlZCAmJiAhaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFpIHx8IHNlZW4gIT09IGNvbXB1dGVkKSByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKCFjb250YWlucyhzZWVuLCBjb21wdXRlZCkpIHtcbiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mXG4gIC8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLlxuICB2YXIgdW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykge1xuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4kMShhcnJheXMsIHRydWUsIHRydWUpKTtcbiAgfSk7XG5cbiAgLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZVxuICAvLyBwYXNzZWQtaW4gYXJyYXlzLlxuICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgICBpZiAoY29udGFpbnMocmVzdWx0LCBpdGVtKSkgY29udGludWU7XG4gICAgICB2YXIgajtcbiAgICAgIGZvciAoaiA9IDE7IGogPCBhcmdzTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKCFjb250YWlucyhhcmd1bWVudHNbal0sIGl0ZW0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSBhcmdzTGVuZ3RoKSByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzXG4gIC8vIGVhY2ggYXJyYXkncyBlbGVtZW50cyBvbiBzaGFyZWQgaW5kaWNlcy5cbiAgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7XG4gICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmVcbiAgLy8gYW4gaW5kZXggZ28gdG9nZXRoZXIuXG4gIHZhciB6aXAgPSByZXN0QXJndW1lbnRzKHVuemlwKTtcblxuICAvLyBDb252ZXJ0cyBsaXN0cyBpbnRvIG9iamVjdHMuIFBhc3MgZWl0aGVyIGEgc2luZ2xlIGFycmF5IG9mIGBba2V5LCB2YWx1ZV1gXG4gIC8vIHBhaXJzLCBvciB0d28gcGFyYWxsZWwgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCAtLSBvbmUgb2Yga2V5cywgYW5kIG9uZSBvZlxuICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIFBhc3NpbmcgYnkgcGFpcnMgaXMgdGhlIHJldmVyc2Ugb2YgYF8ucGFpcnNgLlxuICBmdW5jdGlvbiBvYmplY3QobGlzdCwgdmFsdWVzKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICAvLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZVxuICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoc3RvcCA9PSBudWxsKSB7XG4gICAgICBzdG9wID0gc3RhcnQgfHwgMDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxO1xuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIHJhbmdlID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyssIHN0YXJ0ICs9IHN0ZXApIHtcbiAgICAgIHJhbmdlW2lkeF0gPSBzdGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvLyBDaHVuayBhIHNpbmdsZSBhcnJheSBpbnRvIG11bHRpcGxlIGFycmF5cywgZWFjaCBjb250YWluaW5nIGBjb3VudGAgb3IgZmV3ZXJcbiAgLy8gaXRlbXMuXG4gIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsIHx8IGNvdW50IDwgMSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jaGFpbiA/IF8kMShvYmopLmNoYWluKCkgOiBvYmo7XG4gIH1cblxuICAvLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIGZ1bmN0aW9uIG1peGluKG9iaikge1xuICAgIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gXyQxW25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTtcbiAgICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfJDEsIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIF8kMTtcbiAgfVxuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7XG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcbiAgICAgICAgbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBgQXJyYXlgIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci5cbiAgZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIGlmIChvYmogIT0gbnVsbCkgb2JqID0gbWV0aG9kLmFwcGx5KG9iaiwgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBvYmopO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIE5hbWVkIEV4cG9ydHNcblxuICB2YXIgYWxsRXhwb3J0cyA9IHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgVkVSU0lPTjogVkVSU0lPTixcbiAgICByZXN0QXJndW1lbnRzOiByZXN0QXJndW1lbnRzLFxuICAgIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgICBpc051bGw6IGlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gICAgaXNCb29sZWFuOiBpc0Jvb2xlYW4sXG4gICAgaXNFbGVtZW50OiBpc0VsZW1lbnQsXG4gICAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICAgIGlzTnVtYmVyOiBpc051bWJlcixcbiAgICBpc0RhdGU6IGlzRGF0ZSxcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgaXNFcnJvcjogaXNFcnJvcixcbiAgICBpc1N5bWJvbDogaXNTeW1ib2wsXG4gICAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgICBpc0RhdGFWaWV3OiBpc0RhdGFWaWV3JDEsXG4gICAgaXNBcnJheTogaXNBcnJheSxcbiAgICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uJDEsXG4gICAgaXNBcmd1bWVudHM6IGlzQXJndW1lbnRzJDEsXG4gICAgaXNGaW5pdGU6IGlzRmluaXRlJDEsXG4gICAgaXNOYU46IGlzTmFOJDEsXG4gICAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXkkMSxcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgIGlzTWF0Y2g6IGlzTWF0Y2gsXG4gICAgaXNFcXVhbDogaXNFcXVhbCxcbiAgICBpc01hcDogaXNNYXAsXG4gICAgaXNXZWFrTWFwOiBpc1dlYWtNYXAsXG4gICAgaXNTZXQ6IGlzU2V0LFxuICAgIGlzV2Vha1NldDogaXNXZWFrU2V0LFxuICAgIGtleXM6IGtleXMsXG4gICAgYWxsS2V5czogYWxsS2V5cyxcbiAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICBwYWlyczogcGFpcnMsXG4gICAgaW52ZXJ0OiBpbnZlcnQsXG4gICAgZnVuY3Rpb25zOiBmdW5jdGlvbnMsXG4gICAgbWV0aG9kczogZnVuY3Rpb25zLFxuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIGV4dGVuZE93bjogZXh0ZW5kT3duLFxuICAgIGFzc2lnbjogZXh0ZW5kT3duLFxuICAgIGRlZmF1bHRzOiBkZWZhdWx0cyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBjbG9uZTogY2xvbmUsXG4gICAgdGFwOiB0YXAsXG4gICAgZ2V0OiBnZXQsXG4gICAgaGFzOiBoYXMsXG4gICAgbWFwT2JqZWN0OiBtYXBPYmplY3QsXG4gICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgIGNvbnN0YW50OiBjb25zdGFudCxcbiAgICBub29wOiBub29wLFxuICAgIHRvUGF0aDogdG9QYXRoJDEsXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BlcnR5T2Y6IHByb3BlcnR5T2YsXG4gICAgbWF0Y2hlcjogbWF0Y2hlcixcbiAgICBtYXRjaGVzOiBtYXRjaGVyLFxuICAgIHRpbWVzOiB0aW1lcyxcbiAgICByYW5kb206IHJhbmRvbSxcbiAgICBub3c6IG5vdyxcbiAgICBlc2NhcGU6IF9lc2NhcGUsXG4gICAgdW5lc2NhcGU6IF91bmVzY2FwZSxcbiAgICB0ZW1wbGF0ZVNldHRpbmdzOiB0ZW1wbGF0ZVNldHRpbmdzLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICB1bmlxdWVJZDogdW5pcXVlSWQsXG4gICAgY2hhaW46IGNoYWluLFxuICAgIGl0ZXJhdGVlOiBpdGVyYXRlZSxcbiAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgYmluZEFsbDogYmluZEFsbCxcbiAgICBtZW1vaXplOiBtZW1vaXplLFxuICAgIGRlbGF5OiBkZWxheSxcbiAgICBkZWZlcjogZGVmZXIsXG4gICAgdGhyb3R0bGU6IHRocm90dGxlLFxuICAgIGRlYm91bmNlOiBkZWJvdW5jZSxcbiAgICB3cmFwOiB3cmFwLFxuICAgIG5lZ2F0ZTogbmVnYXRlLFxuICAgIGNvbXBvc2U6IGNvbXBvc2UsXG4gICAgYWZ0ZXI6IGFmdGVyLFxuICAgIGJlZm9yZTogYmVmb3JlLFxuICAgIG9uY2U6IG9uY2UsXG4gICAgZmluZEtleTogZmluZEtleSxcbiAgICBmaW5kSW5kZXg6IGZpbmRJbmRleCxcbiAgICBmaW5kTGFzdEluZGV4OiBmaW5kTGFzdEluZGV4LFxuICAgIHNvcnRlZEluZGV4OiBzb3J0ZWRJbmRleCxcbiAgICBpbmRleE9mOiBpbmRleE9mLFxuICAgIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZixcbiAgICBmaW5kOiBmaW5kLFxuICAgIGRldGVjdDogZmluZCxcbiAgICBmaW5kV2hlcmU6IGZpbmRXaGVyZSxcbiAgICBlYWNoOiBlYWNoLFxuICAgIGZvckVhY2g6IGVhY2gsXG4gICAgbWFwOiBtYXAsXG4gICAgY29sbGVjdDogbWFwLFxuICAgIHJlZHVjZTogcmVkdWNlLFxuICAgIGZvbGRsOiByZWR1Y2UsXG4gICAgaW5qZWN0OiByZWR1Y2UsXG4gICAgcmVkdWNlUmlnaHQ6IHJlZHVjZVJpZ2h0LFxuICAgIGZvbGRyOiByZWR1Y2VSaWdodCxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBzZWxlY3Q6IGZpbHRlcixcbiAgICByZWplY3Q6IHJlamVjdCxcbiAgICBldmVyeTogZXZlcnksXG4gICAgYWxsOiBldmVyeSxcbiAgICBzb21lOiBzb21lLFxuICAgIGFueTogc29tZSxcbiAgICBjb250YWluczogY29udGFpbnMsXG4gICAgaW5jbHVkZXM6IGNvbnRhaW5zLFxuICAgIGluY2x1ZGU6IGNvbnRhaW5zLFxuICAgIGludm9rZTogaW52b2tlLFxuICAgIHBsdWNrOiBwbHVjayxcbiAgICB3aGVyZTogd2hlcmUsXG4gICAgbWF4OiBtYXgsXG4gICAgbWluOiBtaW4sXG4gICAgc2h1ZmZsZTogc2h1ZmZsZSxcbiAgICBzYW1wbGU6IHNhbXBsZSxcbiAgICBzb3J0Qnk6IHNvcnRCeSxcbiAgICBncm91cEJ5OiBncm91cEJ5LFxuICAgIGluZGV4Qnk6IGluZGV4QnksXG4gICAgY291bnRCeTogY291bnRCeSxcbiAgICBwYXJ0aXRpb246IHBhcnRpdGlvbixcbiAgICB0b0FycmF5OiB0b0FycmF5LFxuICAgIHNpemU6IHNpemUsXG4gICAgcGljazogcGljayxcbiAgICBvbWl0OiBvbWl0LFxuICAgIGZpcnN0OiBmaXJzdCxcbiAgICBoZWFkOiBmaXJzdCxcbiAgICB0YWtlOiBmaXJzdCxcbiAgICBpbml0aWFsOiBpbml0aWFsLFxuICAgIGxhc3Q6IGxhc3QsXG4gICAgcmVzdDogcmVzdCxcbiAgICB0YWlsOiByZXN0LFxuICAgIGRyb3A6IHJlc3QsXG4gICAgY29tcGFjdDogY29tcGFjdCxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIHdpdGhvdXQ6IHdpdGhvdXQsXG4gICAgdW5pcTogdW5pcSxcbiAgICB1bmlxdWU6IHVuaXEsXG4gICAgdW5pb246IHVuaW9uLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uLFxuICAgIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2UsXG4gICAgdW56aXA6IHVuemlwLFxuICAgIHRyYW5zcG9zZTogdW56aXAsXG4gICAgemlwOiB6aXAsXG4gICAgb2JqZWN0OiBvYmplY3QsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIGNodW5rOiBjaHVuayxcbiAgICBtaXhpbjogbWl4aW4sXG4gICAgJ2RlZmF1bHQnOiBfJDFcbiAgfTtcblxuICAvLyBEZWZhdWx0IEV4cG9ydFxuXG4gIC8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgdmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTtcbiAgLy8gTGVnYWN5IE5vZGUuanMgQVBJLlxuICBfLl8gPSBfO1xuXG4gIHJldHVybiBfO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5kZXJzY29yZS11bWQuanMubWFwXG4iLCJjb25zdCBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG4vLyByZWY6IE92ZXJEcml2ZS5UaHVuZGVyLk1vZGVscy5EYXRhTW9kZWxzLkdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEdlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tZWRpYVR5cGUgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5sYW5ndWFnZSAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJFbnRpdHlJZCAgPSBudWxsOyAvLyBpbnRcbiAgICAgICAgdGhpcy5tYXR1cml0eUxldmVscyAgICAgPSBbXTsgLy8gc3RyaW5nXG4gICAgICAgIHRoaXMuc3ViamVjdHMgICAgICAgICAgID0gW107IC8vIHN0cmluZ1xuICAgICAgICB0aGlzLmJpc2FjQ29kZXMgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuc29ydEJ5ICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWF4SXRlbXMgICAgICAgICAgID0gdW5kZWZpbmVkOyAvLyBpbnRcblxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVHJhbnNsYXRlcyBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyBtb2RlbCB0byBwYXJhbWV0ZXJzIHRoYXQgYWxpZ24gd2l0aCB0aGUgTWVkaWFQYXJhbWV0ZXJzIG1vZGVsIGZvciBleGVjdXRpbmcgYSBcInNlYXJjaFwiXG4gICAgc2VyaWFsaXplRm9yU2VhcmNoKCkge1xuICAgICAgICBsZXQgbW9kZWwgPSBfLmV4dGVuZCh7fSwgdGhpcyk7XG5cbiAgICAgICAgLy8gbGFuZ3VhZ2UgaXMgYW4gYXJyYXkgaW4gTWVkaWFQYXJhbWV0ZXJzXG4gICAgICAgIG1vZGVsLmxhbmd1YWdlID0gXyhfLmZsYXR0ZW4oW21vZGVsLmxhbmd1YWdlXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG5cbiAgICAgICAgLy8gbWF0dXJpdHlMZXZlbHMgaXMgY2FsbGVkIG1hdHVyaXR5TGV2ZWxcbiAgICAgICAgbW9kZWwubWF0dXJpdHlMZXZlbCA9IF8oXy5mbGF0dGVuKFttb2RlbC5tYXR1cml0eUxldmVsc10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICBkZWxldGUgbW9kZWwubWF0dXJpdHlMZXZlbHM7XG5cbiAgICAgICAgLy8gc3ViamVjdHMgaXMgY2FsbGVkIHN1YmplY3RcbiAgICAgICAgbW9kZWwuc3ViamVjdCA9IF8oXy5mbGF0dGVuKFttb2RlbC5zdWJqZWN0c10pKS5yZWplY3QoKHZhbCkgPT4gXy5pc0VtcHR5KHZhbCkpO1xuICAgICAgICBkZWxldGUgbW9kZWwuc3ViamVjdHM7XG5cbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2Jpc2FjLWNvbGxlY3Rpb24tZmlsdGVyaW5nJykpIHtcbiAgICAgICAgICAgIG1vZGVsLmJpc2FjQ29kZSA9IF8oXy5mbGF0dGVuKFttb2RlbC5iaXNhY0NvZGVzXSkpLnJlamVjdCgodmFsKSA9PiBfLmlzRW1wdHkodmFsKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwubWVkaWFUeXBlcykge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21lZGlhLXR5cGVzLWNvbGxlY3Rpb24tcGFyYW0nKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtb2RlbC5tZWRpYVR5cGU7XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG1vZGVsLm1lZGlhVHlwZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWwubWVkaWFUeXBlcykge1xuICAgICAgICAgICAgbW9kZWwubWVkaWFUeXBlcyA9ICBtb2RlbC5tZWRpYVR5cGVzLmpvaW4oJywnKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdmaWx0ZXItb3V0LW50YycpKSB7XG4gICAgICAgICAgICBtb2RlbC5tZWRpYVR5cGVzID0gd2luZG93Lk92ZXJEcml2ZS53aGl0ZWxpc3RlZE1lZGlhVHlwZXM7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgbW9kZWwuYmlzYWNDb2RlczsgIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgcmVnYXJkbGVzcyBiZWNhdXNlIHRoZSBjb3JyZWN0IHF1ZXJ5IHBhcmFtIGlzIGBiaXNhY0NvZGVgLiAgVGhlIG1pc21hdGNoIGJldHdlZW4gdGhlIHRodW5kZXIgcXVlcnkgcGFyYW1zIGFuZCB0aGUgcHJvcGVydHkgbmFtZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2xsZWN0aW9uIGRlZmluaXRpb25zIGlzLi4uZnVuLlxuXG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0T3B0aW1pemVkQ292ZXJzID0gdm9pZCAwO1xudmFyIF8gPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInVuZGVyc2NvcmVcIikpO1xuZnVuY3Rpb24gZ2V0T3B0aW1pemVkQ292ZXJzKGNvdmVycywgZGVzaXJlZFNpemUpIHtcbiAgICAvLyBjb3ZlcnNCeVNpemUgaXMgbm93IGFuIGFycmF5IG9mIGNvdmVycywgZnJvbSBzbWFsbGVzdCB0byBsYXJnZXN0XG4gICAgdmFyIGNvdmVyc0J5U2l6ZSA9IF8uc29ydEJ5KGNvdmVycywgJ3dpZHRoJyk7XG4gICAgLy8gU3RhcnQgd2l0aCB0aGUgYmlnZ2VzdCBjb3ZlclxuICAgIC8vIENvcHkgb2JqZWN0IHdpdGggT2JqZWN0LmFzc2lnbigpIHNvIHdlIGRvbnQgZGFtYWdlIHJlZmVyZW5jZVxuICAgIHZhciBvcHRpbWl6ZWRDb3ZlciA9IE9iamVjdC5hc3NpZ24oe30sIF8ubGFzdChjb3ZlcnNCeVNpemUpKTtcbiAgICBpZiAob3B0aW1pemVkQ292ZXIgJiYgb3B0aW1pemVkQ292ZXIuaHJlZikge1xuICAgICAgICB2YXIgbGVnYWN5VG9PcHRpbWl6ZWRJbWFnZUhvc3RzTWFwID0ge1xuICAgICAgICAgICAgJ2h0dHBzOi8vaW1nMS5vZC1jZG4uY29tLyc6ICdodHRwczovL2ljLm9kLWNkbi5jb20vcmVzaXplJyxcbiAgICAgICAgICAgICdodHRwczovL2ltYWdlcy5vdmVyZHJpdmVjaGluYS5jbi8nOiAnaHR0cHM6Ly9pbWFnZXMub3ZlcmRyaXZlY2hpbmEuY24vcmVzaXplJ1xuICAgICAgICB9O1xuICAgICAgICB2YXIgaG9zdE1hcEtleSA9IF8uZmluZChPYmplY3Qua2V5cyhsZWdhY3lUb09wdGltaXplZEltYWdlSG9zdHNNYXApLCBmdW5jdGlvbiAobGVnYWN5KSB7IHJldHVybiBvcHRpbWl6ZWRDb3Zlci5ocmVmLnN0YXJ0c1dpdGgobGVnYWN5KTsgfSk7XG4gICAgICAgIGlmIChob3N0TWFwS2V5KSB7XG4gICAgICAgICAgICAvLyBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9wdGltaXplZCByb290LCBlLmcuIGh0dHBzOi8vaW1nMS5vZC1jZG4uY29tLyAtPiBodHRwczovL2ljLm9kLWNkbi5jb20vcmVzaXplXG4gICAgICAgICAgICB2YXIgb3B0aW1pemVkSW1hZ2VIb3N0ID0gbGVnYWN5VG9PcHRpbWl6ZWRJbWFnZUhvc3RzTWFwW2hvc3RNYXBLZXldO1xuICAgICAgICAgICAgdmFyIG9wdGltaXphdGlvbnMgPSAndHlwZT1hdXRvJzsgLy8gZm9ybWF0ID0gYXV0byAtPiB1c2Ugd2VicCBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGl0XG4gICAgICAgICAgICB2YXIgcGF0aCA9ICcnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBub2RlLmpzIHVzYWdlIHNob3VsZCBiZSBmaW5lIHdpdGggdGhlIFVSTCBhcGlcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTChvcHRpbWl6ZWRDb3Zlci5ocmVmKTtcbiAgICAgICAgICAgICAgICBwYXRoID0gdXJsLnBhdGhuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaGFjayB0byBnZXQgdXJsIHBhdGhuYW1lIHNpbmNlIElFIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgVVJMIGFwaS4gIEkgZGlkbid0IHdhbnQgdG8gYWRkIGEgcG9seWZpbGxcbiAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBhLmhyZWYgPSBvcHRpbWl6ZWRDb3Zlci5ocmVmO1xuICAgICAgICAgICAgICAgIHBhdGggPSBhLnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHsgLy8gYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudCBhYm91dCB3aGV0aGVyIHRoZSBwYXRobmFtZSBpbmNsdWRlcyBhIGxlYWRpbmcgc2xhc2gsIGJ1dCB0aGUgY2FjaGVmbHkgYXBpIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9uIHRoZSB1cmwgcGFyYW1cbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFwiL1wiLmNvbmNhdChwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW5jb2RlZFNyY1VybCA9IGVuY29kZVVSSUNvbXBvbmVudChwYXRoKTtcbiAgICAgICAgICAgIHZhciBjb3ZlckhyZWZXaXRob3V0U2l6ZSA9IFwiXCIuY29uY2F0KG9wdGltaXplZEltYWdlSG9zdCwgXCI/XCIpLmNvbmNhdChvcHRpbWl6YXRpb25zLCBcIiZ1cmw9XCIpLmNvbmNhdChlbmNvZGVkU3JjVXJsLCBcIiZzdHJpcG1ldGE9dHJ1ZVwiKTtcbiAgICAgICAgICAgIG9wdGltaXplZENvdmVyLmhyZWYgPSBcIlwiLmNvbmNhdChjb3ZlckhyZWZXaXRob3V0U2l6ZSwgXCImd2lkdGg9XCIpLmNvbmNhdChkZXNpcmVkU2l6ZSk7XG4gICAgICAgICAgICBvcHRpbWl6ZWRDb3Zlci5zcmNzZXQgPSBcIlwiLmNvbmNhdChjb3ZlckhyZWZXaXRob3V0U2l6ZSwgXCImd2lkdGg9XCIpLmNvbmNhdChNYXRoLmZsb29yKGRlc2lyZWRTaXplICogMiksIFwiIDJ4LCBcIikgK1xuICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KE1hdGguZmxvb3IoZGVzaXJlZFNpemUgKiAxLjUpLCBcIiAxLjV4LCBcIikgK1xuICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGNvdmVySHJlZldpdGhvdXRTaXplLCBcIiZ3aWR0aD1cIikuY29uY2F0KGRlc2lyZWRTaXplLCBcIiAxeFwiKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpbWl6ZWRDb3ZlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXy5maW5kKGNvdmVyc0J5U2l6ZSwgZnVuY3Rpb24gKGNvdmVyKSB7IHJldHVybiBjb3Zlci53aWR0aCA+PSBkZXNpcmVkU2l6ZTsgfSkgfHxcbiAgICAgICAgXy5sYXN0KGNvdmVyc0J5U2l6ZSk7IC8vIGZpbmRzIHRoZSBmaXJzdCBjb3ZlciB0aGF0IGlzIGJpZyBlbm91Z2hcbn1cbmV4cG9ydHMuZ2V0T3B0aW1pemVkQ292ZXJzID0gZ2V0T3B0aW1pemVkQ292ZXJzO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRPcHRpbWl6ZWRDb3Zlci10cy5qcy5tYXBcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0T3B0aW1pemVkQ292ZXItdHMuanMubWFwXG4iLCIvLyBPcmlnaW5hbDogaHR0cHM6Ly9qaXJhLmhxLm92ZXJkcml2ZS5jb20vYnJvd3NlL0xIVE5HLTM4MDkgUmVsb2NhdGlvbjogaHR0cHM6Ly9qaXJhLmhxLm92ZXJkcml2ZS5jb20vYnJvd3NlL0xIVE5HLTM4NjJcblxuY29uc3QgTWFjbWlsbGFuTWVzc2FnZSA9IGZ1bmN0aW9uKG1vZGVsKSB7XG4gICAgbGV0IGJhZFB1Ymxpc2hlciA9IHBhcnNlSW50KG1vZGVsLmdldChcInB1Ymxpc2hlckFjY291bnRcIikuaWQsIDEwKSA9PT0gNjIyMjtcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGxldCByZWxlYXNlRGF0ZSA9IG5ldyBEYXRlKG1vZGVsLmdldChcImVzdGltYXRlZFJlbGVhc2VEYXRlXCIpKTtcbiAgICBsZXQgbWFjbWlsbGFuTGljZW5zaW5nQ2hhbmdlSW5FZmZlY3QgPSByZWxlYXNlRGF0ZSA+PSBuZXcgRGF0ZSgyMDE5LCAxMCwgMSk7XG4gICAgbGV0IHJlbGVhc2VEYXRlUGx1czhXZWVrcyA9IG5ldyBEYXRlKHJlbGVhc2VEYXRlKTtcbiAgICByZWxlYXNlRGF0ZVBsdXM4V2Vla3Muc2V0RGF0ZShyZWxlYXNlRGF0ZS5nZXREYXRlKCkgKyAoOCAqIDcpKTtcbiAgICBsZXQgcmVsZWFzZURhdGVXaXRoaW5FaWdodFdlZWtzID0gKHJlbGVhc2VEYXRlIDwgdG9kYXkpICYmICh0b2RheSA8IHJlbGVhc2VEYXRlUGx1czhXZWVrcyk7XG5cbiAgICByZXR1cm4gd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnbWFjbWlsbGFuTWVzc2FnaW5nJylcbiAgICAgICAgICAgICYmIG1hY21pbGxhbkxpY2Vuc2luZ0NoYW5nZUluRWZmZWN0XG4gICAgICAgICAgICAmJiBiYWRQdWJsaXNoZXJcbiAgICAgICAgICAgICYmIChyZWxlYXNlRGF0ZVdpdGhpbkVpZ2h0V2Vla3MgfHwgKG1hY21pbGxhbkxpY2Vuc2luZ0NoYW5nZUluRWZmZWN0ICYmIG1vZGVsLmdldChcImlzUHJlcmVsZWFzZVRpdGxlXCIpKSlcbiAgICAgICAgPyBodG1sKCdtYWNtaWxsYW5NZXNzYWdlJywge2RhdGUgOiByZWxlYXNlRGF0ZVBsdXM4V2Vla3MgfSlcbiAgICAgICAgOiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFjbWlsbGFuTWVzc2FnZTtcbiIsImNvbnN0IF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbi8qKlxuICogRGVmaW5lcyBhbGwgdGhlIGF2YWlsYWJsZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgbWVkaWEgZW5kcG9pbnRcbiAqIEBjbGFzcyBNZWRpYVBhcmFtZXRlcnNcbiAqIHJlZjogaHR0cHM6Ly90aHVuZGVyLmFwaS50ZXN0Lm92ZXJkcml2ZS5jb20vZG9jcy91aS9pbmRleCMhL01lZGlhL1YyTWVkaWFfSW5kZXhNZWRpYVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIE1lZGlhUGFyYW1ldGVycyB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5xdWVyeSAgICAgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLm1lZGlhVHlwZSAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMubWVkaWFUeXBlcyAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy50aXRsZSAgICAgICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLnNlcmllcyAgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMucHVibGlzaGVySWQgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5wdWJsaXNoZXJFbnRpdHlJZCAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuaW1wcmludElkICAgICAgICAgICAgICAgICAgPSAnJztcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyICAgICAgICAgICAgICAgICA9ICcnO1xuICAgICAgICB0aGlzLmNyZWF0b3IgICAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuY3JlYXRvcklkICAgICAgICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFkZGVkRGF0ZSAgICAgICAgICAgICAgICAgID0gJyc7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRmlyc3QgICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnNob3dPbmx5QXZhaWxhYmxlICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd09ubHlQcmVyZWxlYXNlICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0F1ZGlvU3luY2hyb25pemVkVGV4dCAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uSWQgICAgICAgICAgICAgICA9IDA7XG5cbiAgICAgICAgLy8gQWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJyYXlzIGFyZSBzdHJpbmcgYXJyYXlzXG4gICAgICAgIHRoaXMuZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5zdWJqZWN0ICAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmJpc2FjQ29kZSAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMubWF0dXJpdHlMZXZlbCAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5sYW5ndWFnZSAgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmF0b3NMZXZlbCAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMubGV4aWxlU2NvcmUgICAgICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5pbnRlcmVzdExldmVsICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmdyYWRlTGV2ZWwgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgIHRoaXMuaW5jbHVkZWRGYWNldHMgICAgICAgICAgICAgPSBbXTtcblxuICAgICAgICB0aGlzLnNvcnRCeSAgICAgICAgICAgICAgICAgICAgID0gJ3JlbGV2YW5jZSc7XG4gICAgICAgIHRoaXMuc2hvdyAgICAgICAgICAgICAgICAgICAgICAgPSAnb3duZWQnO1xuICAgICAgICB0aGlzLnBhZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMTtcbiAgICAgICAgdGhpcy5wZXJQYWdlICAgICAgICAgICAgICAgICAgICA9IDI0O1xuICAgICAgICB0aGlzLmluY2x1ZGVGYWNldHMgICAgICAgICAgICAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlTm9Gb3JtYXRUaXRsZXMgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbHRlckNwY1RpdGxlcyAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWF4SXRlbXMgICAgICAgICAgICAgICAgICAgPSAwO1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgLi4uYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBhcHBseVJvb21GaWx0ZXJzQW5kVXNlclByZWZzKHJvb21GaWx0ZXJzLCB1c2VyUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKHJvb21GaWx0ZXJzKSB7XG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG5hbWVzIGRvbid0IG1hdGNoIHVwIHNvIHdlIGNhbid0IGp1c3QgZXh0ZW5kXG4gICAgICAgICAgICBpZiAocm9vbUZpbHRlcnMubWF0dXJpdHlMZXZlbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHVyaXR5TGV2ZWwgPSByb29tRmlsdGVycy5tYXR1cml0eUxldmVscztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb29tRmlsdGVycy5zdWJqZWN0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViamVjdCA9IHJvb21GaWx0ZXJzLnN1YmplY3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLmxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZSA9IHJvb21GaWx0ZXJzLmxhbmd1YWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvb21GaWx0ZXJzLm1lZGlhVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUeXBlID0gcm9vbUZpbHRlcnMubWVkaWFUeXBlO1xuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUeXBlcyA9IHJvb21GaWx0ZXJzLm1lZGlhVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1c2VyUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIG1heSBiZSBtb3JlIHVzZXIgcHJlZnMgdG8gYXBwbHkgYmVzaWRlcyBhdWRpZW5jZS1zZXR0aW5ncyBidXQgdGhpc1xuICAgICAgICAgICAgLy8gd2FzIHRoZSBpbW1lZGlhdGUgbmVlZC4gIFdlIGNhbiBhZGQgbW9yZSBhcyB0aGV5IGNvbWUgdXAuXG4gICAgICAgICAgICBpZiAodXNlclByZWZlcmVuY2VzWydhdWRpZW5jZS1zZXR0aW5nJ10gJiYgdGhpcy5tYXR1cml0eUxldmVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHVzZXJQcmVmZXJlbmNlc1snYXVkaWVuY2Utc2V0dGluZyddO1xuICAgICAgICAgICAgICAgIGxldCBtYXR1cml0eUxldmVscyA9IFtdO1xuICAgICAgICAgICAgICAgIF8uZWFjaChfLmtleXMoYXVkaWVuY2UpLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGllbmNlW2tleV0gJiYga2V5ICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0dXJpdHlMZXZlbHMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdHVyaXR5TGV2ZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXR1cml0eUxldmVsID0gbWF0dXJpdHlMZXZlbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBfLmV4dGVuZCh7fSwgdGhpcyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBwcm9wZXJ0aWVzIHRoYXQgZG8gbm90IGhhdmUgYSB2YWx1ZSBzZXRcbiAgICAgICAgT2JqZWN0LmtleXMocmVzcG9uc2UpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgIXRoaXMuX2hhc1ZhbHVlKHJlc3BvbnNlW2tleV0pICYmIGRlbGV0ZSByZXNwb25zZVtrZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiAhKChfKHZhbHVlKS5pc09iamVjdCgpICYmIF8odmFsdWUpLmlzRW1wdHkoKSkgfHwgIXZhbHVlKSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgfVxufTtcbiIsImltcG9ydCBNZWRpYUludGVyZmFjZSBmcm9tICcuLi9tZWRpYS9NZWRpYUludGVyZmFjZSc7XG5cbmltcG9ydCBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyBmcm9tICcuLi8uLi8uLi8uLi9idXNpbmVzcy1vYmplY3RzL0dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJztcblxuLy8gcmVmOiBUaHVuZGVyLk1vZGVscy5SZXNwb25zZU1vZGVscy5Db2xsZWN0aW9uRGVmaW5pdGlvblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGVjdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBCYWNrYm9uZS5Nb2RlbCB7XG5cbiAgICBnZXQgaWRBdHRyaWJ1dGUoKSB7IHJldHVybiAnaWQnOyB9XG5cbiAgICBnZXQgY29sbGVjdGlvbk9wdGlvbnMoKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaW5jbHVkZUZhY2V0czogZmFsc2UsXG4gICAgICAgICAgICBwZXJQYWdlOiAgICAgICB0aGlzLnBhZ2VTaXplIHx8IDYsXG4gICAgICAgICAgICBzaHVmZmxlOiAgICAgICB0aGlzLnNodWZmbGUgfHwgdGhpcy5pc0x1Y2t5RGF5XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmdldCgnc29ydEJ5QXZhaWxhYmlsaXR5JykgfHwgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eU9wdGlvbicpID09PSAnYXZhaWxhYmxlLWZpcnN0Jykge1xuICAgICAgICAgICAgb3B0aW9ucy5hdmFpbGFibGVGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG93T25seUF2YWlsYWJsZScpIHx8IHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlPcHRpb24nKSA9PT0gJ2F2YWlsYWJsZS1vbmx5Jykge1xuICAgICAgICAgICAgb3B0aW9ucy5zaG93T25seUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG93T25seVByZXJlbGVhc2UnKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zaG93T25seVByZXJlbGVhc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZUxpc3RPcmRlcil7XG4gICAgICAgICAgICBvcHRpb25zLnNvcnRCeSA9ICdsaXN0b3JkZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZGVmYXVsdHMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMCcsXG4gICAgICAgICAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5T3B0aW9uICAgICAgICAgIDogJycsXG4gICAgICAgICAgICBzaG93T25seUF2YWlsYWJsZSAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dPbmx5UHJlcmVsZWFzZSAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgc29ydEJ5QXZhaWxhYmlsaXR5ICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBjdXJhdGVkQ29sbGVjdGlvbkRldGFpbHMgICAgOiBudWxsLFxuICAgICAgICAgICAgZ2VuZXJhdGVkQ29sbGVjdGlvbkRldGFpbHMgIDogbnVsbCxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZCAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBvcmRlciAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuXG4gICAgICAgICAgICAvLyBDb21wdXRlZCBwcm9wZXJ0eVxuICAgICAgICAgICAgdG90YWxJdGVtcyAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBpc0x1Y2t5RGF5KCl7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgnYXZhaWxhYmlsaXR5T3B0aW9uJykgPT09ICdhdmFpbGFibGUtbHVja3lkYXknO1xuICAgIH1cblxuICAgIGdldCBpc0dlbmVyYXRlZCgpIHtcbiAgICAgICAgcmV0dXJuICFfKHRoaXMuZ2V0KCdnZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscycpKS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQ3VyYXRlZCgpIHtcbiAgICAgICAgcmV0dXJuICFfKHRoaXMuZ2V0KCdjdXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKSkuaXNFbXB0eSgpO1xuICAgIH1cblxuICAgIGdldCB1c2VMaXN0T3JkZXIoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJhdGVkICYmIHRoaXMuZ2V0KCdjdXJhdGVkQ29sbGVjdGlvbkRldGFpbHMnKS5pc09yZGVyZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByb3Age1RpdGxlQ29sbGVjdGlvbn0gY29sbGVjdGlvblxuICAgICAqIEBtZW1iZXJvZiBDb2xsZWN0aW9uRGVmaW5pdGlvblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuX21lZGlhSW50ZXJmYWNlID0gbmV3IE1lZGlhSW50ZXJmYWNlKCk7XG5cbiAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb24gPSB0aGlzLl9tZWRpYUludGVyZmFjZS5pdGVtcztcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMudGl0bGVDb2xsZWN0aW9uLCAnYWxsJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXQoJ3RvdGFsSXRlbXMnLCB0aGlzLnRpdGxlQ29sbGVjdGlvbi5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmZXRjaENvbGxlY3Rpb25UaXRsZXMoeyBwYXRyb25TZXR0aW5ncywgcm9vbX0pIHtcbiAgICAgICAgLy8gUGFyc2UgdGhlIGN1cnJlbnQgcm9vbSdzIG1hdHVyaXR5TGV2ZWxzIGlmIHRoZXJlIGlzIGEgcm9vbSwgYW5kIGEgbWF0dXJpdHlMZXZlbHMgZmlsdGVyIGhhcyBiZWVuIHNldFxuICAgICAgICBsZXQgcm9vbUhhc01hdHVyaXR5TGV2ZWxGaWx0ZXIgPSAhXy5pc0VtcHR5KHJvb20gJiYgcm9vbS5maWx0ZXJzICYmIHJvb20uZmlsdGVycy5tYXR1cml0eUxldmVscyk7XG5cbiAgICAgICAgbGV0IHBhdHJvbk1hdHVyaXR5TGV2ZWxQcmVmZXJlbmNlcyA9IHRoaXMuX3BhcnNlUGF0cm9uQXVkaWVuY2VTZXR0aW5ncyhwYXRyb25TZXR0aW5ncyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNHZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgIGxldCBnZW5Db2xEZXRhaWxzID0gdGhpcy5nZXQoJ2dlbmVyYXRlZENvbGxlY3Rpb25EZXRhaWxzJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzLnNvcnRCeSkge1xuICAgICAgICAgICAgICAgIGdlbkNvbERldGFpbHMuc29ydEJ5ID0gdGhpcy5hdHRyaWJ1dGVzLnNvcnRCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghIXRoaXMuZ2V0KCdzaG93T25seUx1Y2t5RGF5QXZhaWxhYmxlJykpe1xuICAgICAgICAgICAgICAgIGdlbkNvbERldGFpbHMuc2hvd09ubHlMdWNreURheUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGV0YWlscyA9IG5ldyBHZW5lcmF0ZWRDb2xsZWN0aW9uRGV0YWlscyhnZW5Db2xEZXRhaWxzKTtcbiAgICAgICAgICAgIGxldCBwYXJhbXMgID0gZGV0YWlscy5zZXJpYWxpemVGb3JTZWFyY2goKTtcblxuICAgICAgICAgICAgaWYgKCEhcGF0cm9uU2V0dGluZ3Muc2hvd09ubHlBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc2hvd09ubHlBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gYSByb29tIHdpdGggbWF0dXJpdHkgZmlsdGVycyBhcHBsaWVkLCB0aGUgZmlsdGVycyB3aWxsIGJlIGFwYXJ0IG9mIHRoZSBjb2xsZWN0aW9uIGRlZmluaXRpb24gYW5kIHdlIGNhbiBzaW1wbHkgcXVlcnkgZm9yIHRoZSBjb2xsZWN0aW9uXG4gICAgICAgICAgICAvLyBVc2VyIHByZWZlcmVuY2VzIHNob3VsZCBOT1Qgb3ZlcnJpZGUgYSByb29tJ3MgbWF0dXJpdHkgZmlsdGVyXG4gICAgICAgICAgICBpZiAocm9vbUhhc01hdHVyaXR5TGV2ZWxGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVkaWFJbnRlcmZhY2UuZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKHBhcmFtcywgdGhpcy5jb2xsZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgZGV0ZXJtaW5lIGlmIHRoZSBVc2VyJ3MgbWF0dXJpdHkgZmlsdGVyIHNldHRpbmdzIGNvdmVyIHRoZSBjb2xsZWN0aW9uJ3MgbWF0dXJpdHlMZXZlbCBzZXR0aW5nc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlZENvbGxlY3Rpb25PcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb2xsZWN0aW9uT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIV8ocGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzKS5pc0VtcHR5KCkgJiYgXyhwYXJhbXMubWF0dXJpdHlMZXZlbCkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZ2VuZXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMsIHsgbWF0dXJpdHlMZXZlbDogcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEZha2UgYW4gZW1wdHkgcmVzcG9uc2UgaWYgYWxsIHRoZSBhdXRvIGdlbmVyYXRlZCBjb2xsZWN0aW9uJ3MgZmlsdGVycyBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIHVzZXIncyBtYXR1cml0eSBsZXZlbCBzZXR0aW5nc1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXRyb25GaWx0ZXJzUGVybWl0Q29sbGVjdGlvbihwYXJhbXMubWF0dXJpdHlMZXZlbCwgcGF0cm9uTWF0dXJpdHlMZXZlbFByZWZlcmVuY2VzKVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoQ29sbGVjdGlvbkJ5UGFyYW1ldGVycyhwYXJhbXMsIGdlbmVyYXRlZENvbGxlY3Rpb25PcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX21lZGlhSW50ZXJmYWNlLmZldGNoRW1wdHlSZXNwb25zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgaWYgXCJpc0N1cmF0ZWRcIlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbGxlY3Rpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKCEhcGF0cm9uU2V0dGluZ3Muc2hvd09ubHlBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICBjdXJhdGVkQ29sbGVjdGlvbk9wdGlvbnMuc2hvd09ubHlBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc29ydC1jdXJhdGVkLWxpc3QtY2Fyb3VzZWxzJykgJiYgdGhpcy5hdHRyaWJ1dGVzLnNvcnRCeSkge1xuICAgICAgICAgICAgICAgIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucy5zb3J0QnkgPSB0aGlzLmF0dHJpYnV0ZXMuc29ydEJ5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgTk9UIGluIGEgcm9vbSwgYXBwbHkgYSB1c2VyJ3MgbWF0dXJpdHkgc2V0dGluZ3MgaWYgcHJlc2VudCB0byB0aGUgY29sbGVjdGlvbiByZXF1ZXN0XG4gICAgICAgICAgICAvLyBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBpZiBub25lIG9mIHRoZSBjb250ZW50IHNhdGlzZmllcyB0aGUgdXNlcidzIGZpbHRlciBpdHMgYWNjZXB0YWJsZSB0aGF0IG5vIHJlc3VsdHMgYXJlIHJldHVybmVkXG4gICAgICAgICAgICBpZiAoXyhyb29tKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucywgeyBtYXR1cml0eUxldmVsOiBwYXRyb25NYXR1cml0eUxldmVsUHJlZmVyZW5jZXMgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUludGVyZmFjZS5mZXRjaENvbGxlY3Rpb25CeUlkKHRoaXMuaWQsIGN1cmF0ZWRDb2xsZWN0aW9uT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBwYXRyb24gYXVkaWVuY2Ugc2V0dGluZ3MgbW9kZWwgaW50byBhbiBhcnJheSBvZiBmaWx0ZXIgdGVybXMgdGhhdCBNZWRpYUludGVyZmFjZSB1bmRlcnN0YW5kcywgZXg6XG4gICAgLy8gXCJhdWRpZW5jZS1zZXR0aW5nXCI6IHtcbiAgICAvLyAgICAgXCJhbGxcIiAgICAgICAgICAgIDogZmFsc2UsXG4gICAgLy8gICAgIFwianV2ZW5pbGVcIiAgICAgICA6IGZhbHNlLFxuICAgIC8vICAgICBcInlvdW5nYWR1bHRcIiAgICAgOiB0cnVlLFxuICAgIC8vICAgICBcImdlbmVyYWxjb250ZW50XCIgOiB0cnVlLFxuICAgIC8vICAgICBcImFkdWx0b25seVwiICAgICAgOiB0cnVlXG4gICAgLy8gfVxuICAgIC8vIHRvOiBbXCJ5b3VuZ2FkdWx0XCIsIFwiZ2VuZXJhbGNvbnRlbnRcIiwgXCJhZHVsdG9ubHlcIl1cbiAgICAvKiogQHJldHVybnMge3N0cmluZ1tdfSAqL1xuICAgIF9wYXJzZVBhdHJvbkF1ZGllbmNlU2V0dGluZ3MocGF0cm9uU2V0dGluZ3MpIHtcbiAgICAgICAgbGV0IHBhdHJvbkF1ZGllbmNlU2V0dGluZyA9IHBhdHJvblNldHRpbmdzICYmIHBhdHJvblNldHRpbmdzWydhdWRpZW5jZS1zZXR0aW5nJ10gfHwge307XG5cbiAgICAgICAgaWYgKF8ocGF0cm9uQXVkaWVuY2VTZXR0aW5nKS5pc0VtcHR5KCkgfHwgcGF0cm9uQXVkaWVuY2VTZXR0aW5nLmFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGF1ZGllbmNlRmlsdGVycyA9IFtdO1xuICAgICAgICBfKHBhdHJvbkF1ZGllbmNlU2V0dGluZykuZWFjaCgoaXNBcHBsaWVkLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0FwcGxpZWQgJiYga2V5ICE9PSBcImFsbFwiKSB7XG4gICAgICAgICAgICAgICAgYXVkaWVuY2VGaWx0ZXJzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF1ZGllbmNlRmlsdGVycztcbiAgICB9XG5cbiAgICBfcGF0cm9uRmlsdGVyc1Blcm1pdENvbGxlY3Rpb24oY29sbGVjdGlvbk1hdHVyaXR5RmlsdGVycyA9IFtdLCB1c2VyTWF0dXJpdHlGaWx0ZXJzID0gW10pIHtcbiAgICAgICAgaWYgKHVzZXJNYXR1cml0eUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25Mb3dlciA9IGNvbGxlY3Rpb25NYXR1cml0eUZpbHRlcnMubWFwKChmaWx0ZXIpID0+IGZpbHRlci50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgY29uc3QgdXNlckxvd2VyID0gdXNlck1hdHVyaXR5RmlsdGVycy5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgIHJldHVybiBfKGNvbGxlY3Rpb25Mb3dlcikuZGlmZmVyZW5jZSh1c2VyTG93ZXIpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG59XG4iLCJpbXBvcnQgQ29sbGVjdGlvbkRlZmluaXRpb24gZnJvbSAnLi9Db2xsZWN0aW9uRGVmaW5pdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VNYW5hZ2VyIGV4dGVuZHMgQmFja2JvbmUuTW9kZWwge1xuXG4gICAgZ2V0IGlkQXR0cmlidXRlKCkgeyByZXR1cm4gJ3BhZ2VJZCc7IH1cblxuICAgIGdldCBpc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuICFfLmlzRW1wdHkodGhpcy5hdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICAvLyBwYWdlID09IHJvb20sIHBhZ2UgaGFzIHZpZXdzLCBvbmUgb2Ygd2hpY2ggaXMgdGhlIGhvbWUtcGFnZSBjb2xsZWN0aW9ucyBjb2xsZWN0aW9uXG4gICAgLy8gcmVmOiAvdjIvbGlicmFyaWVzL3FhL3BhZ2VzXG4gICAgZmV0Y2hSb29tQnlJZChyb29tSWQgPSAnaG9tZScpIHtcbiAgICAgICAgdGhpcy51cmwgPSB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMucmVzdC5yb29tcy5nZXQsIHsgcm9vbUlkIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoKHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiAobW9kZWwsIHJlc3BvbnNlLCBvcHRpb25zKSA9PiByZXNvbHZlKHJlc3BvbnNlKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKG1vZGVsLCByZXNwb25zZSwgb3B0aW9ucykgPT4gcmVqZWN0KHJlc3BvbnNlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZldGNoQ2FtcGFpZ25CeUlkKGNhbXBhaWduSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMucmVzdC5jYW1wYWlnbnMuZ2V0LCB7IGNhbXBhaWduSWQgfSksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMDAwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZSgocmVzcG9uc2UpID0+IHJlc29sdmUocmVzcG9uc2UpKVxuICAgICAgICAgICAgICAgIC5mYWlsKChqcUhYUikgPT4gcmVqZWN0KGpxSFhSKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZldGNoRmlyc3REaXNwbGF5YWJsZUNhbXBhaWduKHJvb21JZCA9ICdob21lJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5yZXN0LmNhbXBhaWducy5nZXRGaXJzdERpc3BsYXlhYmxlLCB7IHJvb21JZCB9KSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgLmZhaWwoKGpxSFhSKSA9PiByZWplY3QoanFIWFIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmV0Y2hDb2xsZWN0aW9uQnlJZChjb2xsZWN0aW9uSWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMucmVzdC5jb2xsZWN0aW9ucy5nZXRCeUlkLCB7IGlkOiBjb2xsZWN0aW9uSWQgfSksXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAxMDAwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZSgocmVzcG9uc2UpID0+IHJlc29sdmUobmV3IENvbGxlY3Rpb25EZWZpbml0aW9uKHJlc3BvbnNlKSkpXG4gICAgICAgICAgICAgICAgLmZhaWwoKGpxSFhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgPT4gcmVqZWN0KGpxSFhSKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFZpZXcodmlld05hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgICAgcmV0dXJuICh2aWV3TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2hvbWUnXG4gICAgICAgICAgICA/IF8odGhpcy5hdHRyaWJ1dGVzLnZpZXdzKS5maW5kV2hlcmUoeyBpc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIDogXyh0aGlzLmF0dHJpYnV0ZXMudmlld3MpLmZpbmRXaGVyZSh7IG5hbWU6IHZpZXdOYW1lIH0pO1xuICAgIH1cblxuICAgIGdldENhbXBhaWducygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkZWQgJiYgdGhpcy5hdHRyaWJ1dGVzLmNhbXBhaWducztcbiAgICB9XG59XG4iLCJpbXBvcnQgUXVlcnlTdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNoTWFuYWdlciB7XG5cbiAgICBzdGF0aWMgcGFyc2UoKSB7XG4gICAgICAgIGxldCBoYXNoT2JqZWN0ID0gUXVlcnlTdHJpbmcucGFyc2UobG9jYXRpb24uaGFzaC5zdWJzdHIoMSkpO1xuXG4gICAgICAgIF8ua2V5cyhoYXNoT2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGhhc2hPYmplY3Rba2V5XSA9IF8uZmxhdHRlbihbaGFzaE9iamVjdFtrZXldIHx8IFtdXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBoYXNoT2JqZWN0O1xuICAgIH1cblxuICAgIHN0YXRpYyB1cGRhdGUob2JqZWN0KSB7XG4gICAgICAgIGxldCBuZXdIYXNoID0gUXVlcnlTdHJpbmcuc3RyaW5naWZ5KG9iamVjdCk7XG4gICAgICAgIGlmIChuZXdIYXNoICE9PSAnJicpe1xuICAgICAgICAgICAgbG9jYXRpb24uaGFzaCA9IG5ld0hhc2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0KGtleSkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLnBhcnNlKCk7XG5cbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgIGhhc2hba2V5XSA9IF8uZmxhdHRlbihbdmFsdWVdKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZShoYXNoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHVzaChrZXksIHZhbHVlKSB7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgIGhhc2hba2V5XSA9IGhhc2hba2V5XSB8fCBbXTtcbiAgICAgICAgaGFzaFtrZXldLnB1c2godmFsdWUpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmUoa2V5KSB7XG4gICAgICAgIGxldCBoYXNoID0gdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgIGhhc2hba2V5XSAmJiBkZWxldGUgaGFzaFtrZXldO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKGhhc2gpO1xuICAgIH1cbn1cbiIsImltcG9ydCBrZXlzICAgICAgICAgICAgIGZyb20gJy4uLy4uL3V0aWwva2V5Y29kZXMnO1xuaW1wb3J0IE1vZGFsVGVtcGxhdGUgICAgZnJvbSAnLi90ZW1wbGF0ZXMvbW9kYWwuaHRtbCc7XG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG5cbiAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGZsYWcgaXMgZW5hYmxlZCwgY2xvc2VPbkVzYyBtdXN0IGFsd2F5cyBiZSBGQUxTRVxuICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgRVNDIGtleSBiZWhhdmlvciBkZWZpbmVkIGluIF9iaW5kRXZlbnRzKCkgZXhlY3V0ZXMgcHJvcGVybHkuXG4gICAgICAgIC8vIERvIG5vdCBtb2RpZnkgdGhpcyB2YWx1ZSB3aGVuIGNhbGxpbmcgYSBuZXcgbW9kYWwuXG4gICAgICAgIHZhciBjbG9zZU1vZGFsT25Fc2MgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbG9zZS1kcm9wZG93bnMtb24tZXNjJykgPyBmYWxzZSA6IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1dG9TaG93ICAgICAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9SZW5kZXIgICAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICAgIGNsb3NlT25Fc2MgICAgICAgICAgICAgIDogY2xvc2VNb2RhbE9uRXNjLFxuICAgICAgICAgICAgY2xvc2VPbkJsdXIgICAgICAgICAgICAgOiB0cnVlLFxuXG4gICAgICAgICAgICBpZCAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgY2xhc3NlcyAgICAgICAgICAgICAgICAgOiBbJ3NtYWxsJ10sXG4gICAgICAgICAgICBidXR0b25BbGlnbiAgICAgICAgICAgICA6ICdyaWdodCcsXG4gICAgICAgICAgICB0aXRsZSAgICAgICAgICAgICAgICAgICA6ICdUaXRsZScsXG4gICAgICAgICAgICBoaWRkZW5UaXRsZSAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudCAgICAgICAgICAgICAgICAgOiAnU29tZSBDb250ZW50JyxcbiAgICAgICAgICAgIHN1Ym1pdFRleHQgICAgICAgICAgICAgIDogaHRtbCgnb2snKSxcbiAgICAgICAgICAgIGNhbmNlbFRleHQgICAgICAgICAgICAgIDogaHRtbCgnY2FuY2VsJyksXG4gICAgICAgICAgICBhdHRhY2hUb0RvY3VtZW50ICAgICAgICA6IHRydWUsXG4gICAgICAgICAgICBkZWZhdWx0QnV0dG9uQmVoYXZpb3VyICA6IHRydWUsXG4gICAgICAgICAgICBzaG93Q2xvc2VCdXR0b24gICAgICAgICA6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKG9wdGlvbnMpIHtcbiAgICAgICAgXy5leHRlbmQodGhpcywgdGhpcy5kZWZhdWx0cywgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy50cGwgPSBNb2RhbFRlbXBsYXRlO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQodGhpcy50cGwodGhpcykpO1xuXG4gICAgICAgIGlmICh0aGlzLmlkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy4kZWwuYXR0cignaWQnLCB0aGlzLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGNvbnRlbnQgPSB0aGlzLiRlbC5maW5kKCcubW9kYWwtY29udGFpbmVyJyk7XG5cbiAgICAgICAgdGhpcy4kY29udGVudC5lbXB0eSgpLmFwcGVuZCh0aGlzLmNvbnRlbnQpO1xuXG4gICAgICAgIHRoaXMuJGVsLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5qb2luKCcgJykpO1xuXG4gICAgICAgIHRoaXMuJHRpdGxlID0gdGhpcy4kZWwuZmluZCgnLm1vZGFsLXRpdGxlJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuJHRpdGxlLmNzcyhcIm9wYWNpdHlcIiwgXCIwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0b1JlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9iaW5kRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgX3JlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoVG9Eb2N1bWVudCkge1xuICAgICAgICAgICAgLy8gRm9yIEZvdW5kYXRpb24gdG8gd29yayBhcyBleHBlY3RlZCB3ZSBuZWVkIHRvIGhhdmUgdGhlIGVsZW1lbnQgYXR0YWNoZWQgdG8gdGhlIERPTSBiZWZvcmUgY2FsbGluZyAuZm91bmRhdGlvbigncmV2ZWFsJywgJ29wZW4nKVxuICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCh0aGlzLmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF1dG9TaG93KSB7XG4gICAgICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzU2VsZWN0RXZlbnQgPSAoZSkgPT4gKGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikgJiYgKGUucHJldmVudERlZmF1bHQoKSB8fCB0cnVlKTtcblxuICAgIC8vIFdlIGRvbnQgYWN0dWFsbHkgd2FudCB0byB1c2UgdGhlIEZvdW5kYXRpb24gbW9kYWwgZXZlbnRzIHNpbmNlIHRoZXkgZ2V0IHdlaXJkIGZhc3QuLi5cbiAgICAvLyBsZXRzIHVzZSBvdXIgb3duIHNvIGNvbnN1bWVycyBkb250IGhhdmUgdG8ga25vdyBpdHMgZm91bmRhdGlvblxuICAgIF9iaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLiRlbC5vbignY2xpY2sga2V5ZG93bicsICcuanMtY2xvc2UnLCAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEV2ZW50KGUpICYmIHRoaXMudHJpZ2dlcignY2FuY2VsJywgdGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRCdXR0b25CZWhhdmlvdXIpIHtcbiAgICAgICAgICAgIHRoaXMub24oJ2Nsb3NlIGNhbmNlbCcsICgpID0+IHsgdGhpcy5jbG9zZSgpOyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLm9uKCdrZXlwcmVzcycsICcqJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBrZXlzLlRBQikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tlZXBGb2N1cyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xvc2UtZHJvcGRvd25zLW9uLWVzYycpKSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IEVTQyBmcm9tIGNsb3NpbmcgbW9kYWwgd2hlbiA8c2VsZWN0PiBlbGVtZW50cyBhcmUgb3BlblxuICAgICAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrIGtleWRvd24ga2V5dXAnLCAnc2VsZWN0JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0RXZlbnRUeXBlID0gZS50eXBlID09PSAnY2xpY2snIHx8IGUud2hpY2ggPT09IGtleXMuRU5URVIgfHwgZS53aGljaCA9PT0ga2V5cy5FU0M7XG4gICAgICAgICAgICAgICAgaWYoIWNvcnJlY3RFdmVudFR5cGUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RPcGVuID0gJCh0aGlzKS5hdHRyKCdkYXRhLW9wZW4nKTtcblxuICAgICAgICAgICAgICAgIGlmKHNlbGVjdE9wZW4gPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgXCJmYWxzZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYoKHNlbGVjdE9wZW4gPT09IFwiZmFsc2VcIiB8fCBzZWxlY3RPcGVuID09IG51bGwpICYmIGUud2hpY2ggIT09IGtleXMuRVNDKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1vcGVuJywgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLiRlbC5vbignYmx1cicsICdzZWxlY3QnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtb3BlbicsIFwiZmFsc2VcIik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ2xvc2UgbW9kYWxzIHdpdGggRVNDXG4gICAgICAgICAgICB0aGlzLiRlbC5vbigna2V5dXAnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RJc05vdE9wZW4gPSAhJCgnc2VsZWN0JykuaXMoXCI6Zm9jdXNcIikgfHwgJChcIjpmb2N1c1wiKS5hdHRyKCdkYXRhLW9wZW4nKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IGtleXMuRVNDICYmIHNlbGVjdElzTm90T3BlbiAmJiAkKCcuZi1vcGVuLWRyb3Bkb3duJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignY2FuY2VsJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93KCkge1xuICAgICAgICB0aGlzLl9iZWZvcmVTaG93KCk7XG4gICAgICAgIHRoaXMuJGVsLmZvdW5kYXRpb24oJ3JldmVhbCcsICdvcGVuJyk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignc2hvdycsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuJGVsLm9uKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2tlZXBGb2N1cyhlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRXhlY3V0ZSBjb2RlIGFmdGVyIHRoZSBtb2RhbCBpcyBkaXNwbGF5ZWRcbiAgICAgICAgdGhpcy4kZWwub24oJ29wZW5lZC5mbmR0bi5yZXZlYWwnLCAoKSA9PiB0aGlzLl9hZnRlclNob3coKSk7XG5cbiAgICAgICAgLy8gVHJhcHMgZm91bmRhdGlvbiBidWcgdGhhdCBjbG9zZXMgbW9kYWwgb24gZHJvcGRvd24gXCJjbG9zZWRcIiwgbm90IGFuIGlzc3VlIGluIDUuNS4zK1xuICAgICAgICB0aGlzLiRlbC5vZmYoJ2Nsb3NlZCcpO1xuXG4gICAgICAgIC8vIEhhbmRsZSBmb3VuZGF0aW9uICBjbG9zZSBldmVudHMgZnJvbSBFU0MgYW5kIEJHIGNsaWNrc1xuICAgICAgICB0aGlzLiRlbC5vbignY2xvc2UuZm5kdG4ucmV2ZWFsJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZWwub2ZmKCdjbG9zZS5mbmR0bi5yZXZlYWwnKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignY2xvc2UnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2JlZm9yZVNob3coKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9ICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgX2FmdGVyU2hvdygpIHtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSk7XG4gICAgICAgICQoJy5jb250YWluZXInKS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICQoJy5yb3cuZm9vdGVyJykuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICAkKCcubmF2LWNvbnRhaW5lcicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblxuICAgICAgICB0aGlzLiR0aXRsZS5mb2N1cygpO1xuICAgICAgICB0aGlzLl9zZXRTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBfc2V0U2Nyb2xsKCkge1xuICAgICAgICBsZXQgb2Zmc2V0ID0gd2luZG93LnBhZ2VZT2Zmc2V0IC0gcGFyc2VJbnQodGhpcy4kZWwuY3NzKCd0b3AnKS5zbGljZSgwLCAtMiksIDEwKTsgLy8gdGhlICd0b3AnIHN0eWxpbmcgaXMgYmFrZWQgaW4gYnkgZm91bmRhdGlvblxuICAgICAgICBpZiAod2luZG93LmlubmVySGVpZ2h0IDwgdGhpcy5lbC5vZmZzZXRIZWlnaHQgLSBvZmZzZXQpIHsgLy8gc2Nyb2xsIHRhbGwgbW9kYWxzIGludG8gdmlldyBhcyBtdWNoIGFzIGZpdHNcbiAgICAgICAgICAgIG9mZnNldCA9IE1hdGgubWluKHRoaXMuZWwub2Zmc2V0SGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0ICsgMTAsIC01KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDY0MSkgeyAvLyBtb2JpbGUgdmlldyBwYWRkaW5nXG4gICAgICAgICAgICBvZmZzZXQgLT0gNTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsLnNjcm9sbEludG9WaWV3KCk7IC8vIHNldHMgc2Nyb2xsIHRvIHRvcCBvZiBtb2RhbFxuICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgb2Zmc2V0KTsgLy8gYWRqdXN0cyBzY3JvbGwgYWNjb3JkaW5nIHRvIGNhbGN1bGF0ZWQgb2Zmc2V0XG4gICAgfVxuXG4gICAgX2tlZXBGb2N1cyhlKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVsZW0gPSAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuJHRpdGxlIHx8IHRoaXMuJGVsLmZpbmQoJzpmb2N1c2FibGU6dmlzaWJsZScpLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IGxhc3RGb2N1c2FibGUgPSB0aGlzLiRlbC5maW5kKCc6Zm9jdXNhYmxlOnZpc2libGUnKS5sYXN0KCk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZUVsZW0uaXMoZmlyc3RGb2N1c2FibGUpICYmIGUud2hpY2ggPT09IGtleXMuVEFCICYmIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxhc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICgkKGFjdGl2ZUVsZW0pLmlzKGxhc3RGb2N1c2FibGUpICYmIGUud2hpY2ggPT09IGtleXMuVEFCICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZSgpIHtcbiAgICAgICAgdGhpcy4kZWwuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XG4gICAgICAgIHRoaXMudHJpZ2dlcignaGlkZScsIHRoaXMpO1xuICAgICAgICAkKCcuY29udGFpbmVyJykuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcbiAgICAgICAgJCgnLnJvdy5mb290ZXInKS5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xuICAgICAgICAkKCcubmF2LWNvbnRhaW5lcicpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG4gICAgICAgIHRoaXMuZm9jdXNlZC5mb2N1cygpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IE1vZGFsIH07XG4iLCJleHBvcnQgZGVmYXVsdCAoe3RpdGxlLCBjbG9zZU9uRXNjLCBjbG9zZU9uQmx1ciwgc2hvd0Nsb3NlQnV0dG9ufSkgPT4gYDxkaXYgY2xhc3M9XCJyZXZlYWwtbW9kYWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1yZXZlYWwgZGF0YS1vcHRpb25zPVwiY2xvc2Vfb25fZXNjOiR7IGNsb3NlT25Fc2MgfTtjbG9zZV9vbl9iYWNrZ3JvdW5kX2NsaWNrOiR7IGNsb3NlT25CbHVyIH07XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJtb2RhbC10aXRsZSBwcmltYXJ5LWNvbG9yXCIgdGFiaW5kZXg9XCIwXCI+JHsgdGl0bGUgfTwvaDI+XG4gICAgICAgICR7c2hvd0Nsb3NlQnV0dG9uID8gYDxhIGNsYXNzPVwiY2xvc2UtcmV2ZWFsLW1vZGFsIGpzLWNsb3NlXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCIkeyB3aW5kb3cuaHRtbCgnY2xvc2UnKSB9XCIgdGFiaW5kZXg9XCIwXCI+JiMyMTU7PC9hPmAgOiAnJ31cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250YWluZXJcIj48L2Rpdj5cbjwvZGl2PmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoeyBleHBpcmF0aW9uV2FybmluZywgZGVzY3JpcHRpb24sIGRldGFpbHMsIG5vdGUgfSkgPT4gYFxuICAgICR7ZXhwaXJhdGlvbldhcm5pbmcubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz0nZXhwaXJhdGlvbi13YXJuaW5nJz4ke2V4cGlyYXRpb25XYXJuaW5nfTwvcD5gIDogJyd9XG4gICAgJHtkZXNjcmlwdGlvbi5sZW5ndGggPiAwID8gYDxwIGNsYXNzPSdkZXNjcmlwdGlvbic+JHtkZXNjcmlwdGlvbn08L3A+YCA6ICcnfVxuICAgICR7ZGV0YWlscy5tYXAoKGRldGFpbCkgPT4gYDxwIGNsYXNzPSdkZXRhaWwnPiR7ZGV0YWlsfTwvcD5gKS5qb2luKCcnKX1cbiAgICAke25vdGUubGVuZ3RoID4gMCA/IGA8cCBjbGFzcz0nbm90ZSc+JHtub3RlfTwvcD5gIDogJyd9XG5gO1xuIiwiaW1wb3J0IEhvbGRJbmZvcm1hdGlvblRlbXBsYXRlICAgICAgICAgICAgICBmcm9tICcuLi90ZW1wbGF0ZXMvSG9sZEluZm9ybWF0aW9uLmh0bWwnO1xuXG5jb25zdCB7IGh0bWwsIHVybCwgcm91dGVzIH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbGRJbmZvcm1hdGlvbiBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGdldCBleHBpcmF0aW9uV2FybmluZygpIHtcbiAgICAgICAgY29uc3QgaXNFeHBpcmVkQ29udGVudCA9IHRoaXMubW9kZWwuZ2V0KCdpc093bmVkJykgJiYgIXRoaXMubW9kZWwuZ2V0KCdvd25lZENvcGllcycpO1xuICAgICAgICBpZiAoaXNFeHBpcmVkQ29udGVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3N1Y2Nlc3NQb3NpdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5ub0NvcGllc09uUGxhY2VIb2xkJyl9IDxhIGNsYXNzPSdIb2xkU3VjY2Vzc01vZGFsLWxpbmsnIGhyZWY9JyR7dXJsKHJvdXRlcy5hY2NvdW50SG9sZHMpfSc+JHtodG1sKCdob2xkU3VjY2Vzc01vZGFsLm1hbmFnZUhvbGRzJyl9PC9hPmA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJykgPyB0aGlzLm1vZGVsLmdldCgnaXNPbkhvbGQnKSA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubm9Db3BpZXNUZXh0SGVsZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubm9Db3BpZXNUZXh0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgY29uc3QgaG9sZHNSYXRpbyA9IHRoaXMubW9kZWwuZ2V0KCdob2xkc1JhdGlvJyk7XG4gICAgICAgIGNvbnN0IGhvbGRMaXN0UG9zaXRpb24gPSB0aGlzLm1vZGVsLmdldCgnaG9sZExpc3RQb3NpdGlvbicpIHx8IDA7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpICYmIGhvbGRMaXN0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdwcmVSZWxlYXNlTW9kYWwuYm9ycm93VXBvblJlbGVhc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdyYXRpbyc6XG4gICAgICAgICAgICAgICAgaWYgKGhvbGRzUmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhvbGRzUmF0aW8gPj0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLmxpc3RQb3NpdGlvbkh0bWwnLCB7IGhvbGRzUmF0aW86IHRoaXMubW9kZWwuZ2V0KCdob2xkc1JhdGlvJykgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5uZXh0QXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIGNhc2UgJ2Jhc2ljUG9zaXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnc3VjY2Vzc1Bvc2l0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGRldGFpbHMoKSB7XG4gICAgICAgIGNvbnN0IGhvbGRzQ291bnQgPSB0aGlzLm1vZGVsLmdldCgnaG9sZHNDb3VudCcpIHx8IDA7XG4gICAgICAgIGNvbnN0IG93bmVkQ29waWVzID0gdGhpcy5tb2RlbC5nZXQoJ293bmVkQ29waWVzJykgfHwgMDtcbiAgICAgICAgY29uc3QgaG9sZExpc3RQb3NpdGlvbiA9IHRoaXMubW9kZWwuZ2V0KCdob2xkTGlzdFBvc2l0aW9uJykgfHwgMDtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jhc2ljUG9zaXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnc3VjY2Vzc1Bvc2l0aW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBodG1sKCdob2xkc1JhdGlvSGVscE1vZGFsLnlvdXJIb2xkc1Bvc2l0aW9uSHRtbCcsIHsgaG9sZExpc3RQb3NpdGlvbiwgaG9sZHNDb3VudCB9KSxcbiAgICAgICAgICAgICAgICAgICAgaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5saWJyYXJ5Q29waWVzJywgeyBvd25lZENvcGllcyB9KVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjYXNlICdyYXRpbyc6XG4gICAgICAgICAgICBjYXNlICdiYXNpYyc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwudG90YWxIb2xkc0h0bWwnLCB7IGhvbGRzQ291bnQgfSksXG4gICAgICAgICAgICAgICAgICAgIGh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubGlicmFyeUNvcGllcycsIHsgb3duZWRDb3BpZXMgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG5vdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnaXNGYXN0bGFuZScpID8gaHRtbCgnYWR2YW50YWdlRmFzdFBhc3NIdG1sJykgOiAnJztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih7IHR5cGUgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmVsID0gdGhpcy5lbCB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5lbC5jbGFzc05hbWUgPSBgJHt0aGlzLmVsLmNsYXNzTmFtZX0gSG9sZEluZm9ybWF0aW9uYDtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZSB8fCAnYmFzaWMnO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IEhvbGRJbmZvcm1hdGlvblRlbXBsYXRlKHtcbiAgICAgICAgICAgIGV4cGlyYXRpb25XYXJuaW5nOiB0aGlzLmV4cGlyYXRpb25XYXJuaW5nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmRldGFpbHMsXG4gICAgICAgICAgICBub3RlOiB0aGlzLm5vdGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKHZpZXcpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE1vZGFsIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGFsJztcbmltcG9ydCBIb2xkSW5mb3JtYXRpb24gZnJvbSAnLi9Ib2xkSW5mb3JtYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb2xkSW5mb3JtYXRpb25Nb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgICBjb25zdHJ1Y3Rvcih7IG1vZGVsLCB0eXBlIH0pIHtcbiAgICAgICAgY29uc3QgaW5mb3JtYXRpb24gPSBuZXcgSG9sZEluZm9ybWF0aW9uKHsgbW9kZWwsIHR5cGUgfSkucmVuZGVyKCk7XG4gICAgICAgIGNvbnN0IG1vZGFsQ29udGVudHMgPSB7XG4gICAgICAgICAgICBjbGFzc2VzOiBbJ0hvbGRJbmZvcm1hdGlvbk1vZGFsJ10sXG4gICAgICAgICAgICB0aXRsZTogd2luZG93Lmh0bWwoJ2hvbGRzUmF0aW9IZWxwTW9kYWwuaGVhZGluZycpLFxuICAgICAgICAgICAgY29udGVudDogaW5mb3JtYXRpb24uZWxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIobW9kYWxDb250ZW50cyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuLi9jb21tb24vbW9kYWwnO1xuaW1wb3J0IEhvbGRJbmZvcm1hdGlvblYyIGZyb20gJy4vSG9sZEluZm9ybWF0aW9uVjInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIb2xkSW5mb3JtYXRpb25Nb2RhbFYyIGV4dGVuZHMgTW9kYWwge1xuICAgIGNvbnN0cnVjdG9yKHsgbW9kZWwsIGhpZGVIb2xkc0xpbmsgPSBmYWxzZX0pIHtcbiAgICAgICAgY29uc3QgaW5mb3JtYXRpb24gPSBuZXcgSG9sZEluZm9ybWF0aW9uVjIoe21vZGVsLCBoaWRlSG9sZHNMaW5rLCBpc1Zpc2l0b3I6IHdpbmRvdy5PdmVyRHJpdmUuaXNWaXNpdG9yfSkucmVuZGVyKCk7XG4gICAgICAgIGNvbnN0IG1vZGFsQ29udGVudHMgPSB7XG4gICAgICAgICAgICBjbGFzc2VzOiBbJ0hvbGRJbmZvcm1hdGlvbk1vZGFsVjInXSxcbiAgICAgICAgICAgIHRpdGxlOiB3aW5kb3cuaHRtbCgnaG9sZHNSYXRpb0hlbHBNb2RhbC5oZWFkaW5nJyksXG4gICAgICAgICAgICBjb250ZW50OiBpbmZvcm1hdGlvbi5lbFxuICAgICAgICB9O1xuICAgICAgICBzdXBlcihtb2RhbENvbnRlbnRzKTtcbiAgICB9XG59XG4iLCJjb25zdCB7IGh0bWwsIHRleHQgfSA9IHdpbmRvdztcbmV4cG9ydCBkZWZhdWx0ICh7IGRlc2NyaXB0aW9uLCBkZXRhaWxzLCBub3RlLCBNYWNtaWxsYW5NZXNzYWdlIH0pID0+IGBcbiAgICAke2Rlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmxlbmd0aCA+IDAgPyBgPHAgY2xhc3M9J2Rlc2NyaXB0aW9uJz4ke2Rlc2NyaXB0aW9ufTwvcD5gIDogJyd9XG4gICAgJHtkZXRhaWxzICYmIGRldGFpbHMubWFwKChkZXRhaWwpID0+IGA8cCBjbGFzcz0nZGV0YWlsJz48c3BhbiBjbGFzcz0naG9sZEluZm9MYWJlbCc+JHtkZXRhaWwubGFiZWx9OiA8L3NwYW4+PHNwYW4+JHtkZXRhaWwudmFsdWV9PC9zcGFuPjwvcD5gKS5qb2luKCcnKX1cbiAgICAke25vdGUgJiYgbm90ZS5sZW5ndGggPiAwID8gYDxwIGNsYXNzPSdub3RlJz4ke25vdGV9PC9wPmAgOiAnJ31cbiAgICAke01hY21pbGxhbk1lc3NhZ2UgJiYgTWFjbWlsbGFuTWVzc2FnZS5sZW5ndGggPiAwID8gYDxwIGNsYXNzPVwibWFjbWlsbGFuTWVzc2FnZVwiPiR7TWFjbWlsbGFuTWVzc2FnZX08L3A+YCA6ICcnfVxuYDtcbiIsImltcG9ydCBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSBmcm9tICcuL0hvbGRJbmZvcm1hdGlvblYyLmh0bWwnO1xuaW1wb3J0IE1hY21pbGxhbk1lc3NhZ2UgZnJvbSAnLi4vLi4vLi4vLi4vbGliL3V0aWxpdHkvbWFjbWlsbGFuTWVzc2FnZSc7XG5jb25zdCB7IHRleHQgfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9sZEluZm9ybWF0aW9uVjIgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7IGhpZGVIb2xkc0xpbmsgPSBmYWxzZSwgaXNWaXNpdG9yID0gZmFsc2UgfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmVsID0gdGhpcy5lbCB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5oaWRlSG9sZHNMaW5rID0gaGlkZUhvbGRzTGluaztcbiAgICAgICAgdGhpcy5pc1Zpc2l0b3IgPSBpc1Zpc2l0b3I7XG4gICAgICAgIHRoaXMuTUFYX1dBSVRfTU9OVEhTX1RPX1NIT1cgPSA2O1xuICAgICAgICB0aGlzLk1BWF9XQUlUX1dFRUtTX1RPX1NIT1cgPSAyNjtcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnRpdGxlU3RhdGUnLCB0aGlzLnJlbW92ZVdhaXRUaW1lKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBIb2xkSW5mb3JtYXRpb25UZW1wbGF0ZSh7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZGV0YWlscyxcbiAgICAgICAgICAgIG5vdGU6IHRoaXMubm90ZSxcbiAgICAgICAgICAgIE1hY21pbGxhbk1lc3NhZ2U6IHRoaXMuTWFjbWlsbGFuTWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKHZpZXcpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlbW92ZVdhaXRUaW1lKCkge1xuICAgICAgICBpZiAodGhpcy5oaWRlV2FpdFRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcmVyZWxlYXNlVGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLnByZXJlbGVhc2VOb1dhaXRUaW1lJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0V4cGlyZWRUaXRsZSkge1xuICAgICAgICAgICAgbGV0IHRoZVRleHQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJykge1xuICAgICAgICAgICAgICAgIHRoZVRleHQgPSB0ZXh0KCdob2xkc1JhdGlvSGVscE1vZGFsLm5vQ29waWVzT25QbGFjZUhvbGQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhlVGV4dCA9IHRleHQoJ2hvbGRzUmF0aW9IZWxwTW9kYWwubm9Db3BpZXNUZXh0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRlSG9sZHNMaW5rXG4gICAgICAgICAgICAgICAgPyB0aGVUZXh0XG4gICAgICAgICAgICAgICAgOiBgPHNwYW4+JHt0aGVUZXh0fTxhIGNsYXNzPVwibWFuYWdlSG9sZHNMaW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9yZWZlcnJlclwiIGhyZWY9XCIvYWNjb3VudC9ob2xkc1wiPiR7dGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAnaG9sZFN1Y2Nlc3NNb2RhbC5tYW5hZ2VIb2xkcydcbiAgICAgICAgICAgICAgICAgICl9PC9hPjwvc3Bhbj5gO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheSAmJlxuICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgZGV0YWlsc1VybCA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUlkLCB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWwuZ2V0KCdpZCcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZGV0YWlsc0xpbmsgPSBgPGEgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVwiIGhyZWY9XCIke2RldGFpbHNVcmx9XCI+JHt0ZXh0KFxuICAgICAgICAgICAgICAgICdsdWNreURheS5hbGxMdWNreURheUhvbGRzSW5mb0xpbmtUZXh0J1xuICAgICAgICAgICAgKX08L2E+YDtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0KCdsdWNreURheS5hbGxMdWNreURheUhvbGRzSW5mbycsIHsgbGluazogZGV0YWlsc0xpbmsgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zhc3RMYW5lVGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLmFkdmFudGFnZUNhdmVhdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNWaXNpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5ybGFDYXZlYXQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0IGRldGFpbHMoKSB7XG4gICAgICAgIGxldCBkZXRhaWxzID0gW107XG4gICAgICAgIGlmICghdGhpcy5zaG93V2FpdFRpbWVVbmF2YWlsYWJsZSAmJiAhdGhpcy5oaWRlV2FpdFRpbWUpIHtcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUud2FpdFRpbWUnKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy53YWl0VGltZVRleHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaG9sZExpc3RQb3NpdGlvbicpKSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLnBsYWNlSW5MaW5lJyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMubW9kZWwuZ2V0KCdob2xkTGlzdFBvc2l0aW9uJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvd25lZENvcGllcyA9IHRoaXMubW9kZWwuZ2V0KCdvd25lZENvcGllcycpIHx8IDA7XG4gICAgICAgIGxldCB0b3RhbEhvbGRzID0gdGhpcy5tb2RlbC5nZXQoJ2hvbGRzQ291bnQnKSB8fCAwO1xuXG4gICAgICAgIGRldGFpbHMucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5saWJyYXJ5Q29waWVzJyksXG4gICAgICAgICAgICB2YWx1ZTogb3duZWRDb3BpZXMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvd25lZENvcGllcyA+IDEpIHtcbiAgICAgICAgICAgIGxldCBob2xkc1JhdGlvID1cbiAgICAgICAgICAgICAgICBvd25lZENvcGllcyAmJiB0b3RhbEhvbGRzID8gdG90YWxIb2xkcyAvIG93bmVkQ29waWVzIDogMDtcbiAgICAgICAgICAgIGxldCByYXRpb0Rpc3BsYXlWYWx1ZSA9XG4gICAgICAgICAgICAgICAgaG9sZHNSYXRpbyA+IDAgJiYgaG9sZHNSYXRpbyA8IDFcbiAgICAgICAgICAgICAgICAgICAgPyAnPCAxJ1xuICAgICAgICAgICAgICAgICAgICA6IE1hdGgucm91bmQoaG9sZHNSYXRpbyk7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLnBlb3BsZVdhaXRpbmdUb3RhbCcpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0b3RhbEhvbGRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLnBvZXBsZVdhaXRpbmdQZXJDb3B5JyksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJhdGlvRGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0ZXh0KCdleHBlY3RlZFdhaXRUaW1lLnBlb3BsZVdhaXRpbmcnKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdG90YWxIb2xkcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH1cblxuICAgIGdldCB3YWl0VGltZUh0bWwoKSB7XG4gICAgICAgIHZhciBodG1sID0gJyc7XG4gICAgICAgIGlmICghdGhpcy5oaWRlV2FpdFRpbWUpIHtcbiAgICAgICAgICAgIGh0bWwgPSBgPHNwYW4gY2xhc3M9J3dhaXRpbmdUZXh0Jz4ke3dpbmRvdy50ZXh0KFxuICAgICAgICAgICAgICAgICdleHBlY3RlZFdhaXRUaW1lLndhaXRUaW1lJ1xuICAgICAgICAgICAgKX06ICR7dGhpcy53YWl0VGltZVRleHR9PC9zcGFuPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuXG4gICAgZ2V0IHdhaXRUaW1lVGV4dCgpIHtcbiAgICAgICAgbGV0IHdhaXRUaW1lVGV4dCA9ICcnO1xuXG4gICAgICAgIGlmICghdGhpcy5oaWRlV2FpdFRpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dXYWl0VGltZVVuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgd2FpdFRpbWVUZXh0ID0gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5ub3RBdmFpbGFibGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGVzdGltYXRlZFdhaXREYXlzID0gTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgnZXN0aW1hdGVkV2FpdERheXMnKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGVzdGltYXRlZFdhaXREYXlzIDw9IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FpdFRpbWVUZXh0ID0gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5hdmFpbGFibGVTb29uJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkV2FpdERheXMgPFxuICAgICAgICAgICAgICAgICAgICA3ICogdGhpcy5NQVhfV0FJVF9XRUVLU19UT19TSE9XXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRUaW1lVGV4dCA9IHRleHQoJ2V4cGVjdGVkV2FpdFRpbWUuYWJvdXRYV2Vla3MnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWVrczogTWF0aC5jZWlsKGVzdGltYXRlZFdhaXREYXlzIC8gNyksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgbWF4IG91dCBhdCBcImF0IGxlYXN0IDYgbW9udGhzXCJcbiAgICAgICAgICAgICAgICAgICAgd2FpdFRpbWVUZXh0ID0gdGV4dCgnZXhwZWN0ZWRXYWl0VGltZS5hdExlYXN0WU1vbnRocycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoczogTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5jZWlsKGVzdGltYXRlZFdhaXREYXlzIC8gMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTUFYX1dBSVRfTU9OVEhTX1RPX1NIT1dcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3YWl0VGltZVRleHQ7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dXYWl0VGltZVVuYXZhaWxhYmxlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ2VzdGltYXRlZFdhaXREYXlzJykgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ2VzdGltYXRlZFdhaXREYXlzJykgPT09IG51bGwgfHxcbiAgICAgICAgICAgIHRoaXMuaXNQcmVyZWxlYXNlVGl0bGUgfHxcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpdG9yIHx8XG4gICAgICAgICAgICB0aGlzLmlzRXhwaXJlZFRpdGxlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGhpZGVXYWl0VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuaXNGYXN0TGFuZVRpdGxlIHx8XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJyB8fFxuICAgICAgICAgICAgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJylcbiAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuZ2V0KCdpc0JvcnJvd2VkJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdib3Jyb3dlZCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRXhwaXJlZFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZG9udC1tYXJrLXN1LWFzLWV4cGlyZWQnKVxuICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmlzRXhwaXJlZFxuICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmdldCgnaXNPd25lZCcpICYmXG4gICAgICAgICAgICAgICAgICAhdGhpcy5tb2RlbC5nZXQoJ293bmVkQ29waWVzJykgJiZcbiAgICAgICAgICAgICAgICAgICF0aGlzLm1vZGVsLmFsbENvcGllc0FyZUx1Y2t5RGF5O1xuICAgIH1cblxuICAgIGdldCBpc0Zhc3RMYW5lVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnaXNGYXN0bGFuZScpO1xuICAgIH1cblxuICAgIGdldCBpc1ByZXJlbGVhc2VUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpO1xuICAgIH1cblxuICAgIGdldCBub3RlKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZ2V0IE1hY21pbGxhbk1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBNYWNtaWxsYW5NZXNzYWdlKHRoaXMubW9kZWwpO1xuICAgIH1cbn1cbiIsImltcG9ydCBDb250ZXh0TWVudVRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGVzL0NvbnRleHRNZW51Lmh0bWwnO1xuY29uc3QgeyBmZWF0dXJlTWFuYWdlciwgdXJsLCByb3V0ZXMsIE92ZXJEcml2ZSwgdGV4dCwgaHRtbCB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0TWVudSBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIHRlbXBsYXRlID0gQ29udGV4dE1lbnVUZW1wbGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMucmlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpO1xuXG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTppc0luSGlzdG9yeScsICgpID0+IHRoaXMucmVuZGVyKCkpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgICBsZXQgZXZlbnRzID0ge1xuICAgICAgICAgICAgJ2NsaWNrIC5qcy1oaXN0b3J5QWN0aW9uJzogJ19oYW5kbGVDbGljaycsXG4gICAgICAgICAgICAna2V5ZG93biAuanMtaGlzdG9yeUFjdGlvbic6ICdfaGFuZGxlS2V5SGlzdG9yeScsXG4gICAgICAgICAgICAna2V5ZG93biAuanMtY29udGV4dC1idXR0b24nOiAndG9nZ2xlJyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdjbGVhbnVwQ29udGV4dE1lbnVUb2dnbGUnKSkge1xuICAgICAgICAgICAgZXZlbnRzWydrZXl1cCAuanMtY29udGV4dC1kcm9wJ10gPSAnX2hhbmRsZUtleVVwQ29udGFpbmVyJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnRzO1xuICAgIH1cblxuICAgIF9oYW5kbGVLZXlVcENvbnRhaW5lcihlKSB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3IC8qRVNDKi8pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9oYW5kbGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7XG4gICAgICAgICAgICBhY3Rpb246ICdoaXN0b3J5JyxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlS2V5SGlzdG9yeShlKSB7XG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xlYW51cENvbnRleHRNZW51VG9nZ2xlJykpIHtcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyB8fCBlLmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY2xlYW51cENvbnRleHRNZW51VG9nZ2xlJykpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB2aWV3TW9kZWwoKSB7XG4gICAgICAgIGxldCBzZXJpZXNTZWFyY2hVcmwgPSAnJztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmlzTWFnYXppbmUgJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZW5oYW5jZWRTZXJpZXMnKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZXJpZXNTZWFyY2hVcmwgPSB1cmwocm91dGVzLnNlYXJjaEJ5VHlwZSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VyaWVzSWQnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJykuc2VyaWVzSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRCeTogJ3JlYWRpbmdPcmRlcicsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSkge1xuICAgICAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCA9IHVybChyb3V0ZXMuc2VhcmNoQnlUeXBlLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5tb2RlbC5nZXQoJ3NlcmllcycpLFxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICduZXdseWFkZGVkJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYXNNZWRpYURvRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9kZWwuZ2V0KCdmb3JtYXRzJykuZm9yRWFjaCgoZm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0LmlkID09PSAnZWJvb2stbWVkaWEtZG8nKSB7XG4gICAgICAgICAgICAgICAgaGFzTWVkaWFEb0Zvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBtYXR1cml0eUxldmVsID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnJhdGluZ3MubWF0dXJpdHlMZXZlbC5pZDtcblxuICAgICAgICBjb25zdCByZWxhdGVkVGl0bGVzUGFnZVVybCA9IGAke3dpbmRvdy51cmwoXG4gICAgICAgICAgICB3aW5kb3cucm91dGVzLm1lZGlhUmVsYXRlZElkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKX0ke21hdHVyaXR5TGV2ZWwgPyBgP21hdHVyaXR5TGV2ZWw9JHttYXR1cml0eUxldmVsfWAgOiAnJ31gO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc093bmVkOiB0aGlzLm1vZGVsLmdldCgnaXNPd25lZCcpLFxuICAgICAgICAgICAgcmVsYXRlZFRpdGxlc1BhZ2VVcmwsXG4gICAgICAgICAgICBpZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgIHJpZDogdGhpcy5yaWQsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyksXG4gICAgICAgICAgICB0eXBlSWQ6IHRoaXMubW9kZWwuZ2V0KCd0eXBlJykuaWQsXG4gICAgICAgICAgICBzYW1wbGVIcmVmOiB0aGlzLm1vZGVsLmdldCgnc2FtcGxlJykuaHJlZiB8fCAnJyxcbiAgICAgICAgICAgIHNhbXBsZVRleHQ6IHRoaXMuX2dldFNhbXBsZVRleHQoKSxcbiAgICAgICAgICAgIGFsaWdubWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgICBoaXN0b3J5QWN0aW9uTGFiZWw6IHRoaXMuX2dldEhpc3RvcnlBY3Rpb25MYWJlbCgpLFxuICAgICAgICAgICAgaGlzdG9yeUFjdGlvblRleHQ6IHRoaXMuX2dldEhpc3RvcnlBY3Rpb25UZXh0KCksXG4gICAgICAgICAgICBoaXN0b3J5RW5hYmxlZDpcbiAgICAgICAgICAgICAgICBPdmVyRHJpdmUuc2hvd0hpc3RvcnlGZWF0dXJlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpLFxuICAgICAgICAgICAgZ2FIaXN0b3J5QWN0aW9uOiB0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKVxuICAgICAgICAgICAgICAgID8gJ2hpc3RvcnktcmVtb3ZlJ1xuICAgICAgICAgICAgICAgIDogJ2hpc3RvcnktYWRkJyxcbiAgICAgICAgICAgIHNlcmllc1NlYXJjaFVybCxcbiAgICAgICAgICAgIGhhc01lZGlhRG9Gb3JtYXQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2dldFNhbXBsZVRleHQoKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW9ib29rJyB8fCB0eXBlID09PSAnbXVzaWMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dCgnc2FtcGxlTGlzdGVuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQoJ3NhbXBsZVdhdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dCgnc2FtcGxlUmVhZCcpO1xuICAgIH1cblxuICAgIF9nZXRIaXN0b3J5QWN0aW9uTGFiZWwoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyk7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LnJlbW92ZVRpdGxlJywgeyB0aXRsZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sKCdyZWFkaW5nSGlzdG9yeS5hZGRUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0SGlzdG9yeUFjdGlvblRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnaXNJbkhpc3RvcnknKSkge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LnJlbW92ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWwoJ3JlYWRpbmdIaXN0b3J5LmFkZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCh0aGlzLnRlbXBsYXRlKHRoaXMudmlld01vZGVsKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaXNLZXlib2FyZFNlbGVjdEV2ZW50ID0gKGUpID0+XG4gICAgICAgIChlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikgJiYgKGUucHJldmVudERlZmF1bHQoKSB8fCB0cnVlKTtcblxuICAgIGNsb3NlKCkge1xuICAgICAgICB3aW5kb3cuRm91bmRhdGlvbi5saWJzLmRyb3Bkb3duLmNsb3NlKFxuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmpzLWNvbnRleHQtZHJvcCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNLZXlib2FyZFNlbGVjdEV2ZW50KGUpKSB7XG4gICAgICAgICAgICB3aW5kb3cuRm91bmRhdGlvbi5saWJzLmRyb3Bkb3duLnRvZ2dsZShcbiAgICAgICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuanMtY29udGV4dC1idXR0b24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBDb3ZlclRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGVzL0NvdmVyLmh0bWwnO1xuaW1wb3J0IE5vQ292ZXJUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlcy9Ob0NvdmVyLmh0bWwnO1xuaW1wb3J0IHsgdG9TdGF0aWNVcmwgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvYXNzZXRNYXBwZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3ZlciBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHsgY292ZXJXaWR0aHMsIGlzSW5IZXJvLCBpc1RpdGxlSGlzdG9yeSA9IGZhbHNlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICB0aGlzLmNvdmVyV2lkdGhzID0gXy5leHRlbmQoXG4gICAgICAgICAgICB7IG1vYmlsZTogMTQ1LCB0YWJsZXQ6IDE2MCwgZGVza3RvcDogMTkwIH0sXG4gICAgICAgICAgICBjb3ZlcldpZHRoc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzSW5IZXJvID0gaXNJbkhlcm87XG4gICAgICAgIHRoaXMuaXNUaXRsZUhpc3RvcnkgPSBpc1RpdGxlSGlzdG9yeTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLl9yZW5kZXIpO1xuICAgICAgICB0aGlzLl9yZW5kZXIoKTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgICQod2luZG93KS5vZmYoYHJlc2l6ZS4ke3RoaXMubW9kZWwuaWR9YCk7XG4gICAgfVxuXG4gICAgX3JlbmRlcigpIHtcbiAgICAgICAgY29uc3QgbWVkaWEgPSB0aGlzLm1vZGVsLnRvSlNPTigpO1xuICAgICAgICBjb25zdCBjb3ZlcldpZHRoID0gYm93c2VyLm1vYmlsZVxuICAgICAgICAgICAgPyB0aGlzLmNvdmVyV2lkdGhzLm1vYmlsZVxuICAgICAgICAgICAgOiBib3dzZXIudGFibGV0XG4gICAgICAgICAgICA/IHRoaXMuY292ZXJXaWR0aHMudGFibGV0XG4gICAgICAgICAgICA6IHRoaXMuY292ZXJXaWR0aHMuZGVza3RvcDtcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLm1vZGVsLmdldENvdmVyKGNvdmVyV2lkdGgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIGxldCAkY292ZXIgPSBgPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoJGNvdmVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb3ZlciAmJiBjb3Zlci5ocmVmKSB7XG4gICAgICAgICAgICBsZXQgJGNvdmVyID0gJChcbiAgICAgICAgICAgICAgICBDb3ZlclRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWEsXG4gICAgICAgICAgICAgICAgICAgIGNvdmVyQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAoY292ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Zlci5wcmltYXJ5Q29sb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Zlci5wcmltYXJ5Q29sb3IuaGV4KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgICAgICBzcmM6IGNvdmVyICYmIGNvdmVyLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHRoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogd2luZG93LnRleHQoJ2NvdmVyLmNvdmVySW1hZ2VMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZWRpYS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IG1lZGlhLmZpcnN0Q3JlYXRvck5hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBub1NhbXBsZUNsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEuc2FtcGxlLmhyZWYgPT0gbnVsbCA/ICdpcy1ub1NhbXBsZScgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3Jjc2V0OiBjb3ZlciAmJiBjb3Zlci5zcmNzZXQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExIVE5HLTIxMDU6IEluIHRoZSBldmVudCB0aGF0IGFuIGltYWdlIGZhaWxzIHRvIGxvYWQsIHdpcGUgb3V0IHRoZSBocmVmJ3MgYW5kIHVwZGF0ZSB0aGUgbW9kZWwgdG8gdHJpZ2dlciBhIHJlbmRlcigpXG4gICAgICAgICAgICAkY292ZXIuZmluZCgnaW1nJykub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpbWFnZXNSZW1vdmVkID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbC5hdHRyaWJ1dGVzLmNvdmVycylcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgXyhpbWFnZXNSZW1vdmVkKS5lYWNoKChpbWFnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaW1hZ2UuaHJlZjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KHsgY292ZXJzOiBpbWFnZXNSZW1vdmVkIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKCRjb3Zlcik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1RpdGxlSGlzdG9yeSkge1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgYDxhIGhyZWY9XCIke3RoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD1cIiR7d2luZG93Lmh0bWwoJ2NvdmVySW1hZ2VGb3JUaXRsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBtZWRpYS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9XCIgY2xhc3M9XCJoaXN0b3J5LW5vQ292ZXJcIiBzcmM9XCIke3RvU3RhdGljVXJsKFxuICAgICAgICAgICAgICAgICAgICAnaW1nL25vLWNvdmVyX2VuX1VTLmpwZydcbiAgICAgICAgICAgICAgICApfVwiPlxuICAgICAgICAgICAgICAgIDwvYT5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNyZWF0b3JUZXh0ID0gdGhpcy5tb2RlbC5pc01hZ2F6aW5lXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmdldCgnZWRpdGlvbicpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1vZGVsLmdldCgnZmlyc3RDcmVhdG9yTmFtZScpO1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgTm9Db3ZlclRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWEsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHRoaXMubW9kZWwudGl0bGVEZXRhaWxzVXJsLFxuICAgICAgICAgICAgICAgICAgICBpc0luSGVybzogdGhpcy5pc0luSGVybyxcbiAgICAgICAgICAgICAgICAgICAgY292ZXJXaWR0aDogY292ZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY292ZXJIZWlnaHQ6IChjb3ZlcldpZHRoICogMjkzKSAvIDIyMCxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRvclRleHQ6IGNyZWF0b3JUZXh0LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFxuICAgICAgICAgICAgICAgIGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWAsXG4gICAgICAgICAgICAgICAgXy5iaW5kKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VPdmVyZmxvdyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgJy5Db3ZlckltYWdlQ29udGFpbmVyIC5ub0NvdmVyQXZhaWxhYmxlIC50aXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZ2V0KCd0aXRsZScpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihcbiAgICAgICAgICAgICAgICBgcmVzaXplLiR7dGhpcy5tb2RlbC5pZH1gLFxuICAgICAgICAgICAgICAgIF8uYmluZChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFuYWdlT3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICcuQ292ZXJJbWFnZUNvbnRhaW5lciAubm9Db3ZlckF2YWlsYWJsZSAuYXV0aG9yJyxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRvclRleHRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFxuICAgICAgICAgICAgICAgIGByZXNpemUuJHt0aGlzLm1vZGVsLmlkfWAsXG4gICAgICAgICAgICAgICAgXy5iaW5kKHRoaXMuX3Jlc2l6ZUNsZWFySW1hZ2UsIHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyB0aW1lb3V0IGdpdmVzIGJyb3dzZXIgY2hhbmNlIHRvIGRyYXcgYW5kIHNldCBpbm5lckhUTUwgdmFsdWVzIHVzZWRcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93KFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLnRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZU92ZXJmbG93KFxuICAgICAgICAgICAgICAgICAgICAnLkNvdmVySW1hZ2VDb250YWluZXIgLm5vQ292ZXJBdmFpbGFibGUgLmF1dGhvcicsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JUZXh0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNpemVDbGVhckltYWdlKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9yZXNpemVDbGVhckltYWdlKCkge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignaW1nJyk7XG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgJChpbWFnZSkuaGVpZ2h0KCgkKGltYWdlKS5wYXJlbnQoKS53aWR0aCgpICogMjkzKSAvIDIyMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX21hbmFnZU92ZXJmbG93KHNlbGVjdG9yLCByZXNldFRleHQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHJlc2V0VGV4dDtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rvci5pbmRleE9mKCcudGl0bGUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS53aWR0aCgpIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTRweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDEyNSAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTZweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDE1MCAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTI1XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMThweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJChlbGVtZW50KS53aWR0aCgpID49IDE1MCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzIwcHgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmluZGV4T2YoJy5hdXRob3InKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS53aWR0aCgpIDwgMTEwKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTBweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDEzNSAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTEwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTJweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkud2lkdGgoKSA8IDE2MCAmJlxuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLndpZHRoKCkgPj0gMTM1XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdmb250LXNpemUnLCAnMTRweCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJChlbGVtZW50KS53aWR0aCgpID49IDE2MCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZm9udC1zaXplJywgJzE2cHgnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwICYmXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBlbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYCR7dGV4dC5yZXBsYWNlKC9cXFcrJC9nLCAnJyl9Li4uYDsgLy8gcmVtb3ZlIHRyYWlsaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgYWRkIGVsbGlwc2lzXG4gICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICB0ZXh0ICE9PSAnLi4uJyAmJlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IGVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcVypcXHdcXFcqKFxcLnszfSkkL2csICckMScpOyAvLyByZW1vdmUgYSBub24tZWxsaXBzaXMgY2hhcmFjdGVyIGFuZCB1bndhbnRlZCBjaGFyYWN0ZXJzIGFyb3VuZCBpdM6pXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gdG9kbzogcHV0IGEgbWluIHdpZHRoIGFuIGhlaWdodCBvbiB0aGlzISBXZSBrbm93IHdoYXQgdGhlIGhlaWdodHMgYXJlIGZvciBwYXJ0aWN1bGFyIHNjcmVlbiB3aWR0aHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCBNZWRpYVBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Rhby9NZWRpYVBhcmFtZXRlcnMnO1xuaW1wb3J0IFRpdGxlQ29sbGVjdGlvbiBmcm9tICcuL21vZGVscy9UaXRsZUNvbGxlY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYUludGVyZmFjZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgXy5leHRlbmQodGhpcywgQmFja2JvbmUuRXZlbnRzKTtcblxuICAgICAgICB0aGlzLml0ZW1zICAgICAgICAgID0gbmV3IFRpdGxlQ29sbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmZhY2V0cyAgICAgICAgID0ge307XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnMgICAgPSBbXTtcbiAgICB9XG5cbiAgICBxdWlja1NlYXJjaCh0ZXJtLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgeyBxdWVyeTogdGVybSB9LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgc2VhcmNoKHBhcmFtZXRlcnMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoKF8uZXh0ZW5kKHt9LCBwYXJhbWV0ZXJzLCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgZmV0Y2hDb2xsZWN0aW9uQnlJZChpZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2goXy5leHRlbmQoe30sIHsgY29sbGVjdGlvbklkOiBpZCB9LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgZmV0Y2hDb2xsZWN0aW9uQnlQYXJhbWV0ZXJzKGNvbGxlY3Rpb25GaWx0ZXJzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaChfLmV4dGVuZCh7fSwgY29sbGVjdGlvbkZpbHRlcnMsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICAvKiogVXRpbGl0eSBmdW5jdGlvbiB0byBzaW11bGF0ZSBhIGRhdGEgY2FsbCwgYnV0IGRlbGliZXJhdGxleSByZXR1cm4gYW4gZW1wdHkgcmVzdWx0IHNldCAqL1xuICAgIGZldGNoRW1wdHlSZXNwb25zZSgpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOnN0YXJ0JywgdGhpcywgeyBtZWRpYVBhcmFtZXRlcnM6IG51bGwgfSk7XG5cbiAgICAgICAgbGV0IGVtcHR5UmVzcG9uc2UgPSB7XG4gICAgICAgICAgICBpdGVtcyAgICAgICA6IFtdLFxuICAgICAgICAgICAgZmFjZXRzICAgICAgOiB7fSxcbiAgICAgICAgICAgIHNvcnRPcHRpb25zIDogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9mZXRjaERvbmUoZW1wdHlSZXNwb25zZSwgJ3N5bnRoZXRpYycpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzplbmQnLCB0aGlzKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVtcHR5UmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7TWVkaWFQYXJhbWV0ZXJzfSBwYXJhbWV0ZXJzXG4gICAgICogQG1lbWJlcm9mIE1lZGlhSW50ZXJmYWNlXG4gICAgICovXG4gICAgX2ZldGNoKHBhcmFtZXRlcnMpIHtcblxuICAgICAgICBpZiAoIXBhcmFtZXRlcnMpe1xuICAgICAgICAgICAgcGFyYW1ldGVycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYSB0aXRsZSBpZCBpcyBzcGVjaWZpY2VkIHRoZW4gbm8gZmFjZXRzIHdpbGwgYmUgY2FsY3VsYXRlZCByZWdhcmRsZXNzIG9mIHRoZSBwYXJhbXMgc2VudC5cbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmluY2x1ZGVkRmFjZXRzICYmICFwYXJhbWV0ZXJzLnRpdGxlSWQpe1xuICAgICAgICAgICAgcGFyYW1ldGVycy5pbmNsdWRlZEZhY2V0cyA9IHdpbmRvdy5PdmVyRHJpdmUuc3VwcG9ydGVkRmFjZXRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiYgcGFyYW1ldGVycy5zaHVmZmxlKXtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRzID0gWydtb3N0cG9wdWxhcicsICdyZWxlYXNlZGF0ZScsICd0aXRsZScsICdhdXRob3InLCAnbmV3bHlhZGRlZCcsICdsb3djaXJjdWxhdGluZycsICdtb3N0cG9wdWxhci1zaXRlJ107XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLnNvcnRCeSA9IHNvcnRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNvcnRzLmxlbmd0aCldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhUGFyYW1ldGVycyA9IG5ldyBNZWRpYVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKCEhd2luZG93Lk92ZXJEcml2ZS5zaG93T25seUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgbWVkaWFQYXJhbWV0ZXJzLnNob3dPbmx5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc3luYzpzdGFydCcsIHRoaXMsIHsgbWVkaWFQYXJhbWV0ZXJzIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLnJlc3QubWVkaWEuaW5kZXgpLFxuICAgICAgICAgICAgICAgIG1ldGhvZCAgOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgICAgICAgICAgIGRhdGEgICAgOiBKU09OLnN0cmluZ2lmeShtZWRpYVBhcmFtZXRlcnMuc2VyaWFsaXplKCkpLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRvbmUoKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgJiYgcGFyYW1ldGVycy5zaHVmZmxlKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5pdGVtcyA9IGRhdGEuaXRlbXMgJiYgXy5zaHVmZmxlKGRhdGEuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnb25seS1zaG93LW93bmVkLWNvbnRlbnQnKSAmJiBkYXRhLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuaXRlbXMgPSBkYXRhLml0ZW1zLmZpbHRlcigoeCkgPT4geC5pc093bmVkID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmV0Y2hEb25lKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6ZW5kJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmFpbCgoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmV0Y2hGYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmVuZCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIHJlamVjdChqcVhIUik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2ZldGNoRG9uZShkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICB0aGlzLml0ZW1zLnJlc2V0KGRhdGEuaXRlbXMpO1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N5bmM6c3VjY2VzcycsIHRoaXMsIHsgZGF0YSwgdGV4dFN0YXR1cywganFYSFIgfSk7XG4gICAgfVxuXG4gICAgX2ZldGNoRmFpbChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzeW5jOmZhaWwnLCB0aGlzLCB7IGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biB9KTtcbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUFjdGlvbkJ1dHRvbiBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGNvbnN0cnVjdG9yKHsgdHlwZSA9ICdsaW5rJywgYWN0aW9uLCBzdHlsZSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgICB0aGlzLmhhc0N1c3RvbUFjdGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoISFhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5oYXNDdXN0b21BY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlO1xuXG4gICAgICAgIHRoaXMuJGJ1dHRvbiA9ICQoJzxidXR0b24gLz4nKTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2U6dGl0bGVTdGF0ZScsIHRoaXMucmVuZGVyKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGdldCBpc0J1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2J1dHRvbic7XG4gICAgfVxuXG4gICAgZ2V0IGlzTGluaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2xpbmsnO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLiRidXR0b24ub2ZmKCk7XG4gICAgICAgIHRoaXMuJGVsLm9mZigpO1xuXG4gICAgICAgIGxldCBhdHRyaWJ1dGVzID0gdGhpcy5nZXRCdXR0b25BdHRycygpO1xuICAgICAgICBpZiAoXyhhdHRyaWJ1dGVzLmhyZWYpLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdGhpcy4kYnV0dG9uID0gJCgnPGJ1dHRvbiAvPicsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kYnV0dG9uID0gJCgnPGEgLz4nLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEF0dGFjaCBldmVudCBoYW5kbGVycyBpZiBlaXRoZXIgaXMgdHJ1ZVxuICAgICAgICAvLyAtIEJ1dHRvbiBpcyBub3QgYSBsaW5rXG4gICAgICAgIC8vIC0gQ3VzdG9tIGFjdGlvbiBoYXMgYmVlbiBwcm92aWRlZFxuICAgICAgICBpZiAoXyhhdHRyaWJ1dGVzLmhyZWYpLmlzRW1wdHkoKSB8fCB0aGlzLmhhc0N1c3RvbUFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fYXR0YWNoRXZlbnRIYW5kbGVycyh0aGlzLiRidXR0b24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQodGhpcy4kYnV0dG9uKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3YWl0aW5nKGlzV2FpdGluZyA9IHRydWUpIHtcbiAgICAgICAgaWYgKGlzV2FpdGluZykge1xuICAgICAgICAgICAgdGhpcy4kYnV0dG9uXG4gICAgICAgICAgICAgICAgLm9mZignLnRpdGxlQWN0aW9uQnV0dG9uJylcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3dhaXRpbmcnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdkaXNhYmxlZCcsIGlzV2FpdGluZylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKCc8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kYnV0dG9uXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCd3YWl0aW5nJylcbiAgICAgICAgICAgICAgICAuYXR0cignZGlzYWJsZWQnLCBpc1dhaXRpbmcpXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5zcGlubmVyJylcbiAgICAgICAgICAgICAgICAucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV2ZW50SGFuZGxlcnModGhpcy4kYnV0dG9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzU2VsZWN0RXZlbnQgPSAoZSkgPT5cbiAgICAgICAgKGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikgJiZcbiAgICAgICAgKGUucHJldmVudERlZmF1bHQoKSB8fCB0cnVlKTtcblxuICAgIF9hdHRhY2hFdmVudEhhbmRsZXJzKCRlbCkge1xuICAgICAgICAkZWwub2ZmKCcudGl0bGVBY3Rpb25CdXR0b24nKTtcblxuICAgICAgICAkZWwub24oJ2NsaWNrLnRpdGxlQWN0aW9uQnV0dG9uJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RFdmVudChlKSAmJiB0aGlzLmFjdGlvbihlKTtcbiAgICAgICAgfSk7XG4gICAgICAgICRlbC5vbigna2V5ZG93bi50aXRsZUFjdGlvbkJ1dHRvbicsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0RXZlbnQoZSkgJiYgdGhpcy5hY3Rpb24oZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFjdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0RXZlbnQoZXZlbnQpICYmIHRoaXMuX3RyaWdnZXJUaXRsZUFjdGlvbigpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyVGl0bGVBY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubW9kZWwudHJpZ2dlcigndGl0bGU6YWN0aW9uJywge1xuICAgICAgICAgICAgYWN0aW9uOiB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9nZXRCb3Jyb3dCdXR0b25UZXh0KCkge1xuICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGUuaWQgPT09ICdhdWRpb2Jvb2snXG4gICAgICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnbGlzdGVuJylcbiAgICAgICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZWFkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpbmRvdy5odG1sKCdib3Jyb3cnKTtcbiAgICB9XG5cbiAgICBfZ2V0Qm9ycm93QnV0dG9uQXJpYUxhYmVsKHRpdGxlKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCA9PT0gJ2F1ZGlvYm9vaydcbiAgICAgICAgICAgICAgICA/IHdpbmRvdy5odG1sKCdsaXN0ZW5Ub1RpdGxlJywgeyB0aXRsZSB9KVxuICAgICAgICAgICAgICAgIDogd2luZG93Lmh0bWwoJ3JlYWRUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpbmRvdy5odG1sKCdib3Jyb3dUaXRsZScsIHsgdGl0bGUgfSk7XG4gICAgfVxuXG4gICAgZ2V0QnV0dG9uQXR0cnMoKSB7XG4gICAgICAgIGxldCBidXR0b25BdHRycyA9IHtcbiAgICAgICAgICAgICdkYXRhLW1lZGlhLWlkJzogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgICAgICdkYXRhLXR5cGUnOiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCxcbiAgICAgICAgICAgICdkYXRhLXR5cGUtbmFtZSc6XG4gICAgICAgICAgICAgICAgKHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkICYmXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5odG1sKHRoaXMubW9kZWwuYXR0cmlidXRlcy50eXBlLmlkKSkgfHxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGh0bWw6ICh0aGlzLiRidXR0b24uaHRtbCAmJiB0aGlzLiRidXR0b24uaHRtbCgpKSB8fCAnJyxcbiAgICAgICAgICAgIHRhYmluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMubW9kZWwuYXR0cmlidXRlcy50aXRsZTtcblxuICAgICAgICBsZXQgY2xhc3NlcyA9IFsnVGl0bGVBY3Rpb25CdXR0b24nLCAndS1hbGxDYXBzJ107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNCdXR0b24pIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5bJ2J1dHRvbicsICdyYWRpdXMnLCAnaXMtYnV0dG9uJywgJ3NlY29uZGFyeSddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlID09PSAnZmlsbCcpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnZmlsbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICd1bmF2YWlsYWJsZSc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy11bmF2YWlsYWJsZSBqcy11bmF2YWlsYWJsZSBkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd2aXNpYmxlLXVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2F2YWlsYWJpbGl0eVVuYXZhaWxhYmxlJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub29rJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLW5vb2sganMtbm9vaycpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmh0bWwgPSBgPHNwYW4+JHt3aW5kb3cuaHRtbCgnc2VuZFRvTm9vaycpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHJldmlldyc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2Vjb25kYXJ5LWNvbG9yJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1wcmV2aWV3IGpzLXByZXZpZXcgc2Vjb25kYXJ5Jyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnZGVtb01vZGUucHJldmlldydcbiAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzWydhcmlhLWxhYmVsJ10gPSB3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2RlbW9Nb2RlLnByZXZpZXdUaXRsZScsXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGUgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3Jyb3cnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NlY29uZGFyeS1jb2xvcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtYm9ycm93IGpzLWJvcnJvdyBzZWNvbmRhcnknKTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5odG1sID0gYDxzcGFuPiR7dGhpcy5fZ2V0Qm9ycm93QnV0dG9uVGV4dCgpfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzWydhcmlhLWxhYmVsJ10gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRCb3Jyb3dCdXR0b25BcmlhTGFiZWwodGl0bGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93ZWQnOlxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1vcGVuQm9vayBiaWcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW5Cb29rJ1xuICAgICAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhRG93bmxvYWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLmZvcm1hdHNbMF0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uQXR0cnNbJ2FyaWEtbGFiZWwnXSA9IHdpbmRvdy5odG1sKCdvcGVuQm9va0xhYmVsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVOYW1lOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5yZWwgPSAnbm9yZWZlcnJlcic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1ib3Jyb3dlZCBqcy1ib3Jyb3dlZCcpO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5odG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZ29Ub0xvYW5zJ1xuICAgICAgICAgICAgICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLmFjY291bnRMb2Fucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9sZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc2Vjb25kYXJ5LWNvbG9yLWhvdmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1ob2xkIGpzLWhvbGQnKTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5odG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ3BsYWNlQUhvbGQnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRyc1snYXJpYS1sYWJlbCddID0gd2luZG93Lmh0bWwoJ3BsYWNlQUhvbGRPblRpdGxlJywge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29uSG9sZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdwcmltYXJ5Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1vbkhvbGQganMtb25Ib2xkJyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdnb1RvSG9sZHMnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLmFjY291bnRIb2xkcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW5ldyc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZW5ldyByZW5ld2FsQnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKChjKSA9PiBjICE9PSAndS1hbGxDYXBzJyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHRtbCA9IGA8c3Bhbj48aSBjbGFzcz1cImljb24gaWNvbi1yZW5ld1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ke3dpbmRvdy5odG1sKFxuICAgICAgICAgICAgICAgICAgICAncmVuZXdhbC5yZW5ld1RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgeyB0aXRsZTogJycgfVxuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXF1ZXN0QWdhaW4nOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVxdWVzdEFnYWluIHJlbmV3YWxCdXR0b24nKTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMgIT09ICd1LWFsbENhcHMnKTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5odG1sID0gYDxzcGFuPjxpIGNsYXNzPVwiaWNvbiBpY29uLXJlbmV3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdhY2NvdW50TG9hbnMucmVxdWVzdEFnYWluJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXF1ZXN0ZWQnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtcmVxdWVzdGVkIHJlbmV3YWxCdXR0b24nKTtcbiAgICAgICAgICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5maWx0ZXIoKGMpID0+IGMgIT09ICd1LWFsbENhcHMnKTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5odG1sID0gYDxzcGFuPjxpIGNsYXNzPVwiaWNvbiBpY29uLXJlbmV3XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiR7d2luZG93Lmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICdhY2NvdW50TG9hbnMucmVxdWVzdGVkJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW5ld2VkJzpcbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXJlbmV3ZWQgcmVuZXdhbEJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcigoYykgPT4gYyAhPT0gJ3UtYWxsQ2FwcycpO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmh0bWwgPSBgPHNwYW4+PGkgY2xhc3M9XCJpY29uIGljb24tcmVuZXdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+JHt3aW5kb3cuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJ2FjY291bnRMb2Fucy5yZW5ld2VkJ1xuICAgICAgICAgICAgICAgICl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsaXN0ZW5Ob3cnOlxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtbGlzdGVuTm93Jyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdsaXN0ZW5Ob3cnKX08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5ocmVmID0gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhRG93bmxvYWQsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnYXVkaW9ib29rLW92ZXJkcml2ZScsXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMucmVsID0gJ25vcmVmZXJyZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVhZE5vdyc6XG4gICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1yZWFkTm93Jyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHRtbCA9IGA8c3Bhbj4ke3dpbmRvdy5odG1sKCdyZWFkTm93Jyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYURvd25sb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2Vib29rLW92ZXJkcml2ZScsXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMucmVsID0gJ25vcmVmZXJyZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWRkVG9BcHAnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGluaykge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NlY29uZGFyeS1jb2xvci1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtYWRkVG9BcHAnKTtcbiAgICAgICAgICAgICAgICBidXR0b25BdHRycy5odG1sID0gYDxzcGFuPiR7d2luZG93Lmh0bWwoJ2FkZFRvQXBwJyl9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuaHJlZiA9IHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYURvd25sb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogdGhpcy5tb2RlbC5nZXQoJ2FkZFRvQXBwRm9ybWF0JyksXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3YWl0aW5nJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvdFNwaW5uZXIgPSAkKHdpbmRvdy5wcmltYXJ5QWN0aW9uTG9hZGluZ0dpZik7XG4gICAgICAgICAgICAgICAgICAgIGRvdFNwaW5uZXIuY3NzKCd3aWR0aCcsICdpbmhlcml0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmh0bWwgPSBkb3RTcGlubmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3dhaXRpbmcgc2Vjb25kYXJ5Jyk7XG4gICAgICAgICAgICAgICAgYnV0dG9uQXR0cnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJ1dHRvbkF0dHJzLmh0bWwgPVxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4+d29ya2luZzwvc3Bhbj48ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBidXR0b25BdHRycy5jbGFzcyA9IGNsYXNzZXMuam9pbignICcpO1xuXG4gICAgICAgIHJldHVybiBidXR0b25BdHRycztcbiAgICB9XG59XG4iLCJpbXBvcnQgVGl0bGVDYXJkVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvVGl0bGVDYXJkLmh0bWwnO1xuXG5pbXBvcnQgVGl0bGVJbmZvIGZyb20gJy4vdmlld3MvVGl0bGVJbmZvJztcbmltcG9ydCBUaXRsZUFjdGlvbkJ1dHRvbiBmcm9tICcuL1RpdGxlQWN0aW9uQnV0dG9uJztcbmltcG9ydCBXaXNoTGlzdEJ1dHRvbiBmcm9tICcuL1dpc2hMaXN0QnV0dG9uJztcbmltcG9ydCBUaXRsZUhlYWRlckJhciBmcm9tICcuL1RpdGxlSGVhZGVyQmFyJztcbmltcG9ydCBDb3ZlciBmcm9tICcuL0NvdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVDYXJkIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuICd0aXRsZS1jb250YWluZXIgdGl0bGUnO1xuICAgIH1cblxuICAgIHRlbXBsYXRlID0gVGl0bGVDYXJkVGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3Rvcih7IGNvdmVyV2lkdGhzLCBpc0luSGVybyA9IGZhbHNlIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcblxuICAgICAgICB0aGlzLmNvdmVyV2lkdGhzID0gY292ZXJXaWR0aHM7XG4gICAgICAgIHRoaXMuaXNJbkhlcm8gPSBpc0luSGVybztcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgY292ZXJXaWR0aHMsIGlzSW5IZXJvIH0gPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgY29uc3QgJHRtcCA9ICQoXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICBnZW9JZGNDbGFzczogd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpXG4gICAgICAgICAgICAgICAgICAgID8gJ2dlb0lkYydcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIG5vdCB3b3JrICB3aXRoIENTUyB0cmFuc2l0aW9uIGFuaW1hdGlvbnNcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuaXNQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3MoJ3BsYWNlaG9sZGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy50aXRsZUhlYWRlckJhciA9IG5ldyBUaXRsZUhlYWRlckJhcih7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuVGl0bGVIZWFkZXJCYXInKSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMuY292ZXIgPSBuZXcgQ292ZXIoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5Db3ZlckltYWdlJyksXG4gICAgICAgICAgICAgICAgY292ZXJXaWR0aHMsXG4gICAgICAgICAgICAgICAgaXNJbkhlcm8sXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMudGl0bGVJbmZvID0gbmV3IFRpdGxlSW5mbyh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLlRpdGxlSW5mbycpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlQWN0aW9uQnV0dG9uID0gbmV3IFRpdGxlQWN0aW9uQnV0dG9uKHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBlbDogJHRtcC5maW5kKCcuVGl0bGVBY3Rpb24nKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzYW1wbGVPbmx5TW9kZScpICYmXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pc01hZ2F6aW5lXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZGlzYWJsZVdpc2hsaXN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLndpc2hsaXN0QnV0dG9uID0gbmV3IFdpc2hMaXN0QnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZVdpc2hsaXN0JyksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdpY29uLW9ubHknLFxuICAgICAgICAgICAgICAgIH0pLnJlbmRlcigpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZCgkdG1wKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICBzdXBlci5yZW1vdmUoKTtcbiAgICB9XG59XG4iLCJjb25zdCBCYWNrYm9uZSA9IHdpbmRvdy5CYWNrYm9uZTtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IFRpdGxlQ2FyZFRlbXBsYXRlID0gZnMucmVhZEZpbGVTeW5jKFxuICAgIHBhdGguam9pbihfX2Rpcm5hbWUsICd0ZW1wbGF0ZXMvVGl0bGVDYXJkTGlzdFZpZXcuaHRtbCcpLFxuICAgICd1dGY4J1xuKTtcblxuaW1wb3J0IFRpdGxlSW5mb0xpc3RWaWV3IGZyb20gJy4vdmlld3MvVGl0bGVJbmZvTGlzdFZpZXcnO1xuaW1wb3J0IFRpdGxlQWN0aW9uQnV0dG9uIGZyb20gJy4vVGl0bGVBY3Rpb25CdXR0b24nO1xuaW1wb3J0IFdpc2hMaXN0QnV0dG9uIGZyb20gJy4vV2lzaExpc3RCdXR0b24nO1xuaW1wb3J0IFRpdGxlSGVhZGVyQmFyIGZyb20gJy4vVGl0bGVIZWFkZXJCYXInO1xuaW1wb3J0IENvdmVyIGZyb20gJy4vQ292ZXInO1xuaW1wb3J0IFRpdGxlRGVzY3JpcHRpb24gZnJvbSAnLi92aWV3cy9UaXRsZURlc2NyaXB0aW9uLmpzJztcblxuY29uc3QgVGl0bGVDYXJkTGlzdFZpZXcgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUtY29udGFpbmVyJyxcblxuICAgIHRlbXBsYXRlOiBfLnRlbXBsYXRlKFRpdGxlQ2FyZFRlbXBsYXRlKSxcblxuICAgIGluaXRpYWxpemUoeyBidXMsIGNvdmVyV2lkdGhzIH0pIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsO1xuXG4gICAgICAgIGNvbnN0ICR0bXAgPSAkKHRoaXMudGVtcGxhdGUoKSk7XG5cbiAgICAgICAgdGhpcy50aXRsZUhlYWRlckJhciA9IG5ldyBUaXRsZUhlYWRlckJhcih7XG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZUhlYWRlckJhcicpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvdmVyID0gbmV3IENvdmVyKHtcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLkNvdmVySW1hZ2UnKSxcbiAgICAgICAgICAgIGNvdmVyV2lkdGhzLFxuICAgICAgICAgICAgaXNJbkhlcm86IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRpdGxlSW5mbyA9IG5ldyBUaXRsZUluZm9MaXN0Vmlldyh7XG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZUluZm8nKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50aXRsZUFjdGlvbkJ1dHRvbiA9IG5ldyBUaXRsZUFjdGlvbkJ1dHRvbih7XG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIGVsOiAkdG1wLmZpbmQoJy5UaXRsZUFjdGlvbicpLFxuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICBzdHlsZTogJ2ZpbGwnLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc2FtcGxlT25seU1vZGUnKSAmJlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdtYWdhemluZS1yb2xsdXAnKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNNYWdhemluZVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2Rpc2FibGVXaXNobGlzdCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy53aXNobGlzdEJ1dHRvbiA9IG5ldyBXaXNoTGlzdEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgZWw6ICR0bXAuZmluZCgnLlRpdGxlV2lzaGxpc3QnKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnd2l0aC10ZXh0JyxcbiAgICAgICAgICAgIH0pLnJlbmRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aXRsZURlc2NyaXB0aW9uID0gbmV3IFRpdGxlRGVzY3JpcHRpb24oe1xuICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICBlbDogJHRtcC5maW5kKCcudGl0bGUtZGVzY3JpcHRpb24nKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kZWwuaHRtbCgkdG1wKTtcbiAgICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVGl0bGVDYXJkTGlzdFZpZXc7XG4iLCJpbXBvcnQgUHJvY2Vzc0ZvcndhcmRlZEFjdGlvbiAgICAgICBmcm9tICcuLi8uLi91dGlsL3RpdGxlLWFjdGlvbnMvcHJvY2Vzc0ZvcndhcmRlZEFjdGlvbic7XG5pbXBvcnQgSGFzaE1hbmFnZXIgICAgICAgICAgICAgICAgICBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbi9IYXNoTWFuYWdlcic7XG5cbmltcG9ydCBUaXRsZUNhcmQgICAgZnJvbSAnLi9UaXRsZUNhcmQnO1xuaW1wb3J0IFRpdGxlQWN0aW9ucyBmcm9tICcuLi8uLi90aXRsZS1hY3Rpb25zL1RpdGxlQWN0aW9ucyc7XG5jb25zdCBoZSA9IHJlcXVpcmUoJ2hlJyk7XG4vLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGluZyBjb2RlIHBhc3NlcyBhIEJhY2tib25lLkNvbGxlY3Rpb24gd2l0aCBhIG1vZGVsIHR5cGUgb2YgVGl0bGVcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlQ29sbGVjdGlvblZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcblxuICAgIGNvbnN0cnVjdG9yKHsgYnVzLCBwYXRyb25NZWRpYUl0ZW1zTW9kZWwsIFZpZXcsIGF0dHJpYnV0ZXMsIGNvdmVyV2lkdGhzLCBpc0luSGVybywgY29udGV4dCB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MgICAgICAgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuYnVzICAgICAgICAgICAgPSBidXM7XG4gICAgICAgIHRoaXMuVmlldyAgICAgICAgICAgPSBWaWV3IHx8IFRpdGxlQ2FyZDtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzICAgICA9IF8uZXh0ZW5kKHt9LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgdGhpcy5jb3ZlcldpZHRocyAgICA9IGNvdmVyV2lkdGhzO1xuICAgICAgICB0aGlzLmlzSW5IZXJvICAgICAgID0gaXNJbkhlcm87XG4gICAgICAgIHRoaXMuY29udGV4dCAgICAgICAgPSBjb250ZXh0O1xuXG4gICAgICAgIHRoaXMudGl0bGVBY3Rpb25zICAgPSBuZXcgVGl0bGVBY3Rpb25zKHsgYnVzOiB0aGlzLmJ1cywgY29udGV4dCB9KTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMuY29sbGVjdGlvbiwgJ3RpdGxlOmFjdGlvbicsIHRoaXMuX2hhbmRsZVRpdGxlQWN0aW9uKTtcblxuICAgICAgICAvLyBUT0RPOiA+Pj4gUmVtb3ZlIHRoaXMgY2FsbCBhbmQgX3VwZGF0ZU1lZGlhU3RhdGVzKCkgbG9naWMgYW5kIHVwZGF0ZSBkZXBlbmRhbnQgY29uc3VtZXJzIHRvIHVzZSBQYXRyb25UaXRsZVN0YXR1c1xuICAgICAgICAvLyBGZXRjaCBwYXRyb24gZGF0YSBhbmQgdHJpZ2dlciBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAvLyBPbmx5IGZldGNoIHBhdHJvbiBkYXRhIGlmIGF1dGhlZCBhbmQgaGFzIGxpbmtlZCBjYXJkcy5cbiAgICAgICAgaWYgKHBhdHJvbk1lZGlhSXRlbXNNb2RlbCAmJiB3aW5kb3cuT3ZlckRyaXZlLmlzQXV0aGVudGljYXRlZCAmJiB3aW5kb3cuT3ZlckRyaXZlLmhhc0xpbmtlZENhcmRzKSB7XG4gICAgICAgICAgICBwYXRyb25NZWRpYUl0ZW1zTW9kZWxcbiAgICAgICAgICAgICAgICAuaW5pdGlhbEZldGNoKClcbiAgICAgICAgICAgICAgICAudGhlbigocGF0cm9uRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVNZWRpYVN0YXRlcyhwYXRyb25EYXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIGdldCB0YWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3VsJztcbiAgICB9XG5cbiAgICBfaGFuZGxlVGl0bGVBY3Rpb24oeyBhY3Rpb24sIG1vZGVsIH0pIHtcbiAgICAgICAgdGhpcy50aXRsZUFjdGlvbnMucGVyZm9ybShhY3Rpb24sIG1vZGVsKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWVkaWFTdGF0ZXMocGF0cm9uRGF0YSkge1xuICAgICAgICBsZXQgaWRzID0gW107XG4gICAgICAgIF8oXy52YWx1ZXMocGF0cm9uRGF0YSkpLmVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChfLmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBpZHMucHVzaCguLi5pdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKC4uLl8ua2V5cyhpdGVtKS5tYXAoTnVtYmVyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWRzID0gXy51bmlxKGlkcyk7XG5cbiAgICAgICAgaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuY29sbGVjdGlvbi5nZXQoaWQpO1xuXG4gICAgICAgICAgICBpZiAobW9kZWwpIHtcbiAgICAgICAgICAgICAgICBtb2RlbC51cGRhdGVQYXRyb25TdGF0ZShwYXRyb25EYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcGVyZm9ybUZvcndhcmRlZEFjdGlvbigpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHRpdGxlKSA9PiB7XG5cbiAgICAgICAgICAgIHRpdGxlLnNldCgndGl0bGUnLCBoZS5kZWNvZGUodGl0bGUuZ2V0KCd0aXRsZScpKSk7XG5cbiAgICAgICAgICAgIHRpdGxlLnNldENvbnRleHQodGhpcy5jb250ZXh0KTtcblxuICAgICAgICAgICAgbGV0IHZpZXcgPSBuZXcgdGhpcy5WaWV3KHtcbiAgICAgICAgICAgICAgICBtb2RlbCAgICAgICA6IHRpdGxlLFxuICAgICAgICAgICAgICAgIGJ1cyAgICAgICAgIDogdGhpcy5idXMsXG4gICAgICAgICAgICAgICAgY292ZXJXaWR0aHMgOiB0aGlzLmNvdmVyV2lkdGhzLFxuICAgICAgICAgICAgICAgIGlzSW5IZXJvICAgIDogdGhpcy5pc0luSGVyb1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAgICAgJCgnPGxpIC8+Jywge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogJ2pzLXRpdGxlQ2FyZCBJdGVtJ1xuICAgICAgICAgICAgICAgIH0pLmFwcGVuZCh2aWV3LiRlbClbMF1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2godmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc3RvcFN0ZWFsaW5nQ29sbGVjdGlvblRpdGxlJykpe1xuICAgICAgICAgICAgLy8gSSB0aGluayB3ZSBuZXZlciBub3RpY2VkIHRoaXMgb2RkIGxvZ2ljIGJlY2F1c2UgaW4gbW9zdCBjYXNlcyB3aGVyZSB0aGlzIHZpZXcgaXMgdXNlZCB0aGUgc2VsZWN0b3JcbiAgICAgICAgICAgIC8vIGJlbG93IGRvZXNuJ3QgbWF0Y2ggYW55dGhpbmcgb24gdGhlIHBhZ2UuXG4gICAgICAgICAgICBjb25zdCAkY29sbGVjdGlvblRpdGxlID0gJCgnLmNvbGxlY3Rpb24tdGl0bGUtY29udGFpbmVyJyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5hdHRyKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZCgkY29sbGVjdGlvblRpdGxlKS5hcHBlbmQoZnJhZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5hdHRyKHRoaXMuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLiRlbC5lbXB0eSgpLmFwcGVuZChmcmFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIF9wZXJmb3JtRm9yd2FyZGVkQWN0aW9uKCkge1xuICAgICAgICBpZiAod2luZG93Lk92ZXJEcml2ZS5pc0F1dGhlbnRpY2F0ZWQgJiYgd2luZG93Lk92ZXJEcml2ZS5oYXNMaW5rZWRDYXJkcyAmJiBIYXNoTWFuYWdlci5nZXQoJ2FjdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCBmb3J3YXJkZWRBY3Rpb24gPSBuZXcgUHJvY2Vzc0ZvcndhcmRlZEFjdGlvbih0aGlzLmNvbGxlY3Rpb24sIHRoaXMuYnVzKTtcbiAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICB3aW5kb3cuZm9yd2FyZGVkQWN0aW9uID0gZm9yd2FyZGVkQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiY29uc3QgQmFja2JvbmUgPSB3aW5kb3cuQmFja2JvbmU7XG5cbmNvbnN0IFRpdGxlSGVhZGVyQmFyID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZScsIHRoaXMucmVuZGVyKTtcblxuICAgICAgICB0aGlzLiR0aXRsZUhlYWRlckJhciA9ICQoJzxkaXYgLz4nKTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLnJldHVyblN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy4kdGl0bGVIZWFkZXJCYXIgPSAkKCc8ZGl2IC8+JywgYS5jb250YWluZXIpLmFwcGVuZChcbiAgICAgICAgICAgICQoJzxhIC8+JywgYS5saW5rKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLiRlbC5odG1sKHRoaXMuJHRpdGxlSGVhZGVyQmFyKTtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICByZXR1cm5TdGF0ZSgpIHtcbiAgICAgICAgbGV0IGJhbm5lciA9IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjoge1xuICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsndGl0bGUtaGVhZGVyLWJhcicsICd1LWFsbENhcHMnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgaHJlZjogdGhpcy5tb2RlbC50aXRsZURldGFpbHNVcmwsXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg6IC0xLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFjdGlvbiA9IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJyk7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAndW5hdmFpbGFibGUnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAnaXMtdW5hdmFpbGFibGUgdW5hdmFpbGFibGUtdGl0bGUnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBiYW5uZXIubGluay50ZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub29rJzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2lzLW5vb2sgYXZhaWxhYmxlLXRpdGxlIHNlY29uZGFyeS1iYWNrZ3JvdW5kJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvdyc6XG4gICAgICAgICAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICdhdmFpbGFibGUtdGl0bGUgc2Vjb25kYXJ5LWJhY2tncm91bmQgaXMtYm9ycm93J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvd2VkJzpcbiAgICAgICAgICAgIGNhc2UgJ2FkZFRvQXBwJzpcbiAgICAgICAgICAgIGNhc2UgJ2xpc3Rlbk5vdyc6XG4gICAgICAgICAgICBjYXNlICdyZWFkTm93JzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJ2lzLWJvcnJvd2VkIGF2YWlsYWJsZS10aXRsZSBzZWNvbmRhcnktYmFja2dyb3VuZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB3aW5kb3cuaHRtbCgnYm9ycm93ZWQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbGQnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5wdXNoKCdpcy1ob2xkIHVuYXZhaWxhYmxlLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHRoaXMubW9kZWwuZ2V0KCdpc1ByZVJlbGVhc2VUaXRsZScpXG4gICAgICAgICAgICAgICAgICAgID8gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUNvbWluZ1Nvb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdy50ZXh0KCdhdmFpbGFiaWxpdHlXYWl0TGlzdCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25Ib2xkJzpcbiAgICAgICAgICAgICAgICBiYW5uZXIuY29udGFpbmVyLmNsYXNzZXMucHVzaCgnaXMtb25Ib2xkIHVuYXZhaWxhYmxlLXRpdGxlJyk7XG4gICAgICAgICAgICAgICAgYmFubmVyLmxpbmsudGV4dCA9IHdpbmRvdy5odG1sKCdvbkhvbGQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dhaXRpbmcnOlxuICAgICAgICAgICAgICAgIGJhbm5lci5jb250YWluZXIuY2xhc3NlcyA9IHRoaXMuJHRpdGxlSGVhZGVyQmFyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGJhbm5lci5saW5rLnRleHQgPSB0aGlzLiR0aXRsZUhlYWRlckJhci5maW5kKCdhOmZpcnN0JykudGV4dCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFubmVyLmNvbnRhaW5lci5jbGFzcyA9IGJhbm5lci5jb250YWluZXIuY2xhc3Nlcy5qb2luKCcgJyk7XG5cbiAgICAgICAgcmV0dXJuIGJhbm5lcjtcbiAgICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlSGVhZGVyQmFyO1xuIiwiaW1wb3J0IFdpc2hMaXN0QnV0dG9uVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZXMvV2lzaExpc3RCdXR0b24uaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpc2hMaXN0QnV0dG9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZ2V0IGNvbnRyYXN0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyYXN0ID09PSAnZGVmYXVsdCcgPyAnJyA6ICdjb250cmFzdC1hbHRlcm5hdGUnO1xuICAgIH1cblxuICAgIGdldCBhcmlhTGFiZWwoKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5tb2RlbC5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYWRkVGl0bGVUb1dpc2hMaXN0JywgeyB0aXRsZSB9KVxuICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgncmVtb3ZlVGl0bGVGcm9tV2lzaExpc3QnLCB7IHRpdGxlIH0pO1xuICAgIH1cblxuICAgIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmdldCgnd2lzaGxpc3RTdGF0ZScpID09PSAnd2lzaGxpc3RBZGQnXG4gICAgICAgICAgICA/ICdpY29uLXdpc2gtbGlzdCdcbiAgICAgICAgICAgIDogJ2ljb24td2lzaC1saXN0LWFkZGVkJztcbiAgICB9XG5cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2ljb24tb25seScpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJ1xuICAgICAgICAgICAgPyB3aW5kb3cuaHRtbCgnYWRkVG9XaXNoTGlzdCcpXG4gICAgICAgICAgICA6IHdpbmRvdy5odG1sKCdyZW1vdmVGcm9tV2lzaExpc3QnKTtcbiAgICB9XG5cbiAgICBnZXQgZ2EoKSB7XG4gICAgICAgIGNvbnN0IGlzQWRkID0gdGhpcy5tb2RlbC5nZXQoJ3dpc2hsaXN0U3RhdGUnKSA9PT0gJ3dpc2hsaXN0QWRkJztcbiAgICAgICAgaWYgKGlzQWRkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1lZGlhSWQ6IHRoaXMubW9kZWwuYXR0cmlidXRlcy5pZCxcbiAgICAgICAgICAgICAgICBmb3JtYXRUeXBlOiB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMudHlwZS5pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoeyB0eXBlLCBjb250cmFzdCB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ2ljb24tb25seSc7XG4gICAgICAgIHRoaXMuY29udHJhc3QgPSBjb250cmFzdCB8fCAnZGVmYXVsdCc7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOndpc2hsaXN0U3RhdGUnLCB0aGlzLnJlbmRlcik7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ2ljb24tb25seSc7XG4gICAgfVxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4geyBjbGljazogJ19oYW5kbGVDbGljaycgfTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbCB8fCB0aGlzLiRlbC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIHdlIGhhdmUgbm8gdGFyZ2V0IHRvIHJlbmRlciBhbnl0aGluZyBpbnRvXG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXRhaW4gZm9jdXMgb24gcmVyZW5kZXJcbiAgICAgICAgY29uc3QgbmVlZHNSZWZvY3VzID1cbiAgICAgICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLldpc2hMaXN0QnV0dG9uJykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcblxuICAgICAgICBjb25zdCBidXR0b25IdG1sID0gV2lzaExpc3RCdXR0b25UZW1wbGF0ZSh7XG4gICAgICAgICAgICBnYTogdGhpcy5nYSxcbiAgICAgICAgICAgIGNvbnRyYXN0Q2xhc3M6IHRoaXMuY29udHJhc3RDbGFzcyxcbiAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hcmlhTGFiZWwsXG4gICAgICAgICAgICBpY29uQ2xhc3M6IHRoaXMuaWNvbkNsYXNzLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgaWNvbkFuaW1hdGlvbkNsYXNzZXM6IHdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2VcbiAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgOiAnYW5pbWF0ZWQgYm91bmNlSW4nLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoYnV0dG9uSHRtbCk7XG5cbiAgICAgICAgaWYgKG5lZWRzUmVmb2N1cykge1xuICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuV2lzaExpc3RCdXR0b24nKS5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNsaWNrKCkge1xuICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ3RpdGxlOmFjdGlvbicsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3dpc2gnLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hbmltYXRlKCkge1xuICAgICAgICB0aGlzLiRlbFxuICAgICAgICAgICAgLmZpbmQoJ2knKVxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdhbmltYXRlZCBib3VuY2VJbiBib3VuY2VPdXQnKVxuICAgICAgICAgICAgLmFkZENsYXNzKCdhbmltYXRlZCBib3VuY2VPdXQnKTtcbiAgICB9XG59XG4iLCJjbGFzcyBNZWRpYVZpZXdQcmVmZXJlbmNlIGV4dGVuZHMgQmFja2JvbmUuTW9kZWwge1xuICAgIHN0YXRpYyBvcHRpb25zID0ge1xuICAgICAgICBncmlkOiAnZ3JpZCcsXG4gICAgICAgIGxpc3Q6ICdsaXN0JyxcbiAgICB9O1xuXG4gICAgZGVmYXVsdHMgPSB7XG4gICAgICAgIHZpZXc6IHdpbmRvdy5PdmVyRHJpdmUuaXNUb2xpbm9EZXZpY2VcbiAgICAgICAgICAgID8gTWVkaWFWaWV3UHJlZmVyZW5jZS5vcHRpb25zLmxpc3RcbiAgICAgICAgICAgIDogTWVkaWFWaWV3UHJlZmVyZW5jZS5vcHRpb25zLmdyaWQsXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgICAgICBzdXBlcihwYXJhbXMpO1xuXG4gICAgICAgIHZhciBpbml0aWFsVmFsID0gd2luZG93Lk92ZXJEcml2ZS5pc1RvbGlub0RldmljZVxuICAgICAgICAgICAgPyBNZWRpYVZpZXdQcmVmZXJlbmNlLm9wdGlvbnMubGlzdFxuICAgICAgICAgICAgOiBNZWRpYVZpZXdQcmVmZXJlbmNlLm9wdGlvbnMuZ3JpZDtcblxuICAgICAgICBpZiAoISFDb29raWVzLmdldCgnbWVkaWEtdmlldy1wcmVmZXJlbmNlJykpIHtcbiAgICAgICAgICAgIGluaXRpYWxWYWwgPSBDb29raWVzLmdldCgnbWVkaWEtdmlldy1wcmVmZXJlbmNlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBDb29raWVzLnNldCgnbWVkaWEtdmlldy1wcmVmZXJlbmNlJywgaW5pdGlhbFZhbCwge1xuICAgICAgICAgICAgICAgIGh0dHBPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBleHBpcmVzOiAzNjUsXG4gICAgICAgICAgICAgICAgc2FtZVNpdGU6ICdsYXgnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICB2aWV3OiBpbml0aWFsVmFsLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMsICdjaGFuZ2U6dmlldycsIChtb2RlbCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIENvb2tpZXMuc2V0KCdtZWRpYS12aWV3LXByZWZlcmVuY2UnLCB2YWx1ZSwge1xuICAgICAgICAgICAgICAgIGh0dHBPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBleHBpcmVzOiAzNjUsXG4gICAgICAgICAgICAgICAgc2FtZVNpdGU6ICdsYXgnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVkaWFWaWV3UHJlZmVyZW5jZTtcbiIsImltcG9ydCBUaXRsZVN0YXRlIGZyb20gJy4uLy4uLy4uL3RpdGxlLWFjdGlvbnMvVGl0bGVTdGF0ZSc7XG5pbXBvcnQgTWVkaWFJbnRlcmZhY2UgZnJvbSAnLi4vTWVkaWFJbnRlcmZhY2UnO1xuaW1wb3J0IHsgdG9TdGF0aWNVcmwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9saWIvYXNzZXRNYXBwZXInO1xuaW1wb3J0IHsgZ2V0T3B0aW1pemVkQ292ZXJzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGliL2dldE9wdGltaXplZENvdmVyLXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGUgZXh0ZW5kcyBCYWNrYm9uZS5Nb2RlbCB7XG4gICAgZ2V0IGlkQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gJ2lkJztcbiAgICB9XG5cbiAgICBkZWZhdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAgZmlyc3RDcmVhdG9yTmFtZTogbnVsbCxcbiAgICAgICAgICAgIHRpdGxlOiAnVGl0bGUnLFxuICAgICAgICAgICAgZmlyc3RDcmVhdG9ySWQ6IDAsXG4gICAgICAgICAgICBmb3JtYXRzOiBbXSxcbiAgICAgICAgICAgIGlzT3duZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNIb2xkYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBpc1ByZVJlbGVhc2VUaXRsZTogZmFsc2UsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBzdGFyUmF0aW5nOiAwLjAsXG4gICAgICAgICAgICB1c2VyU3RhclJhdGluZzogMCxcbiAgICAgICAgICAgIHN0YXJSYXRpbmdDb3VudDogMCxcbiAgICAgICAgICAgIGhvbGRzUmF0aW86IDAsXG4gICAgICAgICAgICBob2xkc0NvdW50OiAwLFxuICAgICAgICAgICAgb3duZWRDb3BpZXM6IDAsXG4gICAgICAgICAgICBhdmFpbGFibGVDb3BpZXM6IDAsXG4gICAgICAgICAgICBsdWNreURheU93bmVkQ29waWVzOiAwLFxuICAgICAgICAgICAgbHVja3lEYXlBdmFpbGFibGVDb3BpZXM6IDAsXG4gICAgICAgICAgICBlc3RpbWF0ZWRSZWxlYXNlRGF0ZTogJycsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlUeXBlOiAnJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgIHNhbXBsZToge30sIC8vIFNhbXBsZVxuICAgICAgICAgICAgcHVibGlzaGVyOiB7fSwgLy8gUHVibGlzaGVyXG4gICAgICAgICAgICB0eXBlOiB7IGlkOiAnZWJvb2snIH0sIC8vIFR5cGVcbiAgICAgICAgICAgIGNvdmVyczoge30sIC8vIENvdmVyc1xuICAgICAgICAgICAgcGFyZW50TWFnYXppbmVUaXRsZUlkOiAwLFxuICAgICAgICAgICAgcmF0aW5nczoge1xuICAgICAgICAgICAgICAgIG1hdHVyaXR5TGV2ZWw6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEN1c3RvbSBMaWdodG5pbmcgUHJvcGVydGllc1xuICAgICAgICAgICAgdGl0bGVTdGF0ZTogJ3dhaXRpbmcnLFxuICAgICAgICAgICAgd2lzaGxpc3RTdGF0ZTogJ3dpc2hsaXN0QWRkJyxcbiAgICAgICAgICAgIGlzSW5IaXN0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgIGFkZFRvQXBwRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgaXNPbkhvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNSZWxlYXNlZEhvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNCb3Jyb3dlZDogZmFsc2UsXG4gICAgICAgICAgICBpc01vc3RSZWNlbnRNYWdhemluZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGlzUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgncGxhY2Vob2xkZXInKTtcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbCwgb3B0aW9ucywgY29udGV4dCkge1xuICAgICAgICBsZXQgeyBwYXRyb25JdGVtcyB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBzdXBlcihtb2RlbCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5zZXRDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgICAgIHRoaXMuc2V0KFxuICAgICAgICAgICAgXy5leHRlbmQoe30sIG1vZGVsLCB7IHRpdGxlU3RhdGU6IHRoaXMuX2dldFN0YXRlKHBhdHJvbkl0ZW1zKSB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRoaXMuaXNQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgdGhpcy5saW5rKHdpbmRvdy5nbG9iYWxFdmVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGluayhidXMpIHtcbiAgICAgICAgLy8gVW5saW5rIHRoZSBvbGQgYnVzIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICBpZiAodGhpcy5idXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcExpc3RlbmluZyh0aGlzLmJ1cywgJ3RpdGxlOnVwZGF0ZScpO1xuICAgICAgICAgICAgdGhpcy5idXMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXR0YWNoIG5ldyBidXMgaWYgcGFzc2VkXG4gICAgICAgIGlmIChidXMpIHtcbiAgICAgICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmJ1cywgJ3RpdGxlOnVwZGF0ZScsICh0aXRsZU1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlVcGRhdGVzKHRpdGxlTW9kZWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfYXBwbHlVcGRhdGVzKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgaWYgKHRpdGxlTW9kZWwgIT09IHRoaXMgJiYgdGl0bGVNb2RlbC5pZCA9PT0gdGhpcy5pZCkge1xuICAgICAgICAgICAgc3VwZXIuc2V0KHRpdGxlTW9kZWwuY2hhbmdlZEF0dHJpYnV0ZXMoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXQoKSB7XG4gICAgICAgIHN1cGVyLnNldCguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmJ1cyAmJiB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTp1cGRhdGUnLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBBbiBleGFtcGxlIG9mIHRoaXMgY2FuIGJlIHNlZW4gaW4gQ29sbGVjdGlvbkhpZ2h0bGlnaHQuanM6NjEgKHdoZXJlIFRpdGxlQ29sbGVjdGlvblZpZXcgZ2V0cyBuZXcnZWQgdXApXG4gICAgZ2V0IGNvbnRleHRDb2xsZWN0aW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LmNvbGxlY3Rpb25EZWZpbml0aW9uXG4gICAgICAgICAgICA/IHRoaXMuY29udGV4dC5jb2xsZWN0aW9uRGVmaW5pdGlvbi5pZFxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlRGV0YWlsc1VybCgpIHtcbiAgICAgICAgLy8gTEhUTkctMzAxOCBSZWZlcmVuY2Ugb3B0aW9uYWwgY29udGV4dENvbGxlY3Rpb25JZCB2YWx1ZSB3aGVuIGNyZWF0aW5nIGEgdGl0bGUgZGV0YWlscyBsaW5rXG4gICAgICAgIGxldCBwcm9wcyA9IHsgaWQ6IHRoaXMuaWQgfTtcblxuICAgICAgICBpZiAodGhpcy5jb250ZXh0Q29sbGVjdGlvbklkKSB7XG4gICAgICAgICAgICBwcm9wcy5jaWQgPSB0aGlzLmNvbnRleHRDb2xsZWN0aW9uSWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhSWQsIHByb3BzKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzTHVja3lEYXlDb3BpZXMoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICB0aGlzLmdldCgnbHVja3lEYXlPd25lZENvcGllcycpID4gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBhbGxDb3BpZXNBcmVMdWNreURheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzTHVja3lEYXlDb3BpZXMgJiYgdGhpcy5nZXQoJ293bmVkQ29waWVzJykgPT09IDA7XG4gICAgfVxuXG4gICAgZ2V0IGlzTHVja3lEYXlDaGVja291dCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuaGFzQXZhaWxhYmxlTHVja3lEYXlDb3BpZXMgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdhdmFpbGFibGVDb3BpZXMnKSA9PT0gMCAmJlxuICAgICAgICAgICAgIXRoaXMuZ2V0KCdpc1JlbGVhc2VkSG9sZCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGNhblBsYWNlSG9sZCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdpc0hvbGRhYmxlJykgJiZcbiAgICAgICAgICAgICF0aGlzLmdldCgnaXNPbkhvbGQnKSAmJlxuICAgICAgICAgICAgd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQXZhaWxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2lzQXZhaWxhYmxlJykgfHwgdGhpcy5oYXNBdmFpbGFibGVMdWNreURheUNvcGllcztcbiAgICB9XG5cbiAgICBnZXQgaGFzQXZhaWxhYmxlTHVja3lEYXlDb3BpZXMoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmhhc0x1Y2t5RGF5Q29waWVzICYmIHRoaXMuZ2V0KCdsdWNreURheUF2YWlsYWJsZUNvcGllcycpID4gMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0V4cGlyZWQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldCgnaXNPd25lZCcpICYmXG4gICAgICAgICAgICAodGhpcy5pc0V4cGlyZWRTdVRpdGxlIHx8IHRoaXMuaXNFeHBpcmVkTm9uU3VUaXRsZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgaXNFeHBpcmVkU3VUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ2V0KCdhdmFpbGFiaWxpdHlUeXBlJykgPT09ICdhbHdheXMnICYmXG4gICAgICAgICAgICAhdGhpcy5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJykgJiZcbiAgICAgICAgICAgICF0aGlzLmdldCgnaXNBdmFpbGFibGUnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBpc0V4cGlyZWROb25TdVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5nZXQoJ2F2YWlsYWJpbGl0eVR5cGUnKSAhPT0gJ2Fsd2F5cycgJiZcbiAgICAgICAgICAgICF0aGlzLmdldCgnb3duZWRDb3BpZXMnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhdHJvblN0YXRlKHBhdHJvbkl0ZW1zLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zZXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGVTdGF0ZTogdGhpcy5fZ2V0U3RhdGUocGF0cm9uSXRlbXMpLFxuICAgICAgICAgICAgICAgIHdpc2hsaXN0U3RhdGU6IFRpdGxlU3RhdGUuaXNPbldpc2hsaXN0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA/ICd3aXNobGlzdFJlbW92ZSdcbiAgICAgICAgICAgICAgICAgICAgOiAnd2lzaGxpc3RBZGQnLFxuICAgICAgICAgICAgICAgIHVzZXJTdGFyUmF0aW5nOiBUaXRsZVN0YXRlLnN0YXJSYXRpbmcoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgcGF0cm9uSXRlbXNcbiAgICAgICAgICAgICAgICApLCAvLyAwIGlmIG5vdCByYXRlZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVhZGluZ0hpc3RvcnlTdGF0ZSA9IFRpdGxlU3RhdGUuaXNPblJlYWRpbmdIaXN0b3J5KFxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcGF0cm9uSXRlbXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXQoJ2lzSW5IaXN0b3J5JywgcmVhZGluZ0hpc3RvcnlTdGF0ZSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICAgICAgY29uc3QgdXNlclN0YXJSYXRpbmcgPSBUaXRsZVN0YXRlLnN0YXJSYXRpbmcoXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBwYXRyb25JdGVtc1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldCgndXNlclN0YXJSYXRpbmcnLCB1c2VyU3RhclJhdGluZywgb3B0aW9ucyB8fCB7fSk7IC8vIDAgaWYgbm90IHJhdGVkXG4gICAgfVxuXG4gICAgZ2V0Q292ZXIoZGVzaXJlZFNpemUpIHtcbiAgICAgICAgY29uc3QgY292ZXJzID0gXy5tYXAodGhpcy5nZXQoJ2NvdmVycycpLCAoY292ZXIpID0+IGNvdmVyKTsgLy8gbWFwcyB0byBjb2xsZWN0aW9uIG9mIGNvdmVyc1xuICAgICAgICByZXR1cm4gZ2V0T3B0aW1pemVkQ292ZXJzKGNvdmVycywgZGVzaXJlZFNpemUpO1xuICAgIH1cblxuICAgIGdldENvdmVyU3JjKGRlc2lyZWRTaXplKSB7XG4gICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy5nZXRDb3ZlcihkZXNpcmVkU2l6ZSk7XG4gICAgICAgIHJldHVybiAoY292ZXIgJiYgY292ZXIuaHJlZikgfHwgdG9TdGF0aWNVcmwoJ2ltZy9uby1jb3Zlcl9lbl9VUy5qcGcnKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50QXZhaWxhYmlsaXR5KCkge1xuICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhQXZhaWxhYmlsaXR5SWQsIHsgaWQ6IHRoaXMuaWQgfSksXG4gICAgICAgICAgICB0eXBlOiAnR0VUJyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDAsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldE1pc3NpbmdBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWVkaWFJbnRlcmZhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21lZGlhSW50ZXJmYWNlID0gbmV3IE1lZGlhSW50ZXJmYWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhSW50ZXJmYWNlXG4gICAgICAgICAgICAuc2VhcmNoKHsgdGl0bGVJZDogdGhpcy5nZXQoJ2lkJykgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGF0dHJpYnV0ZSwgcmVzcG9uc2VbYXR0cmlidXRlXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXZhaWxhYmlsaXR5VGV4dCgpIHtcbiAgICAgICAgbGV0IGFjdGlvbiA9IHRoaXMuZ2V0KCd0aXRsZVN0YXRlJyk7XG4gICAgICAgIGxldCBhdmFpbGFiaWxpdHlUZXh0ID0gJyc7XG5cbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3VuYXZhaWxhYmxlJzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eVVuYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub29rJzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2F2YWlsYWJpbGl0eUF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYm9ycm93JyB8fCAncHJldmlldyc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvcnJvd2VkJzpcbiAgICAgICAgICAgIGNhc2UgJ2FkZFRvQXBwJzpcbiAgICAgICAgICAgIGNhc2UgJ2xpc3Rlbk5vdyc6XG4gICAgICAgICAgICBjYXNlICdyZWFkTm93JzpcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2JvcnJvd2VkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob2xkJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlDb21pbmdTb29uJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB0aGlzLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICA/IHdpbmRvdy5odG1sKCdhdmFpbGFiaWxpdHlDb21pbmdTb29uJylcbiAgICAgICAgICAgICAgICAgICAgOiB3aW5kb3cuaHRtbCgnYXZhaWxhYmlsaXR5V2FpdExpc3QnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29uSG9sZCc6XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCA9IHdpbmRvdy5odG1sKCdvbkhvbGQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dhaXRpbmcnOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnbG9hZGluZycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJpbGl0eVRleHQ7XG4gICAgfVxuXG4gICAgX2dldFN0YXRlKHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIHRoaXMuc2V0UGF0cm9uU3RhdGUocGF0cm9uSXRlbXMpO1xuICAgICAgICByZXR1cm4gVGl0bGVTdGF0ZS5nZXRTdGF0ZSh0aGlzLmF0dHJpYnV0ZXMsIHBhdHJvbkl0ZW1zKTtcbiAgICB9XG5cbiAgICBzZXRQYXRyb25TdGF0ZShwYXRyb25JdGVtcykge1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBpc09uSG9sZDogcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25Ib2xkcy5pbmRleE9mKHRoaXMuaWQpID4gLTEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBpc0JvcnJvd2VkOlxuICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uQ2hlY2tvdXRzLmluZGV4T2YodGhpcy5pZCkgPiAtMSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2FuaXRpemVkRGVzYygpIHtcbiAgICAgICAgbGV0IGRlc2MgPSB0aGlzLmdldCgnZGVzY3JpcHRpb24nKS5yZXBsYWNlKFxuICAgICAgICAgICAgLyg8YnJcXHMqW1xcL10/Pil8KFxccj9cXG58XFxyKS9naW0sXG4gICAgICAgICAgICAnICdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICQoYDxkaXY+JHtkZXNjfTwvZGl2PmApLnRleHQoKTtcbiAgICB9XG5cbiAgICBnZXRUaXRsZUFzeW5jKG1lZGlhSWQsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFJbmZvSWQsIHsgaWQ6IG1lZGlhSWQgfSksXG4gICAgICAgICAgICB0eXBlOiAnR0VUJyxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldChkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGVTdGF0ZScsIHRoaXMuX2dldFN0YXRlKG51bGwpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzTWFnYXppbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgndHlwZScpLmlkID09PSAnbWFnYXppbmUnO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFRpdGxlIGZyb20gJy4vVGl0bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUNvbGxlY3Rpb24gZXh0ZW5kcyBCYWNrYm9uZS5Db2xsZWN0aW9uIHtcbiAgICBnZXQgbW9kZWwoKSB7IHJldHVybiBUaXRsZTsgfVxufVxuXG4iLCJjb25zdCB7IGZlYXR1cmVNYW5hZ2VyLCBodG1sLCB1cmwsIHJvdXRlcyB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCAoe1xuICAgIGlzT3duZWQsXG4gICAgcmVsYXRlZFRpdGxlc1BhZ2VVcmwsXG4gICAgaWQsXG4gICAgcmlkLFxuICAgIHR5cGVJZCxcbiAgICB0aXRsZSxcbiAgICBhbGlnbm1lbnQsXG4gICAgc2FtcGxlSHJlZixcbiAgICBzYW1wbGVUZXh0LFxuICAgIGhpc3RvcnlBY3Rpb25MYWJlbCxcbiAgICBoaXN0b3J5QWN0aW9uVGV4dCxcbiAgICBoaXN0b3J5RW5hYmxlZCxcbiAgICBnYUhpc3RvcnlBY3Rpb24sXG4gICAgc2VyaWVzU2VhcmNoVXJsLFxuICAgIGhhc01lZGlhRG9Gb3JtYXQsXG59KSA9PiBgXG48ZGl2IGNsYXNzPVwiQ29udGV4dE1lbnVcIj5cbiAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiQ29udGV4dE1lbnUtYnV0dG9uIGpzLWNvbnRleHQtYnV0dG9uXCIgZGF0YS1tZWRpYS1pZD1cIiR7aWR9XCJcbiAgICAgICAgIGRhdGEtdGl0bGU9XCIke3RpdGxlfVwiXG4gICAgICAgICBkYXRhLWRyb3Bkb3duPVwiY29udGV4dC1tZW51LSR7aWR9LSR7cmlkfVwiXG4gICAgICAgICBkYXRhLW9wdGlvbnM9XCJhbGlnbjoke2FsaWdubWVudH1cIlxuICAgICAgICAgYXJpYS1jb250cm9scz1cIm1vcmUtYWN0aW9ucy1kcm9wLSR7aWR9XCJcbiAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICBhcmlhLWxhYmVsPVwiJHtodG1sKCdjb3Zlci50aXRsZUluZm8nLCB7IHRpdGxlIH0pfVwiXG4gICAgICAgICByb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbiBpY29uLW1vcmVcIiB0YWJpbmRleD1cIi0xXCI+PC9pPlxuICAgIDwvZGl2PlxuXG4gICAgPHVsIGlkPVwiY29udGV4dC1tZW51LSR7aWR9LSR7cmlkfVwiIGNsYXNzPVwiQ29udGV4dE1lbnUtZHJvcCBqcy1jb250ZXh0LWRyb3AgZi1kcm9wZG93biB0ZXh0LWxlZnRcIiBkYXRhLWRyb3Bkb3duLWNvbnRlbnQgYXJpYS1oaWRkZW49XCJmYWxzZVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwibGlzdFwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCI+XG4gICAgICAgICR7XG4gICAgICAgICAgICAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2hpZGUtdW5vd25lZC1zYW1wbGVzJykgfHxcbiAgICAgICAgICAgICAgICBpc093bmVkKSAmJlxuICAgICAgICAgICAgc2FtcGxlSHJlZiAhPT0gJydcbiAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInJlYWQtc2FtcGxlIENvbnRleHRNZW51LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8YSBkYXRhLWhyZWY9XCIke3NhbXBsZUhyZWZ9XCIgZGF0YS1tZWRpYS1pZD1cIiR7aWR9XCIgZGF0YS10aXRsZT1cIiR7dGl0bGV9XCJcbiAgICAgICAgICAgICAgICBkYXRhLW9mLWRyb3Bkb3duPVwibW9yZS1hY3Rpb25zLWRyb3AtJHtpZH1cIiBkYXRhLXR5cGU9XCIke3R5cGVJZH1cIiBtZWRpYS1kby1mb3JtYXQ9XCIke2hhc01lZGlhRG9Gb3JtYXR9XCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGFyaWEtbGFiZWw9XCIke2h0bWwoXG4gICAgICAgICAgICAgICAgICAgICdjb3Zlci5zYW1wbGVMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIHsgc2FtcGxlOiBzYW1wbGVUZXh0LCB0aXRsZSB9XG4gICAgICAgICAgICAgICAgKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgJHtzYW1wbGVUZXh0fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICA8bGkgY2xhc3M9XCJDb250ZXh0TWVudS1pdGVtXCI+XG4gICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgaHJlZj1cIiR7dXJsKHJvdXRlcy5tZWRpYUlkLCB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICB9KX1cIiBhcmlhLWxhYmVsPVwiJHtodG1sKCd2aWV3RGV0YWlsc0Fib3V0VGl0bGUnLCB7XG4gICAgdGl0bGUsXG59KX1cIj4ke2h0bWwoJ3ZpZXdEZXRhaWxzJyl9PC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgICAke1xuICAgICAgICAgICAgc2VyaWVzU2VhcmNoVXJsICYmIHNlcmllc1NlYXJjaFVybCAhPT0gJydcbiAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIkNvbnRleHRNZW51LWl0ZW1cIj48YSB0YWJpbmRleD1cIi0xXCIgaHJlZj1cIiR7c2VyaWVzU2VhcmNoVXJsfVwiPiR7aHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAndmlld1NlcmllcydcbiAgICAgICAgICAgICAgICAgICl9PC9hPjwvbGk+YFxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICAke1xuICAgICAgICAgICAgaGlzdG9yeUVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IGA8bGkgY2xhc3M9XCJDb250ZXh0TWVudS1pdGVtIGpzLWhpc3RvcnlBY3Rpb25cIiBkYXRhLWdhLWFjdGlvbj1cIiR7Z2FIaXN0b3J5QWN0aW9ufVwiIGRhdGEtbWVkaWEtaWQ9XCIke2lkfVwiPjxhIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIiR7aGlzdG9yeUFjdGlvbkxhYmVsfVwiPiR7aGlzdG9yeUFjdGlvblRleHR9PC9hPjwvbGk+YFxuICAgICAgICAgICAgICAgIDogYGBcbiAgICAgICAgfVxuICAgICAgICA8bGkgY2xhc3M9XCJDb250ZXh0TWVudS1pdGVtXCI+PGEgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCIke3JlbGF0ZWRUaXRsZXNQYWdlVXJsfVwiIGFyaWEtbGFiZWw9XCIke2h0bWwoXG4gICAgJ3ZpZXdSZWxhdGVkVG9UaXRsZScsXG4gICAgeyB0aXRsZSB9XG4pfVwiPiR7aHRtbCgneW91TWF5QWxzb0xpa2UnKX08L2E+PC9saT5cbiAgICA8L3VsPlxuPC9kaXY+YDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7d2l0aEljb25zLCBhdmFpbGFiaWxpdHlUZXh0LCB3YWl0aW5nVGV4dCwgaGVscEJ1dHRvbkhUTUx9KSA9PiBgXG48ZGl2IGNsYXNzPSdDb3BpZXNBdmFpbGFibGUnPlxuICAgICR7YXZhaWxhYmlsaXR5VGV4dCA/IGBcbiAgICAgICAgPGRpdiBjbGFzcz0nYXZhaWxhYmlsaXR5Jz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSdhdmFpbGFiaWxpdHlUZXh0Jz5cbiAgICAgICAgICAgICAgICAke3dpdGhJY29ucyA/ICc8aSBjbGFzcz1cImljb24tY29waWVzXCI+PC9pPicgOiAnJyB9XG4gICAgICAgICAgICAgICAgJHthdmFpbGFiaWxpdHlUZXh0fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgJHshd2FpdGluZ1RleHQgJiYgaGVscEJ1dHRvbkhUTUwgPyBgXG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICR7aGVscEJ1dHRvbkhUTUx9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgYCA6ICcnfVxuICAgICAgICA8L2Rpdj5cbiAgICBgIDogJyd9XG4gICAgJHt3YWl0aW5nVGV4dCA/IGBcbiAgICAgICAgPGRpdiBjbGFzcz0nd2FpdGluZyc+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAke3dpdGhJY29ucyA/ICc8aSBjbGFzcz1cImljb24taG9sZHNcIj48L2k+JyA6ICcnIH1cbiAgICAgICAgICAgICAgICAke3dhaXRpbmdUZXh0fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgJHtoZWxwQnV0dG9uSFRNTCA/IGBcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgJHtoZWxwQnV0dG9uSFRNTH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBgIDogJyd9XG4gICAgICAgIDwvZGl2PlxuICAgIGAgOiAnJ31cbjwvZGl2PlxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7IG1lZGlhLCBzcmMsIGhyZWYsIGNvdmVyQ29sb3IsIG5vU2FtcGxlQ2xhc3MsIHNyY3NldCB9KSA9PiBgXG48ZGl2IGNsYXNzPVwiQ292ZXJJbWFnZUNvbnRhaW5lclwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJHtjb3ZlckNvbG9yfVwiPlxuICAgIDxhIGhyZWY9XCIke2hyZWZ9XCJcbiAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgIGRhdGEtaHJlZiAgICA9XCIke2hyZWZ9XCJcbiAgICAgICAgICAgZGF0YS1tZWRpYS1pZD1cIiR7bWVkaWEuaWR9XCJcbiAgICAgICAgICAgZGF0YS10aXRsZSAgID1cIiR7bWVkaWEudGl0bGV9XCJcbiAgICAgICAgICAgZGF0YS10eXBlICAgID1cIiR7bWVkaWEudHlwZS5pZH1cIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJHttZWRpYS50aXRsZX0gLSAke2h0bWwobWVkaWEudHlwZS5pZCl9XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjbGFzcz1cImxhcmdlLXRpdGxlIGpzLWRldGFpbHMtY292ZXItaW1hZ2UgJHtub1NhbXBsZUNsYXNzfSBcIlxuICAgICAgICAgICAgc3JjPVwiJHtzcmN9XCJcbiAgICAgICAgICAgICR7c3Jjc2V0ICYmIGBzcmNzZXQ9XCIke3NyY3NldH1cImB9XG4gICAgICAgICAgICBhbHQ9XCIke21lZGlhLnRpdGxlfSAtICR7aHRtbChtZWRpYS50eXBlLmlkKX1cIlxuICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke2NvdmVyQ29sb3J9OyBtYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7XCIvPlxuICAgIDwvYT5cbjwvZGl2PmA7XG4iLCJpbXBvcnQgeyB0b1N0YXRpY1VybCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xpYi9hc3NldE1hcHBlcic7XG5cbmV4cG9ydCBkZWZhdWx0ICh7IG1lZGlhLCBocmVmLCBpc0luSGVybywgY292ZXJXaWR0aCwgY292ZXJIZWlnaHQsIGNyZWF0b3JUZXh0IH0pID0+IGBcbjxkaXYgY2xhc3M9XCJDb3ZlckltYWdlQ29udGFpbmVyXCI+XG48YSBjbGFzcz1cIkNvdmVySW1hZ2VDb250YWluZXIgbm9Db3ZlckF2YWlsYWJsZSAkeyBpc0luSGVybyA/ICdzZWNvbmRhcnktYmFja2dyb3VuZCcgOiAncHJpbWFyeS1iYWNrZ3JvdW5kJyB9XCJcbiAgICBocmVmPVwiJHsgaHJlZiB9XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBkYXRhLWhyZWYgICAgPVwiJHsgaHJlZiB9XCJcbiAgICBkYXRhLW1lZGlhLWlkPVwiJHsgbWVkaWEuaWQgfVwiXG4gICAgZGF0YS10aXRsZSAgID1cIiR7IG1lZGlhLnRpdGxlIH1cIlxuICAgIGRhdGEtdHlwZSAgICA9XCIkeyBtZWRpYS50eXBlLmlkIH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlICR7IGlzSW5IZXJvID8gJ3NlY29uZGFyeS1mb250LWhpZ2hsaWdodC1ib3gnIDogJ3ByaW1hcnktZm9udCBwcmltYXJ5LWZvbnQtaGlnaGxpZ2h0LWJveCcgfVwiPiR7IG1lZGlhLnRpdGxlIH08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF1dGhvciAkeyBpc0luSGVybyA/ICcnIDogJ3ByaW1hcnktZm9udCcgfVwiPiR7IGNyZWF0b3JUZXh0IH08L2Rpdj5cblxuICAgICAgICA8aW1nXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCIkeyBtZWRpYS50aXRsZSB9IC0gJHsgaHRtbChtZWRpYS50eXBlLmlkKSB9XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjbGFzcz1cImxhcmdlLXRpdGxlIGpzLWRldGFpbHMtY292ZXItaW1hZ2VcIlxuICAgICAgICAgICAgc3JjPVwiJHsgdG9TdGF0aWNVcmwoJ2ltZy9jbGVhci5naWYnKSB9XCJcbiAgICAgICAgICAgIGFsdD1cIiR7IG1lZGlhLnRpdGxlIH0gLSAkeyBodG1sKG1lZGlhLnR5cGUuaWQpIH1cIlxuICAgICAgICAgICAgLz5cblxuPC9hPlxuPC9kaXY+XG5cbmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe2luZGV4LCBpc0ZpbGxlZCwgaXNIYWxmRmlsbGVkLCBsYWJlbCwgcmlkfSkgPT4gYFxuICAgIDxpbnB1dCBpZD0nc3RhciR7aW5kZXh9LSR7cmlkfScgY2xhc3M9J3N0YXJSYWRpbycgdHlwZT0ncmFkaW8nIHZhbHVlPScke2luZGV4fScgYXJpYS1sYWJlbD0nJHtsYWJlbH0nIG5hbWU9JyR7cmlkfScvPlxuICAgIDxzcGFuIGZvcj0nc3RhciR7aW5kZXh9LSR7cmlkfSc+PGkgZGF0YS1pbmRleD0nJHtpbmRleH0nIGNsYXNzPSdpY29uIGljb24tc3RhciBjb250cmFzdCBTdGFyUmF0aW5ncy1zdGFyICR7aXNIYWxmRmlsbGVkID8gJ2hhbGZGaWxsZWQnIDogJyd9ICR7ISFpc0ZpbGxlZCA/ICdmaWxsZWQnIDogJyd9Jz48L2k+PC9zcGFuPlxuYDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7IGdlb0lkY0NsYXNzIH0pID0+IGBcbjxkaXYgY2xhc3M9XCJ0aXRsZS1jb250ZW50cyBjYXJkIFRpdGxlQ2FyZCAke2dlb0lkY0NsYXNzfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJUaXRsZUhlYWRlckJhclwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIkNvdmVySW1hZ2VcIj48L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJJbmZvUGFuZWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlSW5mb1wiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJUaXRsZUFjdGlvbiBpcy1ncmlkXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRpdGxlV2lzaGxpc3QgaXMtZ3JpZFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyXCIgLz5cbjwvZGl2PmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe3R5cGVJZH0pID0+IGBcbiR7dHlwZUlkID8gYFxuICAgIDxzcGFuIGNsYXNzPVwidGl0bGUtZm9ybWF0LWJhZGdlIGNvbnRyYXN0IHUtYWxsQ2Fwc1wiPjxpIGNsYXNzPVwiaWNvbi0ke3R5cGVJZH1cIj48L2k+JHt3aW5kb3cuaHRtbCh0eXBlSWQpfTwvc3Bhbj5cbmAgOiAnJyB9XG5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHsgdGl0bGVJZCwgdGl0bGUsIGhyZWYsIGFyaWFMYWJlbCB9KSA9PiBgPGgzIHRpdGxlPVwiJHsgdGl0bGUgfVwiIGNsYXNzPVwidGl0bGUtbmFtZVwiIGRhdGEtbWVkaWEtaWQ9XCIkeyB0aXRsZUlkIH1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgPGEgdGFiaW5kZXg9XCIwXCIgaHJlZj1cIiR7IGhyZWYgfVwiIHJvbGU9XCJsaW5rXCIgYXJpYS1sYWJlbD1cIiR7IGFyaWFMYWJlbCB9XCI+XG4gICAgICAgICR7IHRpdGxlIH1cbiAgICA8L2E+XG48L2gzPmA7XG4iLCJleHBvcnQgZGVmYXVsdCAoe2RhdGV9KSA9PiBgPHAgY2xhc3M9J3RpdGxlLXByZXJlbGVhc2UnPiAke3dpbmRvdy5odG1sKCdhY2NvdW50SG9sZHMucHJlcmVsZWFzZUV4cGVjdGVkJywge2RhdGU6IGRhdGV9KX08L3A+YDtcbiIsImV4cG9ydCBkZWZhdWx0ICh7Z2EsIGNvbnRyYXN0Q2xhc3MsIGFyaWFMYWJlbCwgaWNvbkNsYXNzLCB0ZXh0LCBpY29uQW5pbWF0aW9uQ2xhc3Nlc30pID0+IGBcbjxidXR0b24gJHtnYSA/IGBkYXRhLWdhLXRyYWNrPVwid2lzaGxpc3RcIiBkYXRhLWdhLW1lZGlhSUQ9XCIke2dhLm1lZGlhSWR9XCIgZGF0YS1nYS10eXBlPSR7Z2EuZm9ybWF0VHlwZX1gIDogJyd9XG5jbGFzcz1cIldpc2hMaXN0QnV0dG9uICR7Y29udHJhc3RDbGFzc31cIiBcbnR5cGU9XCJidXR0b25cIiBcbmFyaWEtbGFiZWw9XCIke2FyaWFMYWJlbH1cIj5cbiAgICA8aSBjbGFzcz1cIiR7aWNvbkNsYXNzfSBpY29uICR7aWNvbkFuaW1hdGlvbkNsYXNzZXN9XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICR7dGV4dCA/IGA8c3BhbiBjbGFzcz1cInUtYWxsQ2FwcyBXaXNoTGlzdEJ1dHRvbi10ZXh0XCI+JHt0ZXh0fTwvc3Bhbj5gIDogJyd9XG48L2J1dHRvbj5gO1xuIiwiaW1wb3J0IE1lZGlhVmlld1ByZWZlcmVuY2UgZnJvbSAnLi4vbW9kZWxzL01lZGlhVmlld1ByZWZlcmVuY2UnO1xuXG5sZXQgZmVhdHVyZU1hbmFnZXIgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXI7XG5jbGFzcyBWaWV3U2VsZWN0b3JCdXR0b24gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcblxuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gVmlld1NlbGVjdG9yQnV0dG9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICdWaWV3U2VsZWN0b3JCdXR0b24gY2Fubm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLnJlbmRlcik7XG5cbiAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrIGtleXByZXNzJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0RXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZWxlY3QoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuc2V0KHsgdmlldzogdGhpcy52aWV3IH0pO1xuICAgIH1cblxuICAgIGlzU2VsZWN0RXZlbnQgPSAoZSkgPT5cbiAgICAgICAgKGUudHlwZSA9PT0gJ2NsaWNrJyB8fCBlLndoaWNoID09PSAxMyB8fCBlLndoaWNoID09PSAzMikgJiZcbiAgICAgICAgKGUucHJldmVudERlZmF1bHQoKSB8fCB0cnVlKTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXcgfHwgIXRoaXMudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcy52aWV3IGFuZCB0aGlzLnRlbXBsYXRlIGFyZSByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZWwuaHRtbChcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLm1vZGVsLmdldCgndmlldycpID09PSB0aGlzLnZpZXcsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cblxuY2xhc3MgR3JpZFZpZXdTZWxlY3RvckJ1dHRvbiBleHRlbmRzIFZpZXdTZWxlY3RvckJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAoeyBzZWxlY3RlZCB9KSA9PlxuICAgICAgICAgICAgYDxhIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwidmlldy1hcy1ncmlkXCIgYXJpYS1sYWJlbD1cIiR7aHRtbChcbiAgICAgICAgICAgICAgICAncmVzdWx0cy52aWV3SW5HcmlkJ1xuICAgICAgICAgICAgKX1cIiByb2xlPVwiYnV0dG9uXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbi1ncmlkICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWQgJiYgJ2dyYXknXG4gICAgICAgICAgICAgICAgICAgIH1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIHRoaXMudmlldyA9IE1lZGlhVmlld1ByZWZlcmVuY2Uub3B0aW9ucy5ncmlkO1xuICAgIH1cbn1cblxuY2xhc3MgTGlzdFZpZXdTZWxlY3RvckJ1dHRvbiBleHRlbmRzIFZpZXdTZWxlY3RvckJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSAoeyBzZWxlY3RlZCB9KSA9PlxuICAgICAgICAgICAgYDxhIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwidmlldy1hcy1saXN0XCIgYXJpYS1sYWJlbD1cIiR7aHRtbChcbiAgICAgICAgICAgICAgICAncmVzdWx0cy52aWV3SW5MaXN0J1xuICAgICAgICAgICAgKX1cIiByb2xlPVwiYnV0dG9uXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tbGlzdCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZCAmJiAnZ3JheSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB0aGlzLnZpZXcgPSBNZWRpYVZpZXdQcmVmZXJlbmNlLm9wdGlvbnMubGlzdDtcbiAgICB9XG59XG5cbmNsYXNzIFRpdGxlQ29sbGVjdGlvblZpZXdTZWxlY3RvciBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIHRlbXBsYXRlID0gKCkgPT4gYFxuICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiR3JpZFZpZXdCdXR0b25cIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJMaXN0Vmlld0J1dHRvblwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcblxuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IE1lZGlhVmlld1ByZWZlcmVuY2UoKTtcblxuICAgICAgICB0aGlzLiRlbC5wcmVwZW5kKHRoaXMudGVtcGxhdGUoKSk7XG4gICAgICAgIGlmICghZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdnZW8taWRjJykpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdFZpZXdCdXR0b24gPSBuZXcgTGlzdFZpZXdTZWxlY3RvckJ1dHRvbih7XG4gICAgICAgICAgICAgICAgZWw6IHRoaXMuJCgnLkxpc3RWaWV3QnV0dG9uJyksXG4gICAgICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICB9KS5yZW5kZXIoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFZpZXdCdXR0b24gPSBuZXcgR3JpZFZpZXdTZWxlY3RvckJ1dHRvbih7XG4gICAgICAgICAgICAgICAgZWw6IHRoaXMuJCgnLkdyaWRWaWV3QnV0dG9uJyksXG4gICAgICAgICAgICAgICAgbW9kZWw6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICB9KS5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb2xsZWN0aW9uVmlld1NlbGVjdG9yO1xuIiwiY29uc3QgQmFja2JvbmUgID0gd2luZG93LkJhY2tib25lO1xuXG5jb25zdCBUaXRsZURlc2NyaXB0aW9uID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSxcblxuICAgIHRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgJHt0aGlzLl9kZXNjcmlwdGlvbigpfVxuICAgICAgICAgICAgJHt0aGlzLl9yZWFkTW9yZUxpbmsoKX1cbiAgICAgICAgYDtcbiAgICB9LFxuXG4gICAgX3JlYWRNb3JlTGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCdkZXNjcmlwdGlvbicpLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiJHt0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybH1cIiBjbGFzcz1cImV4cGFuZC1kZXNjcmlwdGlvbiBjb250cmFzdCBzZWNvbmRhcnktaG92ZXItdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3dpbmRvdy5odG1sKCdjb3Zlci5yZWFkTW9yZScpfVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSxcblxuICAgIF9kZXNjcmlwdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCdkZXNjcmlwdGlvbicpLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2FuaXRpemVkRGVzYygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpbmRvdy5odG1sKCd0aXRsZURldGFpbHMubm9EZXNjQXZhaWxhYmxlJyk7XG4gICAgfSxcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy4kZWwuaHRtbCh0aGlzLnRlbXBsYXRlKCkpO1xuICAgIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpdGxlRGVzY3JpcHRpb247XG4iLCJpbXBvcnQgQ29udGV4dE1lbnUgZnJvbSAnLi4vQ29udGV4dE1lbnUnO1xuaW1wb3J0IFRpdGxlQXV0aG9yIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlQXV0aG9yJztcbmltcG9ydCBUaXRsZUVkaXRpb24gZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVFZGl0aW9uJztcbmltcG9ydCBUaXRsZU5hbWUgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVOYW1lJztcbmltcG9ydCBUaXRsZUZvcm1hdEJhZGdlIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlRm9ybWF0QmFkZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUluZm8gZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gJ3RpdGxlLWluZm8nO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgX3Jlc2V0KCkge1xuICAgICAgICB0aGlzLl92aWV3cy5mb3JFYWNoKCh2aWV3KSA9PiB2aWV3LnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5fdmlld3MgPSBbXTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcblxuICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgKHRoaXMudGl0bGVOYW1lID0gbmV3IFRpdGxlTmFtZSh7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghd2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZ2VvLWlkYycpKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLmNvbnRleHRNZW51ID0gbmV3IENvbnRleHRNZW51KHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS4kZWwuYWRkQ2xhc3MoJ3RleHQtcmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlbC5pc01hZ2F6aW5lKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3cy5wdXNoKFxuICAgICAgICAgICAgICAgICh0aGlzLnRpdGxlRWRpdGlvbiA9IG5ldyBUaXRsZUVkaXRpb24oeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2dlby1pZGMnKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy50aXRsZUF1dGhvciA9IG5ldyBUaXRsZUF1dGhvcih7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZUZvcm1hdEJhZGdlID0gbmV3IFRpdGxlRm9ybWF0QmFkZ2Uoe1xuICAgICAgICAgICAgICAgIHR5cGVJZDogdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5pZCxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZCguLi50aGlzLl92aWV3cy5tYXAoKHZpZXcpID0+IHZpZXcuJGVsKSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IEhvbGRJbmZvcm1hdGlvbk1vZGFsIGZyb20gJy4uLy4uLy4uL2hvbGRJbmZvcm1hdGlvbi92aWV3cy9Ib2xkSW5mb3JtYXRpb25Nb2RhbCc7XG5pbXBvcnQgSG9sZEluZm9ybWF0aW9uTW9kYWxWMiBmcm9tICcuLi8uLi8uLi9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25Nb2RhbFYyJztcbmltcG9ydCBIb2xkSW5mb3JtYXRpb25WMiBmcm9tICcuLi8uLi8uLi9ob2xkSW5mb3JtYXRpb25WMi9Ib2xkSW5mb3JtYXRpb25WMic7XG5cbmltcG9ydCBDb3BpZXNBdmFpbGFibGVUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvQ29waWVzQXZhaWxhYmxlLmh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3BpZXNBdmFpbGFibGUgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICBjb25zdHJ1Y3Rvcih7d2l0aEljb25zfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5tb2RlbC50b0pTT04oKTtcbiAgICAgICAgdGhpcy53aXRoSWNvbnMgPSB3aXRoSWNvbnM7XG4gICAgICAgIHRoaXMubGlzdGVuVG8odGhpcy5tb2RlbCwgJ2NoYW5nZTp0aXRsZVN0YXRlJywgdGhpcy5fbWF5YmVSZW5kZXIpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjbGljayAuanMtaG9sZHMtcmF0aW8taGVscC1pY29uJzogJ19yZW5kZXJNb2RhbCdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgIGlmKHRoaXMubW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aXRsZS50aXRsZVN0YXRlID09PSAndW5hdmFpbGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3JtYWwoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGl0bGUuaXNQcmVSZWxlYXNlVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlck5vcm1hbCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMudGl0bGUuYXZhaWxhYmlsaXR5VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3JtYWwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKENvcGllc0F2YWlsYWJsZVRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEljb25zOiB0aGlzLndpdGhJY29ucyxcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dDogd2luZG93LnRleHQoJ2NvdmVyLmFsd2F5c0F2YWlsYWJsZScpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGltaXRlZCcgJiYgIXRoaXMudGl0bGUuaXNBdmFpbGFibGU6XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKENvcGllc0F2YWlsYWJsZVRlbXBsYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEljb25zOiB0aGlzLndpdGhJY29ucyxcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dDogd2luZG93LnRleHQoJ2NvdmVyLmxpbWl0ZWRBdmFpbGFiaWxpdHknKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9tYXliZVJlbmRlcigpIHtcbiAgICAgICAgaWYgKCh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzT25Ib2xkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJylcbiAgICAgICAgICAgIHx8ICh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzQm9ycm93ZWQnKSA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdib3Jyb3dlZCcpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5tb2RlbC5hbGxDb3BpZXNBcmVMdWNreURheSl7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3JlbmRlck5vcm1hbCgpIHtcbiAgICAgICAgbGV0IGF2YWlsYWJpbGl0eVRleHQsIHdhaXRpbmdUZXh0LCBoZWxwQnV0dG9uSFRNTDtcblxuICAgICAgICBjb25zdCBub3RIZWxkQ2xhc3MgPSAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnYmV0dGVyUGF0cm9uU3RhdGUnKSA/IHRoaXMubW9kZWwuZ2V0KCdpc09uSG9sZCcpIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKSA9PT0gJ29uSG9sZCcpID8gJycgOiAnanMtaG9sZHMtcmF0aW8tbm90LWhlbGQnO1xuXG4gICAgICAgIGlmICh0aGlzLnRpdGxlLnR5cGUuaWQgPT09ICdwZXJpb2RpY2FscycgJiYgdGhpcy50aXRsZS5hdmFpbGFibGVDb3BpZXMgPCAxICYmICF0aGlzLnRpdGxlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2NvdmVyLmxpbWl0ZWRBdmFpbGFiaWxpdHknKTtcbiAgICAgICAgICAgIGhlbHBCdXR0b25IVE1MID0gYFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiJHt3aW5kb3cuaHRtbCgnY292ZXIud2h5TGltaXRlZEF2YWlsYWJpbGl0eScpfVwiXG4gICAgICAgICAgICAgICAgZGF0YS1yZXZlYWwtaWQ9XCJsaW1pdGVkLXBlcmlvZGljYWwtYXZhaWxhYmlsaXR5XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlbHAtdGlwIHNlY29uZGFyeS1iYWNrZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvcHlWYXJpYWJsZXMgPSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQ29waWVzOiB3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpID8gdGhpcy50aXRsZS5hdmFpbGFibGVDb3BpZXMgKyB0aGlzLnRpdGxlLmx1Y2t5RGF5QXZhaWxhYmxlQ29waWVzIDogdGhpcy50aXRsZS5hdmFpbGFibGVDb3BpZXMsXG4gICAgICAgICAgICAgICAgb3duZWRDb3BpZXM6IHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0x1Y2t5RGF5JykgPyB0aGlzLnRpdGxlLm93bmVkQ29waWVzICsgdGhpcy50aXRsZS5sdWNreURheU93bmVkQ29waWVzIDogdGhpcy50aXRsZS5vd25lZENvcGllc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVRleHQgPSB3aW5kb3cuaHRtbCgnY292ZXIuY29waWVzQXZhaWxhYmxlJywgY29weVZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMubW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkgJiYgdGhpcy50aXRsZS50aXRsZVN0YXRlID09PSAndW5hdmFpbGFibGUnKXtcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlUZXh0ID0gd2luZG93Lmh0bWwoJ2NvdmVyLmNvcGllc0F2YWlsYWJsZScsIHthdmFpbGFibGVDb3BpZXM6IDAsIG93bmVkQ29waWVzOiB0aGlzLnRpdGxlLmx1Y2t5RGF5T3duZWRDb3BpZXN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpdGxlLmlzQXZhaWxhYmxlICYmICF0aGlzLm1vZGVsLmhhc0F2YWlsYWJsZUx1Y2t5RGF5Q29waWVzKSB7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMubW9kZWwuYWxsQ29waWVzQXJlTHVja3lEYXkpe1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnTEhUTkctMjg2MycpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudGl0bGUuaXNPd25lZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZ1RleHQgPSBuZXcgSG9sZEluZm9ybWF0aW9uVjIoe21vZGVsOiB0aGlzLm1vZGVsLCBpc1Zpc2l0b3I6IHdpbmRvdy5PdmVyRHJpdmUuaXNWaXNpdG9yfSkud2FpdFRpbWVIdG1sO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLm1vZGVsLmdldCgnaXNGYXN0bGFuZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aXRsZS5ob2xkc1JhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZ1RleHQgPSB3aW5kb3cuaHRtbCgnY292ZXIud2FpdGluZ1BlckNvcHknLCB7aG9sZHNSYXRpbzogdGhpcy50aXRsZS5ob2xkc1JhdGlvfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGl0bGUuaG9sZHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmdUZXh0ID0gd2luZG93Lmh0bWwoJ2NvdmVyLm5vSG9sZHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoZWxwQnV0dG9uSFRNTCA9IHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0xIVE5HLTI4NjMnKSAmJiAhdGhpcy50aXRsZS5pc093bmVkXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogYCA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbWVkaWEtaWQ9XCIke3RoaXMudGl0bGUuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIiR7d2luZG93Lmh0bWwoJ2NvdmVyLmhvbGRzUmF0aW9FeHBsYW5hdGlvbicpfVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVscC10aXAgc2Vjb25kYXJ5LWJhY2tncm91bmQganMtaG9sZHMtcmF0aW8taGVscC1pY29uICR7bm90SGVsZENsYXNzfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLmFwcGVuZChDb3BpZXNBdmFpbGFibGVUZW1wbGF0ZSh7XG4gICAgICAgICAgICB3aXRoSWNvbnM6IHRoaXMud2l0aEljb25zLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5VGV4dCxcbiAgICAgICAgICAgIHdhaXRpbmdUZXh0LFxuICAgICAgICAgICAgaGVscEJ1dHRvbkhUTUxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIF9yZW5kZXJNb2RhbCgpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ0xIVE5HLTI4NjMnKSl7XG4gICAgICAgICAgICBpZiAoKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2JldHRlclBhdHJvblN0YXRlJykgPyB0aGlzLm1vZGVsLmdldCgnaXNPbkhvbGQnKSA6IHRoaXMubW9kZWwuZ2V0KCd0aXRsZVN0YXRlJykgPT09ICdvbkhvbGQnKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hamF4LmdldEhvbGQodGhpcy5tb2RlbC5nZXQoJ2lkJykpLmRvbmUoKGhvbGREYXRhKSA9PiB7IC8vIHNob3VsZCBiZSBjb25maXJtaW5nIHRoYXQgdGhpcyBpcyBvbiBob2xkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRzUmF0aW86IGhvbGREYXRhLmhvbGRzUmF0aW8sXG4gICAgICAgICAgICAgICAgICAgICAgICBob2xkc0NvdW50OiBob2xkRGF0YS5ob2xkc0NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9sZExpc3RQb3NpdGlvbjogaG9sZERhdGEuaG9sZExpc3RQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RhbCA9IG5ldyAgSG9sZEluZm9ybWF0aW9uTW9kYWxWMih7bW9kZWw6IHRoaXMubW9kZWwsIGVsOiB0aGlzLmVsfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gbmV3IEhvbGRJbmZvcm1hdGlvbk1vZGFsVjIoe21vZGVsOiB0aGlzLm1vZGVsLCBlbDogdGhpcy5lbCwgaGlkZUhvbGRzTGluazogdHJ1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNGYXN0bGFuZSA9IHRoaXMubW9kZWwuZ2V0KCdpc0Zhc3RsYW5lJyk7XG4gICAgICAgICAgICBjb25zdCB0aXRsZVN0YXRlID0gdGhpcy5tb2RlbC5nZXQoJ3RpdGxlU3RhdGUnKTtcbiAgICAgICAgICAgIGlmICghIWlzRmFzdGxhbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gbmV3IEhvbGRJbmZvcm1hdGlvbk1vZGFsKHttb2RlbDogdGhpcy5tb2RlbCwgdHlwZTogJ2Jhc2ljJywgZWw6IHRoaXMuZWx9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCh3aW5kb3cuZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdiZXR0ZXJQYXRyb25TdGF0ZScpID8gdGhpcy5tb2RlbC5nZXQoJ2lzT25Ib2xkJykgOiB0aGlzLm1vZGVsLmdldCgndGl0bGVTdGF0ZScpID09PSAnb25Ib2xkJykpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWpheC5nZXRIb2xkKHRoaXMubW9kZWwuZ2V0KCdpZCcpKS5kb25lKChob2xkRGF0YSkgPT4geyAvLyBzaG91bGQgYmUgY29uZmlybWluZyB0aGF0IHRoaXMgaXMgb24gaG9sZFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBob2xkc1JhdGlvOiBob2xkRGF0YS5ob2xkc1JhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9sZHNDb3VudDogaG9sZERhdGEuaG9sZHNDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRMaXN0UG9zaXRpb246IGhvbGREYXRhLmhvbGRMaXN0UG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWwgPSBuZXcgSG9sZEluZm9ybWF0aW9uTW9kYWwoe21vZGVsOiB0aGlzLm1vZGVsLCB0eXBlOiAnc3VjY2Vzc1Bvc2l0aW9uJywgZWw6IHRoaXMuZWx9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWwgPSBuZXcgSG9sZEluZm9ybWF0aW9uTW9kYWwoe21vZGVsOiB0aGlzLm1vZGVsLCB0eXBlOiAncmF0aW8nLCBlbDogdGhpcy5lbH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IFN0YXJWaWV3IGZyb20gJy4vU3RhclZpZXcnO1xuY29uc3QgeyBmZWF0dXJlTWFuYWdlciB9ID0gd2luZG93O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFyUmF0aW5nIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21vdXNlbGVhdmUnOiAnc3RvcEhvdmVyUmF0aW5nJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fdmlld3MuZm9yRWFjaCgodmlldykgPT4gdmlldy5yZW1vdmUoKSk7XG4gICAgICAgIHN1cGVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGdldCBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tb2RlbC5nZXQoJ2lzUHJlUmVsZWFzZVRpdGxlJyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG4gICAgICAgIHRoaXMuaG92ZXJSYXRpbmcgPSAwO1xuICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcygnc3Rhci1yYXRpbmdzLWNvbnRhaW5lciBTdGFyUmF0aW5ncycpO1xuXG4gICAgICAgIHRoaXMucmlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdGFyIHJhdGluZyB3aGVuIHBhdHJvbiBzdGF0dXMgaXMgcmVjZWl2ZWRcbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAnY2hhbmdlOnVzZXJTdGFyUmF0aW5nJywgKG1vZGVsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmKCF0aGlzLmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ2xvYmFsUmF0aW5nID0gdGhpcy5tb2RlbC5nZXQoJ3N0YXJSYXRpbmcnKSB8fCAwO1xuICAgICAgICB0aGlzLiRlbC5hdHRyKCdkYXRhLWdsb2JhbC1yYXRpbmcnLCB0aGlzLm1vZGVsLmdldCgnc3RhclJhdGluZycpKTtcbiAgICAgICAgdGhpcy4kZWwuYXR0cignZGF0YS1tZWRpYS1pZCcsIHRoaXMubW9kZWwuaWQpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGxldCBjdHggPSB0aGlzO1xuICAgICAgICBfLmVhY2goWzEsIDIsIDMsIDQsIDUsIDBdLCAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgZ2xvYmFsUmF0aW5nOiBnbG9iYWxSYXRpbmcsXG4gICAgICAgICAgICAgICAgcmlkOiB0aGlzLnJpZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBzdGFyVmlldyA9IG5ldyBTdGFyVmlldyh2aWV3RGF0YSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdzYW1wbGVPbmx5TW9kZScpKXtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5vbigncmF0ZScsIChzdGFyVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmhhbmRsZVJhdGluZyhzdGFyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXJWaWV3Lm9uKCdob3ZlcicsIChzdGFyVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lm9uSG92ZXJSYXRpbmcoc3RhclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChzdGFyVmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJGVsLmVtcHR5KCk7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcbiAgICAgICAgICAgIHZpZXcucmVuZGVyKCk7XG4gICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQodmlldy4kZWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0hhbGZTdGFyIChnbG9iYWxSYXRpbmcpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFJhdGluZyAlIDEgPj0gMC4yNSAmJiBnbG9iYWxSYXRpbmcgJSAxIDwgMC43NTsgXG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc1VzZXJSYXRpbmcgPSAodGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJykgPiAwIHx8IHRoaXMuaG92ZXJSYXRpbmcpID4gMDtcbiAgICAgICAgdGhpcy4kZWwudG9nZ2xlQ2xhc3MoJ3VzZXItcmF0aW5nJywgaXNVc2VyUmF0aW5nKTtcbiAgICAgICAgbGV0IGdsb2JhbFJhdGluZyA9IHRoaXMubW9kZWwuZ2V0KCdzdGFyUmF0aW5nJykgfHwgMDtcblxuICAgICAgICBfLmVhY2godGhpcy5fdmlld3MsIChzdGFyVmlldykgPT4ge1xuXG4gICAgICAgICAgICBpZiAoaXNVc2VyUmF0aW5nKXtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5zZXRGaWxsZWQoc3RhclZpZXcuaW5kZXggPD0gKHRoaXMuaG92ZXJSYXRpbmcgfHwgdGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJykpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhclZpZXcuaW5kZXggPCBnbG9iYWxSYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdGFyVmlldy5zZXRGaWxsZWQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJWaWV3LmluZGV4IC0gMSA+IGdsb2JhbFJhdGluZykge1xuICAgICAgICAgICAgICAgIHN0YXJWaWV3LnNldEZpbGxlZChmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJWaWV3LnNldEZpbGxlZChzdGFyVmlldy5pbmRleCAtIDAuNzUgPCBnbG9iYWxSYXRpbmcsIHRoaXMuaXNIYWxmU3RhcihnbG9iYWxSYXRpbmcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJWaWV3LiRlbC5jaGlsZHJlbignLnN0YXJSYWRpbycpLnByb3AoJ2NoZWNrZWQnLCBzdGFyVmlldy5pbmRleCA9PT0gdGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJykpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBoYW5kbGVSYXRpbmcoc3RhclZhbHVlKSB7XG4gICAgICAgIGxldCBjdXJyZW50UmF0aW5nID0gdGhpcy5tb2RlbC5nZXQoJ3VzZXJTdGFyUmF0aW5nJyk7XG4gICAgICAgIGlmIChzdGFyVmFsdWUgPT09IGN1cnJlbnRSYXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIDApO1xuICAgICAgICAgICAgdGhpcy5zdG9wSG92ZXJSYXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHN0YXJWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCd0aXRsZTphY3Rpb24nLCB7IGFjdGlvbjogJ3JhdGluZycsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICAgIH1cblxuICAgIG9uSG92ZXJSYXRpbmcoc3RhclZhbHVlKSB7XG4gICAgICAgIHRoaXMuaG92ZXJSYXRpbmcgPSBzdGFyVmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgc3RvcEhvdmVyUmF0aW5nKCkge1xuICAgICAgICB0aGlzLmhvdmVyUmF0aW5nID0gMDtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgU3RhclJhdGluZ3NUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvU3RhclZpZXdUZW1wbGF0ZS5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhclZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IFN0YXJSYXRpbmdzVGVtcGxhdGU7XG5cbiAgICBjb25zdHJ1Y3Rvcih7aW5kZXgsIGlzRmlsbGVkID0gZmFsc2UsIGdsb2JhbFJhdGluZywgcmlkfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGlzRmlsbGVkO1xuICAgICAgICB0aGlzLmlzSGFsZkZpbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhYmVsID0gd2luZG93Lmh0bWwoJ3N0YXJSYXRpbmcudXNlclJhdGVkTGFiZWwnLCB7Y3VycmVudFJhdGluZzogdGhpcy5pbmRleH0pO1xuICAgICAgICB0aGlzLmdsb2JhbFJhdGluZyA9IGdsb2JhbFJhdGluZztcbiAgICAgICAgdGhpcy5yaWQgPSByaWQ7XG4gICAgICAgIHRoaXMuJGVsLmFkZENsYXNzKCdzdGFyLWNvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjaGFuZ2UnOiAnb25TZWxlY3RlZCcsXG4gICAgICAgICAgICAnbW91c2VvdmVyIC5pY29uLXN0YXInOiAnb25Ib3ZlcicsXG4gICAgICAgICAgICAnY2xpY2sgLmljb24tc3Rhcic6ICdvblNlbGVjdGVkJyxcbiAgICAgICAgICAgICdmb2N1c2luIC5ub1JhdGUnIDogJ3BzZXVkb0ZvY3VzJyxcbiAgICAgICAgICAgICdmb2N1c291dCAubm9SYXRlJyA6ICdwc2V1ZG9Gb2N1cydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzZXRGaWxsZWQoaXNGaWxsZWQsIGhhbGZGaWxsZWQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoaGFsZkZpbGxlZCl7XG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuaWNvbi1zdGFyJykucmVtb3ZlQ2xhc3MoJ2ZpbGxlZCcpO1xuICAgICAgICAgICAgdGhpcy5pc0ZpbGxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLmlzSGFsZkZpbGxlZCA9IGlzRmlsbGVkO1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tc3RhcicpLnRvZ2dsZUNsYXNzKCdoYWxmRmlsbGVkJywgaXNGaWxsZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kZWwuZmluZCgnLmljb24tc3RhcicpLnJlbW92ZUNsYXNzKCdoYWxmRmlsbGVkJyk7XG4gICAgICAgICAgICB0aGlzLmlzSGFsZkZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmlzRmlsbGVkID0gaXNGaWxsZWQ7XG4gICAgICAgICAgICB0aGlzLiRlbC5maW5kKCcuaWNvbi1zdGFyJykudG9nZ2xlQ2xhc3MoJ2ZpbGxlZCcsIGlzRmlsbGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlcigncmF0ZScsIHRoaXMuaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Ib3ZlcigpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdob3ZlcicsIHRoaXMuaW5kZXgpO1xuICAgIH1cblxuICAgIC8vVXNlZCBmb3IgdGhlIDB0aCAnbm8gcmF0aW5nJyBzdGFyLiBXaGVuIGZvY3VzZWQsIG1ha2UgdGhlIGNvbnRhaW5lciBhcHBlYXIgdG8gaGF2ZSBmb2N1c1xuICAgIHBzZXVkb0ZvY3VzKCkge1xuICAgICAgICB0aGlzLiRlbC5wYXJlbnQoKS50b2dnbGVDbGFzcygncHNldWRvRm9jdXMnKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKS5hcHBlbmQodGhpcy50ZW1wbGF0ZSh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbm9SYXRlVGVtcGxhdGUgPVxuICAgICAgICAgICAgICAgIGA8aW5wdXQgaWQ9J25vUmF0ZS0ke3RoaXMucmlkfScgY2xhc3M9J3N0YXJSYWRpbyBub1JhdGUnIHR5cGU9J3JhZGlvJyB2YWx1ZT0nMCcgbmFtZT0nJHt0aGlzLnJpZH0nIGFyaWEtbGFiZWw9JyR7d2luZG93Lmh0bWwoJ3N0YXJSYXRpbmcucmF0ZWRMYWJlbCcsIHtyYXRpbmc6IHRoaXMuZ2xvYmFsUmF0aW5nfSl9Jy8+YDtcbiAgICAgICAgICAgIHRoaXMuJGVsLmVtcHR5KCkuYXBwZW5kKG5vUmF0ZVRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImNvbnN0IEJhY2tib25lICA9IHdpbmRvdy5CYWNrYm9uZTtcbmNvbnN0IGZlYXR1cmVNYW5hZ2VyICAgICAgICA9IHdpbmRvdy5mZWF0dXJlTWFuYWdlcjtcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IFRpdGxlQXV0aG9yVGVtcGxhdGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL3RlbXBsYXRlcy9UaXRsZUF1dGhvci5odG1sJyksICd1dGY4Jyk7XG5cbmNvbnN0IFRpdGxlQXV0aG9yID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuICAgIHRlbXBsYXRlOiBfLnRlbXBsYXRlKFRpdGxlQXV0aG9yVGVtcGxhdGUpLFxuXG4gICAgY2xhc3NOYW1lOiAndGl0bGUtYXV0aG9yJyxcblxuICAgIHRhZ05hbWU6ICdwJyxcblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkICE9PSAncGVyaW9kaWNhbHMnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5tb2RlbC50b0pTT04oKTtcblxuICAgICAgICBpZiAodGl0bGUuZmlyc3RDcmVhdG9yTmFtZSAhPSBudWxsICYmICFfLmlzRW1wdHkodGl0bGUuZmlyc3RDcmVhdG9yTmFtZSkpIHtcbiAgICAgICAgICAgIGxldCBjcmVhdG9yTmFtZSA9IGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnZml4SHRtbFRhZ3NJbkNvcHknKSA/IHRpdGxlLmZpcnN0Q3JlYXRvck5hbWUgOiBfLmVzY2FwZSh0aXRsZS5maXJzdENyZWF0b3JOYW1lKTtcblxuICAgICAgICAgICAgY29uc3Qgdmlld0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgaHJlZiAgICAgICAgOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMuc2VhcmNoQnlUeXBlLCB7IHR5cGU6ICdjcmVhdG9ySWQnLCBxdWVyeTogdGl0bGUuZmlyc3RDcmVhdG9ySWQsIHNvcnRCeTogJ25ld2x5YWRkZWQnIH0pLFxuICAgICAgICAgICAgICAgIGxhYmVsICAgICAgIDogd2luZG93LnRleHQoJ2NvdmVyLnNlYXJjaEJ5QXV0aG9yJywgeyBhdXRob3I6IGNyZWF0b3JOYW1lIH0pLFxuICAgICAgICAgICAgICAgIHRleHQgICAgICAgIDogY3JlYXRvck5hbWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuJGVsLmh0bWwod2luZG93LnRleHQoJ2J5TGluZScsIHsgY3JlYXRvcjogdGhpcy50ZW1wbGF0ZSh2aWV3RGF0YSkgfSkpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKCFmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ25vLWF1dGhvci1maXgnKSl7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCh3aW5kb3cuaHRtbCgnY292ZXIubm9BdXRob3JBdmFpbGFibGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUF1dGhvcjtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVFZGl0aW9uIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgbm9kZSA9ICQoYDxkaXYgY2xhc3M9XCJ0aXRsZS1lZGl0aW9uXCI+JHt0aGlzLm1vZGVsLmdldCgnZWRpdGlvbicpfTwvZGl2PmApO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnQobm9kZSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFRpdGxlRm9ybWF0QmFkZ2VUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVGb3JtYXRCYWRnZS5odG1sJztcblxuY29uc3QgVGl0bGVGb3JtYXRCYWRnZSA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHtcbiAgICBpbml0aWFsaXplKHt0eXBlSWR9KSB7XG4gICAgICAgIHRoaXMudHlwZUlkID0gdHlwZUlkO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudCgkKFRpdGxlRm9ybWF0QmFkZ2VUZW1wbGF0ZSh7dHlwZUlkOiB0aGlzLnR5cGVJZH0pKSk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlRm9ybWF0QmFkZ2U7XG4iLCJpbXBvcnQgVGl0bGVOYW1lVGVtcGxhdGUgZnJvbSAnLi4vLi4vdGVtcGxhdGVzL1RpdGxlTmFtZS5odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVOYW1lIGV4dGVuZHMgQmFja2JvbmUuVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IFRpdGxlTmFtZVRlbXBsYXRlO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIF9hc3NlbWJsZUxhYmVsKCkge1xuICAgICAgICBsZXQgbGFiZWxQYXJ0cyA9IFtdO1xuXG4gICAgICAgIGxhYmVsUGFydHMucHVzaCh0aGlzLm1vZGVsLmdldCgndGl0bGUnKSk7XG5cbiAgICAgICAgaWYgKCEhdGhpcy5tb2RlbC5nZXQoJ2ZpcnN0Q3JlYXRvck5hbWUnKSkge1xuICAgICAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHdpbmRvdy5odG1sKCdieUxpbmUnLCB7Y3JlYXRvcjogdGhpcy5tb2RlbC5pc01hZ2F6aW5lID8gdGhpcy5tb2RlbC5nZXQoJ3B1Ymxpc2hlcicpLm5hbWUgOiB0aGlzLm1vZGVsLmdldCgnZmlyc3RDcmVhdG9yTmFtZScpfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFiZWxQYXJ0cy5wdXNoKHRoaXMubW9kZWwuYXZhaWxhYmlsaXR5VGV4dCgpKTtcblxuICAgICAgICBsYWJlbFBhcnRzLnB1c2godGhpcy5tb2RlbC5nZXQoJ3R5cGUnKS5uYW1lKTtcblxuICAgICAgICByZXR1cm4gbGFiZWxQYXJ0cy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB2aWV3RGF0YSA9IHtcbiAgICAgICAgICAgIHRpdGxlSWQgICA6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgICAgICBocmVmICAgICAgOiB0aGlzLm1vZGVsLnRpdGxlRGV0YWlsc1VybCxcbiAgICAgICAgICAgIGFyaWFMYWJlbCA6IF8uZXNjYXBlKHRoaXMuX2Fzc2VtYmxlTGFiZWwoKSksXG4gICAgICAgICAgICB0aXRsZSAgICAgOiB0aGlzLm1vZGVsLmdldCgndGl0bGUnKVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KCQodGhpcy50ZW1wbGF0ZSh2aWV3RGF0YSkpKTtcbiAgICB9XG59XG5cbiIsImltcG9ydCBUaXRsZVByZVJlbGVhc2VUZW1wbGF0ZSBmcm9tICcuLi8uLi90ZW1wbGF0ZXMvVGl0bGVQcmVSZWxlYXNlLmh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZVByZVJlbGVhc2UgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3IHtcbiAgICB0ZW1wbGF0ZSA9IFRpdGxlUHJlUmVsZWFzZVRlbXBsYXRlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cbiAgICAgICAgaWYoISF0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KCQodGhpcy50ZW1wbGF0ZSh7ZGF0ZTogdGhpcy5tb2RlbC5nZXQoJ2VzdGltYXRlZFJlbGVhc2VEYXRlJyl9KSkpO1xuICAgIH1cbn1cbiIsImNvbnN0IEJhY2tib25lICAgICAgICAgICAgICA9IHdpbmRvdy5CYWNrYm9uZTtcbmNvbnN0IHVybCAgICAgICAgICAgICAgICAgICA9IHdpbmRvdy51cmw7XG5jb25zdCByb3V0ZXMgICAgICAgICAgICAgICAgPSB3aW5kb3cucm91dGVzO1xuY29uc3Qgd2luZG93VGV4dCAgICAgICAgICAgID0gd2luZG93LnRleHQ7XG5jb25zdCBmZWF0dXJlTWFuYWdlciAgICAgICAgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXI7XG5cbmNvbnN0IFRpdGxlU2VyaWVzID0gQmFja2JvbmUuVmlldy5leHRlbmQoe1xuXG4gICAgaW5pdGlhbGl6ZSh7aGlkZVN1YnRpdGxlfSkge1xuICAgICAgICB0aGlzLnVzZUVuaGFuY2VkU2VyaWVzID0gZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdlbmhhbmNlZFNlcmllcycpICYmICh0eXBlb2YgdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJykgIT09ICd1bmRlZmluZWQnKTtcbiAgICAgICAgdGhpcy5oaWRlU3VidGl0bGUgPSBoaWRlU3VidGl0bGU7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLm1vZGVsLCAndXBkYXRlJywgdGhpcy5yZW5kZXIpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0sXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCBzZWFyY2hQYXJhbXMgPSB0aGlzLnVzZUVuaGFuY2VkU2VyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7dHlwZTogJ3Nlcmllc0lkJywgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdkZXRhaWxlZFNlcmllcycpLnNlcmllc0lkLCBzb3J0Qnk6ICdyZWFkaW5nT3JkZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyB0eXBlOiAnc2VyaWVzJywgcXVlcnk6IHRoaXMubW9kZWwuZ2V0KCdzZXJpZXMnKSwgc29ydEJ5OiAnbmV3bHlhZGRlZCd9O1xuXG5cbiAgICAgICAgbGV0IHN1YnRpdGxlQ29udGFpbnNTZXJpZXMgPSAgdGhpcy5tb2RlbC5nZXQoJ3N1YnRpdGxlJykgJiYgdGhpcy5tb2RlbC5nZXQoJ3N1YnRpdGxlJykuaW5kZXhPZih0aGlzLm1vZGVsLmdldCgnc2VyaWVzJykpID4gLTE7XG5cbiAgICAgICAgbGV0IHNlcmllc1RleHQgPSAnJztcbiAgICAgICAgbGV0IHJhbmtUZXh0ID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlRW5oYW5jZWRTZXJpZXMpe1xuICAgICAgICAgICAgbGV0IGRldGFpbGVkU2VyaWVzID0gdGhpcy5tb2RlbC5nZXQoJ2RldGFpbGVkU2VyaWVzJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlYWRpbmdPcmRlciA9IGRldGFpbGVkU2VyaWVzLnJlYWRpbmdPcmRlcjtcbiAgICAgICAgICAgIGlmIChyZWFkaW5nT3JkZXIpIHtcbiAgICAgICAgICAgICAgICBzZXJpZXNUZXh0ID0gaXNOYU4ocmVhZGluZ09yZGVyKSA/IHdpbmRvdy50ZXh0KCdlbmhhbmNlZFNlcmllc0xpbmtUZXh0Jywge3JlYWRpbmdPcmRlcn0pIDogd2luZG93LnRleHQoJ2VuaGFuY2VkU2VyaWVzTGlua051bWJlcicsIHtyZWFkaW5nT3JkZXJ9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFuayA9IGRldGFpbGVkU2VyaWVzLnJhbms7XG4gICAgICAgICAgICBpZihyYW5rKSB7XG4gICAgICAgICAgICAgICAgcmFua1RleHQgPSB3aW5kb3cudGV4dCgncmFua1RleHQnLCB7cmFua30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJpZXNUZXh0ID0gc3VidGl0bGVDb250YWluc1NlcmllcyAgPyB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKSA6ICh0aGlzLm1vZGVsLmdldCgnc2VyaWVzJykgfHwgJycpO1xuICAgICAgICAgICAgcmFua1RleHQgPSBzdWJ0aXRsZUNvbnRhaW5zU2VyaWVzICA/IHRoaXMubW9kZWwuZ2V0KCdzdWJ0aXRsZScpIDogKHRoaXMubW9kZWwuZ2V0KCdyYW5rJykgfHwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KCd0eXBlJykuaWQgPT09ICdtYWdhemluZScpe1xuICAgICAgICAgICAgc2VhcmNoUGFyYW1zLm1lZGlhVHlwZSA9ICdtYWdhemluZSc7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmlld01vZGVsID0ge1xuICAgICAgICAgICAgaWQgICAgICAgICAgOiB0aGlzLm1vZGVsLmdldCgnaWQnKSxcbiAgICAgICAgICAgIHRpdGxlICAgICAgIDogdGhpcy5tb2RlbC5nZXQoJ3RpdGxlJyksXG4gICAgICAgICAgICBzZXJpZXMgICAgICA6IHNlcmllc1RleHQsXG4gICAgICAgICAgICByYW5rICAgICAgICA6IHJhbmtUZXh0LFxuICAgICAgICAgICAgc3VidGl0bGUgICAgOiB0aGlzLm1vZGVsLmdldCgnc3VidGl0bGUnKSB8fCAnJyxcbiAgICAgICAgICAgIHNlYXJjaFVybCAgIDogdXJsKHJvdXRlcy5zZWFyY2hCeVR5cGUsIHNlYXJjaFBhcmFtcyksXG4gICAgICAgICAgICBsYW5ndWFnZSAgICA6IF8uZmlyc3QodGhpcy5tb2RlbC5nZXQoJ2xhbmd1YWdlcycpIHx8IFsnJ10pLFxuICAgICAgICAgICAgbm9DcmVhdG9ycyA6IF8uaXNFbXB0eSh0aGlzLm1vZGVsLmdldCgnY3JlYXRvcnMnKSlcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgJHRlbXAgPSAkKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhpZGVTdWJ0aXRsZSAmJiAhc3VidGl0bGVDb250YWluc1NlcmllcyAmJiAhXy5pc0VtcHR5KHZpZXdNb2RlbC5zdWJ0aXRsZSkpIHtcbiAgICAgICAgICAgIGxldCAkc3VidGl0bGUgICA9IHRoaXMuX2J1aWxkU3VidGl0bGUodmlld01vZGVsLnN1YnRpdGxlLCB2aWV3TW9kZWwubGFuZ3VhZ2UpO1xuICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCRzdWJ0aXRsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8uaXNFbXB0eSh2aWV3TW9kZWwuc2VyaWVzKSkge1xuICAgICAgICAgICAgaWYodGhpcy5tb2RlbC5pc01hZ2F6aW5lICYmIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZChcIm1hZ2F6aW5lLXJvbGx1cFwiKSl7XG4gICAgICAgICAgICAgICAgbGV0ICRzZXJpZXMgID0gdGhpcy5fYnVpbGRTZXJpZXNUZXh0KHZpZXdNb2RlbC5ub0NyZWF0b3JzLCB2aWV3TW9kZWwuc2VyaWVzKTtcbiAgICAgICAgICAgICAgICAkdGVtcC5hcHBlbmQoJHNlcmllcyk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBsZXQgJHNlcmllcyAgPSB0aGlzLl9idWlsZFNlcmllc0xpbmsodmlld01vZGVsLnNlYXJjaFVybCwgdmlld01vZGVsLm5vQ3JlYXRvcnMsIHZpZXdNb2RlbC5zZXJpZXMpO1xuICAgICAgICAgICAgICAgICR0ZW1wLmFwcGVuZCgkc2VyaWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXy5pc0VtcHR5KHZpZXdNb2RlbC5yYW5rKSAmJiBmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoXCJkaXNwbGF5LXRpdGxlLXJhbmtcIikpIHtcbiAgICAgICAgICAgIGNvbnN0ICRyYW5rID0gdGhpcy5fYnVpbGRSYW5rVGV4dCh2aWV3TW9kZWwubm9DcmVhdG9ycywgdmlld01vZGVsLnJhbmspO1xuICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCRyYW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVsLmh0bWwoJHRlbXApO1xuICAgIH0sXG5cbiAgICBfYnVpbGRSYW5rVGV4dChub0NyZWF0b3JzLCB0ZXh0KXtcbiAgICAgICAgcmV0dXJuICQoJzxwIC8+JywgeyAnY2xhc3MnOiBgc2VyaWVzICR7bm9DcmVhdG9ycyA/ICduby1hdXRob3InIDogJycsIHRleHR9YCwgdGV4dCB9KTtcbiAgICB9LFxuXG4gICAgX2J1aWxkU2VyaWVzVGV4dChub0NyZWF0b3JzLCB0ZXh0KXtcbiAgICAgICAgbGV0ICRlbG0gPSAkKCc8cCAvPicsIHsgJ2NsYXNzJzogYHNlcmllcyAke25vQ3JlYXRvcnMgPyAnbm8tYXV0aG9yJyA6ICcnLCB0ZXh0fWAgfSk7XG4gICAgICAgIHJldHVybiAkZWxtO1xuICAgIH0sXG5cbiAgICBfYnVpbGRTZXJpZXNMaW5rKHNlYXJjaFVybCwgbm9DcmVhdG9ycywgdGV4dCkge1xuXG4gICAgICAgIGxldCAkZWxtID0gJCgnPHAgLz4nLCB7ICdjbGFzcyc6IGBzZXJpZXMgJHtub0NyZWF0b3JzID8gJ25vLWF1dGhvcicgOiAnJ31gIH0pO1xuXG4gICAgICAgIGxldCAkbGluayA9ICQoJzxhIC8+Jywge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB3aW5kb3dUZXh0KCdjb3Zlci5zZWFyY2hCeVNlcmllcycsIHsgc2VyaWVzOiB0ZXh0IH0pLFxuICAgICAgICAgICAgJ2NsYXNzJyAgICAgOiB0aGlzLnVzZUVuaGFuY2VkU2VyaWVzID8gJ3Nlcmllcy1saW5rLWVuaGFuY2VkIHNlY29uZGFyeS1jb2xvcicgOiAnc2VyaWVzLWxpbmsgc2Vjb25kYXJ5LWhvdmVyLXVuZGVybGluZScsXG4gICAgICAgICAgICAnaHJlZicgICAgICA6IHNlYXJjaFVybCxcbiAgICAgICAgICAgICd0aXRsZScgICAgIDogdGV4dCxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsbS5hcHBlbmQoJGxpbmspO1xuXG4gICAgICAgIHJldHVybiAkZWxtO1xuICAgIH0sXG5cbiAgICBfYnVpbGRTdWJ0aXRsZShzdWJ0aXRsZSwgbGFuZ3VhZ2UpIHtcbiAgICAgICAgaWYoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdmaXhIdG1sVGFnc0luQ29weScpKXtcbiAgICAgICAgICAgIHJldHVybiAkKGA8cCBjbGFzcz1cInN1YnRpdGxlXCIgbGFuZz1cIiR7bGFuZ3VhZ2V9XCI+JHtzdWJ0aXRsZX08L3A+YCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuICQoJzxwIC8+Jywge1xuICAgICAgICAgICAgICAgICdjbGFzcycgOiAnc3VidGl0bGUnLFxuICAgICAgICAgICAgICAgICd0ZXh0JyAgOiBzdWJ0aXRsZSxcbiAgICAgICAgICAgICAgICAnbGFuZycgIDogbGFuZ3VhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVGl0bGVTZXJpZXM7XG4iLCJpbXBvcnQgQ29udGV4dE1lbnUgZnJvbSAnLi4vQ29udGV4dE1lbnUnO1xuaW1wb3J0IFRpdGxlQXV0aG9yIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlQXV0aG9yJztcbmltcG9ydCBUaXRsZUVkaXRpb24gZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVFZGl0aW9uJztcbmltcG9ydCBUaXRsZU5hbWUgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVOYW1lJztcbmltcG9ydCBUaXRsZUZvcm1hdEJhZGdlIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlRm9ybWF0QmFkZ2UnO1xuaW1wb3J0IFRpdGxlU2VyaWVzIGZyb20gJy4vVGl0bGVJbmZvL1RpdGxlU2VyaWVzJztcbmltcG9ydCBUaXRsZVByZVJlbGVhc2UgZnJvbSAnLi9UaXRsZUluZm8vVGl0bGVQcmVSZWxlYXNlJztcbmltcG9ydCBTdGFyUmF0aW5nIGZyb20gJy4vVGl0bGVJbmZvL1N0YXJSYXRpbmcnO1xuaW1wb3J0IENvcGllc0F2YWlsYWJsZSBmcm9tICcuL1RpdGxlSW5mby9Db3BpZXNBdmFpbGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZUluZm9MaXN0VmlldyBleHRlbmRzIEJhY2tib25lLlZpZXcge1xuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAndGl0bGUtaW5mbyc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX3ZpZXdzID0gW107XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBfcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdzLmZvckVhY2goKHZpZXcpID0+IHZpZXcucmVtb3ZlKCkpO1xuICAgICAgICB0aGlzLl92aWV3cyA9IFtdO1xuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLl9yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy5jb250ZXh0TWVudSA9IG5ldyBDb250ZXh0TWVudSh7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmlzTWFnYXppbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMudGl0bGVFZGl0aW9uID0gbmV3IFRpdGxlRWRpdGlvbih7IG1vZGVsOiB0aGlzLm1vZGVsIH0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAgICAgKHRoaXMudGl0bGVBdXRob3IgPSBuZXcgVGl0bGVBdXRob3IoeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlTmFtZSA9IG5ldyBUaXRsZU5hbWUoeyBtb2RlbDogdGhpcy5tb2RlbCB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICh0aGlzLnRpdGxlU2VyaWVzID0gbmV3IFRpdGxlU2VyaWVzKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZUZvcm1hdEJhZGUgPSBuZXcgVGl0bGVGb3JtYXRCYWRnZSh7XG4gICAgICAgICAgICAgICAgdHlwZUlkOiB0aGlzLm1vZGVsLmdldCgndHlwZScpLmlkLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy50aXRsZVByZVJlbGVhc2UgPSBuZXcgVGl0bGVQcmVSZWxlYXNlKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdzLnB1c2goXG4gICAgICAgICAgICAodGhpcy5jb3BpZXNBdmFpbGFibGUgPSBuZXcgQ29waWVzQXZhaWxhYmxlKHsgbW9kZWw6IHRoaXMubW9kZWwgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaGlkZVN0YXJSYXRpbmcgPVxuICAgICAgICAgICAgKHdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ21hZ2F6aW5lLXJvbGx1cCcpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pc01hZ2F6aW5lKSB8fFxuICAgICAgICAgICAgIXdpbmRvdy5mZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ3Nob3ctc3Rhci1yYXRpbmdzJyk7XG5cbiAgICAgICAgaWYgKCFoaWRlU3RhclJhdGluZykge1xuICAgICAgICAgICAgdGhpcy5fdmlld3MucHVzaChcbiAgICAgICAgICAgICAgICAodGhpcy5zdGFyUmF0aW5nID0gbmV3IFN0YXJSYXRpbmcoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZWw6ICQoJzxkaXYgLz4nLCB7IGNsYXNzOiAnc3Rhci1yYXRpbmcgbGlzdC12aWV3JyB9KSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2VkaXRhYmxlJyxcbiAgICAgICAgICAgICAgICB9KS5yZW5kZXIoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5lbXB0eSgpO1xuICAgICAgICB0aGlzLiRlbC5hcHBlbmQoXG4gICAgICAgICAgICB0aGlzLnRpdGxlTmFtZS4kZWwsXG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LiRlbC5hZGRDbGFzcygndGV4dC1yaWdodCcpLFxuICAgICAgICAgICAgdGhpcy50aXRsZVNlcmllcy4kZWwsXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmlzTWFnYXppbmVcbiAgICAgICAgICAgICAgICA/IHRoaXMudGl0bGVFZGl0aW9uLiRlbFxuICAgICAgICAgICAgICAgIDogdGhpcy50aXRsZUF1dGhvci4kZWwsXG4gICAgICAgICAgICB0aGlzLnRpdGxlRm9ybWF0QmFkZS4kZWxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoISF0aGlzLm1vZGVsLmdldCgnaXNQcmVSZWxlYXNlVGl0bGUnKSkge1xuICAgICAgICAgICAgdGhpcy4kZWwuYXBwZW5kKHRoaXMudGl0bGVQcmVSZWxlYXNlLiRlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWhpZGVTdGFyUmF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLiRlbC5hcHBlbmQodGhpcy5zdGFyUmF0aW5nLiRlbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlbC5hcHBlbmQodGhpcy5jb3BpZXNBdmFpbGFibGUuJGVsKTtcbiAgICB9XG59XG4iLCIvLyBpbXBvcnQgd2hlbiB3ZSBtb3ZlIG1vcmUgdG8gbW9kdWxlc1xuZXhwb3J0IGRlZmF1bHQgd2luZG93LkJhY2tib25lLk1vZGVsO1xuIiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tICcuLi9tb2RlbHMvYmFzZSc7XG5cbmNvbnN0IFBhdHJvbk1lZGlhSXRlbXNNb2RlbCA9IEJhc2VNb2RlbC5leHRlbmQoe1xuICAgIHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5tZWRpYUluZm8pO1xuICAgIH0sXG5cbiAgICBpbml0aWFsaXplKHt0aXRsZXN9KSB7XG4gICAgICAgIHRoaXMubWVkaWFJdGVtcyA9IHRpdGxlcyB8fCB3aW5kb3cuT3ZlckRyaXZlLnRpdGxlQ29sbGVjdGlvbiB8fCB7fTtcbiAgICAgICAgdGhpcy5pdGVtc09uUGFnZSA9IF8ubWFwKF8ucGx1Y2sodGhpcy5tZWRpYUl0ZW1zLCAnaWQnKSwgTnVtYmVyKTtcbiAgICB9LFxuXG4gICAgaW5pdGlhbEZldGNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmZldGNoKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7dGl0bGVJZHM6IHRoaXMuaXRlbXNPblBhZ2V9KSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogeydjc3JmLXRva2VuJzogJCgnI2NzcmYnKS52YWwoKSB8fCBPdmVyRHJpdmUuX2NzcmZ9fSlcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGF0cm9uTWVkaWFJdGVtc01vZGVsO1xuIiwiaW1wb3J0IHJmYzM5ODZFbmNvZGVVUklDb21wb25lbnQgZnJvbSAnLi4vLi4vdXRpbC9lbmNvZGluZy9yZmMzOTg2RW5jb2RlVVJJQ29tcG9uZW50LmpzJztcbmltcG9ydCBGYWNldHNNb2RlbCBmcm9tICcuL2ZhY2V0c19tb2RlbCc7XG4vKipcbiAqIENvbnRyb2xsZXIgbG9naWMgZm9yIGZhY2V0c1xuICogQHNlZSBqcy9wdWJsaWMvZmFjZXRlZC1tZWRpYS5qc1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZhY2V0c0NvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLlNIT1dfT05MWV9BVkFJTEFCTEUgPSAnc2hvd09ubHlBdmFpbGFibGUnO1xuICAgICAgICB0aGlzLlNIT1dfT05MWV9QUkVSRUxFQVNFID0gJ3Nob3dPbmx5UHJlcmVsZWFzZSc7XG4gICAgICAgIHRoaXMuQURERURfREFURSA9ICdhZGRlZERhdGUnO1xuICAgICAgICB0aGlzLlJFTU9WRV9GSUxURVIgPSAncmVtb3ZlRmlsdGVyJztcbiAgICAgICAgdGhpcy5IQVNfQVVESU9fU1lOQ0hST05JWkVEX1RFWFQgPSAnaGFzQXVkaW9TeW5jaHJvbml6ZWRUZXh0JztcbiAgICAgICAgdGhpcy5TVUJKRUNUID0gJ3N1YmplY3QnO1xuICAgICAgICB0aGlzLkZPUk1BVCA9ICdmb3JtYXQnO1xuICAgICAgICB0aGlzLk1BVFVSSVRZX0xFVkVMID0gJ21hdHVyaXR5TGV2ZWwnO1xuICAgICAgICB0aGlzLkxBTkdVQUdFID0gJ2xhbmd1YWdlJztcbiAgICAgICAgdGhpcy5QQUdFID0gJ3BhZ2UnO1xuICAgICAgICB0aGlzLlNPUlRfQlkgPSAnc29ydEJ5JztcbiAgICAgICAgdGhpcy5FQk9PS19PVkVSRFJJVkVfUkVBREFMT05HID0gJ2Vib29rLW92ZXJkcml2ZS1yZWFkYWxvbmcnO1xuICAgICAgICB0aGlzLlRSVUUgPSAndHJ1ZSc7XG4gICAgICAgIHRoaXMuSU5URVJFU1RfTEVWRUxTID0gJ2ludGVyZXN0TGV2ZWxzJztcbiAgICAgICAgdGhpcy5HUkFERV9MRVZFTFMgPSAnZ3JhZGVMZXZlbHMnO1xuICAgICAgICB0aGlzLkFUT1NfTEVWRUxTID0gJ2F0b3NMZXZlbHMnO1xuICAgICAgICB0aGlzLkxFWElMRV9TQ09SRVMgPSAnbGV4aWxlU2NvcmVzJztcbiAgICAgICAgY29uc3QgU0lOR0xFX0ZBQ0VUUyA9IFtcbiAgICAgICAgICAgIC8vIHNpbmdsZSBrZXktdmFsdWUgcGFpciBmYWNldHNcbiAgICAgICAgICAgIHRoaXMuU0hPV19PTkxZX0FWQUlMQUJMRSxcbiAgICAgICAgICAgIHRoaXMuU0hPV19PTkxZX1BSRVJFTEVBU0UsXG4gICAgICAgICAgICB0aGlzLkFEREVEX0RBVEUsXG4gICAgICAgICAgICB0aGlzLlJFTU9WRV9GSUxURVIsXG4gICAgICAgICAgICB0aGlzLkhBU19BVURJT19TWU5DSFJPTklaRURfVEVYVCxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgTVVMVElfRkFDRVRTID0gW1xuICAgICAgICAgICAgLy8gbXVsdGlwbGUgdmFsdWVzIGZvciBlYWNoIG5hbWUgZmFjZXRzXG4gICAgICAgICAgICB0aGlzLlNVQkpFQ1QsXG4gICAgICAgICAgICB0aGlzLkZPUk1BVCxcbiAgICAgICAgICAgIHRoaXMuTUFUVVJJVFlfTEVWRUwsXG4gICAgICAgICAgICB0aGlzLkxBTkdVQUdFLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBSQU5HRV9GQUNFVFMgPSBbXG4gICAgICAgICAgICB0aGlzLklOVEVSRVNUX0xFVkVMUyxcbiAgICAgICAgICAgIHRoaXMuR1JBREVfTEVWRUxTLFxuICAgICAgICAgICAgdGhpcy5BVE9TX0xFVkVMUyxcbiAgICAgICAgICAgIHRoaXMuTEVYSUxFX1NDT1JFUyxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwgPSBuZXcgRmFjZXRzTW9kZWwoXG4gICAgICAgICAgICBTSU5HTEVfRkFDRVRTLFxuICAgICAgICAgICAgTVVMVElfRkFDRVRTLFxuICAgICAgICAgICAgUkFOR0VfRkFDRVRTXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvdW50IG9mIHRoZSBmYWNldHMgZnJvbSB0aGUgbW9kZWxcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBjb3VudEZhY2V0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhY2V0c01vZGVsLmNvdW50RmFjZXRzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGEgZmFjZXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZWxlbSBTZWxlY3RvciBzdHJpbmcgZm9yIGZhY2V0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBzZWxlY3QoZWxlbSkge1xuICAgICAgICAvLyBQcmV2ZW50IGFscmVhZHkgYWN0aXZlIGZhY2V0cyBmcm9tIGJlaW5nIGZvbGxvd2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEkKGVsZW0pLmhhc0NsYXNzKCdqcy1hY3RpdmUnKSAmJlxuICAgICAgICAgICAgISQoZWxlbSkuaGFzQ2xhc3MoJ2pzLWRpc2FibGVkJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5kZWxldGVPdGhlclBhcmFtKHRoaXMuUEFHRSk7XG4gICAgICAgICAgICBpZiAoJChlbGVtKS5kYXRhKCdmYWNldCcpID09PSAnbmFycmF0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnNldEZhY2V0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkhBU19BVURJT19TWU5DSFJPTklaRURfVEVYVCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5UUlVFXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFjZXQgPSAkKGVsZW0pLmF0dHIoJ2RhdGEtZmFjZXQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9ICQoZWxlbSkuYXR0cignZGF0YS1pZCcpO1xuICAgICAgICAgICAgICAgIGlmIChmYWNldCA9PT0gJ2F2YWlsYWJsZS1ub3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnNldEZhY2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TSE9XX09OTFlfQVZBSUxBQkxFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5UUlVFXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnVuc2V0RmFjZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNIT1dfT05MWV9QUkVSRUxFQVNFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5UUlVFXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmYWNldCA9PT0gJ2FsbC10aXRsZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnVuc2V0RmFjZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNIT1dfT05MWV9BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRSVUVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwudW5zZXRGYWNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU0hPV19PTkxZX1BSRVJFTEVBU0UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRSVUVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZhY2V0ID09PSAncHJlcmVsZWFzZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwuc2V0RmFjZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNIT1dfT05MWV9QUkVSRUxFQVNFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5UUlVFXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnVuc2V0RmFjZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNIT1dfT05MWV9BVkFJTEFCTEUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRSVUVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZhY2V0ID09PSB0aGlzLlNVQkpFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwuc2V0RmFjZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNVQkpFQ1QsXG4gICAgICAgICAgICAgICAgICAgICAgICByZmMzOTg2RW5jb2RlVVJJQ29tcG9uZW50KGlkKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFjZXQgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5zZXRGYWNldCh0aGlzLkFEREVEX0RBVEUsIGlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZhY2V0ID09PSAnbWF0dXJpdHknKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnNldEZhY2V0KHRoaXMuTUFUVVJJVFlfTEVWRUwsIGlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkZPUk1BVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTEFOR1VBR0UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLklOVEVSRVNUX0xFVkVMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuR1JBREVfTEVWRUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5BVE9TX0xFVkVMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTEVYSUxFX1NDT1JFUyxcbiAgICAgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhmYWNldClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwuc2V0RmFjZXQoZmFjZXQsIGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2ZhY2V0c01vZGVsLmhhc090aGVyUGFyYW0odGhpcy5TT1JUX0JZKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnNldE90aGVyUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU09SVF9CWSxcbiAgICAgICAgICAgICAgICAgICAgJCgnLmpzLXNlYXJjaFNvcnRCeU9wdGlvbnMnKS52YWwoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5lbmRUcmFuc2FjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBhY3RpdmUgZmFjZXRzXG4gICAgICovXG4gICAgcmVtb3ZlQWxsKCkge1xuICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLmRlbGV0ZU90aGVyUGFyYW0odGhpcy5QQUdFKTtcbiAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwudW5zZXRBbGxGYWNldHMoKTtcbiAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwuZW5kVHJhbnNhY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGByZW1vdmVGaWx0ZXJgIHBhcmFtIGZvciByb29tc1xuICAgICAqL1xuICAgIHJlc3RvcmVSb29tRmlsdGVyKGZpbHRlcikge1xuICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnVuc2V0RmFjZXQodGhpcy5SRU1PVkVfRklMVEVSLCBmaWx0ZXIpO1xuICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5kZWxldGVPdGhlclBhcmFtKHRoaXMuUEFHRSk7XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLmVuZFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGFjdGl2ZSBmYWNldFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlbGVtIFNlbGVjdG9yIHN0cmluZyBmb3IgZmFjZXQgZWxlbWVudFxuICAgICAqL1xuICAgIHJlbW92ZShlbGVtKSB7XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgY29uc3QgZmlsdGVySWQgPSAkKGVsZW0pLmF0dHIoJ2RhdGEtZmlsdGVyLWlkJykuc3BsaXQoJywnKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRmFjZXQgPSAkKGVsZW0pLmF0dHIoJ2RhdGEtZmlsdGVyLWZhY2V0Jyk7XG4gICAgICAgIC8vIFNldCBwYWdlIGJhY2sgdG8gMSB3aGVuIGEgZmFjZXQgaXMgcmVtb3ZlZFxuICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5kZWxldGVPdGhlclBhcmFtKHRoaXMuUEFHRSk7XG4gICAgICAgIGZvciAobGV0IGlkIG9mIGZpbHRlcklkKSB7XG4gICAgICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC51bnNldEZhY2V0KFxuICAgICAgICAgICAgICAgIGZpbHRlckZhY2V0LFxuICAgICAgICAgICAgICAgIHJmYzM5ODZFbmNvZGVVUklDb21wb25lbnQoaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZpbHRlckZhY2V0ID09PSB0aGlzLkhBU19BVURJT19TWU5DSFJPTklaRURfVEVYVCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnVuc2V0RmFjZXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuRk9STUFULFxuICAgICAgICAgICAgICAgICAgICB0aGlzLkVCT09LX09WRVJEUklWRV9SRUFEQUxPTkdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLmVuZFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgcm9vbSBmaWx0ZXJcbiAgICAgKiBSZXF1aXJlcyBhZGRpbmcgYW5vdGhlciBxdWVyeSBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgd2hpY2ggZmlsdGVyIHRvIGlnbm9yZVxuICAgICAqL1xuICAgIHJlbW92ZVJvb21GaWx0ZXIoZWxlbSkge1xuICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IGZpbHRlckZhY2V0ID0gZWxlbS5kYXRhKCdmaWx0ZXItZmFjZXQnKTtcbiAgICAgICAgY29uc3QgZmlsdGVySWQgPSBlbGVtLmRhdGEoJ2ZpbHRlci1pZCcpO1xuICAgICAgICB0aGlzLl9mYWNldHNNb2RlbC5kZWxldGVPdGhlclBhcmFtKHRoaXMuUEFHRSk7XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLnVuc2V0RmFjZXQoZmlsdGVyRmFjZXQsIGZpbHRlcklkKTtcbiAgICAgICAgdGhpcy5fZmFjZXRzTW9kZWwuc2V0RmFjZXQoXG4gICAgICAgICAgICB0aGlzLlJFTU9WRV9GSUxURVIsXG4gICAgICAgICAgICBgJHtmaWx0ZXJGYWNldH0tJHtmaWx0ZXJJZH1gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ZhY2V0c01vZGVsLmVuZFRyYW5zYWN0aW9uKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbi8qKlxuICogTW9kZWwgbG9naWMgZm9yIGZhY2V0c1xuICogQHNlZSBqcy9wdWJsaWMvZmFjZXRlZC1tZWRpYS5qc1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZhY2V0c01vZGVsIHtcbiAgICBjb25zdHJ1Y3RvcihzaW5nbGVGYWNldHMsIG11bHRpRmFjZXRzLCByYW5nZUZhY2V0cykge1xuICAgICAgICB0aGlzLl9wYXJhbXMgPVxuICAgICAgICAgICAgcXVlcnlzdHJpbmcucGFyc2Uod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSkpIHx8IHt9O1xuICAgICAgICB0aGlzLl9zaW5nbGVGYWNldHMgPSBzaW5nbGVGYWNldHM7IC8vIHNpbmdsZSBrZXktdmFsdWUgcGFpciBmYWNldHNcbiAgICAgICAgdGhpcy5fbXVsdGlGYWNldHMgPSBtdWx0aUZhY2V0czsgLy8gbXVsdGlwbGUgdmFsdWVzIGZvciBlYWNoIG5hbWUgZmFjZXRzXG4gICAgICAgIHRoaXMuX3JhbmdlRmFjZXRzID0gcmFuZ2VGYWNldHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgc3RvcmVkIHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICBiZWdpblRyYW5zYWN0aW9uKCkge1xuICAgICAgICB0aGlzLl9wYXJhbXMgPVxuICAgICAgICAgICAgcXVlcnlzdHJpbmcucGFyc2Uod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSkpIHx8IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbG9hZHMgdGhlIHBhZ2Ugd2l0aCB0aGUgbmV3IHF1ZXJ5IHN0cmluZ1xuICAgICAqL1xuICAgIGVuZFRyYW5zYWN0aW9uKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhIXdpbmRvdy5PdmVyRHJpdmUudGl0bGVDb2xsZWN0aW9uICYmXG4gICAgICAgICAgICAhIXdpbmRvdy5PdmVyRHJpdmUudGl0bGVDb2xsZWN0aW9uLm1heEl0ZW1zICYmXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLnRpdGxlQ29sbGVjdGlvbi5tYXhJdGVtcyA8IDIxNDc0ODM2NDcgJiZcbiAgICAgICAgICAgICEhd2luZG93Lk92ZXJEcml2ZS50aXRsZUNvbGxlY3Rpb24uYnJlYWtwb2ludFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmFtcy5icmVha3BvaW50ID1cbiAgICAgICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLnRpdGxlQ29sbGVjdGlvbi5icmVha3BvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fcGFyYW1zLmZvcm1hdCAmJlxuICAgICAgICAgICAgdGhpcy5fcGFyYW1zLmZvcm1hdC5pbmNsdWRlcygnYXVkaW9ib29rLW92ZXJkcml2ZScpICYmXG4gICAgICAgICAgICAhdGhpcy5fcGFyYW1zLmZvcm1hdC5pbmNsdWRlcygnYXVkaW9ib29rLW92ZXJkcml2ZS1wcm92aXNpb25hbCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgYXVkaW9ib29rSW5kZXggPSB0aGlzLl9wYXJhbXMuZm9ybWF0LmluZGV4T2YoXG4gICAgICAgICAgICAgICAgJ2F1ZGlvYm9vay1vdmVyZHJpdmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fcGFyYW1zLmZvcm1hdFthdWRpb2Jvb2tJbmRleF0gPVxuICAgICAgICAgICAgICAgICdhdWRpb2Jvb2stb3ZlcmRyaXZlLGF1ZGlvYm9vay1vdmVyZHJpdmUtcHJvdmlzaW9uYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHFzID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMuX3BhcmFtcyk7XG5cbiAgICAgICAgcXMgPSBxcy5sZW5ndGggPiAwID8gYD8ke3FzfWAgOiBxcztcblxuICAgICAgICB3aW5kb3cubG9jYXRpb24uc2VhcmNoID0gcXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGZhY2V0IHdpdGggYSBuYW1lL3ZhbHVlIHBhaXJcbiAgICAgKiBAcGFyYW0gbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSB2YWx1ZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNldEZhY2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9tdWx0aUZhY2V0cy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbXNbbmFtZV0gPSBbdmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLl9wYXJhbXNbbmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgaXQgd2FzIHRoZXJlIG9ubHkgb25jZSBpdCBpcyBhIHN0cmluZ1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtc1tuYW1lXSA9IFt0aGlzLl9wYXJhbXNbbmFtZV0sIHZhbHVlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyYW1zW25hbWVdLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NpbmdsZUZhY2V0cy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fcGFyYW1zW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmFuZ2VGYWNldHMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IG5hbWUgKyAnTWluJztcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IG5hbWUgKyAnTWF4JztcbiAgICAgICAgICAgIHRoaXMuX3BhcmFtc1ttaW5dID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9wYXJhbXNbbWF4XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZXRzIGEgZmFjZXQgd2l0aCBhIG5hbWUvdmFsdWUgcGFpclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBmYWNldFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAob3B0aW9uYWwpIGlmIHVuZGVmaW5lZCBhbGwgZWxlbWVudHMgd2l0aCB0aGUgbmFtZSB3aWxsIGJlIGRlbGV0ZWRcbiAgICAgKi9cbiAgICB1bnNldEZhY2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9yYW5nZUZhY2V0cy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgY29uc3QgbWluID0gbmFtZSArICdNaW4nO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gbmFtZSArICdNYXgnO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3BhcmFtc1ttaW5dO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3BhcmFtc1ttYXhdO1xuICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZSB8fCB0aGlzLl9zaW5nbGVGYWNldHMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJhbXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbXVsdGlGYWNldHMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbXNbbmFtZV0gJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9wYXJhbXNbbmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyYW1zW25hbWVdLnNwbGljZSh0aGlzLl9wYXJhbXNbbmFtZV0uaW5kZXhPZih2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbXNbbmFtZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJhbXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcGFyYW1zW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhbGwgZmFjZXRzXG4gICAgICovXG4gICAgdW5zZXRBbGxGYWNldHMoKSB7XG4gICAgICAgIF8uZWFjaCh0aGlzLl9zaW5nbGVGYWNldHMsIChmYWNldCkgPT4ge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBmYWNldDtcbiAgICAgICAgICAgIHRoaXMudW5zZXRGYWNldChuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIF8uZWFjaCh0aGlzLl9tdWx0aUZhY2V0cywgKGZhY2V0KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGZhY2V0O1xuICAgICAgICAgICAgdGhpcy51bnNldEZhY2V0KG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgXy5lYWNoKHRoaXMuX3JhbmdlRmFjZXRzLCAoZmFjZXQpID0+IHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gZmFjZXQ7XG4gICAgICAgICAgICB0aGlzLnVuc2V0RmFjZXQobmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBwYXJhbWV0ZXIgdGhhdCBpcyBub3QgYSBmYWNldFxuICAgICAqIEBwYXJhbSBuYW1lIHtzdHJpbmd9XG4gICAgICovXG4gICAgZGVsZXRlT3RoZXJQYXJhbShuYW1lKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLl9zaW5nbGVGYWNldHMuaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICAgICAgICF0aGlzLl9tdWx0aUZhY2V0cy5pbmNsdWRlcyhuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wYXJhbXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcGFyYW1ldGVyIHRoYXQgaXMgbm90IGEgZmFjZXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmFjZXQgdG8gc2V0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIHRoZSBmYWNldCdzIHZhbHVlXG4gICAgICovXG4gICAgc2V0T3RoZXJQYXJhbShuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5fc2luZ2xlRmFjZXRzLmluY2x1ZGVzKG5hbWUpICYmXG4gICAgICAgICAgICAhdGhpcy5fbXVsdGlGYWNldHMuaW5jbHVkZXMobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJhbXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBmb3IgYSBwYXJhbWV0ZXIgdGhhdCBpcyBub3QgYSBmYWNldFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHBhcmFtZXRlciBleGlzdHMgYW5kIGl0IGlzIG5vdCBhIGZhY2V0XG4gICAgICovXG4gICAgaGFzT3RoZXJQYXJhbShuYW1lKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLl9zaW5nbGVGYWNldHMuaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICAgICAgICF0aGlzLl9tdWx0aUZhY2V0cy5pbmNsdWRlcyhuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX3BhcmFtc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnRzIHRoZSBmYWNldHMgZm9yIHVzZSBieSB0aGUgY2xlYXIgYWxsIGJ1dHRvbiB0byBrbm93IGlmIHRoZXJlIGFyZSBsb3plbmdlc1xuICAgICAqIHRoYXQgYXJlIGNsZWFyYWJsZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBudW1iZXIgb2YgZmFjZXRzXG4gICAgICovXG4gICAgY291bnRGYWNldHMoKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGZhY2V0IG9mIHRoaXMuX3NpbmdsZUZhY2V0cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmFtc1tmYWNldF0pIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGZhY2V0IG9mIHRoaXMuX3JhbmdlRmFjZXRzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyYW1zW2ZhY2V0ICsgJ01pbiddIHx8IHRoaXMuX3BhcmFtc1tmYWNldCArICdNYXgnXSkge1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgZmFjZXQgb2YgdGhpcy5fbXVsdGlGYWNldHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbXNbZmFjZXRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fcGFyYW1zW2ZhY2V0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gdGhpcy5fcGFyYW1zW2ZhY2V0XS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cbn1cbiIsImltcG9ydCBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uIGZyb20gJy4uL3V0aWwvdGl0bGUtYWN0aW9ucy9wcm9jZXNzRm9yd2FyZGVkQWN0aW9uJztcbmltcG9ydCBQYXRyb25NZWRpYUl0ZW1zTW9kZWwgZnJvbSAnLi4vbW9kZWxzL3BhdHJvbl9tZWRpYV9pdGVtcyc7XG5pbXBvcnQgSGFzaE1hbmFnZXIgZnJvbSAnLi4vY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXInO1xuXG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlQ29sbGVjdGlvbic7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uVmlldyBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL1RpdGxlQ29sbGVjdGlvblZpZXcnO1xuaW1wb3J0IFRpdGxlQ2FyZCBmcm9tICcuLi9jb21wb25lbnRzL21lZGlhL1RpdGxlQ2FyZCc7XG5pbXBvcnQgVGl0bGVDYXJkTGlzdFZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9tZWRpYS9UaXRsZUNhcmRMaXN0Vmlldyc7XG5pbXBvcnQgVGl0bGVDb2xsZWN0aW9uVmlld1NlbGVjdG9yIGZyb20gJy4uL2NvbXBvbmVudHMvbWVkaWEvdmlld3MvVGl0bGVDb2xsZWN0aW9uVmlld1NlbGVjdG9yJztcblxuaW1wb3J0IFBhZ2VNYW5hZ2VyIGZyb20gJy4uL2NvbXBvbmVudHMvY29sbGVjdGlvbl9jYW1wYWlnbl9wYWdlL1BhZ2VNYW5hZ2VyJztcblxuY29uc3QgeyBMb2dnZXIgfSA9IHdpbmRvdztcbmNvbnN0IHsgY3VycmVudFJvb20gfSA9IHdpbmRvdy5PdmVyRHJpdmU7XG5cbmNsYXNzIFNlYXJjaCB7XG4gICAgY29uc3RydWN0b3IoeyBidXMsIHJvb20sIGNvbGxlY3Rpb25EZWZpbml0aW9uIH0pIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMucm9vbSA9IHJvb207XG4gICAgICAgIHRoaXMuY29sbGVjdGlvbkRlZmluaXRpb24gPSBjb2xsZWN0aW9uRGVmaW5pdGlvbjtcblxuICAgICAgICB0aGlzLiRyZXN1bHRzQ29udGFpbmVyID0gJCgnLmpzLW1lZGlhLXJlc3VsdHMnKTtcblxuICAgICAgICB0aGlzLnZpZXdTdGF0ZSA9IG5ldyBUaXRsZUNvbGxlY3Rpb25WaWV3U2VsZWN0b3Ioe1xuICAgICAgICAgICAgZWw6ICcuU2VhcmNoVmlld09wdGlvbnMnLFxuICAgICAgICAgICAgYnVzOiB0aGlzLmJ1cyxcbiAgICAgICAgfSkubW9kZWw7XG4gICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uID0gbmV3IFRpdGxlQ29sbGVjdGlvbih0aGlzLnRpdGxlcyk7XG5cbiAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb25WaWV3ID0gbmV3IFRpdGxlQ29sbGVjdGlvblZpZXcoe1xuICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcy50aXRsZUNvbGxlY3Rpb24sXG4gICAgICAgICAgICBidXM6IHRoaXMuYnVzLFxuICAgICAgICAgICAgcGF0cm9uTWVkaWFJdGVtc01vZGVsOiBuZXcgUGF0cm9uTWVkaWFJdGVtc01vZGVsKHtcbiAgICAgICAgICAgICAgICB0aXRsZXM6IHRoaXMudGl0bGVzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBWaWV3OiB0aGlzLmNvbGxlY3Rpb25WaWV3LFxuICAgICAgICAgICAgY292ZXJXaWR0aHM6IHRoaXMuY292ZXJXaWR0aHMsXG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgcm9vbTogdGhpcy5yb29tLFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uOiB0aGlzLmNvbGxlY3Rpb25EZWZpbml0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52aWV3U3RhdGUub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldy5WaWV3ID0gdGhpcy5jb2xsZWN0aW9uVmlldztcbiAgICAgICAgICAgIHRoaXMudGl0bGVDb2xsZWN0aW9uVmlldy5hdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb25WaWV3LmNvdmVyU2l6ZXMgPSB0aGlzLmNvdmVyV2lkdGhzO1xuICAgICAgICAgICAgdGhpcy50aXRsZUNvbGxlY3Rpb25WaWV3LnJlbmRlcigpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhhbmRsZWRGb3J3YXJkZWRBY3Rpb24gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIGdldCBhdHRyaWJ1dGVzKCkge1xuICAgICAgICBsZXQgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIGNsYXNzOiAnanMtdGl0bGUtY29sbGVjdGlvbi12aWV3IGxhcmdlLWJsb2NrLWdyaWQtNCBtZWRpdW0tYmxvY2stZ3JpZC00IHNtYWxsLWJsb2NrLWdyaWQtMicsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudmlld1N0YXRlLmdldCgndmlldycpID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuY2xhc3MgPSAnanMtdGl0bGUtY29sbGVjdGlvbi12aWV3IGxpc3Qtdmlldy11bCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBnZXQgY292ZXJXaWR0aHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdTdGF0ZS5nZXQoJ3ZpZXcnKSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtb2JpbGU6IDEyMCwgdGFibGV0OiAxNjAsIGRlc2t0b3A6IDE2MCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1vYmlsZTogMjIwLCB0YWJsZXQ6IDIyMCwgZGVza3RvcDogMjIwIH07XG4gICAgfVxuXG4gICAgZ2V0IGNvbGxlY3Rpb25WaWV3KCkge1xuICAgICAgICBsZXQgVmlldztcblxuICAgICAgICBpZiAodGhpcy52aWV3U3RhdGUuZ2V0KCd2aWV3JykgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgVmlldyA9IFRpdGxlQ2FyZExpc3RWaWV3O1xuICAgICAgICAgICAgdGhpcy4kcmVzdWx0c0NvbnRhaW5lclxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnZ3JpZC12aWV3JylcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2xpc3QtdmlldycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVmlldyA9IFRpdGxlQ2FyZDtcbiAgICAgICAgICAgIHRoaXMuJHJlc3VsdHNDb250YWluZXJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2xpc3QtdmlldycpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdncmlkLXZpZXcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBWaWV3O1xuICAgIH1cblxuICAgIGdldCB0aXRsZXMoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuT3ZlckRyaXZlLnRpdGxlQ29sbGVjdGlvbjsgLy8gVGhlIHNvdXJjZSBvZiBkYXRhIGhlcmUgaXMgc3ViamVjdCB0byBjaGFuZ2VcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgICQoJy5qcy1tZWRpYS1yZXN1bHRzJykucHJlcGVuZCh0aGlzLnRpdGxlQ29sbGVjdGlvblZpZXcuJGVsKTtcblxuICAgICAgICAvLy8gJChkb2N1bWVudCkuZm91bmRhdGlvbigpO1xuXG4gICAgICAgIC8vIFRoaXMgZXZlbnQgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgc2VhcmNoIHBhZ2UgaXMgZnVsbHkgZG9uZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyBzdHJhdGVneSB3aGVuIHNlYXJjaCBwYWdlIGlzIGZ1bGx5IGNvbXBvbmVudGl6ZWQuXG4gICAgICAgIC8vIFNsYWNrIHJlZmVyZW5jZTogaHR0cHM6Ly9vdmVyZHJpdmUuc2xhY2suY29tL2FyY2hpdmVzL2xpZ2h0bmluZy1kZXYvcDE0ODgzODEyMjYwMDAyMjdcbiAgICAgICAgd2luZG93Lmdsb2JhbEV2ZW50cy50cmlnZ2VyKCdzZWFyY2g6cmVuZGVyJyk7XG5cbiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3IgcmVuZGVyKCkgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGluIHNvbWUgc2l0dWF0aW9ucy4gIFdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciB0aGUgYWN0aW9uIHR3aWNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB3aW5kb3cuT3ZlckRyaXZlLmlzQXV0aGVudGljYXRlZCAmJlxuICAgICAgICAgICAgd2luZG93Lk92ZXJEcml2ZS5oYXNMaW5rZWRDYXJkcyAmJlxuICAgICAgICAgICAgSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKSAmJlxuICAgICAgICAgICAgdGhpcy5oYW5kbGVkRm9yd2FyZGVkQWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVkRm9yd2FyZGVkQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBmb3J3YXJkZWRBY3Rpb24gPSBuZXcgUHJvY2Vzc0ZvcndhcmRlZEFjdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLnRpdGxlQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvcndhcmRlZEFjdGlvbi5leGVjdXRlQWN0aW9uKCk7XG4gICAgICAgICAgICB3aW5kb3cuZm9yd2FyZEFjdGlvbiA9IGZvcndhcmRlZEFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3cgcGFnaW5hdGlvbiBUT0RPOiBSZWZhY3RvciBwYWdpbmF0aW9uIGludG8gY29tcG9uZW50IHRvIGJlIGFwcGVuZGVkIHRvIHBhZ2UgaGVyZVxuICAgICAgICAkKCcuUGFnaW5hdGlvbi5pcy1yZXN1bHRzJykuc2hvdygpO1xuICAgIH1cbn1cblxuaW1wb3J0IEZhY2V0c0NvbnRyb2xsZXIgZnJvbSAnLi9mYWNldHMvZmFjZXRzX2NvbnRyb2xsZXIuanMnO1xud2luZG93LmZhY2V0c0NvbnRyb2xsZXIgPSBuZXcgRmFjZXRzQ29udHJvbGxlcigpO1xuXG5pZiAoISF3aW5kb3cuY29sbGVjdGlvbklkKSB7XG4gICAgbGV0IHBhZ2VNYW5hZ2VyID0gbmV3IFBhZ2VNYW5hZ2VyKCk7XG5cbiAgICBwYWdlTWFuYWdlci5mZXRjaENvbGxlY3Rpb25CeUlkKHdpbmRvdy5jb2xsZWN0aW9uSWQpLnRoZW4oXG4gICAgICAgIChjb2xsZWN0aW9uRGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgdm9pZCBuZXcgU2VhcmNoKHtcbiAgICAgICAgICAgICAgICBidXM6IHdpbmRvdy5nbG9iYWxFdmVudHMsXG4gICAgICAgICAgICAgICAgcm9vbTogY3VycmVudFJvb20sXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbkRlZmluaXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGpxSFhSLCB0ZXh0U3RhdHVzLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZygnZXJyb3InLCAnRXJyb3IgZmV0Y2hpbmcgY29sbGVjdGlvbicsIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0ZXh0U3RhdHVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICApO1xufSBlbHNlIHtcbiAgICB2b2lkIG5ldyBTZWFyY2goeyBidXM6IHdpbmRvdy5nbG9iYWxFdmVudHMsIHJvb206IGN1cnJlbnRSb29tIH0pO1xufVxuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgJCgnLmpzLXNlYXJjaFNvcnRCeU9wdGlvbnMnKS5yZW1vdmVDbGFzcygndG9saW5vLWRpc2FibGUnKTtcbn0pO1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGl0bGVBY3Rpb25zIHtcbiAgICBjb25zdHJ1Y3Rvcih7IGJ1cywgY29udGV4dCB9KSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuXG4gICAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgICAgIHJvb206IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25EZWZpbml0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgXy5leHRlbmQodGhpcy5jb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwZXJmb3JtKGFjdGlvbiwgdGl0bGVNb2RlbCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXNbYF8ke2FjdGlvbn1gXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpc1tgXyR7YWN0aW9ufWBdKHRpdGxlTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2JvcnJvdyh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOmJvcnJvdycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2hvbGQodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpob2xkJywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfd2lzaCh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOndpc2hsaXN0JywgdGl0bGVNb2RlbCwgdGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBfbm9vayh0aXRsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuYnVzLnRyaWdnZXIoJ3RpdGxlOm5vb2snLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yYXRpbmcodGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyYXRpbmcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9oaXN0b3J5KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6aGlzdG9yeScsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX2Rvd25sb2FkKHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6ZG93bmxvYWQnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9wcmV2aWV3KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cHJldmlldycsIHRpdGxlTW9kZWwsIHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3JlbmV3KHRpdGxlTW9kZWwpIHtcbiAgICAgICAgdGhpcy5idXMudHJpZ2dlcigndGl0bGU6cmVuZXcnLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIF9yZXF1ZXN0QWdhaW4odGl0bGVNb2RlbCkge1xuICAgICAgICB0aGlzLmJ1cy50cmlnZ2VyKCd0aXRsZTpyZXF1ZXN0QWdhaW4nLCB0aXRsZU1vZGVsLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHNldENvbnRleHRSb29tKHJvb20pIHtcbiAgICAgICAgaWYgKF8ocm9vbSkuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LnJvb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucm9vbSA9IHJvb207XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzZXRDb250ZXh0Q29sbGVjdGlvbih0aXRsZUNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKF8odGl0bGVDb2xsZWN0aW9uKS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbnRleHQudGl0bGVDb2xsZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnRpdGxlQ29sbGVjdGlvbiA9IHRpdGxlQ29sbGVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsImNsYXNzIFRpdGxlU3RhdGUge1xuICAgIHN0YXRpYyBnZXRTdGF0ZShtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZU1hbmFnZXIgPSB3aW5kb3cuZmVhdHVyZU1hbmFnZXI7XG5cbiAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnc2FtcGxlT25seU1vZGUnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdwcmV2aWV3JztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZWRpYUlkID0gbWVkaWEuaWQ7XG5cbiAgICAgICAgbGV0IGlzT25Ib2xkID0gcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25Ib2xkcy5pbmRleE9mKG1lZGlhSWQpID4gLTE7XG4gICAgICAgIGxldCBpc09uQ2hlY2tvdXRzID1cbiAgICAgICAgICAgIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uQ2hlY2tvdXRzLmluZGV4T2YobWVkaWFJZCkgPiAtMTtcbiAgICAgICAgbGV0IGlzQXZhaWxhYmxlID1cbiAgICAgICAgICAgIG1lZGlhLmlzQXZhaWxhYmxlIHx8XG4gICAgICAgICAgICAoZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICAgICAgbWVkaWEubHVja3lEYXlBdmFpbGFibGVDb3BpZXMgPiAwKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAvYWNjb3VudFxcL2xvYW5zLy50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSAmJlxuICAgICAgICAgICAgbWVkaWEuaXNSZW5ld2FibGUgJiZcbiAgICAgICAgICAgIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGlzT25Ib2xkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZXF1ZXN0ZWQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtZWRpYS5ob2xkc0NvdW50IDw9IDAgJiZcbiAgICAgICAgICAgICAgICBtZWRpYS5vd25lZENvcGllcyA+PSAwICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdMdWNreURheScpICYmXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhLmlzTHVja3lEYXlDaGVja291dFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmVuZXcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdyZXF1ZXN0QWdhaW4nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT25DaGVja291dHMpIHtcbiAgICAgICAgICAgIHJldHVybiAnYm9ycm93ZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT25Ib2xkICYmICFpc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuICdvbkhvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBpZiAobWVkaWEudHlwZS5pZCA9PT0gJ3BlcmlvZGljYWxzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbm9vayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAnYm9ycm93JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZWRpYS5pc0hvbGRhYmxlICYmIGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnY29udGVudC1ob2xkcycpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hvbGQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT25XaXNobGlzdChtZWRpYSwgcGF0cm9uSXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIHBhdHJvbkl0ZW1zICYmIHBhdHJvbkl0ZW1zLm9uV2lzaGxpc3QuaW5kZXhPZihtZWRpYS5pZCkgPiAtMTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPblJlYWRpbmdIaXN0b3J5KG1lZGlhLCBwYXRyb25JdGVtcykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGF0cm9uSXRlbXMgJiYgcGF0cm9uSXRlbXMub25SZWFkaW5nSGlzdG9yeS5pbmRleE9mKG1lZGlhLmlkKSA+IC0xXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGljIHN0YXJSYXRpbmcobWVkaWEsIHBhdHJvbkl0ZW1zKSB7XG4gICAgICAgIC8vIFJldHVybnMgMCBpZiBub3QgcmF0ZWRcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwYXRyb25JdGVtcyAmJlxuICAgICAgICAgICAgICAgIHBhdHJvbkl0ZW1zLnN0YXJSYXRpbmdzICYmXG4gICAgICAgICAgICAgICAgcGF0cm9uSXRlbXMuc3RhclJhdGluZ3NbbWVkaWEuaWRdKSB8fFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVTdGF0ZTtcbiIsIi8qXG4gKiBFbmNvZGUgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGJlIGVuY29kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHJmYzM5ODZFbmNvZGVVUklDb21wb25lbnQgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyYhJygpKl0vZywgZXNjYXBlKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJmYzM5ODZFbmNvZGVVUklDb21wb25lbnQ7XG4iLCJjb25zdCBrZXlzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgVEFCOiA5LFxuICAgIEVOVEVSOiAxMyxcbiAgICBMRUZUOiAzNyxcbiAgICBVUDogMzgsXG4gICAgUklHSFQ6IDM5LFxuICAgIERPV046IDQwLFxuICAgIFNQQUNFOiAzMixcbiAgICBFU0M6IDI3XG59KTtcbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iLCJpbXBvcnQgSGFzaE1hbmFnZXIgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24vSGFzaE1hbmFnZXInO1xuaW1wb3J0IFRpdGxlIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVkaWEvbW9kZWxzL1RpdGxlJztcbmltcG9ydCBUaXRsZUFjdGlvbnMgZnJvbSAnLi4vLi4vdGl0bGUtYWN0aW9ucy9UaXRsZUFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9jZXNzRm9yd2FyZGVkQWN0aW9uIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2xsZWN0aW9uLCBidXMsIG1vZGVsKSB7XG4gICAgICAgIGxldCBoYXNoID0gSGFzaE1hbmFnZXIuZ2V0KCdhY3Rpb24nKVswXTtcbiAgICAgICAgdGhpcy5hY3Rpb25BcnIgPSBoYXNoID8gaGFzaC5zcGxpdCgnficpIDogW107XG4gICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5hY3Rpb25BcnJbMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5tZWRpYUlkID0gdGhpcy5hY3Rpb25BcnJbMV0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy5yYXRpbmcgPSB0aGlzLmFjdGlvbkFyclsyXSB8fCAwO1xuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWwgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbi5tb2RlbHM7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgdXNlciBmb3J3YXJkZWQgYWN0aW9uXG4gICAgZXhlY3V0ZUFjdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGlvbiB8fCAhdGhpcy5tZWRpYUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5tb2RlbCB8fFxuICAgICAgICAgICAgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5nZXQoJ2lkJykgIT09IHRoaXMubWVkaWFJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gXy5maW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICAobW9kZWwpID0+IG1vZGVsLmlkID09PSB0aGlzLm1lZGlhSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGVBY3Rpb25zID0gbmV3IFRpdGxlQWN0aW9ucyh7IGJ1czogdGhpcy5idXMgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIC8vIFRpdGxlIG1vZGVsIGlzIG9uIHBhZ2VcbiAgICAgICAgICAgIEhhc2hNYW5hZ2VyLnJlbW92ZSgnYWN0aW9uJyk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldCgndXNlclN0YXJSYXRpbmcnLCB0aGlzLnJhdGluZyk7XG4gICAgICAgICAgICB0aXRsZUFjdGlvbnMucGVyZm9ybSh0aGlzLmFjdGlvbiwgdGhpcy5tb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaXRsZSBtb2RlbCBpcyBub3Qgb24gcGFnZSwgZmV0Y2ggYXN5bmNcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IG5ldyBUaXRsZSgpO1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGl0bGUuZ2V0VGl0bGVBc3luYyh0aGlzLm1lZGlhSWQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwuc2V0KCd1c2VyU3RhclJhdGluZycsIHRoaXMucmF0aW5nKTtcbiAgICAgICAgICAgICAgICB0aXRsZUFjdGlvbnMucGVyZm9ybSh0aGlzLmFjdGlvbiwgdGl0bGUpO1xuICAgICAgICAgICAgICAgIEhhc2hNYW5hZ2VyLnJlbW92ZSgnYWN0aW9uJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ=="}