{"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/_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.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/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/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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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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","// 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 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';\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].forEach(\n module => { module(); }\n);\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 e.stopPropagation();\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';\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 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\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 function normalizeFilters(filters) {\n return filters\n .map(filter => filter.replace(/-/g, ''))\n .map(filter => filter.trim())\n .filter(filter => filter.length)\n .join(' - ');\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 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 }\n };\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwic3JjL3NjcmlwdHMvZW50cnkuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2FjY29yZGlvbi5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvYjcuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2JyZWFrcG9pbnRzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9jYXNlLWZpbHRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvY2VydGlmaWVkLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9jb250YWN0LWZvcm0uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2RvY3VtZW50LWNlbnRyZS1maWx0ZXIuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2ZhZGVJblVwLWxvZ28uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2d0bS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvaGFzaC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvaW4tdmlldy5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbGluZUhlaWdodC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbWFwLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9tZWRpYS1yZXNvdXJjZS1zZWxlY3QuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21lZGlhLXJlc291cmNlcy1wbGF5LXZpZGVvLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9tb2JpbGVfbWVudS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbW9kYWwtZ2FsbGVyeS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbW9kYWwuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21vdGlvbnMtZmlsdGVyLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9uZXdzLWZpbHRlci1jYXRlZ29yeS1kZC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvcGFydG5lcnMuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3BvcHVwLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9wcm9jZXNzLWZpbHRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvcXVpY2tfbGlua3MuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3Njcm9sbC1kaXJlY3Rpb24uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3NlYXJjaC1mZWF0dXJlZC1jb250ZW50LmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9zZWFyY2hBdXRvRm9jdXMuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3NlbGVjdDIuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3NsaWRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvc3RpY2t5LmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy90YWJzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy90aW1lbGluZS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvdHJ1bmNhdGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFEQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLENBQ0UsaUJBREYsRUFHRSxjQUhGLEVBSUUsZUFKRixFQUtFLGNBTEYsRUFNRSxxQkFORixFQU9FLGdDQVBGLEVBUUUsa0JBUkYsRUFTRSw0QkFURixF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LE1BQU0sQ0FBQyxTQUFQLENBQWlCLGVBQWpCLEdBQW1DO0FBQ2pDLElBQUEsTUFBTSxFQUFFLGdCQUFTLE9BQVQsRUFBa0IsUUFBbEIsRUFBNEI7QUFDbEMsMkJBQUUsb0JBQUYsRUFBd0IsT0FBeEIsRUFBaUMsSUFBakMsQ0FBc0MsVUFBdEMsRUFDRyxJQURILENBQ1EsVUFBQyxDQUFELEVBQUksSUFBSixFQUFhO0FBQ2pCLFFBQUEsZUFBZSxDQUFDLHFCQUFFLElBQUYsQ0FBRCxDQUFmO0FBQ0QsT0FISDtBQUlEO0FBTmdDLEdBQW5DO0FBU0EsRUFBQSxNQUFNLENBQUMsTUFBUCxDQUFjLHFCQUFZLEdBQTFCLEVBQStCLE9BQS9CLENBQXVDLFVBQUMsRUFBRCxFQUFRO0FBQzdDLElBQUEsRUFBRSxDQUFDLFdBQUgsQ0FBZSxZQUFNO0FBQ25CLDJCQUFFLHFCQUFGLEVBQXlCLElBQXpCLENBQThCLFVBQUMsQ0FBRCxFQUFJLElBQUosRUFBYTtBQUN6QyxRQUFBLGdCQUFnQixDQUFDLHFCQUFFLElBQUYsQ0FBRCxDQUFoQjtBQUNELE9BRkQ7QUFJQSwyQkFBRSxvQkFBRixFQUF3QixJQUF4QixDQUE2QixVQUFDLENBQUQsRUFBSSxJQUFKLEVBQWE7QUFDeEMsUUFBQSxlQUFlLENBQUMscUJBQUUsSUFBRixDQUFELENBQWY7QUFDRCxPQUZEO0FBR0QsS0FSRDtBQVNELEdBVkQ7QUFXRCxDIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiIsIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJpbXBvcnQgdHJ1bmNhdGUgZnJvbSAnLi9tb2R1bGVzL3RydW5jYXRlJztcbmltcG9ydCBwb3B1cCBmcm9tICcuL21vZHVsZXMvcG9wdXAnO1xuaW1wb3J0IHNsaWRlciBmcm9tICcuL21vZHVsZXMvc2xpZGVyJztcbmltcG9ydCBtb2RhbCBmcm9tICcuL21vZHVsZXMvbW9kYWwnO1xuaW1wb3J0IG1vZGFsR2FsbGVyeSBmcm9tICcuL21vZHVsZXMvbW9kYWwtZ2FsbGVyeSc7XG5pbXBvcnQgbWVkaWFSZXNvdXJjZXNQbGF5VmlkZW9CdG4gZnJvbSAnLi9tb2R1bGVzL21lZGlhLXJlc291cmNlcy1wbGF5LXZpZGVvJztcbmltcG9ydCBhY2NvcmRpb24gZnJvbSAnLi9tb2R1bGVzL2FjY29yZGlvbic7XG5pbXBvcnQgbWVkaWFSZXNvdXJjZVNlbGVjdCBmcm9tICcuL21vZHVsZXMvbWVkaWEtcmVzb3VyY2Utc2VsZWN0JztcbmltcG9ydCBtb2JpbGVfbWVudSBmcm9tICcuL21vZHVsZXMvbW9iaWxlX21lbnUnO1xuaW1wb3J0IGNlcnRpZmllZCBmcm9tICcuL21vZHVsZXMvY2VydGlmaWVkJztcbmltcG9ydCBpbl92aWV3IGZyb20gJy4vbW9kdWxlcy9pbi12aWV3JztcbmltcG9ydCBuZXdzRmlsdGVyQ2F0ZWdvcnlEZCBmcm9tICcuL21vZHVsZXMvbmV3cy1maWx0ZXItY2F0ZWdvcnktZGQnO1xuaW1wb3J0IHN0aWNreSBmcm9tICcuL21vZHVsZXMvc3RpY2t5JztcbmltcG9ydCBiNyBmcm9tICcuL21vZHVsZXMvYjcnO1xuaW1wb3J0IGNvbnRhY3RGb3JtIGZyb20gJy4vbW9kdWxlcy9jb250YWN0LWZvcm0nO1xuaW1wb3J0IHF1aWNrX2xpbmtzIGZyb20gJy4vbW9kdWxlcy9xdWlja19saW5rcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbW9kdWxlcy9tYXAnO1xuaW1wb3J0IHBhcnRuZXJzIGZyb20gJy4vbW9kdWxlcy9wYXJ0bmVycyc7XG5pbXBvcnQgdGltZWxpbmUgZnJvbSAnLi9tb2R1bGVzL3RpbWVsaW5lJztcbmltcG9ydCBjYXNlRmlsdGVyIGZyb20gJy4vbW9kdWxlcy9jYXNlLWZpbHRlcic7XG5pbXBvcnQgcHJvY2Vzc0ZpbHRlciBmcm9tICcuL21vZHVsZXMvcHJvY2Vzcy1maWx0ZXInO1xuaW1wb3J0IGRvY3VtZW50Q2VudHJlRmlsdGVyIGZyb20gJy4vbW9kdWxlcy9kb2N1bWVudC1jZW50cmUtZmlsdGVyJztcbmltcG9ydCB0YWJzIGZyb20gJy4vbW9kdWxlcy90YWJzJztcbmltcG9ydCBzZWFyY2hBdXRvRm9jdXMgZnJvbSAnLi9tb2R1bGVzL3NlYXJjaEF1dG9Gb2N1cyc7XG5pbXBvcnQgZmFkZUluVXBsb2dvIGZyb20gJy4vbW9kdWxlcy9mYWRlSW5VcC1sb2dvJztcbmltcG9ydCBzZWxlY3QyIGZyb20gJy4vbW9kdWxlcy9zZWxlY3QyJztcbmltcG9ydCBndG0gZnJvbSAnLi9tb2R1bGVzL2d0bSc7XG5pbXBvcnQgc2VhcmNoRmVhdHVyZWRDb250ZW50IGZyb20gJy4vbW9kdWxlcy9zZWFyY2gtZmVhdHVyZWQtY29udGVudC5qcyc7XG5pbXBvcnQgbW90aW9uc19maWx0ZXIgZnJvbSAnLi9tb2R1bGVzL21vdGlvbnMtZmlsdGVyJztcblxuW1xuICB0cnVuY2F0ZSwgLy8gRHJ1cGFsIEJlaGF2aW9yXG5cbiAgcG9wdXAsXG4gIHNsaWRlcixcbiAgbW9kYWwsXG4gIG1vZGFsR2FsbGVyeSxcbiAgbWVkaWFSZXNvdXJjZXNQbGF5VmlkZW9CdG4sXG4gIGFjY29yZGlvbixcbiAgbWVkaWFSZXNvdXJjZVNlbGVjdCxcbiAgbW9iaWxlX21lbnUsXG4gIGNlcnRpZmllZCxcbiAgaW5fdmlldyxcbiAgbmV3c0ZpbHRlckNhdGVnb3J5RGQsXG4gIHN0aWNreSxcbiAgYjcsXG4gIGNvbnRhY3RGb3JtLFxuICBxdWlja19saW5rcyxcbiAgbWFwLFxuICBwYXJ0bmVycyxcbiAgdGltZWxpbmUsXG4gIGNhc2VGaWx0ZXIsXG4gIHByb2Nlc3NGaWx0ZXIsXG4gIGRvY3VtZW50Q2VudHJlRmlsdGVyLFxuICB0YWJzLFxuICBzZWFyY2hBdXRvRm9jdXMsXG4gIGZhZGVJblVwbG9nbyxcbiAgc2VsZWN0MixcbiAgZ3RtLFxuICBzZWFyY2hGZWF0dXJlZENvbnRlbnQsXG4gIG1vdGlvbnNfZmlsdGVyXG5dLmZvckVhY2goXG4gIG1vZHVsZSA9PiB7IG1vZHVsZSgpOyB9XG4pO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuXG4gICQoJy5tZW51LS1tZWRpYS1yZXNvdXJjZXMtbWVudScpLm9uKCdjbGljaycsICcubmF2LXRhYnMtdG9nZ2xlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJHRhcmdldCA9ICR0aGlzLmRhdGEoJ3RhcmdldCcpO1xuXG4gICAgJCgkdGFyZ2V0KS50b2dnbGVDbGFzcygnZGlzcGxheS1ub25lJyk7XG4gIH0pO1xuXG4gICQoJy5hY2NvcmRpb24tbGlzdCcpLm9uKCdjbGljaycsICcubGktY29udGVudC10b2dnbGVyJywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCAkdGFyZ2V0ID0gJHRoaXMuY2xvc2VzdCgnbGknKS5maW5kKCcubGktY29udGVudCcpO1xuICAgIGNvbnN0IG9mZnNldFRvcCA9ICR0aGlzLm9mZnNldCgpLnRvcDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAkd2luZG93LnNjcm9sbFRvcCgpO1xuXG4gICAgLy8gSWYgdGFyZ2V0IGlzIG5vdCBhbHJlYWR5IGV4cGFuZGVkLlxuICAgIGlmICghJHRoaXMuaGFzQ2xhc3MoJ3VwJykpIHtcbiAgICAgIC8vIENvbGxhcHNlIG90aGVycyAubGktdGV4dCBpbiBhY2NvcmRpb24uXG4gICAgICBjb25zdCAkYWNjb3JkaW9uID0gJHRoaXMuY2xvc2VzdCgnLmFjY29yZGlvbi1saXN0Jyk7XG5cbiAgICAgICQoJy5saS1jb250ZW50JywgJGFjY29yZGlvbikuaGlkZSgpO1xuICAgICAgJCgnLmxpLWNvbnRlbnQtdG9nZ2xlcicsICRhY2NvcmRpb24pLnJlbW92ZUNsYXNzKCd1cCcpO1xuICAgIH1cblxuICAgIGlmICgkdGFyZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgICR0YXJnZXQudG9nZ2xlKCk7XG4gICAgICAkdGhpcy50b2dnbGVDbGFzcygndXAnKTtcbiAgICAgIGNvbnN0ICR0byA9ICR0YXJnZXQuaXMoJzp2aXNpYmxlJykgPyAkdGFyZ2V0IDogJHRoaXM7XG5cbiAgICAgICR3aW5kb3cuc2Nyb2xsVG9wKCR0by5vZmZzZXQoKS50b3AgLSAob2Zmc2V0VG9wIC0gc2Nyb2xsVG9wKSk7XG4gICAgfVxuICB9KTtcblxuICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmFjY29yZGlvbiAuYWNjb3JkaW9uLXRvZ2dsZScsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgJCh0aGlzKS5jbG9zZXN0KCcuYWNjb3JkaW9uJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pO1xuXG4gICQoJy5hY2NvcmRpb24nKS5vbignY2xpY2snLCAnLmFjY29yZGlvbi1pdGVtLXRyaWdnZXInLCBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbnN0ICRjdXJyZW50SXRlbSA9ICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbi1pdGVtJyk7XG4gICAgY29uc3QgJGFsbEl0ZW1zID0gJCh0aGlzKS5jbG9zZXN0KCcuYWNjb3JkaW9uJykuZmluZCgnLmFjY29yZGlvbi1pdGVtJyk7XG5cbiAgICBpZiAoJGN1cnJlbnRJdGVtLmhhc0NsYXNzKCdhY3RpdmUnKSkge1xuICAgICAgJGN1cnJlbnRJdGVtLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgIH0gZWxzZSB7XG4gICAgICAkYWxsSXRlbXMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgJGN1cnJlbnRJdGVtLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbi8vIDEwMDBtcyA9IDFzXG5jb25zdCB0cmFuc2l0aW9uRHVyYXRpb24gPSAxMDAwO1xuZnVuY3Rpb24gQ2Fyb3VzZWwoJGVsKSB7XG4gIGNvbnN0ICR0aGlzID0gdGhpcztcblxuICAkdGhpcy5tb2R1bGUgPSAkZWw7XG5cbiAgJHRoaXMuX21pblNjYWxlID0gMC42O1xuICAkdGhpcy5fbWluT2Zmc2V0ID0gMC41O1xuICAkdGhpcy5fYnJlYWtwb2ludHMgPSB7XG4gICAgcGg6IHdpbmRvdy5tYXRjaE1lZGlhKCcobWluLXdpZHRoOiA0ODBweCknKSxcbiAgICBtZDogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDc2OHB4KScpLFxuICAgIGJnOiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogMTAyNHB4KScpLFxuICAgIGxnOiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogMTI4MHB4KScpLFxuICAgIHhsOiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogMTQ0MHB4KScpLFxuICB9O1xuICAkdGhpcy5zZXR0aW5ncyA9IHtcbiAgICBhdXRvOiB7XG4gICAgICBwbGF5OiB0cnVlLFxuICAgICAgdGltZTogNTAwMCxcbiAgICAgIGludGVydmFsOiBudWxsLFxuICAgIH1cbiAgfTtcblxuICAkdGhpcy5kYXRhID0gW107XG5cbiAgJHRoaXMuaW5pdEF1dG9QbGF5ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCR0aGlzLnNldHRpbmdzLmF1dG8ucGxheSkge1xuICAgICAgJHRoaXMuc3RhcnRBdXRvKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICR0aGlzLnN0b3BBdXRvKCk7XG4gICAgfVxuXG4gICAgJHRoaXMubW9kdWxlLmhvdmVyKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCR0aGlzLnNldHRpbmdzLmF1dG8uaW50ZXJ2YWwpIHtcbiAgICAgICAgJHRoaXMuc3RvcEF1dG8oKTtcbiAgICAgICAgJHRoaXMuc2V0dGluZ3MuYXV0by5hdXRvUGF1c2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmF1dG9QYXVzZWQpIHtcbiAgICAgICAgJHRoaXMuc3RhcnRBdXRvKCk7XG4gICAgICAgICR0aGlzLnNldHRpbmdzLmF1dG8uYXV0b1BhdXNlZCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkKHdpbmRvdylcbiAgICAgIC5mb2N1cyhmdW5jdGlvbigpIHsgJHRoaXMuc3RhcnRBdXRvKCk7IH0pXG4gICAgICAuYmx1cihmdW5jdGlvbigpIHsgJHRoaXMuc3RvcEF1dG8oKTsgfSk7XG4gIH07XG5cbiAgJHRoaXMuc3RhcnRBdXRvID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCR0aGlzLnNldHRpbmdzLmF1dG8uaW50ZXJ2YWwpIHsgcmV0dXJuOyB9XG5cbiAgICAkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAkdGhpcy5nb1RvTmV4dENhcmQoKTtcbiAgICB9LCAkdGhpcy5zZXR0aW5ncy5hdXRvLnRpbWUpO1xuICB9O1xuXG4gICR0aGlzLnN0b3BBdXRvID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCEkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7IHJldHVybjsgfVxuXG4gICAgY2xlYXJJbnRlcnZhbCgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKTtcbiAgICAkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsID0gbnVsbDtcbiAgfTtcblxuICAkdGhpcy5zZXRFbGVtZW50cyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNvbnRhaW5lciA9ICR0aGlzLm1vZHVsZS5maW5kKCcubW9kdWxlLS1iNy0tY2FyZHMnKTtcbiAgICAkdGhpcy5jYXJkc1dyYXBwZXIgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWNhcmRzJyk7XG4gICAgJHRoaXMuY2FyZHMgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWNhcmQnKTtcbiAgICAkdGhpcy5ib2R5c1dyYXBwZXIgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWJvZHlzJyk7XG4gICAgJHRoaXMuYm9keXMgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWJvZHknKTtcblxuICAgICR0aGlzLmNhcmRzLmVhY2goZnVuY3Rpb24oaW5kZXgsIGNhcmQpIHtcbiAgICAgIGNhcmQub3JpZ2luYWxJRCA9IGluZGV4O1xuICAgIH0pO1xuICB9O1xuXG4gICR0aGlzLmdldERhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5kYXRhID0gJHRoaXMuY2FyZHMubWFwKGZ1bmN0aW9uKGluZGV4LCBjYXJkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnb3JkZXInOiBpbmRleCAtICR0aGlzLnNpZGVRdHksXG4gICAgICAgICd3aWR0aCc6ICQoY2FyZCkud2lkdGgoKVxuICAgICAgfTtcbiAgICB9KS50b0FycmF5KCk7XG4gIH07XG5cbiAgJHRoaXMuc2V0Q29udGFpbmVySGVpZ2h0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaGVpZ2h0cyA9ICR0aGlzLmNhcmRzLnRvQXJyYXkoKS5tYXAoY2FyZCA9PiAkKGNhcmQpLmhlaWdodCgpKTtcbiAgICAkdGhpcy5jb250YWluZXIuaGVpZ2h0KE1hdGgubWF4KC4uLmhlaWdodHMpKTtcbiAgfTtcblxuICAkdGhpcy5zZXRWYXJzID0gZnVuY3Rpb24oKSB7XG4gICAgJHRoaXMuY2FyZFdpZHRoID0gJHRoaXMuY2FyZHMuZmlyc3QoKS5vdXRlcldpZHRoKCk7XG4gICAgJHRoaXMuc2NhbGVTdGVwID0gKDEgLSAkdGhpcy5fbWluU2NhbGUpIC8gJHRoaXMuc2lkZVF0eTtcbiAgICAkdGhpcy5hdmFpbGFibGVTaWRlU3BhY2UgPSAoJHRoaXMubW9kdWxlLndpZHRoKCkgLSAkdGhpcy5jYXJkV2lkdGgpIC8gMjtcbiAgICAkdGhpcy5yZWR1Y2VPZmZzZXRCYXNlID0gJHRoaXMuYXZhaWxhYmxlU2lkZVNwYWNlIDwgJHRoaXMuc3BhY2VSZXF1aXJlZCgpID8gJHRoaXMuYWRkaXRpb25hbE9mZnNldCgpIDogMDtcbiAgICAkdGhpcy5zZXRNb2RlKCk7XG4gIH07XG5cbiAgJHRoaXMuc3BhY2VSZXF1aXJlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkdGhpcy5jYXJkV2lkdGggKiAoJHRoaXMuQVBTKDEsIC0xICogJHRoaXMuc2NhbGVTdGVwLCAkdGhpcy5zaWRlUXR5ICsgMSkgLSAxKSAvIDI7XG4gIH07XG5cbiAgJHRoaXMuYWRkaXRpb25hbE9mZnNldCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoJHRoaXMuc3BhY2VSZXF1aXJlZCgpIC0gJHRoaXMuYXZhaWxhYmxlU2lkZVNwYWNlKSAvICgkdGhpcy5BUFMoMSwgLTEgKiAkdGhpcy5zY2FsZVN0ZXAsICR0aGlzLnNpZGVRdHkgKyAxKSAtIDEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBcml0aG1ldGljIHByb2dyZXNzaW9uIHN1bVxuICAgKiBAcGFyYW0ge051bWJlcn0gYSBmaXJzdCB0ZXJtIG9mIGFyaXRobWV0aWMgc2VxdWVuY2VcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRlcm1zXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBuIG51bWJlciBvZiB0ZXJtc1xuICAgKi9cbiAgJHRoaXMuQVBTID0gZnVuY3Rpb24oYSwgZCwgbikge1xuICAgIHJldHVybiAoMiAqIGEgKyBkICogKG4gLSAxKSkgKiBuIC8gMjtcbiAgfTtcblxuICAkdGhpcy5yb3RhdGVDYXJkc0ZvcndhcmQgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBjYXJkcyA9ICR0aGlzLmNhcmRzLnRvQXJyYXkoKTtcbiAgICBjYXJkcy5wdXNoKCBjYXJkcy5zaGlmdCgpICk7XG4gICAgJHRoaXMuY2FyZHMgPSAkKGNhcmRzKTtcbiAgfTtcblxuICAkdGhpcy5yb3RhdGVDYXJkc0JhY2t3YXJkID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgY2FyZHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCk7XG4gICAgY2FyZHMudW5zaGlmdCggY2FyZHMucG9wKCkgKTtcbiAgICAkdGhpcy5jYXJkcyA9ICQoY2FyZHMpO1xuICB9O1xuXG4gICR0aGlzLmdldEFjdGl2ZUNhcmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZHMuZXEoICR0aGlzLnNpZGVRdHkgKTtcbiAgfTtcblxuICAkdGhpcy5nZXRDYXJkc0JlZm9yZUFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkKCAkdGhpcy5jYXJkcy50b0FycmF5KCkuc2xpY2UoMCwgJHRoaXMuc2lkZVF0eSkucmV2ZXJzZSgpICk7XG4gIH07XG5cbiAgJHRoaXMuZ2V0Q2FyZHNBZnRlckFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAkdGhpcy5jYXJkcy5zbGljZSgkdGhpcy5zaWRlUXR5ICsgMSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0Q2FyZHNQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGFjdGl2ZUNhcmQgPSAkdGhpcy5nZXRBY3RpdmVDYXJkKCk7XG4gICAgY29uc3QgY2FyZHNCZWZvcmUgPSAkdGhpcy5nZXRDYXJkc0JlZm9yZUFjdGl2ZSgpO1xuICAgIGNvbnN0IGNhcmRzQWZ0ZXIgPSAkdGhpcy5nZXRDYXJkc0FmdGVyQWN0aXZlKCk7XG5cbiAgICBhY3RpdmVDYXJkXG4gICAgICAuY3NzKCAkdGhpcy5jc3NUcmFuc2Zvcm0oMSkgKVxuICAgICAgLmNzcygnei1pbmRleCcsICR0aGlzLnNpZGVRdHkgKyAxKTtcblxuICAgIGNhcmRzQmVmb3JlLmVhY2goKGksIGVsKSA9PiB7XG4gICAgICBjb25zdCBjYXJkID0gJChlbCk7XG4gICAgICBjb25zdCBjYXJkU3R5bGVzID0gJHRoaXMuY2FyZFN0eWxlcyhpLCAtMSk7XG5cbiAgICAgIGNhcmQuY3NzKCBjYXJkU3R5bGVzICk7XG4gICAgfSk7XG5cbiAgICBjYXJkc0FmdGVyLmVhY2goKGksIGVsKSA9PiB7XG4gICAgICBjb25zdCBjYXJkID0gJChlbCk7XG4gICAgICBjb25zdCBjYXJkU3R5bGVzID0gJHRoaXMuY2FyZFN0eWxlcyhpKTtcblxuICAgICAgY2FyZC5jc3MoIGNhcmRTdHlsZXMgKTtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5zZXRDYXJkc09mZnNldCA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRzLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsKSB7XG4gICAgICBjb25zdCAkY2FyZCA9ICQodGhpcyk7XG4gICAgICAkY2FyZC5jc3Moe1xuICAgICAgICBsZWZ0OiBgY2FsYyg1MCUgLSAkeyRjYXJkLndpZHRoKCkgLyAyfXB4KWAsXG4gICAgICAgIHRvcDogYGNhbGMoNTAlIC0gJHskY2FyZC5oZWlnaHQoKSAvIDJ9cHgpYCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gICR0aGlzLmdvVG9OZXh0Q2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLnJvdGF0ZUNhcmRzRm9yd2FyZCgpO1xuICAgICR0aGlzLmNhcmRzLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5nZXRBY3RpdmVDYXJkKCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLnNldENhcmRzUG9zaXRpb24oKTtcblxuICAgICR0aGlzLmJvZHlzLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5nZXRBY3RpdmVCb2R5KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICB9O1xuXG4gICR0aGlzLmdvVG9QcmV2Q2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLnJvdGF0ZUNhcmRzQmFja3dhcmQoKTtcbiAgICAkdGhpcy5jYXJkcy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG5cbiAgICAkdGhpcy5ib2R5cy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgfTtcblxuICAkdGhpcy5jbGlja0hhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBpbmRleCA9ICR0aGlzLmNhcmRzLmluZGV4KHRoaXMpO1xuICAgIGNvbnN0IHJvdW5kcyA9IE1hdGguYWJzKGluZGV4IC0gJHRoaXMuc2lkZVF0eSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdW5kczsgaSsrKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaW5kZXggPiAkdGhpcy5zaWRlUXR5ID8gJHRoaXMuZ29Ub05leHRDYXJkKCkgOiAkdGhpcy5nb1RvUHJldkNhcmQoKTtcblxuICAgICAgICBpZiAoaSA9PSByb3VuZHMgLSAxKSB7XG4gICAgICAgICAgZGF0YUxheWVyLnB1c2goe1xuICAgICAgICAgICAgJ2V2ZW50JzogJ2d0bS5jbGljaycsXG4gICAgICAgICAgICAnZ3RtLmVsZW1lbnQnOiAkdGhpcy5nZXRBY3RpdmVCb2R5KCkuZmluZCgnaDInKS50b0FycmF5KCkucG9wKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSwgaSAqIDQwMCk7XG4gICAgfVxuICB9O1xuXG4gICR0aGlzLmluaXRFdmVudEhhbmRsZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgJHRoaXMuY2FyZHMuY2xpY2soJHRoaXMuY2xpY2tIYW5kbGVyKTtcblxuICAgIE9iamVjdC5rZXlzKCR0aGlzLl9icmVha3BvaW50cykuZm9yRWFjaCgoa2V5KSA9PiAkdGhpcy5fYnJlYWtwb2ludHNba2V5XS5hZGRMaXN0ZW5lcigobXEpID0+IHtcbiAgICAgICR0aGlzLnNldFZhcnMoKTtcbiAgICAgICR0aGlzLnNldENhcmRzUG9zaXRpb24oKTtcbiAgICAgICR0aGlzLnNldENvbnRhaW5lckhlaWdodCgpO1xuICAgICAgJHRoaXMuc2V0Q2FyZHNPZmZzZXQoKTtcbiAgICAgICR0aGlzLnNldEJvZHlzSGVpZ2h0KCk7XG4gICAgfSkpO1xuICB9O1xuXG4gICR0aGlzLnNldE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoJHRoaXMuX2JyZWFrcG9pbnRzLmxnLm1hdGNoZXMpIHtcbiAgICAgICR0aGlzLl9tb2RlID0gJ2FkdmFuY2VkJztcbiAgICB9IGVsc2UgaWYgKCR0aGlzLl9icmVha3BvaW50cy5tZC5tYXRjaGVzKSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdtaXhlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICR0aGlzLl9tb2RlID0gJ3NpbXBsZSc7XG4gICAgfVxuICB9O1xuXG4gICR0aGlzLmdldE1vZGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuX21vZGU7XG4gIH1cblxuICAkdGhpcy5jYXJkU2NhbGUgPSBmdW5jdGlvbihpbmRleCkge1xuICAgIHN3aXRjaCgkdGhpcy5fbW9kZSkge1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgICByZXR1cm4gMSAtICR0aGlzLnNjYWxlU3RlcCAqIChpbmRleCArIDEpO1xuICAgICAgY2FzZSAnbWl4ZWQnOlxuICAgICAgICByZXR1cm4gMC44O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9O1xuXG4gICR0aGlzLmNhcmRUcmFuc2Zvcm0gPSBmdW5jdGlvbihpbmRleCkge1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiAwO1xuXG4gICAgc3dpdGNoKCR0aGlzLl9tb2RlKSB7XG4gICAgICBjYXNlICdhZHZhbmNlZCc6XG4gICAgICAgIGNvbnN0IHByZXZNb3ZlID0gJHRoaXMuY2FyZFRyYW5zZm9ybShpbmRleCAtIDEpICogJHRoaXMuY2FyZFNjYWxlKGluZGV4IC0gMSkgLyAkdGhpcy5jYXJkU2NhbGUoaW5kZXgpO1xuICAgICAgICBjb25zdCBwcmV2V2lkdGggPSAkdGhpcy5jYXJkV2lkdGggKiAkdGhpcy5jYXJkU2NhbGUoaW5kZXggLSAxKTtcbiAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gJHRoaXMuY2FyZFdpZHRoICogJHRoaXMuY2FyZFNjYWxlKGluZGV4KTtcblxuICAgICAgICByZXR1cm4gcHJldk1vdmUgKyAoKChwcmV2V2lkdGggLSBjdXJyZW50V2lkdGgpIC8gMikgKyAkdGhpcy5fbWluT2Zmc2V0ICogY3VycmVudFdpZHRoIC0gJHRoaXMucmVkdWNlT2Zmc2V0QmFzZSAqICR0aGlzLmNhcmRTY2FsZShpbmRleCkpIC8gJHRoaXMuY2FyZFNjYWxlKGluZGV4KTtcbiAgICAgIGNhc2UgJ21peGVkJzpcbiAgICAgICAgcmV0dXJuIChpbmRleCArIDEpICogKCR0aGlzLmNhcmRXaWR0aCAqIDAuMiAvIDIgKyA3MCArICR0aGlzLmNhcmRXaWR0aCAqIDAuOCkgLyAwLjg7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoaW5kZXggKyAxKSAqICgkdGhpcy5jYXJkV2lkdGggKyAzMCk7XG4gICAgfVxuICB9O1xuXG4gICR0aGlzLmNhcmRaSW5kZXggPSBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiAkdGhpcy5zaWRlUXR5IC0gaW5kZXg7XG4gIH07XG5cbiAgJHRoaXMuY2FyZFN0eWxlcyA9IGZ1bmN0aW9uKGksIGZsaXAgPSAxKSB7XG4gICAgcmV0dXJuIGpRdWVyeS5leHRlbmQoXG4gICAgICB7fSxcbiAgICAgICR0aGlzLmNzc1pJbmRleCggJHRoaXMuY2FyZFpJbmRleChpKSApLFxuICAgICAgJHRoaXMuY3NzVHJhbnNmb3JtKCR0aGlzLmNhcmRTY2FsZShpKSwgZmxpcCAqICR0aGlzLmNhcmRUcmFuc2Zvcm0oaSkpXG4gICAgKTtcbiAgfTtcblxuICAkdGhpcy5zZXRJbmRleCA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgJHRoaXMuX2luZGV4ID0gaW5kZXg7XG4gIH07XG5cbiAgJHRoaXMuZ2V0SW5kZXggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuX2luZGV4ICE9PSB1bmRlZmluZWQgPyAkdGhpcy5faW5kZXggOiBNYXRoLmZsb29yKCR0aGlzLmNhcmRzLmxlbmd0aCAvIDIpO1xuICB9O1xuXG4gICR0aGlzLmdldEFjdGl2ZUJvZHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuYm9keXMuZXEoICR0aGlzLmdldEFjdGl2ZUNhcmQoKVswXS5vcmlnaW5hbElEICk7XG4gIH07XG5cbiAgJHRoaXMuY3NzVHJhbnNmb3JtID0gZnVuY3Rpb24oc2NhbGUsIHRyYW5zbGF0ZSkge1xuICAgIGNvbnN0IHJ1bGUgPSAndHJhbnNmb3JtJztcbiAgICBjb25zdCB2YWx1ZSA9IFtzY2FsZSA/IGBzY2FsZSgke3NjYWxlfSlgIDogJycsIHRyYW5zbGF0ZSA/IGB0cmFuc2xhdGVYKCR7dHJhbnNsYXRlfXB4KWAgOiAnJywgXS5qb2luKCcgJyk7XG4gICAgY29uc3QgcHJlZml4ZXMgPSBbJy13ZWJraXQtJywgJy1tcy0nLCAnJ107XG4gICAgY29uc3Qgc3R5bGVzID0ge307XG5cbiAgICBwcmVmaXhlcy5mb3JFYWNoKHByZWZpeCA9PiB7IHN0eWxlc1twcmVmaXggKyBydWxlXSA9IHZhbHVlfSApO1xuXG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfTtcblxuICAkdGhpcy5jc3NaSW5kZXggPSBmdW5jdGlvbih6aW5kZXgpIHtcbiAgICByZXR1cm4geyAnei1pbmRleCc6IHppbmRleCB9O1xuICB9O1xuXG4gICR0aGlzLnNldEJvZHlzSGVpZ2h0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaGVpZ2h0cyA9ICR0aGlzLmJvZHlzLnRvQXJyYXkoKS5tYXAoYm9keSA9PiAkKGJvZHkpLmhlaWdodCgpKTtcblxuICAgICR0aGlzLmJvZHlzV3JhcHBlci5oZWlnaHQoIE1hdGgubWF4KC4uLmhlaWdodHMpICk7XG4gIH07XG5cbiAgJHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLnNldEVsZW1lbnRzKCk7XG4gICAgJHRoaXMuc2lkZVF0eSA9IE1hdGguZmxvb3IoJHRoaXMuY2FyZHMubGVuZ3RoIC8gMik7XG4gICAgLy8gJHRoaXMuZ2V0RGF0YSgpO1xuICAgICR0aGlzLnNldENvbnRhaW5lckhlaWdodCgpO1xuICAgICR0aGlzLnNldENhcmRzT2Zmc2V0KCk7XG4gICAgJHRoaXMuc2V0VmFycygpO1xuICAgICR0aGlzLnNldENhcmRzUG9zaXRpb24oKTtcbiAgICAkdGhpcy5nZXRBY3RpdmVDYXJkKCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUJvZHkoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuc2V0Qm9keXNIZWlnaHQoKTtcblxuICAgICR0aGlzLmluaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgJHRoaXMuaW5pdEF1dG9QbGF5KCk7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5tb2R1bGUtLWI3JykuZWFjaChmdW5jdGlvbigpIHtcbiAgICBjb25zdCAkbW9kdWxlID0gJCh0aGlzKTtcblxuICAgICRtb2R1bGUuaW1hZ2VzTG9hZGVkKCkuYWx3YXlzKGZ1bmN0aW9uKCkge1xuICAgICAgbmV3IENhcm91c2VsKCAkbW9kdWxlICkuaW5pdCgpO1xuICAgIH0pXG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7IHRoZW1lX2JyZWFrcG9pbnRzIH0gZnJvbSAnZHJ1cGFsU2V0dGluZ3MnO1xuXG5jb25zdCBicmVha3BvaW50cyA9IHtcbiAgJ21pbic6IHt9LFxuICAnbWF4Jzoge30sXG59O1xuXG5PYmplY3Qua2V5cyh0aGVtZV9icmVha3BvaW50cykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gIGJyZWFrcG9pbnRzLm1pblsnbWInXSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcobWluLXdpZHRoOiAwcHgpJyk7XG4gIGJyZWFrcG9pbnRzLm1pbltrZXldID0gd2luZG93Lm1hdGNoTWVkaWEoYChtaW4td2lkdGg6ICR7dGhlbWVfYnJlYWtwb2ludHNba2V5XX1weClgKTtcbiAgYnJlYWtwb2ludHMubWF4W2tleV0gPSB3aW5kb3cubWF0Y2hNZWRpYShgKG1heC13aWR0aDogJHt0aGVtZV9icmVha3BvaW50c1trZXldIC0gMX1weClgKTtcbn0pXG5cbmV4cG9ydCBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhlbWVfYnJlYWtwb2ludHMpO1xuXG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50c1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjYXNlTGlzdFZpZXdzQmxvY2tTZWxlY3RvciA9ICcjdmlld3MtZXhwb3NlZC1mb3JtLWFydGljbGUtbGlzdC1xdWljay1ibG9jay1jYXNlLWxpc3QnO1xuICBjb25zdCB0eXBlUGxhY2Vob2xkZXIgPSBEcnVwYWwudCgnVHlwZScpO1xuICBjb25zdCBjb25jZXJuc1BsYWNlaG9sZGVyID0gRHJ1cGFsLnQoJ0NvbmNlcm5zJyk7XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy5jYXNlc19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJChjYXNlTGlzdFZpZXdzQmxvY2tTZWxlY3RvcikuZmlyc3QoKTtcblxuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJ0eXBlXCJdJykub25jZSgnc2VsZWN0Mi10eXBlJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHR5cGVQbGFjZWhvbGRlcixcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJjb25jZXJuc1wiXScpLm9uY2UoJ3NlbGVjdDItY29uY2VybnMnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogY29uY2VybnNQbGFjZWhvbGRlcixcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJpc19kaXNhc3NvY2lhdGVkXCJdJykub25jZSgnc2VsZWN0Mi1pc19kaXNhc3NvY2lhdGVkJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuLy8gaW1wb3J0IHNoYXZlIGZyb20gJy4vc2hhdmUnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy52aWV3LWlkLWNlcnRpZmllZF9wcm9kdWN0c19saXN0IC52aWV3LWNvbnRlbnQnKVxuICAgIC5hZGRDbGFzcygnb3dsLWNhcm91c2VsIG93bC10aGVtZScpXG4gICAgLm93bENhcm91c2VsKHtcbiAgICAgIG1hcmdpbjogMzcsXG4gICAgICByZXdpbmQ6IGZhbHNlLFxuICAgICAgYXV0b1dpZHRoOiB0cnVlLFxuICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgICAgJzAnOiB7XG4gICAgICAgICAgaXRlbXM6IDEsXG4gICAgICAgICAgY2VudGVyOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAnMTAyNCc6IHtcbiAgICAgICAgICBjZW50ZXI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgICcxMjgwJzoge1xuICAgICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgICAgaXRlbXM6IDMsXG4gICAgICAgICAgZG90c0VhY2g6IDMsXG4gICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgJGNvbnRhY3RGb3JtcyA9ICQoXCIuY29udGFjdC1mb3JtXCIpO1xuICBjb25zdCAkcHJldmlld0ZpbGVNb2RhbCA9ICQoJyNwcmV2aWV3LW1vZGFsJyk7XG4gIFxuICAkY29udGFjdEZvcm1zLm9uKCdjbGljaycsICcucGRmLXByZXZpZXctbW9kYWwtY2FsbGVyJywgZnVuY3Rpb24gKGUpIHtcbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG5cbiAgICBpZiAoJCgnYm9keScpLmhhc0NsYXNzKCdwZGYtc3VwcG9ydCcpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBjb25zdCBzcmMgPSAkdGhpcy5hdHRyKCdocmVmJyk7XG4gICAgICBjb25zdCAkcGRmQ29udGFpbmVyID0gJHByZXZpZXdGaWxlTW9kYWwuZmluZCgnI3BkZi1jb250YWluZXInKTtcbiAgICAgICRwcmV2aWV3RmlsZU1vZGFsLmZpbmQoJyNhY2NlcHQtdGVybXMnKS5kYXRhKCd0YXJnZXQnLCAkdGhpcy5jbG9zZXN0KCdsYWJlbCcpKTtcbiAgICAgIFxuICAgICAgLy8gSXMgcGRmIGFscmVhZHkgbG9hZGVkP1xuICAgICAgaWYgKCRwZGZDb250YWluZXIuYXR0cignc3JjJykgIT09IHNyYykge1xuICAgICAgICAkcGRmQ29udGFpbmVyLmF0dHIoJ3NyYycsIHNyYyk7XG4gICAgICB9XG5cbiAgICAgICRwcmV2aWV3RmlsZU1vZGFsLmFkZENsYXNzKCdzaG93Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICR0aGlzLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICB9XG4gIH0pO1xuXG4gICRwcmV2aWV3RmlsZU1vZGFsLm9uKCdjbGljaycsICcjYWNjZXB0LXRlcm1zJywgZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCAkY2hlY2tib3ggPSAkKGAjJHskdGhpcy5kYXRhKCd0YXJnZXQnKS5wcm9wKCdmb3InKX1gKTtcblxuICAgICRjaGVja2JveC5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgJGNoZWNrYm94LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICR0aGlzLmRhdGEoJ3RhcmdldCcsIG51bGwpO1xuICAgICRwcmV2aWV3RmlsZU1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gIH0pO1xufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgRHJ1cGFsLmJlaGF2aW9ycy5wcm9jZXNzZXNfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoJyN2aWV3cy1leHBvc2VkLWZvcm0tc2VhcmNoLXBhZ2UtZG9jdW1lbnQtY2VudHJlJyk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiZHNwYWNlX2RvY190eXBlXCJdJykub25jZSgnc2VsZWN0Mi1kb2N1bWVudC10eXBlJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnZGVib3VuY2UnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICR3aW5kb3cgPSAkKHdpbmRvdyk7XG4gIGNvbnN0ICRsb2dvID0gJCgnI2hlYWRlciAubG9nby1mYWRlSW5VcCcpO1xuICBjb25zdCBvZmZzZXQgPSArJGxvZ29cbiAgICAuYWRkKCc8ZGl2IGNsYXNzPVwiZmFkZUluVXAtb2Zmc2V0LTBcIj4nKVxuICAgIC5maXJzdCgpXG4gICAgLmF0dHIoJ2NsYXNzJylcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maW5kKGNsYXNzTmFtZSA9PiBjbGFzc05hbWUuc3RhcnRzV2l0aCgnZmFkZUluVXAtb2Zmc2V0LScpKVxuICAgIC5zcGxpdCgnLScpXG4gICAgLnBvcCgpO1xuXG4gIGlmIChvZmZzZXQpIHtcbiAgICAkd2luZG93Lm9uKCdzY3JvbGwnLCBkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkd2luZG93LnNjcm9sbFRvcCgpID4gb2Zmc2V0KSB7XG4gICAgICAgICRsb2dvLmFkZENsYXNzKCd2aXNpYmxlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkbG9nby5yZW1vdmVDbGFzcygndmlzaWJsZScpO1xuICAgICAgfVxuICAgIH0sIDUwKSk7XG4gIH1cbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5wYXJhZ3JhcGgtLXR5cGUtLWNvbnRhY3QtZm9ybSBmb3JtLmNvbnRhY3QtZm9ybSAuZm9ybS1hY3Rpb25zIGlucHV0W3R5cGU9c3VibWl0XScpLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbihldmVudCkge1xuICAgIGNvbnN0ICRmb3JtID0gJCh0aGlzKS5wYXJlbnRzKCdmb3JtJyk7XG5cbiAgICBkYXRhTGF5ZXIucHVzaCh7XG4gICAgICAnZXZlbnQnOiAnZ3RtLmZvcm1TdWJtaXQnLFxuICAgICAgJ2d0bS5lbGVtZW50JzogJGZvcm1bMF0sXG4gICAgICAnZ3RtLmVsZW1lbnRDbGFzc2VzJzogJGZvcm0uYXR0cignY2xhc3MnKSxcbiAgICAgICdndG0uZWxlbWVudElkJzogJGZvcm0uYXR0cignaWQnKVxuICAgIH0pO1xuICB9KTtcblxuICBsZXQgJHJlZ2lvbnM7XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy5leHBvc2VkX2Zvcm1fc3VibWlzc2lvbiA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICAkcmVnaW9ucyA9ICRyZWdpb25zIHx8ICQoJy5yZWdpb24taGVybywgLnJlZ2lvbi1jb250ZW50Jyk7XG4gICAgICBjb25zdCBzZWxlY3RvciA9ICdbaWRePXZpZXdzLWV4cG9zZWQtZm9ybV0nO1xuICAgICAgY29uc3QgJGZvcm1zID0gJChzZWxlY3RvciwgY29udGV4dCkuYWRkQmFjayhzZWxlY3Rvcik7XG4gICAgICBjb25zdCAkYmVmID0gJHJlZ2lvbnMuZmluZCgkZm9ybXMpLm9uY2UoJ2JlZi1ndG0nKTtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcblxuICAgICAgJGJlZi5maW5kKCdpbnB1dFt0eXBlPXN1Ym1pdF0nKS5vbignY2xpY2sgbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0ICRmb3JtID0gJCh0aGlzKS5wYXJlbnRzKCdmb3JtJyk7XG4gICAgICAgIGNvbnN0ICRpdGVtcyA9ICRmb3JtLmZpbmQoJy5mb3JtLWl0ZW0nKTtcblxuICAgICAgICAkaXRlbXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICBjb25zdCAkaXRlbSA9ICQodGhpcyk7XG5cbiAgICAgICAgICBzd2l0Y2goZ2V0SXRlbVR5cGUoJGl0ZW0pKSB7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICRpdGVtLmZpbmQoJ3NlbGVjdCcpLnZhbCgpO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICRpdGVtLmZpbmQoJ29wdGlvbicpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihgW3ZhbHVlPSR7aW5kZXh9XWApXG4gICAgICAgICAgICAgICAgLnRleHQoKTtcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goJGl0ZW0uZmluZCgnaW5wdXQnKS52YWwoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGZvcm0uYWRkQ2xhc3MoJ3ZpZXdzLWV4cG9zZWQtZm9ybScpO1xuXG4gICAgICAgIGRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAnZXZlbnQnOiAnZXhwb3NlZEZvcm0nLFxuICAgICAgICAgICdmb3JtRmlsdGVycyc6IG5vcm1hbGl6ZUZpbHRlcnMoZmlsdGVycylcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0SXRlbVR5cGUoJGl0ZW0pIHtcbiAgICByZXR1cm4gJGl0ZW0uYXR0cignY2xhc3MnKVxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5maWx0ZXIoY2xhc3NOYW1lID0+IGNsYXNzTmFtZS5zdGFydHNXaXRoKCdmb3JtLXR5cGUnKSlcbiAgICAgIC5wb3AoKVxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5wb3AoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbHRlcnMoZmlsdGVycykge1xuICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAubWFwKGZpbHRlciA9PiBmaWx0ZXIucmVwbGFjZSgvLS9nLCAnJykpXG4gICAgICAubWFwKGZpbHRlciA9PiBmaWx0ZXIudHJpbSgpKVxuICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLmxlbmd0aClcbiAgICAgIC5qb2luKCcgLSAnKTtcbiAgfVxufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZnVuY3Rpb24gbG9nRXJyb3JNZXNzYWdlKG1zZykge1xuICBjb25zb2xlLmVycm9yKCdbSGFzaC5qc10gVGhlIGhhc2ggcGFzc2VkIGluIHRvIHVwZGF0ZSBsb2NhdGlvbiBpcyBub3QgdmFsaWQnKTtcbiAgY29uc29sZS5lcnJvcihgW0hhc2guanNdICR7bXNnfWApO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkKGhhc2gpIHtcbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgaGFzaCkge1xuICAgIGxvZ0Vycm9yTWVzc2FnZSgnSGFzaCBoYXMgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWhhc2gubGVuZ3RoKSB7XG4gICAgbG9nRXJyb3JNZXNzYWdlKCdIYXNoIGlzIGVtcHR5Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZShoYXNoKSB7XG4gIGlmICghaXNWYWxpZChoYXNoKSkgeyByZXR1cm47IH1cblxuICBjb25zdCBkZXN0aW5hdGlvbkVsZW1lbnQgPSAkKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoLnN1YnN0cmluZygxKSkgKTtcblxuICBpZiAoaGlzdG9yeS5wdXNoU3RhdGUpIHtcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7fSwgJycsIGhhc2gpO1xuICB9IGVsc2Uge1xuICAgIGRlc3RpbmF0aW9uRWxlbWVudC5yZW1vdmVBdHRyKCdpZCcpO1xuICAgIGxvY2F0aW9uLmhhc2ggPSBoYXNoO1xuICAgIGRlc3RpbmF0aW9uRWxlbWVudC5hdHRyKCdpZCcsIGhhc2guc3Vic3RyaW5nKDEpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHVwZGF0ZSB9XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2RlYm91bmNlJztcbmltcG9ydCBicmVha3BvaW50cywgeyBrZXlzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmZ1bmN0aW9uIHRlc3QoJGVsLCBvZmZzZXQgPSAxMDApIHtcbiAgY29uc3QgJHdpbiA9ICQod2luZG93KTtcbiAgY29uc3Qgd2luVG9wID0gJHdpbi5zY3JvbGxUb3AoKTtcbiAgY29uc3Qgd2luQm90ID0gd2luVG9wICsgJHdpbi5oZWlnaHQoKTtcbiAgY29uc3QgZWxUb3AgPSAkZWwub2Zmc2V0KCkudG9wO1xuICBjb25zdCBlbEJvdCA9IGVsVG9wICsgJGVsLm91dGVySGVpZ2h0KCk7XG5cbiAgcmV0dXJuIChlbFRvcCA8PSAod2luQm90IC0gb2Zmc2V0KSkgJiYgKCh3aW5Ub3AgKyBvZmZzZXQpIDw9IGVsQm90KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBhbGxFbGVtZW50cyA9ICQoJy5jaGVja0lmSW5WaWV3Jyk7XG4gIGNvbnN0IGludmFsaWRFbGVtZW50cyA9IGFsbEVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbigpIHtcbiAgICBjb25zdCB7IGluVmlld01pbiwgaW5WaWV3TWF4IH0gPSAkKHRoaXMpLmRhdGEoKTtcbiAgICBsZXQgZGVjaXNpb24gPSBmYWxzZVxuXG4gICAgaWYgKGtleXMuaW5jbHVkZXMoaW5WaWV3TWluKSAmJiBrZXlzLmluY2x1ZGVzKGluVmlld01heCkpIHtcbiAgICAgIGlmICghYnJlYWtwb2ludHMubWluW2luVmlld01pbl0ubWF0Y2hlcyB8fCAhYnJlYWtwb2ludHMubWF4W2luVmlld01heF0ubWF0Y2hlcykge1xuICAgICAgICBkZWNpc2lvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleXMuaW5jbHVkZXMoaW5WaWV3TWluKSAmJiAhYnJlYWtwb2ludHMubWluW2luVmlld01pbl0ubWF0Y2hlcykge1xuICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01heCkgJiYgIWJyZWFrcG9pbnRzLm1heFtpblZpZXdNYXhdLm1hdGNoZXMpIHtcbiAgICAgIGRlY2lzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2NoZWNrSWZJblZpZXcnKS5hZGRDbGFzcygnaW5WaWV3Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY2lzaW9uO1xuICB9KTtcblxuICBsZXQgZWxlbWVudHMgPSBhbGxFbGVtZW50cy5ub3QoaW52YWxpZEVsZW1lbnRzKTtcblxuICBpZiAoICFlbGVtZW50cy5sZW5ndGggKSByZXR1cm47XG5cbiAgY29uc3QgaGFuZGxlciA9IGRlYm91bmNlKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdzY3JvbGwnLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50cy5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICBjb25zdCAkZWwgPSAkKG5vZGUpO1xuICAgICAgY29uc3QgeyBpblZpZXdPZmZzZXQsIGluVmlld0NsYXNzIH0gPSAkZWwuZGF0YSgpO1xuXG4gICAgICBpZiAodGVzdCgkZWwsIGluVmlld09mZnNldCkpIHtcbiAgICAgICAgJGVsXG4gICAgICAgICAgLnJlbW92ZUNsYXNzKCdjaGVja0lmSW5WaWV3JylcbiAgICAgICAgICAuYWRkQ2xhc3MoJ2luVmlldycpXG4gICAgICAgICAgLmFkZENsYXNzKGluVmlld0NsYXNzKTtcblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRlbC5yZW1vdmVDbGFzcygnaW5WaWV3Jyk7XG4gICAgICAgIH0sIDExMDApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoJy5jaGVja0lmSW5WaWV3Jyk7XG4gIH0sIDUwKTtcbiAgaGFuZGxlcigpO1xuICAkKHdpbmRvdykub24oJ3Njcm9sbCcsIGhhbmRsZXIpO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZnVuY3Rpb24gY2FsY3VsYXRlTGluZUhlaWdodCgkZWxlbWVudCkge1xuICBsZXQgaGVpZ2h0ID0gMDtcbiAgY29uc3Qgc3R5bGVzID0gW1xuICAgICdkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsnLFxuICAgICdwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsnLFxuICAgICdsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50OycsXG4gICAgJ3BhZGRpbmc6IDAgIWltcG9ydGFudDsnLFxuICAgICd2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsnLFxuICAgICdvcGFjaXR5OiAwICFpbXBvcnRhbnQ7J1xuICBdO1xuICBjb25zdCAkdGVzdEVsID0gJCgnPHNwYW4+Jm5ic3A7PC9zcGFuPicpLmF0dHIoJ3N0eWxlJywgc3R5bGVzLmpvaW4oJycpKTtcblxuICAkZWxlbWVudC5hcHBlbmQoJHRlc3RFbCk7XG5cbiAgaGVpZ2h0ID0gJHRlc3RFbC5oZWlnaHQoKTtcblxuICAkdGVzdEVsLnJlbW92ZSgpO1xuXG4gIHJldHVybiBoZWlnaHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgkZWxlbWVudCkgPT4ge1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdCgkZWxlbWVudC5jc3MoJ2xpbmUtaGVpZ2h0JykpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNOYU4obGluZUhlaWdodCkgPyBjYWxjdWxhdGVMaW5lSGVpZ2h0KCRlbGVtZW50KSA6IE1hdGguY2VpbChsaW5lSGVpZ2h0KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgYnJlYWtwb2ludHMgZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmZ1bmN0aW9uIHRpdGxlKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn1cblxuZnVuY3Rpb24gc2V0U291cmNlKG5vZGUsIHNyY1R5cGUpIHtcbiAgY29uc3QgJG1hcCA9ICQobm9kZSk7XG4gIGNvbnN0IHNyYyA9ICRtYXAuZGF0YShgc3JjJHt0aXRsZShzcmNUeXBlKX1gKTtcblxuICAkbWFwLmF0dHIoeyBzcmMgfSk7XG59XG5cbmZ1bmN0aW9uIHRlc3RNUSgkbWFwcykge1xuICBpZiAoYnJlYWtwb2ludHMubWluLmJnLm1hdGNoZXMpIHtcbiAgICAkbWFwcy5lYWNoKChpLCBlbCkgPT4geyBzZXRTb3VyY2UoZWwsICdkZXNrdG9wJyk7IH0pO1xuICB9IGVsc2Uge1xuICAgICRtYXBzLmVhY2goKGksIGVsKSA9PiB7IHNldFNvdXJjZShlbCwgJ21vYmlsZScpOyB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICRtYXBzID0gJCgnaWZyYW1lLnJlc3BvbnNpdmUtbWFwJyk7XG5cbiAgaWYgKGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzKSB7XG4gICAgdGVzdE1RKCRtYXBzKTtcbiAgfVxuXG4gIGJyZWFrcG9pbnRzLm1pbi5iZy5hZGRMaXN0ZW5lcigoKSA9PiB7IHRlc3RNUSgkbWFwcykgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG4vKipcbiAqIFxuICogQHBhcmFtIHtzdHJpbmd9IG1lZGlhSUQgXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgXG4gKiBAcGFyYW0ge3N0cmluZ30gdGh1bWJuYWlsIFxuICogQHBhcmFtIHtzdHJpbmd9IGNvb2tpZU5hbWUgXG4gKi9cbmZ1bmN0aW9uIGNvb2tpZXNBZGRNZWRpYShtZWRpYUlELCBnZW5lcmljLCBzb3VyY2UsIHR5cGUsIHRodW1ibmFpbCwgY29va2llTmFtZSkge1xuICBsZXQgc2VsZWN0ZWRNZWRpYSA9IENvb2tpZXMuZ2V0SlNPTihjb29raWVOYW1lKTtcbiAgXG4gIGlmICh1bmRlZmluZWQgPT09IHNlbGVjdGVkTWVkaWEpIHtcbiAgICBzZWxlY3RlZE1lZGlhID0ge307XG4gIH1cblxuICBzZWxlY3RlZE1lZGlhW21lZGlhSURdID0ge1xuICAgIGdlbmVyaWM6IGdlbmVyaWMsXG4gICAgdHlwZTogdHlwZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICB0aHVtYm5haWw6IHR5cGUgIT0gJ3BkZicgPyB0aHVtYm5haWwgOiAnJ1xuICB9O1xuICBDb29raWVzLnNldChjb29raWVOYW1lLCBzZWxlY3RlZE1lZGlhKTtcbn1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZWRpYUlEIFxuICogQHBhcmFtIHtzdHJpbmd9IGNvb2tpZU5hbWUgXG4gKi9cbmZ1bmN0aW9uIGNvb2tpZXNEZWxldGVNZWRpYShtZWRpYUlELCBjb29raWVOYW1lKSB7XG4gIGxldCBzZWxlY3RlZE1lZGlhID0gQ29va2llcy5nZXRKU09OKGNvb2tpZU5hbWUpO1xuICBcbiAgaWYgKHNlbGVjdGVkTWVkaWEgJiYgZGVsZXRlIHNlbGVjdGVkTWVkaWFbbWVkaWFJRF0pIHtcbiAgICBDb29raWVzLnNldChjb29raWVOYW1lLCBzZWxlY3RlZE1lZGlhKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IHNlbGVjdGVkUmVzb3VyY2VzID0gJCgnI3NlbGVjdGVkLXJlc291cmNlcycpO1xuICBjb25zdCBzZWxlY3RlZERvY3VtZW50cyA9ICQoJyNzZWxlY3RlZC1kb2N1bWVudHMnKTtcbiAgY29uc3QgcmVzb3VyY2VMaXN0ID0gJCgnLnJlc291cmNlLWxpc3QnKTtcbiAgY29uc3QgcmVzb3VyY2VJdGVtV3JhcHBlciA9ICcucmVzb3VyY2UtaXRlbSc7XG4gIGNvbnN0IHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyID0gJy5zZWxlY3RlZC1yZXNvdXJjZSc7XG4gIGNvbnN0IHNlbGVjdGVkSW1hZ2VUZW1wbGF0ZSA9ICQoJyNzZWxlY3RlZC1pbWFnZS10ZW1wbGF0ZSAnICsgc2VsZWN0ZWRSZXNvdXJjZVdyYXBwZXIpLmZpcnN0KCk7XG4gIGNvbnN0IHNlbGVjdGVkVmlkZW9UZW1wbGF0ZSA9ICQoJyNzZWxlY3RlZC12aWRlby10ZW1wbGF0ZSAnICsgc2VsZWN0ZWRSZXNvdXJjZVdyYXBwZXIpLmZpcnN0KCk7XG4gIGNvbnN0IHNlbGVjdGVkUERGVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtcGRmLXRlbXBsYXRlICcgKyBzZWxlY3RlZFJlc291cmNlV3JhcHBlcikuZmlyc3QoKTtcbiAgY29uc3Qgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUgPSAnc2VsZWN0ZWRNZWRpYSc7XG4gIFxuICBmdW5jdGlvbiBjcmVhdGVTZWxlY3RlZFJlc291cmNlKG1lZGlhSUQsIG1lZGlhKSB7XG4gICAgbGV0IHJlc291cmNlVG9BcHBlbmQgPSBudWxsO1xuXG4gICAgc3dpdGNoIChtZWRpYS50eXBlKSB7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIGlmIChzZWxlY3RlZFZpZGVvVGVtcGxhdGUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvdXJjZVRvQXBwZW5kID0gc2VsZWN0ZWRWaWRlb1RlbXBsYXRlLmNsb25lKCk7XG4gICAgICAgIHJlc291cmNlVG9BcHBlbmQuZmluZCgnLnJlc291cmNlIHNvdXJjZScpLmZpcnN0KCkuYXR0cignc3JjJywgbWVkaWEuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIGlmIChzZWxlY3RlZEltYWdlVGVtcGxhdGUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvdXJjZVRvQXBwZW5kID0gc2VsZWN0ZWRJbWFnZVRlbXBsYXRlLmNsb25lKCk7XG4gICAgICAgIHJlc291cmNlVG9BcHBlbmQuZmluZCgnaW1nJykuZmlyc3QoKS5hdHRyKCdzcmMnLCBtZWRpYS5zb3VyY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BkZic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2VsZWN0ZWRQREZUZW1wbGF0ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc291cmNlVG9BcHBlbmQgPSBzZWxlY3RlZFBERlRlbXBsYXRlLmNsb25lKCk7XG4gICAgICAgIGNvbnN0ICRpbWcgPSByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJ2ltZycpLmZpcnN0KCk7XG4gICAgICAgIFxuICAgICAgICBpZiAobWVkaWEudGh1bWJuYWlsKSB7XG4gICAgICAgICAgJGltZy5hdHRyKCdzcmMnLCBtZWRpYS50aHVtYm5haWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgJGltZy5hdHRyKCdkYXRhLXBkZi10aHVtYm5haWwtZmlsZScsIG1lZGlhLnNvdXJjZSk7XG4gICAgICAgICRpbWcuYXR0cignZGF0YS10eXBlJywgbWVkaWEudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBcbiAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJy5kb3dubG9hZC1idG4nKS5maXJzdCgpLmF0dHIoJ2hyZWYnLCBtZWRpYS5zb3VyY2UpO1xuICAgIHJlc291cmNlVG9BcHBlbmQuYXR0cignZGF0YS1tZWRpYScsIG1lZGlhSUQpOyAvLyB1c2VkIGF0dHIoKSBiZWNhdXNlIGRhdGEtbWVkaWEgd2lsbCBiZSBxdWVyaWVkIGxhdGVyXG5cbiAgICBpZiAobWVkaWEudHlwZSA9PSAnaW1hZ2UnIHx8ICBtZWRpYS50eXBlID09ICd2aWRlbycpIHtcbiAgICAgIHNlbGVjdGVkUmVzb3VyY2VzLmNoaWxkcmVuKCcuc2VsZWN0ZWQtcmVzb3VyY2UtbGlzdCcpLmZpcnN0KCkuYXBwZW5kKHJlc291cmNlVG9BcHBlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZERvY3VtZW50cy5jaGlsZHJlbignLnNlbGVjdGVkLXJlc291cmNlLWxpc3QnKS5maXJzdCgpLmFwcGVuZChyZXNvdXJjZVRvQXBwZW5kKTtcbiAgICB9XG5cbiAgICAkKCcjJyArIG1lZGlhSUQsIHJlc291cmNlTGlzdCkuY2xvc2VzdChyZXNvdXJjZUl0ZW1XcmFwcGVyKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChzZWxlY3RlZFJlc291cmNlcy5sZW5ndGggPT0gMSB8fCBzZWxlY3RlZERvY3VtZW50cy5sZW5ndGggPT0gMSkge1xuICAgIC8vIE9uZSBjeWNsZSBmb3IgYWRkaW5nIGVhY2ggbWVkaWEgYmFzZWQgb24gaXRzJyB0eXBlIHRvIHNlbGVjdGVkIHNlY3Rpb24uXG4gICAgbGV0IGNvb2tpZXNNZWRpYSA9IENvb2tpZXMuZ2V0SlNPTihzZWxlY3RlZE1lZGlhQ29va2llTmFtZSk7XG5cbiAgICBpZiAodW5kZWZpbmVkID09PSBjb29raWVzTWVkaWEpIHtcbiAgICAgIENvb2tpZXMuc2V0KHNlbGVjdGVkTWVkaWFDb29raWVOYW1lLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBjb29raWVzTWVkaWEpIHtcbiAgICAgICAgaWYgKGNvb2tpZXNNZWRpYS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIGNyZWF0ZVNlbGVjdGVkUmVzb3VyY2UocHJvcCwgY29va2llc01lZGlhW3Byb3BdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV2ZW50IGhhbmRsZXJzLlxuICAgIHJlc291cmNlTGlzdC5vbignY2xpY2snLCAnLnJlc291cmNlLWl0ZW0gLnNlbGVjdC1idG4nLCBmdW5jdGlvbihlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHJlc291cmNlSXRlbSA9ICQodGhpcykuY2xvc2VzdChyZXNvdXJjZUl0ZW1XcmFwcGVyKTsgLy8gLnJlc291cmNlLWl0ZW1cbiAgICAgIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VJdGVtLmZpbmQoJy5yZXNvdXJjZScpLmZpcnN0KCk7XG4gICAgICBsZXQgZW50aXR5ID0gcmVzb3VyY2VJdGVtLmNoaWxkcmVuKCcubWVkaWEsIC5maWxlJykuZmlyc3QoKTtcbiAgICAgIGNvbnN0IGZpbGVUeXBlID0gcmVzb3VyY2UuZGF0YSgndHlwZScpO1xuXG4gICAgICBpZiAocmVzb3VyY2VJdGVtLmxlbmd0aCA9PSAwIHx8IHJlc291cmNlLmxlbmd0aCA9PSAwIHx8IGVudGl0eS5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvdXJjZUl0ZW0uaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkID0gJCgnLnNlbGVjdGVkLXJlc291cmNlW2RhdGEtbWVkaWE9XCInICsgZW50aXR5LmF0dHIoJ2lkJykgKyAnXCJdJywgc2VsZWN0ZWRSZXNvdXJjZXMpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHNlbGVjdGVkID0gJCgnLnNlbGVjdGVkLXJlc291cmNlW2RhdGEtbWVkaWE9XCInICsgZW50aXR5LmF0dHIoJ2lkJykgKyAnXCJdJywgc2VsZWN0ZWREb2N1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgY29va2llc0RlbGV0ZU1lZGlhKGVudGl0eS5hdHRyKCdpZCcpLCBzZWxlY3RlZE1lZGlhQ29va2llTmFtZSk7XG4gICAgICAgICAgcmVzb3VyY2VJdGVtLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICAgIHNlbGVjdGVkLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByID0gZW50aXR5LmZpbmQoJy5yZXNvdXJjZScpLmZpcnN0KCk7XG4gICAgICBsZXQgZW50aXR5U291cmNlID0gci5hdHRyKCdocmVmJyk7XG4gICAgICBsZXQgZW50aXR5R2VuZXJpYyA9IHIuYXR0cignZGF0YS1nZW5lcmljJyk7XG4gICAgICBsZXQgZW50aXR5VGh1bWJuYWlsID0gZW50aXR5LmZpbmQoJy50aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ3NyYycpO1xuXG4gICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKGVudGl0eS5hdHRyKCdpZCcpLCB7XG4gICAgICAgIGdlbmVyaWM6IGVudGl0eUdlbmVyaWMsXG4gICAgICAgIHNvdXJjZTogZW50aXR5U291cmNlLCBcbiAgICAgICAgdHlwZTogZmlsZVR5cGUsIFxuICAgICAgICB0aHVtYm5haWw6IGVudGl0eVRodW1ibmFpbFxuICAgICAgfSk7XG4gICAgICBjb29raWVzQWRkTWVkaWEoXG4gICAgICAgIGVudGl0eS5hdHRyKCdpZCcpLFxuICAgICAgICBlbnRpdHlHZW5lcmljLFxuICAgICAgICBlbnRpdHlTb3VyY2UsXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBlbnRpdHlUaHVtYm5haWwsXG4gICAgICAgIHNlbGVjdGVkTWVkaWFDb29raWVOYW1lXG4gICAgICApO1xuICAgICAgcmVzb3VyY2VJdGVtLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgIH0pO1xuXG4gICAgJCgnLnNlbGVjdGVkLXJlc291cmNlLWxpc3QnKS5vbignY2xpY2snLCAnLnNlbGVjdGVkLXJlc291cmNlIC51bnNlbGVjdC1idG4nLCBmdW5jdGlvbihlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGxldCBzZWxlY3RlZFJlc291cmNlID0gJCh0aGlzKS5jbG9zZXN0KHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKTtcblxuICAgICAgaWYgKHNlbGVjdGVkUmVzb3VyY2UubGVuZ3RoID09IDEpIHtcbiAgICAgICAgbGV0IG1lZGlhSUQgPSBzZWxlY3RlZFJlc291cmNlLmRhdGEoJ21lZGlhJyk7XG5cbiAgICAgICAgJCgnIycgKyBtZWRpYUlELCByZXNvdXJjZUxpc3QpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcikucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgIGNvb2tpZXNEZWxldGVNZWRpYShtZWRpYUlELCBzZWxlY3RlZE1lZGlhQ29va2llTmFtZSk7XG4gICAgICAgIHNlbGVjdGVkUmVzb3VyY2UucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkKCcuZ2FsbGVyeS1jb250ZW50Jykub24oJ2NsaWNrJywgJy5tZWRpYS1zZWxlY3QnLCBmdW5jdGlvbihlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0ICRnYWxsZXJ5Q29udGVudCA9ICQodGhpcykuY2xvc2VzdCgnLmdhbGxlcnktY29udGVudCcpO1xuICAgICAgY29uc3QgJGdhbGxlcnlNZWRpYSA9ICRnYWxsZXJ5Q29udGVudC5jaGlsZHJlbignI2dhbGxlcnktbWVkaWEnKTtcbiAgICAgIGNvbnN0IG1lZGlhSUQgPSAkZ2FsbGVyeU1lZGlhLmRhdGEoJ21lZGlhJyk7XG5cbiAgICAgIGlmICh1bmRlZmluZWQgPT09IG1lZGlhSUQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgJHJlc291cmNlSXRlbSA9ICQoJyMnICsgbWVkaWFJRCwgcmVzb3VyY2VMaXN0KS5jbG9zZXN0KHJlc291cmNlSXRlbVdyYXBwZXIpO1xuXG4gICAgICBpZiAoJHJlc291cmNlSXRlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoJGdhbGxlcnlDb250ZW50Lmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGNvb2tpZXNEZWxldGVNZWRpYShtZWRpYUlELCBzZWxlY3RlZE1lZGlhQ29va2llTmFtZSk7XG5cbiAgICAgICAgLy8gU2V0ICdoZWFydCcgaWNvbiB0byAndW5zZWxlY3RlZCcgc3RhdGUuXG4gICAgICAgICRnYWxsZXJ5Q29udGVudC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgJHJlc291cmNlSXRlbS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblxuICAgICAgICAvLyBSZW1vdmUgbWVkaWEgZnJvbSBzZWxlY3RlZCBzZWN0aW9uLlxuICAgICAgICAkKCcuc2VsZWN0ZWQtcmVzb3VyY2VbZGF0YS1tZWRpYT1cIicgKyBtZWRpYUlEICsgJ1wiXScsIHNlbGVjdGVkUmVzb3VyY2VzKS5yZW1vdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBtZWRpYVRodW1ibmFpbCA9ICRyZXNvdXJjZUl0ZW0uZmluZCgnLnRodW1ibmFpbCcpLmZpcnN0KCkuYXR0cignc3JjJyk7XG5cbiAgICAgIGNyZWF0ZVNlbGVjdGVkUmVzb3VyY2UobWVkaWFJRCwge1xuICAgICAgICBnZW5lcmljOiAkZ2FsbGVyeU1lZGlhLmF0dHIoJ2RhdGEtZ2VuZXJpYycpLFxuICAgICAgICBzb3VyY2U6ICRnYWxsZXJ5TWVkaWEuYXR0cignc3JjJyksIFxuICAgICAgICB0eXBlOiAkZ2FsbGVyeU1lZGlhLmRhdGEoJ3R5cGUnKSwgXG4gICAgICAgIHRodW1ibmFpbDogbWVkaWFUaHVtYm5haWxcbiAgICAgIH0pO1xuICAgICAgY29va2llc0FkZE1lZGlhKFxuICAgICAgICBtZWRpYUlELFxuICAgICAgICAkZ2FsbGVyeU1lZGlhLmF0dHIoJ2RhdGEtZ2VuZXJpYycpLFxuICAgICAgICAkZ2FsbGVyeU1lZGlhLmF0dHIoJ3NyYycpLFxuICAgICAgICAkZ2FsbGVyeU1lZGlhLmRhdGEoJ3R5cGUnKSxcbiAgICAgICAgbWVkaWFUaHVtYm5haWwsXG4gICAgICAgIHNlbGVjdGVkTWVkaWFDb29raWVOYW1lXG4gICAgICApO1xuICAgICAgJGdhbGxlcnlDb250ZW50LmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgJHJlc291cmNlSXRlbS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgICQoJy5zZWxlY3RlZC1oZWFkZXIgYS5saW5rJykuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgbGV0IHNhdmVkTWVkaWEgPSBDb29raWVzLmdldEpTT04oc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgbGV0IHByZXZlbnREb3dubG9hZCA9IHRydWU7XG5cbiAgICAgIGlmICh1bmRlZmluZWQgIT09IHNhdmVkTWVkaWEgJiYgT2JqZWN0LmtleXMoc2F2ZWRNZWRpYSkubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgYXJyID0gbnVsbDtcblxuICAgICAgICAvLyBDaGVjayBkb3dubG9hZGFibGUgY29udGVudCBiYXNlZCBvbiBtZWRpYSB0eXBlLlxuICAgICAgICBpZiAoJHRoaXMuZGF0YSgndGFyZ2V0JykgPT09ICdkb2N1bWVudHMnKSB7XG4gICAgICAgICAgYXJyID0gT2JqZWN0LnZhbHVlcyhzYXZlZE1lZGlhKS5maWx0ZXIobWVkaWEgPT4gbWVkaWEuZ2VuZXJpYyA9PT0gJ2RvY3MnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcnIgPSBPYmplY3QudmFsdWVzKHNhdmVkTWVkaWEpLmZpbHRlcihtZWRpYSA9PiBtZWRpYS5nZW5lcmljICE9PSAnZG9jcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmVudERvd25sb2FkID0gYXJyLmxlbmd0aCA9PT0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZlbnREb3dubG9hZCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdEb3dubG9hZCBzdG9wcGVkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoXCIucmVzb3VyY2UtbGlzdCwgLnNlbGVjdGVkLXJlc291cmNlc1wiKS5vbihcImNsaWNrXCIsIFwiLnJlc291cmNlLWNvbnRhaW5lciAucGxheS12aWRlby1idG5cIiwgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGNsaWNrZWQgPSAkKHRoaXMpO1xuICAgIGNvbnN0IHZpZGVvQ29udGFpbmVyID0gY2xpY2tlZC5zaWJsaW5ncyhcImlmcmFtZVwiKS5maXJzdCgpO1xuXG4gICAgY2xpY2tlZC5oaWRlKCk7XG4gICAgdmlkZW9Db250YWluZXIuYXR0cihcInNyY1wiLCB2aWRlb0NvbnRhaW5lci5hdHRyKFwiZGF0YS1zcmNcIikpO1xuICB9KTtcbn07IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBtZW51cyA9ICQoJyNoZWFkZXInKS5hZGQoJy5yZWdpb24tbW9iaWxlJykuZmluZCgnLmJsb2NrLW1lbnUgLm1lbnUnKTtcbiAgY29uc3QgaGVhZGVycyA9IG1lbnVzLmZpbmQoJy5sZXZlbC0tMScpO1xuXG4gIGhlYWRlcnMuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCBoZWFkZXIgPSAkKHRoaXMpO1xuXG4gICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcblxuICAgIGlmIChoZWFkZXIuaGFzQ2xhc3MoJ2V4cGFuZCcpKSB7XG4gICAgICBoZWFkZXIucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZW51cy5maW5kKCcuc3ViJykucmVtb3ZlQ2xhc3MoJ3N1Yi0tb3BlbicpO1xuICAgICAgaGVhZGVycy5yZW1vdmVDbGFzcygnZXhwYW5kJyk7XG5cbiAgICAgIGhlYWRlci5hZGRDbGFzcygnZXhwYW5kJylcbiAgICAgICAgLmZpbmQoJy5zdWInKS5hZGRDbGFzcygnc3ViLS1vcGVuJyk7XG4gICAgfVxuICB9KTtcblxuICAkKGRvY3VtZW50KS5jbGljayhmdW5jdGlvbihldmVudCkge1xuICAgIGNvbnN0IGhlYWRlciA9IGhlYWRlcnMuZmlsdGVyKCcuZXhwYW5kJyk7XG4gICAgY29uc3QgbWVudSA9IGhlYWRlci5jbG9zZXN0KCcuYmxvY2stbWVudScpO1xuXG4gICAgaWYgKG1lbnUuZmluZChldmVudC50YXJnZXQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaGVhZGVycy5yZW1vdmVDbGFzcygnZXhwYW5kJyk7XG4gICAgICBtZW51cy5maW5kKCcuc3ViJykucmVtb3ZlQ2xhc3MoJ3N1Yi0tb3BlbicpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGZ1bmN0aW9uIHNldEdhbGxlcnlEaXNwbGF5TWVkaWEoJGdhbGxlcnksICRyZXNvdXJjZUl0ZW0sICRwcmV2LCAkbmV4dCkge1xuICAgIGxldCBtZWRpYVNvdXJjZSA9ICRyZXNvdXJjZUl0ZW0uZmluZCgnLnJlc291cmNlJykuZmlyc3QoKS5hdHRyKCdocmVmJyk7XG4gICAgXG4gICAgaWYgKCRyZXNvdXJjZUl0ZW0uaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICRnYWxsZXJ5LmZpbmQoJy5nYWxsZXJ5LWNvbnRlbnQnKS5maXJzdCgpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZ2FsbGVyeS5maW5kKCcuZ2FsbGVyeS1jb250ZW50JykuZmlyc3QoKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9XG5cbiAgICAkZ2FsbGVyeS5maW5kKCcjZ2FsbGVyeS1tZWRpYScpXG4gICAgICAuYXR0cignc3JjJywgbWVkaWFTb3VyY2UpXG4gICAgICAuZGF0YSgnbWVkaWEnLCAkcmVzb3VyY2VJdGVtLmNoaWxkcmVuKCcubWVkaWEnKS5maXJzdCgpLmF0dHIoJ2lkJykpO1xuICAgICRnYWxsZXJ5LmZpbmQoJy5tZWRpYS1kb3dubG9hZCcpLmZpcnN0KCkuYXR0cignaHJlZicsIG1lZGlhU291cmNlKTtcbiAgICAkZ2FsbGVyeS5maW5kKCcuY29udHJvbC5uZXh0JykuZmlyc3QoKS5kYXRhKCd0YXJnZXQnLCAkbmV4dC5sZW5ndGggPT09IDAgPyBudWxsIDogJG5leHQpO1xuICAgICRnYWxsZXJ5LmZpbmQoJy5jb250cm9sLnByZXYnKS5maXJzdCgpLmRhdGEoJ3RhcmdldCcsICRwcmV2Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiAkcHJldik7XG4gIH1cblxuICBjb25zdCAkZ2FsbGVyaWVzID0gJCgnLmdhbGxlcnknKTtcblxuICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLmdhbGxlcnktY2FsbGVyJywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICRjbGlja2VkID0gJCh0aGlzKTtcbiAgICBjb25zdCAkcmVzb3VyY2VJdGVtID0gJGNsaWNrZWQuY2xvc2VzdCgkY2xpY2tlZC5kYXRhKCdwYXJlbnQnKSk7XG5cbiAgICBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKFxuICAgICAgJCgkY2xpY2tlZC5kYXRhKCd0YXJnZXQnKSksXG4gICAgICAkY2xpY2tlZC5jbG9zZXN0KCRjbGlja2VkLmRhdGEoJ3BhcmVudCcpKSxcbiAgICAgICRyZXNvdXJjZUl0ZW0ucHJldigpLFxuICAgICAgJHJlc291cmNlSXRlbS5uZXh0KClcbiAgICApO1xuICB9KTtcblxuICAkZ2FsbGVyaWVzLm9uKCdjbGljaycsICcuY29udHJvbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkY2xpY2tlZCA9ICQodGhpcyk7XG4gICAgY29uc3QgJHRhcmdldCA9ICRjbGlja2VkLmRhdGEoJ3RhcmdldCcpOyAvLyBOZXh0IG9yIHByZXYgbWVkaWEgdG8gc2hvdy5cblxuICAgIGlmICghJHRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldEdhbGxlcnlEaXNwbGF5TWVkaWEoXG4gICAgICAkY2xpY2tlZC5jbG9zZXN0KCcuZ2FsbGVyeScpLFxuICAgICAgJHRhcmdldCxcbiAgICAgICR0YXJnZXQucHJldigpLFxuICAgICAgJHRhcmdldC5uZXh0KClcbiAgICApO1xuICB9KTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIC8vIFNob3cgbW9kYWwuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcubW9kYWwtY2FsbGVyJywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICQoJCh0aGlzKS5hdHRyKCdkYXRhLXRhcmdldCcpICsgJy5tb2RhbCcpLmFkZENsYXNzKCdzaG93Jyk7XG4gIH0pO1xuXG4gIC8vIENsb3NlIG1vZGFsLlxuICAkKCcuY2xvc2UtbW9kYWwnKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGNvbnN0IHRhcmdldCA9ICR0aGlzLmRhdGEoJ3RhcmdldCcpO1xuICAgIGxldCAkbW9kYWwgPSBudWxsO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgJG1vZGFsID0gJCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkbW9kYWwgPSAkdGhpcy5jbG9zZXN0KCcubW9kYWwnKTtcbiAgICB9XG5cbiAgICAkbW9kYWwucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAkKCcjcGRmLWNvbnRhaW5lcicsICRtb2RhbCkucmVtb3ZlKCk7XG4gIH0pO1xuXG4gIC8vIENsb3NlIGFsbCBtb2RhbHMgd2hlbmV2ZXIgdXNlciBjbGlja3Mgb3V0c2lkZSBtb2RhbC5cbiAgJCh3aW5kb3cpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCAkbW9kYWwgPSAkKGUudGFyZ2V0KTtcblxuICAgIGlmICgkbW9kYWwuaXMoJy5tb2RhbCcpICYmICRtb2RhbC5oYXNDbGFzcygnc2hvdycpKSB7XG4gICAgICAkbW9kYWwucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICQoJyNwZGYtY29udGFpbmVyJywgJG1vZGFsKS5yZW1vdmUoKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgRHJ1cGFsLmJlaGF2aW9ycy5tb3Rpb25zX2ZpbHRlcl9zZWxlY3QgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgY29uc3QgJGZvcm0gPSAkKCcjdmlld3MtZXhwb3NlZC1mb3JtLW1vdGlvbnMtYmxvY2stbW90aW9uLXBsYXRmb3JtJykuZmlyc3QoKTtcblxuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJ0eXBlXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnVHlwZScpLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cInN0YXR1c1wiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLXN0YXR1cycpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnU3RhdHVzJyksXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiY3JlYXRlZF95ZWFyXCJdJykub25jZSgnc2VsZWN0Mi1tb3Rpb24tY3JlYXRlZC15ZWFyJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IERydXBhbC50KCdZZWFyJyksXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBlcnJvckxvYWRpbmcgPSBEcnVwYWwudCgnVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC4nKTtcbiAgY29uc3QgbG9hZGluZ01vcmUgPSBEcnVwYWwudCgnTG9hZGluZyBtb3JlIHJlc3VsdHMnKTtcbiAgY29uc3Qgbm9SZXN1bHRzID0gRHJ1cGFsLnQoJ05vIHJlc3VsdHMgZm91bmQnKTtcbiAgY29uc3Qgc2VhcmNoaW5nID0gRHJ1cGFsLnQoJ1NlYXJjaGluZycpO1xuICBjb25zdCBtYXhpbXVtU2VsZWN0ZWQgPSBEcnVwYWwudCgnWW91IGNhbiBvbmx5IHNlbGVjdCAlbWF4aW11bSBpdGVtJyk7XG4gIGNvbnN0IGlucHV0VG9vTG9uZyA9IERydXBhbC50KCdQbGVhc2UgZGVsZXRlICVudW1iZXIgY2hhcmFjdGVyJyk7XG4gIGNvbnN0IGlucHV0VG9vU2hvcnQgPSBEcnVwYWwudCgnUGxlYXNlIGVudGVyICVudW1iZXIgb3IgbW9yZSBjaGFyYWN0ZXJzJyk7XG4gIGNvbnN0IHNlbGVjdG9yID0gJyNibG9jay1uZXdzLXBhZ2UtZmlsdGVycywgI3ZpZXdzLWV4cG9zZWQtZm9ybS1hZHJpYS1iYWxrYW4tbmV3c2ZlZWQtcGFnZSc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gRHJ1cGFsLnQoJ0NhdGVnb3J5Jyk7XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy5uZXdzX2ZpbHRlcl9zZWxlY3QgPSB7XG4gICAgYXR0YWNoOiAoY29udGV4dCwgc2V0dGluZ3MpID0+IHtcbiAgICAgICQoc2VsZWN0b3IsIGNvbnRleHQpLmFkZEJhY2soc2VsZWN0b3IpLmZpcnN0KCkuZmluZCgnc2VsZWN0Jykub25jZSgnc2VsZWN0MicpLnNlbGVjdDIoe1xuICAgICAgICAvLyBUbyBoaWRlIHNlYXJjaCBib3hcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICBlcnJvckxvYWRpbmc6ICgpID0+IGVycm9yTG9hZGluZyxcbiAgICAgICAgICBsb2FkaW5nTW9yZTogKCkgPT4gbG9hZGluZ01vcmUsXG4gICAgICAgICAgbm9SZXN1bHRzOiAoKSA9PiBub1Jlc3VsdHMsXG4gICAgICAgICAgc2VhcmNoaW5nOiAoKSA9PiBzZWFyY2hpbmcsXG4gICAgICAgICAgbWF4aW11bVNlbGVjdGVkOiAoeyBtYXhpbXVtIH0pID0+IG1heGltdW1TZWxlY3RlZC5yZXBsYWNlKCclbWF4aW11bScsIG1heGltdW0pLFxuICAgICAgICAgIGlucHV0VG9vTG9uZzogKHsgbWF4aW11bSwgaW5wdXQ6IHsgbGVuZ3RoIH0gfSkgPT4gaW5wdXRUb29Mb25nLnJlcGxhY2UoJyVudW1iZXInLCBsZW5ndGggLSBtYXhpbXVtKSxcbiAgICAgICAgICBpbnB1dFRvb1Nob3J0OiAoeyBtaW5pbXVtLCBpbnB1dDogeyBsZW5ndGggfSB9KSA9PiBpbnB1dFRvb1Nob3J0LnJlcGxhY2UoJyVudW1iZXInLCBtaW5pbXVtIC0gbGVuZ3RoKSxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdkZWJvdW5jZSc7XG5pbXBvcnQgYnJlYWtwb2ludHMsIHsga2V5cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IHBhcmFncmFwaCA9ICQoJy5wYXJhZ3JhcGgtLXR5cGUtLXBhcnRuZXJzLWxpc3QnKTtcbiAgY29uc3QgY29udGFpbmVyID0gcGFyYWdyYXBoLmZpbmQoJy52aWV3LWNvbnRlbnQnKTtcblxuICBjb250YWluZXJcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICByZXdpbmQ6IGZhbHNlLFxuICAgICAgYXV0b1dpZHRoOiB0cnVlLFxuICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgYXV0b3BsYXk6IHRydWUsXG4gICAgICBhdXRvcGxheUhvdmVyUGF1c2U6IHRydWUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIG1hcmdpbjogMTVcbiAgICAgICAgfSxcbiAgICAgICAgJzc2OCc6IHtcbiAgICAgICAgICBtYXJnaW46IDMwXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpO1xuICBjb25zdCAkYm9keSA9ICRkb2N1bWVudC5maW5kKCdib2R5Jyk7XG4gIGNvbnN0IGNhbGxlcnMgPSAkKCcucG9wdXAtY2FsbGVyJyk7XG4gIGNvbnN0IHBvcHVwcyA9ICQoJy5wb3B1cCcpO1xuICBjb25zdCBvdmVybGF5ID0gKCkgPT4gJCgnPGRpdj4nKS5hdHRyKCdpZCcsICdvdmVybGF5Jyk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlcihlKSB7XG4gICAgY29uc3QgeyBjYWxsZXIsIHBvcHVwIH0gPSBlLmRhdGE7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gaWYgY3VycmVudCBjYWxsZXIgZG9lc24ndCBzZWxlY3RlZFxuICAgIC8vIG90aGVycyBtaWdodCBiZSwgc28gbGV0J3MgY2xlYXIgdGhlbVxuICAgIGlmICghY2FsbGVyLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICBjbG9zZUFsbCgpO1xuICAgIH1cblxuICAgIGNhbGxlci50b2dnbGVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICBwb3B1cC50b2dnbGVDbGFzcygnb3BlbmVkJyk7XG4gICAgJGRvY3VtZW50LnRyaWdnZXIoJ3BvcHVwLm9wZW5lZCcsIFtwb3B1cF0pO1xuICAgICRib2R5LnRvZ2dsZUNsYXNzKCdwb3B1cC1vcGVuZWQnKTtcblxuICAgIGlmIChwb3B1cC5oYXNDbGFzcygnd2l0aC1vdmVybGF5JykpIHtcbiAgICAgIGNvbnN0IG9sID0gb3ZlcmxheSgpO1xuXG4gICAgICBwb3B1cC5iZWZvcmUoIG9sICk7XG4gICAgICBvbC5mYWRlSW4oMjUwKTtcbiAgICAgICRib2R5LmFkZENsYXNzKCdjbGlwJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VBbGwoKSB7XG4gICAgY2FsbGVycy5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICBwb3B1cHMucmVtb3ZlQ2xhc3MoJ29wZW5lZCBmdWxsJyk7XG4gICAgcG9wdXBzLnByZXYoJyNvdmVybGF5JykucmVtb3ZlKCk7XG4gICAgJGJvZHkucmVtb3ZlQ2xhc3MoJ2NsaXAnKS5yZW1vdmVDbGFzcygncG9wdXAtb3BlbmVkJyk7XG4gIH1cblxuICBjYWxsZXJzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgY2FsbGVyID0gJCh0aGlzKTtcbiAgICBjb25zdCBwb3B1cFNlbGVjdG9yID0gY2FsbGVyLmRhdGEoJ3BvcHVwJyk7XG4gICAgbGV0IHBvcHVwO1xuXG4gICAgaWYgKHBvcHVwU2VsZWN0b3IpIHtcbiAgICAgIHBvcHVwID0gJChwb3B1cFNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wdXAgPSBjYWxsZXIucGFyZW50KCkuZmluZCgnLnBvcHVwJyk7XG4gICAgfVxuXG4gICAgaWYgKHBvcHVwLmxlbmd0aCkge1xuICAgICAgY2FsbGVyLmNsaWNrKHtjYWxsZXIsIHBvcHVwfSwgaGFuZGxlcik7XG4gICAgfVxuICB9KTtcblxuICBwb3B1cHMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBjb25zdCBwb3B1cCA9ICQodGhpcyk7XG4gICAgY29uc3QgY2xvc2UgPSBwb3B1cC5maW5kKCcuY2xvc2UnKTtcbiAgICBjb25zdCBmdWxsID0gcG9wdXAuZmluZCgnLnBvcHVwLXN3aXRjaC1mdWxsJyk7XG5cbiAgICBjbG9zZS5jbGljayhjbG9zZUFsbCk7XG5cbiAgICBmdWxsLmNsaWNrKCgpID0+IGZ1bGwuY2xvc2VzdCgnLnBvcHVwJykuYWRkQ2xhc3MoJ2Z1bGwnKSk7XG4gIH0pO1xuXG4gICRib2R5LmNsaWNrKChlKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgY2xpY2sgb24gZG9jdW1lbnQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBwb3B1cCB3aW5kb3csXG4gICAgLy8gaWYgbm90IGNsb3NlIGFjdGl2ZSBwb3B1cCBhbmQgdW5zZWxlY3QgY2FsbGVyXG4gICAgaWYgKCEkKGUudGFyZ2V0KS5jbG9zZXN0KHBvcHVwcykubGVuZ3RoKSB7XG4gICAgICBjbG9zZUFsbCgpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGNhc2VMaXN0Vmlld3NCbG9ja1NlbGVjdG9yID0gJyNibG9jay12aWV3cy1ibG9jay1hcnRpY2xlLWxpc3QtcXVpY2stYmxvY2stcHJvY2Vzcy1saXN0JztcbiAgY29uc3QgdG9waWNQbGFjZWhvbGRlciA9IERydXBhbC50KCdUb3BpYycpO1xuICBjb25zdCBzdGF0dXNQbGFjZWhvbGRlciA9IERydXBhbC50KCdTdGF0dXMnKTtcblxuICBEcnVwYWwuYmVoYXZpb3JzLnByb2Nlc3Nlc19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJChjYXNlTGlzdFZpZXdzQmxvY2tTZWxlY3RvcikuZmlyc3QoKTtcblxuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJzdGF0dXNcIl0nKS5vbmNlKCdzZWxlY3QyLXN0YXR1cycpLnNlbGVjdDIoe1xuICAgICAgICAvLyBUbyBoaWRlIHNlYXJjaCBib3guXG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHN0YXR1c1BsYWNlaG9sZGVyLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cInRvcGljXCJdJykub25jZSgnc2VsZWN0Mi10b3BpYycpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0b3BpY1BsYWNlaG9sZGVyLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgYnJlYWtwb2ludHMgZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgaGFzaCBmcm9tICcuL2hhc2gnO1xuaW1wb3J0IHNjcm9sbERpcmVjdGlvbiBmcm9tICcuL3Njcm9sbC1kaXJlY3Rpb24nO1xuXG5jb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5jb25zdCAkaGVhZGVyID0gJCgnI2hlYWRlcicpO1xuY29uc3QgJHF1aWNrX2xpbmtzID0gJCgnLnF1aWNrLWxpbmtzJyk7XG5jb25zdCAkcGxhY2Vob2xkZXIgPSAkcXVpY2tfbGlua3MuZmluZCgnLmZpeGVkLXBsYWNlaG9sZGVyJyk7XG5cbmZ1bmN0aW9uIGNsaWNrSGFuZGxlcihldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIGNvbnN0IGlkID0gdGhpcy5oYXNoLnN1YnN0cmluZygxKTtcbiAgY29uc3QgJGRlc3RpbmF0aW9uRWxlbWVudCA9ICQoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSApO1xuICBjb25zdCBvZmZzZXQgPSBwYXJzZUludCgkYm9keS5jc3MoJ3BhZGRpbmctdG9wJykpICsgJGhlYWRlci5oZWlnaHQoKSArICRxdWlja19saW5rcy5oZWlnaHQoKTtcblxuICBoYXNoLnVwZGF0ZSgnIycgKyBpZCk7XG5cbiAgJCgnaHRtbCwgYm9keScpLmRlbGF5KDEwKS5hbmltYXRlKHtcbiAgICBzY3JvbGxUb3A6ICRkZXN0aW5hdGlvbkVsZW1lbnQub2Zmc2V0KCkudG9wIC0gb2Zmc2V0XG4gIH0sIDcwMCk7XG59XG5cbmZ1bmN0aW9uIGlzU3RpY2t5KCkge1xuICBpZiAoYnJlYWtwb2ludHMubWluLmJnLm1hdGNoZXMpIHtcbiAgICBzY3JvbGxIYW5kbGVyKCk7XG4gICAgJHdpbmRvdy5vbignc2Nyb2xsJywgc2Nyb2xsSGFuZGxlcik7XG4gIH0gZWxzZSB7XG4gICAgJHdpbmRvdy5vZmYoJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIpO1xuICAgICRxdWlja19saW5rcy5yZW1vdmVDbGFzcygnZml4ZWQgdXAgZG93bicpO1xuICAgICRwbGFjZWhvbGRlci5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoKSB7XG4gIGNvbnN0IHRvcCA9ICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyAkaGVhZGVyLmhlaWdodCgpICsgcGFyc2VJbnQoJGJvZHkuY3NzKCdwYWRkaW5nLXRvcCcpKTtcbiAgY29uc3Qgc2QgPSBzY3JvbGxEaXJlY3Rpb24oKTtcblxuICBpZiAoJHF1aWNrX2xpbmtzLm9mZnNldCgpLnRvcCA8PSB0b3ApIHtcbiAgICAkcGxhY2Vob2xkZXIuaGVpZ2h0KCRxdWlja19saW5rcy5oZWlnaHQoKSk7XG4gICAgJHF1aWNrX2xpbmtzLmFkZENsYXNzKCdmaXhlZCcpO1xuXG4gICAgc3dpdGNoKHNkKSB7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgICRxdWlja19saW5rcy5yZW1vdmVDbGFzcygnZG93bicpLmFkZENsYXNzKCd1cCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ3VwJykuYWRkQ2xhc3MoJ2Rvd24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgICRxdWlja19saW5rcy5yZW1vdmVDbGFzcygnZml4ZWQgdXAgZG93bicpO1xuICAgICRwbGFjZWhvbGRlci5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgaWYgKCRxdWlja19saW5rcy5sZW5ndGgpIHtcbiAgICBpc1N0aWNreSgpO1xuICAgIGJyZWFrcG9pbnRzLm1pbi5iZy5hZGRMaXN0ZW5lcihpc1N0aWNreSk7XG5cbiAgICAkcXVpY2tfbGlua3MuZmluZCgnYScpLmNsaWNrKGNsaWNrSGFuZGxlcik7XG4gIH1cbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmNvbnN0IGdldFBhZ2VZT2Zmc2V0ID0gKCkgPT4gTWF0aC5yb3VuZCh3aW5kb3cucGFnZVlPZmZzZXQpO1xubGV0IGxhc3RTY3JvbGxUb3AgPSBnZXRQYWdlWU9mZnNldCgpO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSBnZXRQYWdlWU9mZnNldCgpO1xuICBjb25zdCBkaXJlY3Rpb24gPSBjdXJyZW50U2Nyb2xsVG9wID4gbGFzdFNjcm9sbFRvcCA/ICdkb3duJyA6ICd1cCc7XG5cbiAgbGFzdFNjcm9sbFRvcCA9IGdldFBhZ2VZT2Zmc2V0KCk7XG5cbiAgcmV0dXJuIGRpcmVjdGlvbjtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgJCgnI2Jsb2NrLXZpZXdzLWJsb2NrLWZlYXR1cmVkLWNvbnRlbnQtYmxvY2stMSAudmlldy1jb250ZW50JylcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICBsb29wOiB0cnVlLFxuICAgICAgbWFyZ2luOiAxNSxcbiAgICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgICAgJzAnOiB7XG4gICAgICAgICAgaXRlbXM6IDEsXG4gICAgICAgICAgY2VudGVyOiB0cnVlLFxuICAgICAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgICAgICBzbGlkZUJ5OiAxLFxuICAgICAgICB9LFxuICAgICAgICAnNzY4Jzoge1xuICAgICAgICAgIGl0ZW1zOiAzLFxuICAgICAgICAgIGNlbnRlcjogZmFsc2UsXG4gICAgICAgICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICAgICAgICBzbGlkZUJ5OiAzLFxuICAgICAgICB9LFxuICAgICAgICAnMTI4MCc6IHtcbiAgICAgICAgICBpdGVtczogNCxcbiAgICAgICAgICBzbGlkZUJ5OiA0LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5ibG9jay1zeXN0ZW0gLnZpZXctc2VhcmNoIGlucHV0W25hbWU9XCJzZWFyY2hcIl0nKS5maXJzdCgpLmZvY3VzKCk7XG5cbiAgJChkb2N1bWVudCkub24oJ3BvcHVwLm9wZW5lZCcsIGZ1bmN0aW9uKGUsIHBvcHVwKSB7XG4gICAgaWYgKHBvcHVwLmhhc0NsYXNzKCdzZWFyY2gnKSkge1xuICAgICAgcG9wdXAuZmluZCgnLnZpZXctc2VhcmNoIGlucHV0W25hbWU9XCJzZWFyY2hcIl0nKS5maXJzdCgpLmZvY3VzKCk7XG4gICAgfVxuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgJCgnLnNlbGVjdDInKS5zZWxlY3QyKHtcbiAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogMjBcbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9ICQoJy5zbGlkZXInKS5lcSgwKTtcbiAgY29uc3Qgc2xpZGVyID0gJCgnLnNsaWRlcycsIGNvbnRhaW5lcik7XG4gIGNvbnN0IGNvbnRlbnRCb3hlcyA9IHNsaWRlci5maW5kKCcuc2xpZGVfY29udGVudCcpO1xuXG4gIGlmIChzbGlkZXIuY2hpbGRyZW4oKS5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2xpZGVyLmJ4U2xpZGVyKHtcbiAgICBhdXRvOiB0cnVlLFxuICAgIHBhdXNlOiA1MDAwLFxuICAgIGF1dG9Ib3ZlcjogdHJ1ZSxcbiAgICBjb250cm9sczogZmFsc2UsXG4gICAgcHJlbG9hZEltYWdlczogJ2FsbCcsXG4gICAgb25TbGlkZXJMb2FkOiAoKSA9PiB7XG4gICAgICBjaGVja0RpbWVuc2lvbnMoKTtcbiAgICAgIGNoZWNrRGVzY3JpcHRpb25IZWlnaHQoKTtcbiAgICB9LFxuICAgIG9uU2xpZGVyUmVzaXplOiBmdW5jdGlvbigpIHtcbiAgICAgIGNoZWNrRGltZW5zaW9ucygpO1xuICAgICAgY2hlY2tEZXNjcmlwdGlvbkhlaWdodCgpO1xuICAgIH0sXG4gICAgb25TbGlkZUJlZm9yZTogZnVuY3Rpb24oKSB7XG4gICAgICBjaGVja0RpbWVuc2lvbnMoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBjb250YWluZXIuZmluZCgnLmJ4LXZpZXdwb3J0Jykub2ZmKCd0b3VjaHN0YXJ0Jyk7XG5cbiAgc2xpZGVyLmZpbmQoJ2EnKS5ub3QoJy51c2UtYWpheCcpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKTtcbiAgfSk7XG5cbiAgJCgnLm5leHQnLCBjb250YWluZXIpLmNsaWNrKCgpID0+IHNsaWRlci5nb1RvTmV4dFNsaWRlKCkpO1xuICAkKCcucHJldicsIGNvbnRhaW5lcikuY2xpY2soKCkgPT4gc2xpZGVyLmdvVG9QcmV2U2xpZGUoKSk7XG5cbiAgZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKCkge1xuICAgIGNvbnN0IHZpZXdIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0KCk7XG4gICAgY29uc3Qgdmlld1dpZHRoID0gY29udGFpbmVyLndpZHRoKCk7XG4gICAgY29uc3Qgdmlld1JhdGlvID0gdmlld1dpZHRoIC8gdmlld0hlaWdodDtcblxuICAgIHNsaWRlci5maW5kKCcuc2xpZGUnKVxuICAgICAgLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGUgPSAkKG5vZGUpO1xuICAgICAgICBjb25zdCBtZWRpYSA9IHNsaWRlLmZpbmQoJy5zbGlkZS0tYmFja2dyb3VuZCcpLmZpbmQoJ3ZpZGVvJykuZXEoMCk7XG4gICAgICAgIGNvbnN0IG1lZGlhSGVpZ2h0ID0gbWVkaWEuaGVpZ2h0KCk7XG4gICAgICAgIGNvbnN0IG1lZGlhV2lkdGggPSBtZWRpYS53aWR0aCgpO1xuICAgICAgICBsZXQgbWVkaWFSYXRpbyA9IDA7XG5cbiAgICAgICAgaWYgKG1lZGlhLmRhdGEoJ3JhdGlvJykpIHtcbiAgICAgICAgICBtZWRpYVJhdGlvID0gbWVkaWEuZGF0YSgncmF0aW8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZWRpYVJhdGlvID0gbWVkaWFXaWR0aCAvIG1lZGlhSGVpZ2h0O1xuICAgICAgICAgIG1lZGlhLmRhdGEoJ3JhdGlvJywgbWVkaWFSYXRpbyk7XG4gICAgICAgIH1cblxuICAgICAgICBtZWRpYVJhdGlvIDwgdmlld1JhdGlvID8gc2xpZGUuYWRkQ2xhc3MoJ2FsdCcpIDogc2xpZGUucmVtb3ZlQ2xhc3MoJ2FsdCcpO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0Rlc2NyaXB0aW9uSGVpZ2h0KCkge1xuICAgIGNvbnN0ICRib3hlcyA9IHNsaWRlci5maW5kKCcuc2xpZGVfY29udGVudCcpO1xuXG4gICAgJGJveGVzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCAkYm94ID0gJCh0aGlzKTtcbiAgICAgIGNvbnN0ICRkZXNjID0gJGJveC5jaGlsZHJlbignLmRlc2NyaXB0aW9uJyk7XG4gICAgICBjb25zdCAkcCA9ICRkZXNjLmZpbmQoJ3AnKTtcblxuICAgICAgLy8gU29tZSBzbGlkZXMgbWlnaHQgbm90IGhhcyBhIGRlc2NyaXB0aW9uXG4gICAgICAvLyBzbyBsZXQncyBjaGVjayBpdFxuICAgICAgaWYgKCRwLmxlbmd0aCkge1xuICAgICAgICAvLyBDb3VsZCBoYXBwZW5kIHRoYXQgdmlzaWJsZSBoZWlnaHQgb2YgLmRlc2NyaXB0aW9uIGVsZW1lbnQgaXMgZXZlblxuICAgICAgICAvLyBzbWFsbGVyIHRoYW4gbGluZS1oZWlnaHQgb2YgcCBlbGVtZW50IHdoaWNoIHdpbGwgY2F1c2UgaXQgdG8gYmUgc2hhdmVkXG4gICAgICAgIC8vIHRvIDAgbGluZXMuIFNvIHdlIHBpY2sgd2hhdCdzIGJpZ2dlciBmcm9tIHRoZSBsaW5lLWhlaWdodCBhbmQgbWF4SGVpZ2h0XG4gICAgICAgICRwLnNoYXZlKE1hdGgubWF4KCRkZXNjLmhlaWdodCgpLCBwYXJzZUZsb2F0KCRwLmNzcygnbGluZS1oZWlnaHQnKSkpKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IHN0aWNreUVsZW1lbnRzID0gJChcIi5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKTtcbiAgY29uc3Qgc3RpY2t5QlAgPSB3aW5kb3cubWF0Y2hNZWRpYShcIihtaW4td2lkdGg6IDEwMjRweClcIik7IC8vIHN0aWNrIG9ubHkgaWYgc2NyZWVuIHdpZHRoID49IDEwMjRcblxuICAkKFwiLmJ1bGxldC1saXN0IGxpOmZpcnN0LW9mLXR5cGUgLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC12ZXJ0XCIpXG4gICAgLmFkZENsYXNzKFwiY3VycmVudFwiKTtcblxuICBjYW5TdGljaygpO1xuICBzdGlja3lCUC5hZGRMaXN0ZW5lcihjYW5TdGljayk7XG5cbiAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbigpIHtcbiAgICBpZiAoc3RpY2t5QlAubWF0Y2hlcykge1xuICAgICAgbGV0IGVsZW0gPSBhYm92ZUJvcmRlcigkKFwiLnN0YXRpYy1jb250ZW50XCIpKTtcblxuICAgICAgaWYgKGVsZW0pIHsgLy8gaWYgYW55IGVsZW1lbnQgYXQgdGhlIHRvcFxuICAgICAgICB0b2dnbGVTdGlja3koIC8vIG1ha2UgaXQgdmlzaWJsZSBhbmQgaGlkZSBvdGhlcnNcbiAgICAgICAgIC8vIGVsZW0uY2xvc2VzdChcImxpXCIpLmZpbmQoXCIucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIikuZmlyc3QoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgZnVuY3Rpb24gY2FuU3RpY2soKSB7XG4gICAgaWYgKHN0aWNreUJQLm1hdGNoZXMpIHtcbiAgICAgIG1ha2Vfc3RpY2t5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0aWNreUVsZW1lbnRzLnRyaWdnZXIoXCJzdGlja3lfa2l0OmRldGFjaFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsYXN0IGVsZW1lbnQgd2l0aCBwb3NpdGlvbiBhYm92ZSBib3JkZXJcbiAgICpcbiAgICogQHBhcmFtIGpRdWVyeSBlbGVtZW50c1xuICAgKiBAcGFyYW0gaW50IGJvcmRlclxuICAgKlxuICAgKiBAcmV0dXJuIGpRdWVyeVxuICAgKi9cbiAgZnVuY3Rpb24gYWJvdmVCb3JkZXIoZWxlbWVudHMsIGJvcmRlciA9IDIxMCkge1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgZWxlbWVudHMuZWFjaChmdW5jdGlvbihrZXksIGVsZW0pIHtcbiAgICAgIGxldCB0b3AgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgaWYgKHRvcCA8PSBib3JkZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gZWxlbTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQgPyAkKHJlc3VsdCkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGVsZW0gYW5kIGhpZGVzIG90aGVyIHN0aWNreSBlbGVtZW50c1xuICAgKlxuICAgKiBCeSBkZWZhdWx0IGFsbCBzdGlja3kgZWxlbWVudHMgYXJlIGhpZGRlbi5cbiAgICogQ2xhc3MgJy5jdXJyZW50JyBtYWtlcyBzdGlja3kgZWxlbWVudCB2aXNpYmxlLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9nZ2xlU3RpY2t5KGVsZW0pIHtcbiAgICBpZiAoIWVsZW0uaGFzQ2xhc3MoXCJjdXJyZW50XCIpKSB7XG4gICAgICAkKFwibGkgLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC12ZXJ0LmN1cnJlbnRcIikucmVtb3ZlQ2xhc3MoXCJjdXJyZW50XCIpO1xuICAgICAgZWxlbS5hZGRDbGFzcyhcImN1cnJlbnRcIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFrZV9zdGlja3koKSB7XG4gICAgJChcIi5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtYnVsbGV0LWxpc3QgLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC12ZXJ0XCIpXG4gICAgICAuc3RpY2tfaW5fcGFyZW50KHtcbiAgICAgICAgcGFyZW50OiBcIi5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtYnVsbGV0LWxpc3RcIixcbiAgICAgICAgb2Zmc2V0X3RvcDogMjAwLFxuICAgICAgICBzcGFjZXI6IGZhbHNlXG4gICAgICB9KTtcbiAgICAkKFwibGkgLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC12ZXJ0XCIpLnN0aWNrX2luX3BhcmVudCh7XG4gICAgICAvLyBwYXJlbnQ6IFwibGlcIixcbiAgICAgIHBhcmVudDogXCJ1bFwiLC8vIFwiLnBhcmFncmFwaC0tdHlwZS0tY3VzdG9tLWJ1bGxldC1saXN0XCIsXG4gICAgICBvZmZzZXRfdG9wOiAyMDAsXG4gICAgICBzcGFjZXI6IGZhbHNlLFxuICAgICAgcmVjYWxjX2V2ZXJ5OiAxMFxuICAgIH0pO1xuICB9XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcuY3VzdG9tLXRhYnMnKS5vbignY2xpY2snLCAnLmN1c3RvbS10YWJzLS1uYXYtaXRlbScsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGNvbnN0ICRwYXJlbnQgPSAkdGhpcy5jbG9zZXN0KCcuY3VzdG9tLXRhYnMnKTtcblxuICAgIC8vIFNldCBhY3RpdmUgdGFiLlxuICAgIGlmICgkcGFyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICR0aGlzLmRhdGEoJ3RhcmdldCcpO1xuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICQoJy5jdXN0b20tdGFicy0taXRlbScsICRwYXJlbnQpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgJChgIyR7dGFyZ2V0fWAsICRwYXJlbnQpLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgICAgICAvLyBTZXQgYWN0aXZlIG5hdiBpdGVtLlxuICAgICAgICBjb25zdCAkcGFyZW50TmF2ID0gJHRoaXMuY2xvc2VzdCgnLmN1c3RvbS10YWJzLS1uYXYnKTtcblxuICAgICAgICBpZiAoJHBhcmVudE5hdi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgJCgnLmN1c3RvbS10YWJzLS1uYXYtaXRlbScsICRwYXJlbnROYXYpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgICR0aGlzLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICQoJy50YWJiZWQnKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgIGNvbnN0ICRtb2JpbGVfY29udGFpbmVyID0gJCgnLm1vYmlsZScsIHRoaXMpO1xuICAgIGNvbnN0ICRtb2JpbGVfc3dpdGNoZXMgPSAkKCcudGFiX19zd2l0Y2gnLCAkbW9iaWxlX2NvbnRhaW5lcik7XG4gICAgY29uc3QgJG5vcm1hbF9jb250YWluZXIgPSAkKCcubm9ybWFsJywgdGhpcyk7XG4gICAgY29uc3QgJG5vcm1hbF9zd2l0Y2hlcyA9ICQoJy50YWJfX3N3aXRjaCcsICRub3JtYWxfY29udGFpbmVyKTtcbiAgICBjb25zdCAkdGFicyA9ICQoJy50YWInLCB0aGlzKTtcblxuICAgICRub3JtYWxfc3dpdGNoZXMuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGNvbnN0ICRzd2l0Y2ggPSAkKHRoaXMpO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAkdGFic1xuICAgICAgICAuYWRkKCRtb2JpbGVfc3dpdGNoZXMpLmFkZCgkbm9ybWFsX3N3aXRjaGVzKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgIC5maWx0ZXIoYFtkYXRhLXRhYi1pZD0keyAkc3dpdGNoLmRhdGEoJ3RhYi1pZCcpIH1dYClcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgICAgJG5vcm1hbF9jb250YWluZXIuYWRkQ2xhc3MoJ2hpZGUnKTtcbiAgICB9KTtcblxuICAgICRtb2JpbGVfY29udGFpbmVyLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgJG5vcm1hbF9jb250YWluZXIucmVtb3ZlQ2xhc3MoJ2hpZGUnKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5jb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuY29uc3QgJGRvY3VtZW50ID0gJChkb2N1bWVudCk7XG5jb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcbmNvbnN0ICRoZWFkZXIgPSAkKCcjaGVhZGVyJyk7XG5jb25zdCAkcXVpY2tMaW5rcyA9ICQoJy5xdWljay1saW5rcycpO1xuXG5jb25zdCAkcGFyYWdyYXBoID0gJCgnLnBhcmFncmFwaC0tdHlwZS0tdGltZWxpbmUtaW5mb3JtYXRpb24nKTtcbmNvbnN0ICRzaWRlYmFyID0gJHBhcmFncmFwaC5maW5kKCcuc2lkZWJhcicpO1xuY29uc3QgJGNvbnRlbnQgPSAkcGFyYWdyYXBoLmZpbmQoJy5jb250ZW50Jyk7XG5jb25zdCAkdGl0bGVzTGlzdCA9ICRwYXJhZ3JhcGguZmluZCgnLnRpdGxlcy1saXN0Jyk7XG5jb25zdCAkdGl0bGVzID0gJHBhcmFncmFwaC5maW5kKCcudGl0bGUnKTtcbmNvbnN0ICRwYW5lbHMgPSAkcGFyYWdyYXBoLmZpbmQoJy5wYW5lbCcpO1xuY29uc3QgJHN3aXRjaGVzID0gJHBhcmFncmFwaC5maW5kKCcucGFuZWwtc3dpdGNoJyk7XG5jb25zdCAkY292ZXJzID0gJHBhcmFncmFwaC5maW5kKCcudGl0bGUtY292ZXInKTtcblxuY29uc3Qgc3BhY2VyID0gMzA7XG5sZXQgaXNTdHVjayA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzaG93VGl0bGVzTGlzdCgpIHtcbiAgY29uc3QgJGNvdmVyID0gJCh0aGlzKTtcbiAgY29uc3QgJHRpdGxlID0gJGNvdmVyLnBhcmVudCgpO1xuICBjb25zdCB0b3AgPSAkdGl0bGUucG9zaXRpb24oKS50b3AgKyAkdGl0bGUuaGVpZ2h0KCk7XG5cbiAgJGNvdmVyXG4gICAgLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAkdGl0bGVzTGlzdFxuICAgIC5hZGRDbGFzcygnc2hvdycpXG4gICAgLmNzcyh7IHRvcCB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZVRpdGxlc0xpc3QoKSB7XG4gICR0aXRsZXNMaXN0XG4gICAgLnJlbW92ZUNsYXNzKCdzaG93JylcbiAgICAucmVtb3ZlQXR0cignc3R5bGUnKTtcblxuICAkY292ZXJzXG4gICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbn1cblxuZnVuY3Rpb24gc2V0QWN0aXZlVGl0bGUoa2V5KSB7XG4gICR0aXRsZXNcbiAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgLmZpbHRlcigoaSkgPT4gJHRpdGxlcy5lcShpKS5kYXRhKCd0aW1lbGluZScpID09IGtleSlcbiAgICAgIC5hZGRDbGFzcygnYWN0aXZlJyk7XG59XG5cbmZ1bmN0aW9uIHNldEFjdGl2ZVBhbmVsKGlkKSB7XG4gICRjb250ZW50XG4gICAgLmhlaWdodCgkY29udGVudC5oZWlnaHQoKSk7XG5cbiAgJHBhbmVsc1xuICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAuZmlsdGVyKGlkKVxuICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuXG4gICRjb250ZW50XG4gICAgLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUGFuZWwoKSB7XG4gIGlmIChpc1N0dWNrKSB7XG4gICAgJHdpbmRvdy5zY3JvbGxUb3AoJGNvbnRlbnQub2Zmc2V0KCkudG9wIC0gZ2V0T2Zmc2V0KCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN3aXRjaFBhbmVsKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgY29uc3QgJHN3aXRjaGVyID0gJCh0aGlzKTtcbiAgY29uc3QgaWQgPSAkc3dpdGNoZXIuYXR0cignaHJlZicpO1xuICBjb25zdCBrZXkgPSBpZC5yZXBsYWNlKCcjdGltZWxpbmUtJywgJycpO1xuXG4gIGhpZGVUaXRsZXNMaXN0KCk7XG4gIHNldEFjdGl2ZVRpdGxlKGtleSk7XG4gIHNldEFjdGl2ZVBhbmVsKGlkKTtcbiAgc2Nyb2xsVG9QYW5lbCgpO1xuICByZWNhbGNTdGlja3lLaXQoKTtcbn1cblxuZnVuY3Rpb24gaXNTdGlja3koKSB7XG4gIHJldHVybiBicmVha3BvaW50cy5taW4uYmcubWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gaW5pdFN0aWNreUtpdCgpIHtcbiAgY29uc3Qgb2Zmc2V0X3RvcCA9IGdldE9mZnNldCgpO1xuXG4gICRzaWRlYmFyXG4gICAgLm9mZignc3RpY2t5X2tpdDpzdGljayBzdGlja3lfa2l0OnVuc3RpY2snKVxuICAgIC50cmlnZ2VyKCdzdGlja3lfa2l0OmRldGFjaCcpXG4gICAgLnN0aWNrX2luX3BhcmVudCh7IG9mZnNldF90b3AgfSlcbiAgICAub24oJ3N0aWNreV9raXQ6c3RpY2snLCAoKSA9PiB7IGlzU3R1Y2sgPSB0cnVlIH0pXG4gICAgLm9uKCdzdGlja3lfa2l0OnVuc3RpY2snLCAoKSA9PiB7IGlzU3R1Y2sgPSBmYWxzZSB9KTtcbn1cblxuZnVuY3Rpb24gZGVzdHJveVN0aWNreUtpdCgpIHtcbiAgJHNpZGViYXJcbiAgICAub2ZmKCdzdGlja3lfa2l0OnN0aWNrIHN0aWNreV9raXQ6dW5zdGljaycpXG4gICAgLnRyaWdnZXIoJ3N0aWNreV9raXQ6ZGV0YWNoJyk7XG5cbiAgaXNTdHVjayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRPZmZzZXQoKSB7XG4gIHJldHVybiBEcnVwYWwuZGlzcGxhY2UuY2FsY3VsYXRlT2Zmc2V0KCd0b3AnKSArICRoZWFkZXIuaGVpZ2h0KCkgKyAoJHF1aWNrTGlua3MuaGVpZ2h0KCkgfHwgMCkgKyBzcGFjZXI7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0aWNreUtpdCgpIHtcbiAgaWYgKGlzU3R1Y2spIHtcbiAgICBpbml0U3RpY2t5S2l0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjYWxjU3RpY2t5S2l0KCkge1xuICAkc2lkZWJhclxuICAgIC50cmlnZ2VyKCdzdGlja3lfa2l0OnJlY2FsYycpO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3RpY2t5S2l0KCkge1xuICBpZiAoaXNTdGlja3koKSkge1xuICAgIGluaXRTdGlja3lLaXQoKTtcblxuICAgICRkb2N1bWVudC5vbignZHJ1cGFsVmlld3BvcnRPZmZzZXRDaGFuZ2UnLCB1cGRhdGVTdGlja3lLaXQpO1xuICB9IGVsc2Uge1xuICAgIGRlc3Ryb3lTdGlja3lLaXQoKTtcblxuICAgICRkb2N1bWVudC5vZmYoJ2RydXBhbFZpZXdwb3J0T2Zmc2V0Q2hhbmdlJywgdXBkYXRlU3RpY2t5S2l0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIHRlc3RTdGlja3lLaXQoKTtcbiAgYnJlYWtwb2ludHMubWluLmJnLmFkZExpc3RlbmVyKHRlc3RTdGlja3lLaXQpO1xuXG4gICRjb3ZlcnMuY2xpY2soc2hvd1RpdGxlc0xpc3QpO1xuICAkc3dpdGNoZXMuY2xpY2soc3dpdGNoUGFuZWwpO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmIChpc1N0aWNreSgpICYmICFpc1N0dWNrKSB7XG4gICAgICBpbml0U3RpY2t5S2l0KCk7XG4gICAgfVxuICB9LCAxNTApO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBsaW5lSGVpZ2h0IGZyb20gJy4vbGluZUhlaWdodCc7XG5pbXBvcnQgYnJlYWtwb2ludHMsIHsga2V5cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVCeUxpbmVzKCRlbGVtZW50KSB7XG4gIGNvbnN0IGxoID0gbGluZUhlaWdodCgkZWxlbWVudCk7XG4gIGNvbnN0IGxpbmVzID0gcGFyc2VJbnQoJGVsZW1lbnQuZGF0YSgndHJ1bmNhdGVMaW5lcycpKSB8fCA0O1xuXG4gICRlbGVtZW50LnNoYXZlKGxoICogbGluZXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZUJ5SGVpZ2h0KCRlbGVtZW50KSB7XG4gIGNvbnN0ICRjb250YWluZXIgPSAkZWxlbWVudC5jaGlsZHJlbignLnRydW5jYXRlLWNvbnRhaW5lcicpO1xuICBjb25zdCBtYXhIZWlnaHQgPSAkZWxlbWVudC5oZWlnaHQoKTtcbiAgY29uc3QgbWluSGVpZ2h0ID0gbGluZUhlaWdodCgkZWxlbWVudCk7XG5cbiAgJGNvbnRhaW5lci5zaGF2ZShNYXRoLm1heChtaW5IZWlnaHQsIG1heEhlaWdodCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMudHJ1bmNhdGVCeUhlaWdodCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICAkKCcudHJ1bmNhdGUtYnktaGVpZ2h0JywgY29udGV4dCkub25jZSgndHJ1bmNhdGUnKVxuICAgICAgICAud3JhcElubmVyKCc8ZGl2IGNsYXNzPVwidHJ1bmNhdGUtY29udGFpbmVyXCI+JylcbiAgICAgICAgLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgICB0cnVuY2F0ZUJ5SGVpZ2h0KCQobm9kZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy50cnVuY2F0ZUJ5TGluZXMgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJCgnLnRydW5jYXRlLWJ5LWxpbmVzJywgY29udGV4dCkub25jZSgndHJ1bmNhdGUnKVxuICAgICAgICAuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgICAgIHRydW5jYXRlQnlMaW5lcygkKG5vZGUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIE9iamVjdC52YWx1ZXMoYnJlYWtwb2ludHMubWluKS5mb3JFYWNoKChtcSkgPT4ge1xuICAgIG1xLmFkZExpc3RlbmVyKCgpID0+IHtcbiAgICAgICQoJy50cnVuY2F0ZS1ieS1oZWlnaHQnKS5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgIHRydW5jYXRlQnlIZWlnaHQoJChub2RlKSk7XG4gICAgICB9KTtcblxuICAgICAgJCgnLnRydW5jYXRlLWJ5LWxpbmVzJykuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgICB0cnVuY2F0ZUJ5TGluZXMoJChub2RlKSk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9KTtcbn1cbiJdfQ=="}