{"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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Q2pCLFFBQUEsZ0JBQWdCLENBQUMscUJBQUUsSUFBRixDQUFELENBQWhCO0FBQ0QsT0FKSDtBQUtEO0FBUGlDLEdBQXBDO0FBVUEsRUFBQSxNQUFNLENBQUMsU0FBUCxDQUFpQixlQUFqQixHQUFtQztBQUNqQyxJQUFBLE1BQU0sRUFBRSxnQkFBUyxPQUFULEVBQWtCLFFBQWxCLEVBQTRCO0FBQ2xDLDJCQUFFLG9CQUFGLEVBQXdCLE9BQXhCLEVBQWlDLElBQWpDLENBQXNDLFVBQXRDLEVBQ0csSUFESCxDQUNRLFVBQUMsQ0FBRCxFQUFJLElBQUosRUFBYTtBQUNqQixRQUFBLGVBQWUsQ0FBQyxxQkFBRSxJQUFGLENBQUQsQ0FBZjtBQUNELE9BSEg7QUFJRDtBQU5nQyxHQUFuQztBQVNBLEVBQUEsTUFBTSxDQUFDLE1BQVAsQ0FBYyxxQkFBWSxHQUExQixFQUErQixPQUEvQixDQUF1QyxVQUFDLEVBQUQsRUFBUTtBQUM3QyxJQUFBLEVBQUUsQ0FBQyxXQUFILENBQWUsWUFBTTtBQUNuQiwyQkFBRSxxQkFBRixFQUF5QixJQUF6QixDQUE4QixVQUFDLENBQUQsRUFBSSxJQUFKLEVBQWE7QUFDekMsUUFBQSxnQkFBZ0IsQ0FBQyxxQkFBRSxJQUFGLENBQUQsQ0FBaEI7QUFDRCxPQUZEO0FBSUEsMkJBQUUsb0JBQUYsRUFBd0IsSUFBeEIsQ0FBNkIsVUFBQyxDQUFELEVBQUksSUFBSixFQUFhO0FBQ3hDLFFBQUEsZUFBZSxDQUFDLHFCQUFFLElBQUYsQ0FBRCxDQUFmO0FBQ0QsT0FGRDtBQUdELEtBUkQ7QUFTRCxHQVZEO0FBV0QsQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkR09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJyAmJiAhISRHT1BTLmY7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICRHT1BTLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxzKGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogRkFJTFNfT05fUFJJTUlUSVZFUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gJEdPUFMuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHRydW5jYXRlIGZyb20gJy4vbW9kdWxlcy90cnVuY2F0ZSc7XG5pbXBvcnQgcG9wdXAgZnJvbSAnLi9tb2R1bGVzL3BvcHVwJztcbmltcG9ydCBzbGlkZXIgZnJvbSAnLi9tb2R1bGVzL3NsaWRlcic7XG5pbXBvcnQgbW9kYWwgZnJvbSAnLi9tb2R1bGVzL21vZGFsJztcbmltcG9ydCBtb2RhbEdhbGxlcnkgZnJvbSAnLi9tb2R1bGVzL21vZGFsLWdhbGxlcnknO1xuaW1wb3J0IG1lZGlhUmVzb3VyY2VzUGxheVZpZGVvQnRuIGZyb20gJy4vbW9kdWxlcy9tZWRpYS1yZXNvdXJjZXMtcGxheS12aWRlbyc7XG5pbXBvcnQgYWNjb3JkaW9uIGZyb20gJy4vbW9kdWxlcy9hY2NvcmRpb24nO1xuaW1wb3J0IG1lZGlhUmVzb3VyY2VTZWxlY3QgZnJvbSAnLi9tb2R1bGVzL21lZGlhLXJlc291cmNlLXNlbGVjdCc7XG5pbXBvcnQgbW9iaWxlX21lbnUgZnJvbSAnLi9tb2R1bGVzL21vYmlsZV9tZW51JztcbmltcG9ydCBjZXJ0aWZpZWQgZnJvbSAnLi9tb2R1bGVzL2NlcnRpZmllZCc7XG5pbXBvcnQgaW5fdmlldyBmcm9tICcuL21vZHVsZXMvaW4tdmlldyc7XG5pbXBvcnQgbmV3c0ZpbHRlckNhdGVnb3J5RGQgZnJvbSAnLi9tb2R1bGVzL25ld3MtZmlsdGVyLWNhdGVnb3J5LWRkJztcbmltcG9ydCBzdGlja3kgZnJvbSAnLi9tb2R1bGVzL3N0aWNreSc7XG5pbXBvcnQgYjcgZnJvbSAnLi9tb2R1bGVzL2I3JztcbmltcG9ydCBjb250YWN0Rm9ybSBmcm9tICcuL21vZHVsZXMvY29udGFjdC1mb3JtJztcbmltcG9ydCBxdWlja19saW5rcyBmcm9tICcuL21vZHVsZXMvcXVpY2tfbGlua3MnO1xuaW1wb3J0IG1hcCBmcm9tICcuL21vZHVsZXMvbWFwJztcbmltcG9ydCBwYXJ0bmVycyBmcm9tICcuL21vZHVsZXMvcGFydG5lcnMnO1xuaW1wb3J0IHRpbWVsaW5lIGZyb20gJy4vbW9kdWxlcy90aW1lbGluZSc7XG5pbXBvcnQgY2FzZUZpbHRlciBmcm9tICcuL21vZHVsZXMvY2FzZS1maWx0ZXInO1xuaW1wb3J0IHByb2Nlc3NGaWx0ZXIgZnJvbSAnLi9tb2R1bGVzL3Byb2Nlc3MtZmlsdGVyJztcbmltcG9ydCBkb2N1bWVudENlbnRyZUZpbHRlciBmcm9tICcuL21vZHVsZXMvZG9jdW1lbnQtY2VudHJlLWZpbHRlcic7XG5pbXBvcnQgdGFicyBmcm9tICcuL21vZHVsZXMvdGFicyc7XG5pbXBvcnQgc2VhcmNoQXV0b0ZvY3VzIGZyb20gJy4vbW9kdWxlcy9zZWFyY2hBdXRvRm9jdXMnO1xuaW1wb3J0IGZhZGVJblVwbG9nbyBmcm9tICcuL21vZHVsZXMvZmFkZUluVXAtbG9nbyc7XG5pbXBvcnQgc2VsZWN0MiBmcm9tICcuL21vZHVsZXMvc2VsZWN0Mic7XG5pbXBvcnQgZ3RtIGZyb20gJy4vbW9kdWxlcy9ndG0nO1xuaW1wb3J0IHNlYXJjaEZlYXR1cmVkQ29udGVudCBmcm9tICcuL21vZHVsZXMvc2VhcmNoLWZlYXR1cmVkLWNvbnRlbnQuanMnO1xuaW1wb3J0IG1vdGlvbnNfZmlsdGVyIGZyb20gJy4vbW9kdWxlcy9tb3Rpb25zLWZpbHRlcic7XG5cbltcbiAgdHJ1bmNhdGUsIC8vIERydXBhbCBCZWhhdmlvclxuXG4gIHBvcHVwLFxuICBzbGlkZXIsXG4gIG1vZGFsLFxuICBtb2RhbEdhbGxlcnksXG4gIG1lZGlhUmVzb3VyY2VzUGxheVZpZGVvQnRuLFxuICBhY2NvcmRpb24sXG4gIG1lZGlhUmVzb3VyY2VTZWxlY3QsXG4gIG1vYmlsZV9tZW51LFxuICBjZXJ0aWZpZWQsXG4gIGluX3ZpZXcsXG4gIG5ld3NGaWx0ZXJDYXRlZ29yeURkLFxuICBzdGlja3ksXG4gIGI3LFxuICBjb250YWN0Rm9ybSxcbiAgcXVpY2tfbGlua3MsXG4gIG1hcCxcbiAgcGFydG5lcnMsXG4gIHRpbWVsaW5lLFxuICBjYXNlRmlsdGVyLFxuICBwcm9jZXNzRmlsdGVyLFxuICBkb2N1bWVudENlbnRyZUZpbHRlcixcbiAgdGFicyxcbiAgc2VhcmNoQXV0b0ZvY3VzLFxuICBmYWRlSW5VcGxvZ28sXG4gIHNlbGVjdDIsXG4gIGd0bSxcbiAgc2VhcmNoRmVhdHVyZWRDb250ZW50LFxuICBtb3Rpb25zX2ZpbHRlclxuXS5mb3JFYWNoKFxuICBtb2R1bGUgPT4geyBtb2R1bGUoKTsgfVxuKTtcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgJHdpbmRvdyA9ICQod2luZG93KTtcblxuICAkKCcubWVudS0tbWVkaWEtcmVzb3VyY2VzLW1lbnUnKS5vbignY2xpY2snLCAnLm5hdi10YWJzLXRvZ2dsZXInLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkdGhpcy5kYXRhKCd0YXJnZXQnKTtcblxuICAgICQoJHRhcmdldCkudG9nZ2xlQ2xhc3MoJ2Rpc3BsYXktbm9uZScpO1xuICB9KTtcblxuICAkKCcuYWNjb3JkaW9uLWxpc3QnKS5vbignY2xpY2snLCAnLmxpLWNvbnRlbnQtdG9nZ2xlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJHRhcmdldCA9ICR0aGlzLmNsb3Nlc3QoJ2xpJykuZmluZCgnLmxpLWNvbnRlbnQnKTtcbiAgICBjb25zdCBvZmZzZXRUb3AgPSAkdGhpcy5vZmZzZXQoKS50b3A7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gJHdpbmRvdy5zY3JvbGxUb3AoKTtcblxuICAgIC8vIElmIHRhcmdldCBpcyBub3QgYWxyZWFkeSBleHBhbmRlZC5cbiAgICBpZiAoISR0aGlzLmhhc0NsYXNzKCd1cCcpKSB7XG4gICAgICAvLyBDb2xsYXBzZSBvdGhlcnMgLmxpLXRleHQgaW4gYWNjb3JkaW9uLlxuICAgICAgY29uc3QgJGFjY29yZGlvbiA9ICR0aGlzLmNsb3Nlc3QoJy5hY2NvcmRpb24tbGlzdCcpO1xuXG4gICAgICAkKCcubGktY29udGVudCcsICRhY2NvcmRpb24pLmhpZGUoKTtcbiAgICAgICQoJy5saS1jb250ZW50LXRvZ2dsZXInLCAkYWNjb3JkaW9uKS5yZW1vdmVDbGFzcygndXAnKTtcbiAgICB9XG5cbiAgICBpZiAoJHRhcmdldC5sZW5ndGggPiAwKSB7XG4gICAgICAkdGFyZ2V0LnRvZ2dsZSgpO1xuICAgICAgJHRoaXMudG9nZ2xlQ2xhc3MoJ3VwJyk7XG4gICAgICBjb25zdCAkdG8gPSAkdGFyZ2V0LmlzKCc6dmlzaWJsZScpID8gJHRhcmdldCA6ICR0aGlzO1xuXG4gICAgICAkd2luZG93LnNjcm9sbFRvcCgkdG8ub2Zmc2V0KCkudG9wIC0gKG9mZnNldFRvcCAtIHNjcm9sbFRvcCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5hY2NvcmRpb24gLmFjY29yZGlvbi10b2dnbGUnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICAkKCcuYWNjb3JkaW9uJykub24oJ2NsaWNrJywgJy5hY2NvcmRpb24taXRlbS10cmlnZ2VyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCAkY3VycmVudEl0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QoJy5hY2NvcmRpb24taXRlbScpO1xuICAgIGNvbnN0ICRhbGxJdGVtcyA9ICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbicpLmZpbmQoJy5hY2NvcmRpb24taXRlbScpO1xuXG4gICAgaWYgKCRjdXJyZW50SXRlbS5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICRjdXJyZW50SXRlbS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICB9IGVsc2Uge1xuICAgICAgJGFsbEl0ZW1zLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICRjdXJyZW50SXRlbS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG4vLyAxMDAwbXMgPSAxc1xuY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0gMTAwMDtcbmZ1bmN0aW9uIENhcm91c2VsKCRlbCkge1xuICBjb25zdCAkdGhpcyA9IHRoaXM7XG5cbiAgJHRoaXMubW9kdWxlID0gJGVsO1xuXG4gICR0aGlzLl9taW5TY2FsZSA9IDAuNjtcbiAgJHRoaXMuX21pbk9mZnNldCA9IDAuNTtcbiAgJHRoaXMuX2JyZWFrcG9pbnRzID0ge1xuICAgIHBoOiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogNDgwcHgpJyksXG4gICAgbWQ6IHdpbmRvdy5tYXRjaE1lZGlhKCcobWluLXdpZHRoOiA3NjhweCknKSxcbiAgICBiZzogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEwMjRweCknKSxcbiAgICBsZzogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEyODBweCknKSxcbiAgICB4bDogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDE0NDBweCknKSxcbiAgfTtcbiAgJHRoaXMuc2V0dGluZ3MgPSB7XG4gICAgYXV0bzoge1xuICAgICAgcGxheTogdHJ1ZSxcbiAgICAgIHRpbWU6IDUwMDAsXG4gICAgICBpbnRlcnZhbDogbnVsbCxcbiAgICB9XG4gIH07XG5cbiAgJHRoaXMuZGF0YSA9IFtdO1xuXG4gICR0aGlzLmluaXRBdXRvUGxheSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLnBsYXkpIHtcbiAgICAgICR0aGlzLnN0YXJ0QXV0bygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5zdG9wQXV0bygpO1xuICAgIH1cblxuICAgICR0aGlzLm1vZHVsZS5ob3ZlcihmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7XG4gICAgICAgICR0aGlzLnN0b3BBdXRvKCk7XG4gICAgICAgICR0aGlzLnNldHRpbmdzLmF1dG8uYXV0b1BhdXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoJHRoaXMuc2V0dGluZ3MuYXV0by5hdXRvUGF1c2VkKSB7XG4gICAgICAgICR0aGlzLnN0YXJ0QXV0bygpO1xuICAgICAgICAkdGhpcy5zZXR0aW5ncy5hdXRvLmF1dG9QYXVzZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCh3aW5kb3cpXG4gICAgICAuZm9jdXMoZnVuY3Rpb24oKSB7ICR0aGlzLnN0YXJ0QXV0bygpOyB9KVxuICAgICAgLmJsdXIoZnVuY3Rpb24oKSB7ICR0aGlzLnN0b3BBdXRvKCk7IH0pO1xuICB9O1xuXG4gICR0aGlzLnN0YXJ0QXV0byA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7IHJldHVybjsgfVxuXG4gICAgJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgJHRoaXMuZ29Ub05leHRDYXJkKCk7XG4gICAgfSwgJHRoaXMuc2V0dGluZ3MuYXV0by50aW1lKTtcbiAgfTtcblxuICAkdGhpcy5zdG9wQXV0byA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCkgeyByZXR1cm47IH1cblxuICAgIGNsZWFySW50ZXJ2YWwoJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCk7XG4gICAgJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCA9IG51bGw7XG4gIH07XG5cbiAgJHRoaXMuc2V0RWxlbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5jb250YWluZXIgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWNhcmRzJyk7XG4gICAgJHRoaXMuY2FyZHNXcmFwcGVyID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1jYXJkcycpO1xuICAgICR0aGlzLmNhcmRzID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1jYXJkJyk7XG4gICAgJHRoaXMuYm9keXNXcmFwcGVyID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1ib2R5cycpO1xuICAgICR0aGlzLmJvZHlzID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1ib2R5Jyk7XG5cbiAgICAkdGhpcy5jYXJkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBjYXJkKSB7XG4gICAgICBjYXJkLm9yaWdpbmFsSUQgPSBpbmRleDtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5nZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgJHRoaXMuZGF0YSA9ICR0aGlzLmNhcmRzLm1hcChmdW5jdGlvbihpbmRleCwgY2FyZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ29yZGVyJzogaW5kZXggLSAkdGhpcy5zaWRlUXR5LFxuICAgICAgICAnd2lkdGgnOiAkKGNhcmQpLndpZHRoKClcbiAgICAgIH07XG4gICAgfSkudG9BcnJheSgpO1xuICB9O1xuXG4gICR0aGlzLnNldENvbnRhaW5lckhlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGhlaWdodHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCkubWFwKGNhcmQgPT4gJChjYXJkKS5oZWlnaHQoKSk7XG4gICAgJHRoaXMuY29udGFpbmVyLmhlaWdodChNYXRoLm1heCguLi5oZWlnaHRzKSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0VmFycyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRXaWR0aCA9ICR0aGlzLmNhcmRzLmZpcnN0KCkub3V0ZXJXaWR0aCgpO1xuICAgICR0aGlzLnNjYWxlU3RlcCA9ICgxIC0gJHRoaXMuX21pblNjYWxlKSAvICR0aGlzLnNpZGVRdHk7XG4gICAgJHRoaXMuYXZhaWxhYmxlU2lkZVNwYWNlID0gKCR0aGlzLm1vZHVsZS53aWR0aCgpIC0gJHRoaXMuY2FyZFdpZHRoKSAvIDI7XG4gICAgJHRoaXMucmVkdWNlT2Zmc2V0QmFzZSA9ICR0aGlzLmF2YWlsYWJsZVNpZGVTcGFjZSA8ICR0aGlzLnNwYWNlUmVxdWlyZWQoKSA/ICR0aGlzLmFkZGl0aW9uYWxPZmZzZXQoKSA6IDA7XG4gICAgJHRoaXMuc2V0TW9kZSgpO1xuICB9O1xuXG4gICR0aGlzLnNwYWNlUmVxdWlyZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZFdpZHRoICogKCR0aGlzLkFQUygxLCAtMSAqICR0aGlzLnNjYWxlU3RlcCwgJHRoaXMuc2lkZVF0eSArIDEpIC0gMSkgLyAyO1xuICB9O1xuXG4gICR0aGlzLmFkZGl0aW9uYWxPZmZzZXQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKCR0aGlzLnNwYWNlUmVxdWlyZWQoKSAtICR0aGlzLmF2YWlsYWJsZVNpZGVTcGFjZSkgLyAoJHRoaXMuQVBTKDEsIC0xICogJHRoaXMuc2NhbGVTdGVwLCAkdGhpcy5zaWRlUXR5ICsgMSkgLSAxKTtcbiAgfTtcblxuICAvKipcbiAgICogQXJpdGhtZXRpYyBwcm9ncmVzc2lvbiBzdW1cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGEgZmlyc3QgdGVybSBvZiBhcml0aG1ldGljIHNlcXVlbmNlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkIGRpZmZlcmVuY2UgYmV0d2VlbiB0ZXJtc1xuICAgKiBAcGFyYW0ge051bWJlcn0gbiBudW1iZXIgb2YgdGVybXNcbiAgICovXG4gICR0aGlzLkFQUyA9IGZ1bmN0aW9uKGEsIGQsIG4pIHtcbiAgICByZXR1cm4gKDIgKiBhICsgZCAqIChuIC0gMSkpICogbiAvIDI7XG4gIH07XG5cbiAgJHRoaXMucm90YXRlQ2FyZHNGb3J3YXJkID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgY2FyZHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCk7XG4gICAgY2FyZHMucHVzaCggY2FyZHMuc2hpZnQoKSApO1xuICAgICR0aGlzLmNhcmRzID0gJChjYXJkcyk7XG4gIH07XG5cbiAgJHRoaXMucm90YXRlQ2FyZHNCYWNrd2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGNhcmRzID0gJHRoaXMuY2FyZHMudG9BcnJheSgpO1xuICAgIGNhcmRzLnVuc2hpZnQoIGNhcmRzLnBvcCgpICk7XG4gICAgJHRoaXMuY2FyZHMgPSAkKGNhcmRzKTtcbiAgfTtcblxuICAkdGhpcy5nZXRBY3RpdmVDYXJkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLmNhcmRzLmVxKCAkdGhpcy5zaWRlUXR5ICk7XG4gIH07XG5cbiAgJHRoaXMuZ2V0Q2FyZHNCZWZvcmVBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJCggJHRoaXMuY2FyZHMudG9BcnJheSgpLnNsaWNlKDAsICR0aGlzLnNpZGVRdHkpLnJldmVyc2UoKSApO1xuICB9O1xuXG4gICR0aGlzLmdldENhcmRzQWZ0ZXJBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZHMuc2xpY2UoJHRoaXMuc2lkZVF0eSArIDEpO1xuICB9O1xuXG4gICR0aGlzLnNldENhcmRzUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhY3RpdmVDYXJkID0gJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpO1xuICAgIGNvbnN0IGNhcmRzQmVmb3JlID0gJHRoaXMuZ2V0Q2FyZHNCZWZvcmVBY3RpdmUoKTtcbiAgICBjb25zdCBjYXJkc0FmdGVyID0gJHRoaXMuZ2V0Q2FyZHNBZnRlckFjdGl2ZSgpO1xuXG4gICAgYWN0aXZlQ2FyZFxuICAgICAgLmNzcyggJHRoaXMuY3NzVHJhbnNmb3JtKDEpIClcbiAgICAgIC5jc3MoJ3otaW5kZXgnLCAkdGhpcy5zaWRlUXR5ICsgMSk7XG5cbiAgICBjYXJkc0JlZm9yZS5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgY2FyZCA9ICQoZWwpO1xuICAgICAgY29uc3QgY2FyZFN0eWxlcyA9ICR0aGlzLmNhcmRTdHlsZXMoaSwgLTEpO1xuXG4gICAgICBjYXJkLmNzcyggY2FyZFN0eWxlcyApO1xuICAgIH0pO1xuXG4gICAgY2FyZHNBZnRlci5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgY2FyZCA9ICQoZWwpO1xuICAgICAgY29uc3QgY2FyZFN0eWxlcyA9ICR0aGlzLmNhcmRTdHlsZXMoaSk7XG5cbiAgICAgIGNhcmQuY3NzKCBjYXJkU3R5bGVzICk7XG4gICAgfSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0Q2FyZHNPZmZzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5jYXJkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgICAgY29uc3QgJGNhcmQgPSAkKHRoaXMpO1xuICAgICAgJGNhcmQuY3NzKHtcbiAgICAgICAgbGVmdDogYGNhbGMoNTAlIC0gJHskY2FyZC53aWR0aCgpIC8gMn1weClgLFxuICAgICAgICB0b3A6IGBjYWxjKDUwJSAtICR7JGNhcmQuaGVpZ2h0KCkgLyAyfXB4KWAsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5nb1RvTmV4dENhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5yb3RhdGVDYXJkc0ZvcndhcmQoKTtcbiAgICAkdGhpcy5jYXJkcy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG5cbiAgICAkdGhpcy5ib2R5cy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgfTtcblxuICAkdGhpcy5nb1RvUHJldkNhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5yb3RhdGVDYXJkc0JhY2t3YXJkKCk7XG4gICAgJHRoaXMuY2FyZHMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUNhcmQoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuc2V0Q2FyZHNQb3NpdGlvbigpO1xuXG4gICAgJHRoaXMuYm9keXMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUJvZHkoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gIH07XG5cbiAgJHRoaXMuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaW5kZXggPSAkdGhpcy5jYXJkcy5pbmRleCh0aGlzKTtcbiAgICBjb25zdCByb3VuZHMgPSBNYXRoLmFicyhpbmRleCAtICR0aGlzLnNpZGVRdHkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3VuZHM7IGkrKykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGluZGV4ID4gJHRoaXMuc2lkZVF0eSA/ICR0aGlzLmdvVG9OZXh0Q2FyZCgpIDogJHRoaXMuZ29Ub1ByZXZDYXJkKCk7XG5cbiAgICAgICAgaWYgKGkgPT0gcm91bmRzIC0gMSkge1xuICAgICAgICAgIGRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAgICdldmVudCc6ICdndG0uY2xpY2snLFxuICAgICAgICAgICAgJ2d0bS5lbGVtZW50JzogJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmZpbmQoJ2gyJykudG9BcnJheSgpLnBvcCgpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0sIGkgKiA0MDApO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5pbml0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRzLmNsaWNrKCR0aGlzLmNsaWNrSGFuZGxlcik7XG5cbiAgICBPYmplY3Qua2V5cygkdGhpcy5fYnJlYWtwb2ludHMpLmZvckVhY2goKGtleSkgPT4gJHRoaXMuX2JyZWFrcG9pbnRzW2tleV0uYWRkTGlzdGVuZXIoKG1xKSA9PiB7XG4gICAgICAkdGhpcy5zZXRWYXJzKCk7XG4gICAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG4gICAgICAkdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAgICR0aGlzLnNldENhcmRzT2Zmc2V0KCk7XG4gICAgICAkdGhpcy5zZXRCb2R5c0hlaWdodCgpO1xuICAgIH0pKTtcbiAgfTtcblxuICAkdGhpcy5zZXRNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCR0aGlzLl9icmVha3BvaW50cy5sZy5tYXRjaGVzKSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdhZHZhbmNlZCc7XG4gICAgfSBlbHNlIGlmICgkdGhpcy5fYnJlYWtwb2ludHMubWQubWF0Y2hlcykge1xuICAgICAgJHRoaXMuX21vZGUgPSAnbWl4ZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdzaW1wbGUnO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLl9tb2RlO1xuICB9XG5cbiAgJHRoaXMuY2FyZFNjYWxlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBzd2l0Y2goJHRoaXMuX21vZGUpIHtcbiAgICAgIGNhc2UgJ2FkdmFuY2VkJzpcbiAgICAgICAgcmV0dXJuIDEgLSAkdGhpcy5zY2FsZVN0ZXAgKiAoaW5kZXggKyAxKTtcbiAgICAgIGNhc2UgJ21peGVkJzpcbiAgICAgICAgcmV0dXJuIDAuODtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5jYXJkVHJhbnNmb3JtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gMDtcblxuICAgIHN3aXRjaCgkdGhpcy5fbW9kZSkge1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgICBjb25zdCBwcmV2TW92ZSA9ICR0aGlzLmNhcmRUcmFuc2Zvcm0oaW5kZXggLSAxKSAqICR0aGlzLmNhcmRTY2FsZShpbmRleCAtIDEpIC8gJHRoaXMuY2FyZFNjYWxlKGluZGV4KTtcbiAgICAgICAgY29uc3QgcHJldldpZHRoID0gJHRoaXMuY2FyZFdpZHRoICogJHRoaXMuY2FyZFNjYWxlKGluZGV4IC0gMSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9ICR0aGlzLmNhcmRXaWR0aCAqICR0aGlzLmNhcmRTY2FsZShpbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHByZXZNb3ZlICsgKCgocHJldldpZHRoIC0gY3VycmVudFdpZHRoKSAvIDIpICsgJHRoaXMuX21pbk9mZnNldCAqIGN1cnJlbnRXaWR0aCAtICR0aGlzLnJlZHVjZU9mZnNldEJhc2UgKiAkdGhpcy5jYXJkU2NhbGUoaW5kZXgpKSAvICR0aGlzLmNhcmRTY2FsZShpbmRleCk7XG4gICAgICBjYXNlICdtaXhlZCc6XG4gICAgICAgIHJldHVybiAoaW5kZXggKyAxKSAqICgkdGhpcy5jYXJkV2lkdGggKiAwLjIgLyAyICsgNzAgKyAkdGhpcy5jYXJkV2lkdGggKiAwLjgpIC8gMC44O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKGluZGV4ICsgMSkgKiAoJHRoaXMuY2FyZFdpZHRoICsgMzApO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5jYXJkWkluZGV4ID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICByZXR1cm4gJHRoaXMuc2lkZVF0eSAtIGluZGV4O1xuICB9O1xuXG4gICR0aGlzLmNhcmRTdHlsZXMgPSBmdW5jdGlvbihpLCBmbGlwID0gMSkge1xuICAgIHJldHVybiBqUXVlcnkuZXh0ZW5kKFxuICAgICAge30sXG4gICAgICAkdGhpcy5jc3NaSW5kZXgoICR0aGlzLmNhcmRaSW5kZXgoaSkgKSxcbiAgICAgICR0aGlzLmNzc1RyYW5zZm9ybSgkdGhpcy5jYXJkU2NhbGUoaSksIGZsaXAgKiAkdGhpcy5jYXJkVHJhbnNmb3JtKGkpKVxuICAgICk7XG4gIH07XG5cbiAgJHRoaXMuc2V0SW5kZXggPSBmdW5jdGlvbihpbmRleCkge1xuICAgICR0aGlzLl9pbmRleCA9IGluZGV4O1xuICB9O1xuXG4gICR0aGlzLmdldEluZGV4ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLl9pbmRleCAhPT0gdW5kZWZpbmVkID8gJHRoaXMuX2luZGV4IDogTWF0aC5mbG9vcigkdGhpcy5jYXJkcy5sZW5ndGggLyAyKTtcbiAgfTtcblxuICAkdGhpcy5nZXRBY3RpdmVCb2R5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLmJvZHlzLmVxKCAkdGhpcy5nZXRBY3RpdmVDYXJkKClbMF0ub3JpZ2luYWxJRCApO1xuICB9O1xuXG4gICR0aGlzLmNzc1RyYW5zZm9ybSA9IGZ1bmN0aW9uKHNjYWxlLCB0cmFuc2xhdGUpIHtcbiAgICBjb25zdCBydWxlID0gJ3RyYW5zZm9ybSc7XG4gICAgY29uc3QgdmFsdWUgPSBbc2NhbGUgPyBgc2NhbGUoJHtzY2FsZX0pYCA6ICcnLCB0cmFuc2xhdGUgPyBgdHJhbnNsYXRlWCgke3RyYW5zbGF0ZX1weClgIDogJycsIF0uam9pbignICcpO1xuICAgIGNvbnN0IHByZWZpeGVzID0gWyctd2Via2l0LScsICctbXMtJywgJyddO1xuICAgIGNvbnN0IHN0eWxlcyA9IHt9O1xuXG4gICAgcHJlZml4ZXMuZm9yRWFjaChwcmVmaXggPT4geyBzdHlsZXNbcHJlZml4ICsgcnVsZV0gPSB2YWx1ZX0gKTtcblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH07XG5cbiAgJHRoaXMuY3NzWkluZGV4ID0gZnVuY3Rpb24oemluZGV4KSB7XG4gICAgcmV0dXJuIHsgJ3otaW5kZXgnOiB6aW5kZXggfTtcbiAgfTtcblxuICAkdGhpcy5zZXRCb2R5c0hlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGhlaWdodHMgPSAkdGhpcy5ib2R5cy50b0FycmF5KCkubWFwKGJvZHkgPT4gJChib2R5KS5oZWlnaHQoKSk7XG5cbiAgICAkdGhpcy5ib2R5c1dyYXBwZXIuaGVpZ2h0KCBNYXRoLm1heCguLi5oZWlnaHRzKSApO1xuICB9O1xuXG4gICR0aGlzLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5zZXRFbGVtZW50cygpO1xuICAgICR0aGlzLnNpZGVRdHkgPSBNYXRoLmZsb29yKCR0aGlzLmNhcmRzLmxlbmd0aCAvIDIpO1xuICAgIC8vICR0aGlzLmdldERhdGEoKTtcbiAgICAkdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAkdGhpcy5zZXRDYXJkc09mZnNldCgpO1xuICAgICR0aGlzLnNldFZhcnMoKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5nZXRBY3RpdmVCb2R5KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLnNldEJvZHlzSGVpZ2h0KCk7XG5cbiAgICAkdGhpcy5pbml0RXZlbnRIYW5kbGVycygpO1xuICAgICR0aGlzLmluaXRBdXRvUGxheSgpO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcubW9kdWxlLS1iNycpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgJG1vZHVsZSA9ICQodGhpcyk7XG5cbiAgICAkbW9kdWxlLmltYWdlc0xvYWRlZCgpLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgIG5ldyBDYXJvdXNlbCggJG1vZHVsZSApLmluaXQoKTtcbiAgICB9KVxuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgeyB0aGVtZV9icmVha3BvaW50cyB9IGZyb20gJ2RydXBhbFNldHRpbmdzJztcblxuY29uc3QgYnJlYWtwb2ludHMgPSB7XG4gICdtaW4nOiB7fSxcbiAgJ21heCc6IHt9LFxufTtcblxuT2JqZWN0LmtleXModGhlbWVfYnJlYWtwb2ludHMpLmZvckVhY2goKGtleSkgPT4ge1xuICBicmVha3BvaW50cy5taW5bJ21iJ10gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogMHB4KScpO1xuICBicmVha3BvaW50cy5taW5ba2V5XSA9IHdpbmRvdy5tYXRjaE1lZGlhKGAobWluLXdpZHRoOiAke3RoZW1lX2JyZWFrcG9pbnRzW2tleV19cHgpYCk7XG4gIGJyZWFrcG9pbnRzLm1heFtrZXldID0gd2luZG93Lm1hdGNoTWVkaWEoYChtYXgtd2lkdGg6ICR7dGhlbWVfYnJlYWtwb2ludHNba2V5XSAtIDF9cHgpYCk7XG59KVxuXG5leHBvcnQgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lX2JyZWFrcG9pbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgYnJlYWtwb2ludHNcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IgPSAnI3ZpZXdzLWV4cG9zZWQtZm9ybS1hcnRpY2xlLWxpc3QtcXVpY2stYmxvY2stY2FzZS1saXN0JztcbiAgY29uc3QgdHlwZVBsYWNlaG9sZGVyID0gRHJ1cGFsLnQoJ1R5cGUnKTtcbiAgY29uc3QgY29uY2VybnNQbGFjZWhvbGRlciA9IERydXBhbC50KCdDb25jZXJucycpO1xuXG4gIERydXBhbC5iZWhhdmlvcnMuY2FzZXNfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwidHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0eXBlUGxhY2Vob2xkZXIsXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiY29uY2VybnNcIl0nKS5vbmNlKCdzZWxlY3QyLWNvbmNlcm5zJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbmNlcm5zUGxhY2Vob2xkZXIsXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiaXNfZGlzYXNzb2NpYXRlZFwiXScpLm9uY2UoJ3NlbGVjdDItaXNfZGlzYXNzb2NpYXRlZCcpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcbi8vIGltcG9ydCBzaGF2ZSBmcm9tICcuL3NoYXZlJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcudmlldy1pZC1jZXJ0aWZpZWRfcHJvZHVjdHNfbGlzdCAudmlldy1jb250ZW50JylcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICBtYXJnaW46IDM3LFxuICAgICAgcmV3aW5kOiBmYWxzZSxcbiAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgJzEwMjQnOiB7XG4gICAgICAgICAgY2VudGVyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICAnMTI4MCc6IHtcbiAgICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICAgIGl0ZW1zOiAzLFxuICAgICAgICAgIGRvdHNFYWNoOiAzLFxuICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICRjb250YWN0Rm9ybXMgPSAkKFwiLmNvbnRhY3QtZm9ybVwiKTtcbiAgY29uc3QgJHByZXZpZXdGaWxlTW9kYWwgPSAkKCcjcHJldmlldy1tb2RhbCcpO1xuICBcbiAgJGNvbnRhY3RGb3Jtcy5vbignY2xpY2snLCAnLnBkZi1wcmV2aWV3LW1vZGFsLWNhbGxlcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuXG4gICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygncGRmLXN1cHBvcnQnKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgY29uc3Qgc3JjID0gJHRoaXMuYXR0cignaHJlZicpO1xuICAgICAgY29uc3QgJHBkZkNvbnRhaW5lciA9ICRwcmV2aWV3RmlsZU1vZGFsLmZpbmQoJyNwZGYtY29udGFpbmVyJyk7XG4gICAgICAkcHJldmlld0ZpbGVNb2RhbC5maW5kKCcjYWNjZXB0LXRlcm1zJykuZGF0YSgndGFyZ2V0JywgJHRoaXMuY2xvc2VzdCgnbGFiZWwnKSk7XG4gICAgICBcbiAgICAgIC8vIElzIHBkZiBhbHJlYWR5IGxvYWRlZD9cbiAgICAgIGlmICgkcGRmQ29udGFpbmVyLmF0dHIoJ3NyYycpICE9PSBzcmMpIHtcbiAgICAgICAgJHBkZkNvbnRhaW5lci5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgfVxuXG4gICAgICAkcHJldmlld0ZpbGVNb2RhbC5hZGRDbGFzcygnc2hvdycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5hdHRyKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgfVxuICB9KTtcblxuICAkcHJldmlld0ZpbGVNb2RhbC5vbignY2xpY2snLCAnI2FjY2VwdC10ZXJtcycsIGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJGNoZWNrYm94ID0gJChgIyR7JHRoaXMuZGF0YSgndGFyZ2V0JykucHJvcCgnZm9yJyl9YCk7XG5cbiAgICAkY2hlY2tib3gucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICRjaGVja2JveC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAkdGhpcy5kYXRhKCd0YXJnZXQnLCBudWxsKTtcbiAgICAkcHJldmlld0ZpbGVNb2RhbC5yZW1vdmVDbGFzcygnc2hvdycpO1xuICB9KTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMucHJvY2Vzc2VzX2ZpbHRlcl9zZWxlY3QgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgY29uc3QgJGZvcm0gPSAkKCcjdmlld3MtZXhwb3NlZC1mb3JtLXNlYXJjaC1wYWdlLWRvY3VtZW50LWNlbnRyZScpO1xuXG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImRzcGFjZV9kb2NfdHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItZG9jdW1lbnQtdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2RlYm91bmNlJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICBjb25zdCAkbG9nbyA9ICQoJyNoZWFkZXIgLmxvZ28tZmFkZUluVXAnKTtcbiAgY29uc3Qgb2Zmc2V0ID0gKyRsb2dvXG4gICAgLmFkZCgnPGRpdiBjbGFzcz1cImZhZGVJblVwLW9mZnNldC0wXCI+JylcbiAgICAuZmlyc3QoKVxuICAgIC5hdHRyKCdjbGFzcycpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAuZmluZChjbGFzc05hbWUgPT4gY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ2ZhZGVJblVwLW9mZnNldC0nKSlcbiAgICAuc3BsaXQoJy0nKVxuICAgIC5wb3AoKTtcblxuICBpZiAob2Zmc2V0KSB7XG4gICAgJHdpbmRvdy5vbignc2Nyb2xsJywgZGVib3VuY2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoJHdpbmRvdy5zY3JvbGxUb3AoKSA+IG9mZnNldCkge1xuICAgICAgICAkbG9nby5hZGRDbGFzcygndmlzaWJsZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGxvZ28ucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIH1cbiAgICB9LCA1MCkpO1xuICB9XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcucGFyYWdyYXBoLS10eXBlLS1jb250YWN0LWZvcm0gZm9ybS5jb250YWN0LWZvcm0gLmZvcm0tYWN0aW9ucyBpbnB1dFt0eXBlPXN1Ym1pdF0nKS5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCAkZm9ybSA9ICQodGhpcykucGFyZW50cygnZm9ybScpO1xuXG4gICAgZGF0YUxheWVyLnB1c2goe1xuICAgICAgJ2V2ZW50JzogJ2d0bS5mb3JtU3VibWl0JyxcbiAgICAgICdndG0uZWxlbWVudCc6ICRmb3JtWzBdLFxuICAgICAgJ2d0bS5lbGVtZW50Q2xhc3Nlcyc6ICRmb3JtLmF0dHIoJ2NsYXNzJyksXG4gICAgICAnZ3RtLmVsZW1lbnRJZCc6ICRmb3JtLmF0dHIoJ2lkJylcbiAgICB9KTtcbiAgfSk7XG5cbiAgbGV0ICRyZWdpb25zO1xuXG4gIERydXBhbC5iZWhhdmlvcnMuZXhwb3NlZF9mb3JtX3N1Ym1pc3Npb24gPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJHJlZ2lvbnMgPSAkcmVnaW9ucyB8fCAkKCcucmVnaW9uLWhlcm8sIC5yZWdpb24tY29udGVudCcpO1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSAnW2lkXj12aWV3cy1leHBvc2VkLWZvcm1dJztcbiAgICAgIGNvbnN0ICRmb3JtcyA9ICQoc2VsZWN0b3IsIGNvbnRleHQpLmFkZEJhY2soc2VsZWN0b3IpO1xuICAgICAgY29uc3QgJGJlZiA9ICRyZWdpb25zLmZpbmQoJGZvcm1zKS5vbmNlKCdiZWYtZ3RtJyk7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gW107XG5cbiAgICAgICRiZWYuZmluZCgnaW5wdXRbdHlwZT1zdWJtaXRdJykub24oJ2NsaWNrIG1vdXNlZG93bicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCAkZm9ybSA9ICQodGhpcykucGFyZW50cygnZm9ybScpO1xuICAgICAgICBjb25zdCAkaXRlbXMgPSAkZm9ybS5maW5kKCcuZm9ybS1pdGVtJyk7XG5cbiAgICAgICAgJGl0ZW1zLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY29uc3QgJGl0ZW0gPSAkKHRoaXMpO1xuXG4gICAgICAgICAgc3dpdGNoKGdldEl0ZW1UeXBlKCRpdGVtKSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkaXRlbS5maW5kKCdzZWxlY3QnKS52YWwoKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAkaXRlbS5maW5kKCdvcHRpb24nKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoYFt2YWx1ZT0ke2luZGV4fV1gKVxuICAgICAgICAgICAgICAgIC50ZXh0KCk7XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKCRpdGVtLmZpbmQoJ2lucHV0JykudmFsKCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRmb3JtLmFkZENsYXNzKCd2aWV3cy1leHBvc2VkLWZvcm0nKTtcblxuICAgICAgICBkYXRhTGF5ZXIucHVzaCh7XG4gICAgICAgICAgJ2V2ZW50JzogJ2V4cG9zZWRGb3JtJyxcbiAgICAgICAgICAnZm9ybUZpbHRlcnMnOiBub3JtYWxpemVGaWx0ZXJzKGZpbHRlcnMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEl0ZW1UeXBlKCRpdGVtKSB7XG4gICAgcmV0dXJuICRpdGVtLmF0dHIoJ2NsYXNzJylcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAuZmlsdGVyKGNsYXNzTmFtZSA9PiBjbGFzc05hbWUuc3RhcnRzV2l0aCgnZm9ybS10eXBlJykpXG4gICAgICAucG9wKClcbiAgICAgIC5zcGxpdCgnLScpXG4gICAgICAucG9wKCk7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVGaWx0ZXJzKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgLm1hcChmaWx0ZXIgPT4gZmlsdGVyLnJlcGxhY2UoLy0vZywgJycpKVxuICAgICAgLm1hcChmaWx0ZXIgPT4gZmlsdGVyLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZmlsdGVyID0+IGZpbHRlci5sZW5ndGgpXG4gICAgICAuam9pbignIC0gJyk7XG4gIH1cbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yTWVzc2FnZShtc2cpIHtcbiAgY29uc29sZS5lcnJvcignW0hhc2guanNdIFRoZSBoYXNoIHBhc3NlZCBpbiB0byB1cGRhdGUgbG9jYXRpb24gaXMgbm90IHZhbGlkJyk7XG4gIGNvbnNvbGUuZXJyb3IoYFtIYXNoLmpzXSAke21zZ31gKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZChoYXNoKSB7XG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGhhc2gpIHtcbiAgICBsb2dFcnJvck1lc3NhZ2UoJ0hhc2ggaGFzIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFoYXNoLmxlbmd0aCkge1xuICAgIGxvZ0Vycm9yTWVzc2FnZSgnSGFzaCBpcyBlbXB0eScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUoaGFzaCkge1xuICBpZiAoIWlzVmFsaWQoaGFzaCkpIHsgcmV0dXJuOyB9XG5cbiAgY29uc3QgZGVzdGluYXRpb25FbGVtZW50ID0gJCggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaC5zdWJzdHJpbmcoMSkpICk7XG5cbiAgaWYgKGhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBoYXNoKTtcbiAgfSBlbHNlIHtcbiAgICBkZXN0aW5hdGlvbkVsZW1lbnQucmVtb3ZlQXR0cignaWQnKTtcbiAgICBsb2NhdGlvbi5oYXNoID0gaGFzaDtcbiAgICBkZXN0aW5hdGlvbkVsZW1lbnQuYXR0cignaWQnLCBoYXNoLnN1YnN0cmluZygxKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgeyB1cGRhdGUgfVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdkZWJvdW5jZSc7XG5pbXBvcnQgYnJlYWtwb2ludHMsIHsga2V5cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0ZXN0KCRlbCwgb2Zmc2V0ID0gMTAwKSB7XG4gIGNvbnN0ICR3aW4gPSAkKHdpbmRvdyk7XG4gIGNvbnN0IHdpblRvcCA9ICR3aW4uc2Nyb2xsVG9wKCk7XG4gIGNvbnN0IHdpbkJvdCA9IHdpblRvcCArICR3aW4uaGVpZ2h0KCk7XG4gIGNvbnN0IGVsVG9wID0gJGVsLm9mZnNldCgpLnRvcDtcbiAgY29uc3QgZWxCb3QgPSBlbFRvcCArICRlbC5vdXRlckhlaWdodCgpO1xuXG4gIHJldHVybiAoZWxUb3AgPD0gKHdpbkJvdCAtIG9mZnNldCkpICYmICgod2luVG9wICsgb2Zmc2V0KSA8PSBlbEJvdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgYWxsRWxlbWVudHMgPSAkKCcuY2hlY2tJZkluVmlldycpO1xuICBjb25zdCBpbnZhbGlkRWxlbWVudHMgPSBhbGxFbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgeyBpblZpZXdNaW4sIGluVmlld01heCB9ID0gJCh0aGlzKS5kYXRhKCk7XG4gICAgbGV0IGRlY2lzaW9uID0gZmFsc2VcblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01pbikgJiYga2V5cy5pbmNsdWRlcyhpblZpZXdNYXgpKSB7XG4gICAgICBpZiAoIWJyZWFrcG9pbnRzLm1pbltpblZpZXdNaW5dLm1hdGNoZXMgfHwgIWJyZWFrcG9pbnRzLm1heFtpblZpZXdNYXhdLm1hdGNoZXMpIHtcbiAgICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01pbikgJiYgIWJyZWFrcG9pbnRzLm1pbltpblZpZXdNaW5dLm1hdGNoZXMpIHtcbiAgICAgIGRlY2lzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5cy5pbmNsdWRlcyhpblZpZXdNYXgpICYmICFicmVha3BvaW50cy5tYXhbaW5WaWV3TWF4XS5tYXRjaGVzKSB7XG4gICAgICBkZWNpc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGRlY2lzaW9uKSB7XG4gICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdjaGVja0lmSW5WaWV3JykuYWRkQ2xhc3MoJ2luVmlldycpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNpc2lvbjtcbiAgfSk7XG5cbiAgbGV0IGVsZW1lbnRzID0gYWxsRWxlbWVudHMubm90KGludmFsaWRFbGVtZW50cyk7XG5cbiAgaWYgKCAhZWxlbWVudHMubGVuZ3RoICkgcmV0dXJuO1xuXG4gIGNvbnN0IGhhbmRsZXIgPSBkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgJCh3aW5kb3cpLm9mZignc2Nyb2xsJywgaGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudHMuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgJGVsID0gJChub2RlKTtcbiAgICAgIGNvbnN0IHsgaW5WaWV3T2Zmc2V0LCBpblZpZXdDbGFzcyB9ID0gJGVsLmRhdGEoKTtcblxuICAgICAgaWYgKHRlc3QoJGVsLCBpblZpZXdPZmZzZXQpKSB7XG4gICAgICAgICRlbFxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnY2hlY2tJZkluVmlldycpXG4gICAgICAgICAgLmFkZENsYXNzKCdpblZpZXcnKVxuICAgICAgICAgIC5hZGRDbGFzcyhpblZpZXdDbGFzcyk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoJ2luVmlldycpO1xuICAgICAgICB9LCAxMTAwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKCcuY2hlY2tJZkluVmlldycpO1xuICB9LCA1MCk7XG4gIGhhbmRsZXIoKTtcbiAgJCh3aW5kb3cpLm9uKCdzY3JvbGwnLCBoYW5kbGVyKTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUxpbmVIZWlnaHQoJGVsZW1lbnQpIHtcbiAgbGV0IGhlaWdodCA9IDA7XG4gIGNvbnN0IHN0eWxlcyA9IFtcbiAgICAnZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7JyxcbiAgICAncG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7JyxcbiAgICAnbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDsnLFxuICAgICdwYWRkaW5nOiAwICFpbXBvcnRhbnQ7JyxcbiAgICAndmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7JyxcbiAgICAnb3BhY2l0eTogMCAhaW1wb3J0YW50OydcbiAgXTtcbiAgY29uc3QgJHRlc3RFbCA9ICQoJzxzcGFuPiZuYnNwOzwvc3Bhbj4nKS5hdHRyKCdzdHlsZScsIHN0eWxlcy5qb2luKCcnKSk7XG5cbiAgJGVsZW1lbnQuYXBwZW5kKCR0ZXN0RWwpO1xuXG4gIGhlaWdodCA9ICR0ZXN0RWwuaGVpZ2h0KCk7XG5cbiAgJHRlc3RFbC5yZW1vdmUoKTtcblxuICByZXR1cm4gaGVpZ2h0O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoJGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbGluZUhlaWdodCA9IHBhcnNlRmxvYXQoJGVsZW1lbnQuY3NzKCdsaW5lLWhlaWdodCcpKTtcblxuICByZXR1cm4gTnVtYmVyLmlzTmFOKGxpbmVIZWlnaHQpID8gY2FsY3VsYXRlTGluZUhlaWdodCgkZWxlbWVudCkgOiBNYXRoLmNlaWwobGluZUhlaWdodCk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0aXRsZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG59XG5cbmZ1bmN0aW9uIHNldFNvdXJjZShub2RlLCBzcmNUeXBlKSB7XG4gIGNvbnN0ICRtYXAgPSAkKG5vZGUpO1xuICBjb25zdCBzcmMgPSAkbWFwLmRhdGEoYHNyYyR7dGl0bGUoc3JjVHlwZSl9YCk7XG5cbiAgJG1hcC5hdHRyKHsgc3JjIH0pO1xufVxuXG5mdW5jdGlvbiB0ZXN0TVEoJG1hcHMpIHtcbiAgaWYgKGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzKSB7XG4gICAgJG1hcHMuZWFjaCgoaSwgZWwpID0+IHsgc2V0U291cmNlKGVsLCAnZGVza3RvcCcpOyB9KTtcbiAgfSBlbHNlIHtcbiAgICAkbWFwcy5lYWNoKChpLCBlbCkgPT4geyBzZXRTb3VyY2UoZWwsICdtb2JpbGUnKTsgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkbWFwcyA9ICQoJ2lmcmFtZS5yZXNwb25zaXZlLW1hcCcpO1xuXG4gIGlmIChicmVha3BvaW50cy5taW4uYmcubWF0Y2hlcykge1xuICAgIHRlc3RNUSgkbWFwcyk7XG4gIH1cblxuICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIoKCkgPT4geyB0ZXN0TVEoJG1hcHMpIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZWRpYUlEIFxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFxuICogQHBhcmFtIHtzdHJpbmd9IHRodW1ibmFpbCBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb29raWVOYW1lIFxuICovXG5mdW5jdGlvbiBjb29raWVzQWRkTWVkaWEobWVkaWFJRCwgZ2VuZXJpYywgc291cmNlLCB0eXBlLCB0aHVtYm5haWwsIGNvb2tpZU5hbWUpIHtcbiAgbGV0IHNlbGVjdGVkTWVkaWEgPSBDb29raWVzLmdldEpTT04oY29va2llTmFtZSk7XG4gIFxuICBpZiAodW5kZWZpbmVkID09PSBzZWxlY3RlZE1lZGlhKSB7XG4gICAgc2VsZWN0ZWRNZWRpYSA9IHt9O1xuICB9XG5cbiAgc2VsZWN0ZWRNZWRpYVttZWRpYUlEXSA9IHtcbiAgICBnZW5lcmljOiBnZW5lcmljLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgdGh1bWJuYWlsOiB0eXBlICE9ICdwZGYnID8gdGh1bWJuYWlsIDogJydcbiAgfTtcbiAgQ29va2llcy5zZXQoY29va2llTmFtZSwgc2VsZWN0ZWRNZWRpYSk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVkaWFJRCBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb29raWVOYW1lIFxuICovXG5mdW5jdGlvbiBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgY29va2llTmFtZSkge1xuICBsZXQgc2VsZWN0ZWRNZWRpYSA9IENvb2tpZXMuZ2V0SlNPTihjb29raWVOYW1lKTtcbiAgXG4gIGlmIChzZWxlY3RlZE1lZGlhICYmIGRlbGV0ZSBzZWxlY3RlZE1lZGlhW21lZGlhSURdKSB7XG4gICAgQ29va2llcy5zZXQoY29va2llTmFtZSwgc2VsZWN0ZWRNZWRpYSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBzZWxlY3RlZFJlc291cmNlcyA9ICQoJyNzZWxlY3RlZC1yZXNvdXJjZXMnKTtcbiAgY29uc3Qgc2VsZWN0ZWREb2N1bWVudHMgPSAkKCcjc2VsZWN0ZWQtZG9jdW1lbnRzJyk7XG4gIGNvbnN0IHJlc291cmNlTGlzdCA9ICQoJy5yZXNvdXJjZS1saXN0Jyk7XG4gIGNvbnN0IHJlc291cmNlSXRlbVdyYXBwZXIgPSAnLnJlc291cmNlLWl0ZW0nO1xuICBjb25zdCBzZWxlY3RlZFJlc291cmNlV3JhcHBlciA9ICcuc2VsZWN0ZWQtcmVzb3VyY2UnO1xuICBjb25zdCBzZWxlY3RlZEltYWdlVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtaW1hZ2UtdGVtcGxhdGUgJyArIHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKS5maXJzdCgpO1xuICBjb25zdCBzZWxlY3RlZFZpZGVvVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtdmlkZW8tdGVtcGxhdGUgJyArIHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKS5maXJzdCgpO1xuICBjb25zdCBzZWxlY3RlZFBERlRlbXBsYXRlID0gJCgnI3NlbGVjdGVkLXBkZi10ZW1wbGF0ZSAnICsgc2VsZWN0ZWRSZXNvdXJjZVdyYXBwZXIpLmZpcnN0KCk7XG4gIGNvbnN0IHNlbGVjdGVkTWVkaWFDb29raWVOYW1lID0gJ3NlbGVjdGVkTWVkaWEnO1xuICBcbiAgZnVuY3Rpb24gY3JlYXRlU2VsZWN0ZWRSZXNvdXJjZShtZWRpYUlELCBtZWRpYSkge1xuICAgIGxldCByZXNvdXJjZVRvQXBwZW5kID0gbnVsbDtcblxuICAgIHN3aXRjaCAobWVkaWEudHlwZSkge1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICBpZiAoc2VsZWN0ZWRWaWRlb1RlbXBsYXRlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb3VyY2VUb0FwcGVuZCA9IHNlbGVjdGVkVmlkZW9UZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJy5yZXNvdXJjZSBzb3VyY2UnKS5maXJzdCgpLmF0dHIoJ3NyYycsIG1lZGlhLnNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBpZiAoc2VsZWN0ZWRJbWFnZVRlbXBsYXRlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb3VyY2VUb0FwcGVuZCA9IHNlbGVjdGVkSW1hZ2VUZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJ2ltZycpLmZpcnN0KCkuYXR0cignc3JjJywgbWVkaWEuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZGYnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNlbGVjdGVkUERGVGVtcGxhdGUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvdXJjZVRvQXBwZW5kID0gc2VsZWN0ZWRQREZUZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCAkaW1nID0gcmVzb3VyY2VUb0FwcGVuZC5maW5kKCdpbWcnKS5maXJzdCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKG1lZGlhLnRodW1ibmFpbCkge1xuICAgICAgICAgICRpbWcuYXR0cignc3JjJywgbWVkaWEudGh1bWJuYWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRpbWcuYXR0cignZGF0YS1wZGYtdGh1bWJuYWlsLWZpbGUnLCBtZWRpYS5zb3VyY2UpO1xuICAgICAgICAkaW1nLmF0dHIoJ2RhdGEtdHlwZScsIG1lZGlhLnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgXG4gICAgcmVzb3VyY2VUb0FwcGVuZC5maW5kKCcuZG93bmxvYWQtYnRuJykuZmlyc3QoKS5hdHRyKCdocmVmJywgbWVkaWEuc291cmNlKTtcbiAgICByZXNvdXJjZVRvQXBwZW5kLmF0dHIoJ2RhdGEtbWVkaWEnLCBtZWRpYUlEKTsgLy8gdXNlZCBhdHRyKCkgYmVjYXVzZSBkYXRhLW1lZGlhIHdpbGwgYmUgcXVlcmllZCBsYXRlclxuXG4gICAgaWYgKG1lZGlhLnR5cGUgPT0gJ2ltYWdlJyB8fCAgbWVkaWEudHlwZSA9PSAndmlkZW8nKSB7XG4gICAgICBzZWxlY3RlZFJlc291cmNlcy5jaGlsZHJlbignLnNlbGVjdGVkLXJlc291cmNlLWxpc3QnKS5maXJzdCgpLmFwcGVuZChyZXNvdXJjZVRvQXBwZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWREb2N1bWVudHMuY2hpbGRyZW4oJy5zZWxlY3RlZC1yZXNvdXJjZS1saXN0JykuZmlyc3QoKS5hcHBlbmQocmVzb3VyY2VUb0FwcGVuZCk7XG4gICAgfVxuXG4gICAgJCgnIycgKyBtZWRpYUlELCByZXNvdXJjZUxpc3QpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcikuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2VsZWN0ZWRSZXNvdXJjZXMubGVuZ3RoID09IDEgfHwgc2VsZWN0ZWREb2N1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAvLyBPbmUgY3ljbGUgZm9yIGFkZGluZyBlYWNoIG1lZGlhIGJhc2VkIG9uIGl0cycgdHlwZSB0byBzZWxlY3RlZCBzZWN0aW9uLlxuICAgIGxldCBjb29raWVzTWVkaWEgPSBDb29raWVzLmdldEpTT04oc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gY29va2llc01lZGlhKSB7XG4gICAgICBDb29raWVzLnNldChzZWxlY3RlZE1lZGlhQ29va2llTmFtZSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29va2llc01lZGlhKSB7XG4gICAgICAgIGlmIChjb29raWVzTWVkaWEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKHByb3AsIGNvb2tpZXNNZWRpYVtwcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGVycy5cbiAgICByZXNvdXJjZUxpc3Qub24oJ2NsaWNrJywgJy5yZXNvdXJjZS1pdGVtIC5zZWxlY3QtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZXNvdXJjZUl0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcik7IC8vIC5yZXNvdXJjZS1pdGVtXG4gICAgICBjb25zdCByZXNvdXJjZSA9IHJlc291cmNlSXRlbS5maW5kKCcucmVzb3VyY2UnKS5maXJzdCgpO1xuICAgICAgbGV0IGVudGl0eSA9IHJlc291cmNlSXRlbS5jaGlsZHJlbignLm1lZGlhLCAuZmlsZScpLmZpcnN0KCk7XG4gICAgICBjb25zdCBmaWxlVHlwZSA9IHJlc291cmNlLmRhdGEoJ3R5cGUnKTtcblxuICAgICAgaWYgKHJlc291cmNlSXRlbS5sZW5ndGggPT0gMCB8fCByZXNvdXJjZS5sZW5ndGggPT0gMCB8fCBlbnRpdHkubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VJdGVtLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZCA9ICQoJy5zZWxlY3RlZC1yZXNvdXJjZVtkYXRhLW1lZGlhPVwiJyArIGVudGl0eS5hdHRyKCdpZCcpICsgJ1wiXScsIHNlbGVjdGVkUmVzb3VyY2VzKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBzZWxlY3RlZCA9ICQoJy5zZWxlY3RlZC1yZXNvdXJjZVtkYXRhLW1lZGlhPVwiJyArIGVudGl0eS5hdHRyKCdpZCcpICsgJ1wiXScsIHNlbGVjdGVkRG9jdW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGNvb2tpZXNEZWxldGVNZWRpYShlbnRpdHkuYXR0cignaWQnKSwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgICAgIHJlc291cmNlSXRlbS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICBzZWxlY3RlZC5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgciA9IGVudGl0eS5maW5kKCcucmVzb3VyY2UnKS5maXJzdCgpO1xuICAgICAgbGV0IGVudGl0eVNvdXJjZSA9IHIuYXR0cignaHJlZicpO1xuICAgICAgbGV0IGVudGl0eUdlbmVyaWMgPSByLmF0dHIoJ2RhdGEtZ2VuZXJpYycpO1xuICAgICAgbGV0IGVudGl0eVRodW1ibmFpbCA9IGVudGl0eS5maW5kKCcudGh1bWJuYWlsJykuZmlyc3QoKS5hdHRyKCdzcmMnKTtcblxuICAgICAgY3JlYXRlU2VsZWN0ZWRSZXNvdXJjZShlbnRpdHkuYXR0cignaWQnKSwge1xuICAgICAgICBnZW5lcmljOiBlbnRpdHlHZW5lcmljLFxuICAgICAgICBzb3VyY2U6IGVudGl0eVNvdXJjZSwgXG4gICAgICAgIHR5cGU6IGZpbGVUeXBlLCBcbiAgICAgICAgdGh1bWJuYWlsOiBlbnRpdHlUaHVtYm5haWxcbiAgICAgIH0pO1xuICAgICAgY29va2llc0FkZE1lZGlhKFxuICAgICAgICBlbnRpdHkuYXR0cignaWQnKSxcbiAgICAgICAgZW50aXR5R2VuZXJpYyxcbiAgICAgICAgZW50aXR5U291cmNlLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgZW50aXR5VGh1bWJuYWlsLFxuICAgICAgICBzZWxlY3RlZE1lZGlhQ29va2llTmFtZVxuICAgICAgKTtcbiAgICAgIHJlc291cmNlSXRlbS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgICQoJy5zZWxlY3RlZC1yZXNvdXJjZS1saXN0Jykub24oJ2NsaWNrJywgJy5zZWxlY3RlZC1yZXNvdXJjZSAudW5zZWxlY3QtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBsZXQgc2VsZWN0ZWRSZXNvdXJjZSA9ICQodGhpcykuY2xvc2VzdChzZWxlY3RlZFJlc291cmNlV3JhcHBlcik7XG5cbiAgICAgIGlmIChzZWxlY3RlZFJlc291cmNlLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGxldCBtZWRpYUlEID0gc2VsZWN0ZWRSZXNvdXJjZS5kYXRhKCdtZWRpYScpO1xuXG4gICAgICAgICQoJyMnICsgbWVkaWFJRCwgcmVzb3VyY2VMaXN0KS5jbG9zZXN0KHJlc291cmNlSXRlbVdyYXBwZXIpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgICBzZWxlY3RlZFJlc291cmNlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnLmdhbGxlcnktY29udGVudCcpLm9uKCdjbGljaycsICcubWVkaWEtc2VsZWN0JywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCAkZ2FsbGVyeUNvbnRlbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5nYWxsZXJ5LWNvbnRlbnQnKTtcbiAgICAgIGNvbnN0ICRnYWxsZXJ5TWVkaWEgPSAkZ2FsbGVyeUNvbnRlbnQuY2hpbGRyZW4oJyNnYWxsZXJ5LW1lZGlhJyk7XG4gICAgICBjb25zdCBtZWRpYUlEID0gJGdhbGxlcnlNZWRpYS5kYXRhKCdtZWRpYScpO1xuXG4gICAgICBpZiAodW5kZWZpbmVkID09PSBtZWRpYUlEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0ICRyZXNvdXJjZUl0ZW0gPSAkKCcjJyArIG1lZGlhSUQsIHJlc291cmNlTGlzdCkuY2xvc2VzdChyZXNvdXJjZUl0ZW1XcmFwcGVyKTtcblxuICAgICAgaWYgKCRyZXNvdXJjZUl0ZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCRnYWxsZXJ5Q29udGVudC5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgICBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuXG4gICAgICAgIC8vIFNldCAnaGVhcnQnIGljb24gdG8gJ3Vuc2VsZWN0ZWQnIHN0YXRlLlxuICAgICAgICAkZ2FsbGVyeUNvbnRlbnQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICRyZXNvdXJjZUl0ZW0ucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG1lZGlhIGZyb20gc2VsZWN0ZWQgc2VjdGlvbi5cbiAgICAgICAgJCgnLnNlbGVjdGVkLXJlc291cmNlW2RhdGEtbWVkaWE9XCInICsgbWVkaWFJRCArICdcIl0nLCBzZWxlY3RlZFJlc291cmNlcykucmVtb3ZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVkaWFUaHVtYm5haWwgPSAkcmVzb3VyY2VJdGVtLmZpbmQoJy50aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ3NyYycpO1xuXG4gICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKG1lZGlhSUQsIHtcbiAgICAgICAgZ2VuZXJpYzogJGdhbGxlcnlNZWRpYS5hdHRyKCdkYXRhLWdlbmVyaWMnKSxcbiAgICAgICAgc291cmNlOiAkZ2FsbGVyeU1lZGlhLmF0dHIoJ3NyYycpLCBcbiAgICAgICAgdHlwZTogJGdhbGxlcnlNZWRpYS5kYXRhKCd0eXBlJyksIFxuICAgICAgICB0aHVtYm5haWw6IG1lZGlhVGh1bWJuYWlsXG4gICAgICB9KTtcbiAgICAgIGNvb2tpZXNBZGRNZWRpYShcbiAgICAgICAgbWVkaWFJRCxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5hdHRyKCdkYXRhLWdlbmVyaWMnKSxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5hdHRyKCdzcmMnKSxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5kYXRhKCd0eXBlJyksXG4gICAgICAgIG1lZGlhVGh1bWJuYWlsLFxuICAgICAgICBzZWxlY3RlZE1lZGlhQ29va2llTmFtZVxuICAgICAgKTtcbiAgICAgICRnYWxsZXJ5Q29udGVudC5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICRyZXNvdXJjZUl0ZW0uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICAkKCcuc2VsZWN0ZWQtaGVhZGVyIGEubGluaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCBzYXZlZE1lZGlhID0gQ29va2llcy5nZXRKU09OKHNlbGVjdGVkTWVkaWFDb29raWVOYW1lKTtcbiAgICAgIGxldCBwcmV2ZW50RG93bmxvYWQgPSB0cnVlO1xuXG4gICAgICBpZiAodW5kZWZpbmVkICE9PSBzYXZlZE1lZGlhICYmIE9iamVjdC5rZXlzKHNhdmVkTWVkaWEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGFyciA9IG51bGw7XG5cbiAgICAgICAgLy8gQ2hlY2sgZG93bmxvYWRhYmxlIGNvbnRlbnQgYmFzZWQgb24gbWVkaWEgdHlwZS5cbiAgICAgICAgaWYgKCR0aGlzLmRhdGEoJ3RhcmdldCcpID09PSAnZG9jdW1lbnRzJykge1xuICAgICAgICAgIGFyciA9IE9iamVjdC52YWx1ZXMoc2F2ZWRNZWRpYSkuZmlsdGVyKG1lZGlhID0+IG1lZGlhLmdlbmVyaWMgPT09ICdkb2NzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyID0gT2JqZWN0LnZhbHVlcyhzYXZlZE1lZGlhKS5maWx0ZXIobWVkaWEgPT4gbWVkaWEuZ2VuZXJpYyAhPT0gJ2RvY3MnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZlbnREb3dubG9hZCA9IGFyci5sZW5ndGggPT09IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2ZW50RG93bmxvYWQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnRG93bmxvYWQgc3RvcHBlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKFwiLnJlc291cmNlLWxpc3QsIC5zZWxlY3RlZC1yZXNvdXJjZXNcIikub24oXCJjbGlja1wiLCBcIi5yZXNvdXJjZS1jb250YWluZXIgLnBsYXktdmlkZW8tYnRuXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBjbGlja2VkID0gJCh0aGlzKTtcbiAgICBjb25zdCB2aWRlb0NvbnRhaW5lciA9IGNsaWNrZWQuc2libGluZ3MoXCJpZnJhbWVcIikuZmlyc3QoKTtcblxuICAgIGNsaWNrZWQuaGlkZSgpO1xuICAgIHZpZGVvQ29udGFpbmVyLmF0dHIoXCJzcmNcIiwgdmlkZW9Db250YWluZXIuYXR0cihcImRhdGEtc3JjXCIpKTtcbiAgfSk7XG59OyIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgbWVudXMgPSAkKCcjaGVhZGVyJykuYWRkKCcucmVnaW9uLW1vYmlsZScpLmZpbmQoJy5ibG9jay1tZW51IC5tZW51Jyk7XG4gIGNvbnN0IGhlYWRlcnMgPSBtZW51cy5maW5kKCcubGV2ZWwtLTEnKTtcblxuICBoZWFkZXJzLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgY29uc3QgaGVhZGVyID0gJCh0aGlzKTtcblxuICAgIG1lbnVzLmZpbmQoJy5zdWInKS5yZW1vdmVDbGFzcygnc3ViLS1vcGVuJyk7XG5cbiAgICBpZiAoaGVhZGVyLmhhc0NsYXNzKCdleHBhbmQnKSkge1xuICAgICAgaGVhZGVyLnJlbW92ZUNsYXNzKCdleHBhbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcbiAgICAgIGhlYWRlcnMucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuXG4gICAgICBoZWFkZXIuYWRkQ2xhc3MoJ2V4cGFuZCcpXG4gICAgICAgIC5maW5kKCcuc3ViJykuYWRkQ2xhc3MoJ3N1Yi0tb3BlbicpO1xuICAgIH1cbiAgfSk7XG5cbiAgJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJzLmZpbHRlcignLmV4cGFuZCcpO1xuICAgIGNvbnN0IG1lbnUgPSBoZWFkZXIuY2xvc2VzdCgnLmJsb2NrLW1lbnUnKTtcblxuICAgIGlmIChtZW51LmZpbmQoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgIGhlYWRlcnMucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuICAgICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBmdW5jdGlvbiBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKCRnYWxsZXJ5LCAkcmVzb3VyY2VJdGVtLCAkcHJldiwgJG5leHQpIHtcbiAgICBsZXQgbWVkaWFTb3VyY2UgPSAkcmVzb3VyY2VJdGVtLmZpbmQoJy5yZXNvdXJjZScpLmZpcnN0KCkuYXR0cignaHJlZicpO1xuICAgIFxuICAgIGlmICgkcmVzb3VyY2VJdGVtLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAkZ2FsbGVyeS5maW5kKCcuZ2FsbGVyeS1jb250ZW50JykuZmlyc3QoKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGdhbGxlcnkuZmluZCgnLmdhbGxlcnktY29udGVudCcpLmZpcnN0KCkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgfVxuXG4gICAgJGdhbGxlcnkuZmluZCgnI2dhbGxlcnktbWVkaWEnKVxuICAgICAgLmF0dHIoJ3NyYycsIG1lZGlhU291cmNlKVxuICAgICAgLmRhdGEoJ21lZGlhJywgJHJlc291cmNlSXRlbS5jaGlsZHJlbignLm1lZGlhJykuZmlyc3QoKS5hdHRyKCdpZCcpKTtcbiAgICAkZ2FsbGVyeS5maW5kKCcubWVkaWEtZG93bmxvYWQnKS5maXJzdCgpLmF0dHIoJ2hyZWYnLCBtZWRpYVNvdXJjZSk7XG4gICAgJGdhbGxlcnkuZmluZCgnLmNvbnRyb2wubmV4dCcpLmZpcnN0KCkuZGF0YSgndGFyZ2V0JywgJG5leHQubGVuZ3RoID09PSAwID8gbnVsbCA6ICRuZXh0KTtcbiAgICAkZ2FsbGVyeS5maW5kKCcuY29udHJvbC5wcmV2JykuZmlyc3QoKS5kYXRhKCd0YXJnZXQnLCAkcHJldi5sZW5ndGggPT09IDAgPyBudWxsIDogJHByZXYpO1xuICB9XG5cbiAgY29uc3QgJGdhbGxlcmllcyA9ICQoJy5nYWxsZXJ5Jyk7XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5nYWxsZXJ5LWNhbGxlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkY2xpY2tlZCA9ICQodGhpcyk7XG4gICAgY29uc3QgJHJlc291cmNlSXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJGNsaWNrZWQuZGF0YSgncGFyZW50JykpO1xuXG4gICAgc2V0R2FsbGVyeURpc3BsYXlNZWRpYShcbiAgICAgICQoJGNsaWNrZWQuZGF0YSgndGFyZ2V0JykpLFxuICAgICAgJGNsaWNrZWQuY2xvc2VzdCgkY2xpY2tlZC5kYXRhKCdwYXJlbnQnKSksXG4gICAgICAkcmVzb3VyY2VJdGVtLnByZXYoKSxcbiAgICAgICRyZXNvdXJjZUl0ZW0ubmV4dCgpXG4gICAgKTtcbiAgfSk7XG5cbiAgJGdhbGxlcmllcy5vbignY2xpY2snLCAnLmNvbnRyb2wnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJGNsaWNrZWQgPSAkKHRoaXMpO1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkY2xpY2tlZC5kYXRhKCd0YXJnZXQnKTsgLy8gTmV4dCBvciBwcmV2IG1lZGlhIHRvIHNob3cuXG5cbiAgICBpZiAoISR0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKFxuICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLmdhbGxlcnknKSxcbiAgICAgICR0YXJnZXQsXG4gICAgICAkdGFyZ2V0LnByZXYoKSxcbiAgICAgICR0YXJnZXQubmV4dCgpXG4gICAgKTtcbiAgfSk7XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAvLyBTaG93IG1vZGFsLlxuICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLm1vZGFsLWNhbGxlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKCQodGhpcykuYXR0cignZGF0YS10YXJnZXQnKSArICcubW9kYWwnKS5hZGRDbGFzcygnc2hvdycpO1xuICB9KTtcblxuICAvLyBDbG9zZSBtb2RhbC5cbiAgJCgnLmNsb3NlLW1vZGFsJykuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCB0YXJnZXQgPSAkdGhpcy5kYXRhKCd0YXJnZXQnKTtcbiAgICBsZXQgJG1vZGFsID0gbnVsbDtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICRtb2RhbCA9ICQodGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJG1vZGFsID0gJHRoaXMuY2xvc2VzdCgnLm1vZGFsJyk7XG4gICAgfVxuXG4gICAgJG1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgJCgnI3BkZi1jb250YWluZXInLCAkbW9kYWwpLnJlbW92ZSgpO1xuICB9KTtcblxuICAvLyBDbG9zZSBhbGwgbW9kYWxzIHdoZW5ldmVyIHVzZXIgY2xpY2tzIG91dHNpZGUgbW9kYWwuXG4gICQod2luZG93KS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgJG1vZGFsID0gJChlLnRhcmdldCk7XG5cbiAgICBpZiAoJG1vZGFsLmlzKCcubW9kYWwnKSAmJiAkbW9kYWwuaGFzQ2xhc3MoJ3Nob3cnKSkge1xuICAgICAgJG1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgICAkKCcjcGRmLWNvbnRhaW5lcicsICRtb2RhbCkucmVtb3ZlKCk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMubW90aW9uc19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJCgnI3ZpZXdzLWV4cG9zZWQtZm9ybS1tb3Rpb25zLWJsb2NrLW1vdGlvbi1wbGF0Zm9ybScpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwidHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLXR5cGUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1R5cGUnKSxcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJzdGF0dXNcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi1zdGF0dXMnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1N0YXR1cycpLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImNyZWF0ZWRfeWVhclwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLWNyZWF0ZWQteWVhcicpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnWWVhcicpLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgZXJyb3JMb2FkaW5nID0gRHJ1cGFsLnQoJ1RoZSByZXN1bHRzIGNvdWxkIG5vdCBiZSBsb2FkZWQuJyk7XG4gIGNvbnN0IGxvYWRpbmdNb3JlID0gRHJ1cGFsLnQoJ0xvYWRpbmcgbW9yZSByZXN1bHRzJyk7XG4gIGNvbnN0IG5vUmVzdWx0cyA9IERydXBhbC50KCdObyByZXN1bHRzIGZvdW5kJyk7XG4gIGNvbnN0IHNlYXJjaGluZyA9IERydXBhbC50KCdTZWFyY2hpbmcnKTtcbiAgY29uc3QgbWF4aW11bVNlbGVjdGVkID0gRHJ1cGFsLnQoJ1lvdSBjYW4gb25seSBzZWxlY3QgJW1heGltdW0gaXRlbScpO1xuICBjb25zdCBpbnB1dFRvb0xvbmcgPSBEcnVwYWwudCgnUGxlYXNlIGRlbGV0ZSAlbnVtYmVyIGNoYXJhY3RlcicpO1xuICBjb25zdCBpbnB1dFRvb1Nob3J0ID0gRHJ1cGFsLnQoJ1BsZWFzZSBlbnRlciAlbnVtYmVyIG9yIG1vcmUgY2hhcmFjdGVycycpO1xuICBjb25zdCBzZWxlY3RvciA9ICcjYmxvY2stbmV3cy1wYWdlLWZpbHRlcnMsICN2aWV3cy1leHBvc2VkLWZvcm0tYWRyaWEtYmFsa2FuLW5ld3NmZWVkLXBhZ2UnO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IERydXBhbC50KCdDYXRlZ29yeScpO1xuXG4gIERydXBhbC5iZWhhdmlvcnMubmV3c19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogKGNvbnRleHQsIHNldHRpbmdzKSA9PiB7XG4gICAgICAkKHNlbGVjdG9yLCBjb250ZXh0KS5hZGRCYWNrKHNlbGVjdG9yKS5maXJzdCgpLmZpbmQoJ3NlbGVjdCcpLm9uY2UoJ3NlbGVjdDInKS5zZWxlY3QyKHtcbiAgICAgICAgLy8gVG8gaGlkZSBzZWFyY2ggYm94XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgZXJyb3JMb2FkaW5nOiAoKSA9PiBlcnJvckxvYWRpbmcsXG4gICAgICAgICAgbG9hZGluZ01vcmU6ICgpID0+IGxvYWRpbmdNb3JlLFxuICAgICAgICAgIG5vUmVzdWx0czogKCkgPT4gbm9SZXN1bHRzLFxuICAgICAgICAgIHNlYXJjaGluZzogKCkgPT4gc2VhcmNoaW5nLFxuICAgICAgICAgIG1heGltdW1TZWxlY3RlZDogKHsgbWF4aW11bSB9KSA9PiBtYXhpbXVtU2VsZWN0ZWQucmVwbGFjZSgnJW1heGltdW0nLCBtYXhpbXVtKSxcbiAgICAgICAgICBpbnB1dFRvb0xvbmc6ICh7IG1heGltdW0sIGlucHV0OiB7IGxlbmd0aCB9IH0pID0+IGlucHV0VG9vTG9uZy5yZXBsYWNlKCclbnVtYmVyJywgbGVuZ3RoIC0gbWF4aW11bSksXG4gICAgICAgICAgaW5wdXRUb29TaG9ydDogKHsgbWluaW11bSwgaW5wdXQ6IHsgbGVuZ3RoIH0gfSkgPT4gaW5wdXRUb29TaG9ydC5yZXBsYWNlKCclbnVtYmVyJywgbWluaW11bSAtIGxlbmd0aCksXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnZGVib3VuY2UnO1xuaW1wb3J0IGJyZWFrcG9pbnRzLCB7IGtleXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBwYXJhZ3JhcGggPSAkKCcucGFyYWdyYXBoLS10eXBlLS1wYXJ0bmVycy1saXN0Jyk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHBhcmFncmFwaC5maW5kKCcudmlldy1jb250ZW50Jyk7XG5cbiAgY29udGFpbmVyXG4gICAgLmFkZENsYXNzKCdvd2wtY2Fyb3VzZWwgb3dsLXRoZW1lJylcbiAgICAub3dsQ2Fyb3VzZWwoe1xuICAgICAgcmV3aW5kOiBmYWxzZSxcbiAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICBjZW50ZXI6IHRydWUsXG4gICAgICBkb3RzOiBmYWxzZSxcbiAgICAgIGF1dG9wbGF5OiB0cnVlLFxuICAgICAgYXV0b3BsYXlIb3ZlclBhdXNlOiB0cnVlLFxuICAgICAgcmVzcG9uc2l2ZToge1xuICAgICAgICAnMCc6IHtcbiAgICAgICAgICBtYXJnaW46IDE1XG4gICAgICAgIH0sXG4gICAgICAgICc3NjgnOiB7XG4gICAgICAgICAgbWFyZ2luOiAzMFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcbiAgY29uc3QgJGJvZHkgPSAkZG9jdW1lbnQuZmluZCgnYm9keScpO1xuICBjb25zdCBjYWxsZXJzID0gJCgnLnBvcHVwLWNhbGxlcicpO1xuICBjb25zdCBwb3B1cHMgPSAkKCcucG9wdXAnKTtcbiAgY29uc3Qgb3ZlcmxheSA9ICgpID0+ICQoJzxkaXY+JykuYXR0cignaWQnLCAnb3ZlcmxheScpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZXIoZSkge1xuICAgIGNvbnN0IHsgY2FsbGVyLCBwb3B1cCB9ID0gZS5kYXRhO1xuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIGlmIGN1cnJlbnQgY2FsbGVyIGRvZXNuJ3Qgc2VsZWN0ZWRcbiAgICAvLyBvdGhlcnMgbWlnaHQgYmUsIHNvIGxldCdzIGNsZWFyIHRoZW1cbiAgICBpZiAoIWNhbGxlci5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgY2xvc2VBbGwoKTtcbiAgICB9XG5cbiAgICBjYWxsZXIudG9nZ2xlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgcG9wdXAudG9nZ2xlQ2xhc3MoJ29wZW5lZCcpO1xuICAgICRkb2N1bWVudC50cmlnZ2VyKCdwb3B1cC5vcGVuZWQnLCBbcG9wdXBdKTtcbiAgICAkYm9keS50b2dnbGVDbGFzcygncG9wdXAtb3BlbmVkJyk7XG5cbiAgICBpZiAocG9wdXAuaGFzQ2xhc3MoJ3dpdGgtb3ZlcmxheScpKSB7XG4gICAgICBjb25zdCBvbCA9IG92ZXJsYXkoKTtcblxuICAgICAgcG9wdXAuYmVmb3JlKCBvbCApO1xuICAgICAgb2wuZmFkZUluKDI1MCk7XG4gICAgICAkYm9keS5hZGRDbGFzcygnY2xpcCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlQWxsKCkge1xuICAgIGNhbGxlcnMucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgcG9wdXBzLnJlbW92ZUNsYXNzKCdvcGVuZWQgZnVsbCcpO1xuICAgIHBvcHVwcy5wcmV2KCcjb3ZlcmxheScpLnJlbW92ZSgpO1xuICAgICRib2R5LnJlbW92ZUNsYXNzKCdjbGlwJykucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW5lZCcpO1xuICB9XG5cbiAgY2FsbGVycy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGNhbGxlciA9ICQodGhpcyk7XG4gICAgY29uc3QgcG9wdXBTZWxlY3RvciA9IGNhbGxlci5kYXRhKCdwb3B1cCcpO1xuICAgIGxldCBwb3B1cDtcblxuICAgIGlmIChwb3B1cFNlbGVjdG9yKSB7XG4gICAgICBwb3B1cCA9ICQocG9wdXBTZWxlY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcHVwID0gY2FsbGVyLnBhcmVudCgpLmZpbmQoJy5wb3B1cCcpO1xuICAgIH1cblxuICAgIGlmIChwb3B1cC5sZW5ndGgpIHtcbiAgICAgIGNhbGxlci5jbGljayh7Y2FsbGVyLCBwb3B1cH0sIGhhbmRsZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcG9wdXBzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcG9wdXAgPSAkKHRoaXMpO1xuICAgIGNvbnN0IGNsb3NlID0gcG9wdXAuZmluZCgnLmNsb3NlJyk7XG4gICAgY29uc3QgZnVsbCA9IHBvcHVwLmZpbmQoJy5wb3B1cC1zd2l0Y2gtZnVsbCcpO1xuXG4gICAgY2xvc2UuY2xpY2soY2xvc2VBbGwpO1xuXG4gICAgZnVsbC5jbGljaygoKSA9PiBmdWxsLmNsb3Nlc3QoJy5wb3B1cCcpLmFkZENsYXNzKCdmdWxsJykpO1xuICB9KTtcblxuICAkYm9keS5jbGljaygoZSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIGNsaWNrIG9uIGRvY3VtZW50IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggcG9wdXAgd2luZG93LFxuICAgIC8vIGlmIG5vdCBjbG9zZSBhY3RpdmUgcG9wdXAgYW5kIHVuc2VsZWN0IGNhbGxlclxuICAgIGlmICghJChlLnRhcmdldCkuY2xvc2VzdChwb3B1cHMpLmxlbmd0aCkge1xuICAgICAgY2xvc2VBbGwoKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjYXNlTGlzdFZpZXdzQmxvY2tTZWxlY3RvciA9ICcjYmxvY2stdmlld3MtYmxvY2stYXJ0aWNsZS1saXN0LXF1aWNrLWJsb2NrLXByb2Nlc3MtbGlzdCc7XG4gIGNvbnN0IHRvcGljUGxhY2Vob2xkZXIgPSBEcnVwYWwudCgnVG9waWMnKTtcbiAgY29uc3Qgc3RhdHVzUGxhY2Vob2xkZXIgPSBEcnVwYWwudCgnU3RhdHVzJyk7XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy5wcm9jZXNzZXNfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwic3RhdHVzXCJdJykub25jZSgnc2VsZWN0Mi1zdGF0dXMnKS5zZWxlY3QyKHtcbiAgICAgICAgLy8gVG8gaGlkZSBzZWFyY2ggYm94LlxuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBzdGF0dXNQbGFjZWhvbGRlcixcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJ0b3BpY1wiXScpLm9uY2UoJ3NlbGVjdDItdG9waWMnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogdG9waWNQbGFjZWhvbGRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IGhhc2ggZnJvbSAnLi9oYXNoJztcbmltcG9ydCBzY3JvbGxEaXJlY3Rpb24gZnJvbSAnLi9zY3JvbGwtZGlyZWN0aW9uJztcblxuY29uc3QgJHdpbmRvdyA9ICQod2luZG93KTtcbmNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuY29uc3QgJGhlYWRlciA9ICQoJyNoZWFkZXInKTtcbmNvbnN0ICRxdWlja19saW5rcyA9ICQoJy5xdWljay1saW5rcycpO1xuY29uc3QgJHBsYWNlaG9sZGVyID0gJHF1aWNrX2xpbmtzLmZpbmQoJy5maXhlZC1wbGFjZWhvbGRlcicpO1xuXG5mdW5jdGlvbiBjbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICBjb25zdCBpZCA9IHRoaXMuaGFzaC5zdWJzdHJpbmcoMSk7XG4gIGNvbnN0ICRkZXN0aW5hdGlvbkVsZW1lbnQgPSAkKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgKTtcbiAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VJbnQoJGJvZHkuY3NzKCdwYWRkaW5nLXRvcCcpKSArICRoZWFkZXIuaGVpZ2h0KCkgKyAkcXVpY2tfbGlua3MuaGVpZ2h0KCk7XG5cbiAgaGFzaC51cGRhdGUoJyMnICsgaWQpO1xuXG4gICQoJ2h0bWwsIGJvZHknKS5kZWxheSgxMCkuYW5pbWF0ZSh7XG4gICAgc2Nyb2xsVG9wOiAkZGVzdGluYXRpb25FbGVtZW50Lm9mZnNldCgpLnRvcCAtIG9mZnNldFxuICB9LCA3MDApO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreSgpIHtcbiAgaWYgKGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzKSB7XG4gICAgc2Nyb2xsSGFuZGxlcigpO1xuICAgICR3aW5kb3cub24oJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIpO1xuICB9IGVsc2Uge1xuICAgICR3aW5kb3cub2ZmKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyKTtcbiAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ2ZpeGVkIHVwIGRvd24nKTtcbiAgICAkcGxhY2Vob2xkZXIucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxIYW5kbGVyKCkge1xuICBjb25zdCB0b3AgPSAkd2luZG93LnNjcm9sbFRvcCgpICsgJGhlYWRlci5oZWlnaHQoKSArIHBhcnNlSW50KCRib2R5LmNzcygncGFkZGluZy10b3AnKSk7XG4gIGNvbnN0IHNkID0gc2Nyb2xsRGlyZWN0aW9uKCk7XG5cbiAgaWYgKCRxdWlja19saW5rcy5vZmZzZXQoKS50b3AgPD0gdG9wKSB7XG4gICAgJHBsYWNlaG9sZGVyLmhlaWdodCgkcXVpY2tfbGlua3MuaGVpZ2h0KCkpO1xuICAgICRxdWlja19saW5rcy5hZGRDbGFzcygnZml4ZWQnKTtcblxuICAgIHN3aXRjaChzZCkge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ2Rvd24nKS5hZGRDbGFzcygndXAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgJHF1aWNrX2xpbmtzLnJlbW92ZUNsYXNzKCd1cCcpLmFkZENsYXNzKCdkb3duJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ2ZpeGVkIHVwIGRvd24nKTtcbiAgICAkcGxhY2Vob2xkZXIucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGlmICgkcXVpY2tfbGlua3MubGVuZ3RoKSB7XG4gICAgaXNTdGlja3koKTtcbiAgICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIoaXNTdGlja3kpO1xuXG4gICAgJHF1aWNrX2xpbmtzLmZpbmQoJ2EnKS5jbGljayhjbGlja0hhbmRsZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5jb25zdCBnZXRQYWdlWU9mZnNldCA9ICgpID0+IE1hdGgucm91bmQod2luZG93LnBhZ2VZT2Zmc2V0KTtcbmxldCBsYXN0U2Nyb2xsVG9wID0gZ2V0UGFnZVlPZmZzZXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjdXJyZW50U2Nyb2xsVG9wID0gZ2V0UGFnZVlPZmZzZXQoKTtcbiAgY29uc3QgZGlyZWN0aW9uID0gY3VycmVudFNjcm9sbFRvcCA+IGxhc3RTY3JvbGxUb3AgPyAnZG93bicgOiAndXAnO1xuXG4gIGxhc3RTY3JvbGxUb3AgPSBnZXRQYWdlWU9mZnNldCgpO1xuXG4gIHJldHVybiBkaXJlY3Rpb247XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJyNibG9jay12aWV3cy1ibG9jay1mZWF0dXJlZC1jb250ZW50LWJsb2NrLTEgLnZpZXctY29udGVudCcpXG4gICAgLmFkZENsYXNzKCdvd2wtY2Fyb3VzZWwgb3dsLXRoZW1lJylcbiAgICAub3dsQ2Fyb3VzZWwoe1xuICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgIG1hcmdpbjogMTUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgICAgICBhdXRvV2lkdGg6IHRydWUsXG4gICAgICAgICAgc2xpZGVCeTogMSxcbiAgICAgICAgfSxcbiAgICAgICAgJzc2OCc6IHtcbiAgICAgICAgICBpdGVtczogMyxcbiAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxuICAgICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgICAgc2xpZGVCeTogMyxcbiAgICAgICAgfSxcbiAgICAgICAgJzEyODAnOiB7XG4gICAgICAgICAgaXRlbXM6IDQsXG4gICAgICAgICAgc2xpZGVCeTogNCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcuYmxvY2stc3lzdGVtIC52aWV3LXNlYXJjaCBpbnB1dFtuYW1lPVwic2VhcmNoXCJdJykuZmlyc3QoKS5mb2N1cygpO1xuXG4gICQoZG9jdW1lbnQpLm9uKCdwb3B1cC5vcGVuZWQnLCBmdW5jdGlvbihlLCBwb3B1cCkge1xuICAgIGlmIChwb3B1cC5oYXNDbGFzcygnc2VhcmNoJykpIHtcbiAgICAgIHBvcHVwLmZpbmQoJy52aWV3LXNlYXJjaCBpbnB1dFtuYW1lPVwic2VhcmNoXCJdJykuZmlyc3QoKS5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5zZWxlY3QyJykuc2VsZWN0Mih7XG4gICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDIwXG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjb250YWluZXIgPSAkKCcuc2xpZGVyJykuZXEoMCk7XG4gIGNvbnN0IHNsaWRlciA9ICQoJy5zbGlkZXMnLCBjb250YWluZXIpO1xuICBjb25zdCBjb250ZW50Qm94ZXMgPSBzbGlkZXIuZmluZCgnLnNsaWRlX2NvbnRlbnQnKTtcblxuICBpZiAoc2xpZGVyLmNoaWxkcmVuKCkubGVuZ3RoIDwgMikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNsaWRlci5ieFNsaWRlcih7XG4gICAgYXV0bzogdHJ1ZSxcbiAgICBwYXVzZTogNTAwMCxcbiAgICBhdXRvSG92ZXI6IHRydWUsXG4gICAgY29udHJvbHM6IGZhbHNlLFxuICAgIHByZWxvYWRJbWFnZXM6ICdhbGwnLFxuICAgIG9uU2xpZGVyTG9hZDogKCkgPT4ge1xuICAgICAgY2hlY2tEaW1lbnNpb25zKCk7XG4gICAgICBjaGVja0Rlc2NyaXB0aW9uSGVpZ2h0KCk7XG4gICAgfSxcbiAgICBvblNsaWRlclJlc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgICBjaGVja0RpbWVuc2lvbnMoKTtcbiAgICAgIGNoZWNrRGVzY3JpcHRpb25IZWlnaHQoKTtcbiAgICB9LFxuICAgIG9uU2xpZGVCZWZvcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgY2hlY2tEaW1lbnNpb25zKCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gY29udGFpbmVyLmZpbmQoJy5ieC12aWV3cG9ydCcpLm9mZigndG91Y2hzdGFydCcpO1xuXG4gIHNsaWRlci5maW5kKCdhJykubm90KCcudXNlLWFqYXgnKS5jbGljayhmdW5jdGlvbihldmVudCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG4gIH0pO1xuXG4gICQoJy5uZXh0JywgY29udGFpbmVyKS5jbGljaygoKSA9PiBzbGlkZXIuZ29Ub05leHRTbGlkZSgpKTtcbiAgJCgnLnByZXYnLCBjb250YWluZXIpLmNsaWNrKCgpID0+IHNsaWRlci5nb1RvUHJldlNsaWRlKCkpO1xuXG4gIGZ1bmN0aW9uIGNoZWNrRGltZW5zaW9ucygpIHtcbiAgICBjb25zdCB2aWV3SGVpZ2h0ID0gY29udGFpbmVyLmhlaWdodCgpO1xuICAgIGNvbnN0IHZpZXdXaWR0aCA9IGNvbnRhaW5lci53aWR0aCgpO1xuICAgIGNvbnN0IHZpZXdSYXRpbyA9IHZpZXdXaWR0aCAvIHZpZXdIZWlnaHQ7XG5cbiAgICBzbGlkZXIuZmluZCgnLnNsaWRlJylcbiAgICAgIC5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNsaWRlID0gJChub2RlKTtcbiAgICAgICAgY29uc3QgbWVkaWEgPSBzbGlkZS5maW5kKCcuc2xpZGUtLWJhY2tncm91bmQnKS5maW5kKCd2aWRlbycpLmVxKDApO1xuICAgICAgICBjb25zdCBtZWRpYUhlaWdodCA9IG1lZGlhLmhlaWdodCgpO1xuICAgICAgICBjb25zdCBtZWRpYVdpZHRoID0gbWVkaWEud2lkdGgoKTtcbiAgICAgICAgbGV0IG1lZGlhUmF0aW8gPSAwO1xuXG4gICAgICAgIGlmIChtZWRpYS5kYXRhKCdyYXRpbycpKSB7XG4gICAgICAgICAgbWVkaWFSYXRpbyA9IG1lZGlhLmRhdGEoJ3JhdGlvJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVkaWFSYXRpbyA9IG1lZGlhV2lkdGggLyBtZWRpYUhlaWdodDtcbiAgICAgICAgICBtZWRpYS5kYXRhKCdyYXRpbycsIG1lZGlhUmF0aW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVkaWFSYXRpbyA8IHZpZXdSYXRpbyA/IHNsaWRlLmFkZENsYXNzKCdhbHQnKSA6IHNsaWRlLnJlbW92ZUNsYXNzKCdhbHQnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tEZXNjcmlwdGlvbkhlaWdodCgpIHtcbiAgICBjb25zdCAkYm94ZXMgPSBzbGlkZXIuZmluZCgnLnNsaWRlX2NvbnRlbnQnKTtcblxuICAgICRib3hlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgJGJveCA9ICQodGhpcyk7XG4gICAgICBjb25zdCAkZGVzYyA9ICRib3guY2hpbGRyZW4oJy5kZXNjcmlwdGlvbicpO1xuICAgICAgY29uc3QgJHAgPSAkZGVzYy5maW5kKCdwJyk7XG5cbiAgICAgIC8vIFNvbWUgc2xpZGVzIG1pZ2h0IG5vdCBoYXMgYSBkZXNjcmlwdGlvblxuICAgICAgLy8gc28gbGV0J3MgY2hlY2sgaXRcbiAgICAgIGlmICgkcC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ291bGQgaGFwcGVuZCB0aGF0IHZpc2libGUgaGVpZ2h0IG9mIC5kZXNjcmlwdGlvbiBlbGVtZW50IGlzIGV2ZW5cbiAgICAgICAgLy8gc21hbGxlciB0aGFuIGxpbmUtaGVpZ2h0IG9mIHAgZWxlbWVudCB3aGljaCB3aWxsIGNhdXNlIGl0IHRvIGJlIHNoYXZlZFxuICAgICAgICAvLyB0byAwIGxpbmVzLiBTbyB3ZSBwaWNrIHdoYXQncyBiaWdnZXIgZnJvbSB0aGUgbGluZS1oZWlnaHQgYW5kIG1heEhlaWdodFxuICAgICAgICAkcC5zaGF2ZShNYXRoLm1heCgkZGVzYy5oZWlnaHQoKSwgcGFyc2VGbG9hdCgkcC5jc3MoJ2xpbmUtaGVpZ2h0JykpKSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBzdGlja3lFbGVtZW50cyA9ICQoXCIucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIik7XG4gIGNvbnN0IHN0aWNreUJQID0gd2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiAxMDI0cHgpXCIpOyAvLyBzdGljayBvbmx5IGlmIHNjcmVlbiB3aWR0aCA+PSAxMDI0XG5cbiAgJChcIi5idWxsZXQtbGlzdCBsaTpmaXJzdC1vZi10eXBlIC5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKVxuICAgIC5hZGRDbGFzcyhcImN1cnJlbnRcIik7XG5cbiAgY2FuU3RpY2soKTtcbiAgc3RpY2t5QlAuYWRkTGlzdGVuZXIoY2FuU3RpY2spO1xuXG4gICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHN0aWNreUJQLm1hdGNoZXMpIHtcbiAgICAgIGxldCBlbGVtID0gYWJvdmVCb3JkZXIoJChcIi5zdGF0aWMtY29udGVudFwiKSk7XG5cbiAgICAgIGlmIChlbGVtKSB7IC8vIGlmIGFueSBlbGVtZW50IGF0IHRoZSB0b3BcbiAgICAgICAgdG9nZ2xlU3RpY2t5KCAvLyBtYWtlIGl0IHZpc2libGUgYW5kIGhpZGUgb3RoZXJzXG4gICAgICAgICAgZWxlbS5jbG9zZXN0KFwibGlcIikuZmluZChcIi5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKS5maXJzdCgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBmdW5jdGlvbiBjYW5TdGljaygpIHtcbiAgICBpZiAoc3RpY2t5QlAubWF0Y2hlcykge1xuICAgICAgbWFrZV9zdGlja3koKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RpY2t5RWxlbWVudHMudHJpZ2dlcihcInN0aWNreV9raXQ6ZGV0YWNoXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhc3QgZWxlbWVudCB3aXRoIHBvc2l0aW9uIGFib3ZlIGJvcmRlclxuICAgKlxuICAgKiBAcGFyYW0galF1ZXJ5IGVsZW1lbnRzXG4gICAqIEBwYXJhbSBpbnQgYm9yZGVyXG4gICAqXG4gICAqIEByZXR1cm4galF1ZXJ5XG4gICAqL1xuICBmdW5jdGlvbiBhYm92ZUJvcmRlcihlbGVtZW50cywgYm9yZGVyID0gMjEwKSB7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG5cbiAgICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGtleSwgZWxlbSkge1xuICAgICAgbGV0IHRvcCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG4gICAgICBpZiAodG9wIDw9IGJvcmRlcikge1xuICAgICAgICByZXN1bHQgPSBlbGVtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdCA/ICQocmVzdWx0KSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgZWxlbSBhbmQgaGlkZXMgb3RoZXIgc3RpY2t5IGVsZW1lbnRzXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHN0aWNreSBlbGVtZW50cyBhcmUgaGlkZGVuLlxuICAgKiBDbGFzcyAnLmN1cnJlbnQnIG1ha2VzIHN0aWNreSBlbGVtZW50IHZpc2libGUuXG4gICAqL1xuICBmdW5jdGlvbiB0b2dnbGVTdGlja3koZWxlbSkge1xuICAgIGlmICghZWxlbS5oYXNDbGFzcyhcImN1cnJlbnRcIikpIHtcbiAgICAgICQoXCJsaSAucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnQuY3VycmVudFwiKS5yZW1vdmVDbGFzcyhcImN1cnJlbnRcIik7XG4gICAgICBlbGVtLmFkZENsYXNzKFwiY3VycmVudFwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlX3N0aWNreSgpIHtcbiAgICAkKFwiLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC1idWxsZXQtbGlzdCAucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIilcbiAgICAgIC5zdGlja19pbl9wYXJlbnQoe1xuICAgICAgICBwYXJlbnQ6IFwiLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC1idWxsZXQtbGlzdFwiLFxuICAgICAgICBvZmZzZXRfdG9wOiAyMDAsXG4gICAgICAgIHNwYWNlcjogZmFsc2VcbiAgICAgIH0pO1xuICAgICQoXCJsaSAucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIikuc3RpY2tfaW5fcGFyZW50KHtcbiAgICAgIC8vIHBhcmVudDogXCJsaVwiLFxuICAgICAgcGFyZW50OiBcInVsXCIsLy8gXCIucGFyYWdyYXBoLS10eXBlLS1jdXN0b20tYnVsbGV0LWxpc3RcIixcbiAgICAgIG9mZnNldF90b3A6IDIwMCxcbiAgICAgIHNwYWNlcjogZmFsc2UsXG4gICAgICByZWNhbGNfZXZlcnk6IDEwXG4gICAgfSk7XG4gIH1cbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5jdXN0b20tdGFicycpLm9uKCdjbGljaycsICcuY3VzdG9tLXRhYnMtLW5hdi1pdGVtJywgZnVuY3Rpb24oZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJHBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdGFicycpO1xuXG4gICAgLy8gU2V0IGFjdGl2ZSB0YWIuXG4gICAgaWYgKCRwYXJlbnQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJHRoaXMuZGF0YSgndGFyZ2V0Jyk7XG5cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgJCgnLmN1c3RvbS10YWJzLS1pdGVtJywgJHBhcmVudCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAkKGAjJHt0YXJnZXR9YCwgJHBhcmVudCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgICAgIC8vIFNldCBhY3RpdmUgbmF2IGl0ZW0uXG4gICAgICAgIGNvbnN0ICRwYXJlbnROYXYgPSAkdGhpcy5jbG9zZXN0KCcuY3VzdG9tLXRhYnMtLW5hdicpO1xuXG4gICAgICAgIGlmICgkcGFyZW50TmF2Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAkKCcuY3VzdG9tLXRhYnMtLW5hdi1pdGVtJywgJHBhcmVudE5hdikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHRoaXMuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgJCgnLnRhYmJlZCcpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsKSB7XG4gICAgY29uc3QgJG1vYmlsZV9jb250YWluZXIgPSAkKCcubW9iaWxlJywgdGhpcyk7XG4gICAgY29uc3QgJG1vYmlsZV9zd2l0Y2hlcyA9ICQoJy50YWJfX3N3aXRjaCcsICRtb2JpbGVfY29udGFpbmVyKTtcbiAgICBjb25zdCAkbm9ybWFsX2NvbnRhaW5lciA9ICQoJy5ub3JtYWwnLCB0aGlzKTtcbiAgICBjb25zdCAkbm9ybWFsX3N3aXRjaGVzID0gJCgnLnRhYl9fc3dpdGNoJywgJG5vcm1hbF9jb250YWluZXIpO1xuICAgIGNvbnN0ICR0YWJzID0gJCgnLnRhYicsIHRoaXMpO1xuXG4gICAgJG5vcm1hbF9zd2l0Y2hlcy5jbGljayhmdW5jdGlvbihldmVudCkge1xuICAgICAgY29uc3QgJHN3aXRjaCA9ICQodGhpcyk7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICR0YWJzXG4gICAgICAgIC5hZGQoJG1vYmlsZV9zd2l0Y2hlcykuYWRkKCRub3JtYWxfc3dpdGNoZXMpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmZpbHRlcihgW2RhdGEtdGFiLWlkPSR7ICRzd2l0Y2guZGF0YSgndGFiLWlkJykgfV1gKVxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgICAkbm9ybWFsX2NvbnRhaW5lci5hZGRDbGFzcygnaGlkZScpO1xuICAgIH0pO1xuXG4gICAgJG1vYmlsZV9jb250YWluZXIuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAkbm9ybWFsX2NvbnRhaW5lci5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgYnJlYWtwb2ludHMgZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmNvbnN0ICR3aW5kb3cgPSAkKHdpbmRvdyk7XG5jb25zdCAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcbmNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuY29uc3QgJGhlYWRlciA9ICQoJyNoZWFkZXInKTtcbmNvbnN0ICRxdWlja0xpbmtzID0gJCgnLnF1aWNrLWxpbmtzJyk7XG5cbmNvbnN0ICRwYXJhZ3JhcGggPSAkKCcucGFyYWdyYXBoLS10eXBlLS10aW1lbGluZS1pbmZvcm1hdGlvbicpO1xuY29uc3QgJHNpZGViYXIgPSAkcGFyYWdyYXBoLmZpbmQoJy5zaWRlYmFyJyk7XG5jb25zdCAkY29udGVudCA9ICRwYXJhZ3JhcGguZmluZCgnLmNvbnRlbnQnKTtcbmNvbnN0ICR0aXRsZXNMaXN0ID0gJHBhcmFncmFwaC5maW5kKCcudGl0bGVzLWxpc3QnKTtcbmNvbnN0ICR0aXRsZXMgPSAkcGFyYWdyYXBoLmZpbmQoJy50aXRsZScpO1xuY29uc3QgJHBhbmVscyA9ICRwYXJhZ3JhcGguZmluZCgnLnBhbmVsJyk7XG5jb25zdCAkc3dpdGNoZXMgPSAkcGFyYWdyYXBoLmZpbmQoJy5wYW5lbC1zd2l0Y2gnKTtcbmNvbnN0ICRjb3ZlcnMgPSAkcGFyYWdyYXBoLmZpbmQoJy50aXRsZS1jb3ZlcicpO1xuXG5jb25zdCBzcGFjZXIgPSAzMDtcbmxldCBpc1N0dWNrID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNob3dUaXRsZXNMaXN0KCkge1xuICBjb25zdCAkY292ZXIgPSAkKHRoaXMpO1xuICBjb25zdCAkdGl0bGUgPSAkY292ZXIucGFyZW50KCk7XG4gIGNvbnN0IHRvcCA9ICR0aXRsZS5wb3NpdGlvbigpLnRvcCArICR0aXRsZS5oZWlnaHQoKTtcblxuICAkY292ZXJcbiAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICR0aXRsZXNMaXN0XG4gICAgLmFkZENsYXNzKCdzaG93JylcbiAgICAuY3NzKHsgdG9wIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlVGl0bGVzTGlzdCgpIHtcbiAgJHRpdGxlc0xpc3RcbiAgICAucmVtb3ZlQ2xhc3MoJ3Nob3cnKVxuICAgIC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXG4gICRjb3ZlcnNcbiAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xufVxuXG5mdW5jdGlvbiBzZXRBY3RpdmVUaXRsZShrZXkpIHtcbiAgJHRpdGxlc1xuICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAuZmlsdGVyKChpKSA9PiAkdGl0bGVzLmVxKGkpLmRhdGEoJ3RpbWVsaW5lJykgPT0ga2V5KVxuICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKTtcbn1cblxuZnVuY3Rpb24gc2V0QWN0aXZlUGFuZWwoaWQpIHtcbiAgJGNvbnRlbnRcbiAgICAuaGVpZ2h0KCRjb250ZW50LmhlaWdodCgpKTtcblxuICAkcGFuZWxzXG4gICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgIC5maWx0ZXIoaWQpXG4gICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG5cbiAgJGNvbnRlbnRcbiAgICAucmVtb3ZlQXR0cignc3R5bGUnKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9QYW5lbCgpIHtcbiAgaWYgKGlzU3R1Y2spIHtcbiAgICAkd2luZG93LnNjcm9sbFRvcCgkY29udGVudC5vZmZzZXQoKS50b3AgLSBnZXRPZmZzZXQoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3dpdGNoUGFuZWwoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICBjb25zdCAkc3dpdGNoZXIgPSAkKHRoaXMpO1xuICBjb25zdCBpZCA9ICRzd2l0Y2hlci5hdHRyKCdocmVmJyk7XG4gIGNvbnN0IGtleSA9IGlkLnJlcGxhY2UoJyN0aW1lbGluZS0nLCAnJyk7XG5cbiAgaGlkZVRpdGxlc0xpc3QoKTtcbiAgc2V0QWN0aXZlVGl0bGUoa2V5KTtcbiAgc2V0QWN0aXZlUGFuZWwoaWQpO1xuICBzY3JvbGxUb1BhbmVsKCk7XG4gIHJlY2FsY1N0aWNreUtpdCgpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreSgpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBpbml0U3RpY2t5S2l0KCkge1xuICBjb25zdCBvZmZzZXRfdG9wID0gZ2V0T2Zmc2V0KCk7XG5cbiAgJHNpZGViYXJcbiAgICAub2ZmKCdzdGlja3lfa2l0OnN0aWNrIHN0aWNreV9raXQ6dW5zdGljaycpXG4gICAgLnRyaWdnZXIoJ3N0aWNreV9raXQ6ZGV0YWNoJylcbiAgICAuc3RpY2tfaW5fcGFyZW50KHsgb2Zmc2V0X3RvcCB9KVxuICAgIC5vbignc3RpY2t5X2tpdDpzdGljaycsICgpID0+IHsgaXNTdHVjayA9IHRydWUgfSlcbiAgICAub24oJ3N0aWNreV9raXQ6dW5zdGljaycsICgpID0+IHsgaXNTdHVjayA9IGZhbHNlIH0pO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95U3RpY2t5S2l0KCkge1xuICAkc2lkZWJhclxuICAgIC5vZmYoJ3N0aWNreV9raXQ6c3RpY2sgc3RpY2t5X2tpdDp1bnN0aWNrJylcbiAgICAudHJpZ2dlcignc3RpY2t5X2tpdDpkZXRhY2gnKTtcblxuICBpc1N0dWNrID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldCgpIHtcbiAgcmV0dXJuIERydXBhbC5kaXNwbGFjZS5jYWxjdWxhdGVPZmZzZXQoJ3RvcCcpICsgJGhlYWRlci5oZWlnaHQoKSArICgkcXVpY2tMaW5rcy5oZWlnaHQoKSB8fCAwKSArIHNwYWNlcjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RpY2t5S2l0KCkge1xuICBpZiAoaXNTdHVjaykge1xuICAgIGluaXRTdGlja3lLaXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNhbGNTdGlja3lLaXQoKSB7XG4gICRzaWRlYmFyXG4gICAgLnRyaWdnZXIoJ3N0aWNreV9raXQ6cmVjYWxjJyk7XG59XG5cbmZ1bmN0aW9uIHRlc3RTdGlja3lLaXQoKSB7XG4gIGlmIChpc1N0aWNreSgpKSB7XG4gICAgaW5pdFN0aWNreUtpdCgpO1xuXG4gICAgJGRvY3VtZW50Lm9uKCdkcnVwYWxWaWV3cG9ydE9mZnNldENoYW5nZScsIHVwZGF0ZVN0aWNreUtpdCk7XG4gIH0gZWxzZSB7XG4gICAgZGVzdHJveVN0aWNreUtpdCgpO1xuXG4gICAgJGRvY3VtZW50Lm9mZignZHJ1cGFsVmlld3BvcnRPZmZzZXRDaGFuZ2UnLCB1cGRhdGVTdGlja3lLaXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgdGVzdFN0aWNreUtpdCgpO1xuICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIodGVzdFN0aWNreUtpdCk7XG5cbiAgJGNvdmVycy5jbGljayhzaG93VGl0bGVzTGlzdCk7XG4gICRzd2l0Y2hlcy5jbGljayhzd2l0Y2hQYW5lbCk7XG5cbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKGlzU3RpY2t5KCkgJiYgIWlzU3R1Y2spIHtcbiAgICAgIGluaXRTdGlja3lLaXQoKTtcbiAgICB9XG4gIH0sIDE1MCk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGxpbmVIZWlnaHQgZnJvbSAnLi9saW5lSGVpZ2h0JztcbmltcG9ydCBicmVha3BvaW50cywgeyBrZXlzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZUJ5TGluZXMoJGVsZW1lbnQpIHtcbiAgY29uc3QgbGggPSBsaW5lSGVpZ2h0KCRlbGVtZW50KTtcbiAgY29uc3QgbGluZXMgPSBwYXJzZUludCgkZWxlbWVudC5kYXRhKCd0cnVuY2F0ZUxpbmVzJykpIHx8IDQ7XG5cbiAgJGVsZW1lbnQuc2hhdmUobGggKiBsaW5lcylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRydW5jYXRlQnlIZWlnaHQoJGVsZW1lbnQpIHtcbiAgY29uc3QgJGNvbnRhaW5lciA9ICRlbGVtZW50LmNoaWxkcmVuKCcudHJ1bmNhdGUtY29udGFpbmVyJyk7XG4gIGNvbnN0IG1heEhlaWdodCA9ICRlbGVtZW50LmhlaWdodCgpO1xuICBjb25zdCBtaW5IZWlnaHQgPSBsaW5lSGVpZ2h0KCRlbGVtZW50KTtcblxuICAkY29udGFpbmVyLnNoYXZlKE1hdGgubWF4KG1pbkhlaWdodCwgbWF4SGVpZ2h0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgRHJ1cGFsLmJlaGF2aW9ycy50cnVuY2F0ZUJ5SGVpZ2h0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgICQoJy50cnVuY2F0ZS1ieS1oZWlnaHQnLCBjb250ZXh0KS5vbmNlKCd0cnVuY2F0ZScpXG4gICAgICAgIC53cmFwSW5uZXIoJzxkaXYgY2xhc3M9XCJ0cnVuY2F0ZS1jb250YWluZXJcIj4nKVxuICAgICAgICAuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgICAgIHRydW5jYXRlQnlIZWlnaHQoJChub2RlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBEcnVwYWwuYmVoYXZpb3JzLnRydW5jYXRlQnlMaW5lcyA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICAkKCcudHJ1bmNhdGUtYnktbGluZXMnLCBjb250ZXh0KS5vbmNlKCd0cnVuY2F0ZScpXG4gICAgICAgIC5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgICAgdHJ1bmNhdGVCeUxpbmVzKCQobm9kZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LnZhbHVlcyhicmVha3BvaW50cy5taW4pLmZvckVhY2goKG1xKSA9PiB7XG4gICAgbXEuYWRkTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgJCgnLnRydW5jYXRlLWJ5LWhlaWdodCcpLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgdHJ1bmNhdGVCeUhlaWdodCgkKG5vZGUpKTtcbiAgICAgIH0pO1xuXG4gICAgICAkKCcudHJ1bmNhdGUtYnktbGluZXMnKS5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgIHRydW5jYXRlQnlMaW5lcygkKG5vZGUpKTtcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0pO1xufVxuIl19"}