{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_advance-string-index.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_function-to-string.js","node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_regexp-exec-abstract.js","node_modules/core-js/modules/_regexp-exec.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_string-trim.js","node_modules/core-js/modules/_string-ws.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.number.constructor.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.to-string.js","node_modules/core-js/modules/es6.regexp.exec.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.symbol.async-iterator.js","node_modules/core-js/modules/web.dom.iterable.js","src/scripts/entry.js","src/scripts/global.js","src/scripts/modules/accordion.js","src/scripts/modules/b7.js","src/scripts/modules/breakpoints.js","src/scripts/modules/case-filter.js","src/scripts/modules/certified.js","src/scripts/modules/contact-form.js","src/scripts/modules/document-centre-filter.js","src/scripts/modules/event-filter.js","src/scripts/modules/fadeInUp-logo.js","src/scripts/modules/gtm.js","src/scripts/modules/hash.js","src/scripts/modules/in-view.js","src/scripts/modules/lineHeight.js","src/scripts/modules/map.js","src/scripts/modules/media-resource-select.js","src/scripts/modules/media-resources-play-video.js","src/scripts/modules/mobile_menu.js","src/scripts/modules/modal-gallery.js","src/scripts/modules/modal.js","src/scripts/modules/motions-filter.js","src/scripts/modules/news-filter-category-dd.js","src/scripts/modules/partners.js","src/scripts/modules/popup.js","src/scripts/modules/process-filter.js","src/scripts/modules/quick_links.js","src/scripts/modules/scroll-direction.js","src/scripts/modules/search-featured-content.js","src/scripts/modules/searchAutoFocus.js","src/scripts/modules/select2.js","src/scripts/modules/slider.js","src/scripts/modules/sticky.js","src/scripts/modules/tabs.js","src/scripts/modules/timeline.js","src/scripts/modules/truncate.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;;ACFA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;;ACHA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AA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","file":"bundle.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 Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","import truncate from './modules/truncate';\nimport popup from './modules/popup';\nimport slider from './modules/slider';\nimport modal from './modules/modal';\nimport modalGallery from './modules/modal-gallery';\nimport mediaResourcesPlayVideoBtn from './modules/media-resources-play-video';\nimport accordion from './modules/accordion';\nimport mediaResourceSelect from './modules/media-resource-select';\nimport mobile_menu from './modules/mobile_menu';\nimport certified from './modules/certified';\nimport in_view from './modules/in-view';\nimport newsFilterCategoryDd from './modules/news-filter-category-dd';\nimport sticky from './modules/sticky';\nimport b7 from './modules/b7';\nimport contactForm from './modules/contact-form';\nimport quick_links from './modules/quick_links';\nimport map from './modules/map';\nimport partners from './modules/partners';\nimport timeline from './modules/timeline';\nimport caseFilter from './modules/case-filter';\nimport processFilter from './modules/process-filter';\nimport documentCentreFilter from './modules/document-centre-filter';\nimport tabs from './modules/tabs';\nimport searchAutoFocus from './modules/searchAutoFocus';\nimport fadeInUplogo from './modules/fadeInUp-logo';\nimport select2 from './modules/select2';\nimport gtm from './modules/gtm';\nimport searchFeaturedContent from './modules/search-featured-content.js';\nimport motions_filter from './modules/motions-filter';\nimport event_filter from './modules/event-filter';\nimport global from './global';\n// import document_search from './document-search';\n\n[\n truncate, // Drupal Behavior\n\n popup,\n slider,\n modal,\n modalGallery,\n mediaResourcesPlayVideoBtn,\n accordion,\n mediaResourceSelect,\n mobile_menu,\n certified,\n in_view,\n newsFilterCategoryDd,\n sticky,\n b7,\n contactForm,\n quick_links,\n map,\n partners,\n timeline,\n caseFilter,\n processFilter,\n documentCentreFilter,\n tabs,\n searchAutoFocus,\n fadeInUplogo,\n select2,\n gtm,\n searchFeaturedContent,\n motions_filter,\n event_filter\n].forEach(\n module => { module(); }\n);\n","(function ($, Drupal) {\n Drupal.behaviors.myModuleBehavior = {\n attach: function (context, settings) {\n $('[id^=openpopmsg]').click(function() {\n $(\".msgmotionedit\").toggle();\n\t});\n $('.msgmotionedit-close-btn').click(function() {\n $(\".msgmotionedit\").toggle();\n\t});\n\t$('[id^=openpopmsg]').click(function() {\n\t\t$('body').toggleClass('popup-open');\n\t\t$(\".msgmotionedit-wrapper\").fadeTo(200, 1);\n\t});\n\t$(\".msgmotionedit-close-btn\").click(function() {\n\t\t$('body').removeClass('popup-open');\n\t\t$(\".msgmotionedit-wrapper\").fadeOut(200);\n\t});\n\n // For loader\n $('div.slide_content .links .field--name-field-link a').on('click', function () {\n //alert('clicked');\n var motionbtn = $(this).text().trim();\n //alert(motionbtn);\n if(motionbtn == 'Submit your Motions'){\n //alert('motion btn clicked');\n //$('#motion_loader').show();\n //$('body').addClass('loader');\n //$('#spinnerScreen').removeClass('hide');\n //$('#motion_loader').css('display', 'block');\n $('#mainloaderOverlay').show();\n //history.pushState({ page: \"motion\" }, \"motion\", \"add/motion\"); \n };\n }); \n $('div.column ul li a').on('click', function () {\n //alert('clicked');\n var motionbtn = $(this).text().trim();\n //alert(motionbtn);\n if(motionbtn == 'Submit a motion'){\n // alert('motion btn clicked');\n //$('body').addClass('loader');\n //$('#spinnerScreen').removeClass('hide');\n //$('#motion_loader').css('display', 'block');\n //$('body').after('
');\n $('#mainloaderOverlay').show();\n //history.pushState({ page: \"motion\" }, \"motion\", \"add/motion\"); \n };\n });\n\t$(window).on('pageshow', function(event) {\n\t\t\t// Your JavaScript code here\n\t\t\t$('#mainloaderOverlay').hide();\n\t\t\tconsole.log('Page loaded or came back using the back button');\n\t});\t\t\n\t\t}\n };\n})(jQuery, Drupal);\n","import $ from 'jquery';\n\nexport default () => {\n const $window = $(window);\n\n $('.menu--media-resources-menu').on('click', '.nav-tabs-toggler', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $target = $this.data('target');\n\n $($target).toggleClass('display-none');\n });\n\n $('.accordion-list').on('click', '.li-content-toggler', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $target = $this.closest('li').find('.li-content');\n const offsetTop = $this.offset().top;\n const scrollTop = $window.scrollTop();\n\n // If target is not already expanded.\n if (!$this.hasClass('up')) {\n // Collapse others .li-text in accordion.\n const $accordion = $this.closest('.accordion-list');\n\n $('.li-content', $accordion).hide();\n $('.li-content-toggler', $accordion).removeClass('up');\n }\n\n if ($target.length > 0) {\n $target.toggle();\n $this.toggleClass('up');\n const $to = $target.is(':visible') ? $target : $this;\n\n $window.scrollTop($to.offset().top - (offsetTop - scrollTop));\n }\n });\n\n $(document).on('click', '.accordion .accordion-toggle', function(e) {\n e.preventDefault();\n $(this).closest('.accordion').toggleClass('active');\n //var $activeAccordionBottom = $(this).closest('.accordion .accordion-toggle').next('.bottom-toogle-icon');\n // PBI #28465 - Giving the option to close the content while scrolling\n var $activeAccordionClose = $(this).closest('.accordion .accordion-toggle').next('.accordion-toggle-close-btn');\n if ($activeAccordionClose.hasClass('hide')) {\n $activeAccordionClose.addClass('show');\n $activeAccordionClose.removeClass('hide');\n } else {\n $activeAccordionClose.addClass('hide');\n $activeAccordionClose.removeClass('show');\n }\n // $activeAccordionBottom.toggleClass('active');\n // if ($activeAccordionBottom.hasClass('show')) {\n // $activeAccordionBottom.addClass('hide');\n // $activeAccordionBottom.removeClass('show');\n // } \n e.stopPropagation();\n // $(window).scroll(function() { \n // var scroll = $(window).scrollTop();\n // if (scroll >= 750) {\n // $activeAccordionBottom.addClass('show');\n // $activeAccordionBottom.removeClass('hide');\n // } else {\n // $activeAccordionBottom.addClass('hide');\n // $activeAccordionBottom.removeClass('show');\n // }\n // });\n });\n\n // PBI #28465 - Giving the option to close the content while scrolling\n $(document).on('click', '.accordion .accordion-toggle-close-btn', function(e) {\n $(this).removeClass('show').addClass('hide');\n $(this).parent('.profile-content.accordion').removeClass('active');\n });\n\n // PBI #28465 - Giving the option to close the content while scrolling\n // $(document).on('click', '.accordion .bottom-toogle-icon', function(e) {\n // var $activeAccordionBottom = $(this).closest('.accordion .bottom-toogle-icon');\n // $activeAccordionBottom.toggleClass('active');\n // if ($activeAccordionBottom.hasClass('show')) {\n // $activeAccordionBottom.addClass('hide');\n // $activeAccordionBottom.removeClass('show');\n // } \n // $(window).scroll(function() { \n // var scroll = $(window).scrollTop();\n // if (scroll >= 750) {\n // $activeAccordionBottom.addClass('show');\n // $activeAccordionBottom.removeClass('hide');\n // } else {\n // $activeAccordionBottom.addClass('hide');\n // $activeAccordionBottom.removeClass('show');\n // }\n // });\n // });\n\n $('.accordion').on('click', '.accordion-item-trigger', function(event) {\n const $currentItem = $(this).closest('.accordion-item');\n const $allItems = $(this).closest('.accordion').find('.accordion-item');\n\n if ($currentItem.hasClass('active')) {\n $currentItem.removeClass('active')\n } else {\n $allItems.removeClass('active');\n $currentItem.addClass('active');\n }\n });\n};\n","import $ from 'jquery';\n\n// 1000ms = 1s\nconst transitionDuration = 1000;\nfunction Carousel($el) {\n const $this = this;\n\n $this.module = $el;\n\n $this._minScale = 0.6;\n $this._minOffset = 0.5;\n $this._breakpoints = {\n ph: window.matchMedia('(min-width: 480px)'),\n md: window.matchMedia('(min-width: 768px)'),\n bg: window.matchMedia('(min-width: 1024px)'),\n lg: window.matchMedia('(min-width: 1280px)'),\n xl: window.matchMedia('(min-width: 1440px)'),\n };\n $this.settings = {\n auto: {\n play: true,\n time: 5000,\n interval: null,\n }\n };\n\n $this.data = [];\n\n $this.initAutoPlay = function() {\n if ($this.settings.auto.play) {\n $this.startAuto();\n } else {\n $this.stopAuto();\n }\n\n $this.module.hover(function() {\n if ($this.settings.auto.interval) {\n $this.stopAuto();\n $this.settings.auto.autoPaused = true;\n }\n }, function() {\n if ($this.settings.auto.autoPaused) {\n $this.startAuto();\n $this.settings.auto.autoPaused = null;\n }\n });\n\n $(window)\n .focus(function() { $this.startAuto(); })\n .blur(function() { $this.stopAuto(); });\n };\n\n $this.startAuto = function() {\n if ($this.settings.auto.interval) { return; }\n\n $this.settings.auto.interval = setInterval(function() {\n $this.goToNextCard();\n }, $this.settings.auto.time);\n };\n\n $this.stopAuto = function() {\n if (!$this.settings.auto.interval) { return; }\n\n clearInterval($this.settings.auto.interval);\n $this.settings.auto.interval = null;\n };\n\n $this.setElements = function() {\n $this.container = $this.module.find('.module--b7--cards');\n $this.cardsWrapper = $this.module.find('.module--b7--cards');\n $this.cards = $this.module.find('.module--b7--card');\n $this.bodysWrapper = $this.module.find('.module--b7--bodys');\n $this.bodys = $this.module.find('.module--b7--body');\n\n $this.cards.each(function(index, card) {\n card.originalID = index;\n });\n };\n\n $this.getData = function() {\n $this.data = $this.cards.map(function(index, card) {\n return {\n 'order': index - $this.sideQty,\n 'width': $(card).width()\n };\n }).toArray();\n };\n\n $this.setContainerHeight = function() {\n const heights = $this.cards.toArray().map(card => $(card).height());\n $this.container.height(Math.max(...heights));\n };\n\n $this.setVars = function() {\n $this.cardWidth = $this.cards.first().outerWidth();\n $this.scaleStep = (1 - $this._minScale) / $this.sideQty;\n $this.availableSideSpace = ($this.module.width() - $this.cardWidth) / 2;\n $this.reduceOffsetBase = $this.availableSideSpace < $this.spaceRequired() ? $this.additionalOffset() : 0;\n $this.setMode();\n };\n\n $this.spaceRequired = function() {\n return $this.cardWidth * ($this.APS(1, -1 * $this.scaleStep, $this.sideQty + 1) - 1) / 2;\n };\n\n $this.additionalOffset = function() {\n return ($this.spaceRequired() - $this.availableSideSpace) / ($this.APS(1, -1 * $this.scaleStep, $this.sideQty + 1) - 1);\n };\n\n /**\n * Arithmetic progression sum\n * @param {Number} a first term of arithmetic sequence\n * @param {Number} d difference between terms\n * @param {Number} n number of terms\n */\n $this.APS = function(a, d, n) {\n return (2 * a + d * (n - 1)) * n / 2;\n };\n\n $this.rotateCardsForward = function() {\n const cards = $this.cards.toArray();\n cards.push( cards.shift() );\n $this.cards = $(cards);\n };\n\n $this.rotateCardsBackward = function() {\n const cards = $this.cards.toArray();\n cards.unshift( cards.pop() );\n $this.cards = $(cards);\n };\n\n $this.getActiveCard = function() {\n return $this.cards.eq( $this.sideQty );\n };\n\n $this.getCardsBeforeActive = function() {\n return $( $this.cards.toArray().slice(0, $this.sideQty).reverse() );\n };\n\n $this.getCardsAfterActive = function() {\n return $this.cards.slice($this.sideQty + 1);\n };\n\n $this.setCardsPosition = function() {\n const activeCard = $this.getActiveCard();\n const cardsBefore = $this.getCardsBeforeActive();\n const cardsAfter = $this.getCardsAfterActive();\n\n activeCard\n .css( $this.cssTransform(1) )\n .css('z-index', $this.sideQty + 1);\n\n cardsBefore.each((i, el) => {\n const card = $(el);\n const cardStyles = $this.cardStyles(i, -1);\n\n card.css( cardStyles );\n });\n\n cardsAfter.each((i, el) => {\n const card = $(el);\n const cardStyles = $this.cardStyles(i);\n\n card.css( cardStyles );\n });\n };\n\n $this.setCardsOffset = function() {\n $this.cards.each(function(index, el) {\n const $card = $(this);\n $card.css({\n left: `calc(50% - ${$card.width() / 2}px)`,\n top: `calc(50% - ${$card.height() / 2}px)`,\n });\n });\n };\n\n $this.goToNextCard = function() {\n $this.rotateCardsForward();\n $this.cards.removeClass('active');\n $this.getActiveCard().addClass('active');\n $this.setCardsPosition();\n\n $this.bodys.removeClass('active');\n $this.getActiveBody().addClass('active');\n };\n\n $this.goToPrevCard = function() {\n $this.rotateCardsBackward();\n $this.cards.removeClass('active');\n $this.getActiveCard().addClass('active');\n $this.setCardsPosition();\n\n $this.bodys.removeClass('active');\n $this.getActiveBody().addClass('active');\n };\n\n $this.clickHandler = function() {\n const index = $this.cards.index(this);\n const rounds = Math.abs(index - $this.sideQty);\n\n for (let i = 0; i < rounds; i++) {\n setTimeout(() => {\n index > $this.sideQty ? $this.goToNextCard() : $this.goToPrevCard();\n\n if (i == rounds - 1) {\n dataLayer.push({\n 'event': 'gtm.click',\n 'gtm.element': $this.getActiveBody().find('h2').toArray().pop(),\n })\n }\n }, i * 400);\n }\n };\n\n $this.initEventHandlers = function() {\n $this.cards.click($this.clickHandler);\n\n Object.keys($this._breakpoints).forEach((key) => $this._breakpoints[key].addListener((mq) => {\n $this.setVars();\n $this.setCardsPosition();\n $this.setContainerHeight();\n $this.setCardsOffset();\n $this.setBodysHeight();\n }));\n };\n\n $this.setMode = function() {\n if ($this._breakpoints.lg.matches) {\n $this._mode = 'advanced';\n } else if ($this._breakpoints.md.matches) {\n $this._mode = 'mixed';\n } else {\n $this._mode = 'simple';\n }\n };\n\n $this.getMode = function() {\n return $this._mode;\n }\n\n $this.cardScale = function(index) {\n switch($this._mode) {\n case 'advanced':\n return 1 - $this.scaleStep * (index + 1);\n case 'mixed':\n return 0.8;\n default:\n return 1;\n }\n };\n\n $this.cardTransform = function(index) {\n if (index < 0) return 0;\n\n switch($this._mode) {\n case 'advanced':\n const prevMove = $this.cardTransform(index - 1) * $this.cardScale(index - 1) / $this.cardScale(index);\n const prevWidth = $this.cardWidth * $this.cardScale(index - 1);\n const currentWidth = $this.cardWidth * $this.cardScale(index);\n\n return prevMove + (((prevWidth - currentWidth) / 2) + $this._minOffset * currentWidth - $this.reduceOffsetBase * $this.cardScale(index)) / $this.cardScale(index);\n case 'mixed':\n return (index + 1) * ($this.cardWidth * 0.2 / 2 + 70 + $this.cardWidth * 0.8) / 0.8;\n\n default:\n return (index + 1) * ($this.cardWidth + 30);\n }\n };\n\n $this.cardZIndex = function(index) {\n return $this.sideQty - index;\n };\n\n $this.cardStyles = function(i, flip = 1) {\n return jQuery.extend(\n {},\n $this.cssZIndex( $this.cardZIndex(i) ),\n $this.cssTransform($this.cardScale(i), flip * $this.cardTransform(i))\n );\n };\n\n $this.setIndex = function(index) {\n $this._index = index;\n };\n\n $this.getIndex = function() {\n return $this._index !== undefined ? $this._index : Math.floor($this.cards.length / 2);\n };\n\n $this.getActiveBody = function() {\n return $this.bodys.eq( $this.getActiveCard()[0].originalID );\n };\n\n $this.cssTransform = function(scale, translate) {\n const rule = 'transform';\n const value = [scale ? `scale(${scale})` : '', translate ? `translateX(${translate}px)` : '', ].join(' ');\n const prefixes = ['-webkit-', '-ms-', ''];\n const styles = {};\n\n prefixes.forEach(prefix => { styles[prefix + rule] = value} );\n\n return styles;\n };\n\n $this.cssZIndex = function(zindex) {\n return { 'z-index': zindex };\n };\n\n $this.setBodysHeight = function() {\n const heights = $this.bodys.toArray().map(body => $(body).height());\n\n $this.bodysWrapper.height( Math.max(...heights) );\n };\n\n $this.init = function() {\n $this.setElements();\n $this.sideQty = Math.floor($this.cards.length / 2);\n // $this.getData();\n $this.setContainerHeight();\n $this.setCardsOffset();\n $this.setVars();\n $this.setCardsPosition();\n $this.getActiveCard().addClass('active');\n $this.getActiveBody().addClass('active');\n $this.setBodysHeight();\n\n $this.initEventHandlers();\n $this.initAutoPlay();\n };\n};\n\nexport default () => {\n $('.module--b7').each(function() {\n const $module = $(this);\n\n $module.imagesLoaded().always(function() {\n new Carousel( $module ).init();\n })\n });\n}\n","import $ from 'jquery';\nimport { theme_breakpoints } from 'drupalSettings';\n\nconst breakpoints = {\n 'min': {},\n 'max': {},\n};\n\nObject.keys(theme_breakpoints).forEach((key) => {\n breakpoints.min['mb'] = window.matchMedia('(min-width: 0px)');\n breakpoints.min[key] = window.matchMedia(`(min-width: ${theme_breakpoints[key]}px)`);\n breakpoints.max[key] = window.matchMedia(`(max-width: ${theme_breakpoints[key] - 1}px)`);\n})\n\nexport const keys = Object.keys(theme_breakpoints);\n\nexport default breakpoints\n","import $ from 'jquery';\n\nexport default () => {\n const caseListViewsBlockSelector = '#views-exposed-form-article-list-quick-block-case-list';\n const typePlaceholder = Drupal.t('Type');\n const concernsPlaceholder = Drupal.t('Concerns');\n\n Drupal.behaviors.cases_filter_select = {\n attach: function(context, settings) {\n const $form = $(caseListViewsBlockSelector).first();\n\n $form.find('select[name=\"type\"]').once('select2-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: typePlaceholder,\n });\n $form.find('select[name=\"concerns\"]').once('select2-concerns').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: concernsPlaceholder,\n });\n $form.find('select[name=\"is_disassociated\"]').once('select2-is_disassociated').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n });\n }\n };\n}","import $ from 'jquery';\n// import shave from './shave';\n\nexport default () => {\n $('.view-id-certified_products_list .view-content')\n .addClass('owl-carousel owl-theme')\n .owlCarousel({\n margin: 37,\n rewind: false,\n autoWidth: true,\n loop: true,\n responsive: {\n '0': {\n items: 1,\n center: true,\n },\n '1024': {\n center: false\n },\n '1280': {\n autoWidth: false,\n items: 3,\n dotsEach: 3,\n loop: false,\n }\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const $contactForms = $(\".contact-form\");\n const $previewFileModal = $('#preview-modal');\n \n $contactForms.on('click', '.pdf-preview-modal-caller', function (e) {\n const $this = $(this);\n\n if ($('body').hasClass('pdf-support')) {\n e.preventDefault();\n e.stopPropagation();\n\n const src = $this.attr('href');\n const $pdfContainer = $previewFileModal.find('#pdf-container');\n $previewFileModal.find('#accept-terms').data('target', $this.closest('label'));\n \n // Is pdf already loaded?\n if ($pdfContainer.attr('src') !== src) {\n $pdfContainer.attr('src', src);\n }\n\n $previewFileModal.addClass('show');\n } else {\n $this.attr('target', '_blank');\n }\n });\n\n $previewFileModal.on('click', '#accept-terms', function(e) {\n const $this = $(this);\n const $checkbox = $(`#${$this.data('target').prop('for')}`);\n\n $checkbox.prop('checked', true);\n $checkbox.trigger('change');\n $this.data('target', null);\n $previewFileModal.removeClass('show');\n });\n}","import $ from 'jquery';\n\nexport default () => {\n Drupal.behaviors.processes_filter_select = {\n attach: function(context, settings) {\n const $form = $('#views-exposed-form-search-page-document-centre');\n\n $form.find('select[name=\"dspace_doc_type\"]').once('select2-document-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n });\n }\n };\n}\n","import $ from 'jquery';\n\nexport default () => {\n Drupal.behaviors.event_filter_select = {\n attach: function(context, settings) {\n const $form = $('#views-exposed-form-events-block-1');\n\n $form.find('select[name=\"field_is_archived_value\"]').once('select2-field-is-archived-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n\t\tplaceholder: Drupal.t('Event')\n }); \n\t $form.find('select[name=\"field_event_category_target_id\"]').once('select2-field-event-category-target-id').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n\t\tplaceholder: Drupal.t('Type')\n });\n }\n };\n}\n","import $ from 'jquery';\nimport debounce from 'debounce';\n\nexport default () => {\n const $window = $(window);\n const $logo = $('#header .logo-fadeInUp');\n const offset = +$logo\n .add('
')\n .first()\n .attr('class')\n .split(/\\s+/)\n .find(className => className.startsWith('fadeInUp-offset-'))\n .split('-')\n .pop();\n\n if (offset) {\n $window.on('scroll', debounce(function() {\n if ($window.scrollTop() > offset) {\n $logo.addClass('visible');\n } else {\n $logo.removeClass('visible');\n }\n }, 50));\n }\n};\n","import $ from 'jquery';\n\nexport default () => {\n $('.paragraph--type--contact-form form.contact-form .form-actions input[type=submit]').on('mousedown', function(event) {\n const $form = $(this).parents('form');\n\n //window.addEventListener(\"beforeunload\", function(e) {\n var dataLayer = window.dataLayer = window.dataLayer || [];\n dataLayer.push({\n 'event': 'gtm.formSubmit',\n 'gtm.element': $form[0],\n 'gtm.elementClasses': $form.attr('class'),\n 'gtm.elementId': $form.attr('id')\n });\n });\n\n let $regions;\n\n Drupal.behaviors.exposed_form_submission = {\n attach: function(context, settings) {\n $regions = $regions || $('.region-hero, .region-content');\n const selector = '[id^=views-exposed-form]';\n const $forms = $(selector, context).addBack(selector);\n const $bef = $regions.find($forms).once('bef-gtm');\n const filters = [];\n\n $bef.find('input[type=submit]').on('click mousedown', function() {\n const $form = $(this).parents('form');\n const $items = $form.find('.form-item');\n\n $items.each(function() {\n const $item = $(this);\n\n switch(getItemType($item)) {\n case 'select':\n const index = $item.find('select').val();\n const value = $item.find('option')\n .filter(`[value=${index}]`)\n .text();\n filters.push(value);\n break;\n default:\n filters.push($item.find('input').val());\n break;\n }\n });\n\n $form.addClass('views-exposed-form');\n var dataLayer = window.dataLayer = window.dataLayer || [];\n dataLayer.push({\n 'event': 'exposedForm',\n 'formFilters': normalizeFilters(filters)\n });\n });\n }\n };\n\n // function getItemType($item) {\n // return $item.attr('class')\n // .split(/\\s+/)\n // .filter(className => className.startsWith('form-type'))\n // .pop()\n // .split('-')\n // .pop();\n // }\n\n // This is the duplicate of above function. It have one additional validation\n // for the form items. If the $item has value then only its split condition works.\n // For Virtual Booth sponsors list page, we alter the function to avoid the error in\n // Better exposed filter in Ajax submit. \n function getItemType($item) {\n $item = $item.attr('class').split(/\\s+/).filter(className => className.startsWith('form-type'));\n if(jQuery.isEmptyObject($item) === 'false') {\n return $item.pop().split('-').pop();\n }\n }\n\n function normalizeFilters(filters) {\n if(jQuery.isEmptyObject(filters) === 'false') {\n return filters\n .map(filter => filter.replace(/-/g, ''))\n .map(filter => filter.trim())\n .filter(filter => filter.length)\n .join(' - ');\n }\n }\n}\n","import $ from 'jquery';\n\nfunction logErrorMessage(msg) {\n console.error('[Hash.js] The hash passed in to update location is not valid');\n console.error(`[Hash.js] ${msg}`);\n}\n\nfunction isValid(hash) {\n if ('string' !== typeof hash) {\n logErrorMessage('Hash has to be a string');\n return;\n }\n\n if (!hash.length) {\n logErrorMessage('Hash is empty');\n return;\n }\n\n return true;\n}\n\nfunction update(hash) {\n if (!isValid(hash)) { return; }\n\n const destinationElement = $( document.getElementById(hash.substring(1)) );\n\n if (history.pushState) {\n history.pushState({}, '', hash);\n } else {\n destinationElement.removeAttr('id');\n location.hash = hash;\n destinationElement.attr('id', hash.substring(1));\n }\n}\n\nexport default { update }\n","import $ from 'jquery';\nimport debounce from 'debounce';\nimport breakpoints, { keys } from './breakpoints';\n\nfunction test($el, offset = 100) {\n const $win = $(window);\n const winTop = $win.scrollTop();\n const winBot = winTop + $win.height();\n const elTop = $el.offset().top;\n const elBot = elTop + $el.outerHeight();\n\n return (elTop <= (winBot - offset)) && ((winTop + offset) <= elBot);\n}\n\nexport default () => {\n const allElements = $('.checkIfInView');\n const invalidElements = allElements.filter(function() {\n const { inViewMin, inViewMax } = $(this).data();\n let decision = false\n\n if (keys.includes(inViewMin) && keys.includes(inViewMax)) {\n if (!breakpoints.min[inViewMin].matches || !breakpoints.max[inViewMax].matches) {\n decision = true;\n }\n }\n\n if (keys.includes(inViewMin) && !breakpoints.min[inViewMin].matches) {\n decision = true;\n }\n\n if (keys.includes(inViewMax) && !breakpoints.max[inViewMax].matches) {\n decision = true;\n }\n\n if (decision) {\n $(this).removeClass('checkIfInView').addClass('inView');\n }\n\n return decision;\n });\n\n let elements = allElements.not(invalidElements);\n\n if ( !elements.length ) return;\n\n const handler = debounce(function() {\n if (!elements.length) {\n $(window).off('scroll', handler);\n return;\n }\n\n elements.each((i, node) => {\n const $el = $(node);\n const { inViewOffset, inViewClass } = $el.data();\n\n if (test($el, inViewOffset)) {\n $el\n .removeClass('checkIfInView')\n .addClass('inView')\n .addClass(inViewClass);\n\n setTimeout(function() {\n $el.removeClass('inView');\n }, 1100);\n }\n });\n\n elements = elements.filter('.checkIfInView');\n }, 50);\n handler();\n $(window).on('scroll', handler);\n}\n","import $ from 'jquery';\n\nfunction calculateLineHeight($element) {\n let height = 0;\n const styles = [\n 'display: inline !important;',\n 'position: absolute !important;',\n 'line-height: inherit !important;',\n 'padding: 0 !important;',\n 'visibility: hidden !important;',\n 'opacity: 0 !important;'\n ];\n const $testEl = $(' ').attr('style', styles.join(''));\n\n $element.append($testEl);\n\n height = $testEl.height();\n\n $testEl.remove();\n\n return height;\n}\n\nexport default ($element) => {\n const lineHeight = parseFloat($element.css('line-height'));\n\n return Number.isNaN(lineHeight) ? calculateLineHeight($element) : Math.ceil(lineHeight);\n}\n","import $ from 'jquery';\nimport breakpoints from './breakpoints';\n\nfunction title(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nfunction setSource(node, srcType) {\n const $map = $(node);\n const src = $map.data(`src${title(srcType)}`);\n\n $map.attr({ src });\n}\n\nfunction testMQ($maps) {\n if (breakpoints.min.bg.matches) {\n $maps.each((i, el) => { setSource(el, 'desktop'); });\n } else {\n $maps.each((i, el) => { setSource(el, 'mobile'); });\n }\n}\n\nexport default () => {\n const $maps = $('iframe.responsive-map');\n\n if (breakpoints.min.bg.matches) {\n testMQ($maps);\n }\n\n breakpoints.min.bg.addListener(() => { testMQ($maps) });\n}\n","import $ from 'jquery';\n\n/**\n * \n * @param {string} mediaID \n * @param {string} source \n * @param {string} type \n * @param {string} thumbnail \n * @param {string} cookieName \n */\nfunction cookiesAddMedia(mediaID, generic, source, type, thumbnail, cookieName) {\n let selectedMedia = Cookies.getJSON(cookieName);\n \n if (undefined === selectedMedia) {\n selectedMedia = {};\n }\n\n selectedMedia[mediaID] = {\n generic: generic,\n type: type,\n source: source,\n thumbnail: type != 'pdf' ? thumbnail : ''\n };\n Cookies.set(cookieName, selectedMedia);\n}\n\n/**\n * \n * @param {string} mediaID \n * @param {string} cookieName \n */\nfunction cookiesDeleteMedia(mediaID, cookieName) {\n let selectedMedia = Cookies.getJSON(cookieName);\n \n if (selectedMedia && delete selectedMedia[mediaID]) {\n Cookies.set(cookieName, selectedMedia);\n }\n}\n\nexport default () => {\n const selectedResources = $('#selected-resources');\n const selectedDocuments = $('#selected-documents');\n const resourceList = $('.resource-list');\n const resourceItemWrapper = '.resource-item';\n const selectedResourceWrapper = '.selected-resource';\n const selectedImageTemplate = $('#selected-image-template ' + selectedResourceWrapper).first();\n const selectedVideoTemplate = $('#selected-video-template ' + selectedResourceWrapper).first();\n const selectedPDFTemplate = $('#selected-pdf-template ' + selectedResourceWrapper).first();\n const selectedMediaCookieName = 'selectedMedia';\n \n function createSelectedResource(mediaID, media) {\n let resourceToAppend = null;\n\n switch (media.type) {\n case 'video':\n if (selectedVideoTemplate.length == 0) {\n return;\n }\n\n resourceToAppend = selectedVideoTemplate.clone();\n resourceToAppend.find('.resource source').first().attr('src', media.source);\n break;\n case 'image':\n if (selectedImageTemplate.length == 0) {\n return;\n }\n\n resourceToAppend = selectedImageTemplate.clone();\n resourceToAppend.find('img').first().attr('src', media.source);\n break;\n case 'pdf':\n default:\n if (selectedPDFTemplate.length == 0) {\n return;\n }\n\n resourceToAppend = selectedPDFTemplate.clone();\n const $img = resourceToAppend.find('img').first();\n \n if (media.thumbnail) {\n $img.attr('src', media.thumbnail);\n }\n\n $img.attr('data-pdf-thumbnail-file', media.source);\n $img.attr('data-type', media.type);\n break;\n }\n \n resourceToAppend.find('.download-btn').first().attr('href', media.source);\n resourceToAppend.attr('data-media', mediaID); // used attr() because data-media will be queried later\n\n if (media.type == 'image' || media.type == 'video') {\n selectedResources.children('.selected-resource-list').first().append(resourceToAppend);\n } else {\n selectedDocuments.children('.selected-resource-list').first().append(resourceToAppend);\n }\n\n $('#' + mediaID, resourceList).closest(resourceItemWrapper).addClass('selected');\n }\n\n if (selectedResources.length == 1 || selectedDocuments.length == 1) {\n // One cycle for adding each media based on its' type to selected section.\n let cookiesMedia = Cookies.getJSON(selectedMediaCookieName);\n\n if (undefined === cookiesMedia) {\n Cookies.set(selectedMediaCookieName, {});\n } else {\n for (const prop in cookiesMedia) {\n if (cookiesMedia.hasOwnProperty(prop)) {\n createSelectedResource(prop, cookiesMedia[prop]);\n }\n }\n }\n\n // Event handlers.\n resourceList.on('click', '.resource-item .select-btn', function(e) {\n e.preventDefault();\n\n const resourceItem = $(this).closest(resourceItemWrapper); // .resource-item\n const resource = resourceItem.find('.resource').first();\n let entity = resourceItem.children('.media, .file').first();\n const fileType = resource.data('type');\n\n if (resourceItem.length == 0 || resource.length == 0 || entity.length == 0) {\n return;\n }\n\n if (resourceItem.hasClass('selected')) {\n let selected = $('.selected-resource[data-media=\"' + entity.attr('id') + '\"]', selectedResources);\n\n if (selected.length == 0) {\n selected = $('.selected-resource[data-media=\"' + entity.attr('id') + '\"]', selectedDocuments);\n }\n \n if (selected.length !== 0) {\n cookiesDeleteMedia(entity.attr('id'), selectedMediaCookieName);\n resourceItem.removeClass('selected');\n selected.remove();\n }\n\n return;\n }\n\n const r = entity.find('.resource').first();\n let entitySource = r.attr('href');\n let entityGeneric = r.attr('data-generic');\n let entityThumbnail = entity.find('.thumbnail').first().attr('src');\n\n createSelectedResource(entity.attr('id'), {\n generic: entityGeneric,\n source: entitySource, \n type: fileType, \n thumbnail: entityThumbnail\n });\n cookiesAddMedia(\n entity.attr('id'),\n entityGeneric,\n entitySource,\n fileType,\n entityThumbnail,\n selectedMediaCookieName\n );\n resourceItem.addClass('selected');\n });\n\n $('.selected-resource-list').on('click', '.selected-resource .unselect-btn', function(e) {\n e.preventDefault();\n\n let selectedResource = $(this).closest(selectedResourceWrapper);\n\n if (selectedResource.length == 1) {\n let mediaID = selectedResource.data('media');\n\n $('#' + mediaID, resourceList).closest(resourceItemWrapper).removeClass('selected');\n cookiesDeleteMedia(mediaID, selectedMediaCookieName);\n selectedResource.remove();\n }\n });\n\n $('.gallery-content').on('click', '.media-select', function(e) {\n e.preventDefault();\n\n const $galleryContent = $(this).closest('.gallery-content');\n const $galleryMedia = $galleryContent.children('#gallery-media');\n const mediaID = $galleryMedia.data('media');\n\n if (undefined === mediaID) {\n return;\n }\n\n let $resourceItem = $('#' + mediaID, resourceList).closest(resourceItemWrapper);\n\n if ($resourceItem.length === 0) {\n return;\n }\n\n if ($galleryContent.hasClass('selected')) {\n cookiesDeleteMedia(mediaID, selectedMediaCookieName);\n\n // Set 'heart' icon to 'unselected' state.\n $galleryContent.removeClass('selected');\n $resourceItem.removeClass('selected');\n\n // Remove media from selected section.\n $('.selected-resource[data-media=\"' + mediaID + '\"]', selectedResources).remove();\n\n return;\n }\n\n let mediaThumbnail = $resourceItem.find('.thumbnail').first().attr('src');\n\n createSelectedResource(mediaID, {\n generic: $galleryMedia.attr('data-generic'),\n source: $galleryMedia.attr('src'), \n type: $galleryMedia.data('type'), \n thumbnail: mediaThumbnail\n });\n cookiesAddMedia(\n mediaID,\n $galleryMedia.attr('data-generic'),\n $galleryMedia.attr('src'),\n $galleryMedia.data('type'),\n mediaThumbnail,\n selectedMediaCookieName\n );\n $galleryContent.addClass('selected');\n $resourceItem.addClass('selected');\n });\n\n $('.selected-header a.link').click(function(e) {\n const $this = $(this);\n let savedMedia = Cookies.getJSON(selectedMediaCookieName);\n let preventDownload = true;\n\n if (undefined !== savedMedia && Object.keys(savedMedia).length > 0) {\n let arr = null;\n\n // Check downloadable content based on media type.\n if ($this.data('target') === 'documents') {\n arr = Object.values(savedMedia).filter(media => media.generic === 'docs');\n } else {\n arr = Object.values(savedMedia).filter(media => media.generic !== 'docs');\n }\n\n preventDownload = arr.length === 0;\n }\n\n if (preventDownload) {\n e.preventDefault();\n e.stopPropagation();\n console.log('Download stopped');\n }\n });\n }\n};\n","import $ from 'jquery';\n\nexport default () => {\n $(\".resource-list, .selected-resources\").on(\"click\", \".resource-container .play-video-btn\", function(e) {\n e.preventDefault();\n\n const clicked = $(this);\n const videoContainer = clicked.siblings(\"iframe\").first();\n\n clicked.hide();\n videoContainer.attr(\"src\", videoContainer.attr(\"data-src\"));\n });\n};","import $ from 'jquery';\n\nexport default () => {\n const menus = $('#header').add('.region-mobile').find('.block-menu .menu');\n const headers = menus.find('.level--1');\n\n headers.click(function(event) {\n const header = $(this);\n\n menus.find('.sub').removeClass('sub--open');\n\n if (header.hasClass('expand')) {\n header.removeClass('expand');\n } else {\n menus.find('.sub').removeClass('sub--open');\n headers.removeClass('expand');\n\n header.addClass('expand')\n .find('.sub').addClass('sub--open');\n }\n });\n\n $(document).click(function(event) {\n const header = headers.filter('.expand');\n const menu = header.closest('.block-menu');\n\n if (menu.find(event.target).length === 0) {\n headers.removeClass('expand');\n menus.find('.sub').removeClass('sub--open');\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n function setGalleryDisplayMedia($gallery, $resourceItem, $prev, $next) {\n let mediaSource = $resourceItem.find('.resource').first().attr('href');\n \n if ($resourceItem.hasClass('selected')) {\n $gallery.find('.gallery-content').first().addClass('selected');\n } else {\n $gallery.find('.gallery-content').first().removeClass('selected');\n }\n\n $gallery.find('#gallery-media')\n .attr('src', mediaSource)\n .data('media', $resourceItem.children('.media').first().attr('id'));\n $gallery.find('.media-download').first().attr('href', mediaSource);\n $gallery.find('.control.next').first().data('target', $next.length === 0 ? null : $next);\n $gallery.find('.control.prev').first().data('target', $prev.length === 0 ? null : $prev);\n }\n\n const $galleries = $('.gallery');\n\n $(document).on('click', '.gallery-caller', function(e) {\n e.preventDefault();\n\n const $clicked = $(this);\n const $resourceItem = $clicked.closest($clicked.data('parent'));\n\n setGalleryDisplayMedia(\n $($clicked.data('target')),\n $clicked.closest($clicked.data('parent')),\n $resourceItem.prev(),\n $resourceItem.next()\n );\n });\n\n $galleries.on('click', '.control', function(e) {\n e.preventDefault();\n\n const $clicked = $(this);\n const $target = $clicked.data('target'); // Next or prev media to show.\n\n if (!$target) {\n return;\n }\n\n setGalleryDisplayMedia(\n $clicked.closest('.gallery'),\n $target,\n $target.prev(),\n $target.next()\n );\n });\n}","import $ from 'jquery';\n\nexport default () => {\n // Show modal.\n $(document).on('click', '.modal-caller', function(e) {\n e.preventDefault();\n\n $($(this).attr('data-target') + '.modal').addClass('show');\n });\n\n // Close modal.\n //$('.close-modal').click(function(e) {\n $(document).on('click', '.close-modal', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const target = $this.data('target');\n let $modal = null;\n\n if (target) {\n $modal = $(target);\n } else {\n $modal = $this.closest('.modal');\n }\n\n $modal.removeClass('show');\n $('#pdf-container', $modal).remove();\n });\n\n // Close all modals whenever user clicks outside modal.\n $(window).click(function(e) {\n const $modal = $(e.target);\n\n if ($modal.is('.modal') && $modal.hasClass('show')) {\n $modal.removeClass('show');\n $('#pdf-container', $modal).remove();\n }\n });\n};\n","import $ from 'jquery';\n\nexport default () => {\n Drupal.behaviors.motions_filter_select = {\n attach: function(context, settings) {\n const $form = $('#views-exposed-form-motions-block-motion-platform').first();\n\n $form.find('select[name=\"type\"]').once('select2-motion-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Type'),\n });\n $form.find('select[name=\"status\"]').once('select2-motion-status').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Status'),\n });\n $form.find('select[name=\"created_year\"]').once('select2-motion-created-year').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Year'),\n }); \n\t $form.find('select[name=\"sort_by\"]').once('select2-sort-by').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Sort'),\n });\n $form.find('select[name=\"field_motion_statutory_number_value\"]').once('select2-motion-field-motion-statutory-number-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Statutory Number'),\n });\n $form.find('select[name=\"field_motion_policy_number_value\"]').once('select2-motion-field-motion-policy-number-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Statutory Number'),\n });\n $form.find('select[name=\"field_motion_status_value_1\"]').once('select2-motion-status-value-1').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Resolution'),\n }); \n\n const $activeform = $('#views-exposed-form-motions-active-motion-list').first();\n\n $activeform.find('select[name=\"type\"]').once('select2-motion-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Type'),\n });\n $activeform.find('select[name=\"status\"]').once('select2-motion-status').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Status'),\n });\n $activeform.find('select[name=\"created_year\"]').once('select2-motion-created-year').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Year'),\n }); \n $activeform.find('select[name=\"sort_by\"]').once('select2-sort-by').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Sort'),\n });\n $activeform.find('select[name=\"field_motion_statutory_number_value\"]').once('select2-motion-field-motion-statutory-number-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Statutory Number'),\n });\n $activeform.find('select[name=\"field_motion_policy_number_value\"]').once('select2-motion-field-motion-policy-number-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Statutory Number'),\n });\n $activeform.find('select[name=\"field_motion_status_value_1\"]').once('select2-motion-status-value-1').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Resolution'),\n }); \n\n\n const $archiveform = $('#views-exposed-form-motions-archive-motion-list').first();\n\n $archiveform.find('select[name=\"type\"]').once('select2-motion-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Type'),\n });\n $archiveform.find('select[name=\"status\"]').once('select2-motion-status').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Status'),\n });\n $archiveform.find('select[name=\"created_year\"]').once('select2-motion-created-year').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Year'),\n }); \n $archiveform.find('select[name=\"sort_by\"]').once('select2-sort-by').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Sort'),\n });\n $archiveform.find('select[name=\"field_motion_statutory_number_value\"]').once('select2-motion-field-motion-statutory-number-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Statutory Number'),\n });\n $archiveform.find('select[name=\"field_motion_policy_number_value\"]').once('select2-motion-field-motion-policy-number-value').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Statutory Number'),\n });\n $archiveform.find('select[name=\"field_motion_status_value_1\"]').once('select2-motion-status-value-1').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Resolution'),\n }); \n\n // $(window).on(\"load\", function () {\n // // $('body').addClass('loader');\n // // $('#spinnerScreen').removeClass('hide');\n // $('.view-display-id-active_motion_list').removeClass('hide');\n // $('.view-display-id-active_motion_list').addClass('show');\n // $('.view-display-id-archive_motion_list').addClass('hide');\n // $('.view-display-id-archive_motion_list').removeClass('show');\n // // $(\".block-views-blockmotions-active-motion-list\").load(location.href + \" .view-display-id-archive_motion_list\");\n // });\n // $(document).ready(function () {\n // $('.view-display-id-active_motion_list').removeClass('hide');\n // $('.view-display-id-active_motion_list').addClass('show');\n // $('.view-display-id-archive_motion_list').addClass('hide');\n // $('.view-display-id-archive_motion_list').removeClass('show');\n // });\n $('.active-motion').click(function(){\n $('.view-display-id-active_motion_list').removeClass('hide');\n $('.view-display-id-active_motion_list').addClass('show');\n $('.view-display-id-archive_motion_list').addClass('hide');\n $('.view-display-id-archive_motion_list').removeClass('show');\n });\n $('.archive-motion').click(function(){\n $('.view-display-id-active_motion_list').addClass('hide');\n $('.view-display-id-active_motion_list').removeClass('show');\n $('.view-display-id-archive_motion_list').removeClass('hide');\n $('.view-display-id-archive_motion_list').addClass('show');\n $(\".block-views-blockmotions-archive-motion-list\").addClass(\"active-tab\");\n });\n\n // Hide & show the filter deponds the page url\n $(function() {\n let searchParams = new URLSearchParams(window.location.search);\n if(searchParams.has('filter_type')) {\n switch (searchParams.get('filter_type')) {\n case 'archive':\n $('.view-display-id-active_motion_list').addClass('hide');\n $('.view-display-id-active_motion_list').removeClass('show');\n $('.view-display-id-archive_motion_list').removeClass('hide');\n $('.view-display-id-archive_motion_list').addClass('show');\n $(\".block-views-blockmotions-archive-motion-list\").addClass(\"active-tab\");\n break;\n case 'active':\n $('.view-display-id-active_motion_list').removeClass('hide');\n $('.view-display-id-active_motion_list').addClass('show');\n $('.view-display-id-archive_motion_list').addClass('hide');\n $('.view-display-id-archive_motion_list').removeClass('show');\n $(\".block-views-blockmotions-archive-motion-list\").removeClass(\"active-tab\");\n break;\n default :\n $('.view-display-id-active_motion_list').removeClass('hide');\n $('.view-display-id-active_motion_list').addClass('show');\n $('.view-display-id-archive_motion_list').addClass('hide');\n $('.view-display-id-archive_motion_list').removeClass('show');\n $(\".block-views-blockmotions-archive-motion-list\").removeClass(\"active-tab\");\n }\n }\n });\n\n // Add commom background for filter\n $('.block-views-blockmotions-archive-motion-list').parents('.content__item').addClass(\"motion-filter\");\n\n $(\".views-exposed-form .form-actions\").click(function() {\n $(this).parents(\".views-element-container.block-views\").addClass(\"active-tab\");\n });\n }\n };\n}\n\n\n(function ($, Drupal) {\n Drupal.behaviors.myModuleBehavior = {\n attach: function (context, settings) {\n\n if(drupalSettings.fsc_motion != undefined) {\n var policy_number = drupalSettings.fsc_motion.motion_number.policy;\n var statutory_number = drupalSettings.fsc_motion.motion_number.statutory;\n }\n\n var elements = document.getElementsByClassName('fake-select-statutory');\n if (!elements.length) {\n // var inputVal = $('.statutory-input-field').val();\n var select = document.createElement(\"select\");\n select.name = \"field_motion_statutory_number_value\";\n select.id = \"edit-field-motion-statutory-number-value\";\n select.setAttribute(\"class\", \"fake-select-statutory\");\n\n for (const val of statutory_number) {\n var option = document.createElement(\"option\");\n option.value = val;\n if(val == 'All'){\n val = 'Statutory Number';\n }\n option.text = val;\n select.appendChild(option);\n }\n $('input[name=\"field_motion_statutory_number_value').remove();\n $(\".form-item-field-motion-statutory-number-value\").append(select);\n $('.form-item-field-motion-statutory-number-value .select2').show();\n }\n\n $('#views-exposed-form-motions-block-motion-platform','#views-exposed-form-motions-archive-motion-list','#views-exposed-form-motions-active-motion-list').click(function(e) { \n if($(e.target).closest('.form-actions').length) {\n var selectedVal = $('.fake-select-statutory').val();\n $('.fake-select-statutory').remove();\n $('.form-item-field-motion-statutory-number-value .select2').hide();\n var inputElement = document.getElementsByClassName('statutory-input-field');\n if(!inputElement.length) {\n $(\".form-item-field-motion-statutory-number-value\").append('');\n $('#edit-field-motion-statutory-number-value').val(selectedVal);\n }\n }\n else if($(e.target).closest('.form-item-field-motion-statutory-number-value').length) {\n return false;\n }\n });\n\n //=========================******=======================================================\n\n var policyElement = document.getElementsByClassName('fake-select-policy');\n if (!policyElement.length) {\n // var inputVal = $('.statutory-input-field').val();\n // console.log(inputVal);\n var policySelect = document.createElement(\"select\");\n policySelect.name = \"field_motion_policy_number_value\";\n policySelect.id = \"edit-field-motion-policy-number-value\";\n policySelect.setAttribute(\"class\", \"fake-select-policy\");\n\n for (const policy of policy_number) {\n var option = document.createElement(\"option\");\n option.value = policy;\n if(policy == 'All'){\n policy = 'Policy Number';\n }\n option.text = policy;\n policySelect.appendChild(option);\n }\n $('input[name=\"field_motion_policy_number_value').remove();\n $(\".form-item-field-motion-policy-number-value\").append(policySelect);\n $('.form-item-field-motion-policy-number-value .select2').show();\n }\n\n $('#views-exposed-form-motions-block-motion-platform','#views-exposed-form-motions-archive-motion-list','#views-exposed-form-motions-active-motion-list').click(function(e) {\n if($(e.target).closest('.form-actions').length) {\n var selectedVal = $('.fake-select-policy').val();\n $('.fake-select-statutory').remove();\n $('.form-item-field-motion-policy-number-value .select2').hide();\n var inputElement = document.getElementsByClassName('policy-input-field');\n if(!inputElement.length) {\n $(\".form-item-field-motion-policy-number-value\").append('');\n $('.policy-input-field').val(selectedVal);\n }\n }\n else if($(e.target).closest('.form-item-field-motion-policy-number-value').length) {\n return false;\n }\n });\n\n }\n };\n})(jQuery, Drupal);\n","import $ from 'jquery';\n\nexport default () => {\n const errorLoading = Drupal.t('The results could not be loaded.');\n const loadingMore = Drupal.t('Loading more results');\n const noResults = Drupal.t('No results found');\n const searching = Drupal.t('Searching');\n const maximumSelected = Drupal.t('You can only select %maximum item');\n const inputTooLong = Drupal.t('Please delete %number character');\n const inputTooShort = Drupal.t('Please enter %number or more characters');\n const selector = '#block-news-page-filters, #views-exposed-form-adria-balkan-newsfeed-page';\n const placeholder = Drupal.t('Category');\n\n Drupal.behaviors.news_filter_select = {\n attach: (context, settings) => {\n $(selector, context).addBack(selector).first().find('select').once('select2').select2({\n // To hide search box\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder,\n language: {\n errorLoading: () => errorLoading,\n loadingMore: () => loadingMore,\n noResults: () => noResults,\n searching: () => searching,\n maximumSelected: ({ maximum }) => maximumSelected.replace('%maximum', maximum),\n inputTooLong: ({ maximum, input: { length } }) => inputTooLong.replace('%number', length - maximum),\n inputTooShort: ({ minimum, input: { length } }) => inputTooShort.replace('%number', minimum - length),\n }\n });\n }\n };\n}\n","import $ from 'jquery';\nimport debounce from 'debounce';\nimport breakpoints, { keys } from './breakpoints';\n\nexport default () => {\n const paragraph = $('.paragraph--type--partners-list');\n const container = paragraph.find('.view-content');\n\n container\n .addClass('owl-carousel owl-theme')\n .owlCarousel({\n rewind: false,\n autoWidth: true,\n loop: true,\n center: true,\n dots: false,\n autoplay: true,\n autoplayHoverPause: true,\n responsive: {\n '0': {\n margin: 15\n },\n '768': {\n margin: 30\n },\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const $document = $(document);\n const $body = $document.find('body');\n const callers = $('.popup-caller');\n const popups = $('.popup');\n const overlay = () => $('
').attr('id', 'overlay');\n\n function handler(e) {\n const { caller, popup } = e.data;\n\n e.stopPropagation();\n\n // if current caller doesn't selected\n // others might be, so let's clear them\n if (!caller.hasClass('selected')) {\n closeAll();\n }\n\n caller.toggleClass('selected');\n popup.toggleClass('opened');\n $document.trigger('popup.opened', [popup]);\n $body.toggleClass('popup-opened');\n\n if (popup.hasClass('with-overlay')) {\n const ol = overlay();\n\n popup.before( ol );\n ol.fadeIn(250);\n $body.addClass('clip');\n }\n }\n\n function closeAll() {\n callers.removeClass('selected');\n popups.removeClass('opened full');\n popups.prev('#overlay').remove();\n $body.removeClass('clip').removeClass('popup-opened');\n }\n\n callers.each(function() {\n const caller = $(this);\n const popupSelector = caller.data('popup');\n let popup;\n\n if (popupSelector) {\n popup = $(popupSelector);\n } else {\n popup = caller.parent().find('.popup');\n }\n\n if (popup.length) {\n caller.click({caller, popup}, handler);\n }\n });\n\n popups.each(function() {\n const popup = $(this);\n const close = popup.find('.close');\n const full = popup.find('.popup-switch-full');\n\n close.click(closeAll);\n\n full.click(() => full.closest('.popup').addClass('full'));\n });\n\n $body.click((e) => {\n // Check if click on document is not associated with popup window,\n // if not close active popup and unselect caller\n if (!$(e.target).closest(popups).length) {\n closeAll();\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const caseListViewsBlockSelector = '#block-views-block-article-list-quick-block-process-list';\n const topicPlaceholder = Drupal.t('Topic');\n const statusPlaceholder = Drupal.t('Status');\n\n Drupal.behaviors.processes_filter_select = {\n attach: function(context, settings) {\n const $form = $(caseListViewsBlockSelector).first();\n\n $form.find('select[name=\"status\"]').once('select2-status').select2({\n // To hide search box.\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: statusPlaceholder,\n });\n $form.find('select[name=\"topic\"]').once('select2-topic').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: topicPlaceholder,\n });\n }\n };\n}","import $ from 'jquery';\nimport breakpoints from './breakpoints';\nimport hash from './hash';\nimport scrollDirection from './scroll-direction';\n\nconst $window = $(window);\nconst $body = $('body');\nconst $header = $('#header');\nconst $quick_links = $('.quick-links');\nconst $placeholder = $quick_links.find('.fixed-placeholder');\n\nfunction clickHandler(event) {\n event.preventDefault();\n\n const id = this.hash.substring(1);\n const $destinationElement = $( document.getElementById(id) );\n const offset = parseInt($body.css('padding-top')) + $header.height() + $quick_links.height();\n\n hash.update('#' + id);\n\n $('html, body').delay(10).animate({\n scrollTop: $destinationElement.offset().top - offset\n }, 700);\n}\n\nfunction isSticky() {\n if (breakpoints.min.bg.matches) {\n scrollHandler();\n $window.on('scroll', scrollHandler);\n } else {\n $window.off('scroll', scrollHandler);\n $quick_links.removeClass('fixed up down');\n $placeholder.removeAttr('style');\n }\n}\n\nfunction scrollHandler() {\n const top = $window.scrollTop() + $header.height() + parseInt($body.css('padding-top'));\n const sd = scrollDirection();\n\n if ($quick_links.offset().top <= top) {\n $placeholder.height($quick_links.height());\n $quick_links.addClass('fixed');\n\n switch(sd) {\n case 'up':\n $quick_links.removeClass('down').addClass('up');\n break;\n case 'down':\n $quick_links.removeClass('up').addClass('down');\n break;\n }\n } else {\n $quick_links.removeClass('fixed up down');\n $placeholder.removeAttr('style');\n }\n}\n\nexport default () => {\n if ($quick_links.length) {\n isSticky();\n breakpoints.min.bg.addListener(isSticky);\n\n $quick_links.find('a').click(clickHandler);\n }\n}\n","import $ from 'jquery';\n\nconst getPageYOffset = () => Math.round(window.pageYOffset);\nlet lastScrollTop = getPageYOffset();\n\nexport default () => {\n const currentScrollTop = getPageYOffset();\n const direction = currentScrollTop > lastScrollTop ? 'down' : 'up';\n\n lastScrollTop = getPageYOffset();\n\n return direction;\n}\n","import $ from 'jquery';\n\nexport default () => {\n $('#block-views-block-featured-content-block-1 .view-content')\n .addClass('owl-carousel owl-theme')\n .owlCarousel({\n loop: true,\n margin: 15,\n responsive: {\n '0': {\n items: 1,\n center: true,\n autoWidth: true,\n slideBy: 1,\n },\n '768': {\n items: 3,\n center: false,\n autoWidth: false,\n slideBy: 3,\n },\n '1280': {\n items: 4,\n slideBy: 4,\n }\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n $('.block-system .view-search input[name=\"search\"]').first().focus();\n\n $(document).on('popup.opened', function(e, popup) {\n if (popup.hasClass('search')) {\n popup.find('.view-search input[name=\"search\"]').first().focus();\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n $('.select2').select2({\n minimumResultsForSearch: 20\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const container = $('.slider').eq(0);\n const slider = $('.slides', container);\n const contentBoxes = slider.find('.slide_content');\n\n if (slider.children().length < 2) {\n return;\n }\n\n slider.bxSlider({\n auto: true,\n pause: 5000,\n autoHover: true,\n controls: false,\n preloadImages: 'all',\n onSliderLoad: () => {\n checkDimensions();\n checkDescriptionHeight();\n },\n onSliderResize: function() {\n checkDimensions();\n checkDescriptionHeight();\n },\n onSlideBefore: function() {\n checkDimensions();\n },\n });\n\n // container.find('.bx-viewport').off('touchstart');\n\n slider.find('a').not('.use-ajax').click(function(event) {\n window.location.href = $(this).attr('href');\n });\n\n $('.next', container).click(() => slider.goToNextSlide());\n $('.prev', container).click(() => slider.goToPrevSlide());\n\n function checkDimensions() {\n const viewHeight = container.height();\n const viewWidth = container.width();\n const viewRatio = viewWidth / viewHeight;\n\n slider.find('.slide')\n .each((i, node) => {\n const slide = $(node);\n const media = slide.find('.slide--background').find('video').eq(0);\n const mediaHeight = media.height();\n const mediaWidth = media.width();\n let mediaRatio = 0;\n\n if (media.data('ratio')) {\n mediaRatio = media.data('ratio');\n } else {\n mediaRatio = mediaWidth / mediaHeight;\n media.data('ratio', mediaRatio);\n }\n\n mediaRatio < viewRatio ? slide.addClass('alt') : slide.removeClass('alt');\n });\n }\n\n function checkDescriptionHeight() {\n const $boxes = slider.find('.slide_content');\n\n $boxes.each(function() {\n const $box = $(this);\n const $desc = $box.children('.description');\n const $p = $desc.find('p');\n\n // Some slides might not has a description\n // so let's check it\n if ($p.length) {\n // Could happend that visible height of .description element is even\n // smaller than line-height of p element which will cause it to be shaved\n // to 0 lines. So we pick what's bigger from the line-height and maxHeight\n $p.shave(Math.max($desc.height(), parseFloat($p.css('line-height'))))\n }\n });\n }\n}\n","import $ from 'jquery';\n\nexport default () => {\n const stickyElements = $(\".paragraph--type--image-text-vert\");\n const stickyBP = window.matchMedia(\"(min-width: 1024px)\"); // stick only if screen width >= 1024\n\n $(\".bullet-list li:first-of-type .paragraph--type--image-text-vert\")\n .addClass(\"current\");\n\n canStick();\n stickyBP.addListener(canStick);\n\n $(window).scroll(function() {\n if (stickyBP.matches) {\n let elem = aboveBorder($(\".static-content\"));\n\n if (elem) { // if any element at the top\n toggleSticky( // make it visible and hide others\n elem.closest(\"li\").find(\".paragraph--type--image-text-vert\").first()\n );\n }\n }\n });\n\n /**\n * @return void\n */\n function canStick() {\n if (stickyBP.matches) {\n make_sticky();\n } else {\n stickyElements.trigger(\"sticky_kit:detach\");\n }\n }\n\n /**\n * Get the last element with position above border\n *\n * @param jQuery elements\n * @param int border\n *\n * @return jQuery\n */\n function aboveBorder(elements, border = 210) {\n let result = null;\n\n elements.each(function(key, elem) {\n let top = elem.getBoundingClientRect().top;\n\n if (top <= border) {\n result = elem;\n }\n });\n\n return result ? $(result) : null;\n }\n\n /**\n * Shows elem and hides other sticky elements\n *\n * By default all sticky elements are hidden.\n * Class '.current' makes sticky element visible.\n */\n function toggleSticky(elem) {\n if (!elem.hasClass(\"current\")) {\n $(\"li .paragraph--type--image-text-vert.current\").removeClass(\"current\");\n elem.addClass(\"current\");\n }\n }\n\n function make_sticky() {\n $(\".paragraph--type--image-text-bullet-list .paragraph--type--image-text-vert\")\n .stick_in_parent({\n parent: \".paragraph--type--image-text-bullet-list\",\n offset_top: 200,\n spacer: false\n });\n $(\"li .paragraph--type--image-text-vert\").stick_in_parent({\n // parent: \"li\",\n parent: \"ul\",// \".paragraph--type--custom-bullet-list\",\n offset_top: 200,\n spacer: false,\n recalc_every: 10\n });\n }\n};\n","import $ from 'jquery';\n\nexport default () => {\n $('.custom-tabs').on('click', '.custom-tabs--nav-item', function(e) {\n e.stopPropagation();\n\n const $this = $(this);\n const $parent = $this.closest('.custom-tabs');\n\n // Set active tab.\n if ($parent.length > 0) {\n const target = $this.data('target');\n\n if (target) {\n $('.custom-tabs--item', $parent).removeClass('active');\n $(`#${target}`, $parent).addClass('active');\n\n // Set active nav item.\n const $parentNav = $this.closest('.custom-tabs--nav');\n\n if ($parentNav.length > 0) {\n $('.custom-tabs--nav-item', $parentNav).removeClass('active');\n }\n\n $this.addClass('active');\n }\n }\n });\n\n $('.tabbed').each(function(index, el) {\n const $mobile_container = $('.mobile', this);\n const $mobile_switches = $('.tab__switch', $mobile_container);\n const $normal_container = $('.normal', this);\n const $normal_switches = $('.tab__switch', $normal_container);\n const $tabs = $('.tab', this);\n\n $normal_switches.click(function(event) {\n const $switch = $(this);\n\n event.preventDefault();\n\n $tabs\n .add($mobile_switches).add($normal_switches)\n .removeClass('active')\n .filter(`[data-tab-id=${ $switch.data('tab-id') }]`)\n .addClass('active');\n\n $normal_container.addClass('hide');\n });\n\n $mobile_container.click(function() {\n $normal_container.removeClass('hide');\n });\n });\n}\n","import $ from 'jquery';\nimport breakpoints from './breakpoints';\n\nconst $window = $(window);\nconst $document = $(document);\nconst $body = $('body');\nconst $header = $('#header');\nconst $quickLinks = $('.quick-links');\n\nconst $paragraph = $('.paragraph--type--timeline-information');\nconst $sidebar = $paragraph.find('.sidebar');\nconst $content = $paragraph.find('.content');\nconst $titlesList = $paragraph.find('.titles-list');\nconst $titles = $paragraph.find('.title');\nconst $panels = $paragraph.find('.panel');\nconst $switches = $paragraph.find('.panel-switch');\nconst $covers = $paragraph.find('.title-cover');\n\nconst spacer = 30;\nlet isStuck = false;\n\nfunction showTitlesList() {\n const $cover = $(this);\n const $title = $cover.parent();\n const top = $title.position().top + $title.height();\n\n $cover\n .addClass('active');\n\n $titlesList\n .addClass('show')\n .css({ top });\n}\n\nfunction hideTitlesList() {\n $titlesList\n .removeClass('show')\n .removeAttr('style');\n\n $covers\n .removeClass('active');\n}\n\nfunction setActiveTitle(key) {\n $titles\n .removeClass('active')\n .filter((i) => $titles.eq(i).data('timeline') == key)\n .addClass('active');\n}\n\nfunction setActivePanel(id) {\n $content\n .height($content.height());\n\n $panels\n .removeClass('active')\n .filter(id)\n .addClass('active')\n\n $content\n .removeAttr('style');\n}\n\nfunction scrollToPanel() {\n if (isStuck) {\n $window.scrollTop($content.offset().top - getOffset());\n }\n}\n\nfunction switchPanel(event) {\n event.preventDefault();\n\n const $switcher = $(this);\n const id = $switcher.attr('href');\n const key = id.replace('#timeline-', '');\n\n hideTitlesList();\n setActiveTitle(key);\n setActivePanel(id);\n scrollToPanel();\n recalcStickyKit();\n}\n\nfunction isSticky() {\n return breakpoints.min.bg.matches;\n}\n\nfunction initStickyKit() {\n const offset_top = getOffset();\n\n $sidebar\n .off('sticky_kit:stick sticky_kit:unstick')\n .trigger('sticky_kit:detach')\n .stick_in_parent({ offset_top })\n .on('sticky_kit:stick', () => { isStuck = true })\n .on('sticky_kit:unstick', () => { isStuck = false });\n}\n\nfunction destroyStickyKit() {\n $sidebar\n .off('sticky_kit:stick sticky_kit:unstick')\n .trigger('sticky_kit:detach');\n\n isStuck = false;\n}\n\nfunction getOffset() {\n return Drupal.displace.calculateOffset('top') + $header.height() + ($quickLinks.height() || 0) + spacer;\n}\n\nfunction updateStickyKit() {\n if (isStuck) {\n initStickyKit();\n }\n}\n\nfunction recalcStickyKit() {\n $sidebar\n .trigger('sticky_kit:recalc');\n}\n\nfunction testStickyKit() {\n if (isSticky()) {\n initStickyKit();\n\n $document.on('drupalViewportOffsetChange', updateStickyKit);\n } else {\n destroyStickyKit();\n\n $document.off('drupalViewportOffsetChange', updateStickyKit);\n }\n}\n\nexport default () => {\n testStickyKit();\n breakpoints.min.bg.addListener(testStickyKit);\n\n $covers.click(showTitlesList);\n $switches.click(switchPanel);\n\n setTimeout(() => {\n if (isSticky() && !isStuck) {\n initStickyKit();\n }\n }, 150);\n}\n","import $ from 'jquery';\nimport lineHeight from './lineHeight';\nimport breakpoints, { keys } from './breakpoints';\n\nexport function truncateByLines($element) {\n const lh = lineHeight($element);\n const lines = parseInt($element.data('truncateLines')) || 4;\n\n $element.shave(lh * lines)\n}\n\nexport function truncateByHeight($element) {\n const $container = $element.children('.truncate-container');\n const maxHeight = $element.height();\n const minHeight = lineHeight($element);\n\n $container.shave(Math.max(minHeight, maxHeight));\n}\n\nexport default () => {\n Drupal.behaviors.truncateByHeight = {\n attach: function(context, settings) {\n $('.truncate-by-height', context).once('truncate')\n .wrapInner('
')\n .each((i, node) => {\n truncateByHeight($(node));\n });\n }\n };\n\n Drupal.behaviors.truncateByLines = {\n attach: function(context, settings) {\n $('.truncate-by-lines', context).once('truncate')\n .each((i, node) => {\n truncateByLines($(node));\n });\n }\n };\n\n Object.values(breakpoints.min).forEach((mq) => {\n mq.addListener(() => {\n $('.truncate-by-height').each((i, node) => {\n truncateByHeight($(node));\n });\n\n $('.truncate-by-lines').each((i, node) => {\n truncateByLines($(node));\n });\n })\n });\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3ZhbGlkYXRlLWNvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2guanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJzcmMvc2NyaXB0cy9lbnRyeS5qcyIsInNyYy9zY3JpcHRzL2dsb2JhbC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvYWNjb3JkaW9uLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9iNy5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvYnJlYWtwb2ludHMuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2Nhc2UtZmlsdGVyLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9jZXJ0aWZpZWQuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2NvbnRhY3QtZm9ybS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvZG9jdW1lbnQtY2VudHJlLWZpbHRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvZXZlbnQtZmlsdGVyLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9mYWRlSW5VcC1sb2dvLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9ndG0uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2hhc2guanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2luLXZpZXcuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2xpbmVIZWlnaHQuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21hcC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbWVkaWEtcmVzb3VyY2Utc2VsZWN0LmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9tZWRpYS1yZXNvdXJjZXMtcGxheS12aWRlby5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbW9iaWxlX21lbnUuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21vZGFsLWdhbGxlcnkuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21vZGFsLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9tb3Rpb25zLWZpbHRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbmV3cy1maWx0ZXItY2F0ZWdvcnktZGQuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3BhcnRuZXJzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9wb3B1cC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvcHJvY2Vzcy1maWx0ZXIuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3F1aWNrX2xpbmtzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9zY3JvbGwtZGlyZWN0aW9uLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9zZWFyY2gtZmVhdHVyZWQtY29udGVudC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvc2VhcmNoQXV0b0ZvY3VzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9zZWxlY3QyLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9zbGlkZXIuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3N0aWNreS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvdGFicy5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvdGltZWxpbmUuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3RydW5jYXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTs7QUNEQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LElBREgsQ0FDUSxVQUFDLENBQUQsRUFBSSxJQUFKLEVBQWE7QUFDakIsUUFBQSxlQUFlLENBQUMscUJBQUUsSUFBRixDQUFELENBQWY7QUFDRCxPQUhIO0FBSUQ7QUFOZ0MsR0FBbkM7QUFTQSxFQUFBLE1BQU0sQ0FBQyxNQUFQLENBQWMscUJBQVksR0FBMUIsRUFBK0IsT0FBL0IsQ0FBdUMsVUFBQyxFQUFELEVBQVE7QUFDN0MsSUFBQSxFQUFFLENBQUMsV0FBSCxDQUFlLFlBQU07QUFDbkIsMkJBQUUscUJBQUYsRUFBeUIsSUFBekIsQ0FBOEIsVUFBQyxDQUFELEVBQUksSUFBSixFQUFhO0FBQ3pDLFFBQUEsZ0JBQWdCLENBQUMscUJBQUUsSUFBRixDQUFELENBQWhCO0FBQ0QsT0FGRDtBQUlBLDJCQUFFLG9CQUFGLEVBQXdCLElBQXhCLENBQTZCLFVBQUMsQ0FBRCxFQUFJLElBQUosRUFBYTtBQUN4QyxRQUFBLGVBQWUsQ0FBQyxxQkFBRSxJQUFGLENBQUQsQ0FBZjtBQUNELE9BRkQ7QUFHRCxLQVJEO0FBU0QsR0FWRDtBQVdELEMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0V2VhayA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xudmFyICRoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbnZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYSA9IFtdO1xufTtcbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5hLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGlkKys7ICAgICAgLy8gY29sbGVjdGlvbiBpZFxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgLy8gbGVhayBzdG9yZSBmb3IgdW5jYXVnaHQgZnJvemVuIG9iamVjdHNcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4zLjMuNCBXZWFrTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuNC4zLjQgV2Vha1NldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgZWxzZSBkYXRhW3RoYXQuX2ldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgcmVkZWZpbmUocHJvdG8sIEtFWSxcbiAgICAgIEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSkgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7IHJldHVybiB0aGlzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gc2V0KGEsIGIpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEsIGIpOyByZXR1cm4gdGhpczsgfVxuICAgICk7XG4gIH07XG4gIGlmICh0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHsgbmV3IEMoaXRlcik7IH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSgpLCB0YXJnZXQsIEMpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBwcm90by5jbGVhcikgZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTEnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjQgTnVtYmVyLmlzTmFOKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkR09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJyAmJiAhISRHT1BTLmY7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICRHT1BTLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxzKGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogRkFJTFNfT05fUFJJTUlUSVZFUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gJEdPUFMuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHRydW5jYXRlIGZyb20gJy4vbW9kdWxlcy90cnVuY2F0ZSc7XG5pbXBvcnQgcG9wdXAgZnJvbSAnLi9tb2R1bGVzL3BvcHVwJztcbmltcG9ydCBzbGlkZXIgZnJvbSAnLi9tb2R1bGVzL3NsaWRlcic7XG5pbXBvcnQgbW9kYWwgZnJvbSAnLi9tb2R1bGVzL21vZGFsJztcbmltcG9ydCBtb2RhbEdhbGxlcnkgZnJvbSAnLi9tb2R1bGVzL21vZGFsLWdhbGxlcnknO1xuaW1wb3J0IG1lZGlhUmVzb3VyY2VzUGxheVZpZGVvQnRuIGZyb20gJy4vbW9kdWxlcy9tZWRpYS1yZXNvdXJjZXMtcGxheS12aWRlbyc7XG5pbXBvcnQgYWNjb3JkaW9uIGZyb20gJy4vbW9kdWxlcy9hY2NvcmRpb24nO1xuaW1wb3J0IG1lZGlhUmVzb3VyY2VTZWxlY3QgZnJvbSAnLi9tb2R1bGVzL21lZGlhLXJlc291cmNlLXNlbGVjdCc7XG5pbXBvcnQgbW9iaWxlX21lbnUgZnJvbSAnLi9tb2R1bGVzL21vYmlsZV9tZW51JztcbmltcG9ydCBjZXJ0aWZpZWQgZnJvbSAnLi9tb2R1bGVzL2NlcnRpZmllZCc7XG5pbXBvcnQgaW5fdmlldyBmcm9tICcuL21vZHVsZXMvaW4tdmlldyc7XG5pbXBvcnQgbmV3c0ZpbHRlckNhdGVnb3J5RGQgZnJvbSAnLi9tb2R1bGVzL25ld3MtZmlsdGVyLWNhdGVnb3J5LWRkJztcbmltcG9ydCBzdGlja3kgZnJvbSAnLi9tb2R1bGVzL3N0aWNreSc7XG5pbXBvcnQgYjcgZnJvbSAnLi9tb2R1bGVzL2I3JztcbmltcG9ydCBjb250YWN0Rm9ybSBmcm9tICcuL21vZHVsZXMvY29udGFjdC1mb3JtJztcbmltcG9ydCBxdWlja19saW5rcyBmcm9tICcuL21vZHVsZXMvcXVpY2tfbGlua3MnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21vZHVsZXMvbWFwJztcbmltcG9ydCBwYXJ0bmVycyBmcm9tICcuL21vZHVsZXMvcGFydG5lcnMnO1xuaW1wb3J0IHRpbWVsaW5lIGZyb20gJy4vbW9kdWxlcy90aW1lbGluZSc7XG5pbXBvcnQgY2FzZUZpbHRlciBmcm9tICcuL21vZHVsZXMvY2FzZS1maWx0ZXInO1xuaW1wb3J0IHByb2Nlc3NGaWx0ZXIgZnJvbSAnLi9tb2R1bGVzL3Byb2Nlc3MtZmlsdGVyJztcbmltcG9ydCBkb2N1bWVudENlbnRyZUZpbHRlciBmcm9tICcuL21vZHVsZXMvZG9jdW1lbnQtY2VudHJlLWZpbHRlcic7XG5pbXBvcnQgdGFicyBmcm9tICcuL21vZHVsZXMvdGFicyc7XG5pbXBvcnQgc2VhcmNoQXV0b0ZvY3VzIGZyb20gJy4vbW9kdWxlcy9zZWFyY2hBdXRvRm9jdXMnO1xuaW1wb3J0IGZhZGVJblVwbG9nbyBmcm9tICcuL21vZHVsZXMvZmFkZUluVXAtbG9nbyc7XG5pbXBvcnQgc2VsZWN0MiBmcm9tICcuL21vZHVsZXMvc2VsZWN0Mic7XG5pbXBvcnQgZ3RtIGZyb20gJy4vbW9kdWxlcy9ndG0nO1xuaW1wb3J0IHNlYXJjaEZlYXR1cmVkQ29udGVudCBmcm9tICcuL21vZHVsZXMvc2VhcmNoLWZlYXR1cmVkLWNvbnRlbnQuanMnO1xuaW1wb3J0IG1vdGlvbnNfZmlsdGVyIGZyb20gJy4vbW9kdWxlcy9tb3Rpb25zLWZpbHRlcic7XG5pbXBvcnQgZXZlbnRfZmlsdGVyIGZyb20gJy4vbW9kdWxlcy9ldmVudC1maWx0ZXInO1xuaW1wb3J0IGdsb2JhbCBmcm9tICcuL2dsb2JhbCc7XG4vLyBpbXBvcnQgZG9jdW1lbnRfc2VhcmNoIGZyb20gJy4vZG9jdW1lbnQtc2VhcmNoJztcblxuW1xuICB0cnVuY2F0ZSwgLy8gRHJ1cGFsIEJlaGF2aW9yXG5cbiAgcG9wdXAsXG4gIHNsaWRlcixcbiAgbW9kYWwsXG4gIG1vZGFsR2FsbGVyeSxcbiAgbWVkaWFSZXNvdXJjZXNQbGF5VmlkZW9CdG4sXG4gIGFjY29yZGlvbixcbiAgbWVkaWFSZXNvdXJjZVNlbGVjdCxcbiAgbW9iaWxlX21lbnUsXG4gIGNlcnRpZmllZCxcbiAgaW5fdmlldyxcbiAgbmV3c0ZpbHRlckNhdGVnb3J5RGQsXG4gIHN0aWNreSxcbiAgYjcsXG4gIGNvbnRhY3RGb3JtLFxuICBxdWlja19saW5rcyxcbiAgbWFwLFxuICBwYXJ0bmVycyxcbiAgdGltZWxpbmUsXG4gIGNhc2VGaWx0ZXIsXG4gIHByb2Nlc3NGaWx0ZXIsXG4gIGRvY3VtZW50Q2VudHJlRmlsdGVyLFxuICB0YWJzLFxuICBzZWFyY2hBdXRvRm9jdXMsXG4gIGZhZGVJblVwbG9nbyxcbiAgc2VsZWN0MixcbiAgZ3RtLFxuICBzZWFyY2hGZWF0dXJlZENvbnRlbnQsXG4gIG1vdGlvbnNfZmlsdGVyLFxuICBldmVudF9maWx0ZXJcbl0uZm9yRWFjaChcbiAgbW9kdWxlID0+IHsgbW9kdWxlKCk7IH1cbik7XG4iLCIoZnVuY3Rpb24gKCQsIERydXBhbCkge1xuICBEcnVwYWwuYmVoYXZpb3JzLm15TW9kdWxlQmVoYXZpb3IgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbiAoY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAkKCdbaWRePW9wZW5wb3Btc2ddJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICQoXCIubXNnbW90aW9uZWRpdFwiKS50b2dnbGUoKTtcblx0fSk7XG4gICAgJCgnLm1zZ21vdGlvbmVkaXQtY2xvc2UtYnRuJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICQoXCIubXNnbW90aW9uZWRpdFwiKS50b2dnbGUoKTtcblx0fSk7XG5cdCQoJ1tpZF49b3BlbnBvcG1zZ10nKS5jbGljayhmdW5jdGlvbigpIHtcblx0XHQkKCdib2R5JykudG9nZ2xlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcblx0XHQkKFwiLm1zZ21vdGlvbmVkaXQtd3JhcHBlclwiKS5mYWRlVG8oMjAwLCAxKTtcblx0fSk7XG5cdCQoXCIubXNnbW90aW9uZWRpdC1jbG9zZS1idG5cIikuY2xpY2soZnVuY3Rpb24oKSB7XG5cdFx0JCgnYm9keScpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XG5cdFx0JChcIi5tc2dtb3Rpb25lZGl0LXdyYXBwZXJcIikuZmFkZU91dCgyMDApO1xuXHR9KTtcblxuICAvLyBGb3IgbG9hZGVyXG4gICQoJ2Rpdi5zbGlkZV9jb250ZW50IC5saW5rcyAuZmllbGQtLW5hbWUtZmllbGQtbGluayBhJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIC8vYWxlcnQoJ2NsaWNrZWQnKTtcbiAgICB2YXIgbW90aW9uYnRuID0gJCh0aGlzKS50ZXh0KCkudHJpbSgpO1xuICAgIC8vYWxlcnQobW90aW9uYnRuKTtcbiAgICBpZihtb3Rpb25idG4gPT0gJ1N1Ym1pdCB5b3VyIE1vdGlvbnMnKXtcbiAgICAgIC8vYWxlcnQoJ21vdGlvbiBidG4gY2xpY2tlZCcpO1xuICAgICAgLy8kKCcjbW90aW9uX2xvYWRlcicpLnNob3coKTtcbiAgICAgIC8vJCgnYm9keScpLmFkZENsYXNzKCdsb2FkZXInKTtcbiAgICAgIC8vJCgnI3NwaW5uZXJTY3JlZW4nKS5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgICAgLy8kKCcjbW90aW9uX2xvYWRlcicpLmNzcygnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgJCgnI21haW5sb2FkZXJPdmVybGF5Jykuc2hvdygpO1xuICAgICAgLy9oaXN0b3J5LnB1c2hTdGF0ZSh7IHBhZ2U6IFwibW90aW9uXCIgfSwgXCJtb3Rpb25cIiwgXCJhZGQvbW90aW9uXCIpOyAgICAgICAgXG4gICAgfTtcbiAgfSk7ICAgXG4gICQoJ2Rpdi5jb2x1bW4gdWwgbGkgYScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAvL2FsZXJ0KCdjbGlja2VkJyk7XG4gICAgdmFyIG1vdGlvbmJ0biA9ICQodGhpcykudGV4dCgpLnRyaW0oKTtcbiAgICAvL2FsZXJ0KG1vdGlvbmJ0bik7XG4gICAgaWYobW90aW9uYnRuID09ICdTdWJtaXQgYSBtb3Rpb24nKXtcbiAgICAgLy8gYWxlcnQoJ21vdGlvbiBidG4gY2xpY2tlZCcpO1xuICAgICAgLy8kKCdib2R5JykuYWRkQ2xhc3MoJ2xvYWRlcicpO1xuICAgICAgLy8kKCcjc3Bpbm5lclNjcmVlbicpLnJlbW92ZUNsYXNzKCdoaWRlJyk7XG4gICAgICAvLyQoJyNtb3Rpb25fbG9hZGVyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAvLyQoJ2JvZHknKS5hZnRlcignPGRpdiBpZD1cImxvYWRlck92ZXJsYXlcIj48ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PjwvZGl2PicpO1xuICAgICAgJCgnI21haW5sb2FkZXJPdmVybGF5Jykuc2hvdygpO1xuICAgICAgLy9oaXN0b3J5LnB1c2hTdGF0ZSh7IHBhZ2U6IFwibW90aW9uXCIgfSwgXCJtb3Rpb25cIiwgXCJhZGQvbW90aW9uXCIpOyAgICAgICAgXG4gICAgfTtcbiAgfSk7XG5cdCQod2luZG93KS5vbigncGFnZXNob3cnLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0Ly8gWW91ciBKYXZhU2NyaXB0IGNvZGUgaGVyZVxuXHRcdFx0JCgnI21haW5sb2FkZXJPdmVybGF5JykuaGlkZSgpO1xuXHRcdFx0Y29uc29sZS5sb2coJ1BhZ2UgbG9hZGVkIG9yIGNhbWUgYmFjayB1c2luZyB0aGUgYmFjayBidXR0b24nKTtcblx0fSk7XHRcdFxuXHRcdH1cbiAgfTtcbn0pKGpRdWVyeSwgRHJ1cGFsKTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgJHdpbmRvdyA9ICQod2luZG93KTtcblxuICAkKCcubWVudS0tbWVkaWEtcmVzb3VyY2VzLW1lbnUnKS5vbignY2xpY2snLCAnLm5hdi10YWJzLXRvZ2dsZXInLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkdGhpcy5kYXRhKCd0YXJnZXQnKTtcblxuICAgICQoJHRhcmdldCkudG9nZ2xlQ2xhc3MoJ2Rpc3BsYXktbm9uZScpO1xuICB9KTtcblxuICAkKCcuYWNjb3JkaW9uLWxpc3QnKS5vbignY2xpY2snLCAnLmxpLWNvbnRlbnQtdG9nZ2xlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJHRhcmdldCA9ICR0aGlzLmNsb3Nlc3QoJ2xpJykuZmluZCgnLmxpLWNvbnRlbnQnKTtcbiAgICBjb25zdCBvZmZzZXRUb3AgPSAkdGhpcy5vZmZzZXQoKS50b3A7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gJHdpbmRvdy5zY3JvbGxUb3AoKTtcblxuICAgIC8vIElmIHRhcmdldCBpcyBub3QgYWxyZWFkeSBleHBhbmRlZC5cbiAgICBpZiAoISR0aGlzLmhhc0NsYXNzKCd1cCcpKSB7XG4gICAgICAvLyBDb2xsYXBzZSBvdGhlcnMgLmxpLXRleHQgaW4gYWNjb3JkaW9uLlxuICAgICAgY29uc3QgJGFjY29yZGlvbiA9ICR0aGlzLmNsb3Nlc3QoJy5hY2NvcmRpb24tbGlzdCcpO1xuXG4gICAgICAkKCcubGktY29udGVudCcsICRhY2NvcmRpb24pLmhpZGUoKTtcbiAgICAgICQoJy5saS1jb250ZW50LXRvZ2dsZXInLCAkYWNjb3JkaW9uKS5yZW1vdmVDbGFzcygndXAnKTtcbiAgICB9XG5cbiAgICBpZiAoJHRhcmdldC5sZW5ndGggPiAwKSB7XG4gICAgICAkdGFyZ2V0LnRvZ2dsZSgpO1xuICAgICAgJHRoaXMudG9nZ2xlQ2xhc3MoJ3VwJyk7XG4gICAgICBjb25zdCAkdG8gPSAkdGFyZ2V0LmlzKCc6dmlzaWJsZScpID8gJHRhcmdldCA6ICR0aGlzO1xuXG4gICAgICAkd2luZG93LnNjcm9sbFRvcCgkdG8ub2Zmc2V0KCkudG9wIC0gKG9mZnNldFRvcCAtIHNjcm9sbFRvcCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5hY2NvcmRpb24gLmFjY29yZGlvbi10b2dnbGUnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAvL3ZhciAkYWN0aXZlQWNjb3JkaW9uQm90dG9tID0gJCh0aGlzKS5jbG9zZXN0KCcuYWNjb3JkaW9uIC5hY2NvcmRpb24tdG9nZ2xlJykubmV4dCgnLmJvdHRvbS10b29nbGUtaWNvbicpO1xuICAgIC8vIFBCSSAjMjg0NjUgLSBHaXZpbmcgdGhlIG9wdGlvbiB0byBjbG9zZSB0aGUgY29udGVudCB3aGlsZSBzY3JvbGxpbmdcbiAgICB2YXIgJGFjdGl2ZUFjY29yZGlvbkNsb3NlID0gJCh0aGlzKS5jbG9zZXN0KCcuYWNjb3JkaW9uIC5hY2NvcmRpb24tdG9nZ2xlJykubmV4dCgnLmFjY29yZGlvbi10b2dnbGUtY2xvc2UtYnRuJyk7XG4gICAgaWYgKCRhY3RpdmVBY2NvcmRpb25DbG9zZS5oYXNDbGFzcygnaGlkZScpKSB7XG4gICAgICAkYWN0aXZlQWNjb3JkaW9uQ2xvc2UuYWRkQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICRhY3RpdmVBY2NvcmRpb25DbG9zZS5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYWN0aXZlQWNjb3JkaW9uQ2xvc2UuYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICRhY3RpdmVBY2NvcmRpb25DbG9zZS5yZW1vdmVDbGFzcygnc2hvdycpO1xuICAgIH1cbiAgICAvLyAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAvLyBpZiAoJGFjdGl2ZUFjY29yZGlvbkJvdHRvbS5oYXNDbGFzcygnc2hvdycpKSB7XG4gICAgLy8gICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLmFkZENsYXNzKCdoaWRlJyk7XG4gICAgLy8gICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgLy8gfSBcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7ICAgIFxuICAgIC8vICAgdmFyIHNjcm9sbCA9ICQod2luZG93KS5zY3JvbGxUb3AoKTtcbiAgICAvLyAgIGlmIChzY3JvbGwgPj0gNzUwKSB7XG4gICAgLy8gICAgICRhY3RpdmVBY2NvcmRpb25Cb3R0b20uYWRkQ2xhc3MoJ3Nob3cnKTtcbiAgICAvLyAgICAgJGFjdGl2ZUFjY29yZGlvbkJvdHRvbS5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgJGFjdGl2ZUFjY29yZGlvbkJvdHRvbS5hZGRDbGFzcygnaGlkZScpO1xuICAgIC8vICAgICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH0pO1xuXG4gIC8vIFBCSSAjMjg0NjUgLSBHaXZpbmcgdGhlIG9wdGlvbiB0byBjbG9zZSB0aGUgY29udGVudCB3aGlsZSBzY3JvbGxpbmdcbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5hY2NvcmRpb24gLmFjY29yZGlvbi10b2dnbGUtY2xvc2UtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ3Nob3cnKS5hZGRDbGFzcygnaGlkZScpO1xuICAgICQodGhpcykucGFyZW50KCcucHJvZmlsZS1jb250ZW50LmFjY29yZGlvbicpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgfSk7XG5cbiAgLy8gUEJJICMyODQ2NSAtIEdpdmluZyB0aGUgb3B0aW9uIHRvIGNsb3NlIHRoZSBjb250ZW50IHdoaWxlIHNjcm9sbGluZ1xuICAvLyAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmFjY29yZGlvbiAuYm90dG9tLXRvb2dsZS1pY29uJywgZnVuY3Rpb24oZSkge1xuICAvLyAgIHZhciAkYWN0aXZlQWNjb3JkaW9uQm90dG9tID0gJCh0aGlzKS5jbG9zZXN0KCcuYWNjb3JkaW9uIC5ib3R0b20tdG9vZ2xlLWljb24nKTtcbiAgLy8gICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgLy8gICBpZiAoJGFjdGl2ZUFjY29yZGlvbkJvdHRvbS5oYXNDbGFzcygnc2hvdycpKSB7XG4gIC8vICAgICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLmFkZENsYXNzKCdoaWRlJyk7XG4gIC8vICAgICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gIC8vICAgfSBcbiAgLy8gICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkgeyAgICBcbiAgLy8gICAgIHZhciBzY3JvbGwgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG4gIC8vICAgICBpZiAoc2Nyb2xsID49IDc1MCkge1xuICAvLyAgICAgICAkYWN0aXZlQWNjb3JkaW9uQm90dG9tLmFkZENsYXNzKCdzaG93Jyk7XG4gIC8vICAgICAgICRhY3RpdmVBY2NvcmRpb25Cb3R0b20ucmVtb3ZlQ2xhc3MoJ2hpZGUnKTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICRhY3RpdmVBY2NvcmRpb25Cb3R0b20uYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgLy8gICAgICAgJGFjdGl2ZUFjY29yZGlvbkJvdHRvbS5yZW1vdmVDbGFzcygnc2hvdycpO1xuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9KTtcblxuICAkKCcuYWNjb3JkaW9uJykub24oJ2NsaWNrJywgJy5hY2NvcmRpb24taXRlbS10cmlnZ2VyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCAkY3VycmVudEl0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QoJy5hY2NvcmRpb24taXRlbScpO1xuICAgIGNvbnN0ICRhbGxJdGVtcyA9ICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbicpLmZpbmQoJy5hY2NvcmRpb24taXRlbScpO1xuXG4gICAgaWYgKCRjdXJyZW50SXRlbS5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICRjdXJyZW50SXRlbS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICB9IGVsc2Uge1xuICAgICAgJGFsbEl0ZW1zLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICRjdXJyZW50SXRlbS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG4vLyAxMDAwbXMgPSAxc1xuY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0gMTAwMDtcbmZ1bmN0aW9uIENhcm91c2VsKCRlbCkge1xuICBjb25zdCAkdGhpcyA9IHRoaXM7XG5cbiAgJHRoaXMubW9kdWxlID0gJGVsO1xuXG4gICR0aGlzLl9taW5TY2FsZSA9IDAuNjtcbiAgJHRoaXMuX21pbk9mZnNldCA9IDAuNTtcbiAgJHRoaXMuX2JyZWFrcG9pbnRzID0ge1xuICAgIHBoOiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogNDgwcHgpJyksXG4gICAgbWQ6IHdpbmRvdy5tYXRjaE1lZGlhKCcobWluLXdpZHRoOiA3NjhweCknKSxcbiAgICBiZzogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEwMjRweCknKSxcbiAgICBsZzogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEyODBweCknKSxcbiAgICB4bDogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDE0NDBweCknKSxcbiAgfTtcbiAgJHRoaXMuc2V0dGluZ3MgPSB7XG4gICAgYXV0bzoge1xuICAgICAgcGxheTogdHJ1ZSxcbiAgICAgIHRpbWU6IDUwMDAsXG4gICAgICBpbnRlcnZhbDogbnVsbCxcbiAgICB9XG4gIH07XG5cbiAgJHRoaXMuZGF0YSA9IFtdO1xuXG4gICR0aGlzLmluaXRBdXRvUGxheSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLnBsYXkpIHtcbiAgICAgICR0aGlzLnN0YXJ0QXV0bygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5zdG9wQXV0bygpO1xuICAgIH1cblxuICAgICR0aGlzLm1vZHVsZS5ob3ZlcihmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7XG4gICAgICAgICR0aGlzLnN0b3BBdXRvKCk7XG4gICAgICAgICR0aGlzLnNldHRpbmdzLmF1dG8uYXV0b1BhdXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoJHRoaXMuc2V0dGluZ3MuYXV0by5hdXRvUGF1c2VkKSB7XG4gICAgICAgICR0aGlzLnN0YXJ0QXV0bygpO1xuICAgICAgICAkdGhpcy5zZXR0aW5ncy5hdXRvLmF1dG9QYXVzZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCh3aW5kb3cpXG4gICAgICAuZm9jdXMoZnVuY3Rpb24oKSB7ICR0aGlzLnN0YXJ0QXV0bygpOyB9KVxuICAgICAgLmJsdXIoZnVuY3Rpb24oKSB7ICR0aGlzLnN0b3BBdXRvKCk7IH0pO1xuICB9O1xuXG4gICR0aGlzLnN0YXJ0QXV0byA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7IHJldHVybjsgfVxuXG4gICAgJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgJHRoaXMuZ29Ub05leHRDYXJkKCk7XG4gICAgfSwgJHRoaXMuc2V0dGluZ3MuYXV0by50aW1lKTtcbiAgfTtcblxuICAkdGhpcy5zdG9wQXV0byA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCkgeyByZXR1cm47IH1cblxuICAgIGNsZWFySW50ZXJ2YWwoJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCk7XG4gICAgJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCA9IG51bGw7XG4gIH07XG5cbiAgJHRoaXMuc2V0RWxlbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5jb250YWluZXIgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWNhcmRzJyk7XG4gICAgJHRoaXMuY2FyZHNXcmFwcGVyID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1jYXJkcycpO1xuICAgICR0aGlzLmNhcmRzID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1jYXJkJyk7XG4gICAgJHRoaXMuYm9keXNXcmFwcGVyID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1ib2R5cycpO1xuICAgICR0aGlzLmJvZHlzID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1ib2R5Jyk7XG5cbiAgICAkdGhpcy5jYXJkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBjYXJkKSB7XG4gICAgICBjYXJkLm9yaWdpbmFsSUQgPSBpbmRleDtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5nZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgJHRoaXMuZGF0YSA9ICR0aGlzLmNhcmRzLm1hcChmdW5jdGlvbihpbmRleCwgY2FyZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ29yZGVyJzogaW5kZXggLSAkdGhpcy5zaWRlUXR5LFxuICAgICAgICAnd2lkdGgnOiAkKGNhcmQpLndpZHRoKClcbiAgICAgIH07XG4gICAgfSkudG9BcnJheSgpO1xuICB9O1xuXG4gICR0aGlzLnNldENvbnRhaW5lckhlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGhlaWdodHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCkubWFwKGNhcmQgPT4gJChjYXJkKS5oZWlnaHQoKSk7XG4gICAgJHRoaXMuY29udGFpbmVyLmhlaWdodChNYXRoLm1heCguLi5oZWlnaHRzKSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0VmFycyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRXaWR0aCA9ICR0aGlzLmNhcmRzLmZpcnN0KCkub3V0ZXJXaWR0aCgpO1xuICAgICR0aGlzLnNjYWxlU3RlcCA9ICgxIC0gJHRoaXMuX21pblNjYWxlKSAvICR0aGlzLnNpZGVRdHk7XG4gICAgJHRoaXMuYXZhaWxhYmxlU2lkZVNwYWNlID0gKCR0aGlzLm1vZHVsZS53aWR0aCgpIC0gJHRoaXMuY2FyZFdpZHRoKSAvIDI7XG4gICAgJHRoaXMucmVkdWNlT2Zmc2V0QmFzZSA9ICR0aGlzLmF2YWlsYWJsZVNpZGVTcGFjZSA8ICR0aGlzLnNwYWNlUmVxdWlyZWQoKSA/ICR0aGlzLmFkZGl0aW9uYWxPZmZzZXQoKSA6IDA7XG4gICAgJHRoaXMuc2V0TW9kZSgpO1xuICB9O1xuXG4gICR0aGlzLnNwYWNlUmVxdWlyZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZFdpZHRoICogKCR0aGlzLkFQUygxLCAtMSAqICR0aGlzLnNjYWxlU3RlcCwgJHRoaXMuc2lkZVF0eSArIDEpIC0gMSkgLyAyO1xuICB9O1xuXG4gICR0aGlzLmFkZGl0aW9uYWxPZmZzZXQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKCR0aGlzLnNwYWNlUmVxdWlyZWQoKSAtICR0aGlzLmF2YWlsYWJsZVNpZGVTcGFjZSkgLyAoJHRoaXMuQVBTKDEsIC0xICogJHRoaXMuc2NhbGVTdGVwLCAkdGhpcy5zaWRlUXR5ICsgMSkgLSAxKTtcbiAgfTtcblxuICAvKipcbiAgICogQXJpdGhtZXRpYyBwcm9ncmVzc2lvbiBzdW1cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGEgZmlyc3QgdGVybSBvZiBhcml0aG1ldGljIHNlcXVlbmNlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkIGRpZmZlcmVuY2UgYmV0d2VlbiB0ZXJtc1xuICAgKiBAcGFyYW0ge051bWJlcn0gbiBudW1iZXIgb2YgdGVybXNcbiAgICovXG4gICR0aGlzLkFQUyA9IGZ1bmN0aW9uKGEsIGQsIG4pIHtcbiAgICByZXR1cm4gKDIgKiBhICsgZCAqIChuIC0gMSkpICogbiAvIDI7XG4gIH07XG5cbiAgJHRoaXMucm90YXRlQ2FyZHNGb3J3YXJkID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgY2FyZHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCk7XG4gICAgY2FyZHMucHVzaCggY2FyZHMuc2hpZnQoKSApO1xuICAgICR0aGlzLmNhcmRzID0gJChjYXJkcyk7XG4gIH07XG5cbiAgJHRoaXMucm90YXRlQ2FyZHNCYWNrd2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGNhcmRzID0gJHRoaXMuY2FyZHMudG9BcnJheSgpO1xuICAgIGNhcmRzLnVuc2hpZnQoIGNhcmRzLnBvcCgpICk7XG4gICAgJHRoaXMuY2FyZHMgPSAkKGNhcmRzKTtcbiAgfTtcblxuICAkdGhpcy5nZXRBY3RpdmVDYXJkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLmNhcmRzLmVxKCAkdGhpcy5zaWRlUXR5ICk7XG4gIH07XG5cbiAgJHRoaXMuZ2V0Q2FyZHNCZWZvcmVBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJCggJHRoaXMuY2FyZHMudG9BcnJheSgpLnNsaWNlKDAsICR0aGlzLnNpZGVRdHkpLnJldmVyc2UoKSApO1xuICB9O1xuXG4gICR0aGlzLmdldENhcmRzQWZ0ZXJBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZHMuc2xpY2UoJHRoaXMuc2lkZVF0eSArIDEpO1xuICB9O1xuXG4gICR0aGlzLnNldENhcmRzUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhY3RpdmVDYXJkID0gJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpO1xuICAgIGNvbnN0IGNhcmRzQmVmb3JlID0gJHRoaXMuZ2V0Q2FyZHNCZWZvcmVBY3RpdmUoKTtcbiAgICBjb25zdCBjYXJkc0FmdGVyID0gJHRoaXMuZ2V0Q2FyZHNBZnRlckFjdGl2ZSgpO1xuXG4gICAgYWN0aXZlQ2FyZFxuICAgICAgLmNzcyggJHRoaXMuY3NzVHJhbnNmb3JtKDEpIClcbiAgICAgIC5jc3MoJ3otaW5kZXgnLCAkdGhpcy5zaWRlUXR5ICsgMSk7XG5cbiAgICBjYXJkc0JlZm9yZS5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgY2FyZCA9ICQoZWwpO1xuICAgICAgY29uc3QgY2FyZFN0eWxlcyA9ICR0aGlzLmNhcmRTdHlsZXMoaSwgLTEpO1xuXG4gICAgICBjYXJkLmNzcyggY2FyZFN0eWxlcyApO1xuICAgIH0pO1xuXG4gICAgY2FyZHNBZnRlci5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgY2FyZCA9ICQoZWwpO1xuICAgICAgY29uc3QgY2FyZFN0eWxlcyA9ICR0aGlzLmNhcmRTdHlsZXMoaSk7XG5cbiAgICAgIGNhcmQuY3NzKCBjYXJkU3R5bGVzICk7XG4gICAgfSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0Q2FyZHNPZmZzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5jYXJkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgICAgY29uc3QgJGNhcmQgPSAkKHRoaXMpO1xuICAgICAgJGNhcmQuY3NzKHtcbiAgICAgICAgbGVmdDogYGNhbGMoNTAlIC0gJHskY2FyZC53aWR0aCgpIC8gMn1weClgLFxuICAgICAgICB0b3A6IGBjYWxjKDUwJSAtICR7JGNhcmQuaGVpZ2h0KCkgLyAyfXB4KWAsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5nb1RvTmV4dENhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5yb3RhdGVDYXJkc0ZvcndhcmQoKTtcbiAgICAkdGhpcy5jYXJkcy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG5cbiAgICAkdGhpcy5ib2R5cy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgfTtcblxuICAkdGhpcy5nb1RvUHJldkNhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5yb3RhdGVDYXJkc0JhY2t3YXJkKCk7XG4gICAgJHRoaXMuY2FyZHMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUNhcmQoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuc2V0Q2FyZHNQb3NpdGlvbigpO1xuXG4gICAgJHRoaXMuYm9keXMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUJvZHkoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gIH07XG5cbiAgJHRoaXMuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaW5kZXggPSAkdGhpcy5jYXJkcy5pbmRleCh0aGlzKTtcbiAgICBjb25zdCByb3VuZHMgPSBNYXRoLmFicyhpbmRleCAtICR0aGlzLnNpZGVRdHkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3VuZHM7IGkrKykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGluZGV4ID4gJHRoaXMuc2lkZVF0eSA/ICR0aGlzLmdvVG9OZXh0Q2FyZCgpIDogJHRoaXMuZ29Ub1ByZXZDYXJkKCk7XG5cbiAgICAgICAgaWYgKGkgPT0gcm91bmRzIC0gMSkge1xuICAgICAgICAgIGRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAgICdldmVudCc6ICdndG0uY2xpY2snLFxuICAgICAgICAgICAgJ2d0bS5lbGVtZW50JzogJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmZpbmQoJ2gyJykudG9BcnJheSgpLnBvcCgpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0sIGkgKiA0MDApO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5pbml0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRzLmNsaWNrKCR0aGlzLmNsaWNrSGFuZGxlcik7XG5cbiAgICBPYmplY3Qua2V5cygkdGhpcy5fYnJlYWtwb2ludHMpLmZvckVhY2goKGtleSkgPT4gJHRoaXMuX2JyZWFrcG9pbnRzW2tleV0uYWRkTGlzdGVuZXIoKG1xKSA9PiB7XG4gICAgICAkdGhpcy5zZXRWYXJzKCk7XG4gICAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG4gICAgICAkdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAgICR0aGlzLnNldENhcmRzT2Zmc2V0KCk7XG4gICAgICAkdGhpcy5zZXRCb2R5c0hlaWdodCgpO1xuICAgIH0pKTtcbiAgfTtcblxuICAkdGhpcy5zZXRNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCR0aGlzLl9icmVha3BvaW50cy5sZy5tYXRjaGVzKSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdhZHZhbmNlZCc7XG4gICAgfSBlbHNlIGlmICgkdGhpcy5fYnJlYWtwb2ludHMubWQubWF0Y2hlcykge1xuICAgICAgJHRoaXMuX21vZGUgPSAnbWl4ZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdzaW1wbGUnO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLl9tb2RlO1xuICB9XG5cbiAgJHRoaXMuY2FyZFNjYWxlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBzd2l0Y2goJHRoaXMuX21vZGUpIHtcbiAgICAgIGNhc2UgJ2FkdmFuY2VkJzpcbiAgICAgICAgcmV0dXJuIDEgLSAkdGhpcy5zY2FsZVN0ZXAgKiAoaW5kZXggKyAxKTtcbiAgICAgIGNhc2UgJ21peGVkJzpcbiAgICAgICAgcmV0dXJuIDAuODtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5jYXJkVHJhbnNmb3JtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gMDtcblxuICAgIHN3aXRjaCgkdGhpcy5fbW9kZSkge1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgICBjb25zdCBwcmV2TW92ZSA9ICR0aGlzLmNhcmRUcmFuc2Zvcm0oaW5kZXggLSAxKSAqICR0aGlzLmNhcmRTY2FsZShpbmRleCAtIDEpIC8gJHRoaXMuY2FyZFNjYWxlKGluZGV4KTtcbiAgICAgICAgY29uc3QgcHJldldpZHRoID0gJHRoaXMuY2FyZFdpZHRoICogJHRoaXMuY2FyZFNjYWxlKGluZGV4IC0gMSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9ICR0aGlzLmNhcmRXaWR0aCAqICR0aGlzLmNhcmRTY2FsZShpbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHByZXZNb3ZlICsgKCgocHJldldpZHRoIC0gY3VycmVudFdpZHRoKSAvIDIpICsgJHRoaXMuX21pbk9mZnNldCAqIGN1cnJlbnRXaWR0aCAtICR0aGlzLnJlZHVjZU9mZnNldEJhc2UgKiAkdGhpcy5jYXJkU2NhbGUoaW5kZXgpKSAvICR0aGlzLmNhcmRTY2FsZShpbmRleCk7XG4gICAgICBjYXNlICdtaXhlZCc6XG4gICAgICAgIHJldHVybiAoaW5kZXggKyAxKSAqICgkdGhpcy5jYXJkV2lkdGggKiAwLjIgLyAyICsgNzAgKyAkdGhpcy5jYXJkV2lkdGggKiAwLjgpIC8gMC44O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKGluZGV4ICsgMSkgKiAoJHRoaXMuY2FyZFdpZHRoICsgMzApO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5jYXJkWkluZGV4ID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICByZXR1cm4gJHRoaXMuc2lkZVF0eSAtIGluZGV4O1xuICB9O1xuXG4gICR0aGlzLmNhcmRTdHlsZXMgPSBmdW5jdGlvbihpLCBmbGlwID0gMSkge1xuICAgIHJldHVybiBqUXVlcnkuZXh0ZW5kKFxuICAgICAge30sXG4gICAgICAkdGhpcy5jc3NaSW5kZXgoICR0aGlzLmNhcmRaSW5kZXgoaSkgKSxcbiAgICAgICR0aGlzLmNzc1RyYW5zZm9ybSgkdGhpcy5jYXJkU2NhbGUoaSksIGZsaXAgKiAkdGhpcy5jYXJkVHJhbnNmb3JtKGkpKVxuICAgICk7XG4gIH07XG5cbiAgJHRoaXMuc2V0SW5kZXggPSBmdW5jdGlvbihpbmRleCkge1xuICAgICR0aGlzLl9pbmRleCA9IGluZGV4O1xuICB9O1xuXG4gICR0aGlzLmdldEluZGV4ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLl9pbmRleCAhPT0gdW5kZWZpbmVkID8gJHRoaXMuX2luZGV4IDogTWF0aC5mbG9vcigkdGhpcy5jYXJkcy5sZW5ndGggLyAyKTtcbiAgfTtcblxuICAkdGhpcy5nZXRBY3RpdmVCb2R5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLmJvZHlzLmVxKCAkdGhpcy5nZXRBY3RpdmVDYXJkKClbMF0ub3JpZ2luYWxJRCApO1xuICB9O1xuXG4gICR0aGlzLmNzc1RyYW5zZm9ybSA9IGZ1bmN0aW9uKHNjYWxlLCB0cmFuc2xhdGUpIHtcbiAgICBjb25zdCBydWxlID0gJ3RyYW5zZm9ybSc7XG4gICAgY29uc3QgdmFsdWUgPSBbc2NhbGUgPyBgc2NhbGUoJHtzY2FsZX0pYCA6ICcnLCB0cmFuc2xhdGUgPyBgdHJhbnNsYXRlWCgke3RyYW5zbGF0ZX1weClgIDogJycsIF0uam9pbignICcpO1xuICAgIGNvbnN0IHByZWZpeGVzID0gWyctd2Via2l0LScsICctbXMtJywgJyddO1xuICAgIGNvbnN0IHN0eWxlcyA9IHt9O1xuXG4gICAgcHJlZml4ZXMuZm9yRWFjaChwcmVmaXggPT4geyBzdHlsZXNbcHJlZml4ICsgcnVsZV0gPSB2YWx1ZX0gKTtcblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH07XG5cbiAgJHRoaXMuY3NzWkluZGV4ID0gZnVuY3Rpb24oemluZGV4KSB7XG4gICAgcmV0dXJuIHsgJ3otaW5kZXgnOiB6aW5kZXggfTtcbiAgfTtcblxuICAkdGhpcy5zZXRCb2R5c0hlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGhlaWdodHMgPSAkdGhpcy5ib2R5cy50b0FycmF5KCkubWFwKGJvZHkgPT4gJChib2R5KS5oZWlnaHQoKSk7XG5cbiAgICAkdGhpcy5ib2R5c1dyYXBwZXIuaGVpZ2h0KCBNYXRoLm1heCguLi5oZWlnaHRzKSApO1xuICB9O1xuXG4gICR0aGlzLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5zZXRFbGVtZW50cygpO1xuICAgICR0aGlzLnNpZGVRdHkgPSBNYXRoLmZsb29yKCR0aGlzLmNhcmRzLmxlbmd0aCAvIDIpO1xuICAgIC8vICR0aGlzLmdldERhdGEoKTtcbiAgICAkdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAkdGhpcy5zZXRDYXJkc09mZnNldCgpO1xuICAgICR0aGlzLnNldFZhcnMoKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5nZXRBY3RpdmVCb2R5KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLnNldEJvZHlzSGVpZ2h0KCk7XG5cbiAgICAkdGhpcy5pbml0RXZlbnRIYW5kbGVycygpO1xuICAgICR0aGlzLmluaXRBdXRvUGxheSgpO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcubW9kdWxlLS1iNycpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgJG1vZHVsZSA9ICQodGhpcyk7XG5cbiAgICAkbW9kdWxlLmltYWdlc0xvYWRlZCgpLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgIG5ldyBDYXJvdXNlbCggJG1vZHVsZSApLmluaXQoKTtcbiAgICB9KVxuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgeyB0aGVtZV9icmVha3BvaW50cyB9IGZyb20gJ2RydXBhbFNldHRpbmdzJztcblxuY29uc3QgYnJlYWtwb2ludHMgPSB7XG4gICdtaW4nOiB7fSxcbiAgJ21heCc6IHt9LFxufTtcblxuT2JqZWN0LmtleXModGhlbWVfYnJlYWtwb2ludHMpLmZvckVhY2goKGtleSkgPT4ge1xuICBicmVha3BvaW50cy5taW5bJ21iJ10gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogMHB4KScpO1xuICBicmVha3BvaW50cy5taW5ba2V5XSA9IHdpbmRvdy5tYXRjaE1lZGlhKGAobWluLXdpZHRoOiAke3RoZW1lX2JyZWFrcG9pbnRzW2tleV19cHgpYCk7XG4gIGJyZWFrcG9pbnRzLm1heFtrZXldID0gd2luZG93Lm1hdGNoTWVkaWEoYChtYXgtd2lkdGg6ICR7dGhlbWVfYnJlYWtwb2ludHNba2V5XSAtIDF9cHgpYCk7XG59KVxuXG5leHBvcnQgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lX2JyZWFrcG9pbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgYnJlYWtwb2ludHNcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IgPSAnI3ZpZXdzLWV4cG9zZWQtZm9ybS1hcnRpY2xlLWxpc3QtcXVpY2stYmxvY2stY2FzZS1saXN0JztcbiAgY29uc3QgdHlwZVBsYWNlaG9sZGVyID0gRHJ1cGFsLnQoJ1R5cGUnKTtcbiAgY29uc3QgY29uY2VybnNQbGFjZWhvbGRlciA9IERydXBhbC50KCdDb25jZXJucycpO1xuXG4gIERydXBhbC5iZWhhdmlvcnMuY2FzZXNfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwidHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0eXBlUGxhY2Vob2xkZXIsXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiY29uY2VybnNcIl0nKS5vbmNlKCdzZWxlY3QyLWNvbmNlcm5zJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbmNlcm5zUGxhY2Vob2xkZXIsXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiaXNfZGlzYXNzb2NpYXRlZFwiXScpLm9uY2UoJ3NlbGVjdDItaXNfZGlzYXNzb2NpYXRlZCcpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcbi8vIGltcG9ydCBzaGF2ZSBmcm9tICcuL3NoYXZlJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcudmlldy1pZC1jZXJ0aWZpZWRfcHJvZHVjdHNfbGlzdCAudmlldy1jb250ZW50JylcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICBtYXJnaW46IDM3LFxuICAgICAgcmV3aW5kOiBmYWxzZSxcbiAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgJzEwMjQnOiB7XG4gICAgICAgICAgY2VudGVyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICAnMTI4MCc6IHtcbiAgICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICAgIGl0ZW1zOiAzLFxuICAgICAgICAgIGRvdHNFYWNoOiAzLFxuICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICRjb250YWN0Rm9ybXMgPSAkKFwiLmNvbnRhY3QtZm9ybVwiKTtcbiAgY29uc3QgJHByZXZpZXdGaWxlTW9kYWwgPSAkKCcjcHJldmlldy1tb2RhbCcpO1xuICBcbiAgJGNvbnRhY3RGb3Jtcy5vbignY2xpY2snLCAnLnBkZi1wcmV2aWV3LW1vZGFsLWNhbGxlcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuXG4gICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygncGRmLXN1cHBvcnQnKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgY29uc3Qgc3JjID0gJHRoaXMuYXR0cignaHJlZicpO1xuICAgICAgY29uc3QgJHBkZkNvbnRhaW5lciA9ICRwcmV2aWV3RmlsZU1vZGFsLmZpbmQoJyNwZGYtY29udGFpbmVyJyk7XG4gICAgICAkcHJldmlld0ZpbGVNb2RhbC5maW5kKCcjYWNjZXB0LXRlcm1zJykuZGF0YSgndGFyZ2V0JywgJHRoaXMuY2xvc2VzdCgnbGFiZWwnKSk7XG4gICAgICBcbiAgICAgIC8vIElzIHBkZiBhbHJlYWR5IGxvYWRlZD9cbiAgICAgIGlmICgkcGRmQ29udGFpbmVyLmF0dHIoJ3NyYycpICE9PSBzcmMpIHtcbiAgICAgICAgJHBkZkNvbnRhaW5lci5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgfVxuXG4gICAgICAkcHJldmlld0ZpbGVNb2RhbC5hZGRDbGFzcygnc2hvdycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5hdHRyKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgfVxuICB9KTtcblxuICAkcHJldmlld0ZpbGVNb2RhbC5vbignY2xpY2snLCAnI2FjY2VwdC10ZXJtcycsIGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJGNoZWNrYm94ID0gJChgIyR7JHRoaXMuZGF0YSgndGFyZ2V0JykucHJvcCgnZm9yJyl9YCk7XG5cbiAgICAkY2hlY2tib3gucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICRjaGVja2JveC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAkdGhpcy5kYXRhKCd0YXJnZXQnLCBudWxsKTtcbiAgICAkcHJldmlld0ZpbGVNb2RhbC5yZW1vdmVDbGFzcygnc2hvdycpO1xuICB9KTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMucHJvY2Vzc2VzX2ZpbHRlcl9zZWxlY3QgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgY29uc3QgJGZvcm0gPSAkKCcjdmlld3MtZXhwb3NlZC1mb3JtLXNlYXJjaC1wYWdlLWRvY3VtZW50LWNlbnRyZScpO1xuXG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImRzcGFjZV9kb2NfdHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItZG9jdW1lbnQtdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMuZXZlbnRfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoJyN2aWV3cy1leHBvc2VkLWZvcm0tZXZlbnRzLWJsb2NrLTEnKTtcblxuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJmaWVsZF9pc19hcmNoaXZlZF92YWx1ZVwiXScpLm9uY2UoJ3NlbGVjdDItZmllbGQtaXMtYXJjaGl2ZWQtdmFsdWUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuXHRcdHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnRXZlbnQnKVxuICAgICAgfSk7ICAgICAgXG5cdCAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJmaWVsZF9ldmVudF9jYXRlZ29yeV90YXJnZXRfaWRcIl0nKS5vbmNlKCdzZWxlY3QyLWZpZWxkLWV2ZW50LWNhdGVnb3J5LXRhcmdldC1pZCcpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG5cdFx0cGxhY2Vob2xkZXI6IERydXBhbC50KCdUeXBlJylcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnZGVib3VuY2UnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICR3aW5kb3cgPSAkKHdpbmRvdyk7XG4gIGNvbnN0ICRsb2dvID0gJCgnI2hlYWRlciAubG9nby1mYWRlSW5VcCcpO1xuICBjb25zdCBvZmZzZXQgPSArJGxvZ29cbiAgICAuYWRkKCc8ZGl2IGNsYXNzPVwiZmFkZUluVXAtb2Zmc2V0LTBcIj4nKVxuICAgIC5maXJzdCgpXG4gICAgLmF0dHIoJ2NsYXNzJylcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maW5kKGNsYXNzTmFtZSA9PiBjbGFzc05hbWUuc3RhcnRzV2l0aCgnZmFkZUluVXAtb2Zmc2V0LScpKVxuICAgIC5zcGxpdCgnLScpXG4gICAgLnBvcCgpO1xuXG4gIGlmIChvZmZzZXQpIHtcbiAgICAkd2luZG93Lm9uKCdzY3JvbGwnLCBkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkd2luZG93LnNjcm9sbFRvcCgpID4gb2Zmc2V0KSB7XG4gICAgICAgICRsb2dvLmFkZENsYXNzKCd2aXNpYmxlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkbG9nby5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuICAgICAgfVxuICAgIH0sIDUwKSk7XG4gIH1cbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5wYXJhZ3JhcGgtLXR5cGUtLWNvbnRhY3QtZm9ybSBmb3JtLmNvbnRhY3QtZm9ybSAuZm9ybS1hY3Rpb25zIGlucHV0W3R5cGU9c3VibWl0XScpLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbnN0ICRmb3JtID0gJCh0aGlzKS5wYXJlbnRzKCdmb3JtJyk7XG5cbiAgICAvL3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107XG4gICAgZGF0YUxheWVyLnB1c2goe1xuICAgICAgJ2V2ZW50JzogJ2d0bS5mb3JtU3VibWl0JyxcbiAgICAgICdndG0uZWxlbWVudCc6ICRmb3JtWzBdLFxuICAgICAgJ2d0bS5lbGVtZW50Q2xhc3Nlcyc6ICRmb3JtLmF0dHIoJ2NsYXNzJyksXG4gICAgICAnZ3RtLmVsZW1lbnRJZCc6ICRmb3JtLmF0dHIoJ2lkJylcbiAgICB9KTtcbiAgfSk7XG5cbiAgbGV0ICRyZWdpb25zO1xuXG4gIERydXBhbC5iZWhhdmlvcnMuZXhwb3NlZF9mb3JtX3N1Ym1pc3Npb24gPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJHJlZ2lvbnMgPSAkcmVnaW9ucyB8fCAkKCcucmVnaW9uLWhlcm8sIC5yZWdpb24tY29udGVudCcpO1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSAnW2lkXj12aWV3cy1leHBvc2VkLWZvcm1dJztcbiAgICAgIGNvbnN0ICRmb3JtcyA9ICQoc2VsZWN0b3IsIGNvbnRleHQpLmFkZEJhY2soc2VsZWN0b3IpO1xuICAgICAgY29uc3QgJGJlZiA9ICRyZWdpb25zLmZpbmQoJGZvcm1zKS5vbmNlKCdiZWYtZ3RtJyk7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gW107XG5cbiAgICAgICRiZWYuZmluZCgnaW5wdXRbdHlwZT1zdWJtaXRdJykub24oJ2NsaWNrIG1vdXNlZG93bicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCAkZm9ybSA9ICQodGhpcykucGFyZW50cygnZm9ybScpO1xuICAgICAgICBjb25zdCAkaXRlbXMgPSAkZm9ybS5maW5kKCcuZm9ybS1pdGVtJyk7XG5cbiAgICAgICAgJGl0ZW1zLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY29uc3QgJGl0ZW0gPSAkKHRoaXMpO1xuXG4gICAgICAgICAgc3dpdGNoKGdldEl0ZW1UeXBlKCRpdGVtKSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkaXRlbS5maW5kKCdzZWxlY3QnKS52YWwoKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAkaXRlbS5maW5kKCdvcHRpb24nKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoYFt2YWx1ZT0ke2luZGV4fV1gKVxuICAgICAgICAgICAgICAgIC50ZXh0KCk7XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKCRpdGVtLmZpbmQoJ2lucHV0JykudmFsKCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRmb3JtLmFkZENsYXNzKCd2aWV3cy1leHBvc2VkLWZvcm0nKTtcbiAgICAgICAgdmFyIGRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICBkYXRhTGF5ZXIucHVzaCh7XG4gICAgICAgICAgJ2V2ZW50JzogJ2V4cG9zZWRGb3JtJyxcbiAgICAgICAgICAnZm9ybUZpbHRlcnMnOiBub3JtYWxpemVGaWx0ZXJzKGZpbHRlcnMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGZ1bmN0aW9uIGdldEl0ZW1UeXBlKCRpdGVtKSB7XG4gIC8vICAgcmV0dXJuICRpdGVtLmF0dHIoJ2NsYXNzJylcbiAgLy8gICAgIC5zcGxpdCgvXFxzKy8pXG4gIC8vICAgICAuZmlsdGVyKGNsYXNzTmFtZSA9PiBjbGFzc05hbWUuc3RhcnRzV2l0aCgnZm9ybS10eXBlJykpXG4gIC8vICAgICAucG9wKClcbiAgLy8gICAgIC5zcGxpdCgnLScpXG4gIC8vICAgICAucG9wKCk7XG4gIC8vIH1cblxuICAvLyBUaGlzIGlzIHRoZSBkdXBsaWNhdGUgb2YgYWJvdmUgZnVuY3Rpb24uIEl0IGhhdmUgb25lIGFkZGl0aW9uYWwgdmFsaWRhdGlvblxuICAvLyBmb3IgdGhlIGZvcm0gaXRlbXMuIElmIHRoZSAkaXRlbSBoYXMgdmFsdWUgdGhlbiBvbmx5IGl0cyBzcGxpdCBjb25kaXRpb24gd29ya3MuXG4gIC8vIEZvciBWaXJ0dWFsIEJvb3RoIHNwb25zb3JzIGxpc3QgcGFnZSwgd2UgYWx0ZXIgdGhlIGZ1bmN0aW9uIHRvIGF2b2lkIHRoZSBlcnJvciBpblxuICAvLyBCZXR0ZXIgZXhwb3NlZCBmaWx0ZXIgaW4gQWpheCBzdWJtaXQuIFxuICBmdW5jdGlvbiBnZXRJdGVtVHlwZSgkaXRlbSkge1xuICAgICRpdGVtID0gJGl0ZW0uYXR0cignY2xhc3MnKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihjbGFzc05hbWUgPT4gY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ2Zvcm0tdHlwZScpKTtcbiAgICBpZihqUXVlcnkuaXNFbXB0eU9iamVjdCgkaXRlbSkgPT09ICdmYWxzZScpIHtcbiAgICAgIHJldHVybiAkaXRlbS5wb3AoKS5zcGxpdCgnLScpLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbHRlcnMoZmlsdGVycykge1xuICAgIGlmKGpRdWVyeS5pc0VtcHR5T2JqZWN0KGZpbHRlcnMpID09PSAnZmFsc2UnKSB7XG4gICAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgICAubWFwKGZpbHRlciA9PiBmaWx0ZXIucmVwbGFjZSgvLS9nLCAnJykpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IGZpbHRlci50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoZmlsdGVyID0+IGZpbHRlci5sZW5ndGgpXG4gICAgICAgIC5qb2luKCcgLSAnKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yTWVzc2FnZShtc2cpIHtcbiAgY29uc29sZS5lcnJvcignW0hhc2guanNdIFRoZSBoYXNoIHBhc3NlZCBpbiB0byB1cGRhdGUgbG9jYXRpb24gaXMgbm90IHZhbGlkJyk7XG4gIGNvbnNvbGUuZXJyb3IoYFtIYXNoLmpzXSAke21zZ31gKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZChoYXNoKSB7XG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGhhc2gpIHtcbiAgICBsb2dFcnJvck1lc3NhZ2UoJ0hhc2ggaGFzIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFoYXNoLmxlbmd0aCkge1xuICAgIGxvZ0Vycm9yTWVzc2FnZSgnSGFzaCBpcyBlbXB0eScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUoaGFzaCkge1xuICBpZiAoIWlzVmFsaWQoaGFzaCkpIHsgcmV0dXJuOyB9XG5cbiAgY29uc3QgZGVzdGluYXRpb25FbGVtZW50ID0gJCggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaC5zdWJzdHJpbmcoMSkpICk7XG5cbiAgaWYgKGhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBoYXNoKTtcbiAgfSBlbHNlIHtcbiAgICBkZXN0aW5hdGlvbkVsZW1lbnQucmVtb3ZlQXR0cignaWQnKTtcbiAgICBsb2NhdGlvbi5oYXNoID0gaGFzaDtcbiAgICBkZXN0aW5hdGlvbkVsZW1lbnQuYXR0cignaWQnLCBoYXNoLnN1YnN0cmluZygxKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgeyB1cGRhdGUgfVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdkZWJvdW5jZSc7XG5pbXBvcnQgYnJlYWtwb2ludHMsIHsga2V5cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0ZXN0KCRlbCwgb2Zmc2V0ID0gMTAwKSB7XG4gIGNvbnN0ICR3aW4gPSAkKHdpbmRvdyk7XG4gIGNvbnN0IHdpblRvcCA9ICR3aW4uc2Nyb2xsVG9wKCk7XG4gIGNvbnN0IHdpbkJvdCA9IHdpblRvcCArICR3aW4uaGVpZ2h0KCk7XG4gIGNvbnN0IGVsVG9wID0gJGVsLm9mZnNldCgpLnRvcDtcbiAgY29uc3QgZWxCb3QgPSBlbFRvcCArICRlbC5vdXRlckhlaWdodCgpO1xuXG4gIHJldHVybiAoZWxUb3AgPD0gKHdpbkJvdCAtIG9mZnNldCkpICYmICgod2luVG9wICsgb2Zmc2V0KSA8PSBlbEJvdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgYWxsRWxlbWVudHMgPSAkKCcuY2hlY2tJZkluVmlldycpO1xuICBjb25zdCBpbnZhbGlkRWxlbWVudHMgPSBhbGxFbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgeyBpblZpZXdNaW4sIGluVmlld01heCB9ID0gJCh0aGlzKS5kYXRhKCk7XG4gICAgbGV0IGRlY2lzaW9uID0gZmFsc2VcblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01pbikgJiYga2V5cy5pbmNsdWRlcyhpblZpZXdNYXgpKSB7XG4gICAgICBpZiAoIWJyZWFrcG9pbnRzLm1pbltpblZpZXdNaW5dLm1hdGNoZXMgfHwgIWJyZWFrcG9pbnRzLm1heFtpblZpZXdNYXhdLm1hdGNoZXMpIHtcbiAgICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01pbikgJiYgIWJyZWFrcG9pbnRzLm1pbltpblZpZXdNaW5dLm1hdGNoZXMpIHtcbiAgICAgIGRlY2lzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5cy5pbmNsdWRlcyhpblZpZXdNYXgpICYmICFicmVha3BvaW50cy5tYXhbaW5WaWV3TWF4XS5tYXRjaGVzKSB7XG4gICAgICBkZWNpc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGRlY2lzaW9uKSB7XG4gICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdjaGVja0lmSW5WaWV3JykuYWRkQ2xhc3MoJ2luVmlldycpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNpc2lvbjtcbiAgfSk7XG5cbiAgbGV0IGVsZW1lbnRzID0gYWxsRWxlbWVudHMubm90KGludmFsaWRFbGVtZW50cyk7XG5cbiAgaWYgKCAhZWxlbWVudHMubGVuZ3RoICkgcmV0dXJuO1xuXG4gIGNvbnN0IGhhbmRsZXIgPSBkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgJCh3aW5kb3cpLm9mZignc2Nyb2xsJywgaGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudHMuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgJGVsID0gJChub2RlKTtcbiAgICAgIGNvbnN0IHsgaW5WaWV3T2Zmc2V0LCBpblZpZXdDbGFzcyB9ID0gJGVsLmRhdGEoKTtcblxuICAgICAgaWYgKHRlc3QoJGVsLCBpblZpZXdPZmZzZXQpKSB7XG4gICAgICAgICRlbFxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnY2hlY2tJZkluVmlldycpXG4gICAgICAgICAgLmFkZENsYXNzKCdpblZpZXcnKVxuICAgICAgICAgIC5hZGRDbGFzcyhpblZpZXdDbGFzcyk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoJ2luVmlldycpO1xuICAgICAgICB9LCAxMTAwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKCcuY2hlY2tJZkluVmlldycpO1xuICB9LCA1MCk7XG4gIGhhbmRsZXIoKTtcbiAgJCh3aW5kb3cpLm9uKCdzY3JvbGwnLCBoYW5kbGVyKTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUxpbmVIZWlnaHQoJGVsZW1lbnQpIHtcbiAgbGV0IGhlaWdodCA9IDA7XG4gIGNvbnN0IHN0eWxlcyA9IFtcbiAgICAnZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7JyxcbiAgICAncG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7JyxcbiAgICAnbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDsnLFxuICAgICdwYWRkaW5nOiAwICFpbXBvcnRhbnQ7JyxcbiAgICAndmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7JyxcbiAgICAnb3BhY2l0eTogMCAhaW1wb3J0YW50OydcbiAgXTtcbiAgY29uc3QgJHRlc3RFbCA9ICQoJzxzcGFuPiZuYnNwOzwvc3Bhbj4nKS5hdHRyKCdzdHlsZScsIHN0eWxlcy5qb2luKCcnKSk7XG5cbiAgJGVsZW1lbnQuYXBwZW5kKCR0ZXN0RWwpO1xuXG4gIGhlaWdodCA9ICR0ZXN0RWwuaGVpZ2h0KCk7XG5cbiAgJHRlc3RFbC5yZW1vdmUoKTtcblxuICByZXR1cm4gaGVpZ2h0O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoJGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbGluZUhlaWdodCA9IHBhcnNlRmxvYXQoJGVsZW1lbnQuY3NzKCdsaW5lLWhlaWdodCcpKTtcblxuICByZXR1cm4gTnVtYmVyLmlzTmFOKGxpbmVIZWlnaHQpID8gY2FsY3VsYXRlTGluZUhlaWdodCgkZWxlbWVudCkgOiBNYXRoLmNlaWwobGluZUhlaWdodCk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0aXRsZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG59XG5cbmZ1bmN0aW9uIHNldFNvdXJjZShub2RlLCBzcmNUeXBlKSB7XG4gIGNvbnN0ICRtYXAgPSAkKG5vZGUpO1xuICBjb25zdCBzcmMgPSAkbWFwLmRhdGEoYHNyYyR7dGl0bGUoc3JjVHlwZSl9YCk7XG5cbiAgJG1hcC5hdHRyKHsgc3JjIH0pO1xufVxuXG5mdW5jdGlvbiB0ZXN0TVEoJG1hcHMpIHtcbiAgaWYgKGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzKSB7XG4gICAgJG1hcHMuZWFjaCgoaSwgZWwpID0+IHsgc2V0U291cmNlKGVsLCAnZGVza3RvcCcpOyB9KTtcbiAgfSBlbHNlIHtcbiAgICAkbWFwcy5lYWNoKChpLCBlbCkgPT4geyBzZXRTb3VyY2UoZWwsICdtb2JpbGUnKTsgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkbWFwcyA9ICQoJ2lmcmFtZS5yZXNwb25zaXZlLW1hcCcpO1xuXG4gIGlmIChicmVha3BvaW50cy5taW4uYmcubWF0Y2hlcykge1xuICAgIHRlc3RNUSgkbWFwcyk7XG4gIH1cblxuICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIoKCkgPT4geyB0ZXN0TVEoJG1hcHMpIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZWRpYUlEIFxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFxuICogQHBhcmFtIHtzdHJpbmd9IHRodW1ibmFpbCBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb29raWVOYW1lIFxuICovXG5mdW5jdGlvbiBjb29raWVzQWRkTWVkaWEobWVkaWFJRCwgZ2VuZXJpYywgc291cmNlLCB0eXBlLCB0aHVtYm5haWwsIGNvb2tpZU5hbWUpIHtcbiAgbGV0IHNlbGVjdGVkTWVkaWEgPSBDb29raWVzLmdldEpTT04oY29va2llTmFtZSk7XG4gIFxuICBpZiAodW5kZWZpbmVkID09PSBzZWxlY3RlZE1lZGlhKSB7XG4gICAgc2VsZWN0ZWRNZWRpYSA9IHt9O1xuICB9XG5cbiAgc2VsZWN0ZWRNZWRpYVttZWRpYUlEXSA9IHtcbiAgICBnZW5lcmljOiBnZW5lcmljLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgdGh1bWJuYWlsOiB0eXBlICE9ICdwZGYnID8gdGh1bWJuYWlsIDogJydcbiAgfTtcbiAgQ29va2llcy5zZXQoY29va2llTmFtZSwgc2VsZWN0ZWRNZWRpYSk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVkaWFJRCBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb29raWVOYW1lIFxuICovXG5mdW5jdGlvbiBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgY29va2llTmFtZSkge1xuICBsZXQgc2VsZWN0ZWRNZWRpYSA9IENvb2tpZXMuZ2V0SlNPTihjb29raWVOYW1lKTtcbiAgXG4gIGlmIChzZWxlY3RlZE1lZGlhICYmIGRlbGV0ZSBzZWxlY3RlZE1lZGlhW21lZGlhSURdKSB7XG4gICAgQ29va2llcy5zZXQoY29va2llTmFtZSwgc2VsZWN0ZWRNZWRpYSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBzZWxlY3RlZFJlc291cmNlcyA9ICQoJyNzZWxlY3RlZC1yZXNvdXJjZXMnKTtcbiAgY29uc3Qgc2VsZWN0ZWREb2N1bWVudHMgPSAkKCcjc2VsZWN0ZWQtZG9jdW1lbnRzJyk7XG4gIGNvbnN0IHJlc291cmNlTGlzdCA9ICQoJy5yZXNvdXJjZS1saXN0Jyk7XG4gIGNvbnN0IHJlc291cmNlSXRlbVdyYXBwZXIgPSAnLnJlc291cmNlLWl0ZW0nO1xuICBjb25zdCBzZWxlY3RlZFJlc291cmNlV3JhcHBlciA9ICcuc2VsZWN0ZWQtcmVzb3VyY2UnO1xuICBjb25zdCBzZWxlY3RlZEltYWdlVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtaW1hZ2UtdGVtcGxhdGUgJyArIHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKS5maXJzdCgpO1xuICBjb25zdCBzZWxlY3RlZFZpZGVvVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtdmlkZW8tdGVtcGxhdGUgJyArIHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKS5maXJzdCgpO1xuICBjb25zdCBzZWxlY3RlZFBERlRlbXBsYXRlID0gJCgnI3NlbGVjdGVkLXBkZi10ZW1wbGF0ZSAnICsgc2VsZWN0ZWRSZXNvdXJjZVdyYXBwZXIpLmZpcnN0KCk7XG4gIGNvbnN0IHNlbGVjdGVkTWVkaWFDb29raWVOYW1lID0gJ3NlbGVjdGVkTWVkaWEnO1xuICBcbiAgZnVuY3Rpb24gY3JlYXRlU2VsZWN0ZWRSZXNvdXJjZShtZWRpYUlELCBtZWRpYSkge1xuICAgIGxldCByZXNvdXJjZVRvQXBwZW5kID0gbnVsbDtcblxuICAgIHN3aXRjaCAobWVkaWEudHlwZSkge1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICBpZiAoc2VsZWN0ZWRWaWRlb1RlbXBsYXRlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb3VyY2VUb0FwcGVuZCA9IHNlbGVjdGVkVmlkZW9UZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJy5yZXNvdXJjZSBzb3VyY2UnKS5maXJzdCgpLmF0dHIoJ3NyYycsIG1lZGlhLnNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBpZiAoc2VsZWN0ZWRJbWFnZVRlbXBsYXRlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb3VyY2VUb0FwcGVuZCA9IHNlbGVjdGVkSW1hZ2VUZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJ2ltZycpLmZpcnN0KCkuYXR0cignc3JjJywgbWVkaWEuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZGYnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNlbGVjdGVkUERGVGVtcGxhdGUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvdXJjZVRvQXBwZW5kID0gc2VsZWN0ZWRQREZUZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCAkaW1nID0gcmVzb3VyY2VUb0FwcGVuZC5maW5kKCdpbWcnKS5maXJzdCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKG1lZGlhLnRodW1ibmFpbCkge1xuICAgICAgICAgICRpbWcuYXR0cignc3JjJywgbWVkaWEudGh1bWJuYWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRpbWcuYXR0cignZGF0YS1wZGYtdGh1bWJuYWlsLWZpbGUnLCBtZWRpYS5zb3VyY2UpO1xuICAgICAgICAkaW1nLmF0dHIoJ2RhdGEtdHlwZScsIG1lZGlhLnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgXG4gICAgcmVzb3VyY2VUb0FwcGVuZC5maW5kKCcuZG93bmxvYWQtYnRuJykuZmlyc3QoKS5hdHRyKCdocmVmJywgbWVkaWEuc291cmNlKTtcbiAgICByZXNvdXJjZVRvQXBwZW5kLmF0dHIoJ2RhdGEtbWVkaWEnLCBtZWRpYUlEKTsgLy8gdXNlZCBhdHRyKCkgYmVjYXVzZSBkYXRhLW1lZGlhIHdpbGwgYmUgcXVlcmllZCBsYXRlclxuXG4gICAgaWYgKG1lZGlhLnR5cGUgPT0gJ2ltYWdlJyB8fCAgbWVkaWEudHlwZSA9PSAndmlkZW8nKSB7XG4gICAgICBzZWxlY3RlZFJlc291cmNlcy5jaGlsZHJlbignLnNlbGVjdGVkLXJlc291cmNlLWxpc3QnKS5maXJzdCgpLmFwcGVuZChyZXNvdXJjZVRvQXBwZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWREb2N1bWVudHMuY2hpbGRyZW4oJy5zZWxlY3RlZC1yZXNvdXJjZS1saXN0JykuZmlyc3QoKS5hcHBlbmQocmVzb3VyY2VUb0FwcGVuZCk7XG4gICAgfVxuXG4gICAgJCgnIycgKyBtZWRpYUlELCByZXNvdXJjZUxpc3QpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcikuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2VsZWN0ZWRSZXNvdXJjZXMubGVuZ3RoID09IDEgfHwgc2VsZWN0ZWREb2N1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAvLyBPbmUgY3ljbGUgZm9yIGFkZGluZyBlYWNoIG1lZGlhIGJhc2VkIG9uIGl0cycgdHlwZSB0byBzZWxlY3RlZCBzZWN0aW9uLlxuICAgIGxldCBjb29raWVzTWVkaWEgPSBDb29raWVzLmdldEpTT04oc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gY29va2llc01lZGlhKSB7XG4gICAgICBDb29raWVzLnNldChzZWxlY3RlZE1lZGlhQ29va2llTmFtZSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29va2llc01lZGlhKSB7XG4gICAgICAgIGlmIChjb29raWVzTWVkaWEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKHByb3AsIGNvb2tpZXNNZWRpYVtwcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGVycy5cbiAgICByZXNvdXJjZUxpc3Qub24oJ2NsaWNrJywgJy5yZXNvdXJjZS1pdGVtIC5zZWxlY3QtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZXNvdXJjZUl0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcik7IC8vIC5yZXNvdXJjZS1pdGVtXG4gICAgICBjb25zdCByZXNvdXJjZSA9IHJlc291cmNlSXRlbS5maW5kKCcucmVzb3VyY2UnKS5maXJzdCgpO1xuICAgICAgbGV0IGVudGl0eSA9IHJlc291cmNlSXRlbS5jaGlsZHJlbignLm1lZGlhLCAuZmlsZScpLmZpcnN0KCk7XG4gICAgICBjb25zdCBmaWxlVHlwZSA9IHJlc291cmNlLmRhdGEoJ3R5cGUnKTtcblxuICAgICAgaWYgKHJlc291cmNlSXRlbS5sZW5ndGggPT0gMCB8fCByZXNvdXJjZS5sZW5ndGggPT0gMCB8fCBlbnRpdHkubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VJdGVtLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZCA9ICQoJy5zZWxlY3RlZC1yZXNvdXJjZVtkYXRhLW1lZGlhPVwiJyArIGVudGl0eS5hdHRyKCdpZCcpICsgJ1wiXScsIHNlbGVjdGVkUmVzb3VyY2VzKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBzZWxlY3RlZCA9ICQoJy5zZWxlY3RlZC1yZXNvdXJjZVtkYXRhLW1lZGlhPVwiJyArIGVudGl0eS5hdHRyKCdpZCcpICsgJ1wiXScsIHNlbGVjdGVkRG9jdW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGNvb2tpZXNEZWxldGVNZWRpYShlbnRpdHkuYXR0cignaWQnKSwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgICAgIHJlc291cmNlSXRlbS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICBzZWxlY3RlZC5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgciA9IGVudGl0eS5maW5kKCcucmVzb3VyY2UnKS5maXJzdCgpO1xuICAgICAgbGV0IGVudGl0eVNvdXJjZSA9IHIuYXR0cignaHJlZicpO1xuICAgICAgbGV0IGVudGl0eUdlbmVyaWMgPSByLmF0dHIoJ2RhdGEtZ2VuZXJpYycpO1xuICAgICAgbGV0IGVudGl0eVRodW1ibmFpbCA9IGVudGl0eS5maW5kKCcudGh1bWJuYWlsJykuZmlyc3QoKS5hdHRyKCdzcmMnKTtcblxuICAgICAgY3JlYXRlU2VsZWN0ZWRSZXNvdXJjZShlbnRpdHkuYXR0cignaWQnKSwge1xuICAgICAgICBnZW5lcmljOiBlbnRpdHlHZW5lcmljLFxuICAgICAgICBzb3VyY2U6IGVudGl0eVNvdXJjZSwgXG4gICAgICAgIHR5cGU6IGZpbGVUeXBlLCBcbiAgICAgICAgdGh1bWJuYWlsOiBlbnRpdHlUaHVtYm5haWxcbiAgICAgIH0pO1xuICAgICAgY29va2llc0FkZE1lZGlhKFxuICAgICAgICBlbnRpdHkuYXR0cignaWQnKSxcbiAgICAgICAgZW50aXR5R2VuZXJpYyxcbiAgICAgICAgZW50aXR5U291cmNlLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgZW50aXR5VGh1bWJuYWlsLFxuICAgICAgICBzZWxlY3RlZE1lZGlhQ29va2llTmFtZVxuICAgICAgKTtcbiAgICAgIHJlc291cmNlSXRlbS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgICQoJy5zZWxlY3RlZC1yZXNvdXJjZS1saXN0Jykub24oJ2NsaWNrJywgJy5zZWxlY3RlZC1yZXNvdXJjZSAudW5zZWxlY3QtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBsZXQgc2VsZWN0ZWRSZXNvdXJjZSA9ICQodGhpcykuY2xvc2VzdChzZWxlY3RlZFJlc291cmNlV3JhcHBlcik7XG5cbiAgICAgIGlmIChzZWxlY3RlZFJlc291cmNlLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGxldCBtZWRpYUlEID0gc2VsZWN0ZWRSZXNvdXJjZS5kYXRhKCdtZWRpYScpO1xuXG4gICAgICAgICQoJyMnICsgbWVkaWFJRCwgcmVzb3VyY2VMaXN0KS5jbG9zZXN0KHJlc291cmNlSXRlbVdyYXBwZXIpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgICBzZWxlY3RlZFJlc291cmNlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnLmdhbGxlcnktY29udGVudCcpLm9uKCdjbGljaycsICcubWVkaWEtc2VsZWN0JywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCAkZ2FsbGVyeUNvbnRlbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5nYWxsZXJ5LWNvbnRlbnQnKTtcbiAgICAgIGNvbnN0ICRnYWxsZXJ5TWVkaWEgPSAkZ2FsbGVyeUNvbnRlbnQuY2hpbGRyZW4oJyNnYWxsZXJ5LW1lZGlhJyk7XG4gICAgICBjb25zdCBtZWRpYUlEID0gJGdhbGxlcnlNZWRpYS5kYXRhKCdtZWRpYScpO1xuXG4gICAgICBpZiAodW5kZWZpbmVkID09PSBtZWRpYUlEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0ICRyZXNvdXJjZUl0ZW0gPSAkKCcjJyArIG1lZGlhSUQsIHJlc291cmNlTGlzdCkuY2xvc2VzdChyZXNvdXJjZUl0ZW1XcmFwcGVyKTtcblxuICAgICAgaWYgKCRyZXNvdXJjZUl0ZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCRnYWxsZXJ5Q29udGVudC5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgICBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuXG4gICAgICAgIC8vIFNldCAnaGVhcnQnIGljb24gdG8gJ3Vuc2VsZWN0ZWQnIHN0YXRlLlxuICAgICAgICAkZ2FsbGVyeUNvbnRlbnQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICRyZXNvdXJjZUl0ZW0ucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG1lZGlhIGZyb20gc2VsZWN0ZWQgc2VjdGlvbi5cbiAgICAgICAgJCgnLnNlbGVjdGVkLXJlc291cmNlW2RhdGEtbWVkaWE9XCInICsgbWVkaWFJRCArICdcIl0nLCBzZWxlY3RlZFJlc291cmNlcykucmVtb3ZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVkaWFUaHVtYm5haWwgPSAkcmVzb3VyY2VJdGVtLmZpbmQoJy50aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ3NyYycpO1xuXG4gICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKG1lZGlhSUQsIHtcbiAgICAgICAgZ2VuZXJpYzogJGdhbGxlcnlNZWRpYS5hdHRyKCdkYXRhLWdlbmVyaWMnKSxcbiAgICAgICAgc291cmNlOiAkZ2FsbGVyeU1lZGlhLmF0dHIoJ3NyYycpLCBcbiAgICAgICAgdHlwZTogJGdhbGxlcnlNZWRpYS5kYXRhKCd0eXBlJyksIFxuICAgICAgICB0aHVtYm5haWw6IG1lZGlhVGh1bWJuYWlsXG4gICAgICB9KTtcbiAgICAgIGNvb2tpZXNBZGRNZWRpYShcbiAgICAgICAgbWVkaWFJRCxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5hdHRyKCdkYXRhLWdlbmVyaWMnKSxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5hdHRyKCdzcmMnKSxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5kYXRhKCd0eXBlJyksXG4gICAgICAgIG1lZGlhVGh1bWJuYWlsLFxuICAgICAgICBzZWxlY3RlZE1lZGlhQ29va2llTmFtZVxuICAgICAgKTtcbiAgICAgICRnYWxsZXJ5Q29udGVudC5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICRyZXNvdXJjZUl0ZW0uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICAkKCcuc2VsZWN0ZWQtaGVhZGVyIGEubGluaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCBzYXZlZE1lZGlhID0gQ29va2llcy5nZXRKU09OKHNlbGVjdGVkTWVkaWFDb29raWVOYW1lKTtcbiAgICAgIGxldCBwcmV2ZW50RG93bmxvYWQgPSB0cnVlO1xuXG4gICAgICBpZiAodW5kZWZpbmVkICE9PSBzYXZlZE1lZGlhICYmIE9iamVjdC5rZXlzKHNhdmVkTWVkaWEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGFyciA9IG51bGw7XG5cbiAgICAgICAgLy8gQ2hlY2sgZG93bmxvYWRhYmxlIGNvbnRlbnQgYmFzZWQgb24gbWVkaWEgdHlwZS5cbiAgICAgICAgaWYgKCR0aGlzLmRhdGEoJ3RhcmdldCcpID09PSAnZG9jdW1lbnRzJykge1xuICAgICAgICAgIGFyciA9IE9iamVjdC52YWx1ZXMoc2F2ZWRNZWRpYSkuZmlsdGVyKG1lZGlhID0+IG1lZGlhLmdlbmVyaWMgPT09ICdkb2NzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyID0gT2JqZWN0LnZhbHVlcyhzYXZlZE1lZGlhKS5maWx0ZXIobWVkaWEgPT4gbWVkaWEuZ2VuZXJpYyAhPT0gJ2RvY3MnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZlbnREb3dubG9hZCA9IGFyci5sZW5ndGggPT09IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2ZW50RG93bmxvYWQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnRG93bmxvYWQgc3RvcHBlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKFwiLnJlc291cmNlLWxpc3QsIC5zZWxlY3RlZC1yZXNvdXJjZXNcIikub24oXCJjbGlja1wiLCBcIi5yZXNvdXJjZS1jb250YWluZXIgLnBsYXktdmlkZW8tYnRuXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBjbGlja2VkID0gJCh0aGlzKTtcbiAgICBjb25zdCB2aWRlb0NvbnRhaW5lciA9IGNsaWNrZWQuc2libGluZ3MoXCJpZnJhbWVcIikuZmlyc3QoKTtcblxuICAgIGNsaWNrZWQuaGlkZSgpO1xuICAgIHZpZGVvQ29udGFpbmVyLmF0dHIoXCJzcmNcIiwgdmlkZW9Db250YWluZXIuYXR0cihcImRhdGEtc3JjXCIpKTtcbiAgfSk7XG59OyIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgbWVudXMgPSAkKCcjaGVhZGVyJykuYWRkKCcucmVnaW9uLW1vYmlsZScpLmZpbmQoJy5ibG9jay1tZW51IC5tZW51Jyk7XG4gIGNvbnN0IGhlYWRlcnMgPSBtZW51cy5maW5kKCcubGV2ZWwtLTEnKTtcblxuICBoZWFkZXJzLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgY29uc3QgaGVhZGVyID0gJCh0aGlzKTtcblxuICAgIG1lbnVzLmZpbmQoJy5zdWInKS5yZW1vdmVDbGFzcygnc3ViLS1vcGVuJyk7XG5cbiAgICBpZiAoaGVhZGVyLmhhc0NsYXNzKCdleHBhbmQnKSkge1xuICAgICAgaGVhZGVyLnJlbW92ZUNsYXNzKCdleHBhbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcbiAgICAgIGhlYWRlcnMucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuXG4gICAgICBoZWFkZXIuYWRkQ2xhc3MoJ2V4cGFuZCcpXG4gICAgICAgIC5maW5kKCcuc3ViJykuYWRkQ2xhc3MoJ3N1Yi0tb3BlbicpO1xuICAgIH1cbiAgfSk7XG5cbiAgJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJzLmZpbHRlcignLmV4cGFuZCcpO1xuICAgIGNvbnN0IG1lbnUgPSBoZWFkZXIuY2xvc2VzdCgnLmJsb2NrLW1lbnUnKTtcblxuICAgIGlmIChtZW51LmZpbmQoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgIGhlYWRlcnMucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuICAgICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBmdW5jdGlvbiBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKCRnYWxsZXJ5LCAkcmVzb3VyY2VJdGVtLCAkcHJldiwgJG5leHQpIHtcbiAgICBsZXQgbWVkaWFTb3VyY2UgPSAkcmVzb3VyY2VJdGVtLmZpbmQoJy5yZXNvdXJjZScpLmZpcnN0KCkuYXR0cignaHJlZicpO1xuICAgIFxuICAgIGlmICgkcmVzb3VyY2VJdGVtLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAkZ2FsbGVyeS5maW5kKCcuZ2FsbGVyeS1jb250ZW50JykuZmlyc3QoKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGdhbGxlcnkuZmluZCgnLmdhbGxlcnktY29udGVudCcpLmZpcnN0KCkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgfVxuXG4gICAgJGdhbGxlcnkuZmluZCgnI2dhbGxlcnktbWVkaWEnKVxuICAgICAgLmF0dHIoJ3NyYycsIG1lZGlhU291cmNlKVxuICAgICAgLmRhdGEoJ21lZGlhJywgJHJlc291cmNlSXRlbS5jaGlsZHJlbignLm1lZGlhJykuZmlyc3QoKS5hdHRyKCdpZCcpKTtcbiAgICAkZ2FsbGVyeS5maW5kKCcubWVkaWEtZG93bmxvYWQnKS5maXJzdCgpLmF0dHIoJ2hyZWYnLCBtZWRpYVNvdXJjZSk7XG4gICAgJGdhbGxlcnkuZmluZCgnLmNvbnRyb2wubmV4dCcpLmZpcnN0KCkuZGF0YSgndGFyZ2V0JywgJG5leHQubGVuZ3RoID09PSAwID8gbnVsbCA6ICRuZXh0KTtcbiAgICAkZ2FsbGVyeS5maW5kKCcuY29udHJvbC5wcmV2JykuZmlyc3QoKS5kYXRhKCd0YXJnZXQnLCAkcHJldi5sZW5ndGggPT09IDAgPyBudWxsIDogJHByZXYpO1xuICB9XG5cbiAgY29uc3QgJGdhbGxlcmllcyA9ICQoJy5nYWxsZXJ5Jyk7XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5nYWxsZXJ5LWNhbGxlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkY2xpY2tlZCA9ICQodGhpcyk7XG4gICAgY29uc3QgJHJlc291cmNlSXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJGNsaWNrZWQuZGF0YSgncGFyZW50JykpO1xuXG4gICAgc2V0R2FsbGVyeURpc3BsYXlNZWRpYShcbiAgICAgICQoJGNsaWNrZWQuZGF0YSgndGFyZ2V0JykpLFxuICAgICAgJGNsaWNrZWQuY2xvc2VzdCgkY2xpY2tlZC5kYXRhKCdwYXJlbnQnKSksXG4gICAgICAkcmVzb3VyY2VJdGVtLnByZXYoKSxcbiAgICAgICRyZXNvdXJjZUl0ZW0ubmV4dCgpXG4gICAgKTtcbiAgfSk7XG5cbiAgJGdhbGxlcmllcy5vbignY2xpY2snLCAnLmNvbnRyb2wnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJGNsaWNrZWQgPSAkKHRoaXMpO1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkY2xpY2tlZC5kYXRhKCd0YXJnZXQnKTsgLy8gTmV4dCBvciBwcmV2IG1lZGlhIHRvIHNob3cuXG5cbiAgICBpZiAoISR0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKFxuICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLmdhbGxlcnknKSxcbiAgICAgICR0YXJnZXQsXG4gICAgICAkdGFyZ2V0LnByZXYoKSxcbiAgICAgICR0YXJnZXQubmV4dCgpXG4gICAgKTtcbiAgfSk7XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAvLyBTaG93IG1vZGFsLlxuICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLm1vZGFsLWNhbGxlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKCQodGhpcykuYXR0cignZGF0YS10YXJnZXQnKSArICcubW9kYWwnKS5hZGRDbGFzcygnc2hvdycpO1xuICB9KTtcblxuICAvLyBDbG9zZSBtb2RhbC5cbiAgLy8kKCcuY2xvc2UtbW9kYWwnKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmNsb3NlLW1vZGFsJywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCB0YXJnZXQgPSAkdGhpcy5kYXRhKCd0YXJnZXQnKTtcbiAgICBsZXQgJG1vZGFsID0gbnVsbDtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICRtb2RhbCA9ICQodGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJG1vZGFsID0gJHRoaXMuY2xvc2VzdCgnLm1vZGFsJyk7XG4gICAgfVxuXG4gICAgJG1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgJCgnI3BkZi1jb250YWluZXInLCAkbW9kYWwpLnJlbW92ZSgpO1xuICB9KTtcblxuICAvLyBDbG9zZSBhbGwgbW9kYWxzIHdoZW5ldmVyIHVzZXIgY2xpY2tzIG91dHNpZGUgbW9kYWwuXG4gICQod2luZG93KS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgJG1vZGFsID0gJChlLnRhcmdldCk7XG5cbiAgICBpZiAoJG1vZGFsLmlzKCcubW9kYWwnKSAmJiAkbW9kYWwuaGFzQ2xhc3MoJ3Nob3cnKSkge1xuICAgICAgJG1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgICAkKCcjcGRmLWNvbnRhaW5lcicsICRtb2RhbCkucmVtb3ZlKCk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMubW90aW9uc19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJCgnI3ZpZXdzLWV4cG9zZWQtZm9ybS1tb3Rpb25zLWJsb2NrLW1vdGlvbi1wbGF0Zm9ybScpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwidHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLXR5cGUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1R5cGUnKSxcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJzdGF0dXNcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi1zdGF0dXMnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1N0YXR1cycpLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImNyZWF0ZWRfeWVhclwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLWNyZWF0ZWQteWVhcicpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnWWVhcicpLFxuICAgICAgfSk7ICAgICAgXG5cdCAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJzb3J0X2J5XCJdJykub25jZSgnc2VsZWN0Mi1zb3J0LWJ5Jykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdTb3J0JyksXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiZmllbGRfbW90aW9uX3N0YXR1dG9yeV9udW1iZXJfdmFsdWVcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi1maWVsZC1tb3Rpb24tc3RhdHV0b3J5LW51bWJlci12YWx1ZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnU3RhdHV0b3J5IE51bWJlcicpLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImZpZWxkX21vdGlvbl9wb2xpY3lfbnVtYmVyX3ZhbHVlXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tZmllbGQtbW90aW9uLXBvbGljeS1udW1iZXItdmFsdWUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1N0YXR1dG9yeSBOdW1iZXInKSxcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJmaWVsZF9tb3Rpb25fc3RhdHVzX3ZhbHVlXzFcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi1zdGF0dXMtdmFsdWUtMScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnUmVzb2x1dGlvbicpLFxuICAgICAgfSk7IFxuXG4gICAgICBjb25zdCAkYWN0aXZlZm9ybSA9ICQoJyN2aWV3cy1leHBvc2VkLWZvcm0tbW90aW9ucy1hY3RpdmUtbW90aW9uLWxpc3QnKS5maXJzdCgpO1xuXG4gICAgICAkYWN0aXZlZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cInR5cGVcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi10eXBlJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdUeXBlJyksXG4gICAgICB9KTtcbiAgICAgICRhY3RpdmVmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwic3RhdHVzXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tc3RhdHVzJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdTdGF0dXMnKSxcbiAgICAgIH0pO1xuICAgICAgJGFjdGl2ZWZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJjcmVhdGVkX3llYXJcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi1jcmVhdGVkLXllYXInKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1llYXInKSxcbiAgICAgIH0pOyAgICAgIFxuICAgICRhY3RpdmVmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwic29ydF9ieVwiXScpLm9uY2UoJ3NlbGVjdDItc29ydC1ieScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnU29ydCcpLFxuICAgICAgfSk7XG4gICAgICAkYWN0aXZlZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImZpZWxkX21vdGlvbl9zdGF0dXRvcnlfbnVtYmVyX3ZhbHVlXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tZmllbGQtbW90aW9uLXN0YXR1dG9yeS1udW1iZXItdmFsdWUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1N0YXR1dG9yeSBOdW1iZXInKSxcbiAgICAgIH0pO1xuICAgICAgJGFjdGl2ZWZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJmaWVsZF9tb3Rpb25fcG9saWN5X251bWJlcl92YWx1ZVwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLWZpZWxkLW1vdGlvbi1wb2xpY3ktbnVtYmVyLXZhbHVlJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdTdGF0dXRvcnkgTnVtYmVyJyksXG4gICAgICB9KTtcbiAgICAgICRhY3RpdmVmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiZmllbGRfbW90aW9uX3N0YXR1c192YWx1ZV8xXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tc3RhdHVzLXZhbHVlLTEnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1Jlc29sdXRpb24nKSxcbiAgICAgIH0pOyAgICAgICBcblxuXG4gICAgICBjb25zdCAkYXJjaGl2ZWZvcm0gPSAkKCcjdmlld3MtZXhwb3NlZC1mb3JtLW1vdGlvbnMtYXJjaGl2ZS1tb3Rpb24tbGlzdCcpLmZpcnN0KCk7XG5cbiAgICAgICRhcmNoaXZlZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cInR5cGVcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi10eXBlJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdUeXBlJyksXG4gICAgICB9KTtcbiAgICAgICRhcmNoaXZlZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cInN0YXR1c1wiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLXN0YXR1cycpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnU3RhdHVzJyksXG4gICAgICB9KTtcbiAgICAgICRhcmNoaXZlZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImNyZWF0ZWRfeWVhclwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLWNyZWF0ZWQteWVhcicpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnWWVhcicpLFxuICAgICAgfSk7ICAgICAgXG4gICAgJGFyY2hpdmVmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwic29ydF9ieVwiXScpLm9uY2UoJ3NlbGVjdDItc29ydC1ieScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnU29ydCcpLFxuICAgICAgfSk7XG4gICAgICAkYXJjaGl2ZWZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJmaWVsZF9tb3Rpb25fc3RhdHV0b3J5X251bWJlcl92YWx1ZVwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLWZpZWxkLW1vdGlvbi1zdGF0dXRvcnktbnVtYmVyLXZhbHVlJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdTdGF0dXRvcnkgTnVtYmVyJyksXG4gICAgICB9KTtcbiAgICAgICRhcmNoaXZlZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImZpZWxkX21vdGlvbl9wb2xpY3lfbnVtYmVyX3ZhbHVlXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tZmllbGQtbW90aW9uLXBvbGljeS1udW1iZXItdmFsdWUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1N0YXR1dG9yeSBOdW1iZXInKSxcbiAgICAgIH0pO1xuICAgICAgJGFyY2hpdmVmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiZmllbGRfbW90aW9uX3N0YXR1c192YWx1ZV8xXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tc3RhdHVzLXZhbHVlLTEnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1Jlc29sdXRpb24nKSxcbiAgICAgIH0pOyAgXG5cbiAgICAgIC8vICQod2luZG93KS5vbihcImxvYWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gICAvLyAkKCdib2R5JykuYWRkQ2xhc3MoJ2xvYWRlcicpO1xuICAgICAgLy8gICAvLyAkKCcjc3Bpbm5lclNjcmVlbicpLnJlbW92ZUNsYXNzKCdoaWRlJyk7XG4gICAgICAvLyAgICQoJy52aWV3LWRpc3BsYXktaWQtYWN0aXZlX21vdGlvbl9saXN0JykucmVtb3ZlQ2xhc3MoJ2hpZGUnKTtcbiAgICAgIC8vICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnc2hvdycpO1xuICAgICAgLy8gICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnaGlkZScpO1xuICAgICAgLy8gICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5yZW1vdmVDbGFzcygnc2hvdycpO1xuICAgICAgLy8gICAvLyAkKFwiLmJsb2NrLXZpZXdzLWJsb2NrbW90aW9ucy1hY3RpdmUtbW90aW9uLWxpc3RcIikubG9hZChsb2NhdGlvbi5ocmVmICsgXCIgLnZpZXctZGlzcGxheS1pZC1hcmNoaXZlX21vdGlvbl9saXN0XCIpO1xuICAgICAgLy8gfSk7XG4gICAgICAvLyAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAvLyAgICQoJy52aWV3LWRpc3BsYXktaWQtYWN0aXZlX21vdGlvbl9saXN0JykucmVtb3ZlQ2xhc3MoJ2hpZGUnKTtcbiAgICAgIC8vICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnc2hvdycpO1xuICAgICAgLy8gICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnaGlkZScpO1xuICAgICAgLy8gICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5yZW1vdmVDbGFzcygnc2hvdycpO1xuICAgICAgLy8gfSk7XG4gICAgICAkKCcuYWN0aXZlLW1vdGlvbicpLmNsaWNrKGZ1bmN0aW9uKCl7XG4gICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYWN0aXZlX21vdGlvbl9saXN0JykucmVtb3ZlQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnc2hvdycpO1xuICAgICAgICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnaGlkZScpO1xuICAgICAgICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5yZW1vdmVDbGFzcygnc2hvdycpO1xuICAgICAgfSk7XG4gICAgICAkKCcuYXJjaGl2ZS1tb3Rpb24nKS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgICAkKCcudmlldy1kaXNwbGF5LWlkLWFjdGl2ZV9tb3Rpb25fbGlzdCcpLmFkZENsYXNzKCdoaWRlJyk7XG4gICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYWN0aXZlX21vdGlvbl9saXN0JykucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hcmNoaXZlX21vdGlvbl9saXN0JykucmVtb3ZlQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hcmNoaXZlX21vdGlvbl9saXN0JykuYWRkQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICAgJChcIi5ibG9jay12aWV3cy1ibG9ja21vdGlvbnMtYXJjaGl2ZS1tb3Rpb24tbGlzdFwiKS5hZGRDbGFzcyhcImFjdGl2ZS10YWJcIik7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGlkZSAmIHNob3cgdGhlIGZpbHRlciBkZXBvbmRzIHRoZSBwYWdlIHVybFxuICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIGlmKHNlYXJjaFBhcmFtcy5oYXMoJ2ZpbHRlcl90eXBlJykpIHtcbiAgICAgICAgICBzd2l0Y2ggKHNlYXJjaFBhcmFtcy5nZXQoJ2ZpbHRlcl90eXBlJykpIHtcbiAgICAgICAgICBjYXNlICdhcmNoaXZlJzpcbiAgICAgICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYWN0aXZlX21vdGlvbl9saXN0JykuYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYWN0aXZlX21vdGlvbl9saXN0JykucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYXJjaGl2ZV9tb3Rpb25fbGlzdCcpLnJlbW92ZUNsYXNzKCdoaWRlJyk7XG4gICAgICAgICAgICAkKCcudmlldy1kaXNwbGF5LWlkLWFyY2hpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnc2hvdycpO1xuICAgICAgICAgICAgJChcIi5ibG9jay12aWV3cy1ibG9ja21vdGlvbnMtYXJjaGl2ZS1tb3Rpb24tbGlzdFwiKS5hZGRDbGFzcyhcImFjdGl2ZS10YWJcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgICAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnc2hvdycpO1xuICAgICAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hcmNoaXZlX21vdGlvbl9saXN0JykuYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYXJjaGl2ZV9tb3Rpb25fbGlzdCcpLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgICAgICAgICAkKFwiLmJsb2NrLXZpZXdzLWJsb2NrbW90aW9ucy1hcmNoaXZlLW1vdGlvbi1saXN0XCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlLXRhYlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQgOlxuICAgICAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgICAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hY3RpdmVfbW90aW9uX2xpc3QnKS5hZGRDbGFzcygnc2hvdycpO1xuICAgICAgICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1hcmNoaXZlX21vdGlvbl9saXN0JykuYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgICAgICAgICAgICQoJy52aWV3LWRpc3BsYXktaWQtYXJjaGl2ZV9tb3Rpb25fbGlzdCcpLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgICAgICAgICAkKFwiLmJsb2NrLXZpZXdzLWJsb2NrbW90aW9ucy1hcmNoaXZlLW1vdGlvbi1saXN0XCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlLXRhYlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbW9tIGJhY2tncm91bmQgZm9yIGZpbHRlclxuICAgICAgJCgnLmJsb2NrLXZpZXdzLWJsb2NrbW90aW9ucy1hcmNoaXZlLW1vdGlvbi1saXN0JykucGFyZW50cygnLmNvbnRlbnRfX2l0ZW0nKS5hZGRDbGFzcyhcIm1vdGlvbi1maWx0ZXJcIik7XG5cbiAgICAgICQoXCIudmlld3MtZXhwb3NlZC1mb3JtIC5mb3JtLWFjdGlvbnNcIikuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgICQodGhpcykucGFyZW50cyhcIi52aWV3cy1lbGVtZW50LWNvbnRhaW5lci5ibG9jay12aWV3c1wiKS5hZGRDbGFzcyhcImFjdGl2ZS10YWJcIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cblxuKGZ1bmN0aW9uICgkLCBEcnVwYWwpIHtcbiAgRHJ1cGFsLmJlaGF2aW9ycy5teU1vZHVsZUJlaGF2aW9yID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24gKGNvbnRleHQsIHNldHRpbmdzKSB7XG5cbiAgICAgIGlmKGRydXBhbFNldHRpbmdzLmZzY19tb3Rpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBwb2xpY3lfbnVtYmVyID0gZHJ1cGFsU2V0dGluZ3MuZnNjX21vdGlvbi5tb3Rpb25fbnVtYmVyLnBvbGljeTtcbiAgICAgICAgdmFyIHN0YXR1dG9yeV9udW1iZXIgPSBkcnVwYWxTZXR0aW5ncy5mc2NfbW90aW9uLm1vdGlvbl9udW1iZXIuc3RhdHV0b3J5O1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdmYWtlLXNlbGVjdC1zdGF0dXRvcnknKTtcbiAgICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHZhciBpbnB1dFZhbCA9ICQoJy5zdGF0dXRvcnktaW5wdXQtZmllbGQnKS52YWwoKTtcbiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XG4gICAgICAgIHNlbGVjdC5uYW1lID0gXCJmaWVsZF9tb3Rpb25fc3RhdHV0b3J5X251bWJlcl92YWx1ZVwiO1xuICAgICAgICBzZWxlY3QuaWQgPSBcImVkaXQtZmllbGQtbW90aW9uLXN0YXR1dG9yeS1udW1iZXItdmFsdWVcIjtcbiAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiZmFrZS1zZWxlY3Qtc3RhdHV0b3J5XCIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHN0YXR1dG9yeV9udW1iZXIpIHtcbiAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgICAgICBvcHRpb24udmFsdWUgPSB2YWw7XG4gICAgICAgICAgaWYodmFsID09ICdBbGwnKXtcbiAgICAgICAgICAgIHZhbCA9ICdTdGF0dXRvcnkgTnVtYmVyJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9uLnRleHQgPSB2YWw7XG4gICAgICAgICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgJCgnaW5wdXRbbmFtZT1cImZpZWxkX21vdGlvbl9zdGF0dXRvcnlfbnVtYmVyX3ZhbHVlJykucmVtb3ZlKCk7XG4gICAgICAgICQoXCIuZm9ybS1pdGVtLWZpZWxkLW1vdGlvbi1zdGF0dXRvcnktbnVtYmVyLXZhbHVlXCIpLmFwcGVuZChzZWxlY3QpO1xuICAgICAgICAkKCcuZm9ybS1pdGVtLWZpZWxkLW1vdGlvbi1zdGF0dXRvcnktbnVtYmVyLXZhbHVlIC5zZWxlY3QyJykuc2hvdygpO1xuICAgICAgfVxuXG4gICAgICAkKCcjdmlld3MtZXhwb3NlZC1mb3JtLW1vdGlvbnMtYmxvY2stbW90aW9uLXBsYXRmb3JtJywnI3ZpZXdzLWV4cG9zZWQtZm9ybS1tb3Rpb25zLWFyY2hpdmUtbW90aW9uLWxpc3QnLCcjdmlld3MtZXhwb3NlZC1mb3JtLW1vdGlvbnMtYWN0aXZlLW1vdGlvbi1saXN0JykuY2xpY2soZnVuY3Rpb24oZSkgeyAgICBcbiAgICAgICAgaWYoJChlLnRhcmdldCkuY2xvc2VzdCgnLmZvcm0tYWN0aW9ucycpLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBzZWxlY3RlZFZhbCA9ICQoJy5mYWtlLXNlbGVjdC1zdGF0dXRvcnknKS52YWwoKTtcbiAgICAgICAgICAkKCcuZmFrZS1zZWxlY3Qtc3RhdHV0b3J5JykucmVtb3ZlKCk7XG4gICAgICAgICAgJCgnLmZvcm0taXRlbS1maWVsZC1tb3Rpb24tc3RhdHV0b3J5LW51bWJlci12YWx1ZSAuc2VsZWN0MicpLmhpZGUoKTtcbiAgICAgICAgICB2YXIgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc3RhdHV0b3J5LWlucHV0LWZpZWxkJyk7XG4gICAgICAgICAgaWYoIWlucHV0RWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICQoXCIuZm9ybS1pdGVtLWZpZWxkLW1vdGlvbi1zdGF0dXRvcnktbnVtYmVyLXZhbHVlXCIpLmFwcGVuZCgnPGlucHV0IGNsYXNzPVwic3RhdHV0b3J5LWlucHV0LWZpZWxkXCIgaWQ9XCJlZGl0LWZpZWxkLW1vdGlvbi1zdGF0dXRvcnktbnVtYmVyLXZhbHVlXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiZmllbGRfbW90aW9uX3N0YXR1dG9yeV9udW1iZXJfdmFsdWVcIj48L2lucHV0PicpO1xuICAgICAgICAgICAgJCgnI2VkaXQtZmllbGQtbW90aW9uLXN0YXR1dG9yeS1udW1iZXItdmFsdWUnKS52YWwoc2VsZWN0ZWRWYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWl0ZW0tZmllbGQtbW90aW9uLXN0YXR1dG9yeS1udW1iZXItdmFsdWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT0qKioqKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgIHZhciBwb2xpY3lFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZmFrZS1zZWxlY3QtcG9saWN5Jyk7XG4gICAgICBpZiAoIXBvbGljeUVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIC8vIHZhciBpbnB1dFZhbCA9ICQoJy5zdGF0dXRvcnktaW5wdXQtZmllbGQnKS52YWwoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coaW5wdXRWYWwpO1xuICAgICAgICB2YXIgcG9saWN5U2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICAgICAgcG9saWN5U2VsZWN0Lm5hbWUgPSBcImZpZWxkX21vdGlvbl9wb2xpY3lfbnVtYmVyX3ZhbHVlXCI7XG4gICAgICAgIHBvbGljeVNlbGVjdC5pZCA9IFwiZWRpdC1maWVsZC1tb3Rpb24tcG9saWN5LW51bWJlci12YWx1ZVwiO1xuICAgICAgICBwb2xpY3lTZWxlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJmYWtlLXNlbGVjdC1wb2xpY3lcIik7XG5cbiAgICAgICAgZm9yIChjb25zdCBwb2xpY3kgb2YgcG9saWN5X251bWJlcikge1xuICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IHBvbGljeTtcbiAgICAgICAgICBpZihwb2xpY3kgPT0gJ0FsbCcpe1xuICAgICAgICAgICAgcG9saWN5ID0gJ1BvbGljeSBOdW1iZXInO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHRpb24udGV4dCA9IHBvbGljeTtcbiAgICAgICAgICBwb2xpY3lTZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICAkKCdpbnB1dFtuYW1lPVwiZmllbGRfbW90aW9uX3BvbGljeV9udW1iZXJfdmFsdWUnKS5yZW1vdmUoKTtcbiAgICAgICAgJChcIi5mb3JtLWl0ZW0tZmllbGQtbW90aW9uLXBvbGljeS1udW1iZXItdmFsdWVcIikuYXBwZW5kKHBvbGljeVNlbGVjdCk7XG4gICAgICAgICQoJy5mb3JtLWl0ZW0tZmllbGQtbW90aW9uLXBvbGljeS1udW1iZXItdmFsdWUgLnNlbGVjdDInKS5zaG93KCk7XG4gICAgICB9XG5cbiAgICAgICQoJyN2aWV3cy1leHBvc2VkLWZvcm0tbW90aW9ucy1ibG9jay1tb3Rpb24tcGxhdGZvcm0nLCcjdmlld3MtZXhwb3NlZC1mb3JtLW1vdGlvbnMtYXJjaGl2ZS1tb3Rpb24tbGlzdCcsJyN2aWV3cy1leHBvc2VkLWZvcm0tbW90aW9ucy1hY3RpdmUtbW90aW9uLWxpc3QnKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmKCQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWFjdGlvbnMnKS5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRWYWwgPSAkKCcuZmFrZS1zZWxlY3QtcG9saWN5JykudmFsKCk7XG4gICAgICAgICAgJCgnLmZha2Utc2VsZWN0LXN0YXR1dG9yeScpLnJlbW92ZSgpO1xuICAgICAgICAgICQoJy5mb3JtLWl0ZW0tZmllbGQtbW90aW9uLXBvbGljeS1udW1iZXItdmFsdWUgLnNlbGVjdDInKS5oaWRlKCk7XG4gICAgICAgICAgdmFyIGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3BvbGljeS1pbnB1dC1maWVsZCcpO1xuICAgICAgICAgIGlmKCFpbnB1dEVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAkKFwiLmZvcm0taXRlbS1maWVsZC1tb3Rpb24tcG9saWN5LW51bWJlci12YWx1ZVwiKS5hcHBlbmQoJzxpbnB1dCBjbGFzcz1cInBvbGljeS1pbnB1dC1maWVsZFwiIGlkPVwiZWRpdC1maWVsZC1tb3Rpb24tcG9saWN5LW51bWJlci12YWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZpZWxkX21vdGlvbl9wb2xpY3lfbnVtYmVyX3ZhbHVlXCI+PC9pbnB1dD4nKTtcbiAgICAgICAgICAgICQoJy5wb2xpY3ktaW5wdXQtZmllbGQnKS52YWwoc2VsZWN0ZWRWYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCQoZS50YXJnZXQpLmNsb3Nlc3QoJy5mb3JtLWl0ZW0tZmllbGQtbW90aW9uLXBvbGljeS1udW1iZXItdmFsdWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuICB9O1xufSkoalF1ZXJ5LCBEcnVwYWwpO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBlcnJvckxvYWRpbmcgPSBEcnVwYWwudCgnVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4nKTtcbiAgY29uc3QgbG9hZGluZ01vcmUgPSBEcnVwYWwudCgnTG9hZGluZyBtb3JlIHJlc3VsdHMnKTtcbiAgY29uc3Qgbm9SZXN1bHRzID0gRHJ1cGFsLnQoJ05vIHJlc3VsdHMgZm91bmQnKTtcbiAgY29uc3Qgc2VhcmNoaW5nID0gRHJ1cGFsLnQoJ1NlYXJjaGluZycpO1xuICBjb25zdCBtYXhpbXVtU2VsZWN0ZWQgPSBEcnVwYWwudCgnWW91IGNhbiBvbmx5IHNlbGVjdCAlbWF4aW11bSBpdGVtJyk7XG4gIGNvbnN0IGlucHV0VG9vTG9uZyA9IERydXBhbC50KCdQbGVhc2UgZGVsZXRlICVudW1iZXIgY2hhcmFjdGVyJyk7XG4gIGNvbnN0IGlucHV0VG9vU2hvcnQgPSBEcnVwYWwudCgnUGxlYXNlIGVudGVyICVudW1iZXIgb3IgbW9yZSBjaGFyYWN0ZXJzJyk7XG4gIGNvbnN0IHNlbGVjdG9yID0gJyNibG9jay1uZXdzLXBhZ2UtZmlsdGVycywgI3ZpZXdzLWV4cG9zZWQtZm9ybS1hZHJpYS1iYWxrYW4tbmV3c2ZlZWQtcGFnZSc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gRHJ1cGFsLnQoJ0NhdGVnb3J5Jyk7XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy5uZXdzX2ZpbHRlcl9zZWxlY3QgPSB7XG4gICAgYXR0YWNoOiAoY29udGV4dCwgc2V0dGluZ3MpID0+IHtcbiAgICAgICQoc2VsZWN0b3IsIGNvbnRleHQpLmFkZEJhY2soc2VsZWN0b3IpLmZpcnN0KCkuZmluZCgnc2VsZWN0Jykub25jZSgnc2VsZWN0MicpLnNlbGVjdDIoe1xuICAgICAgICAvLyBUbyBoaWRlIHNlYXJjaCBib3hcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICBlcnJvckxvYWRpbmc6ICgpID0+IGVycm9yTG9hZGluZyxcbiAgICAgICAgICBsb2FkaW5nTW9yZTogKCkgPT4gbG9hZGluZ01vcmUsXG4gICAgICAgICAgbm9SZXN1bHRzOiAoKSA9PiBub1Jlc3VsdHMsXG4gICAgICAgICAgc2VhcmNoaW5nOiAoKSA9PiBzZWFyY2hpbmcsXG4gICAgICAgICAgbWF4aW11bVNlbGVjdGVkOiAoeyBtYXhpbXVtIH0pID0+IG1heGltdW1TZWxlY3RlZC5yZXBsYWNlKCclbWF4aW11bScsIG1heGltdW0pLFxuICAgICAgICAgIGlucHV0VG9vTG9uZzogKHsgbWF4aW11bSwgaW5wdXQ6IHsgbGVuZ3RoIH0gfSkgPT4gaW5wdXRUb29Mb25nLnJlcGxhY2UoJyVudW1iZXInLCBsZW5ndGggLSBtYXhpbXVtKSxcbiAgICAgICAgICBpbnB1dFRvb1Nob3J0OiAoeyBtaW5pbXVtLCBpbnB1dDogeyBsZW5ndGggfSB9KSA9PiBpbnB1dFRvb1Nob3J0LnJlcGxhY2UoJyVudW1iZXInLCBtaW5pbXVtIC0gbGVuZ3RoKSxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdkZWJvdW5jZSc7XG5pbXBvcnQgYnJlYWtwb2ludHMsIHsga2V5cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IHBhcmFncmFwaCA9ICQoJy5wYXJhZ3JhcGgtLXR5cGUtLXBhcnRuZXJzLWxpc3QnKTtcbiAgY29uc3QgY29udGFpbmVyID0gcGFyYWdyYXBoLmZpbmQoJy52aWV3LWNvbnRlbnQnKTtcblxuICBjb250YWluZXJcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICByZXdpbmQ6IGZhbHNlLFxuICAgICAgYXV0b1dpZHRoOiB0cnVlLFxuICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgYXV0b3BsYXk6IHRydWUsXG4gICAgICBhdXRvcGxheUhvdmVyUGF1c2U6IHRydWUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIG1hcmdpbjogMTVcbiAgICAgICAgfSxcbiAgICAgICAgJzc2OCc6IHtcbiAgICAgICAgICBtYXJnaW46IDMwXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpO1xuICBjb25zdCAkYm9keSA9ICRkb2N1bWVudC5maW5kKCdib2R5Jyk7XG4gIGNvbnN0IGNhbGxlcnMgPSAkKCcucG9wdXAtY2FsbGVyJyk7XG4gIGNvbnN0IHBvcHVwcyA9ICQoJy5wb3B1cCcpO1xuICBjb25zdCBvdmVybGF5ID0gKCkgPT4gJCgnPGRpdj4nKS5hdHRyKCdpZCcsICdvdmVybGF5Jyk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlcihlKSB7XG4gICAgY29uc3QgeyBjYWxsZXIsIHBvcHVwIH0gPSBlLmRhdGE7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gaWYgY3VycmVudCBjYWxsZXIgZG9lc24ndCBzZWxlY3RlZFxuICAgIC8vIG90aGVycyBtaWdodCBiZSwgc28gbGV0J3MgY2xlYXIgdGhlbVxuICAgIGlmICghY2FsbGVyLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICBjbG9zZUFsbCgpO1xuICAgIH1cblxuICAgIGNhbGxlci50b2dnbGVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICBwb3B1cC50b2dnbGVDbGFzcygnb3BlbmVkJyk7XG4gICAgJGRvY3VtZW50LnRyaWdnZXIoJ3BvcHVwLm9wZW5lZCcsIFtwb3B1cF0pO1xuICAgICRib2R5LnRvZ2dsZUNsYXNzKCdwb3B1cC1vcGVuZWQnKTtcblxuICAgIGlmIChwb3B1cC5oYXNDbGFzcygnd2l0aC1vdmVybGF5JykpIHtcbiAgICAgIGNvbnN0IG9sID0gb3ZlcmxheSgpO1xuXG4gICAgICBwb3B1cC5iZWZvcmUoIG9sICk7XG4gICAgICBvbC5mYWRlSW4oMjUwKTtcbiAgICAgICRib2R5LmFkZENsYXNzKCdjbGlwJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VBbGwoKSB7XG4gICAgY2FsbGVycy5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICBwb3B1cHMucmVtb3ZlQ2xhc3MoJ29wZW5lZCBmdWxsJyk7XG4gICAgcG9wdXBzLnByZXYoJyNvdmVybGF5JykucmVtb3ZlKCk7XG4gICAgJGJvZHkucmVtb3ZlQ2xhc3MoJ2NsaXAnKS5yZW1vdmVDbGFzcygncG9wdXAtb3BlbmVkJyk7XG4gIH1cblxuICBjYWxsZXJzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgY2FsbGVyID0gJCh0aGlzKTtcbiAgICBjb25zdCBwb3B1cFNlbGVjdG9yID0gY2FsbGVyLmRhdGEoJ3BvcHVwJyk7XG4gICAgbGV0IHBvcHVwO1xuXG4gICAgaWYgKHBvcHVwU2VsZWN0b3IpIHtcbiAgICAgIHBvcHVwID0gJChwb3B1cFNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wdXAgPSBjYWxsZXIucGFyZW50KCkuZmluZCgnLnBvcHVwJyk7XG4gICAgfVxuXG4gICAgaWYgKHBvcHVwLmxlbmd0aCkge1xuICAgICAgY2FsbGVyLmNsaWNrKHtjYWxsZXIsIHBvcHVwfSwgaGFuZGxlcik7XG4gICAgfVxuICB9KTtcblxuICBwb3B1cHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBjb25zdCBwb3B1cCA9ICQodGhpcyk7XG4gICAgY29uc3QgY2xvc2UgPSBwb3B1cC5maW5kKCcuY2xvc2UnKTtcbiAgICBjb25zdCBmdWxsID0gcG9wdXAuZmluZCgnLnBvcHVwLXN3aXRjaC1mdWxsJyk7XG5cbiAgICBjbG9zZS5jbGljayhjbG9zZUFsbCk7XG5cbiAgICBmdWxsLmNsaWNrKCgpID0+IGZ1bGwuY2xvc2VzdCgnLnBvcHVwJykuYWRkQ2xhc3MoJ2Z1bGwnKSk7XG4gIH0pO1xuXG4gICRib2R5LmNsaWNrKChlKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgY2xpY2sgb24gZG9jdW1lbnQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBwb3B1cCB3aW5kb3csXG4gICAgLy8gaWYgbm90IGNsb3NlIGFjdGl2ZSBwb3B1cCBhbmQgdW5zZWxlY3QgY2FsbGVyXG4gICAgaWYgKCEkKGUudGFyZ2V0KS5jbG9zZXN0KHBvcHVwcykubGVuZ3RoKSB7XG4gICAgICBjbG9zZUFsbCgpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGNhc2VMaXN0Vmlld3NCbG9ja1NlbGVjdG9yID0gJyNibG9jay12aWV3cy1ibG9jay1hcnRpY2xlLWxpc3QtcXVpY2stYmxvY2stcHJvY2Vzcy1saXN0JztcbiAgY29uc3QgdG9waWNQbGFjZWhvbGRlciA9IERydXBhbC50KCdUb3BpYycpO1xuICBjb25zdCBzdGF0dXNQbGFjZWhvbGRlciA9IERydXBhbC50KCdTdGF0dXMnKTtcblxuICBEcnVwYWwuYmVoYXZpb3JzLnByb2Nlc3Nlc19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJChjYXNlTGlzdFZpZXdzQmxvY2tTZWxlY3RvcikuZmlyc3QoKTtcblxuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJzdGF0dXNcIl0nKS5vbmNlKCdzZWxlY3QyLXN0YXR1cycpLnNlbGVjdDIoe1xuICAgICAgICAvLyBUbyBoaWRlIHNlYXJjaCBib3guXG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHN0YXR1c1BsYWNlaG9sZGVyLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cInRvcGljXCJdJykub25jZSgnc2VsZWN0Mi10b3BpYycpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0b3BpY1BsYWNlaG9sZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgYnJlYWtwb2ludHMgZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgaGFzaCBmcm9tICcuL2hhc2gnO1xuaW1wb3J0IHNjcm9sbERpcmVjdGlvbiBmcm9tICcuL3Njcm9sbC1kaXJlY3Rpb24nO1xuXG5jb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5jb25zdCAkaGVhZGVyID0gJCgnI2hlYWRlcicpO1xuY29uc3QgJHF1aWNrX2xpbmtzID0gJCgnLnF1aWNrLWxpbmtzJyk7XG5jb25zdCAkcGxhY2Vob2xkZXIgPSAkcXVpY2tfbGlua3MuZmluZCgnLmZpeGVkLXBsYWNlaG9sZGVyJyk7XG5cbmZ1bmN0aW9uIGNsaWNrSGFuZGxlcihldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIGNvbnN0IGlkID0gdGhpcy5oYXNoLnN1YnN0cmluZygxKTtcbiAgY29uc3QgJGRlc3RpbmF0aW9uRWxlbWVudCA9ICQoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSApO1xuICBjb25zdCBvZmZzZXQgPSBwYXJzZUludCgkYm9keS5jc3MoJ3BhZGRpbmctdG9wJykpICsgJGhlYWRlci5oZWlnaHQoKSArICRxdWlja19saW5rcy5oZWlnaHQoKTtcblxuICBoYXNoLnVwZGF0ZSgnIycgKyBpZCk7XG5cbiAgJCgnaHRtbCwgYm9keScpLmRlbGF5KDEwKS5hbmltYXRlKHtcbiAgICBzY3JvbGxUb3A6ICRkZXN0aW5hdGlvbkVsZW1lbnQub2Zmc2V0KCkudG9wIC0gb2Zmc2V0XG4gIH0sIDcwMCk7XG59XG5cbmZ1bmN0aW9uIGlzU3RpY2t5KCkge1xuICBpZiAoYnJlYWtwb2ludHMubWluLmJnLm1hdGNoZXMpIHtcbiAgICBzY3JvbGxIYW5kbGVyKCk7XG4gICAgJHdpbmRvdy5vbignc2Nyb2xsJywgc2Nyb2xsSGFuZGxlcik7XG4gIH0gZWxzZSB7XG4gICAgJHdpbmRvdy5vZmYoJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIpO1xuICAgICRxdWlja19saW5rcy5yZW1vdmVDbGFzcygnZml4ZWQgdXAgZG93bicpO1xuICAgICRwbGFjZWhvbGRlci5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoKSB7XG4gIGNvbnN0IHRvcCA9ICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyAkaGVhZGVyLmhlaWdodCgpICsgcGFyc2VJbnQoJGJvZHkuY3NzKCdwYWRkaW5nLXRvcCcpKTtcbiAgY29uc3Qgc2QgPSBzY3JvbGxEaXJlY3Rpb24oKTtcblxuICBpZiAoJHF1aWNrX2xpbmtzLm9mZnNldCgpLnRvcCA8PSB0b3ApIHtcbiAgICAkcGxhY2Vob2xkZXIuaGVpZ2h0KCRxdWlja19saW5rcy5oZWlnaHQoKSk7XG4gICAgJHF1aWNrX2xpbmtzLmFkZENsYXNzKCdmaXhlZCcpO1xuXG4gICAgc3dpdGNoKHNkKSB7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgICRxdWlja19saW5rcy5yZW1vdmVDbGFzcygnZG93bicpLmFkZENsYXNzKCd1cCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ3VwJykuYWRkQ2xhc3MoJ2Rvd24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgICRxdWlja19saW5rcy5yZW1vdmVDbGFzcygnZml4ZWQgdXAgZG93bicpO1xuICAgICRwbGFjZWhvbGRlci5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgaWYgKCRxdWlja19saW5rcy5sZW5ndGgpIHtcbiAgICBpc1N0aWNreSgpO1xuICAgIGJyZWFrcG9pbnRzLm1pbi5iZy5hZGRMaXN0ZW5lcihpc1N0aWNreSk7XG5cbiAgICAkcXVpY2tfbGlua3MuZmluZCgnYScpLmNsaWNrKGNsaWNrSGFuZGxlcik7XG4gIH1cbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmNvbnN0IGdldFBhZ2VZT2Zmc2V0ID0gKCkgPT4gTWF0aC5yb3VuZCh3aW5kb3cucGFnZVlPZmZzZXQpO1xubGV0IGxhc3RTY3JvbGxUb3AgPSBnZXRQYWdlWU9mZnNldCgpO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSBnZXRQYWdlWU9mZnNldCgpO1xuICBjb25zdCBkaXJlY3Rpb24gPSBjdXJyZW50U2Nyb2xsVG9wID4gbGFzdFNjcm9sbFRvcCA/ICdkb3duJyA6ICd1cCc7XG5cbiAgbGFzdFNjcm9sbFRvcCA9IGdldFBhZ2VZT2Zmc2V0KCk7XG5cbiAgcmV0dXJuIGRpcmVjdGlvbjtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgJCgnI2Jsb2NrLXZpZXdzLWJsb2NrLWZlYXR1cmVkLWNvbnRlbnQtYmxvY2stMSAudmlldy1jb250ZW50JylcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICBsb29wOiB0cnVlLFxuICAgICAgbWFyZ2luOiAxNSxcbiAgICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgICAgJzAnOiB7XG4gICAgICAgICAgaXRlbXM6IDEsXG4gICAgICAgICAgY2VudGVyOiB0cnVlLFxuICAgICAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgICAgICBzbGlkZUJ5OiAxLFxuICAgICAgICB9LFxuICAgICAgICAnNzY4Jzoge1xuICAgICAgICAgIGl0ZW1zOiAzLFxuICAgICAgICAgIGNlbnRlcjogZmFsc2UsXG4gICAgICAgICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICAgICAgICBzbGlkZUJ5OiAzLFxuICAgICAgICB9LFxuICAgICAgICAnMTI4MCc6IHtcbiAgICAgICAgICBpdGVtczogNCxcbiAgICAgICAgICBzbGlkZUJ5OiA0LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5ibG9jay1zeXN0ZW0gLnZpZXctc2VhcmNoIGlucHV0W25hbWU9XCJzZWFyY2hcIl0nKS5maXJzdCgpLmZvY3VzKCk7XG5cbiAgJChkb2N1bWVudCkub24oJ3BvcHVwLm9wZW5lZCcsIGZ1bmN0aW9uKGUsIHBvcHVwKSB7XG4gICAgaWYgKHBvcHVwLmhhc0NsYXNzKCdzZWFyY2gnKSkge1xuICAgICAgcG9wdXAuZmluZCgnLnZpZXctc2VhcmNoIGlucHV0W25hbWU9XCJzZWFyY2hcIl0nKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgfVxuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgJCgnLnNlbGVjdDInKS5zZWxlY3QyKHtcbiAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogMjBcbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9ICQoJy5zbGlkZXInKS5lcSgwKTtcbiAgY29uc3Qgc2xpZGVyID0gJCgnLnNsaWRlcycsIGNvbnRhaW5lcik7XG4gIGNvbnN0IGNvbnRlbnRCb3hlcyA9IHNsaWRlci5maW5kKCcuc2xpZGVfY29udGVudCcpO1xuXG4gIGlmIChzbGlkZXIuY2hpbGRyZW4oKS5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2xpZGVyLmJ4U2xpZGVyKHtcbiAgICBhdXRvOiB0cnVlLFxuICAgIHBhdXNlOiA1MDAwLFxuICAgIGF1dG9Ib3ZlcjogdHJ1ZSxcbiAgICBjb250cm9sczogZmFsc2UsXG4gICAgcHJlbG9hZEltYWdlczogJ2FsbCcsXG4gICAgb25TbGlkZXJMb2FkOiAoKSA9PiB7XG4gICAgICBjaGVja0RpbWVuc2lvbnMoKTtcbiAgICAgIGNoZWNrRGVzY3JpcHRpb25IZWlnaHQoKTtcbiAgICB9LFxuICAgIG9uU2xpZGVyUmVzaXplOiBmdW5jdGlvbigpIHtcbiAgICAgIGNoZWNrRGltZW5zaW9ucygpO1xuICAgICAgY2hlY2tEZXNjcmlwdGlvbkhlaWdodCgpO1xuICAgIH0sXG4gICAgb25TbGlkZUJlZm9yZTogZnVuY3Rpb24oKSB7XG4gICAgICBjaGVja0RpbWVuc2lvbnMoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBjb250YWluZXIuZmluZCgnLmJ4LXZpZXdwb3J0Jykub2ZmKCd0b3VjaHN0YXJ0Jyk7XG5cbiAgc2xpZGVyLmZpbmQoJ2EnKS5ub3QoJy51c2UtYWpheCcpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKTtcbiAgfSk7XG5cbiAgJCgnLm5leHQnLCBjb250YWluZXIpLmNsaWNrKCgpID0+IHNsaWRlci5nb1RvTmV4dFNsaWRlKCkpO1xuICAkKCcucHJldicsIGNvbnRhaW5lcikuY2xpY2soKCkgPT4gc2xpZGVyLmdvVG9QcmV2U2xpZGUoKSk7XG5cbiAgZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKCkge1xuICAgIGNvbnN0IHZpZXdIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0KCk7XG4gICAgY29uc3Qgdmlld1dpZHRoID0gY29udGFpbmVyLndpZHRoKCk7XG4gICAgY29uc3Qgdmlld1JhdGlvID0gdmlld1dpZHRoIC8gdmlld0hlaWdodDtcblxuICAgIHNsaWRlci5maW5kKCcuc2xpZGUnKVxuICAgICAgLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGUgPSAkKG5vZGUpO1xuICAgICAgICBjb25zdCBtZWRpYSA9IHNsaWRlLmZpbmQoJy5zbGlkZS0tYmFja2dyb3VuZCcpLmZpbmQoJ3ZpZGVvJykuZXEoMCk7XG4gICAgICAgIGNvbnN0IG1lZGlhSGVpZ2h0ID0gbWVkaWEuaGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IG1lZGlhV2lkdGggPSBtZWRpYS53aWR0aCgpO1xuICAgICAgICBsZXQgbWVkaWFSYXRpbyA9IDA7XG5cbiAgICAgICAgaWYgKG1lZGlhLmRhdGEoJ3JhdGlvJykpIHtcbiAgICAgICAgICBtZWRpYVJhdGlvID0gbWVkaWEuZGF0YSgncmF0aW8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZWRpYVJhdGlvID0gbWVkaWFXaWR0aCAvIG1lZGlhSGVpZ2h0O1xuICAgICAgICAgIG1lZGlhLmRhdGEoJ3JhdGlvJywgbWVkaWFSYXRpbyk7XG4gICAgICAgIH1cblxuICAgICAgICBtZWRpYVJhdGlvIDwgdmlld1JhdGlvID8gc2xpZGUuYWRkQ2xhc3MoJ2FsdCcpIDogc2xpZGUucmVtb3ZlQ2xhc3MoJ2FsdCcpO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0Rlc2NyaXB0aW9uSGVpZ2h0KCkge1xuICAgIGNvbnN0ICRib3hlcyA9IHNsaWRlci5maW5kKCcuc2xpZGVfY29udGVudCcpO1xuXG4gICAgJGJveGVzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCAkYm94ID0gJCh0aGlzKTtcbiAgICAgIGNvbnN0ICRkZXNjID0gJGJveC5jaGlsZHJlbignLmRlc2NyaXB0aW9uJyk7XG4gICAgICBjb25zdCAkcCA9ICRkZXNjLmZpbmQoJ3AnKTtcblxuICAgICAgLy8gU29tZSBzbGlkZXMgbWlnaHQgbm90IGhhcyBhIGRlc2NyaXB0aW9uXG4gICAgICAvLyBzbyBsZXQncyBjaGVjayBpdFxuICAgICAgaWYgKCRwLmxlbmd0aCkge1xuICAgICAgICAvLyBDb3VsZCBoYXBwZW5kIHRoYXQgdmlzaWJsZSBoZWlnaHQgb2YgLmRlc2NyaXB0aW9uIGVsZW1lbnQgaXMgZXZlblxuICAgICAgICAvLyBzbWFsbGVyIHRoYW4gbGluZS1oZWlnaHQgb2YgcCBlbGVtZW50IHdoaWNoIHdpbGwgY2F1c2UgaXQgdG8gYmUgc2hhdmVkXG4gICAgICAgIC8vIHRvIDAgbGluZXMuIFNvIHdlIHBpY2sgd2hhdCdzIGJpZ2dlciBmcm9tIHRoZSBsaW5lLWhlaWdodCBhbmQgbWF4SGVpZ2h0XG4gICAgICAgICRwLnNoYXZlKE1hdGgubWF4KCRkZXNjLmhlaWdodCgpLCBwYXJzZUZsb2F0KCRwLmNzcygnbGluZS1oZWlnaHQnKSkpKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IHN0aWNreUVsZW1lbnRzID0gJChcIi5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKTtcbiAgY29uc3Qgc3RpY2t5QlAgPSB3aW5kb3cubWF0Y2hNZWRpYShcIihtaW4td2lkdGg6IDEwMjRweClcIik7IC8vIHN0aWNrIG9ubHkgaWYgc2NyZWVuIHdpZHRoID49IDEwMjRcblxuICAkKFwiLmJ1bGxldC1saXN0IGxpOmZpcnN0LW9mLXR5cGUgLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC12ZXJ0XCIpXG4gICAgLmFkZENsYXNzKFwiY3VycmVudFwiKTtcblxuICBjYW5TdGljaygpO1xuICBzdGlja3lCUC5hZGRMaXN0ZW5lcihjYW5TdGljayk7XG5cbiAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbigpIHtcbiAgICBpZiAoc3RpY2t5QlAubWF0Y2hlcykge1xuICAgICAgbGV0IGVsZW0gPSBhYm92ZUJvcmRlcigkKFwiLnN0YXRpYy1jb250ZW50XCIpKTtcblxuICAgICAgaWYgKGVsZW0pIHsgLy8gaWYgYW55IGVsZW1lbnQgYXQgdGhlIHRvcFxuICAgICAgICB0b2dnbGVTdGlja3koIC8vIG1ha2UgaXQgdmlzaWJsZSBhbmQgaGlkZSBvdGhlcnNcbiAgICAgICAgICBlbGVtLmNsb3Nlc3QoXCJsaVwiKS5maW5kKFwiLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC12ZXJ0XCIpLmZpcnN0KClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGZ1bmN0aW9uIGNhblN0aWNrKCkge1xuICAgIGlmIChzdGlja3lCUC5tYXRjaGVzKSB7XG4gICAgICBtYWtlX3N0aWNreSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGlja3lFbGVtZW50cy50cmlnZ2VyKFwic3RpY2t5X2tpdDpkZXRhY2hcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGFzdCBlbGVtZW50IHdpdGggcG9zaXRpb24gYWJvdmUgYm9yZGVyXG4gICAqXG4gICAqIEBwYXJhbSBqUXVlcnkgZWxlbWVudHNcbiAgICogQHBhcmFtIGludCBib3JkZXJcbiAgICpcbiAgICogQHJldHVybiBqUXVlcnlcbiAgICovXG4gIGZ1bmN0aW9uIGFib3ZlQm9yZGVyKGVsZW1lbnRzLCBib3JkZXIgPSAyMTApIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGVsZW1lbnRzLmVhY2goZnVuY3Rpb24oa2V5LCBlbGVtKSB7XG4gICAgICBsZXQgdG9wID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cbiAgICAgIGlmICh0b3AgPD0gYm9yZGVyKSB7XG4gICAgICAgIHJlc3VsdCA9IGVsZW07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0ID8gJChyZXN1bHQpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBlbGVtIGFuZCBoaWRlcyBvdGhlciBzdGlja3kgZWxlbWVudHNcbiAgICpcbiAgICogQnkgZGVmYXVsdCBhbGwgc3RpY2t5IGVsZW1lbnRzIGFyZSBoaWRkZW4uXG4gICAqIENsYXNzICcuY3VycmVudCcgbWFrZXMgc3RpY2t5IGVsZW1lbnQgdmlzaWJsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHRvZ2dsZVN0aWNreShlbGVtKSB7XG4gICAgaWYgKCFlbGVtLmhhc0NsYXNzKFwiY3VycmVudFwiKSkge1xuICAgICAgJChcImxpIC5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydC5jdXJyZW50XCIpLnJlbW92ZUNsYXNzKFwiY3VycmVudFwiKTtcbiAgICAgIGVsZW0uYWRkQ2xhc3MoXCJjdXJyZW50XCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2Vfc3RpY2t5KCkge1xuICAgICQoXCIucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LWJ1bGxldC1saXN0IC5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKVxuICAgICAgLnN0aWNrX2luX3BhcmVudCh7XG4gICAgICAgIHBhcmVudDogXCIucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LWJ1bGxldC1saXN0XCIsXG4gICAgICAgIG9mZnNldF90b3A6IDIwMCxcbiAgICAgICAgc3BhY2VyOiBmYWxzZVxuICAgICAgfSk7XG4gICAgJChcImxpIC5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKS5zdGlja19pbl9wYXJlbnQoe1xuICAgICAgLy8gcGFyZW50OiBcImxpXCIsXG4gICAgICBwYXJlbnQ6IFwidWxcIiwvLyBcIi5wYXJhZ3JhcGgtLXR5cGUtLWN1c3RvbS1idWxsZXQtbGlzdFwiLFxuICAgICAgb2Zmc2V0X3RvcDogMjAwLFxuICAgICAgc3BhY2VyOiBmYWxzZSxcbiAgICAgIHJlY2FsY19ldmVyeTogMTBcbiAgICB9KTtcbiAgfVxufTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgJCgnLmN1c3RvbS10YWJzJykub24oJ2NsaWNrJywgJy5jdXN0b20tdGFicy0tbmF2LWl0ZW0nLCBmdW5jdGlvbihlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCAkcGFyZW50ID0gJHRoaXMuY2xvc2VzdCgnLmN1c3RvbS10YWJzJyk7XG5cbiAgICAvLyBTZXQgYWN0aXZlIHRhYi5cbiAgICBpZiAoJHBhcmVudC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSAkdGhpcy5kYXRhKCd0YXJnZXQnKTtcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAkKCcuY3VzdG9tLXRhYnMtLWl0ZW0nLCAkcGFyZW50KS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICQoYCMke3RhcmdldH1gLCAkcGFyZW50KS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAgICAgLy8gU2V0IGFjdGl2ZSBuYXYgaXRlbS5cbiAgICAgICAgY29uc3QgJHBhcmVudE5hdiA9ICR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdGFicy0tbmF2Jyk7XG5cbiAgICAgICAgaWYgKCRwYXJlbnROYXYubGVuZ3RoID4gMCkge1xuICAgICAgICAgICQoJy5jdXN0b20tdGFicy0tbmF2LWl0ZW0nLCAkcGFyZW50TmF2KS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkdGhpcy5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAkKCcudGFiYmVkJykuZWFjaChmdW5jdGlvbihpbmRleCwgZWwpIHtcbiAgICBjb25zdCAkbW9iaWxlX2NvbnRhaW5lciA9ICQoJy5tb2JpbGUnLCB0aGlzKTtcbiAgICBjb25zdCAkbW9iaWxlX3N3aXRjaGVzID0gJCgnLnRhYl9fc3dpdGNoJywgJG1vYmlsZV9jb250YWluZXIpO1xuICAgIGNvbnN0ICRub3JtYWxfY29udGFpbmVyID0gJCgnLm5vcm1hbCcsIHRoaXMpO1xuICAgIGNvbnN0ICRub3JtYWxfc3dpdGNoZXMgPSAkKCcudGFiX19zd2l0Y2gnLCAkbm9ybWFsX2NvbnRhaW5lcik7XG4gICAgY29uc3QgJHRhYnMgPSAkKCcudGFiJywgdGhpcyk7XG5cbiAgICAkbm9ybWFsX3N3aXRjaGVzLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBjb25zdCAkc3dpdGNoID0gJCh0aGlzKTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgJHRhYnNcbiAgICAgICAgLmFkZCgkbW9iaWxlX3N3aXRjaGVzKS5hZGQoJG5vcm1hbF9zd2l0Y2hlcylcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgICAgICAuZmlsdGVyKGBbZGF0YS10YWItaWQ9JHsgJHN3aXRjaC5kYXRhKCd0YWItaWQnKSB9XWApXG4gICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICAgICRub3JtYWxfY29udGFpbmVyLmFkZENsYXNzKCdoaWRlJyk7XG4gICAgfSk7XG5cbiAgICAkbW9iaWxlX2NvbnRhaW5lci5jbGljayhmdW5jdGlvbigpIHtcbiAgICAgICRub3JtYWxfY29udGFpbmVyLnJlbW92ZUNsYXNzKCdoaWRlJyk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBicmVha3BvaW50cyBmcm9tICcuL2JyZWFrcG9pbnRzJztcblxuY29uc3QgJHdpbmRvdyA9ICQod2luZG93KTtcbmNvbnN0ICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpO1xuY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5jb25zdCAkaGVhZGVyID0gJCgnI2hlYWRlcicpO1xuY29uc3QgJHF1aWNrTGlua3MgPSAkKCcucXVpY2stbGlua3MnKTtcblxuY29uc3QgJHBhcmFncmFwaCA9ICQoJy5wYXJhZ3JhcGgtLXR5cGUtLXRpbWVsaW5lLWluZm9ybWF0aW9uJyk7XG5jb25zdCAkc2lkZWJhciA9ICRwYXJhZ3JhcGguZmluZCgnLnNpZGViYXInKTtcbmNvbnN0ICRjb250ZW50ID0gJHBhcmFncmFwaC5maW5kKCcuY29udGVudCcpO1xuY29uc3QgJHRpdGxlc0xpc3QgPSAkcGFyYWdyYXBoLmZpbmQoJy50aXRsZXMtbGlzdCcpO1xuY29uc3QgJHRpdGxlcyA9ICRwYXJhZ3JhcGguZmluZCgnLnRpdGxlJyk7XG5jb25zdCAkcGFuZWxzID0gJHBhcmFncmFwaC5maW5kKCcucGFuZWwnKTtcbmNvbnN0ICRzd2l0Y2hlcyA9ICRwYXJhZ3JhcGguZmluZCgnLnBhbmVsLXN3aXRjaCcpO1xuY29uc3QgJGNvdmVycyA9ICRwYXJhZ3JhcGguZmluZCgnLnRpdGxlLWNvdmVyJyk7XG5cbmNvbnN0IHNwYWNlciA9IDMwO1xubGV0IGlzU3R1Y2sgPSBmYWxzZTtcblxuZnVuY3Rpb24gc2hvd1RpdGxlc0xpc3QoKSB7XG4gIGNvbnN0ICRjb3ZlciA9ICQodGhpcyk7XG4gIGNvbnN0ICR0aXRsZSA9ICRjb3Zlci5wYXJlbnQoKTtcbiAgY29uc3QgdG9wID0gJHRpdGxlLnBvc2l0aW9uKCkudG9wICsgJHRpdGxlLmhlaWdodCgpO1xuXG4gICRjb3ZlclxuICAgIC5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgJHRpdGxlc0xpc3RcbiAgICAuYWRkQ2xhc3MoJ3Nob3cnKVxuICAgIC5jc3MoeyB0b3AgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGVUaXRsZXNMaXN0KCkge1xuICAkdGl0bGVzTGlzdFxuICAgIC5yZW1vdmVDbGFzcygnc2hvdycpXG4gICAgLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cbiAgJGNvdmVyc1xuICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG59XG5cbmZ1bmN0aW9uIHNldEFjdGl2ZVRpdGxlKGtleSkge1xuICAkdGl0bGVzXG4gICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgIC5maWx0ZXIoKGkpID0+ICR0aXRsZXMuZXEoaSkuZGF0YSgndGltZWxpbmUnKSA9PSBrZXkpXG4gICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xufVxuXG5mdW5jdGlvbiBzZXRBY3RpdmVQYW5lbChpZCkge1xuICAkY29udGVudFxuICAgIC5oZWlnaHQoJGNvbnRlbnQuaGVpZ2h0KCkpO1xuXG4gICRwYW5lbHNcbiAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgLmZpbHRlcihpZClcbiAgICAgIC5hZGRDbGFzcygnYWN0aXZlJylcblxuICAkY29udGVudFxuICAgIC5yZW1vdmVBdHRyKCdzdHlsZScpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1BhbmVsKCkge1xuICBpZiAoaXNTdHVjaykge1xuICAgICR3aW5kb3cuc2Nyb2xsVG9wKCRjb250ZW50Lm9mZnNldCgpLnRvcCAtIGdldE9mZnNldCgpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzd2l0Y2hQYW5lbChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIGNvbnN0ICRzd2l0Y2hlciA9ICQodGhpcyk7XG4gIGNvbnN0IGlkID0gJHN3aXRjaGVyLmF0dHIoJ2hyZWYnKTtcbiAgY29uc3Qga2V5ID0gaWQucmVwbGFjZSgnI3RpbWVsaW5lLScsICcnKTtcblxuICBoaWRlVGl0bGVzTGlzdCgpO1xuICBzZXRBY3RpdmVUaXRsZShrZXkpO1xuICBzZXRBY3RpdmVQYW5lbChpZCk7XG4gIHNjcm9sbFRvUGFuZWwoKTtcbiAgcmVjYWxjU3RpY2t5S2l0KCk7XG59XG5cbmZ1bmN0aW9uIGlzU3RpY2t5KCkge1xuICByZXR1cm4gYnJlYWtwb2ludHMubWluLmJnLm1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIGluaXRTdGlja3lLaXQoKSB7XG4gIGNvbnN0IG9mZnNldF90b3AgPSBnZXRPZmZzZXQoKTtcblxuICAkc2lkZWJhclxuICAgIC5vZmYoJ3N0aWNreV9raXQ6c3RpY2sgc3RpY2t5X2tpdDp1bnN0aWNrJylcbiAgICAudHJpZ2dlcignc3RpY2t5X2tpdDpkZXRhY2gnKVxuICAgIC5zdGlja19pbl9wYXJlbnQoeyBvZmZzZXRfdG9wIH0pXG4gICAgLm9uKCdzdGlja3lfa2l0OnN0aWNrJywgKCkgPT4geyBpc1N0dWNrID0gdHJ1ZSB9KVxuICAgIC5vbignc3RpY2t5X2tpdDp1bnN0aWNrJywgKCkgPT4geyBpc1N0dWNrID0gZmFsc2UgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lTdGlja3lLaXQoKSB7XG4gICRzaWRlYmFyXG4gICAgLm9mZignc3RpY2t5X2tpdDpzdGljayBzdGlja3lfa2l0OnVuc3RpY2snKVxuICAgIC50cmlnZ2VyKCdzdGlja3lfa2l0OmRldGFjaCcpO1xuXG4gIGlzU3R1Y2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0KCkge1xuICByZXR1cm4gRHJ1cGFsLmRpc3BsYWNlLmNhbGN1bGF0ZU9mZnNldCgndG9wJykgKyAkaGVhZGVyLmhlaWdodCgpICsgKCRxdWlja0xpbmtzLmhlaWdodCgpIHx8IDApICsgc3BhY2VyO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGlja3lLaXQoKSB7XG4gIGlmIChpc1N0dWNrKSB7XG4gICAgaW5pdFN0aWNreUtpdCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY2FsY1N0aWNreUtpdCgpIHtcbiAgJHNpZGViYXJcbiAgICAudHJpZ2dlcignc3RpY2t5X2tpdDpyZWNhbGMnKTtcbn1cblxuZnVuY3Rpb24gdGVzdFN0aWNreUtpdCgpIHtcbiAgaWYgKGlzU3RpY2t5KCkpIHtcbiAgICBpbml0U3RpY2t5S2l0KCk7XG5cbiAgICAkZG9jdW1lbnQub24oJ2RydXBhbFZpZXdwb3J0T2Zmc2V0Q2hhbmdlJywgdXBkYXRlU3RpY2t5S2l0KTtcbiAgfSBlbHNlIHtcbiAgICBkZXN0cm95U3RpY2t5S2l0KCk7XG5cbiAgICAkZG9jdW1lbnQub2ZmKCdkcnVwYWxWaWV3cG9ydE9mZnNldENoYW5nZScsIHVwZGF0ZVN0aWNreUtpdCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICB0ZXN0U3RpY2t5S2l0KCk7XG4gIGJyZWFrcG9pbnRzLm1pbi5iZy5hZGRMaXN0ZW5lcih0ZXN0U3RpY2t5S2l0KTtcblxuICAkY292ZXJzLmNsaWNrKHNob3dUaXRsZXNMaXN0KTtcbiAgJHN3aXRjaGVzLmNsaWNrKHN3aXRjaFBhbmVsKTtcblxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoaXNTdGlja3koKSAmJiAhaXNTdHVjaykge1xuICAgICAgaW5pdFN0aWNreUtpdCgpO1xuICAgIH1cbiAgfSwgMTUwKTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgbGluZUhlaWdodCBmcm9tICcuL2xpbmVIZWlnaHQnO1xuaW1wb3J0IGJyZWFrcG9pbnRzLCB7IGtleXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRydW5jYXRlQnlMaW5lcygkZWxlbWVudCkge1xuICBjb25zdCBsaCA9IGxpbmVIZWlnaHQoJGVsZW1lbnQpO1xuICBjb25zdCBsaW5lcyA9IHBhcnNlSW50KCRlbGVtZW50LmRhdGEoJ3RydW5jYXRlTGluZXMnKSkgfHwgNDtcblxuICAkZWxlbWVudC5zaGF2ZShsaCAqIGxpbmVzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVCeUhlaWdodCgkZWxlbWVudCkge1xuICBjb25zdCAkY29udGFpbmVyID0gJGVsZW1lbnQuY2hpbGRyZW4oJy50cnVuY2F0ZS1jb250YWluZXInKTtcbiAgY29uc3QgbWF4SGVpZ2h0ID0gJGVsZW1lbnQuaGVpZ2h0KCk7XG4gIGNvbnN0IG1pbkhlaWdodCA9IGxpbmVIZWlnaHQoJGVsZW1lbnQpO1xuXG4gICRjb250YWluZXIuc2hhdmUoTWF0aC5tYXgobWluSGVpZ2h0LCBtYXhIZWlnaHQpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBEcnVwYWwuYmVoYXZpb3JzLnRydW5jYXRlQnlIZWlnaHQgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJCgnLnRydW5jYXRlLWJ5LWhlaWdodCcsIGNvbnRleHQpLm9uY2UoJ3RydW5jYXRlJylcbiAgICAgICAgLndyYXBJbm5lcignPGRpdiBjbGFzcz1cInRydW5jYXRlLWNvbnRhaW5lclwiPicpXG4gICAgICAgIC5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgICAgdHJ1bmNhdGVCeUhlaWdodCgkKG5vZGUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIERydXBhbC5iZWhhdmlvcnMudHJ1bmNhdGVCeUxpbmVzID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgICQoJy50cnVuY2F0ZS1ieS1saW5lcycsIGNvbnRleHQpLm9uY2UoJ3RydW5jYXRlJylcbiAgICAgICAgLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgICB0cnVuY2F0ZUJ5TGluZXMoJChub2RlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBPYmplY3QudmFsdWVzKGJyZWFrcG9pbnRzLm1pbikuZm9yRWFjaCgobXEpID0+IHtcbiAgICBtcS5hZGRMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAkKCcudHJ1bmNhdGUtYnktaGVpZ2h0JykuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgICB0cnVuY2F0ZUJ5SGVpZ2h0KCQobm9kZSkpO1xuICAgICAgfSk7XG5cbiAgICAgICQoJy50cnVuY2F0ZS1ieS1saW5lcycpLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgdHJ1bmNhdGVCeUxpbmVzKCQobm9kZSkpO1xuICAgICAgfSk7XG4gICAgfSlcbiAgfSk7XG59XG4iXX0="}