} [schema] array of child variables if the variable is a context or list\n * @property {'function'|'variable'} [type] type of the variable\n * @property {Array<{name: string, type: string}>} [params] function parameters\n */\n\n/**\n * @typedef { {\n * dialect?: import('../language').Dialect,\n * variables?: Variable[],\n * builtins?: Variable[]\n * } } CoreConfig\n *\n * @typedef { import('@codemirror/autocomplete').CompletionSource } CompletionSource\n * @typedef { import('@codemirror/state').Extension } Extension\n */\n\n/**\n * @param { CoreConfig & { completions?: CompletionSource[] } } config\n *\n * @return { Extension }\n */\nfunction configure({\n dialect = 'expression',\n variables = [],\n builtins = [],\n completions: completions$1 = completions({ builtins, variables })\n}) {\n\n const context = createContext([ ...variables, ...builtins ]);\n\n return [\n dialectFacet.of(dialect),\n builtinsFacet.of(builtins),\n variablesFacet.of(variables),\n language({\n dialect,\n context,\n completions: completions$1\n })\n ];\n}\n\n/**\n * @param {import('@codemirror/state').EditorState } state\n *\n * @return { CoreConfig }\n */\nfunction get(state) {\n\n const builtins = state.facet(builtinsFacet)[0];\n const variables = state.facet(variablesFacet)[0];\n const dialect = state.facet(dialectFacet)[0];\n\n return {\n builtins,\n variables,\n dialect\n };\n}\n\nvar camundaTags = [\n\t{\n\t\tname: \"not(negand)\",\n\t\tdescription: \"Returns the logical negation of the given value.
\\nFunction signature
\\nnot(negand: boolean): boolean\\n \\nExamples
\\nnot(true)\\n// false\\n\\nnot(null)\\n// null\\n \\n\"\n\t},\n\t{\n\t\tname: \"is defined(value)\",\n\t\tdescription: \"Camunda Extension
\\nChecks if a given value is not null. If the value is null then the function returns false.\\nOtherwise, the function returns true.
\\nFunction signature
\\nis defined(value: Any): boolean\\n \\nExamples
\\nis defined(1)\\n// true\\n\\nis defined(null)\\n// false\\n\\nis defined(x)\\n// false - if no variable "x" exists\\n\\nis defined(x.y)\\n// false - if no variable "x" exists or it doesn't have a property "y"\\n \\n:::caution Breaking change
\\nThis function worked differently in previous versions. It returned true if the value was null.\\nSince this version, the function returns false if the value is null.
\\n:::
\\n\"\n\t},\n\t{\n\t\tname: \"get or else(value, default)\",\n\t\tdescription: \"Camunda Extension
\\nReturn the provided value parameter if not null, otherwise return the default parameter
\\nFunction signature
\\nget or else(value: Any, default: Any): Any\\n \\nExamples
\\nget or else("this", "default")\\n// "this"\\n\\nget or else(null, "default")\\n// "default"\\n\\nget or else(null, null)\\n// null\\n \\n\"\n\t},\n\t{\n\t\tname: \"assert(value, condition)\",\n\t\tdescription: \"Camunda Extension
\\nVerify that the given condition is met. If the condition is true, the function returns the value.\\nOtherwise, the evaluation fails with an error.
\\nFunction signature
\\nassert(value: Any, condition: Any)\\n \\nExamples
\\nassert(x, x != null)\\n// "value" - if x is "value"\\n// error - if x is null or doesn't exist\\n\\nassert(x, x >= 0)\\n// 4 - if x is 4\\n// error - if x is less than zero\\n \\n\"\n\t},\n\t{\n\t\tname: \"assert(value, condition, cause)\",\n\t\tdescription: \"Camunda Extension
\\nVerify that the given condition is met. If the condition is true, the function returns the value.\\nOtherwise, the evaluation fails with an error containing the given message.
\\nFunction signature
\\nassert(value: Any, condition: Any, cause: String)\\n \\nExamples
\\nassert(x, x != null, "'x' should not be null")\\n// "value" - if x is "value"\\n// error('x' should not be null) - if x is null or doesn't exist\\n\\nassert(x, x >= 0, "'x' should be positive")\\n// 4 - if x is 4\\n// error('x' should be positive) - if x is less than zero\\n \\n\"\n\t},\n\t{\n\t\tname: \"get value(context, key)\",\n\t\tdescription: \"Returns the value of the context entry with the given key.
\\nFunction signature
\\nget value(context: context, key: string): Any\\n \\nExamples
\\nget value({foo: 123}, "foo")\\n// 123\\n\\nget value({a: 1}, "b")\\n// null\\n \\n\"\n\t},\n\t{\n\t\tname: \"get value(context, keys)\",\n\t\tdescription: \"Camunda Extension
\\nReturns the value of the context entry for a context path defined by the given keys.
\\nIf keys contains the keys [k1, k2] then it returns the value at the nested entry k1.k2 of the context.
\\nIf keys are empty or the nested entry defined by the keys doesn't exist in the context, it returns null.
\\nFunction signature
\\nget value(context: context, keys: list<string>): Any\\n \\nExamples
\\nget value({x:1, y: {z:0}}, ["y", "z"])\\n// 0\\n\\nget value({x: {y: {z:0}}}, ["x", "y"])\\n// {z:0}\\n\\nget value({a: {b: 3}}, ["b"])\\n// null\\n \\n\"\n\t},\n\t{\n\t\tname: \"get entries(context)\",\n\t\tdescription: \"Returns the entries of the context as a list of key-value-pairs.
\\nFunction signature
\\nget entries(context: context): list<context>\\n \\nThe return value is a list of contexts. Each context contains two entries for "key" and "value".
\\nExamples
\\nget entries({foo: 123})\\n// [{key: "foo", value: 123}]\\n \\n\"\n\t},\n\t{\n\t\tname: \"context put(context, key, value)\",\n\t\tdescription: \"Adds a new entry with the given key and value to the context. Returns a new context that includes the entry.
\\nIf an entry for the same key already exists in the context, it overrides the value.
\\nFunction signature
\\ncontext put(context: context, key: string, value: Any): context\\n \\nExamples
\\ncontext put({x:1}, "y", 2)\\n// {x:1, y:2}\\n \\n:::info\\nThe function context put() replaced the previous function put() (Camunda Extension). The\\nprevious function is deprecated and should not be used anymore.\\n:::
\\n\"\n\t},\n\t{\n\t\tname: \"context put(context, keys, value)\",\n\t\tdescription: \"Adds a new entry with the given value to the context. The path of the entry is defined by the keys. Returns a new context that includes the entry.
\\nIf keys contains the keys [k1, k2] then it adds the nested entry k1.k2 = value to the context.
\\nIf an entry for the same keys already exists in the context, it overrides the value.
\\nIf keys are empty, it returns null.
\\nFunction signature
\\ncontext put(context: context, keys: list<string>, value: Any): context\\n \\nExamples
\\ncontext put({x:1}, ["y"], 2)\\n// {x:1, y:2}\\n\\ncontext put({x:1, y: {z:0}}, ["y", "z"], 2)\\n// {x:1, y: {z:2}}\\n\\ncontext put({x:1}, ["y", "z"], 2)\\n// {x:1, y: {z:2}}\\n \\n\"\n\t},\n\t{\n\t\tname: \"context merge(contexts)\",\n\t\tdescription: \"Union the given contexts. Returns a new context that includes all entries of the given contexts.
\\nIf an entry for the same key already exists in a context, it overrides the value. The entries are overridden in the same order as in the list of contexts.
\\nFunction signature
\\ncontext merge(contexts: list<context>): context\\n \\nExamples
\\ncontext merge([{x:1}, {y:2}])\\n// {x:1, y:2}\\n\\ncontext merge([{x:1, y: 0}, {y:2}])\\n// {x:1, y:2}\\n \\n:::info\\nThe function context merge() replaced the previous function put all() (Camunda Extension). The\\nprevious function is deprecated and should not be used anymore.\\n:::
\\n\"\n\t},\n\t{\n\t\tname: \"string(from)\",\n\t\tdescription: \"Returns the given value as a string representation.
\\nFunction signature
\\nstring(from: Any): string\\n \\nExamples
\\nstring(1.1)\\n// "1.1"\\n\\nstring(date("2012-12-25"))\\n// "2012-12-25"\\n \\n\"\n\t},\n\t{\n\t\tname: \"number(from)\",\n\t\tdescription: \"Parses the given string to a number.
\\nFunction signature
\\nnumber(from: string): number\\n \\nExamples
\\nnumber("1500.5")\\n// 1500.5\\n \\n\"\n\t},\n\t{\n\t\tname: \"context(entries)\",\n\t\tdescription: \"Constructs a context of the given list of key-value pairs. It is the reverse function to get entries() .
\\nEach key-value pair must be a context with two entries: key and value. The entry with name key must have a value of the type string.
\\nIt might override context entries if the keys are equal. The entries are overridden in the same order as the contexts in the given list.
\\nReturns null if one of the entries is not a context or if a context doesn't contain the required entries.
\\nFunction signature
\\ncontext(entries: list<context>): context\\n \\nExamples
\\ncontext([{"key":"a", "value":1}, {"key":"b", "value":2}])\\n// {a:1, b:2}\\n \\n\"\n\t},\n\t{\n\t\tname: \"date(from)\",\n\t\tdescription: \"Returns a date from the given value.
\\nFunction signature
\\ndate(from: string): date\\n \\nParses the given string into a date.
\\ndate(from: date and time): date\\n \\nExtracts the date component from the given date and time.
\\nExamples
\\ndate("2018-04-29")\\n// date("2018-04-29")\\n\\ndate(date and time("2012-12-25T11:00:00"))\\n// date("2012-12-25")\\n \\n\"\n\t},\n\t{\n\t\tname: \"date(year, month, day)\",\n\t\tdescription: \"Returns a date from the given components.
\\nFunction signature
\\ndate(year: number, month: number, day: number): date\\n \\nExamples
\\ndate(2012, 12, 25)\\n// date("2012-12-25")\\n \\n\"\n\t},\n\t{\n\t\tname: \"time(from)\",\n\t\tdescription: \"Returns a time from the given value.
\\nFunction signature
\\ntime(from: string): time\\n \\nParses the given string into a time.
\\ntime(from: date and time): time\\n \\nExtracts the time component from the given date and time.
\\nExamples
\\ntime("12:00:00")\\n// time("12:00:00")\\n\\ntime(date and time("2012-12-25T11:00:00"))\\n// time("11:00:00")\\n \\n\"\n\t},\n\t{\n\t\tname: \"time(hour, minute, second)\",\n\t\tdescription: \"Returns a time from the given components.
\\nFunction signature
\\ntime(hour: number, minute: number, second: number): time\\n \\nExamples
\\ntime(23, 59, 0)\\n// time("23:59:00")\\n \\n\"\n\t},\n\t{\n\t\tname: \"time(hour, minute, second, offset)\",\n\t\tdescription: \"Returns a time from the given components, including a timezone offset.
\\nFunction signature
\\ntime(hour: number, minute: number, second: number, offset: days and time duration): time\\n \\nExamples
\\ntime(14, 30, 0, duration("PT1H"))\\n// time("14:30:00+01:00")\\n \\n\"\n\t},\n\t{\n\t\tname: \"date and time(from)\",\n\t\tdescription: \"Parses the given string into a date and time.
\\nFunction signature
\\ndate and time(from: string): date and time\\n \\nExamples
\\ndate and time("2018-04-29T09:30:00")\\n// date and time("2018-04-29T09:30:00")\\n \\n\"\n\t},\n\t{\n\t\tname: \"date and time(date, time)\",\n\t\tdescription: \"Returns a date and time from the given components.
\\nFunction signature
\\ndate and time(date: date, time: time): date and time\\n \\ndate and time(date: date and time, time: time): date and time\\n \\nReturns a date and time value that consists of the date component of date combined with time.
\\nExamples
\\ndate and time(date("2012-12-24"),time("T23:59:00"))\\n// date and time("2012-12-24T23:59:00")\\n\\ndate and time(date and time("2012-12-25T11:00:00"),time("T23:59:00"))\\n// date and time("2012-12-25T23:59:00")\\n \\n\"\n\t},\n\t{\n\t\tname: \"date and time(date, timezone)\",\n\t\tdescription: \"Camunda Extension
\\nReturns the given date and time value at the given timezone.
\\nIf date has a different timezone than timezone then it adjusts the time to match the local time of timezone.
\\nFunction signature
\\ndate and time(date: date and time, timezone: string): date and time\\n \\nExamples
\\ndate and time(@"2020-07-31T14:27:30@Europe/Berlin", "America/Los_Angeles")\\n// date and time("2020-07-31T05:27:30@America/Los_Angeles")\\n\\ndate and time(@"2020-07-31T14:27:30", "Z")\\n// date and time("2020-07-31T12:27:30Z")\\n \\n\"\n\t},\n\t{\n\t\tname: \"duration(from)\",\n\t\tdescription: \"Parses the given string into a duration. The duration is either a days and time duration or a years and months duration.
\\nFunction signature
\\nduration(from: string): days and time duration\\n \\nduration(from: string): years and months duration\\n \\nExamples
\\nduration("P5D")\\n// duration("P5D")\\n\\nduration("P32Y")\\n// duration("P32Y")\\n \\n\"\n\t},\n\t{\n\t\tname: \"years and months duration(from, to)\",\n\t\tdescription: \"Returns the years and months duration between from and to.
\\nFunction signature
\\nyears and months duration(from: date, to: date): years and months duration\\n \\nExamples
\\nyears and months duration(date("2011-12-22"), date("2013-08-24"))\\n// duration("P1Y8M")\\n \\n\"\n\t},\n\t{\n\t\tname: \"list contains(list, element)\",\n\t\tdescription: \"Returns true if the given list contains the element. Otherwise, returns false.
\\nFunction signature
\\nlist contains(list: list, element: Any): boolean\\n \\nExamples
\\nlist contains([1,2,3], 2)\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"count(list)\",\n\t\tdescription: \"Returns the number of elements of the given list.
\\nFunction signature
\\ncount(list: list): number\\n \\nExamples
\\ncount([1,2,3])\\n// 3\\n \\n\"\n\t},\n\t{\n\t\tname: \"min(list)\",\n\t\tdescription: \"Returns the minimum of the given list.
\\nFunction signature
\\nmin(list: list): Any\\n \\nAll elements in list should have the same type and be comparable.
\\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nmin([1,2,3])\\n// 1\\n\\nmin(1,2,3)\\n// 1\\n \\n\"\n\t},\n\t{\n\t\tname: \"max(list)\",\n\t\tdescription: \"Returns the maximum of the given list.
\\nFunction signature
\\nmax(list: list): Any\\n \\nAll elements in list should have the same type and be comparable.
\\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nmax([1,2,3])\\n// 3\\n\\nmax(1,2,3)\\n// 3\\n \\n\"\n\t},\n\t{\n\t\tname: \"sum(list)\",\n\t\tdescription: \"Returns the sum of the given list of numbers.
\\nFunction signature
\\nsum(list: list<number>): number\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nsum([1,2,3])\\n// 6\\n\\nsum(1,2,3)\\n// 6\\n \\n\"\n\t},\n\t{\n\t\tname: \"product(list)\",\n\t\tdescription: \"Returns the product of the given list of numbers.
\\nFunction signature
\\nproduct(list: list<number>): number\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nproduct([2, 3, 4])\\n// 24\\n\\nproduct(2, 3, 4)\\n// 24\\n \\n\"\n\t},\n\t{\n\t\tname: \"mean(list)\",\n\t\tdescription: \"Returns the arithmetic mean (i.e. average) of the given list of numbers.
\\nFunction signature
\\nmean(list: list<number>): number\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nmean([1,2,3])\\n// 2\\n\\nmean(1,2,3)\\n// 2\\n \\n\"\n\t},\n\t{\n\t\tname: \"median(list)\",\n\t\tdescription: \"Returns the median element of the given list of numbers.
\\nFunction signature
\\nmedian(list: list<number>): number\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nmedian(8, 2, 5, 3, 4)\\n// 4\\n\\nmedian([6, 1, 2, 3])\\n// 2.5\\n \\n\"\n\t},\n\t{\n\t\tname: \"stddev(list)\",\n\t\tdescription: \"Returns the standard deviation of the given list of numbers.
\\nFunction signature
\\nstddev(list: list<number>): number\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nstddev(2, 4, 7, 5)\\n// 2.0816659994661326\\n\\nstddev([2, 4, 7, 5])\\n// 2.0816659994661326\\n \\n\"\n\t},\n\t{\n\t\tname: \"mode(list)\",\n\t\tdescription: \"Returns the mode of the given list of numbers.
\\nFunction signature
\\nmode(list: list<number>): number\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nmode(6, 3, 9, 6, 6)\\n// [6]\\n\\nmode([6, 1, 9, 6, 1])\\n// [1, 6]\\n \\n\"\n\t},\n\t{\n\t\tname: \"all(list)\",\n\t\tdescription: \"Returns false if any element of the given list is false. Otherwise, returns true.
\\nIf the given list is empty, it returns true.
\\nFunction signature
\\nall(list: list<boolean>): boolean\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nall([true,false])\\n// false\\n\\nall(false,null,true)\\n// false\\n \\n:::info\\nThe function all() replaced the previous function and(). The previous function is deprecated and\\nshould not be used anymore.\\n:::
\\n\"\n\t},\n\t{\n\t\tname: \"any(list)\",\n\t\tdescription: \"Returns true if any element of the given list is true. Otherwise, returns false.
\\nIf the given list is empty, it returns false.
\\nFunction signature
\\nany(list: list<boolean>): boolean\\n \\nThe parameter list can be passed as a list or as a sequence of elements.
\\nExamples
\\nany([false,true])\\n// true\\n\\nany(false,null,true)\\n// true\\n \\n:::info\\nThe function any() replaced the previous function or(). The previous function is deprecated and\\nshould not be used anymore.\\n:::
\\n\"\n\t},\n\t{\n\t\tname: \"sublist(list, start position)\",\n\t\tdescription: \"Returns a partial list of the given value starting at start position.
\\nFunction signature
\\nsublist(list: list, start position: number): list\\n \\nThe start position starts at the index 1. The last position is -1.
\\nExamples
\\nsublist([1,2,3], 2)\\n// [2,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"sublist(list, start position, length)\",\n\t\tdescription: \"Returns a partial list of the given value starting at start position.
\\nFunction signature
\\nsublist(list: list, start position: number, length: number): list\\n \\nThe start position starts at the index 1. The last position is -1.
\\nExamples
\\nsublist([1,2,3], 1, 2)\\n// [1,2]\\n \\n\"\n\t},\n\t{\n\t\tname: \"append(list, items)\",\n\t\tdescription: \"Returns the given list with all items appended.
\\nFunction signature
\\nappend(list: list, items: Any): list\\n \\nThe parameter items can be a single element or a sequence of elements.
\\nExamples
\\nappend([1], 2, 3)\\n// [1,2,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"concatenate(lists)\",\n\t\tdescription: \"Returns a list that includes all elements of the given lists.
\\nFunction signature
\\nconcatenate(lists: list): list\\n \\nThe parameter lists is a sequence of lists.
\\nExamples
\\nconcatenate([1,2],[3])\\n// [1,2,3]\\n\\nconcatenate([1],[2],[3])\\n// [1,2,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"insert before(list, position, newItem)\",\n\t\tdescription: \"Returns the given list with newItem inserted at position.
\\nFunction signature
\\ninsert before(list: list, position: number, newItem: Any): list\\n \\nThe position starts at the index 1. The last position is -1.
\\nExamples
\\ninsert before([1,3],1,2)\\n// [2,1,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"remove(list, position)\",\n\t\tdescription: \"Returns the given list without the element at position.
\\nFunction signature
\\nremove(list: list, position: number): list\\n \\nThe position starts at the index 1. The last position is -1.
\\nExamples
\\nremove([1,2,3], 2)\\n// [1,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"reverse(list)\",\n\t\tdescription: \"Returns the given list in revered order.
\\nFunction signature
\\nreverse(list: list): list\\n \\nExamples
\\nreverse([1,2,3])\\n// [3,2,1]\\n \\n\"\n\t},\n\t{\n\t\tname: \"index of(list, match)\",\n\t\tdescription: \"Returns an ascending list of positions containing match.
\\nFunction signature
\\nindex of(list: list, match: Any): list<number>\\n \\nExamples
\\nindex of([1,2,3,2],2)\\n// [2,4]\\n \\n\"\n\t},\n\t{\n\t\tname: \"union(list)\",\n\t\tdescription: \"Returns a list that includes all elements of the given lists without duplicates.
\\nFunction signature
\\nunion(list: list): list\\n \\nThe parameter list is a sequence of lists.
\\nExamples
\\nunion([1,2],[2,3])\\n// [1,2,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"distinct values(list)\",\n\t\tdescription: \"Returns the given list without duplicates.
\\nFunction signature
\\ndistinct values(list: list): list\\n \\nExamples
\\ndistinct values([1,2,3,2,1])\\n// [1,2,3]\\n \\n\"\n\t},\n\t{\n\t\tname: \"duplicate values(list)\",\n\t\tdescription: \"Camunda Extension
\\nReturns all duplicate values of the given list.
\\nFunction signature
\\nduplicate values(list: list): list\\n \\nExamples
\\nduplicate values([1,2,3,2,1])\\n// [1,2]\\n \\n\"\n\t},\n\t{\n\t\tname: \"flatten(list)\",\n\t\tdescription: \"Returns a list that includes all elements of the given list without nested lists.
\\nFunction signature
\\nflatten(list: list): list\\n \\nExamples
\\nflatten([[1,2],[[3]], 4])\\n// [1,2,3,4]\\n \\n\"\n\t},\n\t{\n\t\tname: \"sort(list, precedes)\",\n\t\tdescription: \"Returns the given list sorted by the precedes function.
\\nFunction signature
\\nsort(list: list, precedes: function<(Any, Any) -> boolean>): list\\n \\nExamples
\\nsort(list: [3,1,4,5,2], precedes: function(x,y) x < y)\\n// [1,2,3,4,5]\\n \\n\"\n\t},\n\t{\n\t\tname: \"string join(list)\",\n\t\tdescription: \"Joins a list of strings into a single string. This is similar to\\nJava's joining \\nfunction.
\\nIf an item of the list is null, the item is ignored for the result string. If an item is\\nneither a string nor null, the function returns null instead of a string.
\\nFunction signature
\\nstring join(list: list<string>): string\\n \\nExamples
\\nstring join(["a","b","c"])\\n// "abc"\\n\\nstring join(["a",null,"c"])\\n// "ac"\\n\\nstring join([])\\n// ""\\n \\n\"\n\t},\n\t{\n\t\tname: \"string join(list, delimiter)\",\n\t\tdescription: \"Joins a list of strings into a single string. This is similar to\\nJava's joining \\nfunction.
\\nIf an item of the list is null, the item is ignored for the result string. If an item is\\nneither a string nor null, the function returns null instead of a string.
\\nThe resulting string contains a delimiter between each element.
\\nFunction signature
\\nstring join(list: list<string>, delimiter: string): string\\n \\nExamples
\\nstring join(["a"], "X")\\n// "a"\\n\\nstring join(["a","b","c"], ", ")\\n// "a, b, c"\\n \\n\"\n\t},\n\t{\n\t\tname: \"string join(list, delimiter, prefix, suffix)\",\n\t\tdescription: \"Camunda Extension
\\nJoins a list of strings into a single string. This is similar to\\nJava's joining \\nfunction.
\\nIf an item of the list is null, the item is ignored for the result string. If an item is\\nneither a string nor null, the function returns null instead of a string.
\\nThe resulting string starts with prefix, contains a delimiter between each element, and ends\\nwith suffix.
\\nFunction signature
\\nstring join(list: list<string>, delimiter: string, prefix: string, suffix: string): string\\n \\nExamples
\\nstring join(["a","b","c"], ", ", "[", "]")\\n// "[a, b, c]"\\n \\n\"\n\t},\n\t{\n\t\tname: \"decimal(n, scale)\",\n\t\tdescription: \"Rounds the given value at the given scale.
\\nFunction signature
\\ndecimal(n: number, scale: number): number\\n \\nExamples
\\ndecimal(1/3, 2)\\n// .33\\n\\ndecimal(1.5, 0)\\n// 2\\n \\n\"\n\t},\n\t{\n\t\tname: \"floor(n)\",\n\t\tdescription: \"Rounds the given value with rounding mode flooring.
\\nFunction signature
\\nfloor(n: number): number\\n \\nExamples
\\nfloor(1.5)\\n// 1\\n\\nfloor(-1.5)\\n// -2\\n \\n\"\n\t},\n\t{\n\t\tname: \"floor(n, scale)\",\n\t\tdescription: \"Rounds the given value with rounding mode flooring at the given scale.
\\nFunction signature
\\nfloor(n: number, scale: number): number\\n \\nExamples
\\nfloor(-1.56, 1)\\n// -1.6\\n \\n\"\n\t},\n\t{\n\t\tname: \"ceiling(n)\",\n\t\tdescription: \"Rounds the given value with rounding mode ceiling.
\\nFunction signature
\\nceiling(n: number): number\\n \\nExamples
\\nceiling(1.5)\\n// 2\\n\\nceiling(-1.5)\\n// -1\\n \\n\"\n\t},\n\t{\n\t\tname: \"ceiling(n, scale)\",\n\t\tdescription: \"Rounds the given value with rounding mode ceiling at the given scale.
\\nFunction signature
\\nceiling(n: number, scale: number): number\\n \\nExamples
\\nceiling(-1.56, 1)\\n// -1.5\\n \\n\"\n\t},\n\t{\n\t\tname: \"round up(n, scale)\",\n\t\tdescription: \"Rounds the given value with the rounding mode round-up at the given scale.
\\nFunction signature
\\nround up(n: number, scale: number): number\\n \\nExamples
\\nround up(5.5)\\n// 6\\n\\nround up(-5.5)\\n// -6\\n\\nround up(1.121, 2)\\n// 1.13\\n\\nround up(-1.126, 2)\\n// -1.13\\n \\n\"\n\t},\n\t{\n\t\tname: \"round down(n, scale)\",\n\t\tdescription: \"Rounds the given value with the rounding mode round-down at the given scale.
\\nFunction signature
\\nround down(n: number, scale: number): number\\n \\nExamples
\\nround down(5.5, 0)\\n// 5\\n\\nround down (-5.5, 0)\\n// -5\\n\\nround down (1.121, 2)\\n// 1.12\\n\\nround down (-1.126, 2)\\n// -1.12\\n \\n\"\n\t},\n\t{\n\t\tname: \"round half up(n, scale)\",\n\t\tdescription: \"Rounds the given value with the rounding mode round-half-up at the given scale.
\\nFunction signature
\\nround half up(n: number, scale: number): number\\n \\nExamples
\\nround half up(5.5, 0)\\n// 6\\n\\nround half up(-5.5, 0)\\n// -6\\n\\nround half up(1.121, 2)\\n// 1.12\\n\\nround half up(-1.126, 2)\\n// -1.13\\n \\n\"\n\t},\n\t{\n\t\tname: \"round half down(n, scale)\",\n\t\tdescription: \"Rounds the given value with the rounding mode round-half-down at the given scale.
\\nFunction signature
\\nround half down(n: number, scale: number): number\\n \\nExamples
\\nround half down (5.5, 0)\\n// 5\\n\\nround half down (-5.5, 0)\\n// -5\\n\\nround half down (1.121, 2)\\n// 1.12\\n\\nround half down (-1.126, 2)\\n// -1.13\\n \\n\"\n\t},\n\t{\n\t\tname: \"abs(number)\",\n\t\tdescription: \"Returns the absolute value of the given numeric value.
\\nFunction signature
\\nabs(number: number): number\\n \\nExamples
\\nabs(10)\\n// 10\\n\\nabs(-10)\\n// 10\\n \\n\"\n\t},\n\t{\n\t\tname: \"modulo(dividend, divisor)\",\n\t\tdescription: \"Returns the remainder of the division of dividend by divisor.
\\nFunction signature
\\nmodulo(dividend: number, divisor: number): number\\n \\nExamples
\\nmodulo(12, 5)\\n// 2\\n \\n\"\n\t},\n\t{\n\t\tname: \"sqrt(number)\",\n\t\tdescription: \"Returns the square root of the given value.
\\nFunction signature
\\nsqrt(number: number): number\\n \\nExamples
\\nsqrt(16)\\n// 4\\n \\n\"\n\t},\n\t{\n\t\tname: \"log(number)\",\n\t\tdescription: \"Returns the natural logarithm (base e) of the given value.
\\nFunction signature
\\nlog(number: number): number\\n \\nExamples
\\nlog(10)\\n// 2.302585092994046\\n \\n\"\n\t},\n\t{\n\t\tname: \"exp(number)\",\n\t\tdescription: \"Returns the Euler’s number e raised to the power of the given number .
\\nFunction signature
\\nexp(number: number): number\\n \\nExamples
\\nexp(5)\\n// 148.4131591025766\\n \\n\"\n\t},\n\t{\n\t\tname: \"odd(number)\",\n\t\tdescription: \"Returns true if the given value is odd. Otherwise, returns false.
\\nFunction signature
\\nodd(number: number): boolean\\n \\nExamples
\\nodd(5)\\n// true\\n\\nodd(2)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"even(number)\",\n\t\tdescription: \"Returns true if the given is even. Otherwise, returns false.
\\nFunction signature
\\neven(number: number): boolean\\n \\nExamples
\\neven(5)\\n// false\\n\\neven(2)\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"random number()\",\n\t\tdescription: \"Camunda Extension
\\nReturns a random number between 0 and 1.
\\nFunction signature
\\nrandom number(): number\\n \\nExamples
\\nrandom number()\\n// 0.9701618132579795\\n \\n\"\n\t},\n\t{\n\t\tname: \"before(point1, point2)\",\n\t\tdescription: \"Function signature
\\nbefore(point1: Any, point2: Any): boolean\\n \\nExamples
\\nbefore(1, 10)\\n// true\\n\\nbefore(10, 1)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"before(range, point)\",\n\t\tdescription: \"Function signature
\\nbefore(range: range, point: Any): boolean\\n \\nExamples
\\nbefore([1..5], 10)\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"before(point, range)\",\n\t\tdescription: \"Function signature
\\nbefore(point: Any, range: range): boolean\\n \\nExamples
\\nbefore(1, [2..5])\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"before(range1, range2)\",\n\t\tdescription: \"Function signature
\\nbefore(range1: range, range2: range): boolean\\n \\nExamples
\\nbefore([1..5], [6..10])\\n// true\\n\\nbefore([1..5),[5..10])\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"after(point1, point2)\",\n\t\tdescription: \"Function signature
\\nafter(point1: Any, point2: Any): boolean\\n \\nExamples
\\nafter(10, 1)\\n// true\\n\\nafter(1, 10)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"after(range, point)\",\n\t\tdescription: \"Function signature
\\nafter(range: range, point: Any): boolean\\n \\nExamples
\\nafter([1..5], 10)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"after(point, range)\",\n\t\tdescription: \"Function signature
\\nafter(point: Any, range: range): boolean\\n \\nExamples
\\nafter(12, [2..5])\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"after(range1, range2)\",\n\t\tdescription: \"Function signature
\\nafter(range1: range, range2: range): boolean\\n \\nExamples
\\nafter([6..10], [1..5])\\n// true\\n\\nafter([5..10], [1..5))\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"meets(range1, range2)\",\n\t\tdescription: \"Function signature
\\nmeets(range1: range, range2: range): boolean\\n \\nExamples
\\nmeets([1..5], [5..10])\\n// true\\n\\nmeets([1..3], [4..6])\\n// false\\n\\nmeets([1..3], [3..5])\\n// true\\n\\nmeets([1..5], (5..8])\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"met by(range1, range2)\",\n\t\tdescription: \"Function signature
\\nmet by(range1: range, range2: range): boolean\\n \\nExamples
\\nmet by([5..10], [1..5])\\n// true\\n\\nmet by([3..4], [1..2])\\n// false\\n\\nmet by([3..5], [1..3])\\n// true\\n\\nmet by((5..8], [1..5))\\n// false\\n\\nmet by([5..10], [1..5))\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"overlaps(range1, range2)\",\n\t\tdescription: \"Function signature
\\noverlaps(range1: range, range2: range): boolean\\n \\nExamples
\\noverlaps([5..10], [1..6])\\n// true\\n\\noverlaps((3..7], [1..4])\\n// true\\n\\noverlaps([1..3], (3..6])\\n// false\\n\\noverlaps((5..8], [1..5))\\n// false\\n\\noverlaps([4..10], [1..5))\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"overlaps before(range1, range2)\",\n\t\tdescription: \"Function signature
\\noverlaps before(range1: range, range2: range): boolean\\n \\nExamples
\\noverlaps before([1..5], [4..10])\\n// true\\n\\noverlaps before([3..4], [1..2])\\n// false\\n\\noverlaps before([1..3], (3..5])\\n// false\\n\\noverlaps before([1..5), (3..8])\\n// true\\n\\noverlaps before([1..5), [5..10])\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"overlaps after(range1, range2)\",\n\t\tdescription: \"Function signature
\\noverlaps after(range1: range, range2: range): boolean\\n \\nExamples
\\noverlaps after([4..10], [1..5])\\n// true\\n\\noverlaps after([3..4], [1..2])\\n// false\\n\\noverlaps after([3..5], [1..3))\\n// false\\n\\noverlaps after((5..8], [1..5))\\n// false\\n\\noverlaps after([4..10], [1..5))\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"finishes(point, range)\",\n\t\tdescription: \"Function signature
\\nfinishes(point: Any, range: range): boolean\\n \\nExamples
\\nfinishes(5, [1..5])\\n// true\\n\\nfinishes(10, [1..7])\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"finishes(range1, range2)\",\n\t\tdescription: \"Function signature
\\nfinishes(range1: range, range2: range): boolean\\n \\nExamples
\\nfinishes([3..5], [1..5])\\n// true\\n\\nfinishes((1..5], [1..5))\\n// false\\n\\nfinishes([5..10], [1..10))\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"finished by(range, point)\",\n\t\tdescription: \"Function signature
\\nfinished by(range: range, point: Any): boolean\\n \\nExamples
\\nfinished by([5..10], 10)\\n// true\\n\\nfinished by([3..4], 2)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"finished by(range1, range2)\",\n\t\tdescription: \"Function signature
\\nfinished by(range1: range, range2: range): boolean\\n \\nExamples
\\nfinished by([1..5], [3..5])\\n// true\\n\\nfinished by((5..8], [1..5))\\n// false\\n\\nfinished by([5..10], (1..10))\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"includes(range, point)\",\n\t\tdescription: \"Function signature
\\nincludes(range: range, point: Any): boolean\\n \\nExamples
\\nincludes([5..10], 6)\\n// true\\n\\nincludes([3..4], 5)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"includes(range1, range2)\",\n\t\tdescription: \"Function signature
\\nincludes(range1: range, range2: range): boolean\\n \\nExamples
\\nincludes([1..10], [4..6])\\n// true\\n\\nincludes((5..8], [1..5))\\n// false\\n\\nincludes([1..10], [1..5))\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"during(point, range)\",\n\t\tdescription: \"Function signature
\\nduring(point: Any, range: range): boolean\\n \\nExamples
\\nduring(5, [1..10])\\n// true\\n\\nduring(12, [1..10])\\n// false\\n\\nduring(1, (1..10])\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"during(range1, range2)\",\n\t\tdescription: \"Function signature
\\nduring(range1: range, range2: range): boolean\\n \\nExamples
\\nduring([4..6], [1..10))\\n// true\\n\\nduring((1..5], (1..10])\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"starts(point, range)\",\n\t\tdescription: \"Function signature
\\nstarts(point: Any, range: range): boolean\\n \\nExamples
\\nstarts(1, [1..5])\\n// true\\n\\nstarts(1, (1..8])\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"starts(range1, range2)\",\n\t\tdescription: \"Function signature
\\nstarts(range1: range, range2: range): boolean\\n \\nExamples
\\nstarts((1..5], [1..5])\\n// false\\n\\nstarts([1..10], [1..5])\\n// false\\n\\nstarts((1..5), (1..10))\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"started by(range, point)\",\n\t\tdescription: \"Function signature
\\nstarted by(range: range, point: Any): boolean\\n \\nExamples
\\nstarted by([1..10], 1)\\n// true\\n\\nstarted by((1..10], 1)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"started by(range1, range2)\",\n\t\tdescription: \"Function signature
\\nstarted by(range1: range, range2: range): boolean\\n \\nExamples
\\nstarted by([1..10], [1..5])\\n// true\\n\\nstarted by((1..10], [1..5))\\n// false\\n\\nstarted by([1..10], [1..10))\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"coincides(point1, point2)\",\n\t\tdescription: \"Function signature
\\ncoincides(point1: Any, point2: Any): boolean\\n \\nExamples
\\ncoincides(5, 5)\\n// true\\n\\ncoincides(3, 4)\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"coincides(range1, range2)\",\n\t\tdescription: \"Function signature
\\ncoincides(range1: range, range2: range): boolean\\n \\nExamples
\\ncoincides([1..5], [1..5])\\n// true\\n\\ncoincides((1..5], [1..5))\\n// false\\n\\ncoincides([1..5], [2..6])\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"substring(string, start position)\",\n\t\tdescription: \"Returns a substring of the given value starting at start position.
\\nFunction signature
\\nsubstring(string: string, start position: number): string\\n \\nThe start position starts at the index 1. The last position is -1.
\\nExamples
\\nsubstring("foobar", 3)\\n// "obar"\\n \\n\"\n\t},\n\t{\n\t\tname: \"substring(string, start position, length)\",\n\t\tdescription: \"Returns a substring of the given value starting at start position.
\\nFunction signature
\\nsubstring(string: string, start position: number, length: number): string\\n \\nThe start position starts at the index 1. The last position is -1.
\\nExamples
\\nsubstring("foobar", 3, 3)\\n// "oba"\\n \\n\"\n\t},\n\t{\n\t\tname: \"string length(string)\",\n\t\tdescription: \"Returns the number of characters in the given value.
\\nFunction signature
\\nstring length(string: string): number\\n \\nExamples
\\nstring length("foo")\\n// 3\\n \\n\"\n\t},\n\t{\n\t\tname: \"upper case(string)\",\n\t\tdescription: \"Returns the given value with all characters are uppercase.
\\nFunction signature
\\nupper case(string: string): string\\n \\nExamples
\\nupper case("aBc4")\\n// "ABC4"\\n \\n\"\n\t},\n\t{\n\t\tname: \"lower case(string)\",\n\t\tdescription: \"Returns the given value with all characters are lowercase.
\\nFunction signature
\\nlower case(string: string): string\\n \\nExamples
\\nlower case("aBc4")\\n// "abc4"\\n \\n\"\n\t},\n\t{\n\t\tname: \"substring before(string, match)\",\n\t\tdescription: \"Returns a substring of the given value that contains all characters before match.
\\nFunction signature
\\nsubstring before(string: string, match: string): string\\n \\nExamples
\\nsubstring before("foobar", "bar")\\n// "foo"\\n \\n\"\n\t},\n\t{\n\t\tname: \"substring after(string, match)\",\n\t\tdescription: \"Returns a substring of the given value that contains all characters after match.
\\nFunction signature
\\nsubstring after(string: string, match: string): string\\n \\nExamples
\\nsubstring after("foobar", "ob")\\n// "ar"\\n \\n\"\n\t},\n\t{\n\t\tname: \"contains(string, match)\",\n\t\tdescription: \"Returns true if the given value contains the substring match. Otherwise, returns false.
\\nFunction signature
\\ncontains(string: string, match: string): boolean\\n \\nExamples
\\ncontains("foobar", "of")\\n// false\\n \\n\"\n\t},\n\t{\n\t\tname: \"starts with(string, match)\",\n\t\tdescription: \"Returns true if the given value starts with the substring match. Otherwise, returns false.
\\nFunction signature
\\nstarts with(string: string, match: string): boolean\\n \\nExamples
\\nstarts with("foobar", "fo")\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"ends with(string, match)\",\n\t\tdescription: \"Returns true if the given value ends with the substring match. Otherwise, returns false.
\\nFunction signature
\\nends with(string: string, match: string): boolean\\n \\nExamples
\\nends with("foobar", "r")\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"matches(input, pattern)\",\n\t\tdescription: \"Returns true if the given value matches the pattern. Otherwise, returns false.
\\nFunction signature
\\nmatches(input: string, pattern: string): boolean\\n \\nThe pattern is a string that contains a regular expression.
\\nExamples
\\nmatches("foobar", "^fo*bar")\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"matches(input, pattern, flags)\",\n\t\tdescription: \"Returns true if the given value matches the pattern. Otherwise, returns false.
\\nFunction signature
\\nmatches(input: string, pattern: string, flags: string): boolean\\n \\nThe pattern is a string that contains a regular expression.
\\nThe flags can contain one or more of the following characters:
\\n\\ns (dot-all) \\nm (multi-line) \\ni (case insensitive) \\nx (comments) \\n \\nExamples
\\nmatches("FooBar", "foo", "i")\\n// true\\n \\n\"\n\t},\n\t{\n\t\tname: \"replace(input, pattern, replacement)\",\n\t\tdescription: \"Returns the resulting string after replacing all occurrences of pattern with replacement.
\\nFunction signature
\\nreplace(input: string, pattern: string, replacement: string): string\\n \\nThe pattern is a string that contains a regular expression.
\\nThe replacement can access the match groups by using $ and the number of the group, for example,\\n$1 to access the first group.
\\nExamples
\\nreplace("abcd", "(ab)|(a)", "[1=$1][2=$2]")\\n// "[1=ab][2=]cd"\\n\\nreplace("0123456789", "(\\\\d{3})(\\\\d{3})(\\\\d{4})", "($1) $2-$3")\\n// "(012) 345-6789"\\n \\n\"\n\t},\n\t{\n\t\tname: \"replace(input, pattern, replacement, flags)\",\n\t\tdescription: \"Returns the resulting string after replacing all occurrences of pattern with replacement.
\\nFunction signature
\\nreplace(input: string, pattern: string, replacement: string, flags: string): string\\n \\nThe pattern is a string that contains a regular expression.
\\nThe replacement can access the match groups by using $ and the number of the group, for example,\\n$1 to access the first group.
\\nThe flags can contain one or more of the following characters:
\\n\\ns (dot-all) \\nm (multi-line) \\ni (case insensitive) \\nx (comments) \\n \\nExamples
\\nreplace("How do you feel?", "Feel", "FEEL", "i")\\n// "How do you FEEL?"\\n \\n\"\n\t},\n\t{\n\t\tname: \"split(string, delimiter)\",\n\t\tdescription: \"Splits the given value into a list of substrings, breaking at each occurrence of the delimiter pattern.
\\nFunction signature
\\nsplit(string: string, delimiter: string): list<string>\\n \\nThe delimiter is a string that contains a regular expression.
\\nExamples
\\nsplit("John Doe", "\\\\s" )\\n// ["John", "Doe"]\\n\\nsplit("a;b;c;;", ";")\\n// ["a", "b", "c", "", ""]\\n \\n\"\n\t},\n\t{\n\t\tname: \"extract(string, pattern)\",\n\t\tdescription: \"Camunda Extension
\\nReturns all matches of the pattern in the given string. Returns an empty list if the pattern doesn't\\nmatch.
\\nFunction signature
\\nextract(string: string, pattern: string): list<string>\\n \\nThe pattern is a string that contains a regular expression.
\\nExamples
\\nextract("references are 1234, 1256, 1378", "12[0-9]*")\\n// ["1234","1256"]\\n \\n\"\n\t},\n\t{\n\t\tname: \"now()\",\n\t\tdescription: \"Returns the current date and time including the timezone.
\\nFunction signature
\\nnow(): date and time\\n \\nExamples
\\nnow()\\n// date and time("2020-07-31T14:27:30@Europe/Berlin")\\n \\n\"\n\t},\n\t{\n\t\tname: \"today()\",\n\t\tdescription: \"Returns the current date.
\\nFunction signature
\\ntoday(): date\\n \\nExamples
\\ntoday()\\n// date("2020-07-31")\\n \\n\"\n\t},\n\t{\n\t\tname: \"day of week(date)\",\n\t\tdescription: \"Returns the day of the week according to the Gregorian calendar. Note that it always returns the English name of the day.
\\nFunction signature
\\nday of week(date: date): string\\n \\nday of week(date: date and time): string\\n \\nExamples
\\nday of week(date("2019-09-17"))\\n// "Tuesday"\\n\\nday of week(date and time("2019-09-17T12:00:00"))\\n// "Tuesday"\\n \\n\"\n\t},\n\t{\n\t\tname: \"day of year(date)\",\n\t\tdescription: \"Returns the Gregorian number of the day within the year.
\\nFunction signature
\\nday of year(date: date): number\\n \\nday of year(date: date and time): number\\n \\nExamples
\\nday of year(date("2019-09-17"))\\n// 260\\n\\nday of year(date and time("2019-09-17T12:00:00"))\\n// 260\\n \\n\"\n\t},\n\t{\n\t\tname: \"week of year(date)\",\n\t\tdescription: \"Returns the Gregorian number of the week within the year, according to ISO 8601.
\\nFunction signature
\\nweek of year(date: date): number\\n \\nweek of year(date: date and time): number\\n \\nExamples
\\nweek of year(date("2019-09-17"))\\n// 38\\n\\nweek of year(date and time("2019-09-17T12:00:00"))\\n// 38\\n \\n\"\n\t},\n\t{\n\t\tname: \"month of year(date)\",\n\t\tdescription: \"Returns the month of the year according to the Gregorian calendar. Note that it always returns the English name of the month.
\\nFunction signature
\\nmonth of year(date: date): string\\n \\nmonth of year(date: date and time): string\\n \\nExamples
\\nmonth of year(date("2019-09-17"))\\n// "September"\\n\\nmonth of year(date and time("2019-09-17T12:00:00"))\\n// "September"\\n \\n\"\n\t},\n\t{\n\t\tname: \"abs(n)\",\n\t\tdescription: \"Returns the absolute value of a given duration.
\\nFunction signature
\\nabs(n: days and time duration): days and time duration\\n \\nabs(n: years and months duration): years and months duration\\n \\nExamples
\\nabs(duration("-PT5H"))\\n// "duration("PT5H")"\\n\\nabs(duration("PT5H"))\\n// "duration("PT5H")"\\n\\nabs(duration("-P2M"))\\n// duration("P2M")\\n \\n\"\n\t},\n\t{\n\t\tname: \"last day of month(date)\",\n\t\tdescription: \"Camunda Extension
\\nTakes the month of the given date or date-time value and returns the last day of this month.
\\nFunction signature
\\nlast day of month(date: date): date\\n \\nlast day of month(date: date and time): date\\n \\nExamples
\\nlast day of month(date("2022-10-01"))\\n// date("2022-10-31"))\\n\\nlast day of month(date and time("2022-10-16T12:00:00"))\\n// date("2022-10-31"))\\n \\n\"\n\t},\n\t{\n\t\tname: \"is empty(list)\",\n\t\tdescription: \"Camunda Extension
\\nReturns true if the given list is empty. Otherwise, returns false.
\\nFunction signature
\\nis empty(list: list): boolean \\nExamples
\\nis empty([])\\n// true\\n\\nis empty([1,2,3])\\n// false\\n \"\n\t},\n\t{\n\t\tname: \"trim(string)\",\n\t\tdescription: \"Camunda Extension
\\nReturns the given string without leading and trailing spaces.
\\nFunction signature
\\ntrim(string: string): string \\nExamples
\\ntrim(\\\" hello world \\\")\\n// \\\"hello world\\\"\\n\\ntrim(\\\"hello world \\\")\\n// \\\"hello world\\\"\\n \"\n\t},\n\t{\n\t\tname: \"uuid()\",\n\t\tdescription: \"Camunda Extension
\\nReturns a UUID (Universally Unique Identifier) with 36 characters.
\\nFunction signature
\\nuuid(): string \\nExamples
\\nuuid()\\n// \\\"7793aab1-d761-4d38-916b-b7270e309894\\\"\\n \"\n\t},\n\t{\n\t\tname: \"to base64(string)\",\n\t\tdescription: \"Camunda Extension
\\nReturns the given string encoded in Base64 format.
\\nFunction signature
\\nto base64(value: string): string \\nExamples
\\nto base64(\\\"FEEL\\\")\\n// \\\"RkVFTA==\\\"\\n \"\n\t}\n];\n\n/**\n * @param { import('..').Builtin[] } builtins\n *\n * @returns {import('..').Variable[] } variable\n */\nfunction parseBuiltins(builtins) {\n return builtins.map(parseBuiltin);\n}\n\n/**\n * @param { import('..').Builtin } builtin\n *\n * @returns { import('..').Variable } variable\n */\nfunction parseBuiltin(builtin) {\n\n const {\n name,\n description\n } = builtin;\n\n const match = name.match(/^([\\w\\s]+)\\((.*)\\)$/);\n const functionName = match[1];\n const functionArguments = match[2];\n\n // parameterless function matches as empty string\n const params = functionArguments ? functionArguments.split(', ').map(name => ({ name })) : [];\n\n return {\n name: functionName,\n type: 'function',\n params,\n info: () => {\n return (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.domify)(`${description}
`);\n },\n boost: 0\n };\n}\n\nconst camunda = parseBuiltins(camundaTags);\n\n/**\n * @typedef { import('./core').Variable } Variable\n */\n\n/**\n * @typedef {object} Builtin\n * @property {string} name\n * @property {string} description\n */\n\nconst coreConf = new _codemirror_state__WEBPACK_IMPORTED_MODULE_7__.Compartment();\nconst placeholderConf = new _codemirror_state__WEBPACK_IMPORTED_MODULE_7__.Compartment();\n\n\n/**\n * Creates a FEEL editor in the supplied container\n *\n * @param {Object} config\n * @param {DOMNode} config.container\n * @param {Extension[]} [config.extensions]\n * @param {Dialect} [config.dialect='expression']\n * @param {DOMNode|String} [config.tooltipContainer]\n * @param {Function} [config.onChange]\n * @param {Function} [config.onKeyDown]\n * @param {Function} [config.onLint]\n * @param {Boolean} [config.readOnly]\n * @param {String} [config.value]\n * @param {Variable[]} [config.variables]\n * @param {Variable[]} [config.builtins]\n *\n * @returns {Object} editor\n */\nfunction FeelEditor({\n extensions: editorExtensions = [],\n dialect = 'expression',\n container,\n contentAttributes = {},\n tooltipContainer,\n onChange = () => {},\n onKeyDown = () => {},\n onLint = () => {},\n placeholder: placeholder$1 = '',\n readOnly = false,\n value = '',\n builtins = camunda,\n variables = []\n}) {\n\n const changeHandler = _codemirror_view__WEBPACK_IMPORTED_MODULE_3__.EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n onChange(update.state.doc.toString());\n }\n });\n\n const lintHandler = _codemirror_view__WEBPACK_IMPORTED_MODULE_3__.EditorView.updateListener.of((update) => {\n const diagnosticEffects = update.transactions\n .flatMap(t => t.effects)\n .filter(effect => effect.is(_codemirror_lint__WEBPACK_IMPORTED_MODULE_2__.setDiagnosticsEffect));\n\n if (!diagnosticEffects.length) {\n return;\n }\n\n const messages = diagnosticEffects.flatMap(effect => effect.value);\n\n onLint(messages);\n });\n\n const keyHandler = _codemirror_view__WEBPACK_IMPORTED_MODULE_3__.EditorView.domEventHandlers(\n {\n keydown: onKeyDown\n }\n );\n\n if (typeof tooltipContainer === 'string') {\n tooltipContainer = document.querySelector(tooltipContainer);\n }\n\n const tooltipLayout = tooltipContainer ? (0,_codemirror_view__WEBPACK_IMPORTED_MODULE_3__.tooltips)({\n tooltipSpace: function() {\n return tooltipContainer.getBoundingClientRect();\n }\n }) : [];\n\n const extensions = [\n (0,_codemirror_autocomplete__WEBPACK_IMPORTED_MODULE_5__.autocompletion)(),\n coreConf.of(configure({\n dialect,\n builtins,\n variables\n })),\n (0,_codemirror_language__WEBPACK_IMPORTED_MODULE_4__.bracketMatching)(),\n (0,_codemirror_language__WEBPACK_IMPORTED_MODULE_4__.indentOnInput)(),\n (0,_codemirror_autocomplete__WEBPACK_IMPORTED_MODULE_5__.closeBrackets)(),\n _codemirror_view__WEBPACK_IMPORTED_MODULE_3__.EditorView.contentAttributes.of(contentAttributes),\n changeHandler,\n keyHandler,\n _codemirror_view__WEBPACK_IMPORTED_MODULE_3__.keymap.of([\n ..._codemirror_commands__WEBPACK_IMPORTED_MODULE_9__.defaultKeymap,\n ]),\n linter,\n lintHandler,\n tooltipLayout,\n placeholderConf.of((0,_codemirror_view__WEBPACK_IMPORTED_MODULE_3__.placeholder)(placeholder$1)),\n theme,\n ...editorExtensions\n ];\n\n if (readOnly) {\n extensions.push(_codemirror_view__WEBPACK_IMPORTED_MODULE_3__.EditorView.editable.of(false));\n }\n\n this._cmEditor = new _codemirror_view__WEBPACK_IMPORTED_MODULE_3__.EditorView({\n state: _codemirror_state__WEBPACK_IMPORTED_MODULE_7__.EditorState.create({\n doc: value,\n extensions\n }),\n parent: container\n });\n\n return this;\n}\n\n/**\n * Replaces the content of the Editor\n *\n * @param {String} value\n */\nFeelEditor.prototype.setValue = function(value) {\n this._cmEditor.dispatch({\n changes: {\n from: 0,\n to: this._cmEditor.state.doc.length,\n insert: value,\n }\n });\n};\n\n/**\n * Sets the focus in the editor.\n */\nFeelEditor.prototype.focus = function(position) {\n const cmEditor = this._cmEditor;\n\n // the Codemirror `focus` method always calls `focus` with `preventScroll`,\n // so we have to focus + scroll manually\n cmEditor.contentDOM.focus();\n cmEditor.focus();\n\n if (typeof position === 'number') {\n const end = cmEditor.state.doc.length;\n cmEditor.dispatch({ selection: { anchor: position <= end ? position : end } });\n }\n};\n\n/**\n * Returns the current selection ranges. If no text is selected, a single\n * range with the start and end index at the cursor position will be returned.\n *\n * @returns {Object} selection\n * @returns {Array} selection.ranges\n */\nFeelEditor.prototype.getSelection = function() {\n return this._cmEditor.state.selection;\n};\n\n/**\n * Set variables to be used for autocompletion.\n *\n * @param {Variable[]} variables\n */\nFeelEditor.prototype.setVariables = function(variables) {\n\n const {\n dialect,\n builtins\n } = get(this._cmEditor.state);\n\n this._cmEditor.dispatch({\n effects: [\n coreConf.reconfigure(configure({\n dialect,\n builtins,\n variables\n }))\n ]\n });\n};\n\n/**\n * Update placeholder text.\n *\n * @param {string} placeholder\n */\nFeelEditor.prototype.setPlaceholder = function(placeholder$1) {\n this._cmEditor.dispatch({\n effects: placeholderConf.reconfigure((0,_codemirror_view__WEBPACK_IMPORTED_MODULE_3__.placeholder)(placeholder$1))\n });\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vZmVlbC1lZGl0b3IvZGlzdC9pbmRleC5lcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUE0RjtBQUN2QztBQUNpRTtBQUMxQztBQUNSO0FBQ1M7QUFDM0I7QUFDVjtBQUNpRTtBQUN4RTs7QUFFakMsZUFBZSx3REFBUSxDQUFDLGdFQUFZOztBQUVwQyxrQkFBa0Isd0RBQVU7QUFDNUI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELHVCQUF1Qix3REFBVTtBQUNqQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELHNCQUFzQix3RUFBa0I7QUFDeEMsRUFBRSxnRUFBYztBQUNoQixNQUFNLEtBQUssa0RBQUksc0NBQXNDO0FBQ3JELE1BQU0sS0FBSyxrREFBSSw4QkFBOEI7QUFDN0MsTUFBTSxLQUFLLGtEQUFJLDBCQUEwQjtBQUN6QyxNQUFNLEtBQUssa0RBQUksMEJBQTBCO0FBQ3pDLE1BQU0sS0FBSyxrREFBSSxzQkFBc0I7QUFDckMsTUFBTSxLQUFLLGtEQUFJLFVBQVUsa0RBQUksbUNBQW1DO0FBQ2hFLE1BQU0sS0FBSyxrREFBSSxVQUFVLGtEQUFJLFNBQVMsa0RBQUksb0NBQW9DO0FBQzlFLE1BQU0sS0FBSyxrREFBSSxtQ0FBbUM7QUFDbEQsTUFB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Q0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0Esd2NBQXdjLFlBQVksZUFBZSxVQUFVO0FBQzdlLEVBQUU7QUFDRjtBQUNBO0FBQ0Esd2RBQXdkLFlBQVksa0JBQWtCLFNBQVM7QUFDL2YsRUFBRTtBQUNGO0FBQ0E7QUFDQSwyU0FBMlMsU0FBUztBQUNwVCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLDJTQUEyUyxVQUFVLFlBQVksVUFBVTtBQUMzVSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLDJTQUEyUyxV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dUJBQXVCLDZEQUFXO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQix3REFBVTtBQUM5Qjs7QUFFQSx1QkFBdUIsd0RBQVU7QUFDakMsV0FBVywwREFBVztBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixhQUFhLDRDQUE0QztBQUNqRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLDZEQUFXO0FBQ3BELEdBQUc7QUFDSDs7QUFFaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vZmVlbC1lZGl0b3IvZGlzdC9pbmRleC5lcy5qcz84ZGRmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNuaXBwZXRDb21wbGV0aW9uLCBhdXRvY29tcGxldGlvbiwgY2xvc2VCcmFja2V0cyB9IGZyb20gJ0Bjb2RlbWlycm9yL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBkZWZhdWx0S2V5bWFwIH0gZnJvbSAnQGNvZGVtaXJyb3IvY29tbWFuZHMnO1xuaW1wb3J0IHsgc3ludGF4SGlnaGxpZ2h0aW5nLCBIaWdobGlnaHRTdHlsZSwgc3ludGF4VHJlZSwgYnJhY2tldE1hdGNoaW5nLCBpbmRlbnRPbklucHV0IH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgbGludGVyIGFzIGxpbnRlciQxLCBzZXREaWFnbm9zdGljc0VmZmVjdCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xpbnQnO1xuaW1wb3J0IHsgRmFjZXQsIENvbXBhcnRtZW50LCBFZGl0b3JTdGF0ZSB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IEVkaXRvclZpZXcsIHRvb2x0aXBzLCBrZXltYXAsIHBsYWNlaG9sZGVyIH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBjbUZlZWxMaW50ZXIgfSBmcm9tICdAYnBtbi1pby9mZWVsLWxpbnQnO1xuaW1wb3J0IHsgdGFncyB9IGZyb20gJ0BsZXplci9oaWdobGlnaHQnO1xuaW1wb3J0IHsgc25pcHBldENvbXBsZXRpb24gYXMgc25pcHBldENvbXBsZXRpb24kMSwgc25pcHBldHMsIGtleXdvcmRDb21wbGV0aW9ucywgZmVlbCB9IGZyb20gJ2xhbmctZmVlbCc7XG5pbXBvcnQgeyBkb21pZnkgfSBmcm9tICdtaW4tZG9tJztcblxudmFyIGxpbnRlciA9IFsgbGludGVyJDEoY21GZWVsTGludGVyKCkpIF07XG5cbmNvbnN0IGJhc2VUaGVtZSA9IEVkaXRvclZpZXcudGhlbWUoe1xuICAnJiAuY20tY29udGVudCc6IHtcbiAgICBwYWRkaW5nOiAnMHB4JyxcbiAgfSxcbiAgJyYgLmNtLWxpbmUnOiB7XG4gICAgcGFkZGluZzogJzBweCcsXG4gIH0sXG4gICcmLmNtLWVkaXRvci5jbS1mb2N1c2VkJzoge1xuICAgIG91dGxpbmU6ICdub25lJyxcbiAgfSxcbiAgJyYgLmNtLWNvbXBsZXRpb25JbmZvJzoge1xuICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJ1xuICB9LFxuICAnJi5jbS1lZGl0b3InOiB7XG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gIH0sXG5cbiAgLy8gRG9uJ3Qgd3JhcCB3aGl0ZXNwYWNlIGZvciBjdXN0b20gSFRNTFxuICAnJiAuY20tY29tcGxldGlvbkluZm8gPiAqJzoge1xuICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnXG4gIH0sXG4gICcmIC5jbS1jb21wbGV0aW9uSW5mbyB1bCc6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZ0xlZnQ6ICcxNXB4J1xuICB9LFxuICAnJiAuY20tY29tcGxldGlvbkluZm8gcHJlJzoge1xuICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgICB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnXG4gIH0sXG4gICcmIC5jbS1jb21wbGV0aW9uSW5mbyBwJzoge1xuICAgIG1hcmdpblRvcDogMCxcbiAgfSxcbiAgJyYgLmNtLWNvbXBsZXRpb25JbmZvIHA6bm90KDpsYXN0LW9mLXR5cGUpJzoge1xuICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgfVxufSk7XG5cbmNvbnN0IGhpZ2hsaWdodFRoZW1lID0gRWRpdG9yVmlldy5iYXNlVGhlbWUoe1xuICAnJiAudmFyaWFibGVOYW1lJzoge1xuICAgIGNvbG9yOiAnIzEwZidcbiAgfSxcbiAgJyYgLm51bWJlcic6IHtcbiAgICBjb2xvcjogJyMxNjQnXG4gIH0sXG4gICcmIC5zdHJpbmcnOiB7XG4gICAgY29sb3I6ICcjYTExJ1xuICB9LFxuICAnJiAuYm9vbCc6IHtcbiAgICBjb2xvcjogJyMyMTknXG4gIH0sXG4gICcmIC5mdW5jdGlvbic6IHtcbiAgICBjb2xvcjogJyNhYTM3MzEnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJ1xuICB9LFxuICAnJiAuY29udHJvbCc6IHtcbiAgICBjb2xvcjogJyM3MDgnXG4gIH1cbn0pO1xuXG5jb25zdCBzeW50YXhDbGFzc2VzID0gc3ludGF4SGlnaGxpZ2h0aW5nKFxuICBIaWdobGlnaHRTdHlsZS5kZWZpbmUoW1xuICAgIHsgdGFnOiB0YWdzLnZhcmlhYmxlTmFtZSwgY2xhc3M6ICd2YXJpYWJsZU5hbWUnIH0sXG4gICAgeyB0YWc6IHRhZ3MubmFtZSwgY2xhc3M6ICd2YXJpYWJsZU5hbWUnIH0sXG4gICAgeyB0YWc6IHRhZ3MubnVtYmVyLCBjbGFzczogJ251bWJlcicgfSxcbiAgICB7IHRhZzogdGFncy5zdHJpbmcsIGNsYXNzOiAnc3RyaW5nJyB9LFxuICAgIHsgdGFnOiB0YWdzLmJvb2wsIGNsYXNzOiAnYm9vbCcgfSxcbiAgICB7IHRhZzogdGFncy5mdW5jdGlvbih0YWdzLnZhcmlhYmxlTmFtZSksIGNsYXNzOiAnZnVuY3Rpb24nIH0sXG4gICAgeyB0YWc6IHRhZ3MuZnVuY3Rpb24odGFncy5zcGVjaWFsKHRhZ3MudmFyaWFibGVOYW1lKSksIGNsYXNzOiAnZnVuY3Rpb24nIH0sXG4gICAgeyB0YWc6IHRhZ3MuY29udHJvbEtleXdvcmQsIGNsYXNzOiAnY29udHJvbCcgfSxcbiAgICB7IHRhZzogdGFncy5vcGVyYXRvcktleXdvcmQsIGNsYXNzOiAnY29udHJvbCcgfVxuICBdKVxuKTtcblxudmFyIHRoZW1lID0gWyBiYXNlVGhlbWUsIGhpZ2hsaWdodFRoZW1lLCBzeW50YXhDbGFzc2VzIF07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBfaXNFbXB0eShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUuZnJvbSA9PT0gbm9kZS50bztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gbm9kZVxuICogQHBhcmFtIHtudW1iZXJ9IHBvc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkobm9kZSwgcG9zKSB7XG5cbiAgLy8gRm9yIHRoZSBzcGVjaWFsIGNhc2Ugb2YgZW1wdHkgbm9kZXMsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgbm9kZVxuICAvLyBhcyB3ZWxsLiBUaGUgcHJldmlvdXMgbm9kZSBjb3VsZCBiZSBwYXJ0IG9mIGFub3RoZXIgdG9rZW4sIGUuZy5cbiAgLy8gd2hlbiB0eXBpbmcgZnVuY3Rpb25zIFwiYWJzKFwiLlxuICBjb25zdCBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG5cbiAgcmV0dXJuIF9pc0VtcHR5KG5vZGUpIHx8IChcbiAgICBuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5mcm9tID09PSBwb3MgJiYgX2lzRW1wdHkobmV4dE5vZGUpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzVmFyaWFibGVOYW1lKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5wYXJlbnQgJiYgbm9kZS5wYXJlbnQubmFtZSA9PT0gJ1ZhcmlhYmxlTmFtZSc7XG59XG5cbmZ1bmN0aW9uIGlzUGF0aEV4cHJlc3Npb24obm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gaXNQYXRoRXhwcmVzc2lvbihub2RlLnBhcmVudCk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uL2NvcmUnKS5WYXJpYWJsZSB9IFZhcmlhYmxlXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJykuQ29tcGxldGlvblNvdXJjZSB9IENvbXBsZXRpb25Tb3VyY2VcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7IHtcbiAqICAgdmFyaWFibGVzPzogVmFyaWFibGVbXSxcbiAqIH0gfSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7IENvbXBsZXRpb25Tb3VyY2UgfVxuICovXG5mdW5jdGlvbiBwYXRoRXhwcmVzc2lvbkNvbXBsZXRpb24oeyB2YXJpYWJsZXMgfSkge1xuXG4gIHJldHVybiAoY29udGV4dCkgPT4ge1xuXG4gICAgY29uc3Qgbm9kZUJlZm9yZSA9IHN5bnRheFRyZWUoY29udGV4dC5zdGF0ZSkucmVzb2x2ZShjb250ZXh0LnBvcywgLTEpO1xuXG4gICAgaWYgKCFpc1BhdGhFeHByZXNzaW9uKG5vZGVCZWZvcmUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGZpbmRQYXRoRXhwcmVzc2lvbihub2RlQmVmb3JlKTtcblxuICAgIC8vIGlmIHRoZSBjdXJzb3IgaXMgZGlyZWN0bHkgYWZ0ZXIgdGhlIGAuYCwgdmFyaWFibGUgc3RhcnRzIGF0IHRoZSBjdXJzb3IgcG9zaXRpb25cbiAgICBjb25zdCBmcm9tID0gbm9kZUJlZm9yZSA9PT0gZXhwcmVzc2lvbiA/IGNvbnRleHQucG9zIDogbm9kZUJlZm9yZS5mcm9tO1xuXG4gICAgY29uc3QgcGF0aCA9IGdldFBhdGgoZXhwcmVzc2lvbiwgY29udGV4dCk7XG5cbiAgICBsZXQgb3B0aW9ucyA9IHZhcmlhYmxlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGRWYXIgPSBvcHRpb25zLmZpbmQodmFsID0+IHZhbC5uYW1lID09PSBwYXRoW2ldLm5hbWUpO1xuXG4gICAgICBpZiAoIWNoaWxkVmFyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IHN1Z2dlc3QgaWYgdmFyaWFibGUgdHlwZSBtYXRjaGVzXG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkVmFyLmlzTGlzdCAhPT0gJ29wdGlvbmFsJyAmJlxuICAgICAgICAhIWNoaWxkVmFyLmlzTGlzdCAhPT0gcGF0aFtpXS5pc0xpc3RcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMgPSBjaGlsZFZhci5lbnRyaWVzO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucykgcmV0dXJuO1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMubWFwKHYgPT4gKHtcbiAgICAgIGxhYmVsOiB2Lm5hbWUsXG4gICAgICB0eXBlOiAndmFyaWFibGUnLFxuICAgICAgaW5mbzogdi5pbmZvLFxuICAgICAgZGV0YWlsOiB2LmRldGFpbFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIGZyb206IGZyb20sXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cblxuZnVuY3Rpb24gZmluZFBhdGhFeHByZXNzaW9uKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uYW1lID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICB9XG59XG5cbi8vIHBhcnNlcyB0aGUgcGF0aCBleHByZXNzaW9uIGludG8gYSBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzIHdpdGggdHlwZSBpbmZvcm1hdGlvblxuLy8gZS5nLiBmb29bMF0uYmFyID0+IFsgeyBuYW1lOiAnZm9vJywgaXNMaXN0OiB0cnVlIH0sIHsgbmFtZTogJ2JhcicsIGlzTGlzdDogZmFsc2UgfSBdXG5mdW5jdGlvbiBnZXRQYXRoKG5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHBhdGggPSBbXTtcblxuICBmb3IgKGxldCBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcpIHtcbiAgICBpZiAoY2hpbGQubmFtZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykge1xuICAgICAgcGF0aC5wdXNoKC4uLmdldFBhdGgoY2hpbGQsIGNvbnRleHQpKTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkLm5hbWUgPT09ICdGaWx0ZXJFeHByZXNzaW9uJykge1xuICAgICAgcGF0aC5wdXNoKC4uLmdldEZpbHRlcihjaGlsZCwgY29udGV4dCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBhdGgucHVzaCh7XG4gICAgICAgIG5hbWU6IGdldE5vZGVDb250ZW50KGNoaWxkLCBjb250ZXh0KSxcbiAgICAgICAgaXNMaXN0OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXIobm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsaXN0ID0gbm9kZS5maXJzdENoaWxkO1xuXG4gIGlmIChsaXN0Lm5hbWUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aChsaXN0LCBjb250ZXh0KTtcbiAgICBjb25zdCBsYXN0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIGxhc3QuaXNMaXN0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIFsge1xuICAgIG5hbWU6IGdldE5vZGVDb250ZW50KGxpc3QsIGNvbnRleHQpLFxuICAgIGlzTGlzdDogdHJ1ZVxuICB9IF07XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb250ZW50KG5vZGUsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGNvbnRleHQuc3RhdGUuc2xpY2VEb2Mobm9kZS5mcm9tLCBub2RlLnRvKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi4vY29yZScpLlZhcmlhYmxlIH0gVmFyaWFibGVcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCdAY29kZW1pcnJvci9hdXRvY29tcGxldGUnKS5Db21wbGV0aW9uU291cmNlIH0gQ29tcGxldGlvblNvdXJjZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHsge1xuICogICB2YXJpYWJsZXM/OiBWYXJpYWJsZVtdLFxuICogICBidWlsdGlucz86IFZhcmlhYmxlW11cbiAqIH0gfSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7IENvbXBsZXRpb25Tb3VyY2UgfVxuICovXG5mdW5jdGlvbiB2YXJpYWJsZUNvbXBsZXRpb24oeyB2YXJpYWJsZXMgPSBbXSwgYnVpbHRpbnMgPSBbXSB9KSB7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IGdldFZhcmlhYmxlU3VnZ2VzdGlvbnModmFyaWFibGVzLCBidWlsdGlucyk7XG5cbiAgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiAoY29udGV4dCkgPT4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoY29udGV4dCkgPT4ge1xuXG4gICAgY29uc3Qge1xuICAgICAgcG9zLFxuICAgICAgc3RhdGVcbiAgICB9ID0gY29udGV4dDtcblxuICAgIC8vIGluIG1vc3QgY2FzZXMsIHVzZSB3aGF0IGlzIHR5cGVkIGJlZm9yZSB0aGUgY3Vyc29yXG4gICAgY29uc3Qgbm9kZUJlZm9yZSA9IHN5bnRheFRyZWUoc3RhdGUpLnJlc29sdmUocG9zLCAtMSk7XG5cbiAgICBpZiAoaXNFbXB0eShub2RlQmVmb3JlLCBwb3MpKSB7XG4gICAgICByZXR1cm4gY29udGV4dC5leHBsaWNpdCA/IHtcbiAgICAgICAgZnJvbTogcG9zLFxuICAgICAgICBvcHRpb25zXG4gICAgICB9IDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbmx5IGF1dG8tY29tcGxldGUgdmFyaWFibGVzXG4gICAgaWYgKCFpc1ZhcmlhYmxlTmFtZShub2RlQmVmb3JlKSB8fCBpc1BhdGhFeHByZXNzaW9uKG5vZGVCZWZvcmUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogbm9kZUJlZm9yZS5mcm9tLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHsgVmFyaWFibGVbXSB9IHZhcmlhYmxlc1xuICogQHBhcmFtIHsgVmFyaWFibGVbXSB9IGJ1aWx0aW5zXG4gKlxuICogQHJldHVybnMge2ltcG9ydCgnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJykuQ29tcGxldGlvbltdfVxuICovXG5mdW5jdGlvbiBnZXRWYXJpYWJsZVN1Z2dlc3Rpb25zKHZhcmlhYmxlcywgYnVpbHRpbnMpIHtcbiAgcmV0dXJuIFtdLmNvbmNhdChcbiAgICB2YXJpYWJsZXMubWFwKHYgPT4gY3JlYXRlVmFyaWFibGVTdWdnZXN0aW9uKHYpKSxcbiAgICBidWlsdGlucy5tYXAoYiA9PiBjcmVhdGVWYXJpYWJsZVN1Z2dlc3Rpb24oYikpXG4gICk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uJykuVmFyaWFibGV9IHZhcmlhYmxlXG4gKiBAcGFyYW0ge251bWJlcn0gYm9vc3RcblxuICogQHJldHVybnMge2ltcG9ydCgnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJykuQ29tcGxldGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVmFyaWFibGVTdWdnZXN0aW9uKHZhcmlhYmxlLCBib29zdCkge1xuICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjcmVhdGVGdW5jdGlvblZhcmlhYmxlKHZhcmlhYmxlLCBib29zdCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxhYmVsOiB2YXJpYWJsZS5uYW1lLFxuICAgIHR5cGU6ICd2YXJpYWJsZScsXG4gICAgaW5mbzogdmFyaWFibGUuaW5mbyxcbiAgICBkZXRhaWw6IHZhcmlhYmxlLmRldGFpbCxcbiAgICBib29zdFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLicpLlZhcmlhYmxlfSB2YXJpYWJsZVxuICogQHBhcmFtIHtudW1iZXJ9IGJvb3N0XG4gKlxuICogQHJldHVybnMge2ltcG9ydCgnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJykuQ29tcGxldGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25WYXJpYWJsZSh2YXJpYWJsZSwgYm9vc3QpIHtcbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgaW5mbyxcbiAgICBkZXRhaWwsXG4gICAgcGFyYW1zID0gW11cbiAgfSA9IHZhcmlhYmxlO1xuXG4gIGNvbnN0IHBhcmFtc1dpdGhOYW1lcyA9IHBhcmFtcy5tYXAoKHsgbmFtZSwgdHlwZSB9LCBpbmRleCkgPT4gKHtcbiAgICBuYW1lOiBuYW1lIHx8IGBwYXJhbSAke2luZGV4ICsgMX1gLFxuICAgIHR5cGVcbiAgfSkpO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gYCR7bmFtZX0oJHtwYXJhbXNXaXRoTmFtZXMubWFwKHAgPT4gJyR7JyArIHAubmFtZSArICd9Jykuam9pbignLCAnKX0pYDtcblxuICBjb25zdCBwYXJhbXNTaWduYXR1cmUgPSBwYXJhbXNXaXRoTmFtZXMubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4gKFxuICAgIHR5cGUgPyBgJHtuYW1lfTogJHt0eXBlfWAgOiBuYW1lXG4gICkpLmpvaW4oJywgJyk7XG4gIGNvbnN0IGxhYmVsID0gYCR7bmFtZX0oJHtwYXJhbXNTaWduYXR1cmV9KWA7XG5cbiAgcmV0dXJuIHNuaXBwZXRDb21wbGV0aW9uKHRlbXBsYXRlLCB7XG4gICAgbGFiZWwsXG4gICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICBpbmZvLFxuICAgIGRldGFpbCxcbiAgICBib29zdFxuICB9KTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi4vY29yZScpLlZhcmlhYmxlIH0gVmFyaWFibGVcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCdAY29kZW1pcnJvci9hdXRvY29tcGxldGUnKS5Db21wbGV0aW9uU291cmNlIH0gQ29tcGxldGlvblNvdXJjZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHsge1xuICogICB2YXJpYWJsZXM/OiBWYXJpYWJsZVtdLFxuICogICBidWlsdGlucz86IFZhcmlhYmxlW11cbiAqIH0gfSBvcHRpb25zXG4gKlxuICogQHJldHVybiB7IENvbXBsZXRpb25Tb3VyY2VbXSB9XG4gKi9cbmZ1bmN0aW9uIGNvbXBsZXRpb25zKHsgdmFyaWFibGVzID0gW10sIGJ1aWx0aW5zID0gW10gfSkge1xuXG4gIHJldHVybiBbXG4gICAgcGF0aEV4cHJlc3Npb25Db21wbGV0aW9uKHsgdmFyaWFibGVzIH0pLFxuICAgIHZhcmlhYmxlQ29tcGxldGlvbih7IHZhcmlhYmxlcywgYnVpbHRpbnMgfSksXG4gICAgc25pcHBldENvbXBsZXRpb24kMShzbmlwcGV0cy5tYXAoc25pcHBldCA9PiAoeyAuLi5zbmlwcGV0LCBib29zdDogLTEgfSkpKSxcbiAgICAuLi5rZXl3b3JkQ29tcGxldGlvbnNcbiAgXTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7ICdleHByZXNzaW9uJyB8ICd1bmFyeVRlc3RzJyB9IERpYWxlY3RcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7IHtcbiAqICAgZGlhbGVjdD86IERpYWxlY3QsXG4gKiAgIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICogICBjb21wbGV0aW9ucz86IGltcG9ydCgnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJykuQ29tcGxldGlvblNvdXJjZVtdXG4gKiB9IH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm4geyBpbXBvcnQoJ0Bjb2RlbWlycm9yL2xhbmd1YWdlJykuTGFuZ3VhZ2VTdXBwb3J0IH1cbiAqL1xuZnVuY3Rpb24gbGFuZ3VhZ2Uob3B0aW9ucykge1xuICByZXR1cm4gZmVlbChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyBpbXBvcnQoJy4uL2NvcmUnKS5WYXJpYWJsZVtdIH0gdmFyaWFibGVzXG4gKlxuICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29udGV4dCh2YXJpYWJsZXMsIGJ1aWx0aW5zKSB7XG4gIHJldHVybiB2YXJpYWJsZXMuc2xpY2UoKS5yZXZlcnNlKCkucmVkdWNlKChjb250ZXh0LCBidWlsdGluKSA9PiB7XG4gICAgY29udGV4dFtidWlsdGluLm5hbWVdID0gKCkgPT4ge307XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsgJ2V4cHJlc3Npb24nIHwgJ3VuYXJ5VGVzdHMnIH0gRGlhbGVjdFxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4uJykuVmFyaWFibGUgfSBWYXJpYWJsZVxuICovXG5cbi8qKlxuICogQHR5cGUge0ZhY2V0PFZhcmlhYmxlW10+fVxuICovXG5jb25zdCBidWlsdGluc0ZhY2V0ID0gRmFjZXQuZGVmaW5lKCk7XG5cbi8qKlxuICogQHR5cGUge0ZhY2V0PFZhcmlhYmxlW10+fVxuICovXG5jb25zdCB2YXJpYWJsZXNGYWNldCA9IEZhY2V0LmRlZmluZSgpO1xuXG4vKipcbiAqIEB0eXBlIHtGYWNldDxkaWFsZWN0Pn1cbiAqL1xuY29uc3QgZGlhbGVjdEZhY2V0ID0gRmFjZXQuZGVmaW5lKCk7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVmFyaWFibGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIG5hbWUgb3Iga2V5IG9mIHRoZSB2YXJpYWJsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbmZvXSBzaG9ydCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaWFibGUsIGUuZy4gdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXRhaWxdIGxvbmdlciBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaWFibGUgY29udGVudFxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNMaXN0XSB3aGV0aGVyIHRoZSB2YXJpYWJsZSBpcyBhIGxpc3RcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8VmFyaWFibGU+fSBbc2NoZW1hXSBhcnJheSBvZiBjaGlsZCB2YXJpYWJsZXMgaWYgdGhlIHZhcmlhYmxlIGlzIGEgY29udGV4dCBvciBsaXN0XG4gKiBAcHJvcGVydHkgeydmdW5jdGlvbid8J3ZhcmlhYmxlJ30gW3R5cGVdIHR5cGUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcHJvcGVydHkge0FycmF5PHtuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZ30+fSBbcGFyYW1zXSBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgZGlhbGVjdD86IGltcG9ydCgnLi4vbGFuZ3VhZ2UnKS5EaWFsZWN0LFxuICogICB2YXJpYWJsZXM/OiBWYXJpYWJsZVtdLFxuICogICBidWlsdGlucz86IFZhcmlhYmxlW11cbiAqIH0gfSBDb3JlQ29uZmlnXG4gKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0Bjb2RlbWlycm9yL2F1dG9jb21wbGV0ZScpLkNvbXBsZXRpb25Tb3VyY2UgfSBDb21wbGV0aW9uU291cmNlXG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnQGNvZGVtaXJyb3Ivc3RhdGUnKS5FeHRlbnNpb24gfSBFeHRlbnNpb25cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7IENvcmVDb25maWcgJiB7IGNvbXBsZXRpb25zPzogQ29tcGxldGlvblNvdXJjZVtdIH0gfSBjb25maWdcbiAqXG4gKiBAcmV0dXJuIHsgRXh0ZW5zaW9uICB9XG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZSh7XG4gIGRpYWxlY3QgPSAnZXhwcmVzc2lvbicsXG4gIHZhcmlhYmxlcyA9IFtdLFxuICBidWlsdGlucyA9IFtdLFxuICBjb21wbGV0aW9uczogY29tcGxldGlvbnMkMSA9IGNvbXBsZXRpb25zKHsgYnVpbHRpbnMsIHZhcmlhYmxlcyB9KVxufSkge1xuXG4gIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0KFsgLi4udmFyaWFibGVzLCAuLi5idWlsdGlucyBdKTtcblxuICByZXR1cm4gW1xuICAgIGRpYWxlY3RGYWNldC5vZihkaWFsZWN0KSxcbiAgICBidWlsdGluc0ZhY2V0Lm9mKGJ1aWx0aW5zKSxcbiAgICB2YXJpYWJsZXNGYWNldC5vZih2YXJpYWJsZXMpLFxuICAgIGxhbmd1YWdlKHtcbiAgICAgIGRpYWxlY3QsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29tcGxldGlvbnM6IGNvbXBsZXRpb25zJDFcbiAgICB9KVxuICBdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCdAY29kZW1pcnJvci9zdGF0ZScpLkVkaXRvclN0YXRlIH0gc3RhdGVcbiAqXG4gKiBAcmV0dXJuIHsgQ29yZUNvbmZpZyB9XG4gKi9cbmZ1bmN0aW9uIGdldChzdGF0ZSkge1xuXG4gIGNvbnN0IGJ1aWx0aW5zID0gc3RhdGUuZmFjZXQoYnVpbHRpbnNGYWNldClbMF07XG4gIGNvbnN0IHZhcmlhYmxlcyA9IHN0YXRlLmZhY2V0KHZhcmlhYmxlc0ZhY2V0KVswXTtcbiAgY29uc3QgZGlhbGVjdCA9IHN0YXRlLmZhY2V0KGRpYWxlY3RGYWNldClbMF07XG5cbiAgcmV0dXJuIHtcbiAgICBidWlsdGlucyxcbiAgICB2YXJpYWJsZXMsXG4gICAgZGlhbGVjdFxuICB9O1xufVxuXG52YXIgY2FtdW5kYVRhZ3MgPSBbXG5cdHtcblx0XHRuYW1lOiBcIm5vdChuZWdhbmQpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgbG9naWNhbCBuZWdhdGlvbiBvZiB0aGUgZ2l2ZW4gdmFsdWUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm5vdChuZWdhbmQ6IGJvb2xlYW4pOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bm90KHRydWUpXFxuLy8gZmFsc2VcXG5cXG5ub3QobnVsbClcXG4vLyBudWxsXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImlzIGRlZmluZWQodmFsdWUpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PGVtPkNhbXVuZGEgRXh0ZW5zaW9uPC9lbT48L3A+XFxuPHA+Q2hlY2tzIGlmIGEgZ2l2ZW4gdmFsdWUgaXMgbm90IDxjb2RlPm51bGw8L2NvZGU+LiBJZiB0aGUgdmFsdWUgaXMgPGNvZGU+bnVsbDwvY29kZT4gdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4uXFxuT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+aXMgZGVmaW5lZCh2YWx1ZTogQW55KTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmlzIGRlZmluZWQoMSlcXG4vLyB0cnVlXFxuXFxuaXMgZGVmaW5lZChudWxsKVxcbi8vIGZhbHNlXFxuXFxuaXMgZGVmaW5lZCh4KVxcbi8vIGZhbHNlIC0gaWYgbm8gdmFyaWFibGUgJnF1b3Q7eCZxdW90OyBleGlzdHNcXG5cXG5pcyBkZWZpbmVkKHgueSlcXG4vLyBmYWxzZSAtIGlmIG5vIHZhcmlhYmxlICZxdW90O3gmcXVvdDsgZXhpc3RzIG9yIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9wZXJ0eSAmcXVvdDt5JnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjo6OmNhdXRpb24gQnJlYWtpbmcgY2hhbmdlPC9wPlxcbjxwPlRoaXMgZnVuY3Rpb24gd29ya2VkIGRpZmZlcmVudGx5IGluIHByZXZpb3VzIHZlcnNpb25zLiBJdCByZXR1cm5lZCA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgdmFsdWUgd2FzIDxjb2RlPm51bGw8L2NvZGU+LlxcblNpbmNlIHRoaXMgdmVyc2lvbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIHRoZSB2YWx1ZSBpcyA8Y29kZT5udWxsPC9jb2RlPi48L3A+XFxuPHA+Ojo6PC9wPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImdldCBvciBlbHNlKHZhbHVlLCBkZWZhdWx0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPlJldHVybiB0aGUgcHJvdmlkZWQgdmFsdWUgcGFyYW1ldGVyIGlmIG5vdCA8Y29kZT5udWxsPC9jb2RlPiwgb3RoZXJ3aXNlIHJldHVybiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXI8L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Z2V0IG9yIGVsc2UodmFsdWU6IEFueSwgZGVmYXVsdDogQW55KTogQW55XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Z2V0IG9yIGVsc2UoJnF1b3Q7dGhpcyZxdW90OywgJnF1b3Q7ZGVmYXVsdCZxdW90OylcXG4vLyAmcXVvdDt0aGlzJnF1b3Q7XFxuXFxuZ2V0IG9yIGVsc2UobnVsbCwgJnF1b3Q7ZGVmYXVsdCZxdW90OylcXG4vLyAmcXVvdDtkZWZhdWx0JnF1b3Q7XFxuXFxuZ2V0IG9yIGVsc2UobnVsbCwgbnVsbClcXG4vLyBudWxsXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImFzc2VydCh2YWx1ZSwgY29uZGl0aW9uKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPlZlcmlmeSB0aGF0IHRoZSBnaXZlbiBjb25kaXRpb24gaXMgbWV0LiBJZiB0aGUgY29uZGl0aW9uIGlzIDxjb2RlPnRydWU8L2NvZGU+LCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUuXFxuT3RoZXJ3aXNlLCB0aGUgZXZhbHVhdGlvbiBmYWlscyB3aXRoIGFuIGVycm9yLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hc3NlcnQodmFsdWU6IEFueSwgY29uZGl0aW9uOiBBbnkpXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YXNzZXJ0KHgsIHggIT0gbnVsbClcXG4vLyAmcXVvdDt2YWx1ZSZxdW90OyAtIGlmIHggaXMgJnF1b3Q7dmFsdWUmcXVvdDtcXG4vLyBlcnJvciAtIGlmIHggaXMgbnVsbCBvciBkb2VzbiYjMzk7dCBleGlzdFxcblxcbmFzc2VydCh4LCB4ICZndDs9IDApXFxuLy8gNCAtIGlmIHggaXMgNFxcbi8vIGVycm9yIC0gaWYgeCBpcyBsZXNzIHRoYW4gemVyb1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJhc3NlcnQodmFsdWUsIGNvbmRpdGlvbiwgY2F1c2UpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PGVtPkNhbXVuZGEgRXh0ZW5zaW9uPC9lbT48L3A+XFxuPHA+VmVyaWZ5IHRoYXQgdGhlIGdpdmVuIGNvbmRpdGlvbiBpcyBtZXQuIElmIHRoZSBjb25kaXRpb24gaXMgPGNvZGU+dHJ1ZTwvY29kZT4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZS5cXG5PdGhlcndpc2UsIHRoZSBldmFsdWF0aW9uIGZhaWxzIHdpdGggYW4gZXJyb3IgY29udGFpbmluZyB0aGUgZ2l2ZW4gbWVzc2FnZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YXNzZXJ0KHZhbHVlOiBBbnksIGNvbmRpdGlvbjogQW55LCBjYXVzZTogU3RyaW5nKVxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFzc2VydCh4LCB4ICE9IG51bGwsICZxdW90OyYjMzk7eCYjMzk7IHNob3VsZCBub3QgYmUgbnVsbCZxdW90OylcXG4vLyAmcXVvdDt2YWx1ZSZxdW90OyAtIGlmIHggaXMgJnF1b3Q7dmFsdWUmcXVvdDtcXG4vLyBlcnJvcigmIzM5O3gmIzM5OyBzaG91bGQgbm90IGJlIG51bGwpIC0gaWYgeCBpcyBudWxsIG9yIGRvZXNuJiMzOTt0IGV4aXN0XFxuXFxuYXNzZXJ0KHgsIHggJmd0Oz0gMCwgJnF1b3Q7JiMzOTt4JiMzOTsgc2hvdWxkIGJlIHBvc2l0aXZlJnF1b3Q7KVxcbi8vIDQgLSBpZiB4IGlzIDRcXG4vLyBlcnJvcigmIzM5O3gmIzM5OyBzaG91bGQgYmUgcG9zaXRpdmUpIC0gaWYgeCBpcyBsZXNzIHRoYW4gemVyb1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJnZXQgdmFsdWUoY29udGV4dCwga2V5KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb250ZXh0IGVudHJ5IHdpdGggdGhlIGdpdmVuIGtleS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Z2V0IHZhbHVlKGNvbnRleHQ6IGNvbnRleHQsIGtleTogc3RyaW5nKTogQW55XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Z2V0IHZhbHVlKHtmb286IDEyM30sICZxdW90O2ZvbyZxdW90OylcXG4vLyAxMjNcXG5cXG5nZXQgdmFsdWUoe2E6IDF9LCAmcXVvdDtiJnF1b3Q7KVxcbi8vIG51bGxcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZ2V0IHZhbHVlKGNvbnRleHQsIGtleXMpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PGVtPkNhbXVuZGEgRXh0ZW5zaW9uPC9lbT48L3A+XFxuPHA+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRleHQgZW50cnkgZm9yIGEgY29udGV4dCBwYXRoIGRlZmluZWQgYnkgdGhlIGdpdmVuIGtleXMuPC9wPlxcbjxwPklmIDxjb2RlPmtleXM8L2NvZGU+IGNvbnRhaW5zIHRoZSBrZXlzIDxjb2RlPltrMSwgazJdPC9jb2RlPiB0aGVuIGl0IHJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBuZXN0ZWQgZW50cnkgPGNvZGU+azEuazI8L2NvZGU+IG9mIHRoZSBjb250ZXh0LjwvcD5cXG48cD5JZiA8Y29kZT5rZXlzPC9jb2RlPiBhcmUgZW1wdHkgb3IgdGhlIG5lc3RlZCBlbnRyeSBkZWZpbmVkIGJ5IHRoZSBrZXlzIGRvZXNuJiMzOTt0IGV4aXN0IGluIHRoZSBjb250ZXh0LCBpdCByZXR1cm5zIDxjb2RlPm51bGw8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5nZXQgdmFsdWUoY29udGV4dDogY29udGV4dCwga2V5czogbGlzdCZsdDtzdHJpbmcmZ3Q7KTogQW55XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Z2V0IHZhbHVlKHt4OjEsIHk6IHt6OjB9fSwgWyZxdW90O3kmcXVvdDssICZxdW90O3omcXVvdDtdKVxcbi8vIDBcXG5cXG5nZXQgdmFsdWUoe3g6IHt5OiB7ejowfX19LCBbJnF1b3Q7eCZxdW90OywgJnF1b3Q7eSZxdW90O10pXFxuLy8ge3o6MH1cXG5cXG5nZXQgdmFsdWUoe2E6IHtiOiAzfX0sIFsmcXVvdDtiJnF1b3Q7XSlcXG4vLyBudWxsXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImdldCBlbnRyaWVzKGNvbnRleHQpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZW50cmllcyBvZiB0aGUgY29udGV4dCBhcyBhIGxpc3Qgb2Yga2V5LXZhbHVlLXBhaXJzLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5nZXQgZW50cmllcyhjb250ZXh0OiBjb250ZXh0KTogbGlzdCZsdDtjb250ZXh0Jmd0O1xcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgbGlzdCBvZiBjb250ZXh0cy4gRWFjaCBjb250ZXh0IGNvbnRhaW5zIHR3byBlbnRyaWVzIGZvciAmcXVvdDtrZXkmcXVvdDsgYW5kICZxdW90O3ZhbHVlJnF1b3Q7LjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmdldCBlbnRyaWVzKHtmb286IDEyM30pXFxuLy8gW3trZXk6ICZxdW90O2ZvbyZxdW90OywgdmFsdWU6IDEyM31dXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImNvbnRleHQgcHV0KGNvbnRleHQsIGtleSwgdmFsdWUpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+QWRkcyBhIG5ldyBlbnRyeSB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIHZhbHVlIHRvIHRoZSBjb250ZXh0LiBSZXR1cm5zIGEgbmV3IGNvbnRleHQgdGhhdCBpbmNsdWRlcyB0aGUgZW50cnkuPC9wPlxcbjxwPklmIGFuIGVudHJ5IGZvciB0aGUgc2FtZSBrZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNvbnRleHQsIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmNvbnRleHQgcHV0KGNvbnRleHQ6IGNvbnRleHQsIGtleTogc3RyaW5nLCB2YWx1ZTogQW55KTogY29udGV4dFxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmNvbnRleHQgcHV0KHt4OjF9LCAmcXVvdDt5JnF1b3Q7LCAyKVxcbi8vIHt4OjEsIHk6Mn1cXG48L2NvZGU+PC9wcmU+XFxuPHA+Ojo6aW5mb1xcblRoZSBmdW5jdGlvbiA8Y29kZT5jb250ZXh0IHB1dCgpPC9jb2RlPiByZXBsYWNlZCB0aGUgcHJldmlvdXMgZnVuY3Rpb24gPGNvZGU+cHV0KCk8L2NvZGU+IChDYW11bmRhIEV4dGVuc2lvbikuIFRoZVxcbnByZXZpb3VzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLlxcbjo6OjwvcD5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJjb250ZXh0IHB1dChjb250ZXh0LCBrZXlzLCB2YWx1ZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5BZGRzIGEgbmV3IGVudHJ5IHdpdGggdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBjb250ZXh0LiBUaGUgcGF0aCBvZiB0aGUgZW50cnkgaXMgZGVmaW5lZCBieSB0aGUga2V5cy4gUmV0dXJucyBhIG5ldyBjb250ZXh0IHRoYXQgaW5jbHVkZXMgdGhlIGVudHJ5LjwvcD5cXG48cD5JZiA8Y29kZT5rZXlzPC9jb2RlPiBjb250YWlucyB0aGUga2V5cyA8Y29kZT5bazEsIGsyXTwvY29kZT4gdGhlbiBpdCBhZGRzIHRoZSBuZXN0ZWQgZW50cnkgPGNvZGU+azEuazIgPSB2YWx1ZTwvY29kZT4gdG8gdGhlIGNvbnRleHQuPC9wPlxcbjxwPklmIGFuIGVudHJ5IGZvciB0aGUgc2FtZSBrZXlzIGFscmVhZHkgZXhpc3RzIGluIHRoZSBjb250ZXh0LCBpdCBvdmVycmlkZXMgdGhlIHZhbHVlLjwvcD5cXG48cD5JZiA8Y29kZT5rZXlzPC9jb2RlPiBhcmUgZW1wdHksIGl0IHJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmNvbnRleHQgcHV0KGNvbnRleHQ6IGNvbnRleHQsIGtleXM6IGxpc3QmbHQ7c3RyaW5nJmd0OywgdmFsdWU6IEFueSk6IGNvbnRleHRcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb250ZXh0IHB1dCh7eDoxfSwgWyZxdW90O3kmcXVvdDtdLCAyKVxcbi8vIHt4OjEsIHk6Mn1cXG5cXG5jb250ZXh0IHB1dCh7eDoxLCB5OiB7ejowfX0sIFsmcXVvdDt5JnF1b3Q7LCAmcXVvdDt6JnF1b3Q7XSwgMilcXG4vLyB7eDoxLCB5OiB7ejoyfX1cXG5cXG5jb250ZXh0IHB1dCh7eDoxfSwgWyZxdW90O3kmcXVvdDssICZxdW90O3omcXVvdDtdLCAyKVxcbi8vIHt4OjEsIHk6IHt6OjJ9fVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJjb250ZXh0IG1lcmdlKGNvbnRleHRzKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlVuaW9uIHRoZSBnaXZlbiBjb250ZXh0cy4gUmV0dXJucyBhIG5ldyBjb250ZXh0IHRoYXQgaW5jbHVkZXMgYWxsIGVudHJpZXMgb2YgdGhlIGdpdmVuIGNvbnRleHRzLjwvcD5cXG48cD5JZiBhbiBlbnRyeSBmb3IgdGhlIHNhbWUga2V5IGFscmVhZHkgZXhpc3RzIGluIGEgY29udGV4dCwgaXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZS4gVGhlIGVudHJpZXMgYXJlIG92ZXJyaWRkZW4gaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIGxpc3Qgb2YgY29udGV4dHMuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmNvbnRleHQgbWVyZ2UoY29udGV4dHM6IGxpc3QmbHQ7Y29udGV4dCZndDspOiBjb250ZXh0XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Y29udGV4dCBtZXJnZShbe3g6MX0sIHt5OjJ9XSlcXG4vLyB7eDoxLCB5OjJ9XFxuXFxuY29udGV4dCBtZXJnZShbe3g6MSwgeTogMH0sIHt5OjJ9XSlcXG4vLyB7eDoxLCB5OjJ9XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjo6OmluZm9cXG5UaGUgZnVuY3Rpb24gPGNvZGU+Y29udGV4dCBtZXJnZSgpPC9jb2RlPiByZXBsYWNlZCB0aGUgcHJldmlvdXMgZnVuY3Rpb24gPGNvZGU+cHV0IGFsbCgpPC9jb2RlPiAoQ2FtdW5kYSBFeHRlbnNpb24pLiBUaGVcXG5wcmV2aW91cyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS5cXG46Ojo8L3A+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwic3RyaW5nKGZyb20pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgYXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0cmluZyhmcm9tOiBBbnkpOiBzdHJpbmdcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdHJpbmcoMS4xKVxcbi8vICZxdW90OzEuMSZxdW90O1xcblxcbnN0cmluZyhkYXRlKCZxdW90OzIwMTItMTItMjUmcXVvdDspKVxcbi8vICZxdW90OzIwMTItMTItMjUmcXVvdDtcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibnVtYmVyKGZyb20pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgdG8gYSBudW1iZXIuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm51bWJlcihmcm9tOiBzdHJpbmcpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5udW1iZXIoJnF1b3Q7MTUwMC41JnF1b3Q7KVxcbi8vIDE1MDAuNVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJjb250ZXh0KGVudHJpZXMpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+Q29uc3RydWN0cyBhIGNvbnRleHQgb2YgdGhlIGdpdmVuIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLiBJdCBpcyB0aGUgcmV2ZXJzZSBmdW5jdGlvbiB0byA8YSBocmVmPVxcXCJmZWVsLWJ1aWx0LWluLWZ1bmN0aW9ucy1jb250ZXh0Lm1kI2dldC1lbnRyaWVzY29udGV4dFxcXCI+Z2V0IGVudHJpZXMoKTwvYT4uPC9wPlxcbjxwPkVhY2gga2V5LXZhbHVlIHBhaXIgbXVzdCBiZSBhIGNvbnRleHQgd2l0aCB0d28gZW50cmllczogPGNvZGU+a2V5PC9jb2RlPiBhbmQgPGNvZGU+dmFsdWU8L2NvZGU+LiBUaGUgZW50cnkgd2l0aCBuYW1lIDxjb2RlPmtleTwvY29kZT4gbXVzdCBoYXZlIGEgdmFsdWUgb2YgdGhlIHR5cGUgPGNvZGU+c3RyaW5nPC9jb2RlPi48L3A+XFxuPHA+SXQgbWlnaHQgb3ZlcnJpZGUgY29udGV4dCBlbnRyaWVzIGlmIHRoZSBrZXlzIGFyZSBlcXVhbC4gVGhlIGVudHJpZXMgYXJlIG92ZXJyaWRkZW4gaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNvbnRleHRzIGluIHRoZSBnaXZlbiBsaXN0LjwvcD5cXG48cD5SZXR1cm5zIDxjb2RlPm51bGw8L2NvZGU+IGlmIG9uZSBvZiB0aGUgZW50cmllcyBpcyBub3QgYSBjb250ZXh0IG9yIGlmIGEgY29udGV4dCBkb2VzbiYjMzk7dCBjb250YWluIHRoZSByZXF1aXJlZCBlbnRyaWVzLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb250ZXh0KGVudHJpZXM6IGxpc3QmbHQ7Y29udGV4dCZndDspOiBjb250ZXh0XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Y29udGV4dChbeyZxdW90O2tleSZxdW90OzomcXVvdDthJnF1b3Q7LCAmcXVvdDt2YWx1ZSZxdW90OzoxfSwgeyZxdW90O2tleSZxdW90OzomcXVvdDtiJnF1b3Q7LCAmcXVvdDt2YWx1ZSZxdW90OzoyfV0pXFxuLy8ge2E6MSwgYjoyfVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJkYXRlKGZyb20pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIGRhdGUgZnJvbSB0aGUgZ2l2ZW4gdmFsdWUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRhdGUoZnJvbTogc3RyaW5nKTogZGF0ZVxcbjwvY29kZT48L3ByZT5cXG48cD5QYXJzZXMgdGhlIGdpdmVuIHN0cmluZyBpbnRvIGEgZGF0ZS48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF0ZShmcm9tOiBkYXRlIGFuZCB0aW1lKTogZGF0ZVxcbjwvY29kZT48L3ByZT5cXG48cD5FeHRyYWN0cyB0aGUgZGF0ZSBjb21wb25lbnQgZnJvbSB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdGltZS48L3A+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5kYXRlKCZxdW90OzIwMTgtMDQtMjkmcXVvdDspXFxuLy8gZGF0ZSgmcXVvdDsyMDE4LTA0LTI5JnF1b3Q7KVxcblxcbmRhdGUoZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDEyLTEyLTI1VDExOjAwOjAwJnF1b3Q7KSlcXG4vLyBkYXRlKCZxdW90OzIwMTItMTItMjUmcXVvdDspXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImRhdGUoeWVhciwgbW9udGgsIGRheSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIGEgZGF0ZSBmcm9tIHRoZSBnaXZlbiBjb21wb25lbnRzLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5kYXRlKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIpOiBkYXRlXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF0ZSgyMDEyLCAxMiwgMjUpXFxuLy8gZGF0ZSgmcXVvdDsyMDEyLTEyLTI1JnF1b3Q7KVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJ0aW1lKGZyb20pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHRpbWUgZnJvbSB0aGUgZ2l2ZW4gdmFsdWUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnRpbWUoZnJvbTogc3RyaW5nKTogdGltZVxcbjwvY29kZT48L3ByZT5cXG48cD5QYXJzZXMgdGhlIGdpdmVuIHN0cmluZyBpbnRvIGEgdGltZS48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dGltZShmcm9tOiBkYXRlIGFuZCB0aW1lKTogdGltZVxcbjwvY29kZT48L3ByZT5cXG48cD5FeHRyYWN0cyB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdGltZS48L3A+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj50aW1lKCZxdW90OzEyOjAwOjAwJnF1b3Q7KVxcbi8vIHRpbWUoJnF1b3Q7MTI6MDA6MDAmcXVvdDspXFxuXFxudGltZShkYXRlIGFuZCB0aW1lKCZxdW90OzIwMTItMTItMjVUMTE6MDA6MDAmcXVvdDspKVxcbi8vIHRpbWUoJnF1b3Q7MTE6MDA6MDAmcXVvdDspXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInRpbWUoaG91ciwgbWludXRlLCBzZWNvbmQpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHRpbWUgZnJvbSB0aGUgZ2l2ZW4gY29tcG9uZW50cy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dGltZShob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBzZWNvbmQ6IG51bWJlcik6IHRpbWVcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj50aW1lKDIzLCA1OSwgMClcXG4vLyB0aW1lKCZxdW90OzIzOjU5OjAwJnF1b3Q7KVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJ0aW1lKGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBvZmZzZXQpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHRpbWUgZnJvbSB0aGUgZ2l2ZW4gY29tcG9uZW50cywgaW5jbHVkaW5nIGEgdGltZXpvbmUgb2Zmc2V0LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj50aW1lKGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyLCBvZmZzZXQ6IGRheXMgYW5kIHRpbWUgZHVyYXRpb24pOiB0aW1lXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dGltZSgxNCwgMzAsIDAsIGR1cmF0aW9uKCZxdW90O1BUMUgmcXVvdDspKVxcbi8vIHRpbWUoJnF1b3Q7MTQ6MzA6MDArMDE6MDAmcXVvdDspXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImRhdGUgYW5kIHRpbWUoZnJvbSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5QYXJzZXMgdGhlIGdpdmVuIHN0cmluZyBpbnRvIGEgZGF0ZSBhbmQgdGltZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF0ZSBhbmQgdGltZShmcm9tOiBzdHJpbmcpOiBkYXRlIGFuZCB0aW1lXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDE4LTA0LTI5VDA5OjMwOjAwJnF1b3Q7KVxcbi8vIGRhdGUgYW5kIHRpbWUoJnF1b3Q7MjAxOC0wNC0yOVQwOTozMDowMCZxdW90OylcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZGF0ZSBhbmQgdGltZShkYXRlLCB0aW1lKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgYSBkYXRlIGFuZCB0aW1lIGZyb20gdGhlIGdpdmVuIGNvbXBvbmVudHMuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRhdGUgYW5kIHRpbWUoZGF0ZTogZGF0ZSwgdGltZTogdGltZSk6IGRhdGUgYW5kIHRpbWVcXG48L2NvZGU+PC9wcmU+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF0ZSBhbmQgdGltZShkYXRlOiBkYXRlIGFuZCB0aW1lLCB0aW1lOiB0aW1lKTogZGF0ZSBhbmQgdGltZVxcbjwvY29kZT48L3ByZT5cXG48cD5SZXR1cm5zIGEgZGF0ZSBhbmQgdGltZSB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZSBkYXRlIGNvbXBvbmVudCBvZiA8Y29kZT5kYXRlPC9jb2RlPiBjb21iaW5lZCB3aXRoIDxjb2RlPnRpbWU8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRhdGUgYW5kIHRpbWUoZGF0ZSgmcXVvdDsyMDEyLTEyLTI0JnF1b3Q7KSx0aW1lKCZxdW90O1QyMzo1OTowMCZxdW90OykpXFxuLy8gZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDEyLTEyLTI0VDIzOjU5OjAwJnF1b3Q7KVxcblxcbmRhdGUgYW5kIHRpbWUoZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDEyLTEyLTI1VDExOjAwOjAwJnF1b3Q7KSx0aW1lKCZxdW90O1QyMzo1OTowMCZxdW90OykpXFxuLy8gZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDEyLTEyLTI1VDIzOjU5OjAwJnF1b3Q7KVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJkYXRlIGFuZCB0aW1lKGRhdGUsIHRpbWV6b25lKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPlJldHVybnMgdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWV6b25lLjwvcD5cXG48cD5JZiA8Y29kZT5kYXRlPC9jb2RlPiBoYXMgYSBkaWZmZXJlbnQgdGltZXpvbmUgdGhhbiA8Y29kZT50aW1lem9uZTwvY29kZT4gdGhlbiBpdCBhZGp1c3RzIHRoZSB0aW1lIHRvIG1hdGNoIHRoZSBsb2NhbCB0aW1lIG9mIDxjb2RlPnRpbWV6b25lPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF0ZSBhbmQgdGltZShkYXRlOiBkYXRlIGFuZCB0aW1lLCB0aW1lem9uZTogc3RyaW5nKTogZGF0ZSBhbmQgdGltZVxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRhdGUgYW5kIHRpbWUoQCZxdW90OzIwMjAtMDctMzFUMTQ6Mjc6MzBARXVyb3BlL0JlcmxpbiZxdW90OywgJnF1b3Q7QW1lcmljYS9Mb3NfQW5nZWxlcyZxdW90OylcXG4vLyBkYXRlIGFuZCB0aW1lKCZxdW90OzIwMjAtMDctMzFUMDU6Mjc6MzBAQW1lcmljYS9Mb3NfQW5nZWxlcyZxdW90OylcXG5cXG5kYXRlIGFuZCB0aW1lKEAmcXVvdDsyMDIwLTA3LTMxVDE0OjI3OjMwJnF1b3Q7LCAmcXVvdDtaJnF1b3Q7KVxcbi8vIGRhdGUgYW5kIHRpbWUoJnF1b3Q7MjAyMC0wNy0zMVQxMjoyNzozMFomcXVvdDspXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImR1cmF0aW9uKGZyb20pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgaW50byBhIGR1cmF0aW9uLiBUaGUgZHVyYXRpb24gaXMgZWl0aGVyIGEgZGF5cyBhbmQgdGltZSBkdXJhdGlvbiBvciBhIHllYXJzIGFuZCBtb250aHMgZHVyYXRpb24uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmR1cmF0aW9uKGZyb206IHN0cmluZyk6IGRheXMgYW5kIHRpbWUgZHVyYXRpb25cXG48L2NvZGU+PC9wcmU+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZHVyYXRpb24oZnJvbTogc3RyaW5nKTogeWVhcnMgYW5kIG1vbnRocyBkdXJhdGlvblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmR1cmF0aW9uKCZxdW90O1A1RCZxdW90OylcXG4vLyBkdXJhdGlvbigmcXVvdDtQNUQmcXVvdDspXFxuXFxuZHVyYXRpb24oJnF1b3Q7UDMyWSZxdW90OylcXG4vLyBkdXJhdGlvbigmcXVvdDtQMzJZJnF1b3Q7KVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJ5ZWFycyBhbmQgbW9udGhzIGR1cmF0aW9uKGZyb20sIHRvKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIHllYXJzIGFuZCBtb250aHMgZHVyYXRpb24gYmV0d2VlbiA8Y29kZT5mcm9tPC9jb2RlPiBhbmQgPGNvZGU+dG88L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj55ZWFycyBhbmQgbW9udGhzIGR1cmF0aW9uKGZyb206IGRhdGUsIHRvOiBkYXRlKTogeWVhcnMgYW5kIG1vbnRocyBkdXJhdGlvblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnllYXJzIGFuZCBtb250aHMgZHVyYXRpb24oZGF0ZSgmcXVvdDsyMDExLTEyLTIyJnF1b3Q7KSwgZGF0ZSgmcXVvdDsyMDEzLTA4LTI0JnF1b3Q7KSlcXG4vLyBkdXJhdGlvbigmcXVvdDtQMVk4TSZxdW90OylcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibGlzdCBjb250YWlucyhsaXN0LCBlbGVtZW50KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIGxpc3QgY29udGFpbnMgdGhlIGVsZW1lbnQuIE90aGVyd2lzZSwgcmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmxpc3QgY29udGFpbnMobGlzdDogbGlzdCwgZWxlbWVudDogQW55KTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmxpc3QgY29udGFpbnMoWzEsMiwzXSwgMilcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImNvdW50KGxpc3QpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBsaXN0LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb3VudChsaXN0OiBsaXN0KTogbnVtYmVyXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Y291bnQoWzEsMiwzXSlcXG4vLyAzXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1pbihsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIG1pbmltdW0gb2YgdGhlIGdpdmVuIGxpc3QuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1pbihsaXN0OiBsaXN0KTogQW55XFxuPC9jb2RlPjwvcHJlPlxcbjxwPkFsbCBlbGVtZW50cyBpbiA8Y29kZT5saXN0PC9jb2RlPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0eXBlIGFuZCBiZSBjb21wYXJhYmxlLjwvcD5cXG48cD5UaGUgcGFyYW1ldGVyIDxjb2RlPmxpc3Q8L2NvZGU+IGNhbiBiZSBwYXNzZWQgYXMgYSBsaXN0IG9yIGFzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMuPC9wPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bWluKFsxLDIsM10pXFxuLy8gMVxcblxcbm1pbigxLDIsMylcXG4vLyAxXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1heChsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIG1heGltdW0gb2YgdGhlIGdpdmVuIGxpc3QuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1heChsaXN0OiBsaXN0KTogQW55XFxuPC9jb2RlPjwvcHJlPlxcbjxwPkFsbCBlbGVtZW50cyBpbiA8Y29kZT5saXN0PC9jb2RlPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSB0eXBlIGFuZCBiZSBjb21wYXJhYmxlLjwvcD5cXG48cD5UaGUgcGFyYW1ldGVyIDxjb2RlPmxpc3Q8L2NvZGU+IGNhbiBiZSBwYXNzZWQgYXMgYSBsaXN0IG9yIGFzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMuPC9wPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bWF4KFsxLDIsM10pXFxuLy8gM1xcblxcbm1heCgxLDIsMylcXG4vLyAzXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN1bShsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIHN1bSBvZiB0aGUgZ2l2ZW4gbGlzdCBvZiBudW1iZXJzLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdW0obGlzdDogbGlzdCZsdDtudW1iZXImZ3Q7KTogbnVtYmVyXFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSBwYXJhbWV0ZXIgPGNvZGU+bGlzdDwvY29kZT4gY2FuIGJlIHBhc3NlZCBhcyBhIGxpc3Qgb3IgYXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cy48L3A+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdW0oWzEsMiwzXSlcXG4vLyA2XFxuXFxuc3VtKDEsMiwzKVxcbi8vIDZcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwicHJvZHVjdChsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhlIGdpdmVuIGxpc3Qgb2YgbnVtYmVycy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cHJvZHVjdChsaXN0OiBsaXN0Jmx0O251bWJlciZndDspOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0PC9jb2RlPiBjYW4gYmUgcGFzc2VkIGFzIGEgbGlzdCBvciBhcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnByb2R1Y3QoWzIsIDMsIDRdKVxcbi8vIDI0XFxuXFxucHJvZHVjdCgyLCAzLCA0KVxcbi8vIDI0XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1lYW4obGlzdClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBhcml0aG1ldGljIG1lYW4gKGkuZS4gYXZlcmFnZSkgb2YgdGhlIGdpdmVuIGxpc3Qgb2YgbnVtYmVycy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bWVhbihsaXN0OiBsaXN0Jmx0O251bWJlciZndDspOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0PC9jb2RlPiBjYW4gYmUgcGFzc2VkIGFzIGEgbGlzdCBvciBhcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1lYW4oWzEsMiwzXSlcXG4vLyAyXFxuXFxubWVhbigxLDIsMylcXG4vLyAyXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1lZGlhbihsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIG1lZGlhbiBlbGVtZW50IG9mIHRoZSBnaXZlbiBsaXN0IG9mIG51bWJlcnMuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1lZGlhbihsaXN0OiBsaXN0Jmx0O251bWJlciZndDspOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0PC9jb2RlPiBjYW4gYmUgcGFzc2VkIGFzIGEgbGlzdCBvciBhcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1lZGlhbig4LCAyLCA1LCAzLCA0KVxcbi8vIDRcXG5cXG5tZWRpYW4oWzYsIDEsIDIsIDNdKVxcbi8vIDIuNVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJzdGRkZXYobGlzdClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIGdpdmVuIGxpc3Qgb2YgbnVtYmVycy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RkZGV2KGxpc3Q6IGxpc3QmbHQ7bnVtYmVyJmd0Oyk6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgcGFyYW1ldGVyIDxjb2RlPmxpc3Q8L2NvZGU+IGNhbiBiZSBwYXNzZWQgYXMgYSBsaXN0IG9yIGFzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMuPC9wPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RkZGV2KDIsIDQsIDcsIDUpXFxuLy8gMi4wODE2NjU5OTk0NjYxMzI2XFxuXFxuc3RkZGV2KFsyLCA0LCA3LCA1XSlcXG4vLyAyLjA4MTY2NTk5OTQ2NjEzMjZcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibW9kZShsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIG1vZGUgb2YgdGhlIGdpdmVuIGxpc3Qgb2YgbnVtYmVycy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bW9kZShsaXN0OiBsaXN0Jmx0O251bWJlciZndDspOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0PC9jb2RlPiBjYW4gYmUgcGFzc2VkIGFzIGEgbGlzdCBvciBhcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1vZGUoNiwgMywgOSwgNiwgNilcXG4vLyBbNl1cXG5cXG5tb2RlKFs2LCAxLCA5LCA2LCAxXSlcXG4vLyBbMSwgNl1cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiYWxsKGxpc3QpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYW55IGVsZW1lbnQgb2YgdGhlIGdpdmVuIGxpc3QgaXMgPGNvZGU+ZmFsc2U8L2NvZGU+LiBPdGhlcndpc2UsIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4uPC9wPlxcbjxwPklmIHRoZSBnaXZlbiBsaXN0IGlzIGVtcHR5LCBpdCByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hbGwobGlzdDogbGlzdCZsdDtib29sZWFuJmd0Oyk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0PC9jb2RlPiBjYW4gYmUgcGFzc2VkIGFzIGEgbGlzdCBvciBhcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFsbChbdHJ1ZSxmYWxzZV0pXFxuLy8gZmFsc2VcXG5cXG5hbGwoZmFsc2UsbnVsbCx0cnVlKVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjo6OmluZm9cXG5UaGUgZnVuY3Rpb24gPGNvZGU+YWxsKCk8L2NvZGU+IHJlcGxhY2VkIHRoZSBwcmV2aW91cyBmdW5jdGlvbiA8Y29kZT5hbmQoKTwvY29kZT4uIFRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZFxcbnNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLlxcbjo6OjwvcD5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJhbnkobGlzdClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFueSBlbGVtZW50IG9mIHRoZSBnaXZlbiBsaXN0IGlzIDxjb2RlPnRydWU8L2NvZGU+LiBPdGhlcndpc2UsIHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+LjwvcD5cXG48cD5JZiB0aGUgZ2l2ZW4gbGlzdCBpcyBlbXB0eSwgaXQgcmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFueShsaXN0OiBsaXN0Jmx0O2Jvb2xlYW4mZ3Q7KTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgcGFyYW1ldGVyIDxjb2RlPmxpc3Q8L2NvZGU+IGNhbiBiZSBwYXNzZWQgYXMgYSBsaXN0IG9yIGFzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMuPC9wPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YW55KFtmYWxzZSx0cnVlXSlcXG4vLyB0cnVlXFxuXFxuYW55KGZhbHNlLG51bGwsdHJ1ZSlcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjo6OmluZm9cXG5UaGUgZnVuY3Rpb24gPGNvZGU+YW55KCk8L2NvZGU+IHJlcGxhY2VkIHRoZSBwcmV2aW91cyBmdW5jdGlvbiA8Y29kZT5vcigpPC9jb2RlPi4gVGhlIHByZXZpb3VzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kXFxuc2hvdWxkIG5vdCBiZSB1c2VkIGFueW1vcmUuXFxuOjo6PC9wPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN1Ymxpc3QobGlzdCwgc3RhcnQgcG9zaXRpb24pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHBhcnRpYWwgbGlzdCBvZiB0aGUgZ2l2ZW4gdmFsdWUgc3RhcnRpbmcgYXQgPGNvZGU+c3RhcnQgcG9zaXRpb248L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJsaXN0KGxpc3Q6IGxpc3QsIHN0YXJ0IHBvc2l0aW9uOiBudW1iZXIpOiBsaXN0XFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSA8Y29kZT5zdGFydCBwb3NpdGlvbjwvY29kZT4gc3RhcnRzIGF0IHRoZSBpbmRleCA8Y29kZT4xPC9jb2RlPi4gVGhlIGxhc3QgcG9zaXRpb24gaXMgPGNvZGU+LTE8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN1Ymxpc3QoWzEsMiwzXSwgMilcXG4vLyBbMiwzXVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJzdWJsaXN0KGxpc3QsIHN0YXJ0IHBvc2l0aW9uLCBsZW5ndGgpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHBhcnRpYWwgbGlzdCBvZiB0aGUgZ2l2ZW4gdmFsdWUgc3RhcnRpbmcgYXQgPGNvZGU+c3RhcnQgcG9zaXRpb248L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJsaXN0KGxpc3Q6IGxpc3QsIHN0YXJ0IHBvc2l0aW9uOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogbGlzdFxcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgPGNvZGU+c3RhcnQgcG9zaXRpb248L2NvZGU+IHN0YXJ0cyBhdCB0aGUgaW5kZXggPGNvZGU+MTwvY29kZT4uIFRoZSBsYXN0IHBvc2l0aW9uIGlzIDxjb2RlPi0xPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJsaXN0KFsxLDIsM10sIDEsIDIpXFxuLy8gWzEsMl1cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiYXBwZW5kKGxpc3QsIGl0ZW1zKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIGdpdmVuIGxpc3Qgd2l0aCBhbGwgPGNvZGU+aXRlbXM8L2NvZGU+IGFwcGVuZGVkLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hcHBlbmQobGlzdDogbGlzdCwgaXRlbXM6IEFueSk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5pdGVtczwvY29kZT4gY2FuIGJlIGEgc2luZ2xlIGVsZW1lbnQgb3IgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cy48L3A+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hcHBlbmQoWzFdLCAyLCAzKVxcbi8vIFsxLDIsM11cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiY29uY2F0ZW5hdGUobGlzdHMpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIGxpc3QgdGhhdCBpbmNsdWRlcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGxpc3RzLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb25jYXRlbmF0ZShsaXN0czogbGlzdCk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0czwvY29kZT4gaXMgYSBzZXF1ZW5jZSBvZiBsaXN0cy48L3A+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb25jYXRlbmF0ZShbMSwyXSxbM10pXFxuLy8gWzEsMiwzXVxcblxcbmNvbmNhdGVuYXRlKFsxXSxbMl0sWzNdKVxcbi8vIFsxLDIsM11cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiaW5zZXJ0IGJlZm9yZShsaXN0LCBwb3NpdGlvbiwgbmV3SXRlbSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBnaXZlbiBsaXN0IHdpdGggPGNvZGU+bmV3SXRlbTwvY29kZT4gaW5zZXJ0ZWQgYXQgPGNvZGU+cG9zaXRpb248L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5pbnNlcnQgYmVmb3JlKGxpc3Q6IGxpc3QsIHBvc2l0aW9uOiBudW1iZXIsIG5ld0l0ZW06IEFueSk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIDxjb2RlPnBvc2l0aW9uPC9jb2RlPiBzdGFydHMgYXQgdGhlIGluZGV4IDxjb2RlPjE8L2NvZGU+LiBUaGUgbGFzdCBwb3NpdGlvbiBpcyA8Y29kZT4tMTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+aW5zZXJ0IGJlZm9yZShbMSwzXSwxLDIpXFxuLy8gWzIsMSwzXVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJyZW1vdmUobGlzdCwgcG9zaXRpb24pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZ2l2ZW4gbGlzdCB3aXRob3V0IHRoZSBlbGVtZW50IGF0IDxjb2RlPnBvc2l0aW9uPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cmVtb3ZlKGxpc3Q6IGxpc3QsIHBvc2l0aW9uOiBudW1iZXIpOiBsaXN0XFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSA8Y29kZT5wb3NpdGlvbjwvY29kZT4gc3RhcnRzIGF0IHRoZSBpbmRleCA8Y29kZT4xPC9jb2RlPi4gVGhlIGxhc3QgcG9zaXRpb24gaXMgPGNvZGU+LTE8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJlbW92ZShbMSwyLDNdLCAyKVxcbi8vIFsxLDNdXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInJldmVyc2UobGlzdClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBnaXZlbiBsaXN0IGluIHJldmVyZWQgb3JkZXIuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJldmVyc2UobGlzdDogbGlzdCk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5yZXZlcnNlKFsxLDIsM10pXFxuLy8gWzMsMiwxXVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJpbmRleCBvZihsaXN0LCBtYXRjaClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIGFuIGFzY2VuZGluZyBsaXN0IG9mIHBvc2l0aW9ucyBjb250YWluaW5nIDxjb2RlPm1hdGNoPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+aW5kZXggb2YobGlzdDogbGlzdCwgbWF0Y2g6IEFueSk6IGxpc3QmbHQ7bnVtYmVyJmd0O1xcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmluZGV4IG9mKFsxLDIsMywyXSwyKVxcbi8vIFsyLDRdXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInVuaW9uKGxpc3QpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIGxpc3QgdGhhdCBpbmNsdWRlcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGxpc3RzIHdpdGhvdXQgZHVwbGljYXRlcy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dW5pb24obGlzdDogbGlzdCk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIHBhcmFtZXRlciA8Y29kZT5saXN0PC9jb2RlPiBpcyBhIHNlcXVlbmNlIG9mIGxpc3RzLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnVuaW9uKFsxLDJdLFsyLDNdKVxcbi8vIFsxLDIsM11cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZGlzdGluY3QgdmFsdWVzKGxpc3QpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZ2l2ZW4gbGlzdCB3aXRob3V0IGR1cGxpY2F0ZXMuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRpc3RpbmN0IHZhbHVlcyhsaXN0OiBsaXN0KTogbGlzdFxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRpc3RpbmN0IHZhbHVlcyhbMSwyLDMsMiwxXSlcXG4vLyBbMSwyLDNdXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImR1cGxpY2F0ZSB2YWx1ZXMobGlzdClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48ZW0+Q2FtdW5kYSBFeHRlbnNpb248L2VtPjwvcD5cXG48cD5SZXR1cm5zIGFsbCBkdXBsaWNhdGUgdmFsdWVzIG9mIHRoZSBnaXZlbiBsaXN0LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5kdXBsaWNhdGUgdmFsdWVzKGxpc3Q6IGxpc3QpOiBsaXN0XFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZHVwbGljYXRlIHZhbHVlcyhbMSwyLDMsMiwxXSlcXG4vLyBbMSwyXVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJmbGF0dGVuKGxpc3QpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIGxpc3QgdGhhdCBpbmNsdWRlcyBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGxpc3Qgd2l0aG91dCBuZXN0ZWQgbGlzdHMuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmZsYXR0ZW4obGlzdDogbGlzdCk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5mbGF0dGVuKFtbMSwyXSxbWzNdXSwgNF0pXFxuLy8gWzEsMiwzLDRdXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInNvcnQobGlzdCwgcHJlY2VkZXMpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZ2l2ZW4gbGlzdCBzb3J0ZWQgYnkgdGhlIDxjb2RlPnByZWNlZGVzPC9jb2RlPiBmdW5jdGlvbi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c29ydChsaXN0OiBsaXN0LCBwcmVjZWRlczogZnVuY3Rpb24mbHQ7KEFueSwgQW55KSAtJmd0OyBib29sZWFuJmd0Oyk6IGxpc3RcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zb3J0KGxpc3Q6IFszLDEsNCw1LDJdLCBwcmVjZWRlczogZnVuY3Rpb24oeCx5KSB4ICZsdDsgeSlcXG4vLyBbMSwyLDMsNCw1XVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJzdHJpbmcgam9pbihsaXN0KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPkpvaW5zIGEgbGlzdCBvZiBzdHJpbmdzIGludG8gYSBzaW5nbGUgc3RyaW5nLiBUaGlzIGlzIHNpbWlsYXIgdG9cXG5KYXZhJiMzOTtzIDxhIGhyZWY9XFxcImh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcnMuaHRtbCNqb2luaW5nKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSxqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKVxcXCI+am9pbmluZzwvYT5cXG5mdW5jdGlvbi48L3A+XFxuPHA+SWYgYW4gaXRlbSBvZiB0aGUgbGlzdCBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhlIGl0ZW0gaXMgaWdub3JlZCBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIElmIGFuIGl0ZW0gaXNcXG5uZWl0aGVyIGEgc3RyaW5nIG5vciA8Y29kZT5udWxsPC9jb2RlPiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gaW5zdGVhZCBvZiBhIHN0cmluZy48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RyaW5nIGpvaW4obGlzdDogbGlzdCZsdDtzdHJpbmcmZ3Q7KTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RyaW5nIGpvaW4oWyZxdW90O2EmcXVvdDssJnF1b3Q7YiZxdW90OywmcXVvdDtjJnF1b3Q7XSlcXG4vLyAmcXVvdDthYmMmcXVvdDtcXG5cXG5zdHJpbmcgam9pbihbJnF1b3Q7YSZxdW90OyxudWxsLCZxdW90O2MmcXVvdDtdKVxcbi8vICZxdW90O2FjJnF1b3Q7XFxuXFxuc3RyaW5nIGpvaW4oW10pXFxuLy8gJnF1b3Q7JnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0cmluZyBqb2luKGxpc3QsIGRlbGltaXRlcilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5Kb2lucyBhIGxpc3Qgb2Ygc3RyaW5ncyBpbnRvIGEgc2luZ2xlIHN0cmluZy4gVGhpcyBpcyBzaW1pbGFyIHRvXFxuSmF2YSYjMzk7cyA8YSBocmVmPVxcXCJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL3N0cmVhbS9Db2xsZWN0b3JzLmh0bWwjam9pbmluZyhqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLGphdmEubGFuZy5DaGFyU2VxdWVuY2UsamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSlcXFwiPmpvaW5pbmc8L2E+XFxuZnVuY3Rpb24uPC9wPlxcbjxwPklmIGFuIGl0ZW0gb2YgdGhlIGxpc3QgaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZSBpdGVtIGlzIGlnbm9yZWQgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBJZiBhbiBpdGVtIGlzXFxubmVpdGhlciBhIHN0cmluZyBub3IgPGNvZGU+bnVsbDwvY29kZT4sIHRoZSBmdW5jdGlvbiByZXR1cm5zIDxjb2RlPm51bGw8L2NvZGU+IGluc3RlYWQgb2YgYSBzdHJpbmcuPC9wPlxcbjxwPlRoZSByZXN1bHRpbmcgc3RyaW5nIGNvbnRhaW5zIGEgPGNvZGU+ZGVsaW1pdGVyPC9jb2RlPiBiZXR3ZWVuIGVhY2ggZWxlbWVudC48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RyaW5nIGpvaW4obGlzdDogbGlzdCZsdDtzdHJpbmcmZ3Q7LCBkZWxpbWl0ZXI6IHN0cmluZyk6IHN0cmluZ1xcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0cmluZyBqb2luKFsmcXVvdDthJnF1b3Q7XSwgJnF1b3Q7WCZxdW90OylcXG4vLyAmcXVvdDthJnF1b3Q7XFxuXFxuc3RyaW5nIGpvaW4oWyZxdW90O2EmcXVvdDssJnF1b3Q7YiZxdW90OywmcXVvdDtjJnF1b3Q7XSwgJnF1b3Q7LCAmcXVvdDspXFxuLy8gJnF1b3Q7YSwgYiwgYyZxdW90O1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJzdHJpbmcgam9pbihsaXN0LCBkZWxpbWl0ZXIsIHByZWZpeCwgc3VmZml4KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPkpvaW5zIGEgbGlzdCBvZiBzdHJpbmdzIGludG8gYSBzaW5nbGUgc3RyaW5nLiBUaGlzIGlzIHNpbWlsYXIgdG9cXG5KYXZhJiMzOTtzIDxhIGhyZWY9XFxcImh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvc3RyZWFtL0NvbGxlY3RvcnMuaHRtbCNqb2luaW5nKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSxqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKVxcXCI+am9pbmluZzwvYT5cXG5mdW5jdGlvbi48L3A+XFxuPHA+SWYgYW4gaXRlbSBvZiB0aGUgbGlzdCBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhlIGl0ZW0gaXMgaWdub3JlZCBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIElmIGFuIGl0ZW0gaXNcXG5uZWl0aGVyIGEgc3RyaW5nIG5vciA8Y29kZT5udWxsPC9jb2RlPiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgPGNvZGU+bnVsbDwvY29kZT4gaW5zdGVhZCBvZiBhIHN0cmluZy48L3A+XFxuPHA+VGhlIHJlc3VsdGluZyBzdHJpbmcgc3RhcnRzIHdpdGggPGNvZGU+cHJlZml4PC9jb2RlPiwgY29udGFpbnMgYSA8Y29kZT5kZWxpbWl0ZXI8L2NvZGU+IGJldHdlZW4gZWFjaCBlbGVtZW50LCBhbmQgZW5kc1xcbndpdGggPGNvZGU+c3VmZml4PC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RyaW5nIGpvaW4obGlzdDogbGlzdCZsdDtzdHJpbmcmZ3Q7LCBkZWxpbWl0ZXI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RyaW5nIGpvaW4oWyZxdW90O2EmcXVvdDssJnF1b3Q7YiZxdW90OywmcXVvdDtjJnF1b3Q7XSwgJnF1b3Q7LCAmcXVvdDssICZxdW90O1smcXVvdDssICZxdW90O10mcXVvdDspXFxuLy8gJnF1b3Q7W2EsIGIsIGNdJnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImRlY2ltYWwobiwgc2NhbGUpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+Um91bmRzIHRoZSBnaXZlbiB2YWx1ZSBhdCB0aGUgZ2l2ZW4gc2NhbGUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRlY2ltYWwobjogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogbnVtYmVyXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGVjaW1hbCgxLzMsIDIpXFxuLy8gLjMzXFxuXFxuZGVjaW1hbCgxLjUsIDApXFxuLy8gMlxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJmbG9vcihuKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJvdW5kcyB0aGUgZ2l2ZW4gdmFsdWUgd2l0aCByb3VuZGluZyBtb2RlIGZsb29yaW5nLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5mbG9vcihuOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5mbG9vcigxLjUpXFxuLy8gMVxcblxcbmZsb29yKC0xLjUpXFxuLy8gLTJcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZmxvb3Iobiwgc2NhbGUpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+Um91bmRzIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHJvdW5kaW5nIG1vZGUgZmxvb3JpbmcgYXQgdGhlIGdpdmVuIHNjYWxlLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5mbG9vcihuOiBudW1iZXIsIHNjYWxlOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5mbG9vcigtMS41NiwgMSlcXG4vLyAtMS42XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImNlaWxpbmcobilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5Sb3VuZHMgdGhlIGdpdmVuIHZhbHVlIHdpdGggcm91bmRpbmcgbW9kZSBjZWlsaW5nLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jZWlsaW5nKG46IG51bWJlcik6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmNlaWxpbmcoMS41KVxcbi8vIDJcXG5cXG5jZWlsaW5nKC0xLjUpXFxuLy8gLTFcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiY2VpbGluZyhuLCBzY2FsZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5Sb3VuZHMgdGhlIGdpdmVuIHZhbHVlIHdpdGggcm91bmRpbmcgbW9kZSBjZWlsaW5nIGF0IHRoZSBnaXZlbiBzY2FsZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Y2VpbGluZyhuOiBudW1iZXIsIHNjYWxlOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jZWlsaW5nKC0xLjU2LCAxKVxcbi8vIC0xLjVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwicm91bmQgdXAobiwgc2NhbGUpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+Um91bmRzIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHRoZSByb3VuZGluZyBtb2RlIHJvdW5kLXVwIGF0IHRoZSBnaXZlbiBzY2FsZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cm91bmQgdXAobjogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogbnVtYmVyXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cm91bmQgdXAoNS41KVxcbi8vIDZcXG5cXG5yb3VuZCB1cCgtNS41KVxcbi8vIC02XFxuXFxucm91bmQgdXAoMS4xMjEsIDIpXFxuLy8gMS4xM1xcblxcbnJvdW5kIHVwKC0xLjEyNiwgMilcXG4vLyAtMS4xM1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJyb3VuZCBkb3duKG4sIHNjYWxlKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJvdW5kcyB0aGUgZ2l2ZW4gdmFsdWUgd2l0aCB0aGUgcm91bmRpbmcgbW9kZSByb3VuZC1kb3duIGF0IHRoZSBnaXZlbiBzY2FsZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cm91bmQgZG93bihuOiBudW1iZXIsIHNjYWxlOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5yb3VuZCBkb3duKDUuNSwgMClcXG4vLyA1XFxuXFxucm91bmQgZG93biAoLTUuNSwgMClcXG4vLyAtNVxcblxcbnJvdW5kIGRvd24gKDEuMTIxLCAyKVxcbi8vIDEuMTJcXG5cXG5yb3VuZCBkb3duICgtMS4xMjYsIDIpXFxuLy8gLTEuMTJcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwicm91bmQgaGFsZiB1cChuLCBzY2FsZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5Sb3VuZHMgdGhlIGdpdmVuIHZhbHVlIHdpdGggdGhlIHJvdW5kaW5nIG1vZGUgcm91bmQtaGFsZi11cCBhdCB0aGUgZ2l2ZW4gc2NhbGUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJvdW5kIGhhbGYgdXAobjogbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogbnVtYmVyXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cm91bmQgaGFsZiB1cCg1LjUsIDApXFxuLy8gNlxcblxcbnJvdW5kIGhhbGYgdXAoLTUuNSwgMClcXG4vLyAtNlxcblxcbnJvdW5kIGhhbGYgdXAoMS4xMjEsIDIpXFxuLy8gMS4xMlxcblxcbnJvdW5kIGhhbGYgdXAoLTEuMTI2LCAyKVxcbi8vIC0xLjEzXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInJvdW5kIGhhbGYgZG93bihuLCBzY2FsZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5Sb3VuZHMgdGhlIGdpdmVuIHZhbHVlIHdpdGggdGhlIHJvdW5kaW5nIG1vZGUgcm91bmQtaGFsZi1kb3duIGF0IHRoZSBnaXZlbiBzY2FsZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+cm91bmQgaGFsZiBkb3duKG46IG51bWJlciwgc2NhbGU6IG51bWJlcik6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJvdW5kIGhhbGYgZG93biAoNS41LCAwKVxcbi8vIDVcXG5cXG5yb3VuZCBoYWxmIGRvd24gKC01LjUsIDApXFxuLy8gLTVcXG5cXG5yb3VuZCBoYWxmIGRvd24gKDEuMTIxLCAyKVxcbi8vIDEuMTJcXG5cXG5yb3VuZCBoYWxmIGRvd24gKC0xLjEyNiwgMilcXG4vLyAtMS4xM1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJhYnMobnVtYmVyKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBnaXZlbiBudW1lcmljIHZhbHVlLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hYnMobnVtYmVyOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hYnMoMTApXFxuLy8gMTBcXG5cXG5hYnMoLTEwKVxcbi8vIDEwXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1vZHVsbyhkaXZpZGVuZCwgZGl2aXNvcilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIG9mIGRpdmlkZW5kIGJ5IGRpdmlzb3IuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1vZHVsbyhkaXZpZGVuZDogbnVtYmVyLCBkaXZpc29yOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5tb2R1bG8oMTIsIDUpXFxuLy8gMlxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJzcXJ0KG51bWJlcilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnNxcnQobnVtYmVyOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zcXJ0KDE2KVxcbi8vIDRcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibG9nKG51bWJlcilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSAoYmFzZSBlKSBvZiB0aGUgZ2l2ZW4gdmFsdWUuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmxvZyhudW1iZXI6IG51bWJlcik6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmxvZygxMClcXG4vLyAyLjMwMjU4NTA5Mjk5NDA0NlxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJleHAobnVtYmVyKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIEV1bGVy4oCZcyBudW1iZXIgZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIHRoZSBnaXZlbiBudW1iZXIgLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5leHAobnVtYmVyOiBudW1iZXIpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5leHAoNSlcXG4vLyAxNDguNDEzMTU5MTAyNTc2NlxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJvZGQobnVtYmVyKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG9kZC4gT3RoZXJ3aXNlLCByZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+b2RkKG51bWJlcjogbnVtYmVyKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm9kZCg1KVxcbi8vIHRydWVcXG5cXG5vZGQoMilcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJldmVuKG51bWJlcilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiBpcyBldmVuLiBPdGhlcndpc2UsIHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5ldmVuKG51bWJlcjogbnVtYmVyKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmV2ZW4oNSlcXG4vLyBmYWxzZVxcblxcbmV2ZW4oMilcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInJhbmRvbSBudW1iZXIoKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPlJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gPGNvZGU+MDwvY29kZT4gYW5kIDxjb2RlPjE8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5yYW5kb20gbnVtYmVyKCk6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJhbmRvbSBudW1iZXIoKVxcbi8vIDAuOTcwMTYxODEzMjU3OTc5NVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJiZWZvcmUocG9pbnQxLCBwb2ludDIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YmVmb3JlKHBvaW50MTogQW55LCBwb2ludDI6IEFueSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5iZWZvcmUoMSwgMTApXFxuLy8gdHJ1ZVxcblxcbmJlZm9yZSgxMCwgMSlcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJiZWZvcmUocmFuZ2UsIHBvaW50KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmJlZm9yZShyYW5nZTogcmFuZ2UsIHBvaW50OiBBbnkpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YmVmb3JlKFsxLi41XSwgMTApXFxuLy8gdHJ1ZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJiZWZvcmUocG9pbnQsIHJhbmdlKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmJlZm9yZShwb2ludDogQW55LCByYW5nZTogcmFuZ2UpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YmVmb3JlKDEsIFsyLi41XSlcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImJlZm9yZShyYW5nZTEsIHJhbmdlMilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5iZWZvcmUocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5iZWZvcmUoWzEuLjVdLCBbNi4uMTBdKVxcbi8vIHRydWVcXG5cXG5iZWZvcmUoWzEuLjUpLFs1Li4xMF0pXFxuLy8gdHJ1ZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJhZnRlcihwb2ludDEsIHBvaW50MilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hZnRlcihwb2ludDE6IEFueSwgcG9pbnQyOiBBbnkpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YWZ0ZXIoMTAsIDEpXFxuLy8gdHJ1ZVxcblxcbmFmdGVyKDEsIDEwKVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImFmdGVyKHJhbmdlLCBwb2ludClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hZnRlcihyYW5nZTogcmFuZ2UsIHBvaW50OiBBbnkpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YWZ0ZXIoWzEuLjVdLCAxMClcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJhZnRlcihwb2ludCwgcmFuZ2UpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YWZ0ZXIocG9pbnQ6IEFueSwgcmFuZ2U6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFmdGVyKDEyLCBbMi4uNV0pXFxuLy8gdHJ1ZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJhZnRlcihyYW5nZTEsIHJhbmdlMilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5hZnRlcihyYW5nZTE6IHJhbmdlLCByYW5nZTI6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFmdGVyKFs2Li4xMF0sIFsxLi41XSlcXG4vLyB0cnVlXFxuXFxuYWZ0ZXIoWzUuLjEwXSwgWzEuLjUpKVxcbi8vIHRydWVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibWVldHMocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bWVldHMocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5tZWV0cyhbMS4uNV0sIFs1Li4xMF0pXFxuLy8gdHJ1ZVxcblxcbm1lZXRzKFsxLi4zXSwgWzQuLjZdKVxcbi8vIGZhbHNlXFxuXFxubWVldHMoWzEuLjNdLCBbMy4uNV0pXFxuLy8gdHJ1ZVxcblxcbm1lZXRzKFsxLi41XSwgKDUuLjhdKVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1ldCBieShyYW5nZTEsIHJhbmdlMilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5tZXQgYnkocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5tZXQgYnkoWzUuLjEwXSwgWzEuLjVdKVxcbi8vIHRydWVcXG5cXG5tZXQgYnkoWzMuLjRdLCBbMS4uMl0pXFxuLy8gZmFsc2VcXG5cXG5tZXQgYnkoWzMuLjVdLCBbMS4uM10pXFxuLy8gdHJ1ZVxcblxcbm1ldCBieSgoNS4uOF0sIFsxLi41KSlcXG4vLyBmYWxzZVxcblxcbm1ldCBieShbNS4uMTBdLCBbMS4uNSkpXFxuLy8gZmFsc2VcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwib3ZlcmxhcHMocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+b3ZlcmxhcHMocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5vdmVybGFwcyhbNS4uMTBdLCBbMS4uNl0pXFxuLy8gdHJ1ZVxcblxcbm92ZXJsYXBzKCgzLi43XSwgWzEuLjRdKVxcbi8vIHRydWVcXG5cXG5vdmVybGFwcyhbMS4uM10sICgzLi42XSlcXG4vLyBmYWxzZVxcblxcbm92ZXJsYXBzKCg1Li44XSwgWzEuLjUpKVxcbi8vIGZhbHNlXFxuXFxub3ZlcmxhcHMoWzQuLjEwXSwgWzEuLjUpKVxcbi8vIHRydWVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwib3ZlcmxhcHMgYmVmb3JlKHJhbmdlMSwgcmFuZ2UyKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm92ZXJsYXBzIGJlZm9yZShyYW5nZTE6IHJhbmdlLCByYW5nZTI6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm92ZXJsYXBzIGJlZm9yZShbMS4uNV0sIFs0Li4xMF0pXFxuLy8gdHJ1ZVxcblxcbm92ZXJsYXBzIGJlZm9yZShbMy4uNF0sIFsxLi4yXSlcXG4vLyBmYWxzZVxcblxcbm92ZXJsYXBzIGJlZm9yZShbMS4uM10sICgzLi41XSlcXG4vLyBmYWxzZVxcblxcbm92ZXJsYXBzIGJlZm9yZShbMS4uNSksICgzLi44XSlcXG4vLyB0cnVlXFxuXFxub3ZlcmxhcHMgYmVmb3JlKFsxLi41KSwgWzUuLjEwXSlcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJvdmVybGFwcyBhZnRlcihyYW5nZTEsIHJhbmdlMilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5vdmVybGFwcyBhZnRlcihyYW5nZTE6IHJhbmdlLCByYW5nZTI6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm92ZXJsYXBzIGFmdGVyKFs0Li4xMF0sIFsxLi41XSlcXG4vLyB0cnVlXFxuXFxub3ZlcmxhcHMgYWZ0ZXIoWzMuLjRdLCBbMS4uMl0pXFxuLy8gZmFsc2VcXG5cXG5vdmVybGFwcyBhZnRlcihbMy4uNV0sIFsxLi4zKSlcXG4vLyBmYWxzZVxcblxcbm92ZXJsYXBzIGFmdGVyKCg1Li44XSwgWzEuLjUpKVxcbi8vIGZhbHNlXFxuXFxub3ZlcmxhcHMgYWZ0ZXIoWzQuLjEwXSwgWzEuLjUpKVxcbi8vIHRydWVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZmluaXNoZXMocG9pbnQsIHJhbmdlKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmZpbmlzaGVzKHBvaW50OiBBbnksIHJhbmdlOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5maW5pc2hlcyg1LCBbMS4uNV0pXFxuLy8gdHJ1ZVxcblxcbmZpbmlzaGVzKDEwLCBbMS4uN10pXFxuLy8gZmFsc2VcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZmluaXNoZXMocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZmluaXNoZXMocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5maW5pc2hlcyhbMy4uNV0sIFsxLi41XSlcXG4vLyB0cnVlXFxuXFxuZmluaXNoZXMoKDEuLjVdLCBbMS4uNSkpXFxuLy8gZmFsc2VcXG5cXG5maW5pc2hlcyhbNS4uMTBdLCBbMS4uMTApKVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImZpbmlzaGVkIGJ5KHJhbmdlLCBwb2ludClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5maW5pc2hlZCBieShyYW5nZTogcmFuZ2UsIHBvaW50OiBBbnkpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZmluaXNoZWQgYnkoWzUuLjEwXSwgMTApXFxuLy8gdHJ1ZVxcblxcbmZpbmlzaGVkIGJ5KFszLi40XSwgMilcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJmaW5pc2hlZCBieShyYW5nZTEsIHJhbmdlMilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5maW5pc2hlZCBieShyYW5nZTE6IHJhbmdlLCByYW5nZTI6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmZpbmlzaGVkIGJ5KFsxLi41XSwgWzMuLjVdKVxcbi8vIHRydWVcXG5cXG5maW5pc2hlZCBieSgoNS4uOF0sIFsxLi41KSlcXG4vLyBmYWxzZVxcblxcbmZpbmlzaGVkIGJ5KFs1Li4xMF0sICgxLi4xMCkpXFxuLy8gZmFsc2VcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiaW5jbHVkZXMocmFuZ2UsIHBvaW50KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmluY2x1ZGVzKHJhbmdlOiByYW5nZSwgcG9pbnQ6IEFueSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5pbmNsdWRlcyhbNS4uMTBdLCA2KVxcbi8vIHRydWVcXG5cXG5pbmNsdWRlcyhbMy4uNF0sIDUpXFxuLy8gZmFsc2VcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiaW5jbHVkZXMocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+aW5jbHVkZXMocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5pbmNsdWRlcyhbMS4uMTBdLCBbNC4uNl0pXFxuLy8gdHJ1ZVxcblxcbmluY2x1ZGVzKCg1Li44XSwgWzEuLjUpKVxcbi8vIGZhbHNlXFxuXFxuaW5jbHVkZXMoWzEuLjEwXSwgWzEuLjUpKVxcbi8vIHRydWVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZHVyaW5nKHBvaW50LCByYW5nZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5kdXJpbmcocG9pbnQ6IEFueSwgcmFuZ2U6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmR1cmluZyg1LCBbMS4uMTBdKVxcbi8vIHRydWVcXG5cXG5kdXJpbmcoMTIsIFsxLi4xMF0pXFxuLy8gZmFsc2VcXG5cXG5kdXJpbmcoMSwgKDEuLjEwXSlcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJkdXJpbmcocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZHVyaW5nKHJhbmdlMTogcmFuZ2UsIHJhbmdlMjogcmFuZ2UpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZHVyaW5nKFs0Li42XSwgWzEuLjEwKSlcXG4vLyB0cnVlXFxuXFxuZHVyaW5nKCgxLi41XSwgKDEuLjEwXSlcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0YXJ0cyhwb2ludCwgcmFuZ2UpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RhcnRzKHBvaW50OiBBbnksIHJhbmdlOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdGFydHMoMSwgWzEuLjVdKVxcbi8vIHRydWVcXG5cXG5zdGFydHMoMSwgKDEuLjhdKVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0YXJ0cyhyYW5nZTEsIHJhbmdlMilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdGFydHMocmFuZ2UxOiByYW5nZSwgcmFuZ2UyOiByYW5nZSk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdGFydHMoKDEuLjVdLCBbMS4uNV0pXFxuLy8gZmFsc2VcXG5cXG5zdGFydHMoWzEuLjEwXSwgWzEuLjVdKVxcbi8vIGZhbHNlXFxuXFxuc3RhcnRzKCgxLi41KSwgKDEuLjEwKSlcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0YXJ0ZWQgYnkocmFuZ2UsIHBvaW50KVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0YXJ0ZWQgYnkocmFuZ2U6IHJhbmdlLCBwb2ludDogQW55KTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0YXJ0ZWQgYnkoWzEuLjEwXSwgMSlcXG4vLyB0cnVlXFxuXFxuc3RhcnRlZCBieSgoMS4uMTBdLCAxKVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0YXJ0ZWQgYnkocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RhcnRlZCBieShyYW5nZTE6IHJhbmdlLCByYW5nZTI6IHJhbmdlKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0YXJ0ZWQgYnkoWzEuLjEwXSwgWzEuLjVdKVxcbi8vIHRydWVcXG5cXG5zdGFydGVkIGJ5KCgxLi4xMF0sIFsxLi41KSlcXG4vLyBmYWxzZVxcblxcbnN0YXJ0ZWQgYnkoWzEuLjEwXSwgWzEuLjEwKSlcXG4vLyB0cnVlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcImNvaW5jaWRlcyhwb2ludDEsIHBvaW50MilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb2luY2lkZXMocG9pbnQxOiBBbnksIHBvaW50MjogQW55KTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmNvaW5jaWRlcyg1LCA1KVxcbi8vIHRydWVcXG5cXG5jb2luY2lkZXMoMywgNClcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJjb2luY2lkZXMocmFuZ2UxLCByYW5nZTIpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Y29pbmNpZGVzKHJhbmdlMTogcmFuZ2UsIHJhbmdlMjogcmFuZ2UpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+Y29pbmNpZGVzKFsxLi41XSwgWzEuLjVdKVxcbi8vIHRydWVcXG5cXG5jb2luY2lkZXMoKDEuLjVdLCBbMS4uNSkpXFxuLy8gZmFsc2VcXG5cXG5jb2luY2lkZXMoWzEuLjVdLCBbMi4uNl0pXFxuLy8gZmFsc2VcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwic3Vic3RyaW5nKHN0cmluZywgc3RhcnQgcG9zaXRpb24pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHN1YnN0cmluZyBvZiB0aGUgZ2l2ZW4gdmFsdWUgc3RhcnRpbmcgYXQgPGNvZGU+c3RhcnQgcG9zaXRpb248L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJzdHJpbmcoc3RyaW5nOiBzdHJpbmcsIHN0YXJ0IHBvc2l0aW9uOiBudW1iZXIpOiBzdHJpbmdcXG48L2NvZGU+PC9wcmU+XFxuPHA+VGhlIDxjb2RlPnN0YXJ0IHBvc2l0aW9uPC9jb2RlPiBzdGFydHMgYXQgdGhlIGluZGV4IDxjb2RlPjE8L2NvZGU+LiBUaGUgbGFzdCBwb3NpdGlvbiBpcyA8Y29kZT4tMTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3Vic3RyaW5nKCZxdW90O2Zvb2JhciZxdW90OywgMylcXG4vLyAmcXVvdDtvYmFyJnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0IHBvc2l0aW9uLCBsZW5ndGgpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyBhIHN1YnN0cmluZyBvZiB0aGUgZ2l2ZW4gdmFsdWUgc3RhcnRpbmcgYXQgPGNvZGU+c3RhcnQgcG9zaXRpb248L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJzdHJpbmcoc3RyaW5nOiBzdHJpbmcsIHN0YXJ0IHBvc2l0aW9uOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSA8Y29kZT5zdGFydCBwb3NpdGlvbjwvY29kZT4gc3RhcnRzIGF0IHRoZSBpbmRleCA8Y29kZT4xPC9jb2RlPi4gVGhlIGxhc3QgcG9zaXRpb24gaXMgPGNvZGU+LTE8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN1YnN0cmluZygmcXVvdDtmb29iYXImcXVvdDssIDMsIDMpXFxuLy8gJnF1b3Q7b2JhJnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0cmluZyBsZW5ndGgoc3RyaW5nKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBnaXZlbiB2YWx1ZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3RyaW5nIGxlbmd0aChzdHJpbmc6IHN0cmluZyk6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0cmluZyBsZW5ndGgoJnF1b3Q7Zm9vJnF1b3Q7KVxcbi8vIDNcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwidXBwZXIgY2FzZShzdHJpbmcpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgd2l0aCBhbGwgY2hhcmFjdGVycyBhcmUgdXBwZXJjYXNlLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj51cHBlciBjYXNlKHN0cmluZzogc3RyaW5nKTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dXBwZXIgY2FzZSgmcXVvdDthQmM0JnF1b3Q7KVxcbi8vICZxdW90O0FCQzQmcXVvdDtcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibG93ZXIgY2FzZShzdHJpbmcpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgd2l0aCBhbGwgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5sb3dlciBjYXNlKHN0cmluZzogc3RyaW5nKTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bG93ZXIgY2FzZSgmcXVvdDthQmM0JnF1b3Q7KVxcbi8vICZxdW90O2FiYzQmcXVvdDtcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwic3Vic3RyaW5nIGJlZm9yZShzdHJpbmcsIG1hdGNoKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgYSBzdWJzdHJpbmcgb2YgdGhlIGdpdmVuIHZhbHVlIHRoYXQgY29udGFpbnMgYWxsIGNoYXJhY3RlcnMgYmVmb3JlIDxjb2RlPm1hdGNoPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+c3Vic3RyaW5nIGJlZm9yZShzdHJpbmc6IHN0cmluZywgbWF0Y2g6IHN0cmluZyk6IHN0cmluZ1xcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN1YnN0cmluZyBiZWZvcmUoJnF1b3Q7Zm9vYmFyJnF1b3Q7LCAmcXVvdDtiYXImcXVvdDspXFxuLy8gJnF1b3Q7Zm9vJnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN1YnN0cmluZyBhZnRlcihzdHJpbmcsIG1hdGNoKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgYSBzdWJzdHJpbmcgb2YgdGhlIGdpdmVuIHZhbHVlIHRoYXQgY29udGFpbnMgYWxsIGNoYXJhY3RlcnMgYWZ0ZXIgPGNvZGU+bWF0Y2g8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJzdHJpbmcgYWZ0ZXIoc3RyaW5nOiBzdHJpbmcsIG1hdGNoOiBzdHJpbmcpOiBzdHJpbmdcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5zdWJzdHJpbmcgYWZ0ZXIoJnF1b3Q7Zm9vYmFyJnF1b3Q7LCAmcXVvdDtvYiZxdW90OylcXG4vLyAmcXVvdDthciZxdW90O1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJjb250YWlucyhzdHJpbmcsIG1hdGNoKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIHZhbHVlIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgPGNvZGU+bWF0Y2g8L2NvZGU+LiBPdGhlcndpc2UsIHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb250YWlucyhzdHJpbmc6IHN0cmluZywgbWF0Y2g6IHN0cmluZyk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5jb250YWlucygmcXVvdDtmb29iYXImcXVvdDssICZxdW90O29mJnF1b3Q7KVxcbi8vIGZhbHNlXFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInN0YXJ0cyB3aXRoKHN0cmluZywgbWF0Y2gpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gdmFsdWUgc3RhcnRzIHdpdGggdGhlIHN1YnN0cmluZyA8Y29kZT5tYXRjaDwvY29kZT4uIE90aGVyd2lzZSwgcmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0YXJ0cyB3aXRoKHN0cmluZzogc3RyaW5nLCBtYXRjaDogc3RyaW5nKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnN0YXJ0cyB3aXRoKCZxdW90O2Zvb2JhciZxdW90OywgJnF1b3Q7Zm8mcXVvdDspXFxuLy8gdHJ1ZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJlbmRzIHdpdGgoc3RyaW5nLCBtYXRjaClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiB2YWx1ZSBlbmRzIHdpdGggdGhlIHN1YnN0cmluZyA8Y29kZT5tYXRjaDwvY29kZT4uIE90aGVyd2lzZSwgcmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmVuZHMgd2l0aChzdHJpbmc6IHN0cmluZywgbWF0Y2g6IHN0cmluZyk6IGJvb2xlYW5cXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5lbmRzIHdpdGgoJnF1b3Q7Zm9vYmFyJnF1b3Q7LCAmcXVvdDtyJnF1b3Q7KVxcbi8vIHRydWVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibWF0Y2hlcyhpbnB1dCwgcGF0dGVybilcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBnaXZlbiB2YWx1ZSBtYXRjaGVzIHRoZSA8Y29kZT5wYXR0ZXJuPC9jb2RlPi4gT3RoZXJ3aXNlLCByZXR1cm5zIDxjb2RlPmZhbHNlPC9jb2RlPi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bWF0Y2hlcyhpbnB1dDogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuXFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgcmVndWxhciBleHByZXNzaW9uLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1hdGNoZXMoJnF1b3Q7Zm9vYmFyJnF1b3Q7LCAmcXVvdDteZm8qYmFyJnF1b3Q7KVxcbi8vIHRydWVcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibWF0Y2hlcyhpbnB1dCwgcGF0dGVybiwgZmxhZ3MpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZ2l2ZW4gdmFsdWUgbWF0Y2hlcyB0aGUgPGNvZGU+cGF0dGVybjwvY29kZT4uIE90aGVyd2lzZSwgcmV0dXJucyA8Y29kZT5mYWxzZTwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1hdGNoZXMoaW5wdXQ6IHN0cmluZywgcGF0dGVybjogc3RyaW5nLCBmbGFnczogc3RyaW5nKTogYm9vbGVhblxcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgPGNvZGU+cGF0dGVybjwvY29kZT4gaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi48L3A+XFxuPHA+VGhlIDxjb2RlPmZsYWdzPC9jb2RlPiBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6PC9wPlxcbjx1bD5cXG48bGk+PGNvZGU+czwvY29kZT4gKGRvdC1hbGwpPC9saT5cXG48bGk+PGNvZGU+bTwvY29kZT4gKG11bHRpLWxpbmUpPC9saT5cXG48bGk+PGNvZGU+aTwvY29kZT4gKGNhc2UgaW5zZW5zaXRpdmUpPC9saT5cXG48bGk+PGNvZGU+eDwvY29kZT4gKGNvbW1lbnRzKTwvbGk+XFxuPC91bD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPm1hdGNoZXMoJnF1b3Q7Rm9vQmFyJnF1b3Q7LCAmcXVvdDtmb28mcXVvdDssICZxdW90O2kmcXVvdDspXFxuLy8gdHJ1ZVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJyZXBsYWNlKGlucHV0LCBwYXR0ZXJuLCByZXBsYWNlbWVudClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSByZXN1bHRpbmcgc3RyaW5nIGFmdGVyIHJlcGxhY2luZyBhbGwgb2NjdXJyZW5jZXMgb2YgPGNvZGU+cGF0dGVybjwvY29kZT4gd2l0aCA8Y29kZT5yZXBsYWNlbWVudDwvY29kZT4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJlcGxhY2UoaW5wdXQ6IHN0cmluZywgcGF0dGVybjogc3RyaW5nLCByZXBsYWNlbWVudDogc3RyaW5nKTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgcmVndWxhciBleHByZXNzaW9uLjwvcD5cXG48cD5UaGUgPGNvZGU+cmVwbGFjZW1lbnQ8L2NvZGU+IGNhbiBhY2Nlc3MgdGhlIG1hdGNoIGdyb3VwcyBieSB1c2luZyA8Y29kZT4kPC9jb2RlPiBhbmQgdGhlIG51bWJlciBvZiB0aGUgZ3JvdXAsIGZvciBleGFtcGxlLFxcbjxjb2RlPiQxPC9jb2RlPiB0byBhY2Nlc3MgdGhlIGZpcnN0IGdyb3VwLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJlcGxhY2UoJnF1b3Q7YWJjZCZxdW90OywgJnF1b3Q7KGFiKXwoYSkmcXVvdDssICZxdW90O1sxPSQxXVsyPSQyXSZxdW90OylcXG4vLyAmcXVvdDtbMT1hYl1bMj1dY2QmcXVvdDtcXG5cXG5yZXBsYWNlKCZxdW90OzAxMjM0NTY3ODkmcXVvdDssICZxdW90OyhcXFxcZHszfSkoXFxcXGR7M30pKFxcXFxkezR9KSZxdW90OywgJnF1b3Q7KCQxKSAkMi0kMyZxdW90OylcXG4vLyAmcXVvdDsoMDEyKSAzNDUtNjc4OSZxdW90O1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJyZXBsYWNlKGlucHV0LCBwYXR0ZXJuLCByZXBsYWNlbWVudCwgZmxhZ3MpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgcmVzdWx0aW5nIHN0cmluZyBhZnRlciByZXBsYWNpbmcgYWxsIG9jY3VycmVuY2VzIG9mIDxjb2RlPnBhdHRlcm48L2NvZGU+IHdpdGggPGNvZGU+cmVwbGFjZW1lbnQ8L2NvZGU+LjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5yZXBsYWNlKGlucHV0OiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZywgZmxhZ3M6IHN0cmluZyk6IHN0cmluZ1xcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgPGNvZGU+cGF0dGVybjwvY29kZT4gaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi48L3A+XFxuPHA+VGhlIDxjb2RlPnJlcGxhY2VtZW50PC9jb2RlPiBjYW4gYWNjZXNzIHRoZSBtYXRjaCBncm91cHMgYnkgdXNpbmcgPGNvZGU+JDwvY29kZT4gYW5kIHRoZSBudW1iZXIgb2YgdGhlIGdyb3VwLCBmb3IgZXhhbXBsZSxcXG48Y29kZT4kMTwvY29kZT4gdG8gYWNjZXNzIHRoZSBmaXJzdCBncm91cC48L3A+XFxuPHA+VGhlIDxjb2RlPmZsYWdzPC9jb2RlPiBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6PC9wPlxcbjx1bD5cXG48bGk+PGNvZGU+czwvY29kZT4gKGRvdC1hbGwpPC9saT5cXG48bGk+PGNvZGU+bTwvY29kZT4gKG11bHRpLWxpbmUpPC9saT5cXG48bGk+PGNvZGU+aTwvY29kZT4gKGNhc2UgaW5zZW5zaXRpdmUpPC9saT5cXG48bGk+PGNvZGU+eDwvY29kZT4gKGNvbW1lbnRzKTwvbGk+XFxuPC91bD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnJlcGxhY2UoJnF1b3Q7SG93IGRvIHlvdSBmZWVsPyZxdW90OywgJnF1b3Q7RmVlbCZxdW90OywgJnF1b3Q7RkVFTCZxdW90OywgJnF1b3Q7aSZxdW90OylcXG4vLyAmcXVvdDtIb3cgZG8geW91IEZFRUw/JnF1b3Q7XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInNwbGl0KHN0cmluZywgZGVsaW1pdGVyKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlNwbGl0cyB0aGUgZ2l2ZW4gdmFsdWUgaW50byBhIGxpc3Qgb2Ygc3Vic3RyaW5ncywgYnJlYWtpbmcgYXQgZWFjaCBvY2N1cnJlbmNlIG9mIHRoZSA8Y29kZT5kZWxpbWl0ZXI8L2NvZGU+IHBhdHRlcm4uPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnNwbGl0KHN0cmluZzogc3RyaW5nLCBkZWxpbWl0ZXI6IHN0cmluZyk6IGxpc3QmbHQ7c3RyaW5nJmd0O1xcbjwvY29kZT48L3ByZT5cXG48cD5UaGUgPGNvZGU+ZGVsaW1pdGVyPC9jb2RlPiBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgcmVndWxhciBleHByZXNzaW9uLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnNwbGl0KCZxdW90O0pvaG4gRG9lJnF1b3Q7LCAmcXVvdDtcXFxccyZxdW90OyApXFxuLy8gWyZxdW90O0pvaG4mcXVvdDssICZxdW90O0RvZSZxdW90O11cXG5cXG5zcGxpdCgmcXVvdDthO2I7Yzs7JnF1b3Q7LCAmcXVvdDs7JnF1b3Q7KVxcbi8vIFsmcXVvdDthJnF1b3Q7LCAmcXVvdDtiJnF1b3Q7LCAmcXVvdDtjJnF1b3Q7LCAmcXVvdDsmcXVvdDssICZxdW90OyZxdW90O11cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZXh0cmFjdChzdHJpbmcsIHBhdHRlcm4pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PGVtPkNhbXVuZGEgRXh0ZW5zaW9uPC9lbT48L3A+XFxuPHA+UmV0dXJucyBhbGwgbWF0Y2hlcyBvZiB0aGUgcGF0dGVybiBpbiB0aGUgZ2l2ZW4gc3RyaW5nLiBSZXR1cm5zIGFuIGVtcHR5IGxpc3QgaWYgdGhlIHBhdHRlcm4gZG9lc24mIzM5O3RcXG5tYXRjaC48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZXh0cmFjdChzdHJpbmc6IHN0cmluZywgcGF0dGVybjogc3RyaW5nKTogbGlzdCZsdDtzdHJpbmcmZ3Q7XFxuPC9jb2RlPjwvcHJlPlxcbjxwPlRoZSA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgcmVndWxhciBleHByZXNzaW9uLjwvcD5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmV4dHJhY3QoJnF1b3Q7cmVmZXJlbmNlcyBhcmUgMTIzNCwgMTI1NiwgMTM3OCZxdW90OywgJnF1b3Q7MTJbMC05XSomcXVvdDspXFxuLy8gWyZxdW90OzEyMzQmcXVvdDssJnF1b3Q7MTI1NiZxdW90O11cXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwibm93KClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW5jbHVkaW5nIHRoZSB0aW1lem9uZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bm93KCk6IGRhdGUgYW5kIHRpbWVcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5ub3coKVxcbi8vIGRhdGUgYW5kIHRpbWUoJnF1b3Q7MjAyMC0wNy0zMVQxNDoyNzozMEBFdXJvcGUvQmVybGluJnF1b3Q7KVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJ0b2RheSgpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgY3VycmVudCBkYXRlLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj50b2RheSgpOiBkYXRlXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dG9kYXkoKVxcbi8vIGRhdGUoJnF1b3Q7MjAyMC0wNy0zMSZxdW90OylcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiZGF5IG9mIHdlZWsoZGF0ZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBkYXkgb2YgdGhlIHdlZWsgYWNjb3JkaW5nIHRvIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIuIE5vdGUgdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgRW5nbGlzaCBuYW1lIG9mIHRoZSBkYXkuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRheSBvZiB3ZWVrKGRhdGU6IGRhdGUpOiBzdHJpbmdcXG48L2NvZGU+PC9wcmU+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF5IG9mIHdlZWsoZGF0ZTogZGF0ZSBhbmQgdGltZSk6IHN0cmluZ1xcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRheSBvZiB3ZWVrKGRhdGUoJnF1b3Q7MjAxOS0wOS0xNyZxdW90OykpXFxuLy8gJnF1b3Q7VHVlc2RheSZxdW90O1xcblxcbmRheSBvZiB3ZWVrKGRhdGUgYW5kIHRpbWUoJnF1b3Q7MjAxOS0wOS0xN1QxMjowMDowMCZxdW90OykpXFxuLy8gJnF1b3Q7VHVlc2RheSZxdW90O1xcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJkYXkgb2YgeWVhcihkYXRlKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPlJldHVybnMgdGhlIEdyZWdvcmlhbiBudW1iZXIgb2YgdGhlIGRheSB3aXRoaW4gdGhlIHllYXIuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRheSBvZiB5ZWFyKGRhdGU6IGRhdGUpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+ZGF5IG9mIHllYXIoZGF0ZTogZGF0ZSBhbmQgdGltZSk6IG51bWJlclxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmRheSBvZiB5ZWFyKGRhdGUoJnF1b3Q7MjAxOS0wOS0xNyZxdW90OykpXFxuLy8gMjYwXFxuXFxuZGF5IG9mIHllYXIoZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDE5LTA5LTE3VDEyOjAwOjAwJnF1b3Q7KSlcXG4vLyAyNjBcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwid2VlayBvZiB5ZWFyKGRhdGUpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgR3JlZ29yaWFuIG51bWJlciBvZiB0aGUgd2VlayB3aXRoaW4gdGhlIHllYXIsIGFjY29yZGluZyB0byBJU08gODYwMS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+d2VlayBvZiB5ZWFyKGRhdGU6IGRhdGUpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+d2VlayBvZiB5ZWFyKGRhdGU6IGRhdGUgYW5kIHRpbWUpOiBudW1iZXJcXG48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj53ZWVrIG9mIHllYXIoZGF0ZSgmcXVvdDsyMDE5LTA5LTE3JnF1b3Q7KSlcXG4vLyAzOFxcblxcbndlZWsgb2YgeWVhcihkYXRlIGFuZCB0aW1lKCZxdW90OzIwMTktMDktMTdUMTI6MDA6MDAmcXVvdDspKVxcbi8vIDM4XFxuPC9jb2RlPjwvcHJlPlxcblwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIm1vbnRoIG9mIHllYXIoZGF0ZSlcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD5SZXR1cm5zIHRoZSBtb250aCBvZiB0aGUgeWVhciBhY2NvcmRpbmcgdG8gdGhlIEdyZWdvcmlhbiBjYWxlbmRhci4gTm90ZSB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBFbmdsaXNoIG5hbWUgb2YgdGhlIG1vbnRoLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5tb250aCBvZiB5ZWFyKGRhdGU6IGRhdGUpOiBzdHJpbmdcXG48L2NvZGU+PC9wcmU+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bW9udGggb2YgeWVhcihkYXRlOiBkYXRlIGFuZCB0aW1lKTogc3RyaW5nXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bW9udGggb2YgeWVhcihkYXRlKCZxdW90OzIwMTktMDktMTcmcXVvdDspKVxcbi8vICZxdW90O1NlcHRlbWJlciZxdW90O1xcblxcbm1vbnRoIG9mIHllYXIoZGF0ZSBhbmQgdGltZSgmcXVvdDsyMDE5LTA5LTE3VDEyOjAwOjAwJnF1b3Q7KSlcXG4vLyAmcXVvdDtTZXB0ZW1iZXImcXVvdDtcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiYWJzKG4pXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+UmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBnaXZlbiBkdXJhdGlvbi48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+YWJzKG46IGRheXMgYW5kIHRpbWUgZHVyYXRpb24pOiBkYXlzIGFuZCB0aW1lIGR1cmF0aW9uXFxuPC9jb2RlPjwvcHJlPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFicyhuOiB5ZWFycyBhbmQgbW9udGhzIGR1cmF0aW9uKTogeWVhcnMgYW5kIG1vbnRocyBkdXJhdGlvblxcbjwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmFicyhkdXJhdGlvbigmcXVvdDstUFQ1SCZxdW90OykpXFxuLy8gJnF1b3Q7ZHVyYXRpb24oJnF1b3Q7UFQ1SCZxdW90OykmcXVvdDtcXG5cXG5hYnMoZHVyYXRpb24oJnF1b3Q7UFQ1SCZxdW90OykpXFxuLy8gJnF1b3Q7ZHVyYXRpb24oJnF1b3Q7UFQ1SCZxdW90OykmcXVvdDtcXG5cXG5hYnMoZHVyYXRpb24oJnF1b3Q7LVAyTSZxdW90OykpXFxuLy8gZHVyYXRpb24oJnF1b3Q7UDJNJnF1b3Q7KVxcbjwvY29kZT48L3ByZT5cXG5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJsYXN0IGRheSBvZiBtb250aChkYXRlKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPlRha2VzIHRoZSBtb250aCBvZiB0aGUgZ2l2ZW4gZGF0ZSBvciBkYXRlLXRpbWUgdmFsdWUgYW5kIHJldHVybnMgdGhlIGxhc3QgZGF5IG9mIHRoaXMgbW9udGguPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmxhc3QgZGF5IG9mIG1vbnRoKGRhdGU6IGRhdGUpOiBkYXRlXFxuPC9jb2RlPjwvcHJlPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPmxhc3QgZGF5IG9mIG1vbnRoKGRhdGU6IGRhdGUgYW5kIHRpbWUpOiBkYXRlXFxuPC9jb2RlPjwvcHJlPlxcbjxwPjxzdHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+bGFzdCBkYXkgb2YgbW9udGgoZGF0ZSgmcXVvdDsyMDIyLTEwLTAxJnF1b3Q7KSlcXG4vLyBkYXRlKCZxdW90OzIwMjItMTAtMzEmcXVvdDspKVxcblxcbmxhc3QgZGF5IG9mIG1vbnRoKGRhdGUgYW5kIHRpbWUoJnF1b3Q7MjAyMi0xMC0xNlQxMjowMDowMCZxdW90OykpXFxuLy8gZGF0ZSgmcXVvdDsyMDIyLTEwLTMxJnF1b3Q7KSlcXG48L2NvZGU+PC9wcmU+XFxuXCJcblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiaXMgZW1wdHkobGlzdClcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48ZW0+Q2FtdW5kYSBFeHRlbnNpb248L2VtPjwvcD5cXG48cD5SZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGxpc3QgaXMgZW1wdHkuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+aXMgZW1wdHkobGlzdDogbGlzdCk6IGJvb2xlYW48L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj5pcyBlbXB0eShbXSlcXG4vLyB0cnVlXFxuXFxuaXMgZW1wdHkoWzEsMiwzXSlcXG4vLyBmYWxzZVxcbjwvY29kZT48L3ByZT5cIlxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJ0cmltKHN0cmluZylcIixcblx0XHRkZXNjcmlwdGlvbjogXCI8cD48ZW0+Q2FtdW5kYSBFeHRlbnNpb248L2VtPjwvcD5cXG48cD5SZXR1cm5zIHRoZSBnaXZlbiBzdHJpbmcgd2l0aG91dCBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMuPC9wPlxcbjxwPjxzdHJvbmc+RnVuY3Rpb24gc2lnbmF0dXJlPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnRyaW0oc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmc8L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj50cmltKFxcXCIgIGhlbGxvIHdvcmxkICBcXFwiKVxcbi8vIFxcXCJoZWxsbyB3b3JsZFxcXCJcXG5cXG50cmltKFxcXCJoZWxsbyAgIHdvcmxkIFxcXCIpXFxuLy8gXFxcImhlbGxvICAgd29ybGRcXFwiXFxuPC9jb2RlPjwvcHJlPlwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInV1aWQoKVwiLFxuXHRcdGRlc2NyaXB0aW9uOiBcIjxwPjxlbT5DYW11bmRhIEV4dGVuc2lvbjwvZW0+PC9wPlxcbjxwPlJldHVybnMgYSBVVUlEIChVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcikgd2l0aCAzNiBjaGFyYWN0ZXJzLjwvcD5cXG48cD48c3Ryb25nPkZ1bmN0aW9uIHNpZ25hdHVyZTwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj51dWlkKCk6IHN0cmluZzwvY29kZT48L3ByZT5cXG48cD48c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+PC9wPlxcbjxwcmU+PGNvZGUgY2xhc3M9XFxcImxhbmd1YWdlLWZlZWxcXFwiPnV1aWQoKVxcbi8vIFxcXCI3NzkzYWFiMS1kNzYxLTRkMzgtOTE2Yi1iNzI3MGUzMDk4OTRcXFwiXFxuPC9jb2RlPjwvcHJlPlwiXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcInRvIGJhc2U2NChzdHJpbmcpXCIsXG5cdFx0ZGVzY3JpcHRpb246IFwiPHA+PGVtPkNhbXVuZGEgRXh0ZW5zaW9uPC9lbT48L3A+XFxuPHA+UmV0dXJucyB0aGUgZ2l2ZW4gc3RyaW5nIGVuY29kZWQgaW4gQmFzZTY0IGZvcm1hdC48L3A+XFxuPHA+PHN0cm9uZz5GdW5jdGlvbiBzaWduYXR1cmU8L3N0cm9uZz48L3A+XFxuPHByZT48Y29kZSBjbGFzcz1cXFwibGFuZ3VhZ2UtZmVlbFxcXCI+dG8gYmFzZTY0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmc8L2NvZGU+PC9wcmU+XFxuPHA+PHN0cm9uZz5FeGFtcGxlczwvc3Ryb25nPjwvcD5cXG48cHJlPjxjb2RlIGNsYXNzPVxcXCJsYW5ndWFnZS1mZWVsXFxcIj50byBiYXNlNjQoXFxcIkZFRUxcXFwiKVxcbi8vIFxcXCJSa1ZGVEE9PVxcXCJcXG48L2NvZGU+PC9wcmU+XCJcblx0fVxuXTtcblxuLyoqXG4gKiBAcGFyYW0geyBpbXBvcnQoJy4uJykuQnVpbHRpbltdIH0gYnVpbHRpbnNcbiAqXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLicpLlZhcmlhYmxlW10gfSB2YXJpYWJsZVxuICovXG5mdW5jdGlvbiBwYXJzZUJ1aWx0aW5zKGJ1aWx0aW5zKSB7XG4gIHJldHVybiBidWlsdGlucy5tYXAocGFyc2VCdWlsdGluKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyBpbXBvcnQoJy4uJykuQnVpbHRpbiB9IGJ1aWx0aW5cbiAqXG4gKiBAcmV0dXJucyB7IGltcG9ydCgnLi4nKS5WYXJpYWJsZSB9IHZhcmlhYmxlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQnVpbHRpbihidWlsdGluKSB7XG5cbiAgY29uc3Qge1xuICAgIG5hbWUsXG4gICAgZGVzY3JpcHRpb25cbiAgfSA9IGJ1aWx0aW47XG5cbiAgY29uc3QgbWF0Y2ggPSBuYW1lLm1hdGNoKC9eKFtcXHdcXHNdKylcXCgoLiopXFwpJC8pO1xuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBtYXRjaFsxXTtcbiAgY29uc3QgZnVuY3Rpb25Bcmd1bWVudHMgPSBtYXRjaFsyXTtcblxuICAvLyBwYXJhbWV0ZXJsZXNzIGZ1bmN0aW9uIG1hdGNoZXMgYXMgZW1wdHkgc3RyaW5nXG4gIGNvbnN0IHBhcmFtcyA9IGZ1bmN0aW9uQXJndW1lbnRzID8gZnVuY3Rpb25Bcmd1bWVudHMuc3BsaXQoJywgJykubWFwKG5hbWUgPT4gKHsgbmFtZSB9KSkgOiBbXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgIHBhcmFtcyxcbiAgICBpbmZvOiAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9taWZ5KGA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj4ke2Rlc2NyaXB0aW9ufTxkaXY+YCk7XG4gICAgfSxcbiAgICBib29zdDogMFxuICB9O1xufVxuXG5jb25zdCBjYW11bmRhID0gcGFyc2VCdWlsdGlucyhjYW11bmRhVGFncyk7XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJy4vY29yZScpLlZhcmlhYmxlIH0gVmFyaWFibGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJ1aWx0aW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGVzY3JpcHRpb25cbiAqL1xuXG5jb25zdCBjb3JlQ29uZiA9IG5ldyBDb21wYXJ0bWVudCgpO1xuY29uc3QgcGxhY2Vob2xkZXJDb25mID0gbmV3IENvbXBhcnRtZW50KCk7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgRkVFTCBlZGl0b3IgaW4gdGhlIHN1cHBsaWVkIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7RE9NTm9kZX0gY29uZmlnLmNvbnRhaW5lclxuICogQHBhcmFtIHtFeHRlbnNpb25bXX0gW2NvbmZpZy5leHRlbnNpb25zXVxuICogQHBhcmFtIHtEaWFsZWN0fSBbY29uZmlnLmRpYWxlY3Q9J2V4cHJlc3Npb24nXVxuICogQHBhcmFtIHtET01Ob2RlfFN0cmluZ30gW2NvbmZpZy50b29sdGlwQ29udGFpbmVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbmZpZy5vbkNoYW5nZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb25maWcub25LZXlEb3duXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbmZpZy5vbkxpbnRdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtjb25maWcucmVhZE9ubHldXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbmZpZy52YWx1ZV1cbiAqIEBwYXJhbSB7VmFyaWFibGVbXX0gW2NvbmZpZy52YXJpYWJsZXNdXG4gKiBAcGFyYW0ge1ZhcmlhYmxlW119IFtjb25maWcuYnVpbHRpbnNdXG4gKlxuICogQHJldHVybnMge09iamVjdH0gZWRpdG9yXG4gKi9cbmZ1bmN0aW9uIEZlZWxFZGl0b3Ioe1xuICBleHRlbnNpb25zOiBlZGl0b3JFeHRlbnNpb25zID0gW10sXG4gIGRpYWxlY3QgPSAnZXhwcmVzc2lvbicsXG4gIGNvbnRhaW5lcixcbiAgY29udGVudEF0dHJpYnV0ZXMgPSB7fSxcbiAgdG9vbHRpcENvbnRhaW5lcixcbiAgb25DaGFuZ2UgPSAoKSA9PiB7fSxcbiAgb25LZXlEb3duID0gKCkgPT4ge30sXG4gIG9uTGludCA9ICgpID0+IHt9LFxuICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIkMSA9ICcnLFxuICByZWFkT25seSA9IGZhbHNlLFxuICB2YWx1ZSA9ICcnLFxuICBidWlsdGlucyA9IGNhbXVuZGEsXG4gIHZhcmlhYmxlcyA9IFtdXG59KSB7XG5cbiAgY29uc3QgY2hhbmdlSGFuZGxlciA9IEVkaXRvclZpZXcudXBkYXRlTGlzdGVuZXIub2YoKHVwZGF0ZSkgPT4ge1xuICAgIGlmICh1cGRhdGUuZG9jQ2hhbmdlZCkge1xuICAgICAgb25DaGFuZ2UodXBkYXRlLnN0YXRlLmRvYy50b1N0cmluZygpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGxpbnRIYW5kbGVyID0gRWRpdG9yVmlldy51cGRhdGVMaXN0ZW5lci5vZigodXBkYXRlKSA9PiB7XG4gICAgY29uc3QgZGlhZ25vc3RpY0VmZmVjdHMgPSB1cGRhdGUudHJhbnNhY3Rpb25zXG4gICAgICAuZmxhdE1hcCh0ID0+IHQuZWZmZWN0cylcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IGVmZmVjdC5pcyhzZXREaWFnbm9zdGljc0VmZmVjdCkpO1xuXG4gICAgaWYgKCFkaWFnbm9zdGljRWZmZWN0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlcyA9IGRpYWdub3N0aWNFZmZlY3RzLmZsYXRNYXAoZWZmZWN0ID0+IGVmZmVjdC52YWx1ZSk7XG5cbiAgICBvbkxpbnQobWVzc2FnZXMpO1xuICB9KTtcblxuICBjb25zdCBrZXlIYW5kbGVyID0gRWRpdG9yVmlldy5kb21FdmVudEhhbmRsZXJzKFxuICAgIHtcbiAgICAgIGtleWRvd246IG9uS2V5RG93blxuICAgIH1cbiAgKTtcblxuICBpZiAodHlwZW9mIHRvb2x0aXBDb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgdG9vbHRpcENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodG9vbHRpcENvbnRhaW5lcik7XG4gIH1cblxuICBjb25zdCB0b29sdGlwTGF5b3V0ID0gdG9vbHRpcENvbnRhaW5lciA/IHRvb2x0aXBzKHtcbiAgICB0b29sdGlwU3BhY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRvb2x0aXBDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9KSA6IFtdO1xuXG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBbXG4gICAgYXV0b2NvbXBsZXRpb24oKSxcbiAgICBjb3JlQ29uZi5vZihjb25maWd1cmUoe1xuICAgICAgZGlhbGVjdCxcbiAgICAgIGJ1aWx0aW5zLFxuICAgICAgdmFyaWFibGVzXG4gICAgfSkpLFxuICAgIGJyYWNrZXRNYXRjaGluZygpLFxuICAgIGluZGVudE9uSW5wdXQoKSxcbiAgICBjbG9zZUJyYWNrZXRzKCksXG4gICAgRWRpdG9yVmlldy5jb250ZW50QXR0cmlidXRlcy5vZihjb250ZW50QXR0cmlidXRlcyksXG4gICAgY2hhbmdlSGFuZGxlcixcbiAgICBrZXlIYW5kbGVyLFxuICAgIGtleW1hcC5vZihbXG4gICAgICAuLi5kZWZhdWx0S2V5bWFwLFxuICAgIF0pLFxuICAgIGxpbnRlcixcbiAgICBsaW50SGFuZGxlcixcbiAgICB0b29sdGlwTGF5b3V0LFxuICAgIHBsYWNlaG9sZGVyQ29uZi5vZihwbGFjZWhvbGRlcihwbGFjZWhvbGRlciQxKSksXG4gICAgdGhlbWUsXG4gICAgLi4uZWRpdG9yRXh0ZW5zaW9uc1xuICBdO1xuXG4gIGlmIChyZWFkT25seSkge1xuICAgIGV4dGVuc2lvbnMucHVzaChFZGl0b3JWaWV3LmVkaXRhYmxlLm9mKGZhbHNlKSk7XG4gIH1cblxuICB0aGlzLl9jbUVkaXRvciA9IG5ldyBFZGl0b3JWaWV3KHtcbiAgICBzdGF0ZTogRWRpdG9yU3RhdGUuY3JlYXRlKHtcbiAgICAgIGRvYzogdmFsdWUsXG4gICAgICBleHRlbnNpb25zXG4gICAgfSksXG4gICAgcGFyZW50OiBjb250YWluZXJcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGNvbnRlbnQgb2YgdGhlIEVkaXRvclxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICovXG5GZWVsRWRpdG9yLnByb3RvdHlwZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHRoaXMuX2NtRWRpdG9yLmRpc3BhdGNoKHtcbiAgICBjaGFuZ2VzOiB7XG4gICAgICBmcm9tOiAwLFxuICAgICAgdG86IHRoaXMuX2NtRWRpdG9yLnN0YXRlLmRvYy5sZW5ndGgsXG4gICAgICBpbnNlcnQ6IHZhbHVlLFxuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGZvY3VzIGluIHRoZSBlZGl0b3IuXG4gKi9cbkZlZWxFZGl0b3IucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcbiAgY29uc3QgY21FZGl0b3IgPSB0aGlzLl9jbUVkaXRvcjtcblxuICAvLyB0aGUgQ29kZW1pcnJvciBgZm9jdXNgIG1ldGhvZCBhbHdheXMgY2FsbHMgYGZvY3VzYCB3aXRoIGBwcmV2ZW50U2Nyb2xsYCxcbiAgLy8gc28gd2UgaGF2ZSB0byBmb2N1cyArIHNjcm9sbCBtYW51YWxseVxuICBjbUVkaXRvci5jb250ZW50RE9NLmZvY3VzKCk7XG4gIGNtRWRpdG9yLmZvY3VzKCk7XG5cbiAgaWYgKHR5cGVvZiBwb3NpdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICBjb25zdCBlbmQgPSBjbUVkaXRvci5zdGF0ZS5kb2MubGVuZ3RoO1xuICAgIGNtRWRpdG9yLmRpc3BhdGNoKHsgc2VsZWN0aW9uOiB7IGFuY2hvcjogcG9zaXRpb24gPD0gZW5kID8gcG9zaXRpb24gOiBlbmQgfSB9KTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGlvbiByYW5nZXMuIElmIG5vIHRleHQgaXMgc2VsZWN0ZWQsIGEgc2luZ2xlXG4gKiByYW5nZSB3aXRoIHRoZSBzdGFydCBhbmQgZW5kIGluZGV4IGF0IHRoZSBjdXJzb3IgcG9zaXRpb24gd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBzZWxlY3Rpb25cbiAqIEByZXR1cm5zIHtBcnJheX0gc2VsZWN0aW9uLnJhbmdlc1xuICovXG5GZWVsRWRpdG9yLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2NtRWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcbn07XG5cbi8qKlxuICogU2V0IHZhcmlhYmxlcyB0byBiZSB1c2VkIGZvciBhdXRvY29tcGxldGlvbi5cbiAqXG4gKiBAcGFyYW0ge1ZhcmlhYmxlW119IHZhcmlhYmxlc1xuICovXG5GZWVsRWRpdG9yLnByb3RvdHlwZS5zZXRWYXJpYWJsZXMgPSBmdW5jdGlvbih2YXJpYWJsZXMpIHtcblxuICBjb25zdCB7XG4gICAgZGlhbGVjdCxcbiAgICBidWlsdGluc1xuICB9ID0gZ2V0KHRoaXMuX2NtRWRpdG9yLnN0YXRlKTtcblxuICB0aGlzLl9jbUVkaXRvci5kaXNwYXRjaCh7XG4gICAgZWZmZWN0czogW1xuICAgICAgY29yZUNvbmYucmVjb25maWd1cmUoY29uZmlndXJlKHtcbiAgICAgICAgZGlhbGVjdCxcbiAgICAgICAgYnVpbHRpbnMsXG4gICAgICAgIHZhcmlhYmxlc1xuICAgICAgfSkpXG4gICAgXVxuICB9KTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHBsYWNlaG9sZGVyIHRleHQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsYWNlaG9sZGVyXG4gKi9cbkZlZWxFZGl0b3IucHJvdG90eXBlLnNldFBsYWNlaG9sZGVyID0gZnVuY3Rpb24ocGxhY2Vob2xkZXIkMSkge1xuICB0aGlzLl9jbUVkaXRvci5kaXNwYXRjaCh7XG4gICAgZWZmZWN0czogcGxhY2Vob2xkZXJDb25mLnJlY29uZmlndXJlKHBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyJDEpKVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IEZlZWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/feel-editor/dist/index.es.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/feel-lint/dist/index.esm.js":
-/*!***********************************************************!*\
- !*** ./node_modules/@bpmn-io/feel-lint/dist/index.esm.js ***!
- \***********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cmFeelLinter: () => (/* binding */ cmFeelLinter),\n/* harmony export */ lintExpression: () => (/* binding */ lintExpression)\n/* harmony export */ });\n/* harmony import */ var lezer_feel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lezer-feel */ \"./node_modules/lezer-feel/dist/index.js\");\n/* harmony import */ var _codemirror_language__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @codemirror/language */ \"./node_modules/@codemirror/language/dist/index.js\");\n\n\n\n/**\n * @typedef {import('@lezer/common').Tree} Tree\n * @typedef {import('@codemirror/lint').Diagnostic} LintMessage\n */\n\n/**\n * Create an array of syntax errors in the given tree.\n *\n * @param {Tree} syntaxTree\n * @returns {LintMessage[]} array of syntax errors\n */\nfunction lintSyntax(syntaxTree) {\n\n const lintMessages = [];\n\n syntaxTree.iterate({\n enter: ref => {\n const node = ref.node;\n\n if (!node.type.isError) {\n return;\n }\n\n const parent = node.parent;\n const next = getNextNode(node);\n\n const message = {\n from: node.from,\n to: node.to,\n severity: 'error',\n type: 'Syntax Error'\n };\n\n if (node.from !== node.to) {\n message.message = `Unrecognized token in <${parent.name}>`;\n } else if (next) {\n message.message = `Unrecognized token <${next.name}> in <${parent.name}>`;\n message.to = next.to;\n } else {\n const before = parent.enterUnfinishedNodesBefore(node.to);\n message.message = `Incomplete <${ (before || parent).name }>`;\n }\n\n lintMessages.push(message);\n }\n });\n\n return lintMessages;\n}\n\nfunction getNextNode(node) {\n if (!node) {\n return null;\n }\n\n return node.nextSibling || getNextNode(node.parent);\n}\n\n/**\n * @typedef {object} Context\n * @property {function} report\n * @property {(from: number, to: number) => string} readContent\n * @property {(from: number, to: number, content: string) => void} updateContent\n */\n\nconst RULE_NAME = 'first-item';\n\nvar firstItem = {\n create(/** @type {Context} */ context) {\n return {\n enter(node) {\n if (node.name !== 'FilterExpression') {\n return;\n }\n\n const content = context.readContent(node.from, node.to);\n\n if (zeroIndexPattern().test(content)) {\n const {\n from,\n to\n } = node;\n\n context.report({\n from,\n to,\n message: 'First item is accessed via [1]',\n severity: 'warning',\n type: RULE_NAME,\n actions: [\n {\n name: 'fix',\n apply(_, start = from, end = to) {\n context.updateContent(start, end, content.replace(zeroIndexPattern(), '[1]'));\n }\n }\n ]\n });\n }\n }\n };\n }\n};\n\nfunction zeroIndexPattern() {\n return /\\[\\s*0\\s*\\]$/;\n}\n\n/**\n * @typedef {import('@lezer/common').Tree} Tree\n * @typedef {import('@codemirror/lint').Diagnostic} LintMessage\n * @typedef {import('./index').LintAllContext} LintAllContext\n */\n\nconst RULES = [\n firstItem\n];\n\n/**\n * Create an array of messages reported from rules in the given tree.\n *\n * @param {LintAllContext} context\n * @returns {LintMessage[]} array of syntax errors\n */\nfunction lintRules(context) {\n const {\n readContent,\n syntaxTree,\n updateContent\n } = context;\n\n const lintMessages = [];\n\n const ruleContext = {\n readContent,\n report: message => {\n lintMessages.push(message);\n },\n updateContent\n };\n\n const rules = RULES.map(rule => rule.create(ruleContext));\n\n syntaxTree.iterate({\n enter: ref => {\n for (const rule of rules) {\n rule.enter && rule.enter(ref);\n }\n },\n leave: ref => {\n for (const rule of rules) {\n rule.leave && rule.leave(ref);\n }\n }\n });\n\n return lintMessages;\n}\n\n/**\n * @typedef {import('@lezer/common').Tree} Tree\n * @typedef {import('@codemirror/lint').Diagnostic} LintMessage\n */\n\n/**\n * @typedef {object} LintAllContext\n * @property {Tree} syntaxTree\n * @property {(from: number, to: number) => string} readContent\n * @property {(from: number, to: number, content: string) => void} updateContent\n */\n\n/**\n * Generates lint messages for the given context.\n *\n * @param {LintAllContext} context\n * @returns {LintMessage[]} array of all lint messages\n */\nfunction lintAll(context) {\n\n const lintMessages = [\n ...lintSyntax(context.syntaxTree),\n ...lintRules(context)\n ];\n\n return lintMessages;\n}\n\n/**\n * Create an array of syntax errors for the given expression.\n *\n * @param {String} expression\n * @returns {LintMessage[]} array of syntax errors\n */\nfunction lintExpression(expression) {\n\n const syntaxTree = lezer_feel__WEBPACK_IMPORTED_MODULE_0__.parser.parse(expression);\n\n const lintMessages = lintAll({\n syntaxTree,\n readContent: (from, to) => expression.slice(from, to),\n updateContent: (from, to, content) => {\n\n // not implemented\n }\n });\n\n return lintMessages;\n}\n\n/**\n * CodeMirror extension that provides linting for FEEL expressions.\n *\n * @returns {import('@codemirror/lint').LintSource} CodeMirror linting source\n */\nconst cmFeelLinter = () => editorView => {\n\n // don't lint if the Editor is empty\n if (editorView.state.doc.length === 0) {\n return [];\n }\n\n const tree = (0,_codemirror_language__WEBPACK_IMPORTED_MODULE_1__.syntaxTree)(editorView.state);\n\n const messages = lintAll({\n syntaxTree: tree,\n readContent: (from, to) => editorView.state.sliceDoc(from, to),\n updateContent: (from, to, content) => editorView.dispatch({\n changes: { from, to, insert: content }\n })\n });\n\n return messages.map(message => ({\n ...message,\n source: message.type\n }));\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vZmVlbC1saW50L2Rpc3QvaW5kZXguZXNtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0M7QUFDYzs7QUFFbEQ7QUFDQSxhQUFhLDhCQUE4QjtBQUMzQyxhQUFhLHVDQUF1QztBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsYUFBYSxlQUFlO0FBQzVCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9EQUFvRCxZQUFZO0FBQ2hFLFFBQVE7QUFDUixpREFBaUQsVUFBVSxRQUFRLFlBQVk7QUFDL0U7QUFDQSxRQUFRO0FBQ1I7QUFDQSwwQ0FBMEMseUJBQXlCO0FBQ25FOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjLFVBQVU7QUFDeEIsY0FBYyxzQ0FBc0M7QUFDcEQsY0FBYyxxREFBcUQ7QUFDbkU7O0FBRUE7O0FBRUE7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0MsYUFBYSx1Q0FBdUM7QUFDcEQsYUFBYSxrQ0FBa0M7QUFDL0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsYUFBYSw4QkFBOEI7QUFDM0MsYUFBYSx1Q0FBdUM7QUFDcEQ7O0FBRUE7QUFDQSxhQUFhLFFBQVE7QUFDckIsY0FBYyxNQUFNO0FBQ3BCLGNBQWMsc0NBQXNDO0FBQ3BELGNBQWMscURBQXFEO0FBQ25FOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsZUFBZTtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsZUFBZTtBQUM1QjtBQUNBOztBQUVBLHFCQUFxQiw4Q0FBTTs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVDQUF1QztBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0VBQVU7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vZmVlbC1saW50L2Rpc3QvaW5kZXguZXNtLmpzP2Y5MmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VyIH0gZnJvbSAnbGV6ZXItZmVlbCc7XG5pbXBvcnQgeyBzeW50YXhUcmVlIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZ3VhZ2UnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BsZXplci9jb21tb24nKS5UcmVlfSBUcmVlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAY29kZW1pcnJvci9saW50JykuRGlhZ25vc3RpY30gTGludE1lc3NhZ2VcbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBvZiBzeW50YXggZXJyb3JzIGluIHRoZSBnaXZlbiB0cmVlLlxuICpcbiAqIEBwYXJhbSB7VHJlZX0gc3ludGF4VHJlZVxuICogQHJldHVybnMge0xpbnRNZXNzYWdlW119IGFycmF5IG9mIHN5bnRheCBlcnJvcnNcbiAqL1xuZnVuY3Rpb24gbGludFN5bnRheChzeW50YXhUcmVlKSB7XG5cbiAgY29uc3QgbGludE1lc3NhZ2VzID0gW107XG5cbiAgc3ludGF4VHJlZS5pdGVyYXRlKHtcbiAgICBlbnRlcjogcmVmID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSByZWYubm9kZTtcblxuICAgICAgaWYgKCFub2RlLnR5cGUuaXNFcnJvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xuICAgICAgY29uc3QgbmV4dCA9IGdldE5leHROb2RlKG5vZGUpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBmcm9tOiBub2RlLmZyb20sXG4gICAgICAgIHRvOiBub2RlLnRvLFxuICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgdHlwZTogJ1N5bnRheCBFcnJvcidcbiAgICAgIH07XG5cbiAgICAgIGlmIChub2RlLmZyb20gIT09IG5vZGUudG8pIHtcbiAgICAgICAgbWVzc2FnZS5tZXNzYWdlID0gYFVucmVjb2duaXplZCB0b2tlbiBpbiA8JHtwYXJlbnQubmFtZX0+YDtcbiAgICAgIH0gZWxzZSBpZiAobmV4dCkge1xuICAgICAgICBtZXNzYWdlLm1lc3NhZ2UgPSBgVW5yZWNvZ25pemVkIHRva2VuIDwke25leHQubmFtZX0+IGluIDwke3BhcmVudC5uYW1lfT5gO1xuICAgICAgICBtZXNzYWdlLnRvID0gbmV4dC50bztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IHBhcmVudC5lbnRlclVuZmluaXNoZWROb2Rlc0JlZm9yZShub2RlLnRvKTtcbiAgICAgICAgbWVzc2FnZS5tZXNzYWdlID0gYEluY29tcGxldGUgPCR7IChiZWZvcmUgfHwgcGFyZW50KS5uYW1lIH0+YDtcbiAgICAgIH1cblxuICAgICAgbGludE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGludE1lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0Tm9kZShub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmcgfHwgZ2V0TmV4dE5vZGUobm9kZS5wYXJlbnQpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbnRleHRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHJlcG9ydFxuICogQHByb3BlcnR5IHsoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSA9PiBzdHJpbmd9IHJlYWRDb250ZW50XG4gKiBAcHJvcGVydHkgeyhmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZH0gdXBkYXRlQ29udGVudFxuICovXG5cbmNvbnN0IFJVTEVfTkFNRSA9ICdmaXJzdC1pdGVtJztcblxudmFyIGZpcnN0SXRlbSA9IHtcbiAgY3JlYXRlKC8qKiBAdHlwZSB7Q29udGV4dH0gKi8gY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRlcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUgIT09ICdGaWx0ZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZXh0LnJlYWRDb250ZW50KG5vZGUuZnJvbSwgbm9kZS50byk7XG5cbiAgICAgICAgaWYgKHplcm9JbmRleFBhdHRlcm4oKS50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZnJvbSxcbiAgICAgICAgICAgIHRvXG4gICAgICAgICAgfSA9IG5vZGU7XG5cbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICBtZXNzYWdlOiAnRmlyc3QgaXRlbSBpcyBhY2Nlc3NlZCB2aWEgWzFdJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnd2FybmluZycsXG4gICAgICAgICAgICB0eXBlOiBSVUxFX05BTUUsXG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZml4JyxcbiAgICAgICAgICAgICAgICBhcHBseShfLCBzdGFydCA9IGZyb20sIGVuZCA9IHRvKSB7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0LnVwZGF0ZUNvbnRlbnQoc3RhcnQsIGVuZCwgY29udGVudC5yZXBsYWNlKHplcm9JbmRleFBhdHRlcm4oKSwgJ1sxXScpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHplcm9JbmRleFBhdHRlcm4oKSB7XG4gIHJldHVybiAvXFxbXFxzKjBcXHMqXFxdJC87XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGxlemVyL2NvbW1vbicpLlRyZWV9IFRyZWVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0Bjb2RlbWlycm9yL2xpbnQnKS5EaWFnbm9zdGljfSBMaW50TWVzc2FnZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLkxpbnRBbGxDb250ZXh0fSBMaW50QWxsQ29udGV4dFxuICovXG5cbmNvbnN0IFJVTEVTID0gW1xuICBmaXJzdEl0ZW1cbl07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IG9mIG1lc3NhZ2VzIHJlcG9ydGVkIGZyb20gcnVsZXMgaW4gdGhlIGdpdmVuIHRyZWUuXG4gKlxuICogQHBhcmFtIHtMaW50QWxsQ29udGV4dH0gY29udGV4dFxuICogQHJldHVybnMge0xpbnRNZXNzYWdlW119IGFycmF5IG9mIHN5bnRheCBlcnJvcnNcbiAqL1xuZnVuY3Rpb24gbGludFJ1bGVzKGNvbnRleHQpIHtcbiAgY29uc3Qge1xuICAgIHJlYWRDb250ZW50LFxuICAgIHN5bnRheFRyZWUsXG4gICAgdXBkYXRlQ29udGVudFxuICB9ID0gY29udGV4dDtcblxuICBjb25zdCBsaW50TWVzc2FnZXMgPSBbXTtcblxuICBjb25zdCBydWxlQ29udGV4dCA9IHtcbiAgICByZWFkQ29udGVudCxcbiAgICByZXBvcnQ6IG1lc3NhZ2UgPT4ge1xuICAgICAgbGludE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfSxcbiAgICB1cGRhdGVDb250ZW50XG4gIH07XG5cbiAgY29uc3QgcnVsZXMgPSBSVUxFUy5tYXAocnVsZSA9PiBydWxlLmNyZWF0ZShydWxlQ29udGV4dCkpO1xuXG4gIHN5bnRheFRyZWUuaXRlcmF0ZSh7XG4gICAgZW50ZXI6IHJlZiA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgcnVsZS5lbnRlciAmJiBydWxlLmVudGVyKHJlZik7XG4gICAgICB9XG4gICAgfSxcbiAgICBsZWF2ZTogcmVmID0+IHtcbiAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgICAgICBydWxlLmxlYXZlICYmIHJ1bGUubGVhdmUocmVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsaW50TWVzc2FnZXM7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGxlemVyL2NvbW1vbicpLlRyZWV9IFRyZWVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0Bjb2RlbWlycm9yL2xpbnQnKS5EaWFnbm9zdGljfSBMaW50TWVzc2FnZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTGludEFsbENvbnRleHRcbiAqIEBwcm9wZXJ0eSB7VHJlZX0gc3ludGF4VHJlZVxuICogQHByb3BlcnR5IHsoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSA9PiBzdHJpbmd9IHJlYWRDb250ZW50XG4gKiBAcHJvcGVydHkgeyhmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZH0gdXBkYXRlQ29udGVudFxuICovXG5cbi8qKlxuICogR2VuZXJhdGVzIGxpbnQgbWVzc2FnZXMgZm9yIHRoZSBnaXZlbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7TGludEFsbENvbnRleHR9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtMaW50TWVzc2FnZVtdfSBhcnJheSBvZiBhbGwgbGludCBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBsaW50QWxsKGNvbnRleHQpIHtcblxuICBjb25zdCBsaW50TWVzc2FnZXMgPSBbXG4gICAgLi4ubGludFN5bnRheChjb250ZXh0LnN5bnRheFRyZWUpLFxuICAgIC4uLmxpbnRSdWxlcyhjb250ZXh0KVxuICBdO1xuXG4gIHJldHVybiBsaW50TWVzc2FnZXM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFycmF5IG9mIHN5bnRheCBlcnJvcnMgZm9yIHRoZSBnaXZlbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyB7TGludE1lc3NhZ2VbXX0gYXJyYXkgb2Ygc3ludGF4IGVycm9yc1xuICovXG5mdW5jdGlvbiBsaW50RXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG5cbiAgY29uc3Qgc3ludGF4VHJlZSA9IHBhcnNlci5wYXJzZShleHByZXNzaW9uKTtcblxuICBjb25zdCBsaW50TWVzc2FnZXMgPSBsaW50QWxsKHtcbiAgICBzeW50YXhUcmVlLFxuICAgIHJlYWRDb250ZW50OiAoZnJvbSwgdG8pID0+IGV4cHJlc3Npb24uc2xpY2UoZnJvbSwgdG8pLFxuICAgIHVwZGF0ZUNvbnRlbnQ6IChmcm9tLCB0bywgY29udGVudCkgPT4ge1xuXG4gICAgICAvLyBub3QgaW1wbGVtZW50ZWRcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsaW50TWVzc2FnZXM7XG59XG5cbi8qKlxuICogQ29kZU1pcnJvciBleHRlbnNpb24gdGhhdCBwcm92aWRlcyBsaW50aW5nIGZvciBGRUVMIGV4cHJlc3Npb25zLlxuICpcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0Bjb2RlbWlycm9yL2xpbnQnKS5MaW50U291cmNlfSBDb2RlTWlycm9yIGxpbnRpbmcgc291cmNlXG4gKi9cbmNvbnN0IGNtRmVlbExpbnRlciA9ICgpID0+IGVkaXRvclZpZXcgPT4ge1xuXG4gIC8vIGRvbid0IGxpbnQgaWYgdGhlIEVkaXRvciBpcyBlbXB0eVxuICBpZiAoZWRpdG9yVmlldy5zdGF0ZS5kb2MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgdHJlZSA9IHN5bnRheFRyZWUoZWRpdG9yVmlldy5zdGF0ZSk7XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBsaW50QWxsKHtcbiAgICBzeW50YXhUcmVlOiB0cmVlLFxuICAgIHJlYWRDb250ZW50OiAoZnJvbSwgdG8pID0+IGVkaXRvclZpZXcuc3RhdGUuc2xpY2VEb2MoZnJvbSwgdG8pLFxuICAgIHVwZGF0ZUNvbnRlbnQ6IChmcm9tLCB0bywgY29udGVudCkgPT4gZWRpdG9yVmlldy5kaXNwYXRjaCh7XG4gICAgICBjaGFuZ2VzOiB7IGZyb20sIHRvLCBpbnNlcnQ6IGNvbnRlbnQgfVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBtZXNzYWdlcy5tYXAobWVzc2FnZSA9PiAoe1xuICAgIC4uLm1lc3NhZ2UsXG4gICAgc291cmNlOiBtZXNzYWdlLnR5cGVcbiAgfSkpO1xufTtcblxuZXhwb3J0IHsgY21GZWVsTGludGVyLCBsaW50RXhwcmVzc2lvbiB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/feel-lint/dist/index.esm.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/properties-panel/dist/index.esm.js":
-/*!******************************************************************!*\
- !*** ./node_modules/@bpmn-io/properties-panel/dist/index.esm.js ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ArrowIcon: () => (/* binding */ ArrowIcon),\n/* harmony export */ CheckboxEntry: () => (/* binding */ CheckboxEntry),\n/* harmony export */ CloseIcon: () => (/* binding */ CloseIcon),\n/* harmony export */ CollapsibleEntry: () => (/* binding */ CollapsibleEntry),\n/* harmony export */ CreateIcon: () => (/* binding */ CreateIcon),\n/* harmony export */ DebounceInputModule: () => (/* binding */ index$1),\n/* harmony export */ DeleteIcon: () => (/* binding */ DeleteIcon),\n/* harmony export */ DescriptionContext: () => (/* binding */ DescriptionContext),\n/* harmony export */ DescriptionEntry: () => (/* binding */ Description),\n/* harmony export */ DragIcon: () => (/* binding */ DragIcon),\n/* harmony export */ DropdownButton: () => (/* binding */ DropdownButton),\n/* harmony export */ ErrorsContext: () => (/* binding */ ErrorsContext),\n/* harmony export */ EventContext: () => (/* binding */ EventContext),\n/* harmony export */ ExternalLinkIcon: () => (/* binding */ ExternalLinkIcon),\n/* harmony export */ FeelCheckboxEntry: () => (/* binding */ FeelCheckboxEntry),\n/* harmony export */ FeelEntry: () => (/* binding */ FeelEntry),\n/* harmony export */ FeelIcon: () => (/* binding */ FeelIcon$1),\n/* harmony export */ FeelNumberEntry: () => (/* binding */ FeelNumberEntry),\n/* harmony export */ FeelPopupModule: () => (/* binding */ index),\n/* harmony export */ FeelTemplatingEntry: () => (/* binding */ FeelTemplatingEntry),\n/* harmony export */ FeelTextAreaEntry: () => (/* binding */ FeelTextAreaEntry),\n/* harmony export */ FeelToggleSwitchEntry: () => (/* binding */ FeelToggleSwitchEntry),\n/* harmony export */ Group: () => (/* binding */ Group),\n/* harmony export */ Header: () => (/* binding */ Header),\n/* harmony export */ HeaderButton: () => (/* binding */ HeaderButton),\n/* harmony export */ LaunchIcon: () => (/* binding */ LaunchIcon),\n/* harmony export */ LayoutContext: () => (/* binding */ LayoutContext),\n/* harmony export */ ListEntry: () => (/* binding */ List),\n/* harmony export */ ListGroup: () => (/* binding */ ListGroup),\n/* harmony export */ ListItem: () => (/* binding */ ListItem),\n/* harmony export */ NumberFieldEntry: () => (/* binding */ NumberFieldEntry),\n/* harmony export */ Placeholder: () => (/* binding */ Placeholder),\n/* harmony export */ Popup: () => (/* binding */ Popup),\n/* harmony export */ PopupIcon: () => (/* binding */ PopupIcon),\n/* harmony export */ PropertiesPanel: () => (/* binding */ PropertiesPanel),\n/* harmony export */ PropertiesPanelContext: () => (/* binding */ LayoutContext),\n/* harmony export */ SelectEntry: () => (/* binding */ SelectEntry),\n/* harmony export */ SimpleEntry: () => (/* binding */ Simple),\n/* harmony export */ TemplatingEntry: () => (/* binding */ TemplatingEntry),\n/* harmony export */ TextAreaEntry: () => (/* binding */ TextAreaEntry),\n/* harmony export */ TextFieldEntry: () => (/* binding */ TextfieldEntry),\n/* harmony export */ ToggleSwitchEntry: () => (/* binding */ ToggleSwitchEntry),\n/* harmony export */ TooltipContext: () => (/* binding */ TooltipContext),\n/* harmony export */ TooltipEntry: () => (/* binding */ TooltipWrapper),\n/* harmony export */ isCheckboxEntryEdited: () => (/* binding */ isEdited$5),\n/* harmony export */ isFeelEntryEdited: () => (/* binding */ isEdited$6),\n/* harmony export */ isNumberFieldEntryEdited: () => (/* binding */ isEdited$7),\n/* harmony export */ isSelectEntryEdited: () => (/* binding */ isEdited$3),\n/* harmony export */ isSimpleEntryEdited: () => (/* binding */ isEdited$2),\n/* harmony export */ isTemplatingEntryEdited: () => (/* binding */ isEdited$4),\n/* harmony export */ isTextAreaEntryEdited: () => (/* binding */ isEdited$1),\n/* harmony export */ isTextFieldEntryEdited: () => (/* binding */ isEdited),\n/* harmony export */ isToggleSwitchEntryEdited: () => (/* binding */ isEdited$8),\n/* harmony export */ useDescriptionContext: () => (/* binding */ useDescriptionContext),\n/* harmony export */ useElementVisible: () => (/* binding */ useElementVisible),\n/* harmony export */ useError: () => (/* binding */ useError),\n/* harmony export */ useErrors: () => (/* binding */ useErrors),\n/* harmony export */ useEvent: () => (/* binding */ useEvent),\n/* harmony export */ useKeyFactory: () => (/* binding */ useKeyFactory),\n/* harmony export */ useLayoutState: () => (/* binding */ useLayoutState),\n/* harmony export */ usePrevious: () => (/* binding */ usePrevious),\n/* harmony export */ useShowEntryEvent: () => (/* binding */ useShowEntryEvent),\n/* harmony export */ useStaticCallback: () => (/* binding */ useStaticCallback),\n/* harmony export */ useStickyIntersectionObserver: () => (/* binding */ useStickyIntersectionObserver),\n/* harmony export */ useTooltipContext: () => (/* binding */ useTooltipContext)\n/* harmony export */ });\n/* harmony import */ var _preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../preact/hooks */ \"./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _preact_compat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../preact/compat */ \"./node_modules/@bpmn-io/properties-panel/preact/compat/dist/compat.module.js\");\n/* harmony import */ var _preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../preact/jsx-runtime */ \"./node_modules/@bpmn-io/properties-panel/preact/jsx-runtime/dist/jsxRuntime.module.js\");\n/* harmony import */ var _preact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../preact */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var feelers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! feelers */ \"./node_modules/feelers/dist/index.mjs\");\n/* harmony import */ var _bpmn_io_feel_editor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @bpmn-io/feel-editor */ \"./node_modules/@bpmn-io/feel-editor/dist/index.es.js\");\n/* harmony import */ var _codemirror_view__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @codemirror/view */ \"./node_modules/@codemirror/view/dist/index.js\");\n/* harmony import */ var focus_trap__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! focus-trap */ \"./node_modules/focus-trap/dist/focus-trap.esm.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nvar ArrowIcon = function ArrowIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"svg\", {\n ...props,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fillRule: \"evenodd\",\n d: \"m11.657 8-4.95 4.95a1 1 0 0 1-1.414-1.414L8.828 8 5.293 4.464A1 1 0 1 1 6.707 3.05L11.657 8Z\"\n })\n });\n};\nArrowIcon.defaultProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"16\",\n height: \"16\"\n};\nvar CloseIcon = function CloseIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"svg\", {\n ...props,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fillRule: \"evenodd\",\n d: \"m12 4.7-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8 12 4.7Z\",\n fill: \"currentColor\"\n })\n });\n};\nCloseIcon.defaultProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"16\",\n height: \"16\"\n};\nvar CreateIcon = function CreateIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"svg\", {\n ...props,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9 13V9h4a1 1 0 0 0 0-2H9V3a1 1 0 1 0-2 0v4H3a1 1 0 1 0 0 2h4v4a1 1 0 0 0 2 0Z\"\n })\n });\n};\nCreateIcon.defaultProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"16\",\n height: \"16\"\n};\nvar DeleteIcon = function DeleteIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"svg\", {\n ...props,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 6v7c0 1.1-.4 1.55-1.5 1.55h-5C4.4 14.55 4 14.1 4 13V6h8Zm-1.5 1.5h-5v4.3c0 .66.5 1.2 1.111 1.2H9.39c.611 0 1.111-.54 1.111-1.2V7.5ZM13 3h-2l-1-1H6L5 3H3v1.5h10V3Z\"\n })\n });\n};\nDeleteIcon.defaultProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"16\",\n height: \"16\"\n};\nvar DragIcon = function DragIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"svg\", {\n ...props,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fill: \"#fff\",\n style: {\n mixBlendMode: \"multiply\"\n },\n d: \"M0 0h16v16H0z\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fill: \"#fff\",\n style: {\n mixBlendMode: \"multiply\"\n },\n d: \"M0 0h16v16H0z\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n d: \"M7 3H5v2h2V3zm4 0H9v2h2V3zM7 7H5v2h2V7zm4 0H9v2h2V7zm-4 4H5v2h2v-2zm4 0H9v2h2v-2z\",\n fill: \"#161616\"\n })]\n });\n};\nDragIcon.defaultProps = {\n width: \"16\",\n height: \"16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar ExternalLinkIcon = function ExternalLinkIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"svg\", {\n ...props,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.637 12.637v-4.72h1.362v4.721c0 .36-.137.676-.411.95-.275.275-.591.412-.95.412H3.362c-.38 0-.703-.132-.967-.396A1.315 1.315 0 0 1 2 12.638V3.362c0-.38.132-.703.396-.967S2.982 2 3.363 2h4.553v1.363H3.363v9.274h9.274ZM14 2H9.28l-.001 1.362h2.408L5.065 9.984l.95.95 6.622-6.622v2.409H14V2Z\",\n fill: \"currentcolor\"\n })\n });\n};\nExternalLinkIcon.defaultProps = {\n width: \"16\",\n height: \"16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar FeelIcon$1 = function FeelIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"svg\", {\n ...props,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n d: \"M3.617 11.99c-.137.684-.392 1.19-.765 1.518-.362.328-.882.492-1.558.492H0l.309-1.579h1.264l1.515-7.64h-.912l.309-1.579h.911l.236-1.191c.137-.685.387-1.192.75-1.52C4.753.164 5.277 0 5.953 0h1.294L6.94 1.579H5.675l-.323 1.623h1.264l-.309 1.579H5.043l-1.426 7.208ZM5.605 11.021l3.029-4.155L7.28 3.202h2.073l.706 2.547h.176l1.691-2.547H14l-3.014 4.051 1.338 3.768H10.25l-.706-2.606H9.37L7.678 11.02H5.605Z\",\n fill: \"currentcolor\"\n })\n });\n};\nFeelIcon$1.defaultProps = {\n width: \"14\",\n height: \"14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nvar LaunchIcon = function LaunchIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"svg\", {\n ...props,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n d: \"M26 28H6a2.003 2.003 0 0 1-2-2V6a2.003 2.003 0 0 1 2-2h10v2H6v20h20V16h2v10a2.003 2.003 0 0 1-2 2Z\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n d: \"M20 2v2h6.586L18 12.586 19.414 14 28 5.414V12h2V2H20z\"\n })]\n });\n};\nLaunchIcon.defaultProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\"\n};\nvar PopupIcon = function PopupIcon(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"svg\", {\n ...props,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fill: \"currentColor\",\n d: \"M28 4H10a2.006 2.006 0 0 0-2 2v14a2.006 2.006 0 0 0 2 2h18a2.006 2.006 0 0 0 2-2V6a2.006 2.006 0 0 0-2-2Zm0 16H10V6h18Z\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"path\", {\n fill: \"currentColor\",\n d: \"M18 26H4V16h2v-2H4a2.006 2.006 0 0 0-2 2v10a2.006 2.006 0 0 0 2 2h14a2.006 2.006 0 0 0 2-2v-2h-2Z\"\n })]\n });\n};\nPopupIcon.defaultProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 32 32\"\n};\n\nfunction Header(props) {\n const {\n element,\n headerProvider\n } = props;\n const {\n getElementIcon,\n getDocumentationRef,\n getElementLabel,\n getTypeLabel\n } = headerProvider;\n const label = getElementLabel(element);\n const type = getTypeLabel(element);\n const documentationRef = getDocumentationRef && getDocumentationRef(element);\n const ElementIcon = getElementIcon(element);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-header\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-header-icon\",\n children: ElementIcon && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ElementIcon, {\n width: \"32\",\n height: \"32\",\n viewBox: \"0 0 32 32\"\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-header-labels\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: type,\n class: \"bio-properties-panel-header-type\",\n children: type\n }), label ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: label,\n class: \"bio-properties-panel-header-label\",\n children: label\n }) : null]\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-header-actions\",\n children: documentationRef ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"a\", {\n rel: \"noreferrer\",\n class: \"bio-properties-panel-header-link\",\n href: documentationRef,\n title: \"Open documentation\",\n target: \"_blank\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ExternalLinkIcon, {})\n }) : null\n })]\n });\n}\n\nconst DescriptionContext = (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createContext)({\n description: {},\n getDescriptionForId: () => {}\n});\n\nconst ErrorsContext = (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createContext)({\n errors: {}\n});\n\n/**\r\n * @typedef {Function}
callback\r\n *\r\n * @example\r\n *\r\n * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {\r\n * // ...\r\n * });\r\n *\r\n * @param {Object} context\r\n * @param {boolean} [context.focus]\r\n *\r\n * @returns void\r\n */\n\nconst EventContext = (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createContext)({\n eventBus: null\n});\n\nconst LayoutContext = (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createContext)({\n layout: {},\n setLayout: () => {},\n getLayoutForKey: () => {},\n setLayoutForKey: () => {}\n});\n\nconst TooltipContext = (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createContext)({\n tooltip: {},\n getTooltipForId: () => {}\n});\n\n/**\r\n * Accesses the global TooltipContext and returns a tooltip for a given id and element.\r\n *\r\n * @example\r\n * ```jsx\r\n * function TextField(props) {\r\n * const tooltip = useTooltipContext('input1', element);\r\n * }\r\n * ```\r\n *\r\n * @param {string} id\r\n * @param {object} element\r\n *\r\n * @returns {string}\r\n */\nfunction useTooltipContext(id, element) {\n const {\n getTooltipForId\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(TooltipContext);\n return getTooltipForId(id, element);\n}\n\nfunction TooltipWrapper(props) {\n const {\n forId,\n element\n } = props;\n const contextDescription = useTooltipContext(forId, element);\n const value = props.value || contextDescription;\n if (!value) {\n return props.children;\n }\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Tooltip, {\n ...props,\n value: value,\n forId: prefixId$9(forId)\n });\n}\nfunction Tooltip(props) {\n const {\n forId,\n value,\n parent,\n direction = 'right',\n position\n } = props;\n const [visible, setShow] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [focusedViaKeyboard, setFocusedViaKeyboard] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n let timeout = null;\n const wrapperRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const tooltipRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const showTooltip = async event => {\n const show = () => setShow(true);\n if (!visible && !timeout) {\n if (event instanceof MouseEvent) {\n timeout = setTimeout(show, 200);\n } else {\n show();\n setFocusedViaKeyboard(true);\n }\n }\n };\n const hideTooltip = () => {\n setShow(false);\n setFocusedViaKeyboard(false);\n };\n const hideTooltipViaEscape = e => {\n e.code === 'Escape' && hideTooltip();\n };\n const isTooltipHovered = ({\n x,\n y\n }) => {\n const tooltip = tooltipRef.current;\n const wrapper = wrapperRef.current;\n return tooltip && (inBounds(x, y, wrapper.getBoundingClientRect()) || inBounds(x, y, tooltip.getBoundingClientRect()));\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const {\n current\n } = wrapperRef;\n if (!current) {\n return;\n }\n const hideHoveredTooltip = e => {\n const isFocused = document.activeElement === wrapperRef.current || document.activeElement.closest('.bio-properties-panel-tooltip');\n if (visible && !isTooltipHovered({\n x: e.x,\n y: e.y\n }) && !(isFocused && focusedViaKeyboard)) {\n hideTooltip();\n }\n };\n const hideFocusedTooltip = e => {\n const {\n relatedTarget\n } = e;\n const isTooltipChild = el => !!el.closest('.bio-properties-panel-tooltip');\n if (visible && !isHovered(wrapperRef.current) && relatedTarget && !isTooltipChild(relatedTarget)) {\n hideTooltip();\n }\n };\n document.addEventListener('wheel', hideHoveredTooltip);\n document.addEventListener('focusout', hideFocusedTooltip);\n document.addEventListener('mousemove', hideHoveredTooltip);\n return () => {\n document.removeEventListener('wheel', hideHoveredTooltip);\n document.removeEventListener('mousemove', hideHoveredTooltip);\n document.removeEventListener('focusout', hideFocusedTooltip);\n };\n }, [wrapperRef.current, visible, focusedViaKeyboard]);\n const renderTooltip = () => {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: `bio-properties-panel-tooltip ${direction}`,\n role: \"tooltip\",\n id: \"bio-properties-panel-tooltip\",\n \"aria-labelledby\": forId,\n style: position || getTooltipPosition(wrapperRef.current),\n ref: tooltipRef,\n onClick: e => e.stopPropagation(),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-tooltip-content\",\n children: value\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-tooltip-arrow\"\n })]\n });\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-tooltip-wrapper\",\n tabIndex: \"0\",\n ref: wrapperRef,\n onMouseEnter: showTooltip,\n onMouseLeave: () => {\n clearTimeout(timeout);\n timeout = null;\n },\n onFocus: showTooltip,\n onKeyDown: hideTooltipViaEscape,\n children: [props.children, visible ? parent ? (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.createPortal)(renderTooltip(), parent.current) : renderTooltip() : null]\n });\n}\n\n// helper\nfunction inBounds(x, y, bounds) {\n const {\n top,\n right,\n bottom,\n left\n } = bounds;\n return x >= left && x <= right && y >= top && y <= bottom;\n}\nfunction getTooltipPosition(refElement) {\n const refPosition = refElement.getBoundingClientRect();\n const right = `calc(100% - ${refPosition.x}px)`;\n const top = `${refPosition.top - 10}px`;\n return `right: ${right}; top: ${top};`;\n}\nfunction isHovered(element) {\n return element.matches(':hover');\n}\nfunction prefixId$9(id) {\n return `bio-properties-panel-${id}`;\n}\n\n/**\r\n * Accesses the global DescriptionContext and returns a description for a given id and element.\r\n *\r\n * @example\r\n * ```jsx\r\n * function TextField(props) {\r\n * const description = useDescriptionContext('input1', element);\r\n * }\r\n * ```\r\n *\r\n * @param {string} id\r\n * @param {object} element\r\n *\r\n * @returns {string}\r\n */\nfunction useDescriptionContext(id, element) {\n const {\n getDescriptionForId\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(DescriptionContext);\n return getDescriptionForId(id, element);\n}\n\nfunction useError(id) {\n const {\n errors\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(ErrorsContext);\n return errors[id];\n}\nfunction useErrors() {\n const {\n errors\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(ErrorsContext);\n return errors;\n}\n\n/**\r\n * Subscribe to an event immediately. Update subscription after inputs changed.\r\n *\r\n * @param {string} event\r\n * @param {Function} callback\r\n */\nfunction useEvent(event, callback, eventBus) {\n const eventContext = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(EventContext);\n if (!eventBus) {\n ({\n eventBus\n } = eventContext);\n }\n const didMount = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n\n // (1) subscribe immediately\n if (eventBus && !didMount.current) {\n eventBus.on(event, callback);\n }\n\n // (2) update subscription after inputs changed\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (eventBus && didMount.current) {\n eventBus.on(event, callback);\n }\n didMount.current = true;\n return () => {\n if (eventBus) {\n eventBus.off(event, callback);\n }\n };\n }, [callback, event, eventBus]);\n}\n\nconst KEY_LENGTH = 6;\n\n/**\r\n * Create a persistent key factory for plain objects without id.\r\n *\r\n * @example\r\n * ```jsx\r\n * function List({ objects }) {\r\n * const getKey = useKeyFactory();\r\n * return ({\r\n * objects.map(obj => {\r\n * const key = getKey(obj);\r\n * return obj.name \r\n * })\r\n * } );\r\n * }\r\n * ```\r\n *\r\n * @param {any[]} dependencies\r\n * @returns {(element: object) => string}\r\n */\nfunction useKeyFactory(dependencies = []) {\n const map = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => new Map(), dependencies);\n const getKey = el => {\n let key = map.get(el);\n if (!key) {\n key = Math.random().toString().slice(-KEY_LENGTH);\n map.set(el, key);\n }\n return key;\n };\n return getKey;\n}\n\n/**\r\n * Creates a state that persists in the global LayoutContext.\r\n *\r\n * @example\r\n * ```jsx\r\n * function Group(props) {\r\n * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);\r\n * }\r\n * ```\r\n *\r\n * @param {(string|number)[]} path\r\n * @param {any} [defaultValue]\r\n *\r\n * @returns {[ any, Function ]}\r\n */\nfunction useLayoutState(path, defaultValue) {\n const {\n getLayoutForKey,\n setLayoutForKey\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(LayoutContext);\n const layoutForKey = getLayoutForKey(path, defaultValue);\n const setState = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newValue => {\n setLayoutForKey(path, newValue);\n }, [setLayoutForKey]);\n return [layoutForKey, setState];\n}\n\n/**\r\n * @pinussilvestrus: we need to introduce our own hook to persist the previous\r\n * state on updates.\r\n *\r\n * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\r\n */\n\nfunction usePrevious(value) {\n const ref = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\n/**\r\n * Subscribe to `propertiesPanel.showEntry`.\r\n *\r\n * @param {string} id\r\n *\r\n * @returns {import('preact').Ref}\r\n */\nfunction useShowEntryEvent(id) {\n const {\n onShow\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(LayoutContext);\n const ref = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const focus = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const onShowEntry = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(event => {\n if (event.id === id) {\n onShow();\n if (!focus.current) {\n focus.current = true;\n }\n }\n }, [id]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (focus.current && ref.current) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(ref.current.focus)) {\n ref.current.focus();\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(ref.current.select)) {\n ref.current.select();\n }\n focus.current = false;\n }\n });\n useEvent('propertiesPanel.showEntry', onShowEntry);\n return ref;\n}\n\n/**\r\n * @callback setSticky\r\n * @param {boolean} value\r\n */\n\n/**\r\n * Use IntersectionObserver to identify when DOM element is in sticky mode.\r\n * If sticky is observered setSticky(true) will be called.\r\n * If sticky mode is left, setSticky(false) will be called.\r\n *\r\n *\r\n * @param {Object} ref\r\n * @param {string} scrollContainerSelector\r\n * @param {setSticky} setSticky\r\n */\nfunction useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {\n const [scrollContainer, setScrollContainer] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)((0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(scrollContainerSelector));\n const updateScrollContainer = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const newScrollContainer = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(scrollContainerSelector);\n if (newScrollContainer !== scrollContainer) {\n setScrollContainer(newScrollContainer);\n }\n }, [scrollContainerSelector, scrollContainer]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n updateScrollContainer();\n }, [updateScrollContainer]);\n useEvent('propertiesPanel.attach', updateScrollContainer);\n useEvent('propertiesPanel.detach', updateScrollContainer);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const Observer = IntersectionObserver;\n\n // return early if IntersectionObserver is not available\n if (!Observer) {\n return;\n }\n\n // TODO(@barmac): test this\n if (!ref.current || !scrollContainer) {\n return;\n }\n const observer = new Observer(entries => {\n // scroll container is unmounted, do not update sticky state\n if (scrollContainer.scrollHeight === 0) {\n return;\n }\n entries.forEach(entry => {\n if (entry.intersectionRatio < 1) {\n setSticky(true);\n } else if (entry.intersectionRatio === 1) {\n setSticky(false);\n }\n });\n }, {\n root: scrollContainer,\n rootMargin: '0px 0px 999999% 0px',\n // Use bottom margin to avoid stickyness when scrolling out to bottom\n threshold: [1]\n });\n observer.observe(ref.current);\n\n // Unobserve if unmounted\n return () => {\n observer.unobserve(ref.current);\n };\n }, [ref.current, scrollContainer, setSticky]);\n}\n\n/**\r\n * Creates a static function reference with changing body.\r\n * This is necessary when external libraries require a callback function\r\n * that has references to state variables.\r\n *\r\n * Usage:\r\n * const callback = useStaticCallback((val) => {val === currentState});\r\n *\r\n * The `callback` reference is static and can be safely used in external\r\n * libraries or as a prop that does not cause rerendering of children.\r\n *\r\n * @param {Function} callback function with changing reference\r\n * @returns {Function} static function reference\r\n */\nfunction useStaticCallback(callback) {\n const callbackRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(callback);\n callbackRef.current = callback;\n return (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((...args) => callbackRef.current(...args), []);\n}\n\nfunction useElementVisible(element) {\n const [visible, setVisible] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(!!element && !!element.clientHeight);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n if (!element) return;\n const resizeObserver = new ResizeObserver(([entry]) => {\n requestAnimationFrame(() => {\n const newVisible = !!entry.contentRect.height;\n if (newVisible !== visible) {\n setVisible(newVisible);\n }\n });\n });\n resizeObserver.observe(element);\n return () => resizeObserver.disconnect();\n }, [element, visible]);\n return visible;\n}\n\nfunction Group(props) {\n const {\n element,\n entries = [],\n id,\n label,\n shouldOpen = false\n } = props;\n const groupRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [open, setOpen] = useLayoutState(['groups', id, 'open'], shouldOpen);\n const onShow = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => setOpen(true), [setOpen]);\n const toggleOpen = () => setOpen(!open);\n const [edited, setEdited] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [sticky, setSticky] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n // set edited state depending on all entries\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // TODO(@barmac): replace with CSS when `:has()` is supported in all major browsers, or rewrite as in https://github.com/camunda/camunda-modeler/issues/3815#issuecomment-1733038161\n const scheduled = requestAnimationFrame(() => {\n const hasOneEditedEntry = entries.find(entry => {\n const {\n id,\n isEdited\n } = entry;\n const entryNode = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(`[data-entry-id=\"${id}\"]`);\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(isEdited) || !entryNode) {\n return false;\n }\n const inputNode = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)('.bio-properties-panel-input', entryNode);\n return isEdited(inputNode);\n });\n setEdited(hasOneEditedEntry);\n });\n return () => cancelAnimationFrame(scheduled);\n }, [entries, setEdited]);\n\n // set error state depending on all entries\n const allErrors = useErrors();\n const hasErrors = entries.some(entry => allErrors[entry.id]);\n\n // set css class when group is sticky to top\n useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n const propertiesPanelContext = {\n ...(0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(LayoutContext),\n onShow\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-group\",\n \"data-group-id\": 'group-' + id,\n ref: groupRef,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-group-header', edited ? '' : 'empty', open ? 'open' : '', sticky && open ? 'sticky' : ''),\n onClick: toggleOpen,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: props.tooltip ? null : label,\n \"data-title\": label,\n class: \"bio-properties-panel-group-header-title\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: props.tooltip,\n forId: 'group-' + id,\n element: element,\n parent: groupRef,\n children: label\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-group-header-buttons\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(DataMarker, {\n edited: edited,\n hasErrors: hasErrors\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: \"Toggle section\",\n class: \"bio-properties-panel-group-header-button bio-properties-panel-arrow\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ArrowIcon, {\n class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n })\n })]\n })]\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-group-entries', open ? 'open' : ''),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(LayoutContext.Provider, {\n value: propertiesPanelContext,\n children: entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n return (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createElement)(Component, {\n ...entry,\n element: element,\n key: id\n });\n })\n })\n })]\n });\n}\nfunction DataMarker(props) {\n const {\n edited,\n hasErrors\n } = props;\n if (hasErrors) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: \"Section contains an error\",\n class: \"bio-properties-panel-dot bio-properties-panel-dot--error\"\n });\n }\n if (edited) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: \"Section contains data\",\n class: \"bio-properties-panel-dot\"\n });\n }\n return null;\n}\n\n/**\r\n * @typedef { {\r\n * text: (element: object) => string,\r\n * icon?: (element: Object) => import('preact').Component\r\n * } } PlaceholderDefinition\r\n *\r\n * @param { PlaceholderDefinition } props\r\n */\nfunction Placeholder(props) {\n const {\n text,\n icon: Icon\n } = props;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel open\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"section\", {\n class: \"bio-properties-panel-placeholder\",\n children: [Icon && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Icon, {\n class: \"bio-properties-panel-placeholder-icon\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"p\", {\n class: \"bio-properties-panel-placeholder-text\",\n children: text\n })]\n })\n });\n}\n\nfunction Description(props) {\n const {\n element,\n forId,\n value\n } = props;\n const contextDescription = useDescriptionContext(forId, element);\n const description = value || contextDescription;\n if (description) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-description\",\n children: description\n });\n }\n}\n\nconst noop$6 = () => {};\n\n/**\r\n * Buffer `.focus()` calls while the editor is not initialized.\r\n * Set Focus inside when the editor is ready.\r\n */\nconst useBufferedFocus$1 = function (editor, ref) {\n const [buffer, setBuffer] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);\n ref.current = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n focus: offset => {\n if (editor) {\n editor.focus(offset);\n } else {\n if (typeof offset === 'undefined') {\n offset = Infinity;\n }\n setBuffer(offset);\n }\n }\n }), [editor]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof buffer !== 'undefined' && editor) {\n editor.focus(buffer);\n setBuffer(false);\n }\n }, [editor, buffer]);\n};\nconst CodeEditor$1 = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n onInput,\n disabled,\n tooltipContainer,\n enableGutters,\n value,\n onLint = noop$6,\n onPopupOpen = noop$6,\n popupOpen,\n contentAttributes = {},\n hostLanguage = null,\n singleLine = false\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const [editor, setEditor] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)();\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value || '');\n useBufferedFocus$1(editor, ref);\n const handleInput = useStaticCallback(newValue => {\n onInput(newValue);\n setLocalValue(newValue);\n });\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let editor;\n editor = new feelers__WEBPACK_IMPORTED_MODULE_5__.FeelersEditor({\n container: inputRef.current,\n onChange: handleInput,\n value: localValue,\n onLint,\n contentAttributes,\n tooltipContainer,\n enableGutters,\n hostLanguage,\n singleLine,\n lineWrap: true\n });\n setEditor(editor);\n return () => {\n onLint([]);\n inputRef.current.innerHTML = '';\n setEditor(null);\n };\n }, []);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!editor) {\n return;\n }\n if (value === localValue) {\n return;\n }\n editor.setValue(value);\n setLocalValue(value);\n }, [value]);\n const handleClick = () => {\n ref.current.focus();\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-feelers-editor-container', popupOpen ? 'popupOpen' : null),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-feelers-editor__open-popup-placeholder\",\n children: \"Opened in editor\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n name: props.name,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-feelers-editor bio-properties-panel-input', localValue ? 'edited' : null, disabled ? 'disabled' : null),\n ref: inputRef,\n onClick: handleClick\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: \"Open pop-up editor\",\n class: \"bio-properties-panel-open-feel-popup\",\n onClick: () => onPopupOpen('feelers'),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(PopupIcon, {})\n })]\n });\n});\n\nconst noop$5 = () => {};\n\n/**\r\n * Buffer `.focus()` calls while the editor is not initialized.\r\n * Set Focus inside when the editor is ready.\r\n */\nconst useBufferedFocus = function (editor, ref) {\n const [buffer, setBuffer] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);\n ref.current = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n focus: offset => {\n if (editor) {\n editor.focus(offset);\n } else {\n if (typeof offset === 'undefined') {\n offset = Infinity;\n }\n setBuffer(offset);\n }\n }\n }), [editor]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof buffer !== 'undefined' && editor) {\n editor.focus(buffer);\n setBuffer(false);\n }\n }, [editor, buffer]);\n};\nconst CodeEditor = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n contentAttributes,\n enableGutters,\n value,\n onInput,\n onFeelToggle = noop$5,\n onLint = noop$5,\n onPopupOpen = noop$5,\n placeholder,\n popupOpen,\n disabled,\n tooltipContainer,\n variables\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const [editor, setEditor] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)();\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value || '');\n useBufferedFocus(editor, ref);\n const handleInput = useStaticCallback(newValue => {\n onInput(newValue);\n setLocalValue(newValue);\n });\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n let editor;\n\n /* Trigger FEEL toggle when\r\n *\r\n * - `backspace` is pressed\r\n * - AND the cursor is at the beginning of the input\r\n */\n const onKeyDown = e => {\n if (e.key !== 'Backspace' || !editor) {\n return;\n }\n const selection = editor.getSelection();\n const range = selection.ranges[selection.mainIndex];\n if (range.from === 0 && range.to === 0) {\n onFeelToggle();\n }\n };\n editor = new _bpmn_io_feel_editor__WEBPACK_IMPORTED_MODULE_6__[\"default\"]({\n container: inputRef.current,\n onChange: handleInput,\n onKeyDown: onKeyDown,\n onLint: onLint,\n placeholder: placeholder,\n tooltipContainer: tooltipContainer,\n value: localValue,\n variables: variables,\n extensions: [...(enableGutters ? [(0,_codemirror_view__WEBPACK_IMPORTED_MODULE_9__.lineNumbers)()] : []), _codemirror_view__WEBPACK_IMPORTED_MODULE_9__.EditorView.lineWrapping],\n contentAttributes\n });\n setEditor(editor);\n return () => {\n onLint([]);\n inputRef.current.innerHTML = '';\n setEditor(null);\n };\n }, []);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!editor) {\n return;\n }\n if (value === localValue) {\n return;\n }\n editor.setValue(value);\n setLocalValue(value);\n }, [value]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!editor) {\n return;\n }\n editor.setVariables(variables);\n }, [variables]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!editor) {\n return;\n }\n editor.setPlaceholder(placeholder);\n }, [placeholder]);\n const handleClick = () => {\n ref.current.focus();\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-feel-editor-container', disabled ? 'disabled' : null, popupOpen ? 'popupOpen' : null),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-feel-editor__open-popup-placeholder\",\n children: \"Opened in editor\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n name: props.name,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-input', localValue ? 'edited' : null),\n ref: inputRef,\n onClick: handleClick\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: \"Open pop-up editor\",\n class: \"bio-properties-panel-open-feel-popup\",\n onClick: () => onPopupOpen(),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(PopupIcon, {})\n })]\n });\n});\n\nfunction FeelIndicator(props) {\n const {\n active\n } = props;\n if (!active) {\n return null;\n }\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"span\", {\n class: \"bio-properties-panel-feel-indicator\",\n children: \"=\"\n });\n}\n\nconst noop$4 = () => {};\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.label\r\n * @param {String} props.feel\r\n */\nfunction FeelIcon(props) {\n const {\n feel = false,\n active,\n disabled = false,\n onClick = noop$4\n } = props;\n const feelRequiredLabel = 'FEEL expression is mandatory';\n const feelOptionalLabel = `Click to ${active ? 'remove' : 'set a'} dynamic value with FEEL expression`;\n const handleClick = e => {\n onClick(e);\n\n // when pointer event was created from keyboard, keep focus on button\n if (!e.pointerType) {\n e.stopPropagation();\n }\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-feel-icon', active ? 'active' : null, feel === 'required' ? 'required' : 'optional'),\n onClick: handleClick,\n disabled: feel === 'required' || disabled,\n title: feel === 'required' ? feelRequiredLabel : feelOptionalLabel,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelIcon$1, {})\n });\n}\n\nconst FeelPopupContext = (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createContext)({\n open: () => {},\n close: () => {},\n source: null\n});\n\n/**\r\n * Add a dragger that calls back the passed function with\r\n * { event, delta } on drag.\r\n *\r\n * @example\r\n *\r\n * function dragMove(event, delta) {\r\n * // we are dragging (!!)\r\n * }\r\n *\r\n * domElement.addEventListener('dragstart', dragger(dragMove));\r\n *\r\n * @param {Function} fn\r\n * @param {Element} [dragPreview]\r\n *\r\n * @return {Function} drag start callback function\r\n */\nfunction createDragger(fn, dragPreview) {\n let self;\n let startX, startY;\n\n /** drag start */\n function onDragStart(event) {\n self = this;\n startX = event.clientX;\n startY = event.clientY;\n\n // (1) prevent preview image\n if (event.dataTransfer) {\n event.dataTransfer.setDragImage(dragPreview || emptyCanvas(), 0, 0);\n }\n\n // (2) setup drag listeners\n\n // attach drag + cleanup event\n // we need to do this to make sure we track cursor\n // movements before we reach other drag event handlers,\n // e.g. in child containers.\n document.addEventListener('dragover', onDrag, true);\n document.addEventListener('dragenter', preventDefault, true);\n document.addEventListener('dragend', onEnd);\n document.addEventListener('drop', preventDefault);\n }\n function onDrag(event) {\n const delta = {\n x: event.clientX - startX,\n y: event.clientY - startY\n };\n\n // call provided fn with event, delta\n return fn.call(self, event, delta);\n }\n function onEnd() {\n document.removeEventListener('dragover', onDrag, true);\n document.removeEventListener('dragenter', preventDefault, true);\n document.removeEventListener('dragend', onEnd);\n document.removeEventListener('drop', preventDefault);\n }\n return onDragStart;\n}\nfunction preventDefault(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction emptyCanvas() {\n return (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.domify)(' ');\n}\n\nconst noop$3 = () => {};\n\n/**\r\n * A generic popup component.\r\n *\r\n * @param {Object} props\r\n * @param {HTMLElement} [props.container]\r\n * @param {string} [props.className]\r\n * @param {boolean} [props.delayInitialFocus]\r\n * @param {{x: number, y: number}} [props.position]\r\n * @param {number} [props.width]\r\n * @param {number} [props.height]\r\n * @param {Function} props.onClose\r\n * @param {Function} [props.onPostActivate]\r\n * @param {Function} [props.onPostDeactivate]\r\n * @param {boolean} [props.returnFocus]\r\n * @param {boolean} [props.closeOnEscape]\r\n * @param {string} props.title\r\n * @param {Ref} [ref]\r\n */\nfunction PopupComponent(props, globalRef) {\n const {\n container,\n className,\n delayInitialFocus,\n position,\n width,\n height,\n onClose,\n onPostActivate = noop$3,\n onPostDeactivate = noop$3,\n returnFocus = true,\n closeOnEscape = true,\n title\n } = props;\n const focusTrapRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const localRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const popupRef = globalRef || localRef;\n const containerNode = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => getContainerNode(container), [container]);\n const handleKeydown = event => {\n // do not allow keyboard events to bubble\n event.stopPropagation();\n if (closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n // re-activate focus trap on focus\n const handleFocus = () => {\n if (focusTrapRef.current) {\n focusTrapRef.current.activate();\n }\n };\n let style = {};\n if (position) {\n style = {\n ...style,\n top: position.top + 'px',\n left: position.left + 'px'\n };\n }\n if (width) {\n style.width = width + 'px';\n }\n if (height) {\n style.height = height + 'px';\n }\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (popupRef.current) {\n popupRef.current.addEventListener('focusin', handleFocus);\n }\n return () => {\n popupRef.current.removeEventListener('focusin', handleFocus);\n };\n }, [popupRef]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (popupRef.current) {\n focusTrapRef.current = focus_trap__WEBPACK_IMPORTED_MODULE_10__.createFocusTrap(popupRef.current, {\n clickOutsideDeactivates: true,\n delayInitialFocus,\n fallbackFocus: popupRef.current,\n onPostActivate,\n onPostDeactivate,\n returnFocusOnDeactivate: returnFocus\n });\n focusTrapRef.current.activate();\n }\n return () => focusTrapRef.current && focusTrapRef.current.deactivate();\n }, [popupRef]);\n useEvent('propertiesPanel.detach', onClose);\n return (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.createPortal)((0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n \"aria-label\": title,\n tabIndex: -1,\n ref: popupRef,\n onKeyDown: handleKeydown,\n role: \"dialog\",\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-popup', className),\n style: style,\n children: props.children\n }), containerNode || document.body);\n}\nconst Popup = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)(PopupComponent);\nPopup.Title = Title;\nPopup.Body = Body;\nPopup.Footer = Footer;\nfunction Title(props) {\n const {\n children,\n className,\n draggable,\n emit = () => {},\n title,\n showCloseButton = false,\n closeButtonTooltip = 'Close popup',\n onClose,\n ...rest\n } = props;\n\n // we can't use state as we need to\n // manipulate this inside dragging events\n const context = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)({\n startPosition: null,\n newPosition: null\n });\n const dragPreviewRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const titleRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const onMove = (event, delta) => {\n cancel(event);\n const {\n x: dx,\n y: dy\n } = delta;\n const newPosition = {\n x: context.current.startPosition.x + dx,\n y: context.current.startPosition.y + dy\n };\n const popupParent = getPopupParent(titleRef.current);\n popupParent.style.top = newPosition.y + 'px';\n popupParent.style.left = newPosition.x + 'px';\n\n // notify interested parties\n emit('dragover', {\n newPosition,\n delta\n });\n };\n const onMoveStart = event => {\n // initialize drag handler\n const onDragStart = createDragger(onMove, dragPreviewRef.current);\n onDragStart(event);\n event.stopPropagation();\n const popupParent = getPopupParent(titleRef.current);\n const bounds = popupParent.getBoundingClientRect();\n context.current.startPosition = {\n x: bounds.left,\n y: bounds.top\n };\n\n // notify interested parties\n emit('dragstart');\n };\n const onMoveEnd = () => {\n context.current.newPosition = null;\n\n // notify interested parties\n emit('dragend');\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-popup__header', draggable && 'draggable', className),\n ref: titleRef,\n draggable: draggable,\n onDragStart: onMoveStart,\n onDragEnd: onMoveEnd,\n ...rest,\n children: [draggable && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n ref: dragPreviewRef,\n class: \"bio-properties-panel-popup__drag-preview\"\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-popup__drag-handle\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(DragIcon, {})\n })]\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-popup__title\",\n children: title\n }), children, showCloseButton && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n title: closeButtonTooltip,\n class: \"bio-properties-panel-popup__close\",\n onClick: onClose,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CloseIcon, {})\n })]\n });\n}\nfunction Body(props) {\n const {\n children,\n className,\n ...rest\n } = props;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-popup__body', className),\n ...rest,\n children: children\n });\n}\nfunction Footer(props) {\n const {\n children,\n className,\n ...rest\n } = props;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-popup__footer', className),\n ...rest,\n children: props.children\n });\n}\n\n// helpers //////////////////////\n\nfunction getPopupParent(node) {\n return node.closest('.bio-properties-panel-popup');\n}\nfunction cancel(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction getContainerNode(node) {\n if (typeof node === 'string') {\n return (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(node);\n }\n return node;\n}\n\nconst FEEL_POPUP_WIDTH = 700;\nconst FEEL_POPUP_HEIGHT = 250;\n\n/**\r\n * FEEL popup component, built as a singleton. Emits lifecycle events as follows:\r\n * - `feelPopup.open` - fired before the popup is mounted\r\n * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup\r\n * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup\r\n * - `feelPopup.closed` - fired after the popup is unmounted\r\n */\nfunction FEELPopupRoot(props) {\n const {\n element,\n eventBus = {\n fire() {},\n on() {},\n off() {}\n },\n popupContainer,\n getPopupLinks = () => []\n } = props;\n const prevElement = usePrevious(element);\n const [popupConfig, setPopupConfig] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const [open, setOpen] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [source, setSource] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [sourceElement, setSourceElement] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const emit = (type, context) => {\n eventBus.fire('feelPopup.' + type, context);\n };\n const isOpen = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n return !!open;\n }, [open]);\n useUpdateEffect(() => {\n if (!open) {\n emit('closed');\n }\n }, [open]);\n const handleOpen = (entryId, config, _sourceElement) => {\n setSource(entryId);\n setPopupConfig(config);\n setOpen(true);\n setSourceElement(_sourceElement);\n emit('open');\n };\n const handleClose = (event = {}) => {\n const {\n id\n } = event;\n if (id && id !== source) {\n return;\n }\n setOpen(false);\n setSource(null);\n };\n const feelPopupContext = {\n open: handleOpen,\n close: handleClose,\n source\n };\n\n // close popup on element change, cf. https://github.com/bpmn-io/properties-panel/issues/270\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (element && prevElement && element !== prevElement) {\n handleClose();\n }\n }, [element]);\n\n // allow close and open via events\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const handlePopupOpen = context => {\n const {\n entryId,\n popupConfig,\n sourceElement\n } = context;\n handleOpen(entryId, popupConfig, sourceElement);\n };\n const handleIsOpen = () => {\n return isOpen();\n };\n eventBus.on('feelPopup._close', handleClose);\n eventBus.on('feelPopup._open', handlePopupOpen);\n eventBus.on('feelPopup._isOpen', handleIsOpen);\n return () => {\n eventBus.off('feelPopup._close', handleClose);\n eventBus.off('feelPopup._open', handleOpen);\n eventBus.off('feelPopup._isOpen', handleIsOpen);\n };\n }, [eventBus, isOpen]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(FeelPopupContext.Provider, {\n value: feelPopupContext,\n children: [open && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelPopupComponent, {\n onClose: handleClose,\n container: popupContainer,\n getLinks: getPopupLinks,\n sourceElement: sourceElement,\n emit: emit,\n ...popupConfig\n }), props.children]\n });\n}\nfunction FeelPopupComponent(props) {\n const {\n container,\n getLinks,\n id,\n hostLanguage,\n onInput,\n onClose,\n position,\n singleLine,\n sourceElement,\n title,\n tooltipContainer,\n type,\n value,\n variables,\n emit\n } = props;\n const editorRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const popupRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const isAutoCompletionOpen = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const handleSetReturnFocus = () => {\n sourceElement && sourceElement.focus();\n };\n const onKeyDownCapture = event => {\n // we use capture here to make sure we handle the event before the editor does\n if (event.key === 'Escape') {\n isAutoCompletionOpen.current = autoCompletionOpen(event.target);\n }\n };\n const onKeyDown = event => {\n if (event.key === 'Escape') {\n // close popup only if auto completion is not open\n // we need to do check this because the editor is not\n // stop propagating the keydown event\n // cf. https://discuss.codemirror.net/t/how-can-i-replace-the-default-autocompletion-keymap-v6/3322/5\n if (!isAutoCompletionOpen.current) {\n onClose();\n isAutoCompletionOpen.current = false;\n }\n }\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n emit('opened', {\n domNode: popupRef.current\n });\n return () => emit('close', {\n domNode: popupRef.current\n });\n }, []);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // Set focus on editor when popup is opened\n if (editorRef.current) {\n editorRef.current.focus();\n }\n }, [editorRef]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(Popup, {\n container: container,\n className: \"bio-properties-panel-feel-popup\",\n emit: emit,\n position: position,\n title: title,\n onClose: onClose\n\n // handle focus manually on deactivate\n ,\n returnFocus: false,\n closeOnEscape: false,\n delayInitialFocus: false,\n onPostDeactivate: handleSetReturnFocus,\n height: FEEL_POPUP_HEIGHT,\n width: FEEL_POPUP_WIDTH,\n ref: popupRef,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Popup.Title, {\n title: title,\n emit: emit,\n showCloseButton: true,\n closeButtonTooltip: \"Save and close\",\n onClose: onClose,\n draggable: true,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: getLinks(type).map((link, index) => {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"a\", {\n rel: \"noreferrer\",\n href: link.href,\n target: \"_blank\",\n class: \"bio-properties-panel-feel-popup__title-link\",\n children: [link.title, (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(LaunchIcon, {})]\n }, index);\n })\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Popup.Body, {\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n onKeyDownCapture: onKeyDownCapture,\n onKeyDown: onKeyDown,\n class: \"bio-properties-panel-feel-popup__body\",\n children: [type === 'feel' && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CodeEditor, {\n enableGutters: true,\n id: prefixId$8(id),\n name: id,\n onInput: onInput,\n value: value,\n variables: variables,\n ref: editorRef,\n tooltipContainer: tooltipContainer\n }), type === 'feelers' && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CodeEditor$1, {\n id: prefixId$8(id),\n contentAttributes: {\n 'aria-label': title\n },\n enableGutters: true,\n hostLanguage: hostLanguage,\n name: id,\n onInput: onInput,\n value: value,\n ref: editorRef,\n singleLine: singleLine,\n tooltipContainer: tooltipContainer\n })]\n })\n })]\n });\n}\n\n// helpers /////////////////\n\nfunction prefixId$8(id) {\n return `bio-properties-panel-${id}`;\n}\nfunction autoCompletionOpen(element) {\n return element.closest('.cm-editor').querySelector('.cm-tooltip-autocomplete');\n}\n\n/**\r\n * This hook behaves like useEffect, but does not trigger on the first render.\r\n *\r\n * @param {Function} effect\r\n * @param {Array} deps\r\n */\nfunction useUpdateEffect(effect, deps) {\n const isMounted = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isMounted.current) {\n return effect();\n } else {\n isMounted.current = true;\n }\n }, deps);\n}\n\nfunction ToggleSwitch(props) {\n const {\n id,\n label,\n onInput,\n value,\n switcherLabel,\n inline,\n onFocus,\n onBlur,\n inputRef,\n tooltip\n } = props;\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const handleInputCallback = async () => {\n onInput(!value);\n };\n const handleInput = e => {\n handleInputCallback();\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-toggle-switch', {\n inline\n }),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n class: \"bio-properties-panel-label\",\n for: prefixId$7(id),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: tooltip,\n forId: id,\n element: props.element,\n children: label\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-field-wrapper\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"label\", {\n class: \"bio-properties-panel-toggle-switch__switcher\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n ref: inputRef,\n id: prefixId$7(id),\n class: \"bio-properties-panel-input\",\n type: \"checkbox\",\n onFocus: onFocus,\n onBlur: onBlur,\n name: id,\n onInput: handleInput,\n checked: !!localValue\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"span\", {\n class: \"bio-properties-panel-toggle-switch__slider\"\n })]\n }), switcherLabel && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"p\", {\n class: \"bio-properties-panel-toggle-switch__label\",\n children: switcherLabel\n })]\n })]\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {String} props.label\r\n * @param {String} props.switcherLabel\r\n * @param {Boolean} props.inline\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {string|import('preact').Component} props.tooltip\r\n */\nfunction ToggleSwitchEntry(props) {\n const {\n element,\n id,\n description,\n label,\n switcherLabel,\n inline,\n getValue,\n setValue,\n onFocus,\n onBlur,\n tooltip\n } = props;\n const value = getValue(element);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-entry bio-properties-panel-toggle-switch-entry\",\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ToggleSwitch, {\n id: id,\n label: label,\n value: value,\n onInput: setValue,\n onFocus: onFocus,\n onBlur: onBlur,\n switcherLabel: switcherLabel,\n inline: inline,\n tooltip: tooltip,\n element: element\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction isEdited$8(node) {\n return node && !!node.checked;\n}\n\n// helpers /////////////////\n\nfunction prefixId$7(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction NumberField(props) {\n const {\n debounce,\n disabled,\n displayLabel = true,\n id,\n inputRef,\n label,\n max,\n min,\n onInput,\n step,\n value = '',\n onFocus,\n onBlur\n } = props;\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const handleInputCallback = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return debounce(target => {\n if (target.validity.valid) {\n onInput(target.value ? parseFloat(target.value) : undefined);\n }\n });\n }, [onInput, debounce]);\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-numberfield\",\n children: [displayLabel && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n for: prefixId$6(id),\n class: \"bio-properties-panel-label\",\n children: label\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n id: prefixId$6(id),\n ref: inputRef,\n type: \"number\",\n name: id,\n spellCheck: \"false\",\n autoComplete: \"off\",\n disabled: disabled,\n class: \"bio-properties-panel-input\",\n max: max,\n min: min,\n onInput: handleInput,\n onFocus: onFocus,\n onBlur: onBlur,\n step: step,\n value: localValue\n })]\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Boolean} props.debounce\r\n * @param {String} props.description\r\n * @param {Boolean} props.disabled\r\n * @param {Object} props.element\r\n * @param {Function} props.getValue\r\n * @param {String} props.id\r\n * @param {String} props.label\r\n * @param {String} props.max\r\n * @param {String} props.min\r\n * @param {Function} props.setValue\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {String} props.step\r\n * @param {Function} props.validate\r\n */\nfunction NumberFieldEntry(props) {\n const {\n debounce,\n description,\n disabled,\n element,\n getValue,\n id,\n label,\n max,\n min,\n setValue,\n step,\n onFocus,\n onBlur,\n validate\n } = props;\n const globalError = useError(id);\n const [localError, setLocalError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n let value = getValue(element);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n const newValidationError = validate(value) || null;\n setLocalError(newValidationError);\n }\n }, [value, validate]);\n const onInput = newValue => {\n let newValidationError = null;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n newValidationError = validate(newValue) || null;\n }\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n const error = globalError || localError;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-entry', error ? 'has-error' : ''),\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(NumberField, {\n debounce: debounce,\n disabled: disabled,\n id: id,\n label: label,\n onFocus: onFocus,\n onBlur: onBlur,\n onInput: onInput,\n max: max,\n min: min,\n step: step,\n value: value\n }, element), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction isEdited$7(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$6(id) {\n return `bio-properties-panel-${id}`;\n}\n\nconst noop$2 = () => {};\nfunction FeelTextfieldComponent(props) {\n const {\n debounce,\n id,\n element,\n label,\n hostLanguage,\n onInput,\n onError,\n placeholder,\n feel,\n value = '',\n disabled = false,\n variables,\n singleLine,\n tooltipContainer,\n OptionalComponent = OptionalFeelInput,\n tooltip\n } = props;\n const [localValue, _setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const editorRef = useShowEntryEvent(id);\n const containerRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const feelActive = (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isString)(localValue) && localValue.startsWith('=') || feel === 'required';\n const feelOnlyValue = (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isString)(localValue) && localValue.startsWith('=') ? localValue.substring(1) : localValue;\n const [focus, _setFocus] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);\n const {\n open: openPopup,\n source: popupSource\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(FeelPopupContext);\n const popuOpen = popupSource === id;\n const setFocus = (offset = 0) => {\n const hasFocus = containerRef.current.contains(document.activeElement);\n\n // Keep caret position if it is already focused, otherwise focus at the end\n const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n _setFocus(position + offset);\n };\n const handleInputCallback = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return debounce(newValue => {\n onInput(newValue);\n });\n }, [onInput, debounce]);\n const setLocalValue = newValue => {\n _setLocalValue(newValue);\n if (typeof newValue === 'undefined' || newValue === '' || newValue === '=') {\n handleInputCallback(undefined);\n } else {\n handleInputCallback(newValue);\n }\n };\n const handleFeelToggle = useStaticCallback(() => {\n if (feel === 'required') {\n return;\n }\n if (!feelActive) {\n setLocalValue('=' + localValue);\n } else {\n setLocalValue(feelOnlyValue);\n }\n });\n const handleLocalInput = newValue => {\n if (feelActive) {\n newValue = '=' + newValue;\n }\n if (newValue === localValue) {\n return;\n }\n setLocalValue(newValue);\n if (!feelActive && (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isString)(newValue) && newValue.startsWith('=')) {\n // focus is behind `=` sign that will be removed\n setFocus(-1);\n }\n };\n const handleLint = useStaticCallback((lint = []) => {\n const syntaxError = lint.some(report => report.type === 'Syntax Error');\n if (syntaxError) {\n onError('Unparsable FEEL expression.');\n } else {\n onError(undefined);\n }\n });\n const handlePopupOpen = (type = 'feel') => {\n const popupOptions = {\n id,\n hostLanguage,\n onInput: handleLocalInput,\n position: calculatePopupPosition(containerRef.current),\n singleLine,\n title: getPopupTitle(element, label),\n tooltipContainer,\n type,\n value: feelOnlyValue,\n variables\n };\n openPopup(id, popupOptions, editorRef.current);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof focus !== 'undefined') {\n editorRef.current.focus(focus);\n _setFocus(undefined);\n }\n }, [focus]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n\n // External value change removed content => keep FEEL configuration\n if (!value) {\n setLocalValue(feelActive ? '=' : '');\n return;\n }\n setLocalValue(value);\n }, [value]);\n\n // copy-paste integration\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const copyHandler = event => {\n if (!feelActive) {\n return;\n }\n event.clipboardData.setData('application/FEEL', event.clipboardData.getData('text'));\n };\n const pasteHandler = event => {\n if (feelActive || popuOpen) {\n return;\n }\n const data = event.clipboardData.getData('application/FEEL');\n if (data) {\n setTimeout(() => {\n handleFeelToggle();\n setFocus();\n });\n }\n };\n containerRef.current.addEventListener('copy', copyHandler);\n containerRef.current.addEventListener('cut', copyHandler);\n containerRef.current.addEventListener('paste', pasteHandler);\n return () => {\n containerRef.current.removeEventListener('copy', copyHandler);\n containerRef.current.removeEventListener('cut', copyHandler);\n containerRef.current.removeEventListener('paste', pasteHandler);\n };\n }, [containerRef, feelActive, handleFeelToggle, setFocus]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-feel-entry', {\n 'feel-active': feelActive\n }),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"label\", {\n for: prefixId$5(id),\n class: \"bio-properties-panel-label\",\n onClick: () => setFocus(),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: tooltip,\n forId: id,\n element: props.element,\n children: label\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelIcon, {\n label: label,\n feel: feel,\n onClick: handleFeelToggle,\n active: feelActive\n })]\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-feel-container\",\n ref: containerRef,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelIndicator, {\n active: feelActive,\n disabled: feel !== 'optional' || disabled,\n onClick: handleFeelToggle\n }), feelActive ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CodeEditor, {\n name: id,\n onInput: handleLocalInput,\n contentAttributes: {\n 'id': prefixId$5(id),\n 'aria-label': label\n },\n disabled: disabled,\n popupOpen: popuOpen,\n onFeelToggle: () => {\n handleFeelToggle();\n setFocus(true);\n },\n onLint: handleLint,\n onPopupOpen: handlePopupOpen,\n placeholder: placeholder,\n value: feelOnlyValue,\n variables: variables,\n ref: editorRef,\n tooltipContainer: tooltipContainer\n }) : (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(OptionalComponent, {\n ...props,\n popupOpen: popuOpen,\n onInput: handleLocalInput,\n contentAttributes: {\n 'id': prefixId$5(id),\n 'aria-label': label\n },\n value: localValue,\n ref: editorRef,\n onPopupOpen: handlePopupOpen,\n containerRef: containerRef\n })]\n })]\n });\n}\nconst FeelTextfield = withAutoClosePopup(FeelTextfieldComponent);\nconst OptionalFeelInput = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur,\n placeholder\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: position => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n input.focus();\n if (typeof position === 'number') {\n if (position > value.length) {\n position = value.length;\n }\n input.setSelectionRange(position, position);\n }\n }\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n id: prefixId$5(id),\n type: \"text\",\n ref: inputRef,\n name: id,\n spellCheck: \"false\",\n autoComplete: \"off\",\n disabled: disabled,\n class: \"bio-properties-panel-input\",\n onInput: e => onInput(e.target.value),\n onFocus: onFocus,\n onBlur: onBlur,\n placeholder: placeholder,\n value: value || ''\n });\n});\nconst OptionalFeelNumberField = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n id,\n debounce,\n disabled,\n onInput,\n value,\n min,\n max,\n step,\n onFocus,\n onBlur\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: position => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n input.focus();\n if (typeof position === 'number' && position !== Infinity) {\n if (position > value.length) {\n position = value.length;\n }\n input.setSelectionRange(position, position);\n }\n }\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(NumberField, {\n id: id,\n debounce: debounce,\n disabled: disabled,\n displayLabel: false,\n inputRef: inputRef,\n max: max,\n min: min,\n onInput: onInput,\n step: step,\n value: value,\n onFocus: onFocus,\n onBlur: onBlur\n });\n});\nconst OptionalFeelTextArea = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur,\n placeholder\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n input.focus();\n input.setSelectionRange(0, 0);\n }\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"textarea\", {\n id: prefixId$5(id),\n type: \"text\",\n ref: inputRef,\n name: id,\n spellCheck: \"false\",\n autoComplete: \"off\",\n disabled: disabled,\n class: \"bio-properties-panel-input\",\n onInput: e => onInput(e.target.value),\n onFocus: onFocus,\n onBlur: onBlur,\n placeholder: placeholder,\n value: value || '',\n \"data-gramm\": \"false\"\n });\n});\nconst OptionalFeelToggleSwitch = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n id,\n onInput,\n value,\n onFocus,\n onBlur,\n switcherLabel\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n input.focus();\n }\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ToggleSwitch, {\n id: id,\n value: value,\n inputRef: inputRef,\n onInput: onInput,\n onFocus: onFocus,\n onBlur: onBlur,\n switcherLabel: switcherLabel\n });\n});\nconst OptionalFeelCheckbox = (0,_preact_compat__WEBPACK_IMPORTED_MODULE_1__.forwardRef)((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur\n } = props;\n const inputRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const handleChange = ({\n target\n }) => {\n onInput(target.checked);\n };\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n input.focus();\n }\n };\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n ref: inputRef,\n id: prefixId$5(id),\n name: id,\n onFocus: onFocus,\n onBlur: onBlur,\n type: \"checkbox\",\n class: \"bio-properties-panel-input\",\n onChange: handleChange,\n checked: value,\n disabled: disabled\n });\n});\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {Boolean} props.feel\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n * @param {Function} props.example\r\n * @param {Function} props.variables\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {string} [props.placeholder]\r\n * @param {string|import('preact').Component} props.tooltip\r\n */\nfunction FeelEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n feel,\n label,\n getValue,\n setValue,\n tooltipContainer,\n hostLanguage,\n singleLine,\n validate,\n show = noop$2,\n example,\n variables,\n onFocus,\n onBlur,\n placeholder,\n tooltip\n } = props;\n const [validationError, setValidationError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [localError, setLocalError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n let value = getValue(element);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n const newValidationError = validate(value) || null;\n setValidationError(newValidationError);\n }\n }, [value, validate]);\n const onInput = useStaticCallback(newValue => {\n let newValidationError = null;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n // don't create multiple commandStack entries for the same value\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n setValidationError(newValidationError);\n });\n const onError = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(err => {\n setLocalError(err);\n }, []);\n const temporaryError = useError(id);\n const error = temporaryError || localError || validationError;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()(props.class, 'bio-properties-panel-entry', error ? 'has-error' : ''),\n \"data-entry-id\": id,\n children: [(0,_preact__WEBPACK_IMPORTED_MODULE_3__.createElement)(FeelTextfield, {\n ...props,\n debounce: debounce,\n disabled: disabled,\n feel: feel,\n id: id,\n key: element,\n label: label,\n onInput: onInput,\n onError: onError,\n onFocus: onFocus,\n onBlur: onBlur,\n placeholder: placeholder,\n example: example,\n hostLanguage: hostLanguage,\n singleLine: singleLine,\n show: show,\n value: value,\n variables: variables,\n tooltipContainer: tooltipContainer,\n OptionalComponent: props.OptionalComponent,\n tooltip: tooltip\n }), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {String} props.max\r\n * @param {String} props.min\r\n * @param {String} props.step\r\n * @param {Boolean} props.feel\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n * @param {Function} props.example\r\n * @param {Function} props.variables\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n */\nfunction FeelNumberEntry(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelEntry, {\n class: \"bio-properties-panel-feel-number\",\n OptionalComponent: OptionalFeelNumberField,\n ...props\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {Boolean} props.feel\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n * @param {Function} props.example\r\n * @param {Function} props.variables\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {string} [props.placeholder]\r\n */\nfunction FeelTextAreaEntry(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelEntry, {\n class: \"bio-properties-panel-feel-textarea\",\n OptionalComponent: OptionalFeelTextArea,\n ...props\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {Boolean} props.feel\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n * @param {Function} props.example\r\n * @param {Function} props.variables\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n */\nfunction FeelToggleSwitchEntry(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelEntry, {\n class: \"bio-properties-panel-feel-toggle-switch\",\n OptionalComponent: OptionalFeelToggleSwitch,\n ...props\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {Boolean} props.feel\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n * @param {Function} props.example\r\n * @param {Function} props.variables\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n */\nfunction FeelCheckboxEntry(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelEntry, {\n class: \"bio-properties-panel-feel-checkbox\",\n OptionalComponent: OptionalFeelCheckbox,\n ...props\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {String} props.hostLanguage\r\n * @param {Boolean} props.singleLine\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {Boolean} props.feel\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n * @param {Function} props.example\r\n * @param {Function} props.variables\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n */\nfunction FeelTemplatingEntry(props) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FeelEntry, {\n class: \"bio-properties-panel-feel-templating\",\n OptionalComponent: CodeEditor$1,\n ...props\n });\n}\nfunction isEdited$6(node) {\n if (!node) {\n return false;\n }\n if (node.type === 'checkbox') {\n return !!node.checked || node.classList.contains('edited');\n }\n return !!node.value || node.classList.contains('edited');\n}\n\n// helpers /////////////////\n\nfunction prefixId$5(id) {\n return `bio-properties-panel-${id}`;\n}\nfunction calculatePopupPosition(element) {\n const {\n top,\n left\n } = element.getBoundingClientRect();\n return {\n left: left - FEEL_POPUP_WIDTH - 20,\n top: top\n };\n}\n\n// todo(pinussilvestrus): make this configurable in the future\nfunction getPopupTitle(element, label) {\n let popupTitle = '';\n if (element && element.type) {\n popupTitle = `${element.type} / `;\n }\n return `${popupTitle}${label}`;\n}\nfunction withAutoClosePopup(Component) {\n return function (props) {\n const {\n id\n } = props;\n const {\n close\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(FeelPopupContext);\n const closePopup = useStaticCallback(close);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => {\n closePopup({\n id\n });\n };\n }, []);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Component, {\n ...props\n });\n };\n}\n\nconst DEFAULT_LAYOUT = {};\nconst DEFAULT_DESCRIPTION = {};\nconst DEFAULT_TOOLTIP = {};\n\n/**\r\n * @typedef { {\r\n * component: import('preact').Component,\r\n * id: String,\r\n * isEdited?: Function\r\n * } } EntryDefinition\r\n *\r\n * @typedef { {\r\n * autoFocusEntry: String,\r\n * autoOpen?: Boolean,\r\n * entries: Array,\r\n * id: String,\r\n * label: String,\r\n * remove: (event: MouseEvent) => void\r\n * } } ListItemDefinition\r\n *\r\n * @typedef { {\r\n * add: (event: MouseEvent) => void,\r\n * component: import('preact').Component,\r\n * element: Object,\r\n * id: String,\r\n * items: Array,\r\n * label: String,\r\n * shouldOpen?: Boolean\r\n * } } ListGroupDefinition\r\n *\r\n * @typedef { {\r\n * component?: import('preact').Component,\r\n * entries: Array,\r\n * id: String,\r\n * label: String,\r\n * shouldOpen?: Boolean\r\n * } } GroupDefinition\r\n *\r\n * @typedef { {\r\n * [id: String]: GetDescriptionFunction\r\n * } } DescriptionConfig\r\n *\r\n * @typedef { {\r\n * [id: String]: GetTooltipFunction\r\n * } } TooltipConfig\r\n *\r\n * @callback { {\r\n * @param {string} id\r\n * @param {Object} element\r\n * @returns {string}\r\n * } } GetDescriptionFunction\r\n *\r\n * @callback { {\r\n * @param {string} id\r\n * @param {Object} element\r\n * @returns {string}\r\n * } } GetTooltipFunction\r\n *\r\n * @typedef { {\r\n * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,\r\n * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition\r\n * } } PlaceholderProvider\r\n *\r\n */\n\n/**\r\n * A basic properties panel component. Describes *how* content will be rendered, accepts\r\n * data from implementor to describe *what* will be rendered.\r\n *\r\n * @param {Object} props\r\n * @param {Object|Array} props.element\r\n * @param {import('./components/Header').HeaderProvider} props.headerProvider\r\n * @param {PlaceholderProvider} [props.placeholderProvider]\r\n * @param {Array} props.groups\r\n * @param {Object} [props.layoutConfig]\r\n * @param {Function} [props.layoutChanged]\r\n * @param {DescriptionConfig} [props.descriptionConfig]\r\n * @param {Function} [props.descriptionLoaded]\r\n * @param {TooltipConfig} [props.tooltipConfig]\r\n * @param {Function} [props.tooltipLoaded]\r\n * @param {HTMLElement} [props.feelPopupContainer]\r\n * @param {Function} [props.getFeelPopupLinks]\r\n * @param {Object} [props.eventBus]\r\n */\nfunction PropertiesPanel(props) {\n const {\n element,\n headerProvider,\n placeholderProvider,\n groups,\n layoutConfig,\n layoutChanged,\n descriptionConfig,\n descriptionLoaded,\n tooltipConfig,\n tooltipLoaded,\n feelPopupContainer,\n getFeelPopupLinks,\n eventBus\n } = props;\n\n // set-up layout context\n const [layout, setLayout] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(createLayout(layoutConfig));\n\n // react to external changes in the layout config\n useUpdateLayoutEffect(() => {\n const newLayout = createLayout(layoutConfig);\n setLayout(newLayout);\n }, [layoutConfig]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof layoutChanged === 'function') {\n layoutChanged(layout);\n }\n }, [layout, layoutChanged]);\n const getLayoutForKey = (key, defaultValue) => {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.get)(layout, key, defaultValue);\n };\n const setLayoutForKey = (key, config) => {\n const newLayout = (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.assign)({}, layout);\n (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.set)(newLayout, key, config);\n setLayout(newLayout);\n };\n const layoutContext = {\n layout,\n setLayout,\n getLayoutForKey,\n setLayoutForKey\n };\n\n // set-up description context\n const description = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => createDescriptionContext(descriptionConfig), [descriptionConfig]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof descriptionLoaded === 'function') {\n descriptionLoaded(description);\n }\n }, [description, descriptionLoaded]);\n const getDescriptionForId = (id, element) => {\n return description[id] && description[id](element);\n };\n const descriptionContext = {\n description,\n getDescriptionForId\n };\n\n // set-up tooltip context\n const tooltip = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => createTooltipContext(tooltipConfig), [tooltipConfig]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof tooltipLoaded === 'function') {\n tooltipLoaded(tooltip);\n }\n }, [tooltip, tooltipLoaded]);\n const getTooltipForId = (id, element) => {\n return tooltip[id] && tooltip[id](element);\n };\n const tooltipContext = {\n tooltip,\n getTooltipForId\n };\n const [errors, setErrors] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const onSetErrors = ({\n errors\n }) => setErrors(errors);\n useEvent('propertiesPanel.setErrors', onSetErrors, eventBus);\n const errorsContext = {\n errors\n };\n const eventContext = {\n eventBus\n };\n const propertiesPanelContext = {\n element\n };\n\n // empty state\n if (placeholderProvider && !element) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Placeholder, {\n ...placeholderProvider.getEmpty()\n });\n }\n\n // multiple state\n if (placeholderProvider && (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isArray)(element)) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Placeholder, {\n ...placeholderProvider.getMultiple()\n });\n }\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(LayoutContext.Provider, {\n value: propertiesPanelContext,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ErrorsContext.Provider, {\n value: errorsContext,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(DescriptionContext.Provider, {\n value: descriptionContext,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipContext.Provider, {\n value: tooltipContext,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(LayoutContext.Provider, {\n value: layoutContext,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(EventContext.Provider, {\n value: eventContext,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(FEELPopupRoot, {\n element: element,\n eventBus: eventBus,\n popupContainer: feelPopupContainer,\n getPopupLinks: getFeelPopupLinks,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Header, {\n element: element,\n headerProvider: headerProvider\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-scroll-container\",\n children: groups.map(group => {\n const {\n component: Component = Group,\n id\n } = group;\n return (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createElement)(Component, {\n ...group,\n key: id,\n element: element\n });\n })\n })]\n })\n })\n })\n })\n })\n })\n })\n });\n}\n\n// helpers //////////////////\n\nfunction createLayout(overrides = {}, defaults = DEFAULT_LAYOUT) {\n return {\n ...defaults,\n ...overrides\n };\n}\nfunction createDescriptionContext(overrides = {}) {\n return {\n ...DEFAULT_DESCRIPTION,\n ...overrides\n };\n}\nfunction createTooltipContext(overrides = {}) {\n return {\n ...DEFAULT_TOOLTIP,\n ...overrides\n };\n}\n\n// hooks //////////////////\n\n/**\r\n * This hook behaves like useLayoutEffect, but does not trigger on the first render.\r\n *\r\n * @param {Function} effect\r\n * @param {Array} deps\r\n */\nfunction useUpdateLayoutEffect(effect, deps) {\n const isMounted = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n if (isMounted.current) {\n return effect();\n } else {\n isMounted.current = true;\n }\n }, deps);\n}\n\nfunction DropdownButton(props) {\n const {\n class: className,\n children,\n menuItems = []\n } = props;\n const dropdownRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const menuRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [open, setOpen] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const close = () => setOpen(false);\n function onDropdownToggle(event) {\n if (menuRef.current && menuRef.current.contains(event.target)) {\n return;\n }\n event.stopPropagation();\n setOpen(open => !open);\n }\n function onActionClick(event, action) {\n event.stopPropagation();\n close();\n action();\n }\n useGlobalClick([dropdownRef.current], () => close());\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-dropdown-button', {\n open\n }, className),\n onClick: onDropdownToggle,\n ref: dropdownRef,\n children: [children, (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-dropdown-button__menu\",\n ref: menuRef,\n children: menuItems.map((item, index) => (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(MenuItem, {\n onClick: onActionClick,\n item: item\n }, index))\n })]\n });\n}\nfunction MenuItem({\n item,\n onClick\n}) {\n if (item.separator) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--separator\"\n });\n }\n if (item.action) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n class: \"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--actionable\",\n onClick: event => onClick(event, item.action),\n children: item.entry\n });\n }\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-dropdown-button__menu-item\",\n children: item.entry\n });\n}\n\n/**\r\n *\r\n * @param {Array} ignoredElements\r\n * @param {Function} callback\r\n */\nfunction useGlobalClick(ignoredElements, callback) {\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n /**\r\n * @param {MouseEvent} event\r\n */\n function listener(event) {\n if (ignoredElements.some(element => element && element.contains(event.target))) {\n return;\n }\n callback();\n }\n document.addEventListener('click', listener, {\n capture: true\n });\n return () => document.removeEventListener('click', listener, {\n capture: true\n });\n }, [...ignoredElements, callback]);\n}\n\nfunction HeaderButton(props) {\n const {\n children = null,\n class: classname,\n onClick = () => {},\n ...otherProps\n } = props;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n ...otherProps,\n onClick: onClick,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-group-header-button', classname),\n children: children\n });\n}\n\n/**\r\n * @typedef { {\r\n * [key: string]: string;\r\n * } } TranslateReplacements\r\n */\n\n/**\r\n * A simple translation stub to be used for multi-language support.\r\n * Can be easily replaced with a more sophisticated solution.\r\n *\r\n * @param {string} template to interpolate\r\n * @param {TranslateReplacements} [replacements] a map with substitutes\r\n *\r\n * @return {string} the translated string\r\n */\nfunction translateFallback(template, replacements) {\n replacements = replacements || {};\n return template.replace(/{([^}]+)}/g, function (_, key) {\n return replacements[key] || '{' + key + '}';\n });\n}\n\nfunction CollapsibleEntry(props) {\n const {\n element,\n entries = [],\n id,\n label,\n open: shouldOpen,\n remove,\n translate = translateFallback\n } = props;\n const [open, setOpen] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(shouldOpen);\n const toggleOpen = () => setOpen(!open);\n const {\n onShow\n } = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(LayoutContext);\n const propertiesPanelContext = {\n ...(0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(LayoutContext),\n onShow: (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n setOpen(true);\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(onShow)) {\n onShow();\n }\n }, [onShow, setOpen])\n };\n const placeholderLabel = translate('');\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n \"data-entry-id\": id,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-collapsible-entry', open ? 'open' : ''),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-collapsible-entry-header\",\n onClick: toggleOpen,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: label || placeholderLabel,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-collapsible-entry-header-title', !label && 'empty'),\n children: label || placeholderLabel\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: translate('Toggle list item'),\n class: \"bio-properties-panel-arrow bio-properties-panel-collapsible-entry-arrow\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ArrowIcon, {\n class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n })\n }), remove ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: translate('Delete item'),\n class: \"bio-properties-panel-remove-entry\",\n onClick: remove,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(DeleteIcon, {})\n }) : null]\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-collapsible-entry-entries', open ? 'open' : ''),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(LayoutContext.Provider, {\n value: propertiesPanelContext,\n children: entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n return (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createElement)(Component, {\n ...entry,\n element: element,\n key: id\n });\n })\n })\n })]\n });\n}\n\nfunction ListItem(props) {\n const {\n autoFocusEntry,\n autoOpen,\n translate = translateFallback\n } = props;\n\n // focus specified entry on auto open\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (autoOpen && autoFocusEntry) {\n const entry = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(`[data-entry-id=\"${autoFocusEntry}\"]`);\n const focusableInput = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)('.bio-properties-panel-input', entry);\n if (focusableInput) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(focusableInput.select)) {\n focusableInput.select();\n } else if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(focusableInput.focus)) {\n focusableInput.focus();\n }\n focusableInput.scrollIntoView();\n }\n }\n }, [autoOpen, autoFocusEntry]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-list-item\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CollapsibleEntry, {\n ...props,\n open: autoOpen,\n translate: translate\n })\n });\n}\n\nconst noop$1 = () => {};\n\n/**\r\n * @param {import('../PropertiesPanel').ListGroupDefinition} props\r\n */\nfunction ListGroup(props) {\n const {\n add,\n element,\n id,\n items,\n label,\n shouldOpen = false,\n translate = translateFallback\n } = props;\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (props.shouldSort != undefined) {\n console.warn('the property \\'shouldSort\\' is no longer supported');\n }\n }, [props.shouldSort]);\n const groupRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [open, setOpen] = useLayoutState(['groups', id, 'open'], shouldOpen);\n const [sticky, setSticky] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const onShow = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => setOpen(true), [setOpen]);\n const [localItems, setLocalItems] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n // Flag to mark that add button was clicked in the last render cycle\n const [addTriggered, setAddTriggered] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const prevElement = usePrevious(element);\n const toggleOpen = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => setOpen(!open), [open]);\n const openItemIds = element === prevElement && open && addTriggered ? getNewItemIds(items, localItems) : [];\n\n // reset local state after items changed\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setLocalItems(items);\n setAddTriggered(false);\n }, [items]);\n\n // set css class when group is sticky to top\n useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n const hasItems = !!items.length;\n const propertiesPanelContext = {\n ...(0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(LayoutContext),\n onShow\n };\n const handleAddClick = e => {\n setAddTriggered(true);\n setOpen(true);\n add(e);\n };\n const allErrors = useErrors();\n const hasError = items.some(item => {\n if (allErrors[item.id]) {\n return true;\n }\n if (!item.entries) {\n return;\n }\n\n // also check if the error is nested, e.g. for name-value entries\n return item.entries.some(entry => allErrors[entry.id]);\n });\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-group\",\n \"data-group-id\": 'group-' + id,\n ref: groupRef,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-group-header', hasItems ? '' : 'empty', hasItems && open ? 'open' : '', sticky && open ? 'sticky' : ''),\n onClick: hasItems ? toggleOpen : noop$1,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: props.tooltip ? null : label,\n \"data-title\": label,\n class: \"bio-properties-panel-group-header-title\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: props.tooltip,\n forId: 'group-' + id,\n element: element,\n parent: groupRef,\n children: label\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-group-header-buttons\",\n children: [add ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"button\", {\n type: \"button\",\n title: translate('Create new list item'),\n class: \"bio-properties-panel-group-header-button bio-properties-panel-add-entry\",\n onClick: handleAddClick,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CreateIcon, {}), !hasItems ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"span\", {\n class: \"bio-properties-panel-add-entry-label\",\n children: translate('Create')\n }) : null]\n }) : null, hasItems ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: translate(`List contains {numOfItems} item${items.length != 1 ? 's' : ''}`, {\n numOfItems: items.length\n }),\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-list-badge', hasError ? 'bio-properties-panel-list-badge--error' : ''),\n children: items.length\n }) : null, hasItems ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: translate('Toggle section'),\n class: \"bio-properties-panel-group-header-button bio-properties-panel-arrow\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ArrowIcon, {\n class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n })\n }) : null]\n })]\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-list', open && hasItems ? 'open' : ''),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(LayoutContext.Provider, {\n value: propertiesPanelContext,\n children: items.map((item, index) => {\n if (!item) {\n return;\n }\n const {\n id\n } = item;\n\n // if item was added, open it\n // existing items will not be affected as autoOpen\n // is only applied on first render\n const autoOpen = openItemIds.includes(item.id);\n return (0,_preact__WEBPACK_IMPORTED_MODULE_3__.createElement)(ListItem, {\n ...item,\n autoOpen: autoOpen,\n element: element,\n index: index,\n key: id,\n translate: translate\n });\n })\n })\n })]\n });\n}\nfunction getNewItemIds(newItems, oldItems) {\n const newIds = newItems.map(item => item.id);\n const oldIds = oldItems.map(item => item.id);\n return newIds.filter(itemId => !oldIds.includes(itemId));\n}\n\nfunction Checkbox(props) {\n const {\n id,\n label,\n onChange,\n disabled,\n value = false,\n onFocus,\n onBlur,\n tooltip\n } = props;\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const handleChangeCallback = ({\n target\n }) => {\n onChange(target.checked);\n };\n const handleChange = e => {\n handleChangeCallback(e);\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n const ref = useShowEntryEvent(id);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-checkbox\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n ref: ref,\n id: prefixId$4(id),\n name: id,\n onFocus: onFocus,\n onBlur: onBlur,\n type: \"checkbox\",\n class: \"bio-properties-panel-input\",\n onChange: handleChange,\n checked: localValue,\n disabled: disabled\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n for: prefixId$4(id),\n class: \"bio-properties-panel-label\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: tooltip,\n forId: id,\n element: props.element,\n children: label\n })\n })]\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {string|import('preact').Component} props.tooltip\r\n * @param {boolean} [props.disabled]\r\n */\nfunction CheckboxEntry(props) {\n const {\n element,\n id,\n description,\n label,\n getValue,\n setValue,\n disabled,\n onFocus,\n onBlur,\n tooltip\n } = props;\n const value = getValue(element);\n const error = useError(id);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-entry bio-properties-panel-checkbox-entry\",\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Checkbox, {\n disabled: disabled,\n id: id,\n label: label,\n onChange: setValue,\n onFocus: onFocus,\n onBlur: onBlur,\n value: value,\n tooltip: tooltip,\n element: element\n }, element), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction isEdited$5(node) {\n return node && !!node.checked;\n}\n\n// helpers /////////////////\n\nfunction prefixId$4(id) {\n return `bio-properties-panel-${id}`;\n}\n\nconst noop = () => {};\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.tooltipContainer\r\n * @param {Function} props.validate\r\n * @param {Function} props.show\r\n */\nfunction TemplatingEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n label,\n getValue,\n setValue,\n tooltipContainer,\n validate,\n show = noop\n } = props;\n const [validationError, setValidationError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n const [localError, setLocalError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n let value = getValue(element);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n const newValidationError = validate(value) || null;\n setValidationError(newValidationError);\n }\n }, [value, validate]);\n const onInput = useStaticCallback(newValue => {\n let newValidationError = null;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n // don't create multiple commandStack entries for the same value\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n setValidationError(newValidationError);\n });\n const onError = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(err => {\n setLocalError(err);\n }, []);\n const temporaryError = useError(id);\n const error = localError || temporaryError || validationError;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-entry', error ? 'has-error' : ''),\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Templating, {\n debounce: debounce,\n disabled: disabled,\n id: id,\n label: label,\n onInput: onInput,\n onError: onError,\n show: show,\n value: value,\n tooltipContainer: tooltipContainer\n }, element), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction Templating(props) {\n const {\n debounce,\n id,\n label,\n onInput,\n onError,\n value = '',\n disabled = false,\n tooltipContainer\n } = props;\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const editorRef = useShowEntryEvent(id);\n const containerRef = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const [focus, _setFocus] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);\n const setFocus = (offset = 0) => {\n const hasFocus = containerRef.current.contains(document.activeElement);\n\n // Keep caret position if it is already focused, otherwise focus at the end\n const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n _setFocus(position + offset);\n };\n const handleInputCallback = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return debounce(newValue => onInput(newValue.length ? newValue : undefined));\n }, [onInput, debounce]);\n const handleInput = newValue => {\n handleInputCallback(newValue);\n setLocalValue(newValue);\n };\n const handleLint = useStaticCallback(lint => {\n const errors = lint && lint.length && lint.filter(e => e.severity === 'error') || [];\n if (!errors.length) {\n onError(undefined);\n return;\n }\n const error = lint[0];\n const message = `${error.source}: ${error.message}`;\n onError(message);\n });\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (typeof focus !== 'undefined') {\n editorRef.current.focus(focus);\n _setFocus(undefined);\n }\n }, [focus]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value ? value : '');\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-feelers\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n id: prefixIdLabel(id),\n class: \"bio-properties-panel-label\",\n onClick: () => setFocus(),\n children: label\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-feelers-input\",\n ref: containerRef,\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CodeEditor$1, {\n name: id,\n onInput: handleInput,\n contentAttributes: {\n 'aria-labelledby': prefixIdLabel(id)\n },\n disabled: disabled,\n onLint: handleLint,\n value: localValue,\n ref: editorRef,\n tooltipContainer: tooltipContainer\n })\n })]\n });\n}\nfunction isEdited$4(node) {\n return node && (!!node.value || node.classList.contains('edited'));\n}\n\n// helpers /////////////////\n\nfunction prefixIdLabel(id) {\n return `bio-properties-panel-feelers-${id}-label`;\n}\n\nfunction List(props) {\n const {\n id,\n element,\n items = [],\n component,\n label = '',\n open: shouldOpen,\n onAdd,\n onRemove,\n autoFocusEntry,\n ...restProps\n } = props;\n const [open, setOpen] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(!!shouldOpen);\n const hasItems = !!items.length;\n const toggleOpen = () => hasItems && setOpen(!open);\n const elementChanged = usePrevious(element) !== element;\n const newItems = useNewItems(items, elementChanged);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (open && !hasItems) {\n setOpen(false);\n }\n }, [open, hasItems]);\n\n /**\r\n * @param {MouseEvent} event\r\n */\n function addItem(event) {\n event.stopPropagation();\n onAdd();\n if (!open) {\n setOpen(true);\n }\n }\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n \"data-entry-id\": id,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-entry', 'bio-properties-panel-list-entry', hasItems ? '' : 'empty', open ? 'open' : ''),\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-list-entry-header\",\n onClick: toggleOpen,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: label,\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-list-entry-header-title', open && 'open'),\n children: label\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-list-entry-header-buttons\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"button\", {\n type: \"button\",\n title: \"Create new list item\",\n onClick: addItem,\n class: \"bio-properties-panel-add-entry\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(CreateIcon, {}), !hasItems ? (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"span\", {\n class: \"bio-properties-panel-add-entry-label\",\n children: \"Create\"\n }) : null]\n }), hasItems && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n title: `List contains ${items.length} item${items.length != 1 ? 's' : ''}`,\n class: \"bio-properties-panel-list-badge\",\n children: items.length\n }), hasItems && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: \"Toggle list item\",\n class: \"bio-properties-panel-arrow\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ArrowIcon, {\n class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n })\n })]\n })]\n }), hasItems && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(ItemsList, {\n ...restProps,\n autoFocusEntry: autoFocusEntry,\n component: component,\n element: element,\n id: id,\n items: items,\n newItems: newItems,\n onRemove: onRemove,\n open: open\n })]\n });\n}\nfunction ItemsList(props) {\n const {\n autoFocusEntry,\n component: Component,\n element,\n id,\n items,\n newItems,\n onRemove,\n open,\n ...restProps\n } = props;\n const getKey = useKeyFactory();\n const newItem = newItems[0];\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (newItem && autoFocusEntry) {\n // (0) select the parent entry (containing all list items)\n const entry = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(`[data-entry-id=\"${id}\"]`);\n\n // (1) select the first input or a custom element to be focussed\n const selector = typeof autoFocusEntry === 'boolean' ? '.bio-properties-panel-input' : autoFocusEntry;\n const focusableInput = (0,min_dom__WEBPACK_IMPORTED_MODULE_8__.query)(selector, entry);\n\n // (2) set focus\n if (focusableInput) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(focusableInput.select)) {\n focusableInput.select();\n } else if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(focusableInput.focus)) {\n focusableInput.focus();\n }\n }\n }\n }, [newItem, autoFocusEntry, id]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"ol\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-list-entry-items', open ? 'open' : ''),\n children: items.map((item, index) => {\n const key = getKey(item);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"li\", {\n class: \"bio-properties-panel-list-entry-item\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Component, {\n ...restProps,\n element: element,\n id: id,\n index: index,\n item: item,\n open: item === newItem\n }), onRemove && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"button\", {\n type: \"button\",\n title: \"Delete item\",\n class: \"bio-properties-panel-remove-entry bio-properties-panel-remove-list-entry\",\n onClick: () => onRemove && onRemove(item),\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(DeleteIcon, {})\n })]\n }, key);\n })\n });\n}\nfunction useNewItems(items = [], shouldReset) {\n const previousItems = usePrevious(items.slice()) || [];\n if (shouldReset) {\n return [];\n }\n return previousItems ? items.filter(item => !previousItems.includes(item)) : [];\n}\n\nfunction Select(props) {\n const {\n id,\n label,\n onChange,\n options = [],\n value = '',\n disabled,\n onFocus,\n onBlur,\n tooltip\n } = props;\n const ref = useShowEntryEvent(id);\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const handleChangeCallback = ({\n target\n }) => {\n onChange(target.value);\n };\n const handleChange = e => {\n handleChangeCallback(e);\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-select\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n for: prefixId$3(id),\n class: \"bio-properties-panel-label\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: tooltip,\n forId: id,\n element: props.element,\n children: label\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"select\", {\n ref: ref,\n id: prefixId$3(id),\n name: id,\n class: \"bio-properties-panel-input\",\n onInput: handleChange,\n onFocus: onFocus,\n onBlur: onBlur,\n value: localValue,\n disabled: disabled,\n children: options.map((option, idx) => {\n if (option.children) {\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"optgroup\", {\n label: option.label,\n children: option.children.map((child, idx) => (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"option\", {\n value: child.value,\n disabled: child.disabled,\n children: child.label\n }, idx))\n }, idx);\n }\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"option\", {\n value: option.value,\n disabled: option.disabled,\n children: option.label\n }, idx);\n })\n })]\n });\n}\n\n/**\r\n * @param {object} props\r\n * @param {object} props.element\r\n * @param {string} props.id\r\n * @param {string} [props.description]\r\n * @param {string} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {Function} props.getOptions\r\n * @param {boolean} [props.disabled]\r\n * @param {Function} [props.validate]\r\n * @param {string|import('preact').Component} props.tooltip\r\n */\nfunction SelectEntry(props) {\n const {\n element,\n id,\n description,\n label,\n getValue,\n setValue,\n getOptions,\n disabled,\n onFocus,\n onBlur,\n validate,\n tooltip\n } = props;\n const options = getOptions(element);\n const globalError = useError(id);\n const [localError, setLocalError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n let value = getValue(element);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n const newValidationError = validate(value) || null;\n setLocalError(newValidationError);\n }\n }, [value, validate]);\n const onChange = newValue => {\n let newValidationError = null;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n newValidationError = validate(newValue) || null;\n }\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n const error = globalError || localError;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-entry', error ? 'has-error' : ''),\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Select, {\n id: id,\n label: label,\n value: value,\n onChange: onChange,\n onFocus: onFocus,\n onBlur: onBlur,\n options: options,\n disabled: disabled,\n tooltip: tooltip,\n element: element\n }, element), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction isEdited$3(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$3(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction Simple(props) {\n const {\n debounce,\n disabled,\n element,\n getValue,\n id,\n onBlur,\n onFocus,\n setValue\n } = props;\n const value = getValue(element);\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const handleInputCallback = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return debounce(target => setValue(target.value.length ? target.value : undefined));\n }, [setValue, debounce]);\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-simple\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n id: prefixId$2(id),\n type: \"text\",\n name: id,\n spellCheck: \"false\",\n autoComplete: \"off\",\n disabled: disabled,\n class: \"bio-properties-panel-input\",\n onInput: handleInput,\n \"aria-label\": localValue || '',\n onFocus: onFocus,\n onBlur: onBlur,\n value: localValue\n }, element)\n });\n}\nfunction isEdited$2(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$2(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction resizeToContents(element) {\n element.style.height = 'auto';\n\n // a 2px pixel offset is required to prevent scrollbar from\n // appearing on OS with a full length scroll bar (Windows/Linux)\n element.style.height = `${element.scrollHeight + 2}px`;\n}\nfunction TextArea(props) {\n const {\n id,\n label,\n debounce,\n onInput,\n value = '',\n disabled,\n monospace,\n onFocus,\n onBlur,\n autoResize = true,\n placeholder,\n rows = autoResize ? 1 : 2,\n tooltip\n } = props;\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value);\n const ref = useShowEntryEvent(id);\n const visible = useElementVisible(ref.current);\n const handleInputCallback = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return debounce(target => onInput(target.value.length ? target.value : undefined));\n }, [onInput, debounce]);\n const handleInput = e => {\n handleInputCallback(e.target);\n autoResize && resizeToContents(e.target);\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n autoResize && resizeToContents(ref.current);\n }, []);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n visible && autoResize && resizeToContents(ref.current);\n }, [visible]);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-textarea\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n for: prefixId$1(id),\n class: \"bio-properties-panel-label\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: tooltip,\n forId: id,\n element: props.element,\n children: label\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"textarea\", {\n ref: ref,\n id: prefixId$1(id),\n name: id,\n spellCheck: \"false\",\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-input', monospace ? 'bio-properties-panel-input-monospace' : '', autoResize ? 'auto-resize' : ''),\n onInput: handleInput,\n onFocus: onFocus,\n onBlur: onBlur,\n placeholder: placeholder,\n rows: rows,\n value: localValue,\n disabled: disabled,\n \"data-gramm\": \"false\"\n })]\n });\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} props.description\n * @param {boolean} props.debounce\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {number} props.rows\n * @param {boolean} props.monospace\n * @param {Function} [props.validate]\n * @param {boolean} [props.disabled]\n */\nfunction TextAreaEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n label,\n getValue,\n setValue,\n rows,\n monospace,\n disabled,\n validate,\n onFocus,\n onBlur,\n placeholder,\n autoResize,\n tooltip\n } = props;\n const globalError = useError(id);\n const [localError, setLocalError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n let value = getValue(element);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n const newValidationError = validate(value) || null;\n setLocalError(newValidationError);\n }\n }, [value, validate]);\n const onInput = newValue => {\n let newValidationError = null;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n newValidationError = validate(newValue) || null;\n }\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n const error = globalError || localError;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-entry', error ? 'has-error' : ''),\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TextArea, {\n id: id,\n label: label,\n value: value,\n onInput: onInput,\n onFocus: onFocus,\n onBlur: onBlur,\n rows: rows,\n debounce: debounce,\n monospace: monospace,\n disabled: disabled,\n placeholder: placeholder,\n autoResize: autoResize,\n tooltip: tooltip,\n element: element\n }, element), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction isEdited$1(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId$1(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction Textfield(props) {\n const {\n debounce,\n disabled = false,\n id,\n label,\n onInput,\n onFocus,\n onBlur,\n placeholder,\n value = '',\n tooltip\n } = props;\n const [localValue, setLocalValue] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(value || '');\n const ref = useShowEntryEvent(id);\n const handleInputCallback = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return debounce(target => onInput(target.value.length ? target.value : undefined));\n }, [onInput, debounce]);\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value);\n }, [value]);\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: \"bio-properties-panel-textfield\",\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"label\", {\n for: prefixId(id),\n class: \"bio-properties-panel-label\",\n children: (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(TooltipWrapper, {\n value: tooltip,\n forId: id,\n element: props.element,\n children: label\n })\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"input\", {\n ref: ref,\n id: prefixId(id),\n type: \"text\",\n name: id,\n spellCheck: \"false\",\n autoComplete: \"off\",\n disabled: disabled,\n class: \"bio-properties-panel-input\",\n onInput: handleInput,\n onFocus: onFocus,\n onBlur: onBlur,\n placeholder: placeholder,\n value: localValue\n })]\n });\n}\n\n/**\r\n * @param {Object} props\r\n * @param {Object} props.element\r\n * @param {String} props.id\r\n * @param {String} props.description\r\n * @param {Boolean} props.debounce\r\n * @param {Boolean} props.disabled\r\n * @param {String} props.label\r\n * @param {Function} props.getValue\r\n * @param {Function} props.setValue\r\n * @param {Function} props.onFocus\r\n * @param {Function} props.onBlur\r\n * @param {string|import('preact').Component} props.tooltip\r\n * @param {Function} props.validate\r\n */\nfunction TextfieldEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n label,\n getValue,\n setValue,\n validate,\n onFocus,\n onBlur,\n placeholder,\n tooltip\n } = props;\n const globalError = useError(id);\n const [localError, setLocalError] = (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(null);\n let value = getValue(element);\n (0,_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n const newValidationError = validate(value) || null;\n setLocalError(newValidationError);\n }\n }, [value, validate]);\n const onInput = newValue => {\n let newValidationError = null;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isFunction)(validate)) {\n newValidationError = validate(newValue) || null;\n }\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n const error = globalError || localError;\n return (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-entry', error ? 'has-error' : ''),\n \"data-entry-id\": id,\n children: [(0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Textfield, {\n debounce: debounce,\n disabled: disabled,\n id: id,\n label: label,\n onInput: onInput,\n onFocus: onFocus,\n onBlur: onBlur,\n placeholder: placeholder,\n value: value,\n tooltip: tooltip,\n element: element\n }, element), error && (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"div\", {\n class: \"bio-properties-panel-error\",\n children: error\n }), (0,_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Description, {\n forId: id,\n element: element,\n value: description\n })]\n });\n}\nfunction isEdited(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${id}`;\n}\n\nconst DEFAULT_DEBOUNCE_TIME = 300;\nfunction debounceInput(debounceDelay) {\n return function _debounceInput(fn) {\n if (debounceDelay !== false) {\n var debounceTime = (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.isNumber)(debounceDelay) ? debounceDelay : DEFAULT_DEBOUNCE_TIME;\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_7__.debounce)(fn, debounceTime);\n } else {\n return fn;\n }\n };\n}\ndebounceInput.$inject = ['config.debounceInput'];\n\nvar index$1 = {\n debounceInput: ['factory', debounceInput]\n};\n\nclass FeelPopupModule {\n constructor(eventBus) {\n this._eventBus = eventBus;\n }\n\n /**\r\n * Check if the FEEL popup is open.\r\n * @return {Boolean}\r\n */\n isOpen() {\n return this._eventBus.fire('feelPopup._isOpen');\n }\n\n /**\r\n * Open the FEEL popup.\r\n *\r\n * @param {String} entryId\r\n * @param {Object} popupConfig\r\n * @param {HTMLElement} sourceElement\r\n */\n open(entryId, popupConfig, sourceElement) {\n return this._eventBus.fire('feelPopup._open', {\n entryId,\n popupConfig,\n sourceElement\n });\n }\n\n /**\r\n * Close the FEEL popup.\r\n */\n close() {\n return this._eventBus.fire('feelPopup._close');\n }\n}\nFeelPopupModule.$inject = ['eventBus'];\n\nvar index = {\n feelPopup: ['type', FeelPopupModule]\n};\n\n\n//# sourceMappingURL=index.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9kaXN0L2luZGV4LmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpSDtBQUNsQjtBQUNuQztBQUNBO0FBQ0g7QUFDckI7QUFDSTtBQUNBO0FBQ007QUFDYTtBQUNuQjs7QUFFeEM7QUFDQSxTQUFTLHdEQUFHO0FBQ1o7QUFDQSxjQUFjLHdEQUFHO0FBQ2pCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx3REFBRztBQUNaO0FBQ0EsY0FBYyx3REFBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx3REFBRztBQUNaO0FBQ0EsY0FBYyx3REFBRztBQUNqQjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0RBQUc7QUFDWjtBQUNBLGNBQWMsd0RBQUc7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHlEQUFJO0FBQ2I7QUFDQSxlQUFlLHdEQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUssR0FBRyx3REFBRztBQUNYO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUssR0FBRyx3REFBRztBQUNYO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHdEQUFHO0FBQ1o7QUFDQSxjQUFjLHdE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O0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFcXlDO0FBQ3J5QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsL2Rpc3QvaW5kZXguZXNtLmpzPzlmOGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vcHJlYWN0L2hvb2tzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc0FycmF5LCBnZXQsIGFzc2lnbiwgc2V0LCBpc051bWJlciwgZGVib3VuY2UgfSBmcm9tICdtaW4tZGFzaCc7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwsIGZvcndhcmRSZWYgfSBmcm9tICcuLi9wcmVhY3QvY29tcGF0JztcbmltcG9ydCB7IGpzeCwganN4cywgRnJhZ21lbnQgfSBmcm9tICcuLi9wcmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJy4uL3ByZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHF1ZXJ5LCBkb21pZnkgfSBmcm9tICdtaW4tZG9tJztcbmltcG9ydCB7IEZlZWxlcnNFZGl0b3IgfSBmcm9tICdmZWVsZXJzJztcbmltcG9ydCBGZWVsRWRpdG9yIGZyb20gJ0BicG1uLWlvL2ZlZWwtZWRpdG9yJztcbmltcG9ydCB7IGxpbmVOdW1iZXJzLCBFZGl0b3JWaWV3IH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgKiBhcyBmb2N1c1RyYXAgZnJvbSAnZm9jdXMtdHJhcCc7XG5cbnZhciBBcnJvd0ljb24gPSBmdW5jdGlvbiBBcnJvd0ljb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChcInN2Z1wiLCB7XG4gICAgLi4ucHJvcHMsXG4gICAgY2hpbGRyZW46IGpzeChcInBhdGhcIiwge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJtMTEuNjU3IDgtNC45NSA0Ljk1YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEw4LjgyOCA4IDUuMjkzIDQuNDY0QTEgMSAwIDEgMSA2LjcwNyAzLjA1TDExLjY1NyA4WlwiXG4gICAgfSlcbiAgfSk7XG59O1xuQXJyb3dJY29uLmRlZmF1bHRQcm9wcyA9IHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCJcbn07XG52YXIgQ2xvc2VJY29uID0gZnVuY3Rpb24gQ2xvc2VJY29uKHByb3BzKSB7XG4gIHJldHVybiBqc3goXCJzdmdcIiwge1xuICAgIC4uLnByb3BzLFxuICAgIGNoaWxkcmVuOiBqc3goXCJwYXRoXCIsIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwibTEyIDQuNy0uNy0uN0w4IDcuMyA0LjcgNGwtLjcuN0w3LjMgOCA0IDExLjNsLjcuN0w4IDguN2wzLjMgMy4zLjctLjdMOC43IDggMTIgNC43WlwiLFxuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgIH0pXG4gIH0pO1xufTtcbkNsb3NlSWNvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiXG59O1xudmFyIENyZWF0ZUljb24gPSBmdW5jdGlvbiBDcmVhdGVJY29uKHByb3BzKSB7XG4gIHJldHVybiBqc3goXCJzdmdcIiwge1xuICAgIC4uLnByb3BzLFxuICAgIGNoaWxkcmVuOiBqc3goXCJwYXRoXCIsIHtcbiAgICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTkgMTNWOWg0YTEgMSAwIDAgMCAwLTJIOVYzYTEgMSAwIDEgMC0yIDB2NEgzYTEgMSAwIDEgMCAwIDJoNHY0YTEgMSAwIDAgMCAyIDBaXCJcbiAgICB9KVxuICB9KTtcbn07XG5DcmVhdGVJY29uLmRlZmF1bHRQcm9wcyA9IHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCJcbn07XG52YXIgRGVsZXRlSWNvbiA9IGZ1bmN0aW9uIERlbGV0ZUljb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChcInN2Z1wiLCB7XG4gICAgLi4ucHJvcHMsXG4gICAgY2hpbGRyZW46IGpzeChcInBhdGhcIiwge1xuICAgICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgICAgZDogXCJNMTIgNnY3YzAgMS4xLS40IDEuNTUtMS41IDEuNTVoLTVDNC40IDE0LjU1IDQgMTQuMSA0IDEzVjZoOFptLTEuNSAxLjVoLTV2NC4zYzAgLjY2LjUgMS4yIDEuMTExIDEuMkg5LjM5Yy42MTEgMCAxLjExMS0uNTQgMS4xMTEtMS4yVjcuNVpNMTMgM2gtMmwtMS0xSDZMNSAzSDN2MS41aDEwVjNaXCJcbiAgICB9KVxuICB9KTtcbn07XG5EZWxldGVJY29uLmRlZmF1bHRQcm9wcyA9IHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCJcbn07XG52YXIgRHJhZ0ljb24gPSBmdW5jdGlvbiBEcmFnSWNvbihwcm9wcykge1xuICByZXR1cm4ganN4cyhcInN2Z1wiLCB7XG4gICAgLi4ucHJvcHMsXG4gICAgY2hpbGRyZW46IFtqc3goXCJwYXRoXCIsIHtcbiAgICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCJcbiAgICAgIH0sXG4gICAgICBkOiBcIk0wIDBoMTZ2MTZIMHpcIlxuICAgIH0pLCBqc3goXCJwYXRoXCIsIHtcbiAgICAgIGZpbGw6IFwiI2ZmZlwiLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgbWl4QmxlbmRNb2RlOiBcIm11bHRpcGx5XCJcbiAgICAgIH0sXG4gICAgICBkOiBcIk0wIDBoMTZ2MTZIMHpcIlxuICAgIH0pLCBqc3goXCJwYXRoXCIsIHtcbiAgICAgIGQ6IFwiTTcgM0g1djJoMlYzem00IDBIOXYyaDJWM3pNNyA3SDV2MmgyVjd6bTQgMEg5djJoMlY3em0tNCA0SDV2Mmgydi0yem00IDBIOXYyaDJ2LTJ6XCIsXG4gICAgICBmaWxsOiBcIiMxNjE2MTZcIlxuICAgIH0pXVxuICB9KTtcbn07XG5EcmFnSWNvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufTtcbnZhciBFeHRlcm5hbExpbmtJY29uID0gZnVuY3Rpb24gRXh0ZXJuYWxMaW5rSWNvbihwcm9wcykge1xuICByZXR1cm4ganN4KFwic3ZnXCIsIHtcbiAgICAuLi5wcm9wcyxcbiAgICBjaGlsZHJlbjoganN4KFwicGF0aFwiLCB7XG4gICAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgICBkOiBcIk0xMi42MzcgMTIuNjM3di00LjcyaDEuMzYydjQuNzIxYzAgLjM2LS4xMzcuNjc2LS40MTEuOTUtLjI3NS4yNzUtLjU5MS40MTItLjk1LjQxMkgzLjM2MmMtLjM4IDAtLjcwMy0uMTMyLS45NjctLjM5NkExLjMxNSAxLjMxNSAwIDAgMSAyIDEyLjYzOFYzLjM2MmMwLS4zOC4xMzItLjcwMy4zOTYtLjk2N1MyLjk4MiAyIDMuMzYzIDJoNC41NTN2MS4zNjNIMy4zNjN2OS4yNzRoOS4yNzRaTTE0IDJIOS4yOGwtLjAwMSAxLjM2MmgyLjQwOEw1LjA2NSA5Ljk4NGwuOTUuOTUgNi42MjItNi42MjJ2Mi40MDlIMTRWMlpcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudGNvbG9yXCJcbiAgICB9KVxuICB9KTtcbn07XG5FeHRlcm5hbExpbmtJY29uLmRlZmF1bHRQcm9wcyA9IHtcbiAgd2lkdGg6IFwiMTZcIixcbiAgaGVpZ2h0OiBcIjE2XCIsXG4gIGZpbGw6IFwibm9uZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59O1xudmFyIEZlZWxJY29uJDEgPSBmdW5jdGlvbiBGZWVsSWNvbihwcm9wcykge1xuICByZXR1cm4ganN4KFwic3ZnXCIsIHtcbiAgICAuLi5wcm9wcyxcbiAgICBjaGlsZHJlbjoganN4KFwicGF0aFwiLCB7XG4gICAgICBkOiBcIk0zLjYxNyAxMS45OWMtLjEzNy42ODQtLjM5MiAxLjE5LS43NjUgMS41MTgtLjM2Mi4zMjgtLjg4Mi40OTItMS41NTguNDkySDBsLjMwOS0xLjU3OWgxLjI2NGwxLjUxNS03LjY0aC0uOTEybC4zMDktMS41NzloLjkxMWwuMjM2LTEuMTkxYy4xMzctLjY4NS4zODctMS4xOTIuNzUtMS41MkM0Ljc1My4xNjQgNS4yNzcgMCA1Ljk1MyAwaDEuMjk0TDYuOTQgMS41NzlINS42NzVsLS4zMjMgMS42MjNoMS4yNjRsLS4zMDkgMS41NzlINS4wNDNsLTEuNDI2IDcuMjA4Wk01LjYwNSAxMS4wMjFsMy4wMjktNC4xNTVMNy4yOCAzLjIwMmgyLjA3M2wuNzA2IDIuNTQ3aC4xNzZsMS42OTEtMi41NDdIMTRsLTMuMDE0IDQuMDUxIDEuMzM4IDMuNzY4SDEwLjI1bC0uNzA2LTIuNjA2SDkuMzdMNy42NzggMTEuMDJINS42MDVaXCIsXG4gICAgICBmaWxsOiBcImN1cnJlbnRjb2xvclwiXG4gICAgfSlcbiAgfSk7XG59O1xuRmVlbEljb24kMS5kZWZhdWx0UHJvcHMgPSB7XG4gIHdpZHRoOiBcIjE0XCIsXG4gIGhlaWdodDogXCIxNFwiLFxuICBmaWxsOiBcIm5vbmVcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufTtcbnZhciBMYXVuY2hJY29uID0gZnVuY3Rpb24gTGF1bmNoSWNvbihwcm9wcykge1xuICByZXR1cm4ganN4cyhcInN2Z1wiLCB7XG4gICAgLi4ucHJvcHMsXG4gICAgY2hpbGRyZW46IFtqc3goXCJwYXRoXCIsIHtcbiAgICAgIGQ6IFwiTTI2IDI4SDZhMi4wMDMgMi4wMDMgMCAwIDEtMi0yVjZhMi4wMDMgMi4wMDMgMCAwIDEgMi0yaDEwdjJINnYyMGgyMFYxNmgydjEwYTIuMDAzIDIuMDAzIDAgMCAxLTIgMlpcIlxuICAgIH0pLCBqc3goXCJwYXRoXCIsIHtcbiAgICAgIGQ6IFwiTTIwIDJ2Mmg2LjU4NkwxOCAxMi41ODYgMTkuNDE0IDE0IDI4IDUuNDE0VjEyaDJWMkgyMHpcIlxuICAgIH0pXVxuICB9KTtcbn07XG5MYXVuY2hJY29uLmRlZmF1bHRQcm9wcyA9IHtcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgdmlld0JveDogXCIwIDAgMzIgMzJcIlxufTtcbnZhciBQb3B1cEljb24gPSBmdW5jdGlvbiBQb3B1cEljb24ocHJvcHMpIHtcbiAgcmV0dXJuIGpzeHMoXCJzdmdcIiwge1xuICAgIC4uLnByb3BzLFxuICAgIGNoaWxkcmVuOiBbanN4KFwicGF0aFwiLCB7XG4gICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgZDogXCJNMjggNEgxMGEyLjAwNiAyLjAwNiAwIDAgMC0yIDJ2MTRhMi4wMDYgMi4wMDYgMCAwIDAgMiAyaDE4YTIuMDA2IDIuMDA2IDAgMCAwIDItMlY2YTIuMDA2IDIuMDA2IDAgMCAwLTItMlptMCAxNkgxMFY2aDE4WlwiXG4gICAgfSksIGpzeChcInBhdGhcIiwge1xuICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgIGQ6IFwiTTE4IDI2SDRWMTZoMnYtMkg0YTIuMDA2IDIuMDA2IDAgMCAwLTIgMnYxMGEyLjAwNiAyLjAwNiAwIDAgMCAyIDJoMTRhMi4wMDYgMi4wMDYgMCAwIDAgMi0ydi0yaC0yWlwiXG4gICAgfSldXG4gIH0pO1xufTtcblBvcHVwSWNvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHdpZHRoOiBcIjE2XCIsXG4gIGhlaWdodDogXCIxNlwiLFxuICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiXG59O1xuXG5mdW5jdGlvbiBIZWFkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaGVhZGVyUHJvdmlkZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZ2V0RWxlbWVudEljb24sXG4gICAgZ2V0RG9jdW1lbnRhdGlvblJlZixcbiAgICBnZXRFbGVtZW50TGFiZWwsXG4gICAgZ2V0VHlwZUxhYmVsXG4gIH0gPSBoZWFkZXJQcm92aWRlcjtcbiAgY29uc3QgbGFiZWwgPSBnZXRFbGVtZW50TGFiZWwoZWxlbWVudCk7XG4gIGNvbnN0IHR5cGUgPSBnZXRUeXBlTGFiZWwoZWxlbWVudCk7XG4gIGNvbnN0IGRvY3VtZW50YXRpb25SZWYgPSBnZXREb2N1bWVudGF0aW9uUmVmICYmIGdldERvY3VtZW50YXRpb25SZWYoZWxlbWVudCk7XG4gIGNvbnN0IEVsZW1lbnRJY29uID0gZ2V0RWxlbWVudEljb24oZWxlbWVudCk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXJcIixcbiAgICBjaGlsZHJlbjogW2pzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXItaWNvblwiLFxuICAgICAgY2hpbGRyZW46IEVsZW1lbnRJY29uICYmIGpzeChFbGVtZW50SWNvbiwge1xuICAgICAgICB3aWR0aDogXCIzMlwiLFxuICAgICAgICBoZWlnaHQ6IFwiMzJcIixcbiAgICAgICAgdmlld0JveDogXCIwIDAgMzIgMzJcIlxuICAgICAgfSlcbiAgICB9KSwganN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXItbGFiZWxzXCIsXG4gICAgICBjaGlsZHJlbjogW2pzeChcImRpdlwiLCB7XG4gICAgICAgIHRpdGxlOiB0eXBlLFxuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXItdHlwZVwiLFxuICAgICAgICBjaGlsZHJlbjogdHlwZVxuICAgICAgfSksIGxhYmVsID8ganN4KFwiZGl2XCIsIHtcbiAgICAgICAgdGl0bGU6IGxhYmVsLFxuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXItbGFiZWxcIixcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KSA6IG51bGxdXG4gICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1oZWFkZXItYWN0aW9uc1wiLFxuICAgICAgY2hpbGRyZW46IGRvY3VtZW50YXRpb25SZWYgPyBqc3goXCJhXCIsIHtcbiAgICAgICAgcmVsOiBcIm5vcmVmZXJyZXJcIixcbiAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtaGVhZGVyLWxpbmtcIixcbiAgICAgICAgaHJlZjogZG9jdW1lbnRhdGlvblJlZixcbiAgICAgICAgdGl0bGU6IFwiT3BlbiBkb2N1bWVudGF0aW9uXCIsXG4gICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgY2hpbGRyZW46IGpzeChFeHRlcm5hbExpbmtJY29uLCB7fSlcbiAgICAgIH0pIDogbnVsbFxuICAgIH0pXVxuICB9KTtcbn1cblxuY29uc3QgRGVzY3JpcHRpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGRlc2NyaXB0aW9uOiB7fSxcbiAgZ2V0RGVzY3JpcHRpb25Gb3JJZDogKCkgPT4ge31cbn0pO1xuXG5jb25zdCBFcnJvcnNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGVycm9yczoge31cbn0pO1xuXG4vKipcclxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSA8cHJvcGVydGllc1BhbmVsLnNob3dFbnRyeT4gY2FsbGJhY2tcclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogdXNlRXZlbnQoJ3Byb3BlcnRpZXNQYW5lbC5zaG93RW50cnknLCAoeyBmb2N1cyA9IGZhbHNlLCAuLi5yZXN0IH0pID0+IHtcclxuICogICAvLyAuLi5cclxuICogfSk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbnRleHQuZm9jdXNdXHJcbiAqXHJcbiAqIEByZXR1cm5zIHZvaWRcclxuICovXG5cbmNvbnN0IEV2ZW50Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBldmVudEJ1czogbnVsbFxufSk7XG5cbmNvbnN0IExheW91dENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgbGF5b3V0OiB7fSxcbiAgc2V0TGF5b3V0OiAoKSA9PiB7fSxcbiAgZ2V0TGF5b3V0Rm9yS2V5OiAoKSA9PiB7fSxcbiAgc2V0TGF5b3V0Rm9yS2V5OiAoKSA9PiB7fVxufSk7XG5cbmNvbnN0IFRvb2x0aXBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIHRvb2x0aXA6IHt9LFxuICBnZXRUb29sdGlwRm9ySWQ6ICgpID0+IHt9XG59KTtcblxuLyoqXHJcbiAqIEFjY2Vzc2VzIHRoZSBnbG9iYWwgVG9vbHRpcENvbnRleHQgYW5kIHJldHVybnMgYSB0b29sdGlwIGZvciBhIGdpdmVuIGlkIGFuZCBlbGVtZW50LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBqc3hcclxuICogZnVuY3Rpb24gVGV4dEZpZWxkKHByb3BzKSB7XHJcbiAqICAgY29uc3QgdG9vbHRpcCA9IHVzZVRvb2x0aXBDb250ZXh0KCdpbnB1dDEnLCBlbGVtZW50KTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqL1xuZnVuY3Rpb24gdXNlVG9vbHRpcENvbnRleHQoaWQsIGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIGdldFRvb2x0aXBGb3JJZFxuICB9ID0gdXNlQ29udGV4dChUb29sdGlwQ29udGV4dCk7XG4gIHJldHVybiBnZXRUb29sdGlwRm9ySWQoaWQsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBUb29sdGlwV3JhcHBlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZm9ySWQsXG4gICAgZWxlbWVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNvbnRleHREZXNjcmlwdGlvbiA9IHVzZVRvb2x0aXBDb250ZXh0KGZvcklkLCBlbGVtZW50KTtcbiAgY29uc3QgdmFsdWUgPSBwcm9wcy52YWx1ZSB8fCBjb250ZXh0RGVzY3JpcHRpb247XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW47XG4gIH1cbiAgcmV0dXJuIGpzeChUb29sdGlwLCB7XG4gICAgLi4ucHJvcHMsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGZvcklkOiBwcmVmaXhJZCQ5KGZvcklkKVxuICB9KTtcbn1cbmZ1bmN0aW9uIFRvb2x0aXAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGZvcklkLFxuICAgIHZhbHVlLFxuICAgIHBhcmVudCxcbiAgICBkaXJlY3Rpb24gPSAncmlnaHQnLFxuICAgIHBvc2l0aW9uXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW3Zpc2libGUsIHNldFNob3ddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZm9jdXNlZFZpYUtleWJvYXJkLCBzZXRGb2N1c2VkVmlhS2V5Ym9hcmRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBsZXQgdGltZW91dCA9IG51bGw7XG4gIGNvbnN0IHdyYXBwZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRvb2x0aXBSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNob3dUb29sdGlwID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNob3cgPSAoKSA9PiBzZXRTaG93KHRydWUpO1xuICAgIGlmICghdmlzaWJsZSAmJiAhdGltZW91dCkge1xuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChzaG93LCAyMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdygpO1xuICAgICAgICBzZXRGb2N1c2VkVmlhS2V5Ym9hcmQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBoaWRlVG9vbHRpcCA9ICgpID0+IHtcbiAgICBzZXRTaG93KGZhbHNlKTtcbiAgICBzZXRGb2N1c2VkVmlhS2V5Ym9hcmQoZmFsc2UpO1xuICB9O1xuICBjb25zdCBoaWRlVG9vbHRpcFZpYUVzY2FwZSA9IGUgPT4ge1xuICAgIGUuY29kZSA9PT0gJ0VzY2FwZScgJiYgaGlkZVRvb2x0aXAoKTtcbiAgfTtcbiAgY29uc3QgaXNUb29sdGlwSG92ZXJlZCA9ICh7XG4gICAgeCxcbiAgICB5XG4gIH0pID0+IHtcbiAgICBjb25zdCB0b29sdGlwID0gdG9vbHRpcFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IHdyYXBwZXIgPSB3cmFwcGVyUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuIHRvb2x0aXAgJiYgKGluQm91bmRzKHgsIHksIHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpIHx8IGluQm91bmRzKHgsIHksIHRvb2x0aXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKTtcbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50XG4gICAgfSA9IHdyYXBwZXJSZWY7XG4gICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVIb3ZlcmVkVG9vbHRpcCA9IGUgPT4ge1xuICAgICAgY29uc3QgaXNGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gd3JhcHBlclJlZi5jdXJyZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xvc2VzdCgnLmJpby1wcm9wZXJ0aWVzLXBhbmVsLXRvb2x0aXAnKTtcbiAgICAgIGlmICh2aXNpYmxlICYmICFpc1Rvb2x0aXBIb3ZlcmVkKHtcbiAgICAgICAgeDogZS54LFxuICAgICAgICB5OiBlLnlcbiAgICAgIH0pICYmICEoaXNGb2N1c2VkICYmIGZvY3VzZWRWaWFLZXlib2FyZCkpIHtcbiAgICAgICAgaGlkZVRvb2x0aXAoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhpZGVGb2N1c2VkVG9vbHRpcCA9IGUgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9ID0gZTtcbiAgICAgIGNvbnN0IGlzVG9vbHRpcENoaWxkID0gZWwgPT4gISFlbC5jbG9zZXN0KCcuYmlvLXByb3BlcnRpZXMtcGFuZWwtdG9vbHRpcCcpO1xuICAgICAgaWYgKHZpc2libGUgJiYgIWlzSG92ZXJlZCh3cmFwcGVyUmVmLmN1cnJlbnQpICYmIHJlbGF0ZWRUYXJnZXQgJiYgIWlzVG9vbHRpcENoaWxkKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIGhpZGVUb29sdGlwKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIGhpZGVIb3ZlcmVkVG9vbHRpcCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBoaWRlRm9jdXNlZFRvb2x0aXApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhpZGVIb3ZlcmVkVG9vbHRpcCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgaGlkZUhvdmVyZWRUb29sdGlwKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhpZGVIb3ZlcmVkVG9vbHRpcCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIGhpZGVGb2N1c2VkVG9vbHRpcCk7XG4gICAgfTtcbiAgfSwgW3dyYXBwZXJSZWYuY3VycmVudCwgdmlzaWJsZSwgZm9jdXNlZFZpYUtleWJvYXJkXSk7XG4gIGNvbnN0IHJlbmRlclRvb2x0aXAgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGBiaW8tcHJvcGVydGllcy1wYW5lbC10b29sdGlwICR7ZGlyZWN0aW9ufWAsXG4gICAgICByb2xlOiBcInRvb2x0aXBcIixcbiAgICAgIGlkOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRvb2x0aXBcIixcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGZvcklkLFxuICAgICAgc3R5bGU6IHBvc2l0aW9uIHx8IGdldFRvb2x0aXBQb3NpdGlvbih3cmFwcGVyUmVmLmN1cnJlbnQpLFxuICAgICAgcmVmOiB0b29sdGlwUmVmLFxuICAgICAgb25DbGljazogZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpLFxuICAgICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10b29sdGlwLWNvbnRlbnRcIixcbiAgICAgICAgY2hpbGRyZW46IHZhbHVlXG4gICAgICB9KSwganN4KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtdG9vbHRpcC1hcnJvd1wiXG4gICAgICB9KV1cbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRvb2x0aXAtd3JhcHBlclwiLFxuICAgIHRhYkluZGV4OiBcIjBcIixcbiAgICByZWY6IHdyYXBwZXJSZWYsXG4gICAgb25Nb3VzZUVudGVyOiBzaG93VG9vbHRpcCxcbiAgICBvbk1vdXNlTGVhdmU6ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIH0sXG4gICAgb25Gb2N1czogc2hvd1Rvb2x0aXAsXG4gICAgb25LZXlEb3duOiBoaWRlVG9vbHRpcFZpYUVzY2FwZSxcbiAgICBjaGlsZHJlbjogW3Byb3BzLmNoaWxkcmVuLCB2aXNpYmxlID8gcGFyZW50ID8gY3JlYXRlUG9ydGFsKHJlbmRlclRvb2x0aXAoKSwgcGFyZW50LmN1cnJlbnQpIDogcmVuZGVyVG9vbHRpcCgpIDogbnVsbF1cbiAgfSk7XG59XG5cbi8vIGhlbHBlclxuZnVuY3Rpb24gaW5Cb3VuZHMoeCwgeSwgYm91bmRzKSB7XG4gIGNvbnN0IHtcbiAgICB0b3AsXG4gICAgcmlnaHQsXG4gICAgYm90dG9tLFxuICAgIGxlZnRcbiAgfSA9IGJvdW5kcztcbiAgcmV0dXJuIHggPj0gbGVmdCAmJiB4IDw9IHJpZ2h0ICYmIHkgPj0gdG9wICYmIHkgPD0gYm90dG9tO1xufVxuZnVuY3Rpb24gZ2V0VG9vbHRpcFBvc2l0aW9uKHJlZkVsZW1lbnQpIHtcbiAgY29uc3QgcmVmUG9zaXRpb24gPSByZWZFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCByaWdodCA9IGBjYWxjKDEwMCUgLSAke3JlZlBvc2l0aW9uLnh9cHgpYDtcbiAgY29uc3QgdG9wID0gYCR7cmVmUG9zaXRpb24udG9wIC0gMTB9cHhgO1xuICByZXR1cm4gYHJpZ2h0OiAke3JpZ2h0fTsgdG9wOiAke3RvcH07YDtcbn1cbmZ1bmN0aW9uIGlzSG92ZXJlZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpO1xufVxuZnVuY3Rpb24gcHJlZml4SWQkOShpZCkge1xuICByZXR1cm4gYGJpby1wcm9wZXJ0aWVzLXBhbmVsLSR7aWR9YDtcbn1cblxuLyoqXHJcbiAqIEFjY2Vzc2VzIHRoZSBnbG9iYWwgRGVzY3JpcHRpb25Db250ZXh0IGFuZCByZXR1cm5zIGEgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4gaWQgYW5kIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGpzeFxyXG4gKiBmdW5jdGlvbiBUZXh0RmllbGQocHJvcHMpIHtcclxuICogICBjb25zdCBkZXNjcmlwdGlvbiA9IHVzZURlc2NyaXB0aW9uQ29udGV4dCgnaW5wdXQxJywgZWxlbWVudCk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxyXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKi9cbmZ1bmN0aW9uIHVzZURlc2NyaXB0aW9uQ29udGV4dChpZCwgZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgZ2V0RGVzY3JpcHRpb25Gb3JJZFxuICB9ID0gdXNlQ29udGV4dChEZXNjcmlwdGlvbkNvbnRleHQpO1xuICByZXR1cm4gZ2V0RGVzY3JpcHRpb25Gb3JJZChpZCwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHVzZUVycm9yKGlkKSB7XG4gIGNvbnN0IHtcbiAgICBlcnJvcnNcbiAgfSA9IHVzZUNvbnRleHQoRXJyb3JzQ29udGV4dCk7XG4gIHJldHVybiBlcnJvcnNbaWRdO1xufVxuZnVuY3Rpb24gdXNlRXJyb3JzKCkge1xuICBjb25zdCB7XG4gICAgZXJyb3JzXG4gIH0gPSB1c2VDb250ZXh0KEVycm9yc0NvbnRleHQpO1xuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcclxuICogU3Vic2NyaWJlIHRvIGFuIGV2ZW50IGltbWVkaWF0ZWx5LiBVcGRhdGUgc3Vic2NyaXB0aW9uIGFmdGVyIGlucHV0cyBjaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICovXG5mdW5jdGlvbiB1c2VFdmVudChldmVudCwgY2FsbGJhY2ssIGV2ZW50QnVzKSB7XG4gIGNvbnN0IGV2ZW50Q29udGV4dCA9IHVzZUNvbnRleHQoRXZlbnRDb250ZXh0KTtcbiAgaWYgKCFldmVudEJ1cykge1xuICAgICh7XG4gICAgICBldmVudEJ1c1xuICAgIH0gPSBldmVudENvbnRleHQpO1xuICB9XG4gIGNvbnN0IGRpZE1vdW50ID0gdXNlUmVmKGZhbHNlKTtcblxuICAvLyAoMSkgc3Vic2NyaWJlIGltbWVkaWF0ZWx5XG4gIGlmIChldmVudEJ1cyAmJiAhZGlkTW91bnQuY3VycmVudCkge1xuICAgIGV2ZW50QnVzLm9uKGV2ZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyAoMikgdXBkYXRlIHN1YnNjcmlwdGlvbiBhZnRlciBpbnB1dHMgY2hhbmdlZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChldmVudEJ1cyAmJiBkaWRNb3VudC5jdXJyZW50KSB7XG4gICAgICBldmVudEJ1cy5vbihldmVudCwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBkaWRNb3VudC5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGV2ZW50QnVzKSB7XG4gICAgICAgIGV2ZW50QnVzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtjYWxsYmFjaywgZXZlbnQsIGV2ZW50QnVzXSk7XG59XG5cbmNvbnN0IEtFWV9MRU5HVEggPSA2O1xuXG4vKipcclxuICogQ3JlYXRlIGEgcGVyc2lzdGVudCBrZXkgZmFjdG9yeSBmb3IgcGxhaW4gb2JqZWN0cyB3aXRob3V0IGlkLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBqc3hcclxuICogZnVuY3Rpb24gTGlzdCh7IG9iamVjdHMgfSkge1xyXG4gKiAgIGNvbnN0IGdldEtleSA9IHVzZUtleUZhY3RvcnkoKTtcclxuICogICByZXR1cm4gKDxvbD57XHJcbiAqICAgICBvYmplY3RzLm1hcChvYmogPT4ge1xyXG4gKiAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkob2JqKTtcclxuICogICAgICAgcmV0dXJuIDxsaSBrZXk9e2tleX0+b2JqLm5hbWU8L2xpPlxyXG4gKiAgICAgfSlcclxuICogICB9PC9vbD4pO1xyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge2FueVtdfSBkZXBlbmRlbmNpZXNcclxuICogQHJldHVybnMgeyhlbGVtZW50OiBvYmplY3QpID0+IHN0cmluZ31cclxuICovXG5mdW5jdGlvbiB1c2VLZXlGYWN0b3J5KGRlcGVuZGVuY2llcyA9IFtdKSB7XG4gIGNvbnN0IG1hcCA9IHVzZU1lbW8oKCkgPT4gbmV3IE1hcCgpLCBkZXBlbmRlbmNpZXMpO1xuICBjb25zdCBnZXRLZXkgPSBlbCA9PiB7XG4gICAgbGV0IGtleSA9IG1hcC5nZXQoZWwpO1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkuc2xpY2UoLUtFWV9MRU5HVEgpO1xuICAgICAgbWFwLnNldChlbCwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfTtcbiAgcmV0dXJuIGdldEtleTtcbn1cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzdGF0ZSB0aGF0IHBlcnNpc3RzIGluIHRoZSBnbG9iYWwgTGF5b3V0Q29udGV4dC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBganN4XHJcbiAqIGZ1bmN0aW9uIEdyb3VwKHByb3BzKSB7XHJcbiAqICAgY29uc3QgWyBvcGVuLCBzZXRPcGVuIF0gPSB1c2VMYXlvdXRTdGF0ZShbICdncm91cHMnLCAnZm9vJywgJ29wZW4nIF0sIGZhbHNlKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcilbXX0gcGF0aFxyXG4gKiBAcGFyYW0ge2FueX0gW2RlZmF1bHRWYWx1ZV1cclxuICpcclxuICogQHJldHVybnMge1sgYW55LCBGdW5jdGlvbiBdfVxyXG4gKi9cbmZ1bmN0aW9uIHVzZUxheW91dFN0YXRlKHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCB7XG4gICAgZ2V0TGF5b3V0Rm9yS2V5LFxuICAgIHNldExheW91dEZvcktleVxuICB9ID0gdXNlQ29udGV4dChMYXlvdXRDb250ZXh0KTtcbiAgY29uc3QgbGF5b3V0Rm9yS2V5ID0gZ2V0TGF5b3V0Rm9yS2V5KHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG4gIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIHNldExheW91dEZvcktleShwYXRoLCBuZXdWYWx1ZSk7XG4gIH0sIFtzZXRMYXlvdXRGb3JLZXldKTtcbiAgcmV0dXJuIFtsYXlvdXRGb3JLZXksIHNldFN0YXRlXTtcbn1cblxuLyoqXHJcbiAqIEBwaW51c3NpbHZlc3RydXM6IHdlIG5lZWQgdG8gaW50cm9kdWNlIG91ciBvd24gaG9vayB0byBwZXJzaXN0IHRoZSBwcmV2aW91c1xyXG4gKiBzdGF0ZSBvbiB1cGRhdGVzLlxyXG4gKlxyXG4gKiBjZi4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLWZhcS5odG1sI2hvdy10by1nZXQtdGhlLXByZXZpb3VzLXByb3BzLW9yLXN0YXRlXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VQcmV2aW91cyh2YWx1ZSkge1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuXG4vKipcclxuICogU3Vic2NyaWJlIHRvIGBwcm9wZXJ0aWVzUGFuZWwuc2hvd0VudHJ5YC5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ3ByZWFjdCcpLlJlZn1cclxuICovXG5mdW5jdGlvbiB1c2VTaG93RW50cnlFdmVudChpZCkge1xuICBjb25zdCB7XG4gICAgb25TaG93XG4gIH0gPSB1c2VDb250ZXh0KExheW91dENvbnRleHQpO1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgZm9jdXMgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBvblNob3dFbnRyeSA9IHVzZUNhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQuaWQgPT09IGlkKSB7XG4gICAgICBvblNob3coKTtcbiAgICAgIGlmICghZm9jdXMuY3VycmVudCkge1xuICAgICAgICBmb2N1cy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpZF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmb2N1cy5jdXJyZW50ICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbihyZWYuY3VycmVudC5mb2N1cykpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Z1bmN0aW9uKHJlZi5jdXJyZW50LnNlbGVjdCkpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQuc2VsZWN0KCk7XG4gICAgICB9XG4gICAgICBmb2N1cy5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9KTtcbiAgdXNlRXZlbnQoJ3Byb3BlcnRpZXNQYW5lbC5zaG93RW50cnknLCBvblNob3dFbnRyeSk7XG4gIHJldHVybiByZWY7XG59XG5cbi8qKlxyXG4gKiBAY2FsbGJhY2sgc2V0U3RpY2t5XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVcclxuICovXG5cbi8qKlxyXG4gKiBVc2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gaWRlbnRpZnkgd2hlbiBET00gZWxlbWVudCBpcyBpbiBzdGlja3kgbW9kZS5cclxuICogSWYgc3RpY2t5IGlzIG9ic2VydmVyZWQgc2V0U3RpY2t5KHRydWUpIHdpbGwgYmUgY2FsbGVkLlxyXG4gKiBJZiBzdGlja3kgbW9kZSBpcyBsZWZ0LCBzZXRTdGlja3koZmFsc2UpIHdpbGwgYmUgY2FsbGVkLlxyXG4gKlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcmVmXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JvbGxDb250YWluZXJTZWxlY3RvclxyXG4gKiBAcGFyYW0ge3NldFN0aWNreX0gc2V0U3RpY2t5XHJcbiAqL1xuZnVuY3Rpb24gdXNlU3RpY2t5SW50ZXJzZWN0aW9uT2JzZXJ2ZXIocmVmLCBzY3JvbGxDb250YWluZXJTZWxlY3Rvciwgc2V0U3RpY2t5KSB7XG4gIGNvbnN0IFtzY3JvbGxDb250YWluZXIsIHNldFNjcm9sbENvbnRhaW5lcl0gPSB1c2VTdGF0ZShxdWVyeShzY3JvbGxDb250YWluZXJTZWxlY3RvcikpO1xuICBjb25zdCB1cGRhdGVTY3JvbGxDb250YWluZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3U2Nyb2xsQ29udGFpbmVyID0gcXVlcnkoc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpO1xuICAgIGlmIChuZXdTY3JvbGxDb250YWluZXIgIT09IHNjcm9sbENvbnRhaW5lcikge1xuICAgICAgc2V0U2Nyb2xsQ29udGFpbmVyKG5ld1Njcm9sbENvbnRhaW5lcik7XG4gICAgfVxuICB9LCBbc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IsIHNjcm9sbENvbnRhaW5lcl0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHVwZGF0ZVNjcm9sbENvbnRhaW5lcigpO1xuICB9LCBbdXBkYXRlU2Nyb2xsQ29udGFpbmVyXSk7XG4gIHVzZUV2ZW50KCdwcm9wZXJ0aWVzUGFuZWwuYXR0YWNoJywgdXBkYXRlU2Nyb2xsQ29udGFpbmVyKTtcbiAgdXNlRXZlbnQoJ3Byb3BlcnRpZXNQYW5lbC5kZXRhY2gnLCB1cGRhdGVTY3JvbGxDb250YWluZXIpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IE9ic2VydmVyID0gSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICAvLyByZXR1cm4gZWFybHkgaWYgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZVxuICAgIGlmICghT2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPKEBiYXJtYWMpOiB0ZXN0IHRoaXNcbiAgICBpZiAoIXJlZi5jdXJyZW50IHx8ICFzY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAvLyBzY3JvbGwgY29udGFpbmVyIGlzIHVubW91bnRlZCwgZG8gbm90IHVwZGF0ZSBzdGlja3kgc3RhdGVcbiAgICAgIGlmIChzY3JvbGxDb250YWluZXIuc2Nyb2xsSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDEpIHtcbiAgICAgICAgICBzZXRTdGlja3kodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPT09IDEpIHtcbiAgICAgICAgICBzZXRTdGlja3koZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB7XG4gICAgICByb290OiBzY3JvbGxDb250YWluZXIsXG4gICAgICByb290TWFyZ2luOiAnMHB4IDBweCA5OTk5OTklIDBweCcsXG4gICAgICAvLyBVc2UgYm90dG9tIG1hcmdpbiB0byBhdm9pZCBzdGlja3luZXNzIHdoZW4gc2Nyb2xsaW5nIG91dCB0byBib3R0b21cbiAgICAgIHRocmVzaG9sZDogWzFdXG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYuY3VycmVudCk7XG5cbiAgICAvLyBVbm9ic2VydmUgaWYgdW5tb3VudGVkXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShyZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW3JlZi5jdXJyZW50LCBzY3JvbGxDb250YWluZXIsIHNldFN0aWNreV0pO1xufVxuXG4vKipcclxuICogQ3JlYXRlcyBhIHN0YXRpYyBmdW5jdGlvbiByZWZlcmVuY2Ugd2l0aCBjaGFuZ2luZyBib2R5LlxyXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIGV4dGVybmFsIGxpYnJhcmllcyByZXF1aXJlIGEgY2FsbGJhY2sgZnVuY3Rpb25cclxuICogdGhhdCBoYXMgcmVmZXJlbmNlcyB0byBzdGF0ZSB2YXJpYWJsZXMuXHJcbiAqXHJcbiAqIFVzYWdlOlxyXG4gKiBjb25zdCBjYWxsYmFjayA9IHVzZVN0YXRpY0NhbGxiYWNrKCh2YWwpID0+IHt2YWwgPT09IGN1cnJlbnRTdGF0ZX0pO1xyXG4gKlxyXG4gKiBUaGUgYGNhbGxiYWNrYCByZWZlcmVuY2UgaXMgc3RhdGljIGFuZCBjYW4gYmUgc2FmZWx5IHVzZWQgaW4gZXh0ZXJuYWxcclxuICogbGlicmFyaWVzIG9yIGFzIGEgcHJvcCB0aGF0IGRvZXMgbm90IGNhdXNlIHJlcmVuZGVyaW5nIG9mIGNoaWxkcmVuLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGNoYW5naW5nIHJlZmVyZW5jZVxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IHN0YXRpYyBmdW5jdGlvbiByZWZlcmVuY2VcclxuICovXG5mdW5jdGlvbiB1c2VTdGF0aWNDYWxsYmFjayhjYWxsYmFjaykge1xuICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZVJlZihjYWxsYmFjayk7XG4gIGNhbGxiYWNrUmVmLmN1cnJlbnQgPSBjYWxsYmFjaztcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiBjYWxsYmFja1JlZi5jdXJyZW50KC4uLmFyZ3MpLCBbXSk7XG59XG5cbmZ1bmN0aW9uIHVzZUVsZW1lbnRWaXNpYmxlKGVsZW1lbnQpIHtcbiAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUoISFlbGVtZW50ICYmICEhZWxlbWVudC5jbGllbnRIZWlnaHQpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChbZW50cnldKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdWaXNpYmxlID0gISFlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgICAgIGlmIChuZXdWaXNpYmxlICE9PSB2aXNpYmxlKSB7XG4gICAgICAgICAgc2V0VmlzaWJsZShuZXdWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcbiAgICByZXR1cm4gKCkgPT4gcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9LCBbZWxlbWVudCwgdmlzaWJsZV0pO1xuICByZXR1cm4gdmlzaWJsZTtcbn1cblxuZnVuY3Rpb24gR3JvdXAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgZW50cmllcyA9IFtdLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIHNob3VsZE9wZW4gPSBmYWxzZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGdyb3VwUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VMYXlvdXRTdGF0ZShbJ2dyb3VwcycsIGlkLCAnb3BlbiddLCBzaG91bGRPcGVuKTtcbiAgY29uc3Qgb25TaG93ID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0T3Blbih0cnVlKSwgW3NldE9wZW5dKTtcbiAgY29uc3QgdG9nZ2xlT3BlbiA9ICgpID0+IHNldE9wZW4oIW9wZW4pO1xuICBjb25zdCBbZWRpdGVkLCBzZXRFZGl0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RpY2t5LCBzZXRTdGlja3ldID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIC8vIHNldCBlZGl0ZWQgc3RhdGUgZGVwZW5kaW5nIG9uIGFsbCBlbnRyaWVzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVE9ETyhAYmFybWFjKTogcmVwbGFjZSB3aXRoIENTUyB3aGVuIGA6aGFzKClgIGlzIHN1cHBvcnRlZCBpbiBhbGwgbWFqb3IgYnJvd3NlcnMsIG9yIHJld3JpdGUgYXMgaW4gaHR0cHM6Ly9naXRodWIuY29tL2NhbXVuZGEvY2FtdW5kYS1tb2RlbGVyL2lzc3Vlcy8zODE1I2lzc3VlY29tbWVudC0xNzMzMDM4MTYxXG4gICAgY29uc3Qgc2NoZWR1bGVkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhc09uZUVkaXRlZEVudHJ5ID0gZW50cmllcy5maW5kKGVudHJ5ID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGlzRWRpdGVkXG4gICAgICAgIH0gPSBlbnRyeTtcbiAgICAgICAgY29uc3QgZW50cnlOb2RlID0gcXVlcnkoYFtkYXRhLWVudHJ5LWlkPVwiJHtpZH1cIl1gKTtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGlzRWRpdGVkKSB8fCAhZW50cnlOb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0Tm9kZSA9IHF1ZXJ5KCcuYmlvLXByb3BlcnRpZXMtcGFuZWwtaW5wdXQnLCBlbnRyeU5vZGUpO1xuICAgICAgICByZXR1cm4gaXNFZGl0ZWQoaW5wdXROb2RlKTtcbiAgICAgIH0pO1xuICAgICAgc2V0RWRpdGVkKGhhc09uZUVkaXRlZEVudHJ5KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2NoZWR1bGVkKTtcbiAgfSwgW2VudHJpZXMsIHNldEVkaXRlZF0pO1xuXG4gIC8vIHNldCBlcnJvciBzdGF0ZSBkZXBlbmRpbmcgb24gYWxsIGVudHJpZXNcbiAgY29uc3QgYWxsRXJyb3JzID0gdXNlRXJyb3JzKCk7XG4gIGNvbnN0IGhhc0Vycm9ycyA9IGVudHJpZXMuc29tZShlbnRyeSA9PiBhbGxFcnJvcnNbZW50cnkuaWRdKTtcblxuICAvLyBzZXQgY3NzIGNsYXNzIHdoZW4gZ3JvdXAgaXMgc3RpY2t5IHRvIHRvcFxuICB1c2VTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcihncm91cFJlZiwgJ2Rpdi5iaW8tcHJvcGVydGllcy1wYW5lbC1zY3JvbGwtY29udGFpbmVyJywgc2V0U3RpY2t5KTtcbiAgY29uc3QgcHJvcGVydGllc1BhbmVsQ29udGV4dCA9IHtcbiAgICAuLi51c2VDb250ZXh0KExheW91dENvbnRleHQpLFxuICAgIG9uU2hvd1xuICB9O1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZ3JvdXBcIixcbiAgICBcImRhdGEtZ3JvdXAtaWRcIjogJ2dyb3VwLScgKyBpZCxcbiAgICByZWY6IGdyb3VwUmVmLFxuICAgIGNoaWxkcmVuOiBbanN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtZ3JvdXAtaGVhZGVyJywgZWRpdGVkID8gJycgOiAnZW1wdHknLCBvcGVuID8gJ29wZW4nIDogJycsIHN0aWNreSAmJiBvcGVuID8gJ3N0aWNreScgOiAnJyksXG4gICAgICBvbkNsaWNrOiB0b2dnbGVPcGVuLFxuICAgICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgICB0aXRsZTogcHJvcHMudG9vbHRpcCA/IG51bGwgOiBsYWJlbCxcbiAgICAgICAgXCJkYXRhLXRpdGxlXCI6IGxhYmVsLFxuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItdGl0bGVcIixcbiAgICAgICAgY2hpbGRyZW46IGpzeChUb29sdGlwV3JhcHBlciwge1xuICAgICAgICAgIHZhbHVlOiBwcm9wcy50b29sdGlwLFxuICAgICAgICAgIGZvcklkOiAnZ3JvdXAtJyArIGlkLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgcGFyZW50OiBncm91cFJlZixcbiAgICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgICAgfSlcbiAgICAgIH0pLCBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZ3JvdXAtaGVhZGVyLWJ1dHRvbnNcIixcbiAgICAgICAgY2hpbGRyZW46IFtqc3goRGF0YU1hcmtlciwge1xuICAgICAgICAgIGVkaXRlZDogZWRpdGVkLFxuICAgICAgICAgIGhhc0Vycm9yczogaGFzRXJyb3JzXG4gICAgICAgIH0pLCBqc3goXCJidXR0b25cIiwge1xuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgdGl0bGU6IFwiVG9nZ2xlIHNlY3Rpb25cIixcbiAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItYnV0dG9uIGJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93XCIsXG4gICAgICAgICAgY2hpbGRyZW46IGpzeChBcnJvd0ljb24sIHtcbiAgICAgICAgICAgIGNsYXNzOiBvcGVuID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd24nIDogJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LXJpZ2h0J1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pXVxuICAgICAgfSldXG4gICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtZ3JvdXAtZW50cmllcycsIG9wZW4gPyAnb3BlbicgOiAnJyksXG4gICAgICBjaGlsZHJlbjoganN4KExheW91dENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHByb3BlcnRpZXNQYW5lbENvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuOiBlbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH0gPSBlbnRyeTtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgIGtleTogaWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufVxuZnVuY3Rpb24gRGF0YU1hcmtlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWRpdGVkLFxuICAgIGhhc0Vycm9yc1xuICB9ID0gcHJvcHM7XG4gIGlmIChoYXNFcnJvcnMpIHtcbiAgICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICAgIHRpdGxlOiBcIlNlY3Rpb24gY29udGFpbnMgYW4gZXJyb3JcIixcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRvdCBiaW8tcHJvcGVydGllcy1wYW5lbC1kb3QtLWVycm9yXCJcbiAgICB9KTtcbiAgfVxuICBpZiAoZWRpdGVkKSB7XG4gICAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgICB0aXRsZTogXCJTZWN0aW9uIGNvbnRhaW5zIGRhdGFcIixcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRvdFwiXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxyXG4gKiBAdHlwZWRlZiB7IHtcclxuICogIHRleHQ6IChlbGVtZW50OiBvYmplY3QpID0+IHN0cmluZyxcclxuICogIGljb24/OiAoZWxlbWVudDogT2JqZWN0KSA9PiBpbXBvcnQoJ3ByZWFjdCcpLkNvbXBvbmVudFxyXG4gKiB9IH0gUGxhY2Vob2xkZXJEZWZpbml0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7IFBsYWNlaG9sZGVyRGVmaW5pdGlvbiB9IHByb3BzXHJcbiAqL1xuZnVuY3Rpb24gUGxhY2Vob2xkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHRleHQsXG4gICAgaWNvbjogSWNvblxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsIG9wZW5cIixcbiAgICBjaGlsZHJlbjoganN4cyhcInNlY3Rpb25cIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtcGxhY2Vob2xkZXJcIixcbiAgICAgIGNoaWxkcmVuOiBbSWNvbiAmJiBqc3goSWNvbiwge1xuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1wbGFjZWhvbGRlci1pY29uXCJcbiAgICAgIH0pLCBqc3goXCJwXCIsIHtcbiAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtcGxhY2Vob2xkZXItdGV4dFwiLFxuICAgICAgICBjaGlsZHJlbjogdGV4dFxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGZvcklkLFxuICAgIHZhbHVlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29udGV4dERlc2NyaXB0aW9uID0gdXNlRGVzY3JpcHRpb25Db250ZXh0KGZvcklkLCBlbGVtZW50KTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSB2YWx1ZSB8fCBjb250ZXh0RGVzY3JpcHRpb247XG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVzY3JpcHRpb25cIixcbiAgICAgIGNoaWxkcmVuOiBkZXNjcmlwdGlvblxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IG5vb3AkNiA9ICgpID0+IHt9O1xuXG4vKipcclxuICogQnVmZmVyIGAuZm9jdXMoKWAgY2FsbHMgd2hpbGUgdGhlIGVkaXRvciBpcyBub3QgaW5pdGlhbGl6ZWQuXHJcbiAqIFNldCBGb2N1cyBpbnNpZGUgd2hlbiB0aGUgZWRpdG9yIGlzIHJlYWR5LlxyXG4gKi9cbmNvbnN0IHVzZUJ1ZmZlcmVkRm9jdXMkMSA9IGZ1bmN0aW9uIChlZGl0b3IsIHJlZikge1xuICBjb25zdCBbYnVmZmVyLCBzZXRCdWZmZXJdID0gdXNlU3RhdGUodW5kZWZpbmVkKTtcbiAgcmVmLmN1cnJlbnQgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgZm9jdXM6IG9mZnNldCA9PiB7XG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIGVkaXRvci5mb2N1cyhvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QnVmZmVyKG9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuICB9KSwgW2VkaXRvcl0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgYnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5mb2N1cyhidWZmZXIpO1xuICAgICAgc2V0QnVmZmVyKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtlZGl0b3IsIGJ1ZmZlcl0pO1xufTtcbmNvbnN0IENvZGVFZGl0b3IkMSA9IGZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAgY29uc3Qge1xuICAgIG9uSW5wdXQsXG4gICAgZGlzYWJsZWQsXG4gICAgdG9vbHRpcENvbnRhaW5lcixcbiAgICBlbmFibGVHdXR0ZXJzLFxuICAgIHZhbHVlLFxuICAgIG9uTGludCA9IG5vb3AkNixcbiAgICBvblBvcHVwT3BlbiA9IG5vb3AkNixcbiAgICBwb3B1cE9wZW4sXG4gICAgY29udGVudEF0dHJpYnV0ZXMgPSB7fSxcbiAgICBob3N0TGFuZ3VhZ2UgPSBudWxsLFxuICAgIHNpbmdsZUxpbmUgPSBmYWxzZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IFtlZGl0b3IsIHNldEVkaXRvcl0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbbG9jYWxWYWx1ZSwgc2V0TG9jYWxWYWx1ZV0gPSB1c2VTdGF0ZSh2YWx1ZSB8fCAnJyk7XG4gIHVzZUJ1ZmZlcmVkRm9jdXMkMShlZGl0b3IsIHJlZik7XG4gIGNvbnN0IGhhbmRsZUlucHV0ID0gdXNlU3RhdGljQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIG9uSW5wdXQobmV3VmFsdWUpO1xuICAgIHNldExvY2FsVmFsdWUobmV3VmFsdWUpO1xuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZWRpdG9yO1xuICAgIGVkaXRvciA9IG5ldyBGZWVsZXJzRWRpdG9yKHtcbiAgICAgIGNvbnRhaW5lcjogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVJbnB1dCxcbiAgICAgIHZhbHVlOiBsb2NhbFZhbHVlLFxuICAgICAgb25MaW50LFxuICAgICAgY29udGVudEF0dHJpYnV0ZXMsXG4gICAgICB0b29sdGlwQ29udGFpbmVyLFxuICAgICAgZW5hYmxlR3V0dGVycyxcbiAgICAgIGhvc3RMYW5ndWFnZSxcbiAgICAgIHNpbmdsZUxpbmUsXG4gICAgICBsaW5lV3JhcDogdHJ1ZVxuICAgIH0pO1xuICAgIHNldEVkaXRvcihlZGl0b3IpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBvbkxpbnQoW10pO1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgIHNldEVkaXRvcihudWxsKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBsb2NhbFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVkaXRvci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgc2V0TG9jYWxWYWx1ZSh2YWx1ZSk7XG4gIH0sIFt2YWx1ZV0pO1xuICBjb25zdCBoYW5kbGVDbGljayA9ICgpID0+IHtcbiAgICByZWYuY3VycmVudC5mb2N1cygpO1xuICB9O1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWxlcnMtZWRpdG9yLWNvbnRhaW5lcicsIHBvcHVwT3BlbiA/ICdwb3B1cE9wZW4nIDogbnVsbCksXG4gICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZmVlbGVycy1lZGl0b3JfX29wZW4tcG9wdXAtcGxhY2Vob2xkZXJcIixcbiAgICAgIGNoaWxkcmVuOiBcIk9wZW5lZCBpbiBlZGl0b3JcIlxuICAgIH0pLCBqc3goXCJkaXZcIiwge1xuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsZXJzLWVkaXRvciBiaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dCcsIGxvY2FsVmFsdWUgPyAnZWRpdGVkJyA6IG51bGwsIGRpc2FibGVkID8gJ2Rpc2FibGVkJyA6IG51bGwpLFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgfSksIGpzeChcImJ1dHRvblwiLCB7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgdGl0bGU6IFwiT3BlbiBwb3AtdXAgZWRpdG9yXCIsXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1vcGVuLWZlZWwtcG9wdXBcIixcbiAgICAgIG9uQ2xpY2s6ICgpID0+IG9uUG9wdXBPcGVuKCdmZWVsZXJzJyksXG4gICAgICBjaGlsZHJlbjoganN4KFBvcHVwSWNvbiwge30pXG4gICAgfSldXG4gIH0pO1xufSk7XG5cbmNvbnN0IG5vb3AkNSA9ICgpID0+IHt9O1xuXG4vKipcclxuICogQnVmZmVyIGAuZm9jdXMoKWAgY2FsbHMgd2hpbGUgdGhlIGVkaXRvciBpcyBub3QgaW5pdGlhbGl6ZWQuXHJcbiAqIFNldCBGb2N1cyBpbnNpZGUgd2hlbiB0aGUgZWRpdG9yIGlzIHJlYWR5LlxyXG4gKi9cbmNvbnN0IHVzZUJ1ZmZlcmVkRm9jdXMgPSBmdW5jdGlvbiAoZWRpdG9yLCByZWYpIHtcbiAgY29uc3QgW2J1ZmZlciwgc2V0QnVmZmVyXSA9IHVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gIHJlZi5jdXJyZW50ID0gdXNlTWVtbygoKSA9PiAoe1xuICAgIGZvY3VzOiBvZmZzZXQgPT4ge1xuICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICBlZGl0b3IuZm9jdXMob2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIG9mZnNldCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIHNldEJ1ZmZlcihvZmZzZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfSksIFtlZGl0b3JdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoYnVmZmVyKTtcbiAgICAgIHNldEJ1ZmZlcihmYWxzZSk7XG4gICAgfVxuICB9LCBbZWRpdG9yLCBidWZmZXJdKTtcbn07XG5jb25zdCBDb2RlRWRpdG9yID0gZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGVudEF0dHJpYnV0ZXMsXG4gICAgZW5hYmxlR3V0dGVycyxcbiAgICB2YWx1ZSxcbiAgICBvbklucHV0LFxuICAgIG9uRmVlbFRvZ2dsZSA9IG5vb3AkNSxcbiAgICBvbkxpbnQgPSBub29wJDUsXG4gICAgb25Qb3B1cE9wZW4gPSBub29wJDUsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgcG9wdXBPcGVuLFxuICAgIGRpc2FibGVkLFxuICAgIHRvb2x0aXBDb250YWluZXIsXG4gICAgdmFyaWFibGVzXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgW2VkaXRvciwgc2V0RWRpdG9yXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlIHx8ICcnKTtcbiAgdXNlQnVmZmVyZWRGb2N1cyhlZGl0b3IsIHJlZik7XG4gIGNvbnN0IGhhbmRsZUlucHV0ID0gdXNlU3RhdGljQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIG9uSW5wdXQobmV3VmFsdWUpO1xuICAgIHNldExvY2FsVmFsdWUobmV3VmFsdWUpO1xuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgZWRpdG9yO1xuXG4gICAgLyogVHJpZ2dlciBGRUVMIHRvZ2dsZSB3aGVuXHJcbiAgICAgKlxyXG4gICAgICogLSBgYmFja3NwYWNlYCBpcyBwcmVzc2VkXHJcbiAgICAgKiAtIEFORCB0aGUgY3Vyc29yIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0XHJcbiAgICAgKi9cbiAgICBjb25zdCBvbktleURvd24gPSBlID0+IHtcbiAgICAgIGlmIChlLmtleSAhPT0gJ0JhY2tzcGFjZScgfHwgIWVkaXRvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5yYW5nZXNbc2VsZWN0aW9uLm1haW5JbmRleF07XG4gICAgICBpZiAocmFuZ2UuZnJvbSA9PT0gMCAmJiByYW5nZS50byA9PT0gMCkge1xuICAgICAgICBvbkZlZWxUb2dnbGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVkaXRvciA9IG5ldyBGZWVsRWRpdG9yKHtcbiAgICAgIGNvbnRhaW5lcjogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVJbnB1dCxcbiAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgICAgb25MaW50OiBvbkxpbnQsXG4gICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICB0b29sdGlwQ29udGFpbmVyOiB0b29sdGlwQ29udGFpbmVyLFxuICAgICAgdmFsdWU6IGxvY2FsVmFsdWUsXG4gICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgIGV4dGVuc2lvbnM6IFsuLi4oZW5hYmxlR3V0dGVycyA/IFtsaW5lTnVtYmVycygpXSA6IFtdKSwgRWRpdG9yVmlldy5saW5lV3JhcHBpbmddLFxuICAgICAgY29udGVudEF0dHJpYnV0ZXNcbiAgICB9KTtcbiAgICBzZXRFZGl0b3IoZWRpdG9yKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgb25MaW50KFtdKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICBzZXRFZGl0b3IobnVsbCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gbG9jYWxWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3Iuc2V0VmFsdWUodmFsdWUpO1xuICAgIHNldExvY2FsVmFsdWUodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3Iuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gIH0sIFt2YXJpYWJsZXNdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlZGl0b3Iuc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXIpO1xuICB9LCBbcGxhY2Vob2xkZXJdKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgfTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsLWVkaXRvci1jb250YWluZXInLCBkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsLCBwb3B1cE9wZW4gPyAncG9wdXBPcGVuJyA6IG51bGwpLFxuICAgIGNoaWxkcmVuOiBbanN4KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWwtZWRpdG9yX19vcGVuLXBvcHVwLXBsYWNlaG9sZGVyXCIsXG4gICAgICBjaGlsZHJlbjogXCJPcGVuZWQgaW4gZWRpdG9yXCJcbiAgICB9KSwganN4KFwiZGl2XCIsIHtcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtaW5wdXQnLCBsb2NhbFZhbHVlID8gJ2VkaXRlZCcgOiBudWxsKSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBvbkNsaWNrOiBoYW5kbGVDbGlja1xuICAgIH0pLCBqc3goXCJidXR0b25cIiwge1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIHRpdGxlOiBcIk9wZW4gcG9wLXVwIGVkaXRvclwiLFxuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtb3Blbi1mZWVsLXBvcHVwXCIsXG4gICAgICBvbkNsaWNrOiAoKSA9PiBvblBvcHVwT3BlbigpLFxuICAgICAgY2hpbGRyZW46IGpzeChQb3B1cEljb24sIHt9KVxuICAgIH0pXVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBGZWVsSW5kaWNhdG9yKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVcbiAgfSA9IHByb3BzO1xuICBpZiAoIWFjdGl2ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsLWluZGljYXRvclwiLFxuICAgIGNoaWxkcmVuOiBcIj1cIlxuICB9KTtcbn1cblxuY29uc3Qgbm9vcCQ0ID0gKCkgPT4ge307XG5cbi8qKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzLmxhYmVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5mZWVsXHJcbiAqL1xuZnVuY3Rpb24gRmVlbEljb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGZlZWwgPSBmYWxzZSxcbiAgICBhY3RpdmUsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBvbkNsaWNrID0gbm9vcCQ0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZmVlbFJlcXVpcmVkTGFiZWwgPSAnRkVFTCBleHByZXNzaW9uIGlzIG1hbmRhdG9yeSc7XG4gIGNvbnN0IGZlZWxPcHRpb25hbExhYmVsID0gYENsaWNrIHRvICR7YWN0aXZlID8gJ3JlbW92ZScgOiAnc2V0IGEnfSBkeW5hbWljIHZhbHVlIHdpdGggRkVFTCBleHByZXNzaW9uYDtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBlID0+IHtcbiAgICBvbkNsaWNrKGUpO1xuXG4gICAgLy8gd2hlbiBwb2ludGVyIGV2ZW50IHdhcyBjcmVhdGVkIGZyb20ga2V5Ym9hcmQsIGtlZXAgZm9jdXMgb24gYnV0dG9uXG4gICAgaWYgKCFlLnBvaW50ZXJUeXBlKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGpzeChcImJ1dHRvblwiLCB7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtZmVlbC1pY29uJywgYWN0aXZlID8gJ2FjdGl2ZScgOiBudWxsLCBmZWVsID09PSAncmVxdWlyZWQnID8gJ3JlcXVpcmVkJyA6ICdvcHRpb25hbCcpLFxuICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICAgIGRpc2FibGVkOiBmZWVsID09PSAncmVxdWlyZWQnIHx8IGRpc2FibGVkLFxuICAgIHRpdGxlOiBmZWVsID09PSAncmVxdWlyZWQnID8gZmVlbFJlcXVpcmVkTGFiZWwgOiBmZWVsT3B0aW9uYWxMYWJlbCxcbiAgICBjaGlsZHJlbjoganN4KEZlZWxJY29uJDEsIHt9KVxuICB9KTtcbn1cblxuY29uc3QgRmVlbFBvcHVwQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBvcGVuOiAoKSA9PiB7fSxcbiAgY2xvc2U6ICgpID0+IHt9LFxuICBzb3VyY2U6IG51bGxcbn0pO1xuXG4vKipcclxuICogQWRkIGEgZHJhZ2dlciB0aGF0IGNhbGxzIGJhY2sgdGhlIHBhc3NlZCBmdW5jdGlvbiB3aXRoXHJcbiAqIHsgZXZlbnQsIGRlbHRhIH0gb24gZHJhZy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogZnVuY3Rpb24gZHJhZ01vdmUoZXZlbnQsIGRlbHRhKSB7XHJcbiAqICAgLy8gd2UgYXJlIGRyYWdnaW5nICghISlcclxuICogfVxyXG4gKlxyXG4gKiBkb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGRyYWdnZXIoZHJhZ01vdmUpKTtcclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHBhcmFtIHtFbGVtZW50fSBbZHJhZ1ByZXZpZXddXHJcbiAqXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBkcmFnIHN0YXJ0IGNhbGxiYWNrIGZ1bmN0aW9uXHJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRHJhZ2dlcihmbiwgZHJhZ1ByZXZpZXcpIHtcbiAgbGV0IHNlbGY7XG4gIGxldCBzdGFydFgsIHN0YXJ0WTtcblxuICAvKiogZHJhZyBzdGFydCAqL1xuICBmdW5jdGlvbiBvbkRyYWdTdGFydChldmVudCkge1xuICAgIHNlbGYgPSB0aGlzO1xuICAgIHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcblxuICAgIC8vICgxKSBwcmV2ZW50IHByZXZpZXcgaW1hZ2VcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGRyYWdQcmV2aWV3IHx8IGVtcHR5Q2FudmFzKCksIDAsIDApO1xuICAgIH1cblxuICAgIC8vICgyKSBzZXR1cCBkcmFnIGxpc3RlbmVyc1xuXG4gICAgLy8gYXR0YWNoIGRyYWcgKyBjbGVhbnVwIGV2ZW50XG4gICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHRvIG1ha2Ugc3VyZSB3ZSB0cmFjayBjdXJzb3JcbiAgICAvLyBtb3ZlbWVudHMgYmVmb3JlIHdlIHJlYWNoIG90aGVyIGRyYWcgZXZlbnQgaGFuZGxlcnMsXG4gICAgLy8gZS5nLiBpbiBjaGlsZCBjb250YWluZXJzLlxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnLCB0cnVlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCBwcmV2ZW50RGVmYXVsdCwgdHJ1ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIG9uRW5kKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgcHJldmVudERlZmF1bHQpO1xuICB9XG4gIGZ1bmN0aW9uIG9uRHJhZyhldmVudCkge1xuICAgIGNvbnN0IGRlbHRhID0ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCAtIHN0YXJ0WCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSBzdGFydFlcbiAgICB9O1xuXG4gICAgLy8gY2FsbCBwcm92aWRlZCBmbiB3aXRoIGV2ZW50LCBkZWx0YVxuICAgIHJldHVybiBmbi5jYWxsKHNlbGYsIGV2ZW50LCBkZWx0YSk7XG4gIH1cbiAgZnVuY3Rpb24gb25FbmQoKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRyYWcsIHRydWUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIHByZXZlbnREZWZhdWx0LCB0cnVlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgb25FbmQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBwcmV2ZW50RGVmYXVsdCk7XG4gIH1cbiAgcmV0dXJuIG9uRHJhZ1N0YXJ0O1xufVxuZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5mdW5jdGlvbiBlbXB0eUNhbnZhcygpIHtcbiAgcmV0dXJuIGRvbWlmeSgnPGNhbnZhcyB3aWR0aD1cIjBcIiBoZWlnaHQ9XCIwXCIgLz4nKTtcbn1cblxuY29uc3Qgbm9vcCQzID0gKCkgPT4ge307XG5cbi8qKlxyXG4gKiBBIGdlbmVyaWMgcG9wdXAgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3Byb3BzLmNvbnRhaW5lcl1cclxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wcy5jbGFzc05hbWVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmRlbGF5SW5pdGlhbEZvY3VzXVxyXG4gKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IFtwcm9wcy5wb3NpdGlvbl1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy53aWR0aF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5oZWlnaHRdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQ2xvc2VcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLm9uUG9zdEFjdGl2YXRlXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMub25Qb3N0RGVhY3RpdmF0ZV1cclxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMucmV0dXJuRm9jdXNdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmNsb3NlT25Fc2NhcGVdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wcy50aXRsZVxyXG4gKiBAcGFyYW0ge1JlZn0gW3JlZl1cclxuICovXG5mdW5jdGlvbiBQb3B1cENvbXBvbmVudChwcm9wcywgZ2xvYmFsUmVmKSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIGRlbGF5SW5pdGlhbEZvY3VzLFxuICAgIHBvc2l0aW9uLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBvbkNsb3NlLFxuICAgIG9uUG9zdEFjdGl2YXRlID0gbm9vcCQzLFxuICAgIG9uUG9zdERlYWN0aXZhdGUgPSBub29wJDMsXG4gICAgcmV0dXJuRm9jdXMgPSB0cnVlLFxuICAgIGNsb3NlT25Fc2NhcGUgPSB0cnVlLFxuICAgIHRpdGxlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZm9jdXNUcmFwUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBsb2NhbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgcG9wdXBSZWYgPSBnbG9iYWxSZWYgfHwgbG9jYWxSZWY7XG4gIGNvbnN0IGNvbnRhaW5lck5vZGUgPSB1c2VNZW1vKCgpID0+IGdldENvbnRhaW5lck5vZGUoY29udGFpbmVyKSwgW2NvbnRhaW5lcl0pO1xuICBjb25zdCBoYW5kbGVLZXlkb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIGRvIG5vdCBhbGxvdyBrZXlib2FyZCBldmVudHMgdG8gYnViYmxlXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNsb3NlT25Fc2NhcGUgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyByZS1hY3RpdmF0ZSBmb2N1cyB0cmFwIG9uIGZvY3VzXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIGlmIChmb2N1c1RyYXBSZWYuY3VycmVudCkge1xuICAgICAgZm9jdXNUcmFwUmVmLmN1cnJlbnQuYWN0aXZhdGUoKTtcbiAgICB9XG4gIH07XG4gIGxldCBzdHlsZSA9IHt9O1xuICBpZiAocG9zaXRpb24pIHtcbiAgICBzdHlsZSA9IHtcbiAgICAgIC4uLnN0eWxlLFxuICAgICAgdG9wOiBwb3NpdGlvbi50b3AgKyAncHgnLFxuICAgICAgbGVmdDogcG9zaXRpb24ubGVmdCArICdweCdcbiAgICB9O1xuICB9XG4gIGlmICh3aWR0aCkge1xuICAgIHN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICB9XG4gIGlmIChoZWlnaHQpIHtcbiAgICBzdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICB9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBvcHVwUmVmLmN1cnJlbnQpIHtcbiAgICAgIHBvcHVwUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGhhbmRsZUZvY3VzKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHBvcHVwUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGhhbmRsZUZvY3VzKTtcbiAgICB9O1xuICB9LCBbcG9wdXBSZWZdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocG9wdXBSZWYuY3VycmVudCkge1xuICAgICAgZm9jdXNUcmFwUmVmLmN1cnJlbnQgPSBmb2N1c1RyYXAuY3JlYXRlRm9jdXNUcmFwKHBvcHVwUmVmLmN1cnJlbnQsIHtcbiAgICAgICAgY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6IHRydWUsXG4gICAgICAgIGRlbGF5SW5pdGlhbEZvY3VzLFxuICAgICAgICBmYWxsYmFja0ZvY3VzOiBwb3B1cFJlZi5jdXJyZW50LFxuICAgICAgICBvblBvc3RBY3RpdmF0ZSxcbiAgICAgICAgb25Qb3N0RGVhY3RpdmF0ZSxcbiAgICAgICAgcmV0dXJuRm9jdXNPbkRlYWN0aXZhdGU6IHJldHVybkZvY3VzXG4gICAgICB9KTtcbiAgICAgIGZvY3VzVHJhcFJlZi5jdXJyZW50LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiBmb2N1c1RyYXBSZWYuY3VycmVudCAmJiBmb2N1c1RyYXBSZWYuY3VycmVudC5kZWFjdGl2YXRlKCk7XG4gIH0sIFtwb3B1cFJlZl0pO1xuICB1c2VFdmVudCgncHJvcGVydGllc1BhbmVsLmRldGFjaCcsIG9uQ2xvc2UpO1xuICByZXR1cm4gY3JlYXRlUG9ydGFsKGpzeChcImRpdlwiLCB7XG4gICAgXCJhcmlhLWxhYmVsXCI6IHRpdGxlLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICByZWY6IHBvcHVwUmVmLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5ZG93bixcbiAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1wb3B1cCcsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlblxuICB9KSwgY29udGFpbmVyTm9kZSB8fCBkb2N1bWVudC5ib2R5KTtcbn1cbmNvbnN0IFBvcHVwID0gZm9yd2FyZFJlZihQb3B1cENvbXBvbmVudCk7XG5Qb3B1cC5UaXRsZSA9IFRpdGxlO1xuUG9wdXAuQm9keSA9IEJvZHk7XG5Qb3B1cC5Gb290ZXIgPSBGb290ZXI7XG5mdW5jdGlvbiBUaXRsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRyYWdnYWJsZSxcbiAgICBlbWl0ID0gKCkgPT4ge30sXG4gICAgdGl0bGUsXG4gICAgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2UsXG4gICAgY2xvc2VCdXR0b25Ub29sdGlwID0gJ0Nsb3NlIHBvcHVwJyxcbiAgICBvbkNsb3NlLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuXG4gIC8vIHdlIGNhbid0IHVzZSBzdGF0ZSBhcyB3ZSBuZWVkIHRvXG4gIC8vIG1hbmlwdWxhdGUgdGhpcyBpbnNpZGUgZHJhZ2dpbmcgZXZlbnRzXG4gIGNvbnN0IGNvbnRleHQgPSB1c2VSZWYoe1xuICAgIHN0YXJ0UG9zaXRpb246IG51bGwsXG4gICAgbmV3UG9zaXRpb246IG51bGxcbiAgfSk7XG4gIGNvbnN0IGRyYWdQcmV2aWV3UmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IHRpdGxlUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IG9uTW92ZSA9IChldmVudCwgZGVsdGEpID0+IHtcbiAgICBjYW5jZWwoZXZlbnQpO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IGR4LFxuICAgICAgeTogZHlcbiAgICB9ID0gZGVsdGE7XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSB7XG4gICAgICB4OiBjb250ZXh0LmN1cnJlbnQuc3RhcnRQb3NpdGlvbi54ICsgZHgsXG4gICAgICB5OiBjb250ZXh0LmN1cnJlbnQuc3RhcnRQb3NpdGlvbi55ICsgZHlcbiAgICB9O1xuICAgIGNvbnN0IHBvcHVwUGFyZW50ID0gZ2V0UG9wdXBQYXJlbnQodGl0bGVSZWYuY3VycmVudCk7XG4gICAgcG9wdXBQYXJlbnQuc3R5bGUudG9wID0gbmV3UG9zaXRpb24ueSArICdweCc7XG4gICAgcG9wdXBQYXJlbnQuc3R5bGUubGVmdCA9IG5ld1Bvc2l0aW9uLnggKyAncHgnO1xuXG4gICAgLy8gbm90aWZ5IGludGVyZXN0ZWQgcGFydGllc1xuICAgIGVtaXQoJ2RyYWdvdmVyJywge1xuICAgICAgbmV3UG9zaXRpb24sXG4gICAgICBkZWx0YVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBvbk1vdmVTdGFydCA9IGV2ZW50ID0+IHtcbiAgICAvLyBpbml0aWFsaXplIGRyYWcgaGFuZGxlclxuICAgIGNvbnN0IG9uRHJhZ1N0YXJ0ID0gY3JlYXRlRHJhZ2dlcihvbk1vdmUsIGRyYWdQcmV2aWV3UmVmLmN1cnJlbnQpO1xuICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBwb3B1cFBhcmVudCA9IGdldFBvcHVwUGFyZW50KHRpdGxlUmVmLmN1cnJlbnQpO1xuICAgIGNvbnN0IGJvdW5kcyA9IHBvcHVwUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnRleHQuY3VycmVudC5zdGFydFBvc2l0aW9uID0ge1xuICAgICAgeDogYm91bmRzLmxlZnQsXG4gICAgICB5OiBib3VuZHMudG9wXG4gICAgfTtcblxuICAgIC8vIG5vdGlmeSBpbnRlcmVzdGVkIHBhcnRpZXNcbiAgICBlbWl0KCdkcmFnc3RhcnQnKTtcbiAgfTtcbiAgY29uc3Qgb25Nb3ZlRW5kID0gKCkgPT4ge1xuICAgIGNvbnRleHQuY3VycmVudC5uZXdQb3NpdGlvbiA9IG51bGw7XG5cbiAgICAvLyBub3RpZnkgaW50ZXJlc3RlZCBwYXJ0aWVzXG4gICAgZW1pdCgnZHJhZ2VuZCcpO1xuICB9O1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLXBvcHVwX19oZWFkZXInLCBkcmFnZ2FibGUgJiYgJ2RyYWdnYWJsZScsIGNsYXNzTmFtZSksXG4gICAgcmVmOiB0aXRsZVJlZixcbiAgICBkcmFnZ2FibGU6IGRyYWdnYWJsZSxcbiAgICBvbkRyYWdTdGFydDogb25Nb3ZlU3RhcnQsXG4gICAgb25EcmFnRW5kOiBvbk1vdmVFbmQsXG4gICAgLi4ucmVzdCxcbiAgICBjaGlsZHJlbjogW2RyYWdnYWJsZSAmJiBqc3hzKEZyYWdtZW50LCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcImRpdlwiLCB7XG4gICAgICAgIHJlZjogZHJhZ1ByZXZpZXdSZWYsXG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXBvcHVwX19kcmFnLXByZXZpZXdcIlxuICAgICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXBvcHVwX19kcmFnLWhhbmRsZVwiLFxuICAgICAgICBjaGlsZHJlbjoganN4KERyYWdJY29uLCB7fSlcbiAgICAgIH0pXVxuICAgIH0pLCBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtcG9wdXBfX3RpdGxlXCIsXG4gICAgICBjaGlsZHJlbjogdGl0bGVcbiAgICB9KSwgY2hpbGRyZW4sIHNob3dDbG9zZUJ1dHRvbiAmJiBqc3goXCJidXR0b25cIiwge1xuICAgICAgdGl0bGU6IGNsb3NlQnV0dG9uVG9vbHRpcCxcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXBvcHVwX19jbG9zZVwiLFxuICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgIGNoaWxkcmVuOiBqc3goQ2xvc2VJY29uLCB7fSlcbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBCb2R5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1wb3B1cF9fYm9keScsIGNsYXNzTmFtZSksXG4gICAgLi4ucmVzdCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59XG5mdW5jdGlvbiBGb290ZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLXBvcHVwX19mb290ZXInLCBjbGFzc05hbWUpLFxuICAgIC4uLnJlc3QsXG4gICAgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuXG4gIH0pO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0UG9wdXBQYXJlbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbG9zZXN0KCcuYmlvLXByb3BlcnRpZXMtcGFuZWwtcG9wdXAnKTtcbn1cbmZ1bmN0aW9uIGNhbmNlbChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lck5vZGUobm9kZSkge1xuICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHF1ZXJ5KG5vZGUpO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG5jb25zdCBGRUVMX1BPUFVQX1dJRFRIID0gNzAwO1xuY29uc3QgRkVFTF9QT1BVUF9IRUlHSFQgPSAyNTA7XG5cbi8qKlxyXG4gKiBGRUVMIHBvcHVwIGNvbXBvbmVudCwgYnVpbHQgYXMgYSBzaW5nbGV0b24uIEVtaXRzIGxpZmVjeWNsZSBldmVudHMgYXMgZm9sbG93czpcclxuICogIC0gYGZlZWxQb3B1cC5vcGVuYCAtIGZpcmVkIGJlZm9yZSB0aGUgcG9wdXAgaXMgbW91bnRlZFxyXG4gKiAgLSBgZmVlbFBvcHVwLm9wZW5lZGAgLSBmaXJlZCBhZnRlciB0aGUgcG9wdXAgaXMgbW91bnRlZC4gRXZlbnQgY29udGV4dCBjb250YWlucyB0aGUgRE9NIG5vZGUgb2YgdGhlIHBvcHVwXHJcbiAqICAtIGBmZWVsUG9wdXAuY2xvc2VgIC0gZmlyZWQgYmVmb3JlIHRoZSBwb3B1cCBpcyB1bm1vdW50ZWQuIEV2ZW50IGNvbnRleHQgY29udGFpbnMgdGhlIERPTSBub2RlIG9mIHRoZSBwb3B1cFxyXG4gKiAgLSBgZmVlbFBvcHVwLmNsb3NlZGAgLSBmaXJlZCBhZnRlciB0aGUgcG9wdXAgaXMgdW5tb3VudGVkXHJcbiAqL1xuZnVuY3Rpb24gRkVFTFBvcHVwUm9vdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBldmVudEJ1cyA9IHtcbiAgICAgIGZpcmUoKSB7fSxcbiAgICAgIG9uKCkge30sXG4gICAgICBvZmYoKSB7fVxuICAgIH0sXG4gICAgcG9wdXBDb250YWluZXIsXG4gICAgZ2V0UG9wdXBMaW5rcyA9ICgpID0+IFtdXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcHJldkVsZW1lbnQgPSB1c2VQcmV2aW91cyhlbGVtZW50KTtcbiAgY29uc3QgW3BvcHVwQ29uZmlnLCBzZXRQb3B1cENvbmZpZ10gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NvdXJjZSwgc2V0U291cmNlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbc291cmNlRWxlbWVudCwgc2V0U291cmNlRWxlbWVudF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZW1pdCA9ICh0eXBlLCBjb250ZXh0KSA9PiB7XG4gICAgZXZlbnRCdXMuZmlyZSgnZmVlbFBvcHVwLicgKyB0eXBlLCBjb250ZXh0KTtcbiAgfTtcbiAgY29uc3QgaXNPcGVuID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJldHVybiAhIW9wZW47XG4gIH0sIFtvcGVuXSk7XG4gIHVzZVVwZGF0ZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICBlbWl0KCdjbG9zZWQnKTtcbiAgICB9XG4gIH0sIFtvcGVuXSk7XG4gIGNvbnN0IGhhbmRsZU9wZW4gPSAoZW50cnlJZCwgY29uZmlnLCBfc291cmNlRWxlbWVudCkgPT4ge1xuICAgIHNldFNvdXJjZShlbnRyeUlkKTtcbiAgICBzZXRQb3B1cENvbmZpZyhjb25maWcpO1xuICAgIHNldE9wZW4odHJ1ZSk7XG4gICAgc2V0U291cmNlRWxlbWVudChfc291cmNlRWxlbWVudCk7XG4gICAgZW1pdCgnb3BlbicpO1xuICB9O1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IChldmVudCA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgaWRcbiAgICB9ID0gZXZlbnQ7XG4gICAgaWYgKGlkICYmIGlkICE9PSBzb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0T3BlbihmYWxzZSk7XG4gICAgc2V0U291cmNlKG51bGwpO1xuICB9O1xuICBjb25zdCBmZWVsUG9wdXBDb250ZXh0ID0ge1xuICAgIG9wZW46IGhhbmRsZU9wZW4sXG4gICAgY2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgIHNvdXJjZVxuICB9O1xuXG4gIC8vIGNsb3NlIHBvcHVwIG9uIGVsZW1lbnQgY2hhbmdlLCBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vcHJvcGVydGllcy1wYW5lbC9pc3N1ZXMvMjcwXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQgJiYgcHJldkVsZW1lbnQgJiYgZWxlbWVudCAhPT0gcHJldkVsZW1lbnQpIHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfVxuICB9LCBbZWxlbWVudF0pO1xuXG4gIC8vIGFsbG93IGNsb3NlIGFuZCBvcGVuIHZpYSBldmVudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVQb3B1cE9wZW4gPSBjb250ZXh0ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZW50cnlJZCxcbiAgICAgICAgcG9wdXBDb25maWcsXG4gICAgICAgIHNvdXJjZUVsZW1lbnRcbiAgICAgIH0gPSBjb250ZXh0O1xuICAgICAgaGFuZGxlT3BlbihlbnRyeUlkLCBwb3B1cENvbmZpZywgc291cmNlRWxlbWVudCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVJc09wZW4gPSAoKSA9PiB7XG4gICAgICByZXR1cm4gaXNPcGVuKCk7XG4gICAgfTtcbiAgICBldmVudEJ1cy5vbignZmVlbFBvcHVwLl9jbG9zZScsIGhhbmRsZUNsb3NlKTtcbiAgICBldmVudEJ1cy5vbignZmVlbFBvcHVwLl9vcGVuJywgaGFuZGxlUG9wdXBPcGVuKTtcbiAgICBldmVudEJ1cy5vbignZmVlbFBvcHVwLl9pc09wZW4nLCBoYW5kbGVJc09wZW4pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBldmVudEJ1cy5vZmYoJ2ZlZWxQb3B1cC5fY2xvc2UnLCBoYW5kbGVDbG9zZSk7XG4gICAgICBldmVudEJ1cy5vZmYoJ2ZlZWxQb3B1cC5fb3BlbicsIGhhbmRsZU9wZW4pO1xuICAgICAgZXZlbnRCdXMub2ZmKCdmZWVsUG9wdXAuX2lzT3BlbicsIGhhbmRsZUlzT3Blbik7XG4gICAgfTtcbiAgfSwgW2V2ZW50QnVzLCBpc09wZW5dKTtcbiAgcmV0dXJuIGpzeHMoRmVlbFBvcHVwQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBmZWVsUG9wdXBDb250ZXh0LFxuICAgIGNoaWxkcmVuOiBbb3BlbiAmJiBqc3goRmVlbFBvcHVwQ29tcG9uZW50LCB7XG4gICAgICBvbkNsb3NlOiBoYW5kbGVDbG9zZSxcbiAgICAgIGNvbnRhaW5lcjogcG9wdXBDb250YWluZXIsXG4gICAgICBnZXRMaW5rczogZ2V0UG9wdXBMaW5rcyxcbiAgICAgIHNvdXJjZUVsZW1lbnQ6IHNvdXJjZUVsZW1lbnQsXG4gICAgICBlbWl0OiBlbWl0LFxuICAgICAgLi4ucG9wdXBDb25maWdcbiAgICB9KSwgcHJvcHMuY2hpbGRyZW5dXG4gIH0pO1xufVxuZnVuY3Rpb24gRmVlbFBvcHVwQ29tcG9uZW50KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgZ2V0TGlua3MsXG4gICAgaWQsXG4gICAgaG9zdExhbmd1YWdlLFxuICAgIG9uSW5wdXQsXG4gICAgb25DbG9zZSxcbiAgICBwb3NpdGlvbixcbiAgICBzaW5nbGVMaW5lLFxuICAgIHNvdXJjZUVsZW1lbnQsXG4gICAgdGl0bGUsXG4gICAgdG9vbHRpcENvbnRhaW5lcixcbiAgICB0eXBlLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhYmxlcyxcbiAgICBlbWl0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IHBvcHVwUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGlzQXV0b0NvbXBsZXRpb25PcGVuID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlU2V0UmV0dXJuRm9jdXMgPSAoKSA9PiB7XG4gICAgc291cmNlRWxlbWVudCAmJiBzb3VyY2VFbGVtZW50LmZvY3VzKCk7XG4gIH07XG4gIGNvbnN0IG9uS2V5RG93bkNhcHR1cmUgPSBldmVudCA9PiB7XG4gICAgLy8gd2UgdXNlIGNhcHR1cmUgaGVyZSB0byBtYWtlIHN1cmUgd2UgaGFuZGxlIHRoZSBldmVudCBiZWZvcmUgdGhlIGVkaXRvciBkb2VzXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGlzQXV0b0NvbXBsZXRpb25PcGVuLmN1cnJlbnQgPSBhdXRvQ29tcGxldGlvbk9wZW4oZXZlbnQudGFyZ2V0KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9uS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgLy8gY2xvc2UgcG9wdXAgb25seSBpZiBhdXRvIGNvbXBsZXRpb24gaXMgbm90IG9wZW5cbiAgICAgIC8vIHdlIG5lZWQgdG8gZG8gY2hlY2sgdGhpcyBiZWNhdXNlIHRoZSBlZGl0b3IgaXMgbm90XG4gICAgICAvLyBzdG9wIHByb3BhZ2F0aW5nIHRoZSBrZXlkb3duIGV2ZW50XG4gICAgICAvLyBjZi4gaHR0cHM6Ly9kaXNjdXNzLmNvZGVtaXJyb3IubmV0L3QvaG93LWNhbi1pLXJlcGxhY2UtdGhlLWRlZmF1bHQtYXV0b2NvbXBsZXRpb24ta2V5bWFwLXY2LzMzMjIvNVxuICAgICAgaWYgKCFpc0F1dG9Db21wbGV0aW9uT3Blbi5jdXJyZW50KSB7XG4gICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgaXNBdXRvQ29tcGxldGlvbk9wZW4uY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBlbWl0KCdvcGVuZWQnLCB7XG4gICAgICBkb21Ob2RlOiBwb3B1cFJlZi5jdXJyZW50XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IGVtaXQoJ2Nsb3NlJywge1xuICAgICAgZG9tTm9kZTogcG9wdXBSZWYuY3VycmVudFxuICAgIH0pO1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2V0IGZvY3VzIG9uIGVkaXRvciB3aGVuIHBvcHVwIGlzIG9wZW5lZFxuICAgIGlmIChlZGl0b3JSZWYuY3VycmVudCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtlZGl0b3JSZWZdKTtcbiAgcmV0dXJuIGpzeHMoUG9wdXAsIHtcbiAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICBjbGFzc05hbWU6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZmVlbC1wb3B1cFwiLFxuICAgIGVtaXQ6IGVtaXQsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIHRpdGxlOiB0aXRsZSxcbiAgICBvbkNsb3NlOiBvbkNsb3NlXG5cbiAgICAvLyBoYW5kbGUgZm9jdXMgbWFudWFsbHkgb24gZGVhY3RpdmF0ZVxuICAgICxcbiAgICByZXR1cm5Gb2N1czogZmFsc2UsXG4gICAgY2xvc2VPbkVzY2FwZTogZmFsc2UsXG4gICAgZGVsYXlJbml0aWFsRm9jdXM6IGZhbHNlLFxuICAgIG9uUG9zdERlYWN0aXZhdGU6IGhhbmRsZVNldFJldHVybkZvY3VzLFxuICAgIGhlaWdodDogRkVFTF9QT1BVUF9IRUlHSFQsXG4gICAgd2lkdGg6IEZFRUxfUE9QVVBfV0lEVEgsXG4gICAgcmVmOiBwb3B1cFJlZixcbiAgICBjaGlsZHJlbjogW2pzeChQb3B1cC5UaXRsZSwge1xuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgZW1pdDogZW1pdCxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgIGNsb3NlQnV0dG9uVG9vbHRpcDogXCJTYXZlIGFuZCBjbG9zZVwiLFxuICAgICAgb25DbG9zZTogb25DbG9zZSxcbiAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiBqc3goRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGdldExpbmtzKHR5cGUpLm1hcCgobGluaywgaW5kZXgpID0+IHtcbiAgICAgICAgICByZXR1cm4ganN4cyhcImFcIiwge1xuICAgICAgICAgICAgcmVsOiBcIm5vcmVmZXJyZXJcIixcbiAgICAgICAgICAgIGhyZWY6IGxpbmsuaHJlZixcbiAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWwtcG9wdXBfX3RpdGxlLWxpbmtcIixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbbGluay50aXRsZSwganN4KExhdW5jaEljb24sIHt9KV1cbiAgICAgICAgICB9LCBpbmRleCk7XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pLCBqc3goUG9wdXAuQm9keSwge1xuICAgICAgY2hpbGRyZW46IGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBvbktleURvd25DYXB0dXJlOiBvbktleURvd25DYXB0dXJlLFxuICAgICAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZmVlbC1wb3B1cF9fYm9keVwiLFxuICAgICAgICBjaGlsZHJlbjogW3R5cGUgPT09ICdmZWVsJyAmJiBqc3goQ29kZUVkaXRvciwge1xuICAgICAgICAgIGVuYWJsZUd1dHRlcnM6IHRydWUsXG4gICAgICAgICAgaWQ6IHByZWZpeElkJDgoaWQpLFxuICAgICAgICAgIG5hbWU6IGlkLFxuICAgICAgICAgIG9uSW5wdXQ6IG9uSW5wdXQsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgIHJlZjogZWRpdG9yUmVmLFxuICAgICAgICAgIHRvb2x0aXBDb250YWluZXI6IHRvb2x0aXBDb250YWluZXJcbiAgICAgICAgfSksIHR5cGUgPT09ICdmZWVsZXJzJyAmJiBqc3goQ29kZUVkaXRvciQxLCB7XG4gICAgICAgICAgaWQ6IHByZWZpeElkJDgoaWQpLFxuICAgICAgICAgIGNvbnRlbnRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHRpdGxlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmFibGVHdXR0ZXJzOiB0cnVlLFxuICAgICAgICAgIGhvc3RMYW5ndWFnZTogaG9zdExhbmd1YWdlLFxuICAgICAgICAgIG5hbWU6IGlkLFxuICAgICAgICAgIG9uSW5wdXQ6IG9uSW5wdXQsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHJlZjogZWRpdG9yUmVmLFxuICAgICAgICAgIHNpbmdsZUxpbmU6IHNpbmdsZUxpbmUsXG4gICAgICAgICAgdG9vbHRpcENvbnRhaW5lcjogdG9vbHRpcENvbnRhaW5lclxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHByZWZpeElkJDgoaWQpIHtcbiAgcmV0dXJuIGBiaW8tcHJvcGVydGllcy1wYW5lbC0ke2lkfWA7XG59XG5mdW5jdGlvbiBhdXRvQ29tcGxldGlvbk9wZW4oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5jbG9zZXN0KCcuY20tZWRpdG9yJykucXVlcnlTZWxlY3RvcignLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlJyk7XG59XG5cbi8qKlxyXG4gKiBUaGlzIGhvb2sgYmVoYXZlcyBsaWtlIHVzZUVmZmVjdCwgYnV0IGRvZXMgbm90IHRyaWdnZXIgb24gdGhlIGZpcnN0IHJlbmRlci5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWZmZWN0XHJcbiAqIEBwYXJhbSB7QXJyYXl9IGRlcHNcclxuICovXG5mdW5jdGlvbiB1c2VVcGRhdGVFZmZlY3QoZWZmZWN0LCBkZXBzKSB7XG4gIGNvbnN0IGlzTW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzTW91bnRlZC5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gZWZmZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0sIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBUb2dnbGVTd2l0Y2gocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIG9uSW5wdXQsXG4gICAgdmFsdWUsXG4gICAgc3dpdGNoZXJMYWJlbCxcbiAgICBpbmxpbmUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgaW5wdXRSZWYsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRDYWxsYmFjayA9IGFzeW5jICgpID0+IHtcbiAgICBvbklucHV0KCF2YWx1ZSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUlucHV0ID0gZSA9PiB7XG4gICAgaGFuZGxlSW5wdXRDYWxsYmFjaygpO1xuICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbG9jYWxWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRMb2NhbFZhbHVlKHZhbHVlKTtcbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtdG9nZ2xlLXN3aXRjaCcsIHtcbiAgICAgIGlubGluZVxuICAgIH0pLFxuICAgIGNoaWxkcmVuOiBbanN4KFwibGFiZWxcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtbGFiZWxcIixcbiAgICAgIGZvcjogcHJlZml4SWQkNyhpZCksXG4gICAgICBjaGlsZHJlbjoganN4KFRvb2x0aXBXcmFwcGVyLCB7XG4gICAgICAgIHZhbHVlOiB0b29sdGlwLFxuICAgICAgICBmb3JJZDogaWQsXG4gICAgICAgIGVsZW1lbnQ6IHByb3BzLmVsZW1lbnQsXG4gICAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgICAgfSlcbiAgICB9KSwganN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1maWVsZC13cmFwcGVyXCIsXG4gICAgICBjaGlsZHJlbjogW2pzeHMoXCJsYWJlbFwiLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRvZ2dsZS1zd2l0Y2hfX3N3aXRjaGVyXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbanN4KFwiaW5wdXRcIiwge1xuICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgaWQ6IHByZWZpeElkJDcoaWQpLFxuICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWlucHV0XCIsXG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgICAgbmFtZTogaWQsXG4gICAgICAgICAgb25JbnB1dDogaGFuZGxlSW5wdXQsXG4gICAgICAgICAgY2hlY2tlZDogISFsb2NhbFZhbHVlXG4gICAgICAgIH0pLCBqc3goXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10b2dnbGUtc3dpdGNoX19zbGlkZXJcIlxuICAgICAgICB9KV1cbiAgICAgIH0pLCBzd2l0Y2hlckxhYmVsICYmIGpzeChcInBcIiwge1xuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10b2dnbGUtc3dpdGNoX19sYWJlbFwiLFxuICAgICAgICBjaGlsZHJlbjogc3dpdGNoZXJMYWJlbFxuICAgICAgfSldXG4gICAgfSldXG4gIH0pO1xufVxuXG4vKipcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcy5lbGVtZW50XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5pZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuZGVzY3JpcHRpb25cclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmxhYmVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5zd2l0Y2hlckxhYmVsXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuaW5saW5lXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLmdldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uRm9jdXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25CbHVyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydCgncHJlYWN0JykuQ29tcG9uZW50fSBwcm9wcy50b29sdGlwXHJcbiAqL1xuZnVuY3Rpb24gVG9nZ2xlU3dpdGNoRW50cnkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbGFiZWwsXG4gICAgc3dpdGNoZXJMYWJlbCxcbiAgICBpbmxpbmUsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1lbnRyeSBiaW8tcHJvcGVydGllcy1wYW5lbC10b2dnbGUtc3dpdGNoLWVudHJ5XCIsXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBbanN4KFRvZ2dsZVN3aXRjaCwge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb25JbnB1dDogc2V0VmFsdWUsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICBzd2l0Y2hlckxhYmVsOiBzd2l0Y2hlckxhYmVsLFxuICAgICAgaW5saW5lOiBpbmxpbmUsXG4gICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0pLCBqc3goRGVzY3JpcHRpb24sIHtcbiAgICAgIGZvcklkOiBpZCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICB2YWx1ZTogZGVzY3JpcHRpb25cbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBpc0VkaXRlZCQ4KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgISFub2RlLmNoZWNrZWQ7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcHJlZml4SWQkNyhpZCkge1xuICByZXR1cm4gYGJpby1wcm9wZXJ0aWVzLXBhbmVsLSR7aWR9YDtcbn1cblxuZnVuY3Rpb24gTnVtYmVyRmllbGQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGRlYm91bmNlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc3BsYXlMYWJlbCA9IHRydWUsXG4gICAgaWQsXG4gICAgaW5wdXRSZWYsXG4gICAgbGFiZWwsXG4gICAgbWF4LFxuICAgIG1pbixcbiAgICBvbklucHV0LFxuICAgIHN0ZXAsXG4gICAgdmFsdWUgPSAnJyxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1clxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRDYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkZWJvdW5jZSh0YXJnZXQgPT4ge1xuICAgICAgaWYgKHRhcmdldC52YWxpZGl0eS52YWxpZCkge1xuICAgICAgICBvbklucHV0KHRhcmdldC52YWx1ZSA/IHBhcnNlRmxvYXQodGFyZ2V0LnZhbHVlKSA6IHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtvbklucHV0LCBkZWJvdW5jZV0pO1xuICBjb25zdCBoYW5kbGVJbnB1dCA9IGUgPT4ge1xuICAgIGhhbmRsZUlucHV0Q2FsbGJhY2soZS50YXJnZXQpO1xuICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbG9jYWxWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRMb2NhbFZhbHVlKHZhbHVlKTtcbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1udW1iZXJmaWVsZFwiLFxuICAgIGNoaWxkcmVuOiBbZGlzcGxheUxhYmVsICYmIGpzeChcImxhYmVsXCIsIHtcbiAgICAgIGZvcjogcHJlZml4SWQkNihpZCksXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSksIGpzeChcImlucHV0XCIsIHtcbiAgICAgIGlkOiBwcmVmaXhJZCQ2KGlkKSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgbmFtZTogaWQsXG4gICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dFwiLFxuICAgICAgbWF4OiBtYXgsXG4gICAgICBtaW46IG1pbixcbiAgICAgIG9uSW5wdXQ6IGhhbmRsZUlucHV0LFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgc3RlcDogc3RlcCxcbiAgICAgIHZhbHVlOiBsb2NhbFZhbHVlXG4gICAgfSldXG4gIH0pO1xufVxuXG4vKipcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGVib3VuY2VcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmRlc2NyaXB0aW9uXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGlzYWJsZWRcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZ2V0VmFsdWVcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmlkXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMubWF4XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5taW5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuc2V0VmFsdWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Gb2N1c1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkJsdXJcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLnN0ZXBcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMudmFsaWRhdGVcclxuICovXG5mdW5jdGlvbiBOdW1iZXJGaWVsZEVudHJ5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBkZWJvdW5jZSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBkaXNhYmxlZCxcbiAgICBlbGVtZW50LFxuICAgIGdldFZhbHVlLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIG1heCxcbiAgICBtaW4sXG4gICAgc2V0VmFsdWUsXG4gICAgc3RlcCxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICB2YWxpZGF0ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGdsb2JhbEVycm9yID0gdXNlRXJyb3IoaWQpO1xuICBjb25zdCBbbG9jYWxFcnJvciwgc2V0TG9jYWxFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgbGV0IHZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdGUpKSB7XG4gICAgICBjb25zdCBuZXdWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZSh2YWx1ZSkgfHwgbnVsbDtcbiAgICAgIHNldExvY2FsRXJyb3IobmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgdmFsaWRhdGVdKTtcbiAgY29uc3Qgb25JbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICBsZXQgbmV3VmFsaWRhdGlvbkVycm9yID0gbnVsbDtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0ZSkpIHtcbiAgICAgIG5ld1ZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlKG5ld1ZhbHVlKSB8fCBudWxsO1xuICAgIH1cbiAgICBzZXRWYWx1ZShuZXdWYWx1ZSwgbmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgICBzZXRMb2NhbEVycm9yKG5ld1ZhbGlkYXRpb25FcnJvcik7XG4gIH07XG4gIGNvbnN0IGVycm9yID0gZ2xvYmFsRXJyb3IgfHwgbG9jYWxFcnJvcjtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1lbnRyeScsIGVycm9yID8gJ2hhcy1lcnJvcicgOiAnJyksXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBbanN4KE51bWJlckZpZWxkLCB7XG4gICAgICBkZWJvdW5jZTogZGVib3VuY2UsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICBvbklucHV0OiBvbklucHV0LFxuICAgICAgbWF4OiBtYXgsXG4gICAgICBtaW46IG1pbixcbiAgICAgIHN0ZXA6IHN0ZXAsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9LCBlbGVtZW50KSwgZXJyb3IgJiYganN4KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVycm9yXCIsXG4gICAgICBjaGlsZHJlbjogZXJyb3JcbiAgICB9KSwganN4KERlc2NyaXB0aW9uLCB7XG4gICAgICBmb3JJZDogaWQsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgdmFsdWU6IGRlc2NyaXB0aW9uXG4gICAgfSldXG4gIH0pO1xufVxuZnVuY3Rpb24gaXNFZGl0ZWQkNyhub2RlKSB7XG4gIHJldHVybiBub2RlICYmICEhbm9kZS52YWx1ZTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBwcmVmaXhJZCQ2KGlkKSB7XG4gIHJldHVybiBgYmlvLXByb3BlcnRpZXMtcGFuZWwtJHtpZH1gO1xufVxuXG5jb25zdCBub29wJDIgPSAoKSA9PiB7fTtcbmZ1bmN0aW9uIEZlZWxUZXh0ZmllbGRDb21wb25lbnQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGRlYm91bmNlLFxuICAgIGlkLFxuICAgIGVsZW1lbnQsXG4gICAgbGFiZWwsXG4gICAgaG9zdExhbmd1YWdlLFxuICAgIG9uSW5wdXQsXG4gICAgb25FcnJvcixcbiAgICBwbGFjZWhvbGRlcixcbiAgICBmZWVsLFxuICAgIHZhbHVlID0gJycsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB2YXJpYWJsZXMsXG4gICAgc2luZ2xlTGluZSxcbiAgICB0b29sdGlwQ29udGFpbmVyLFxuICAgIE9wdGlvbmFsQ29tcG9uZW50ID0gT3B0aW9uYWxGZWVsSW5wdXQsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBfc2V0TG9jYWxWYWx1ZV0gPSB1c2VTdGF0ZSh2YWx1ZSk7XG4gIGNvbnN0IGVkaXRvclJlZiA9IHVzZVNob3dFbnRyeUV2ZW50KGlkKTtcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGZlZWxBY3RpdmUgPSBpc1N0cmluZyhsb2NhbFZhbHVlKSAmJiBsb2NhbFZhbHVlLnN0YXJ0c1dpdGgoJz0nKSB8fCBmZWVsID09PSAncmVxdWlyZWQnO1xuICBjb25zdCBmZWVsT25seVZhbHVlID0gaXNTdHJpbmcobG9jYWxWYWx1ZSkgJiYgbG9jYWxWYWx1ZS5zdGFydHNXaXRoKCc9JykgPyBsb2NhbFZhbHVlLnN1YnN0cmluZygxKSA6IGxvY2FsVmFsdWU7XG4gIGNvbnN0IFtmb2N1cywgX3NldEZvY3VzXSA9IHVzZVN0YXRlKHVuZGVmaW5lZCk7XG4gIGNvbnN0IHtcbiAgICBvcGVuOiBvcGVuUG9wdXAsXG4gICAgc291cmNlOiBwb3B1cFNvdXJjZVxuICB9ID0gdXNlQ29udGV4dChGZWVsUG9wdXBDb250ZXh0KTtcbiAgY29uc3QgcG9wdU9wZW4gPSBwb3B1cFNvdXJjZSA9PT0gaWQ7XG4gIGNvbnN0IHNldEZvY3VzID0gKG9mZnNldCA9IDApID0+IHtcbiAgICBjb25zdCBoYXNGb2N1cyA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgLy8gS2VlcCBjYXJldCBwb3NpdGlvbiBpZiBpdCBpcyBhbHJlYWR5IGZvY3VzZWQsIG90aGVyd2lzZSBmb2N1cyBhdCB0aGUgZW5kXG4gICAgY29uc3QgcG9zaXRpb24gPSBoYXNGb2N1cyA/IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgOiBJbmZpbml0eTtcbiAgICBfc2V0Rm9jdXMocG9zaXRpb24gKyBvZmZzZXQpO1xuICB9O1xuICBjb25zdCBoYW5kbGVJbnB1dENhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGRlYm91bmNlKG5ld1ZhbHVlID0+IHtcbiAgICAgIG9uSW5wdXQobmV3VmFsdWUpO1xuICAgIH0pO1xuICB9LCBbb25JbnB1dCwgZGVib3VuY2VdKTtcbiAgY29uc3Qgc2V0TG9jYWxWYWx1ZSA9IG5ld1ZhbHVlID0+IHtcbiAgICBfc2V0TG9jYWxWYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmV3VmFsdWUgPT09ICcnIHx8IG5ld1ZhbHVlID09PSAnPScpIHtcbiAgICAgIGhhbmRsZUlucHV0Q2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlSW5wdXRDYWxsYmFjayhuZXdWYWx1ZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVGZWVsVG9nZ2xlID0gdXNlU3RhdGljQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChmZWVsID09PSAncmVxdWlyZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZmVlbEFjdGl2ZSkge1xuICAgICAgc2V0TG9jYWxWYWx1ZSgnPScgKyBsb2NhbFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TG9jYWxWYWx1ZShmZWVsT25seVZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVMb2NhbElucHV0ID0gbmV3VmFsdWUgPT4ge1xuICAgIGlmIChmZWVsQWN0aXZlKSB7XG4gICAgICBuZXdWYWx1ZSA9ICc9JyArIG5ld1ZhbHVlO1xuICAgIH1cbiAgICBpZiAobmV3VmFsdWUgPT09IGxvY2FsVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0TG9jYWxWYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKCFmZWVsQWN0aXZlICYmIGlzU3RyaW5nKG5ld1ZhbHVlKSAmJiBuZXdWYWx1ZS5zdGFydHNXaXRoKCc9JykpIHtcbiAgICAgIC8vIGZvY3VzIGlzIGJlaGluZCBgPWAgc2lnbiB0aGF0IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgc2V0Rm9jdXMoLTEpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTGludCA9IHVzZVN0YXRpY0NhbGxiYWNrKChsaW50ID0gW10pID0+IHtcbiAgICBjb25zdCBzeW50YXhFcnJvciA9IGxpbnQuc29tZShyZXBvcnQgPT4gcmVwb3J0LnR5cGUgPT09ICdTeW50YXggRXJyb3InKTtcbiAgICBpZiAoc3ludGF4RXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoJ1VucGFyc2FibGUgRkVFTCBleHByZXNzaW9uLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlUG9wdXBPcGVuID0gKHR5cGUgPSAnZmVlbCcpID0+IHtcbiAgICBjb25zdCBwb3B1cE9wdGlvbnMgPSB7XG4gICAgICBpZCxcbiAgICAgIGhvc3RMYW5ndWFnZSxcbiAgICAgIG9uSW5wdXQ6IGhhbmRsZUxvY2FsSW5wdXQsXG4gICAgICBwb3NpdGlvbjogY2FsY3VsYXRlUG9wdXBQb3NpdGlvbihjb250YWluZXJSZWYuY3VycmVudCksXG4gICAgICBzaW5nbGVMaW5lLFxuICAgICAgdGl0bGU6IGdldFBvcHVwVGl0bGUoZWxlbWVudCwgbGFiZWwpLFxuICAgICAgdG9vbHRpcENvbnRhaW5lcixcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZTogZmVlbE9ubHlWYWx1ZSxcbiAgICAgIHZhcmlhYmxlc1xuICAgIH07XG4gICAgb3BlblBvcHVwKGlkLCBwb3B1cE9wdGlvbnMsIGVkaXRvclJlZi5jdXJyZW50KTtcbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGZvY3VzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoZm9jdXMpO1xuICAgICAgX3NldEZvY3VzKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9LCBbZm9jdXNdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IGxvY2FsVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRlcm5hbCB2YWx1ZSBjaGFuZ2UgcmVtb3ZlZCBjb250ZW50ID0+IGtlZXAgRkVFTCBjb25maWd1cmF0aW9uXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgc2V0TG9jYWxWYWx1ZShmZWVsQWN0aXZlID8gJz0nIDogJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRMb2NhbFZhbHVlKHZhbHVlKTtcbiAgfSwgW3ZhbHVlXSk7XG5cbiAgLy8gY29weS1wYXN0ZSBpbnRlZ3JhdGlvblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvcHlIYW5kbGVyID0gZXZlbnQgPT4ge1xuICAgICAgaWYgKCFmZWVsQWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YSgnYXBwbGljYXRpb24vRkVFTCcsIGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhc3RlSGFuZGxlciA9IGV2ZW50ID0+IHtcbiAgICAgIGlmIChmZWVsQWN0aXZlIHx8IHBvcHVPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ2FwcGxpY2F0aW9uL0ZFRUwnKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZlZWxUb2dnbGUoKTtcbiAgICAgICAgICBzZXRGb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnRhaW5lclJlZi5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCBjb3B5SGFuZGxlcik7XG4gICAgY29udGFpbmVyUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcignY3V0JywgY29weUhhbmRsZXIpO1xuICAgIGNvbnRhaW5lclJlZi5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgcGFzdGVIYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIGNvcHlIYW5kbGVyKTtcbiAgICAgIGNvbnRhaW5lclJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2N1dCcsIGNvcHlIYW5kbGVyKTtcbiAgICAgIGNvbnRhaW5lclJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgcGFzdGVIYW5kbGVyKTtcbiAgICB9O1xuICB9LCBbY29udGFpbmVyUmVmLCBmZWVsQWN0aXZlLCBoYW5kbGVGZWVsVG9nZ2xlLCBzZXRGb2N1c10pO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWwtZW50cnknLCB7XG4gICAgICAnZmVlbC1hY3RpdmUnOiBmZWVsQWN0aXZlXG4gICAgfSksXG4gICAgY2hpbGRyZW46IFtqc3hzKFwibGFiZWxcIiwge1xuICAgICAgZm9yOiBwcmVmaXhJZCQ1KGlkKSxcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWxhYmVsXCIsXG4gICAgICBvbkNsaWNrOiAoKSA9PiBzZXRGb2N1cygpLFxuICAgICAgY2hpbGRyZW46IFtqc3goVG9vbHRpcFdyYXBwZXIsIHtcbiAgICAgICAgdmFsdWU6IHRvb2x0aXAsXG4gICAgICAgIGZvcklkOiBpZCxcbiAgICAgICAgZWxlbWVudDogcHJvcHMuZWxlbWVudCxcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KSwganN4KEZlZWxJY29uLCB7XG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgZmVlbDogZmVlbCxcbiAgICAgICAgb25DbGljazogaGFuZGxlRmVlbFRvZ2dsZSxcbiAgICAgICAgYWN0aXZlOiBmZWVsQWN0aXZlXG4gICAgICB9KV1cbiAgICB9KSwganN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsLWNvbnRhaW5lclwiLFxuICAgICAgcmVmOiBjb250YWluZXJSZWYsXG4gICAgICBjaGlsZHJlbjogW2pzeChGZWVsSW5kaWNhdG9yLCB7XG4gICAgICAgIGFjdGl2ZTogZmVlbEFjdGl2ZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZlZWwgIT09ICdvcHRpb25hbCcgfHwgZGlzYWJsZWQsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUZlZWxUb2dnbGVcbiAgICAgIH0pLCBmZWVsQWN0aXZlID8ganN4KENvZGVFZGl0b3IsIHtcbiAgICAgICAgbmFtZTogaWQsXG4gICAgICAgIG9uSW5wdXQ6IGhhbmRsZUxvY2FsSW5wdXQsXG4gICAgICAgIGNvbnRlbnRBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgJ2lkJzogcHJlZml4SWQkNShpZCksXG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBsYWJlbFxuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHBvcHVwT3BlbjogcG9wdU9wZW4sXG4gICAgICAgIG9uRmVlbFRvZ2dsZTogKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZlZWxUb2dnbGUoKTtcbiAgICAgICAgICBzZXRGb2N1cyh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25MaW50OiBoYW5kbGVMaW50LFxuICAgICAgICBvblBvcHVwT3BlbjogaGFuZGxlUG9wdXBPcGVuLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIHZhbHVlOiBmZWVsT25seVZhbHVlLFxuICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgcmVmOiBlZGl0b3JSZWYsXG4gICAgICAgIHRvb2x0aXBDb250YWluZXI6IHRvb2x0aXBDb250YWluZXJcbiAgICAgIH0pIDoganN4KE9wdGlvbmFsQ29tcG9uZW50LCB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBwb3B1cE9wZW46IHBvcHVPcGVuLFxuICAgICAgICBvbklucHV0OiBoYW5kbGVMb2NhbElucHV0LFxuICAgICAgICBjb250ZW50QXR0cmlidXRlczoge1xuICAgICAgICAgICdpZCc6IHByZWZpeElkJDUoaWQpLFxuICAgICAgICAgICdhcmlhLWxhYmVsJzogbGFiZWxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGxvY2FsVmFsdWUsXG4gICAgICAgIHJlZjogZWRpdG9yUmVmLFxuICAgICAgICBvblBvcHVwT3BlbjogaGFuZGxlUG9wdXBPcGVuLFxuICAgICAgICBjb250YWluZXJSZWY6IGNvbnRhaW5lclJlZlxuICAgICAgfSldXG4gICAgfSldXG4gIH0pO1xufVxuY29uc3QgRmVlbFRleHRmaWVsZCA9IHdpdGhBdXRvQ2xvc2VQb3B1cChGZWVsVGV4dGZpZWxkQ29tcG9uZW50KTtcbmNvbnN0IE9wdGlvbmFsRmVlbElucHV0ID0gZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgZGlzYWJsZWQsXG4gICAgb25JbnB1dCxcbiAgICB2YWx1ZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG5cbiAgLy8gVG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBGRUVMIGVkaXRvciwgc2V0IGZvY3VzIGF0IHN0YXJ0IG9mIGlucHV0XG4gIC8vIHRoaXMgZW5zdXJlcyBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2Ugd2hlbiBzd2l0Y2hpbmcgd2l0aCB0aGUga2V5Ym9hcmRcbiAgcmVmLmN1cnJlbnQgPSB7XG4gICAgZm9jdXM6IHBvc2l0aW9uID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA+IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHBvc2l0aW9uID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4ganN4KFwiaW5wdXRcIiwge1xuICAgIGlkOiBwcmVmaXhJZCQ1KGlkKSxcbiAgICB0eXBlOiBcInRleHRcIixcbiAgICByZWY6IGlucHV0UmVmLFxuICAgIG5hbWU6IGlkLFxuICAgIHNwZWxsQ2hlY2s6IFwiZmFsc2VcIixcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWlucHV0XCIsXG4gICAgb25JbnB1dDogZSA9PiBvbklucHV0KGUudGFyZ2V0LnZhbHVlKSxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogdmFsdWUgfHwgJydcbiAgfSk7XG59KTtcbmNvbnN0IE9wdGlvbmFsRmVlbE51bWJlckZpZWxkID0gZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgZGVib3VuY2UsXG4gICAgZGlzYWJsZWQsXG4gICAgb25JbnB1dCxcbiAgICB2YWx1ZSxcbiAgICBtaW4sXG4gICAgbWF4LFxuICAgIHN0ZXAsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZigpO1xuXG4gIC8vIFRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgRkVFTCBlZGl0b3IsIHNldCBmb2N1cyBhdCBzdGFydCBvZiBpbnB1dFxuICAvLyB0aGlzIGVuc3VyZXMgY2xlYW4gZWRpdGluZyBleHBlcmllbmNlIHdoZW4gc3dpdGNoaW5nIHdpdGggdGhlIGtleWJvYXJkXG4gIHJlZi5jdXJyZW50ID0ge1xuICAgIGZvY3VzOiBwb3NpdGlvbiA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICBpZiAodHlwZW9mIHBvc2l0aW9uID09PSAnbnVtYmVyJyAmJiBwb3NpdGlvbiAhPT0gSW5maW5pdHkpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uID4gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgcG9zaXRpb24gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiBqc3goTnVtYmVyRmllbGQsIHtcbiAgICBpZDogaWQsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBkaXNwbGF5TGFiZWw6IGZhbHNlLFxuICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICBtYXg6IG1heCxcbiAgICBtaW46IG1pbixcbiAgICBvbklucHV0OiBvbklucHV0LFxuICAgIHN0ZXA6IHN0ZXAsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgb25CbHVyOiBvbkJsdXJcbiAgfSk7XG59KTtcbmNvbnN0IE9wdGlvbmFsRmVlbFRleHRBcmVhID0gZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgZGlzYWJsZWQsXG4gICAgb25JbnB1dCxcbiAgICB2YWx1ZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG5cbiAgLy8gVG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBGRUVMIGVkaXRvciwgc2V0IGZvY3VzIGF0IHN0YXJ0IG9mIGlucHV0XG4gIC8vIHRoaXMgZW5zdXJlcyBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2Ugd2hlbiBzd2l0Y2hpbmcgd2l0aCB0aGUga2V5Ym9hcmRcbiAgcmVmLmN1cnJlbnQgPSB7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKDAsIDApO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGpzeChcInRleHRhcmVhXCIsIHtcbiAgICBpZDogcHJlZml4SWQkNShpZCksXG4gICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgcmVmOiBpbnB1dFJlZixcbiAgICBuYW1lOiBpZCxcbiAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dFwiLFxuICAgIG9uSW5wdXQ6IGUgPT4gb25JbnB1dChlLnRhcmdldC52YWx1ZSksXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgdmFsdWU6IHZhbHVlIHx8ICcnLFxuICAgIFwiZGF0YS1ncmFtbVwiOiBcImZhbHNlXCJcbiAgfSk7XG59KTtcbmNvbnN0IE9wdGlvbmFsRmVlbFRvZ2dsZVN3aXRjaCA9IGZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIG9uSW5wdXQsXG4gICAgdmFsdWUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgc3dpdGNoZXJMYWJlbFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG5cbiAgLy8gVG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBGRUVMIGVkaXRvciwgc2V0IGZvY3VzIGF0IHN0YXJ0IG9mIGlucHV0XG4gIC8vIHRoaXMgZW5zdXJlcyBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2Ugd2hlbiBzd2l0Y2hpbmcgd2l0aCB0aGUga2V5Ym9hcmRcbiAgcmVmLmN1cnJlbnQgPSB7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBqc3goVG9nZ2xlU3dpdGNoLCB7XG4gICAgaWQ6IGlkLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWYsXG4gICAgb25JbnB1dDogb25JbnB1dCxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIHN3aXRjaGVyTGFiZWw6IHN3aXRjaGVyTGFiZWxcbiAgfSk7XG59KTtcbmNvbnN0IE9wdGlvbmFsRmVlbENoZWNrYm94ID0gZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgZGlzYWJsZWQsXG4gICAgb25JbnB1dCxcbiAgICB2YWx1ZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1clxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9ICh7XG4gICAgdGFyZ2V0XG4gIH0pID0+IHtcbiAgICBvbklucHV0KHRhcmdldC5jaGVja2VkKTtcbiAgfTtcblxuICAvLyBUbyBiZSBjb25zaXN0ZW50IHdpdGggdGhlIEZFRUwgZWRpdG9yLCBzZXQgZm9jdXMgYXQgc3RhcnQgb2YgaW5wdXRcbiAgLy8gdGhpcyBlbnN1cmVzIGNsZWFuIGVkaXRpbmcgZXhwZXJpZW5jZSB3aGVuIHN3aXRjaGluZyB3aXRoIHRoZSBrZXlib2FyZFxuICByZWYuY3VycmVudCA9IHtcbiAgICBmb2N1czogKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGpzeChcImlucHV0XCIsIHtcbiAgICByZWY6IGlucHV0UmVmLFxuICAgIGlkOiBwcmVmaXhJZCQ1KGlkKSxcbiAgICBuYW1lOiBpZCxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dFwiLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgY2hlY2tlZDogdmFsdWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0pO1xufSk7XG5cbi8qKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmlkXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmRlYm91bmNlXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGlzYWJsZWRcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5mZWVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5zZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy50b29sdGlwQ29udGFpbmVyXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnZhbGlkYXRlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNob3dcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZXhhbXBsZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy52YXJpYWJsZXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Gb2N1c1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkJsdXJcclxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wcy5wbGFjZWhvbGRlcl1cclxuICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KCdwcmVhY3QnKS5Db21wb25lbnR9IHByb3BzLnRvb2x0aXBcclxuICovXG5mdW5jdGlvbiBGZWVsRW50cnkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgZGVib3VuY2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZmVlbCxcbiAgICBsYWJlbCxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICB0b29sdGlwQ29udGFpbmVyLFxuICAgIGhvc3RMYW5ndWFnZSxcbiAgICBzaW5nbGVMaW5lLFxuICAgIHZhbGlkYXRlLFxuICAgIHNob3cgPSBub29wJDIsXG4gICAgZXhhbXBsZSxcbiAgICB2YXJpYWJsZXMsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFt2YWxpZGF0aW9uRXJyb3IsIHNldFZhbGlkYXRpb25FcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvY2FsRXJyb3IsIHNldExvY2FsRXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG4gIGxldCB2YWx1ZSA9IGdldFZhbHVlKGVsZW1lbnQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbGlkYXRlKSkge1xuICAgICAgY29uc3QgbmV3VmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGUodmFsdWUpIHx8IG51bGw7XG4gICAgICBzZXRWYWxpZGF0aW9uRXJyb3IobmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgdmFsaWRhdGVdKTtcbiAgY29uc3Qgb25JbnB1dCA9IHVzZVN0YXRpY0NhbGxiYWNrKG5ld1ZhbHVlID0+IHtcbiAgICBsZXQgbmV3VmFsaWRhdGlvbkVycm9yID0gbnVsbDtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0ZSkpIHtcbiAgICAgIG5ld1ZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlKG5ld1ZhbHVlKSB8fCBudWxsO1xuICAgIH1cblxuICAgIC8vIGRvbid0IGNyZWF0ZSBtdWx0aXBsZSBjb21tYW5kU3RhY2sgZW50cmllcyBmb3IgdGhlIHNhbWUgdmFsdWVcbiAgICBpZiAobmV3VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSwgbmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgICB9XG4gICAgc2V0VmFsaWRhdGlvbkVycm9yKG5ld1ZhbGlkYXRpb25FcnJvcik7XG4gIH0pO1xuICBjb25zdCBvbkVycm9yID0gdXNlQ2FsbGJhY2soZXJyID0+IHtcbiAgICBzZXRMb2NhbEVycm9yKGVycik7XG4gIH0sIFtdKTtcbiAgY29uc3QgdGVtcG9yYXJ5RXJyb3IgPSB1c2VFcnJvcihpZCk7XG4gIGNvbnN0IGVycm9yID0gdGVtcG9yYXJ5RXJyb3IgfHwgbG9jYWxFcnJvciB8fCB2YWxpZGF0aW9uRXJyb3I7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogY2xhc3NuYW1lcyhwcm9wcy5jbGFzcywgJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5JywgZXJyb3IgPyAnaGFzLWVycm9yJyA6ICcnKSxcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2hpbGRyZW46IFtjcmVhdGVFbGVtZW50KEZlZWxUZXh0ZmllbGQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGVib3VuY2U6IGRlYm91bmNlLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgZmVlbDogZmVlbCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGtleTogZWxlbWVudCxcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIG9uSW5wdXQ6IG9uSW5wdXQsXG4gICAgICBvbkVycm9yOiBvbkVycm9yLFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgZXhhbXBsZTogZXhhbXBsZSxcbiAgICAgIGhvc3RMYW5ndWFnZTogaG9zdExhbmd1YWdlLFxuICAgICAgc2luZ2xlTGluZTogc2luZ2xlTGluZSxcbiAgICAgIHNob3c6IHNob3csXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgIHRvb2x0aXBDb250YWluZXI6IHRvb2x0aXBDb250YWluZXIsXG4gICAgICBPcHRpb25hbENvbXBvbmVudDogcHJvcHMuT3B0aW9uYWxDb21wb25lbnQsXG4gICAgICB0b29sdGlwOiB0b29sdGlwXG4gICAgfSksIGVycm9yICYmIGpzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1lcnJvclwiLFxuICAgICAgY2hpbGRyZW46IGVycm9yXG4gICAgfSksIGpzeChEZXNjcmlwdGlvbiwge1xuICAgICAgZm9ySWQ6IGlkLFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHZhbHVlOiBkZXNjcmlwdGlvblxuICAgIH0pXVxuICB9KTtcbn1cblxuLyoqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMuZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuaWRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmRlc2NyaXB0aW9uXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGVib3VuY2VcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5kaXNhYmxlZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMubWF4XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5taW5cclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLnN0ZXBcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5mZWVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5zZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy50b29sdGlwQ29udGFpbmVyXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnZhbGlkYXRlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNob3dcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZXhhbXBsZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy52YXJpYWJsZXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Gb2N1c1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkJsdXJcclxuICovXG5mdW5jdGlvbiBGZWVsTnVtYmVyRW50cnkocHJvcHMpIHtcbiAgcmV0dXJuIGpzeChGZWVsRW50cnksIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsLW51bWJlclwiLFxuICAgIE9wdGlvbmFsQ29tcG9uZW50OiBPcHRpb25hbEZlZWxOdW1iZXJGaWVsZCxcbiAgICAuLi5wcm9wc1xuICB9KTtcbn1cblxuLyoqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMuZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuaWRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmRlc2NyaXB0aW9uXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGVib3VuY2VcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5kaXNhYmxlZFxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmZlZWxcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmxhYmVsXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLmdldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnRvb2x0aXBDb250YWluZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMudmFsaWRhdGVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuc2hvd1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5leGFtcGxlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnZhcmlhYmxlc1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkZvY3VzXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQmx1clxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BzLnBsYWNlaG9sZGVyXVxyXG4gKi9cbmZ1bmN0aW9uIEZlZWxUZXh0QXJlYUVudHJ5KHByb3BzKSB7XG4gIHJldHVybiBqc3goRmVlbEVudHJ5LCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZmVlbC10ZXh0YXJlYVwiLFxuICAgIE9wdGlvbmFsQ29tcG9uZW50OiBPcHRpb25hbEZlZWxUZXh0QXJlYSxcbiAgICAuLi5wcm9wc1xuICB9KTtcbn1cblxuLyoqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMuZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuaWRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmRlc2NyaXB0aW9uXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGVib3VuY2VcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5kaXNhYmxlZFxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmZlZWxcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmxhYmVsXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLmdldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnRvb2x0aXBDb250YWluZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMudmFsaWRhdGVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuc2hvd1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5leGFtcGxlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnZhcmlhYmxlc1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkZvY3VzXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQmx1clxyXG4gKi9cbmZ1bmN0aW9uIEZlZWxUb2dnbGVTd2l0Y2hFbnRyeShwcm9wcykge1xuICByZXR1cm4ganN4KEZlZWxFbnRyeSwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWwtdG9nZ2xlLXN3aXRjaFwiLFxuICAgIE9wdGlvbmFsQ29tcG9uZW50OiBPcHRpb25hbEZlZWxUb2dnbGVTd2l0Y2gsXG4gICAgLi4ucHJvcHNcbiAgfSk7XG59XG5cbi8qKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmlkXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmRlYm91bmNlXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGlzYWJsZWRcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5mZWVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5zZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy50b29sdGlwQ29udGFpbmVyXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnZhbGlkYXRlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNob3dcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZXhhbXBsZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy52YXJpYWJsZXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Gb2N1c1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkJsdXJcclxuICovXG5mdW5jdGlvbiBGZWVsQ2hlY2tib3hFbnRyeShwcm9wcykge1xuICByZXR1cm4ganN4KEZlZWxFbnRyeSwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWwtY2hlY2tib3hcIixcbiAgICBPcHRpb25hbENvbXBvbmVudDogT3B0aW9uYWxGZWVsQ2hlY2tib3gsXG4gICAgLi4ucHJvcHNcbiAgfSk7XG59XG5cbi8qKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmlkXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuaG9zdExhbmd1YWdlXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuc2luZ2xlTGluZVxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmRlYm91bmNlXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGlzYWJsZWRcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5mZWVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5zZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy50b29sdGlwQ29udGFpbmVyXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnZhbGlkYXRlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNob3dcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZXhhbXBsZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy52YXJpYWJsZXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Gb2N1c1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkJsdXJcclxuICovXG5mdW5jdGlvbiBGZWVsVGVtcGxhdGluZ0VudHJ5KHByb3BzKSB7XG4gIHJldHVybiBqc3goRmVlbEVudHJ5LCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZmVlbC10ZW1wbGF0aW5nXCIsXG4gICAgT3B0aW9uYWxDb21wb25lbnQ6IENvZGVFZGl0b3IkMSxcbiAgICAuLi5wcm9wc1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlzRWRpdGVkJDYobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgIHJldHVybiAhIW5vZGUuY2hlY2tlZCB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucygnZWRpdGVkJyk7XG4gIH1cbiAgcmV0dXJuICEhbm9kZS52YWx1ZSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucygnZWRpdGVkJyk7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcHJlZml4SWQkNShpZCkge1xuICByZXR1cm4gYGJpby1wcm9wZXJ0aWVzLXBhbmVsLSR7aWR9YDtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBvcHVwUG9zaXRpb24oZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgdG9wLFxuICAgIGxlZnRcbiAgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdCAtIEZFRUxfUE9QVVBfV0lEVEggLSAyMCxcbiAgICB0b3A6IHRvcFxuICB9O1xufVxuXG4vLyB0b2RvKHBpbnVzc2lsdmVzdHJ1cyk6IG1ha2UgdGhpcyBjb25maWd1cmFibGUgaW4gdGhlIGZ1dHVyZVxuZnVuY3Rpb24gZ2V0UG9wdXBUaXRsZShlbGVtZW50LCBsYWJlbCkge1xuICBsZXQgcG9wdXBUaXRsZSA9ICcnO1xuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnR5cGUpIHtcbiAgICBwb3B1cFRpdGxlID0gYCR7ZWxlbWVudC50eXBlfSAvIGA7XG4gIH1cbiAgcmV0dXJuIGAke3BvcHVwVGl0bGV9JHtsYWJlbH1gO1xufVxuZnVuY3Rpb24gd2l0aEF1dG9DbG9zZVBvcHVwKENvbXBvbmVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgaWRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgY2xvc2VcbiAgICB9ID0gdXNlQ29udGV4dChGZWVsUG9wdXBDb250ZXh0KTtcbiAgICBjb25zdCBjbG9zZVBvcHVwID0gdXNlU3RhdGljQ2FsbGJhY2soY2xvc2UpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbG9zZVBvcHVwKHtcbiAgICAgICAgICBpZFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBqc3goQ29tcG9uZW50LCB7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9O1xufVxuXG5jb25zdCBERUZBVUxUX0xBWU9VVCA9IHt9O1xuY29uc3QgREVGQVVMVF9ERVNDUklQVElPTiA9IHt9O1xuY29uc3QgREVGQVVMVF9UT09MVElQID0ge307XG5cbi8qKlxyXG4gKiBAdHlwZWRlZiB7IHtcclxuICogICAgY29tcG9uZW50OiBpbXBvcnQoJ3ByZWFjdCcpLkNvbXBvbmVudCxcclxuICogICAgaWQ6IFN0cmluZyxcclxuICogICAgaXNFZGl0ZWQ/OiBGdW5jdGlvblxyXG4gKiB9IH0gRW50cnlEZWZpbml0aW9uXHJcbiAqXHJcbiAqIEB0eXBlZGVmIHsge1xyXG4gKiAgICBhdXRvRm9jdXNFbnRyeTogU3RyaW5nLFxyXG4gKiAgICBhdXRvT3Blbj86IEJvb2xlYW4sXHJcbiAqICAgIGVudHJpZXM6IEFycmF5PEVudHJ5RGVmaW5pdGlvbj4sXHJcbiAqICAgIGlkOiBTdHJpbmcsXHJcbiAqICAgIGxhYmVsOiBTdHJpbmcsXHJcbiAqICAgIHJlbW92ZTogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkXHJcbiAqIH0gfSBMaXN0SXRlbURlZmluaXRpb25cclxuICpcclxuICogQHR5cGVkZWYgeyB7XHJcbiAqICAgIGFkZDogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkLFxyXG4gKiAgICBjb21wb25lbnQ6IGltcG9ydCgncHJlYWN0JykuQ29tcG9uZW50LFxyXG4gKiAgICBlbGVtZW50OiBPYmplY3QsXHJcbiAqICAgIGlkOiBTdHJpbmcsXHJcbiAqICAgIGl0ZW1zOiBBcnJheTxMaXN0SXRlbURlZmluaXRpb24+LFxyXG4gKiAgICBsYWJlbDogU3RyaW5nLFxyXG4gKiAgICBzaG91bGRPcGVuPzogQm9vbGVhblxyXG4gKiB9IH0gTGlzdEdyb3VwRGVmaW5pdGlvblxyXG4gKlxyXG4gKiBAdHlwZWRlZiB7IHtcclxuICogICAgY29tcG9uZW50PzogaW1wb3J0KCdwcmVhY3QnKS5Db21wb25lbnQsXHJcbiAqICAgIGVudHJpZXM6IEFycmF5PEVudHJ5RGVmaW5pdGlvbj4sXHJcbiAqICAgIGlkOiBTdHJpbmcsXHJcbiAqICAgIGxhYmVsOiBTdHJpbmcsXHJcbiAqICAgIHNob3VsZE9wZW4/OiBCb29sZWFuXHJcbiAqIH0gfSBHcm91cERlZmluaXRpb25cclxuICpcclxuICogIEB0eXBlZGVmIHsge1xyXG4gKiAgICBbaWQ6IFN0cmluZ106IEdldERlc2NyaXB0aW9uRnVuY3Rpb25cclxuICogfSB9IERlc2NyaXB0aW9uQ29uZmlnXHJcbiAqXHJcbiAqICBAdHlwZWRlZiB7IHtcclxuICogICAgW2lkOiBTdHJpbmddOiBHZXRUb29sdGlwRnVuY3Rpb25cclxuICogfSB9IFRvb2x0aXBDb25maWdcclxuICpcclxuICogQGNhbGxiYWNrIHsge1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICogfSB9IEdldERlc2NyaXB0aW9uRnVuY3Rpb25cclxuICpcclxuICogQGNhbGxiYWNrIHsge1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICogfSB9IEdldFRvb2x0aXBGdW5jdGlvblxyXG4gKlxyXG4gKiBAdHlwZWRlZiB7IHtcclxuICogIGdldEVtcHR5OiAoZWxlbWVudDogb2JqZWN0KSA9PiBpbXBvcnQoJy4vY29tcG9uZW50cy9QbGFjZWhvbGRlcicpLlBsYWNlaG9sZGVyRGVmaW5pdGlvbixcclxuICogIGdldE11bHRpcGxlOiAoZWxlbWVudDogT2JqZWN0KSA9PiBpbXBvcnQoJy4vY29tcG9uZW50cy9QbGFjZWhvbGRlcicpLlBsYWNlaG9sZGVyRGVmaW5pdGlvblxyXG4gKiB9IH0gUGxhY2Vob2xkZXJQcm92aWRlclxyXG4gKlxyXG4gKi9cblxuLyoqXHJcbiAqIEEgYmFzaWMgcHJvcGVydGllcyBwYW5lbCBjb21wb25lbnQuIERlc2NyaWJlcyAqaG93KiBjb250ZW50IHdpbGwgYmUgcmVuZGVyZWQsIGFjY2VwdHNcclxuICogZGF0YSBmcm9tIGltcGxlbWVudG9yIHRvIGRlc2NyaWJlICp3aGF0KiB3aWxsIGJlIHJlbmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtpbXBvcnQoJy4vY29tcG9uZW50cy9IZWFkZXInKS5IZWFkZXJQcm92aWRlcn0gcHJvcHMuaGVhZGVyUHJvdmlkZXJcclxuICogQHBhcmFtIHtQbGFjZWhvbGRlclByb3ZpZGVyfSBbcHJvcHMucGxhY2Vob2xkZXJQcm92aWRlcl1cclxuICogQHBhcmFtIHtBcnJheTxHcm91cERlZmluaXRpb258TGlzdEdyb3VwRGVmaW5pdGlvbj59IHByb3BzLmdyb3Vwc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLmxheW91dENvbmZpZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLmxheW91dENoYW5nZWRdXHJcbiAqIEBwYXJhbSB7RGVzY3JpcHRpb25Db25maWd9IFtwcm9wcy5kZXNjcmlwdGlvbkNvbmZpZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLmRlc2NyaXB0aW9uTG9hZGVkXVxyXG4gKiBAcGFyYW0ge1Rvb2x0aXBDb25maWd9IFtwcm9wcy50b29sdGlwQ29uZmlnXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMudG9vbHRpcExvYWRlZF1cclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3Byb3BzLmZlZWxQb3B1cENvbnRhaW5lcl1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLmdldEZlZWxQb3B1cExpbmtzXVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLmV2ZW50QnVzXVxyXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXNQYW5lbChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBoZWFkZXJQcm92aWRlcixcbiAgICBwbGFjZWhvbGRlclByb3ZpZGVyLFxuICAgIGdyb3VwcyxcbiAgICBsYXlvdXRDb25maWcsXG4gICAgbGF5b3V0Q2hhbmdlZCxcbiAgICBkZXNjcmlwdGlvbkNvbmZpZyxcbiAgICBkZXNjcmlwdGlvbkxvYWRlZCxcbiAgICB0b29sdGlwQ29uZmlnLFxuICAgIHRvb2x0aXBMb2FkZWQsXG4gICAgZmVlbFBvcHVwQ29udGFpbmVyLFxuICAgIGdldEZlZWxQb3B1cExpbmtzLFxuICAgIGV2ZW50QnVzXG4gIH0gPSBwcm9wcztcblxuICAvLyBzZXQtdXAgbGF5b3V0IGNvbnRleHRcbiAgY29uc3QgW2xheW91dCwgc2V0TGF5b3V0XSA9IHVzZVN0YXRlKGNyZWF0ZUxheW91dChsYXlvdXRDb25maWcpKTtcblxuICAvLyByZWFjdCB0byBleHRlcm5hbCBjaGFuZ2VzIGluIHRoZSBsYXlvdXQgY29uZmlnXG4gIHVzZVVwZGF0ZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbmV3TGF5b3V0ID0gY3JlYXRlTGF5b3V0KGxheW91dENvbmZpZyk7XG4gICAgc2V0TGF5b3V0KG5ld0xheW91dCk7XG4gIH0sIFtsYXlvdXRDb25maWddKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGxheW91dENoYW5nZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxheW91dENoYW5nZWQobGF5b3V0KTtcbiAgICB9XG4gIH0sIFtsYXlvdXQsIGxheW91dENoYW5nZWRdKTtcbiAgY29uc3QgZ2V0TGF5b3V0Rm9yS2V5ID0gKGtleSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIGdldChsYXlvdXQsIGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgfTtcbiAgY29uc3Qgc2V0TGF5b3V0Rm9yS2V5ID0gKGtleSwgY29uZmlnKSA9PiB7XG4gICAgY29uc3QgbmV3TGF5b3V0ID0gYXNzaWduKHt9LCBsYXlvdXQpO1xuICAgIHNldChuZXdMYXlvdXQsIGtleSwgY29uZmlnKTtcbiAgICBzZXRMYXlvdXQobmV3TGF5b3V0KTtcbiAgfTtcbiAgY29uc3QgbGF5b3V0Q29udGV4dCA9IHtcbiAgICBsYXlvdXQsXG4gICAgc2V0TGF5b3V0LFxuICAgIGdldExheW91dEZvcktleSxcbiAgICBzZXRMYXlvdXRGb3JLZXlcbiAgfTtcblxuICAvLyBzZXQtdXAgZGVzY3JpcHRpb24gY29udGV4dFxuICBjb25zdCBkZXNjcmlwdGlvbiA9IHVzZU1lbW8oKCkgPT4gY3JlYXRlRGVzY3JpcHRpb25Db250ZXh0KGRlc2NyaXB0aW9uQ29uZmlnKSwgW2Rlc2NyaXB0aW9uQ29uZmlnXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbkxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGVzY3JpcHRpb25Mb2FkZWQoZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfSwgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbkxvYWRlZF0pO1xuICBjb25zdCBnZXREZXNjcmlwdGlvbkZvcklkID0gKGlkLCBlbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uW2lkXSAmJiBkZXNjcmlwdGlvbltpZF0oZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IGRlc2NyaXB0aW9uQ29udGV4dCA9IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBnZXREZXNjcmlwdGlvbkZvcklkXG4gIH07XG5cbiAgLy8gc2V0LXVwIHRvb2x0aXAgY29udGV4dFxuICBjb25zdCB0b29sdGlwID0gdXNlTWVtbygoKSA9PiBjcmVhdGVUb29sdGlwQ29udGV4dCh0b29sdGlwQ29uZmlnKSwgW3Rvb2x0aXBDb25maWddKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHRvb2x0aXBMb2FkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRvb2x0aXBMb2FkZWQodG9vbHRpcCk7XG4gICAgfVxuICB9LCBbdG9vbHRpcCwgdG9vbHRpcExvYWRlZF0pO1xuICBjb25zdCBnZXRUb29sdGlwRm9ySWQgPSAoaWQsIGVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gdG9vbHRpcFtpZF0gJiYgdG9vbHRpcFtpZF0oZWxlbWVudCk7XG4gIH07XG4gIGNvbnN0IHRvb2x0aXBDb250ZXh0ID0ge1xuICAgIHRvb2x0aXAsXG4gICAgZ2V0VG9vbHRpcEZvcklkXG4gIH07XG4gIGNvbnN0IFtlcnJvcnMsIHNldEVycm9yc10gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IG9uU2V0RXJyb3JzID0gKHtcbiAgICBlcnJvcnNcbiAgfSkgPT4gc2V0RXJyb3JzKGVycm9ycyk7XG4gIHVzZUV2ZW50KCdwcm9wZXJ0aWVzUGFuZWwuc2V0RXJyb3JzJywgb25TZXRFcnJvcnMsIGV2ZW50QnVzKTtcbiAgY29uc3QgZXJyb3JzQ29udGV4dCA9IHtcbiAgICBlcnJvcnNcbiAgfTtcbiAgY29uc3QgZXZlbnRDb250ZXh0ID0ge1xuICAgIGV2ZW50QnVzXG4gIH07XG4gIGNvbnN0IHByb3BlcnRpZXNQYW5lbENvbnRleHQgPSB7XG4gICAgZWxlbWVudFxuICB9O1xuXG4gIC8vIGVtcHR5IHN0YXRlXG4gIGlmIChwbGFjZWhvbGRlclByb3ZpZGVyICYmICFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGpzeChQbGFjZWhvbGRlciwge1xuICAgICAgLi4ucGxhY2Vob2xkZXJQcm92aWRlci5nZXRFbXB0eSgpXG4gICAgfSk7XG4gIH1cblxuICAvLyBtdWx0aXBsZSBzdGF0ZVxuICBpZiAocGxhY2Vob2xkZXJQcm92aWRlciAmJiBpc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGpzeChQbGFjZWhvbGRlciwge1xuICAgICAgLi4ucGxhY2Vob2xkZXJQcm92aWRlci5nZXRNdWx0aXBsZSgpXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGpzeChMYXlvdXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHByb3BlcnRpZXNQYW5lbENvbnRleHQsXG4gICAgY2hpbGRyZW46IGpzeChFcnJvcnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogZXJyb3JzQ29udGV4dCxcbiAgICAgIGNoaWxkcmVuOiBqc3goRGVzY3JpcHRpb25Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBkZXNjcmlwdGlvbkNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuOiBqc3goVG9vbHRpcENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogdG9vbHRpcENvbnRleHQsXG4gICAgICAgICAgY2hpbGRyZW46IGpzeChMYXlvdXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICB2YWx1ZTogbGF5b3V0Q29udGV4dCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBqc3goRXZlbnRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBldmVudENvbnRleHQsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBqc3goRkVFTFBvcHVwUm9vdCwge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZXZlbnRCdXM6IGV2ZW50QnVzLFxuICAgICAgICAgICAgICAgIHBvcHVwQ29udGFpbmVyOiBmZWVsUG9wdXBDb250YWluZXIsXG4gICAgICAgICAgICAgICAgZ2V0UG9wdXBMaW5rczogZ2V0RmVlbFBvcHVwTGlua3MsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGpzeHMoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWxcIixcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbanN4KEhlYWRlciwge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJQcm92aWRlcjogaGVhZGVyUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgIH0pLCBqc3goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1zY3JvbGwtY29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBncm91cHMubWFwKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCA9IEdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICAgICAgICB9ID0gZ3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9KV1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY3JlYXRlTGF5b3V0KG92ZXJyaWRlcyA9IHt9LCBkZWZhdWx0cyA9IERFRkFVTFRfTEFZT1VUKSB7XG4gIHJldHVybiB7XG4gICAgLi4uZGVmYXVsdHMsXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVEZXNjcmlwdGlvbkNvbnRleHQob3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5ERUZBVUxUX0RFU0NSSVBUSU9OLFxuICAgIC4uLm92ZXJyaWRlc1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlVG9vbHRpcENvbnRleHQob3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5ERUZBVUxUX1RPT0xUSVAsXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5cbi8vIGhvb2tzIC8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcclxuICogVGhpcyBob29rIGJlaGF2ZXMgbGlrZSB1c2VMYXlvdXRFZmZlY3QsIGJ1dCBkb2VzIG5vdCB0cmlnZ2VyIG9uIHRoZSBmaXJzdCByZW5kZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVmZmVjdFxyXG4gKiBAcGFyYW0ge0FycmF5fSBkZXBzXHJcbiAqL1xuZnVuY3Rpb24gdXNlVXBkYXRlTGF5b3V0RWZmZWN0KGVmZmVjdCwgZGVwcykge1xuICBjb25zdCBpc01vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgcmV0dXJuIGVmZmVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpc01vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgfVxuICB9LCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gRHJvcGRvd25CdXR0b24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgY2hpbGRyZW4sXG4gICAgbWVudUl0ZW1zID0gW11cbiAgfSA9IHByb3BzO1xuICBjb25zdCBkcm9wZG93blJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHNldE9wZW4oZmFsc2UpO1xuICBmdW5jdGlvbiBvbkRyb3Bkb3duVG9nZ2xlKGV2ZW50KSB7XG4gICAgaWYgKG1lbnVSZWYuY3VycmVudCAmJiBtZW51UmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzZXRPcGVuKG9wZW4gPT4gIW9wZW4pO1xuICB9XG4gIGZ1bmN0aW9uIG9uQWN0aW9uQ2xpY2soZXZlbnQsIGFjdGlvbikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNsb3NlKCk7XG4gICAgYWN0aW9uKCk7XG4gIH1cbiAgdXNlR2xvYmFsQ2xpY2soW2Ryb3Bkb3duUmVmLmN1cnJlbnRdLCAoKSA9PiBjbG9zZSgpKTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1kcm9wZG93bi1idXR0b24nLCB7XG4gICAgICBvcGVuXG4gICAgfSwgY2xhc3NOYW1lKSxcbiAgICBvbkNsaWNrOiBvbkRyb3Bkb3duVG9nZ2xlLFxuICAgIHJlZjogZHJvcGRvd25SZWYsXG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwganN4KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRyb3Bkb3duLWJ1dHRvbl9fbWVudVwiLFxuICAgICAgcmVmOiBtZW51UmVmLFxuICAgICAgY2hpbGRyZW46IG1lbnVJdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiBqc3goTWVudUl0ZW0sIHtcbiAgICAgICAgb25DbGljazogb25BY3Rpb25DbGljayxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSwgaW5kZXgpKVxuICAgIH0pXVxuICB9KTtcbn1cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgaXRlbSxcbiAgb25DbGlja1xufSkge1xuICBpZiAoaXRlbS5zZXBhcmF0b3IpIHtcbiAgICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRyb3Bkb3duLWJ1dHRvbl9fbWVudS1pdGVtIGJpby1wcm9wZXJ0aWVzLXBhbmVsLWRyb3Bkb3duLWJ1dHRvbl9fbWVudS1pdGVtLS1zZXBhcmF0b3JcIlxuICAgIH0pO1xuICB9XG4gIGlmIChpdGVtLmFjdGlvbikge1xuICAgIHJldHVybiBqc3goXCJidXR0b25cIiwge1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRyb3Bkb3duLWJ1dHRvbl9fbWVudS1pdGVtIGJpby1wcm9wZXJ0aWVzLXBhbmVsLWRyb3Bkb3duLWJ1dHRvbl9fbWVudS1pdGVtLS1hY3Rpb25hYmxlXCIsXG4gICAgICBvbkNsaWNrOiBldmVudCA9PiBvbkNsaWNrKGV2ZW50LCBpdGVtLmFjdGlvbiksXG4gICAgICBjaGlsZHJlbjogaXRlbS5lbnRyeVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRyb3Bkb3duLWJ1dHRvbl9fbWVudS1pdGVtXCIsXG4gICAgY2hpbGRyZW46IGl0ZW0uZW50cnlcbiAgfSk7XG59XG5cbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5PG51bGwgfCBFbGVtZW50Pn0gaWdub3JlZEVsZW1lbnRzXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXHJcbiAqL1xuZnVuY3Rpb24gdXNlR2xvYmFsQ2xpY2soaWdub3JlZEVsZW1lbnRzLCBjYWxsYmFjaykge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdGVuZXIoZXZlbnQpIHtcbiAgICAgIGlmIChpZ25vcmVkRWxlbWVudHMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgJiYgZWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyLCB7XG4gICAgICBjYXB0dXJlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbGlzdGVuZXIsIHtcbiAgICAgIGNhcHR1cmU6IHRydWVcbiAgICB9KTtcbiAgfSwgWy4uLmlnbm9yZWRFbGVtZW50cywgY2FsbGJhY2tdKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyQnV0dG9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbiA9IG51bGwsXG4gICAgY2xhc3M6IGNsYXNzbmFtZSxcbiAgICBvbkNsaWNrID0gKCkgPT4ge30sXG4gICAgLi4ub3RoZXJQcm9wc1xuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgLi4ub3RoZXJQcm9wcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItYnV0dG9uJywgY2xhc3NuYW1lKSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59XG5cbi8qKlxyXG4gKiBAdHlwZWRlZiB7IHtcclxuICogICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XHJcbiAqIH0gfSBUcmFuc2xhdGVSZXBsYWNlbWVudHNcclxuICovXG5cbi8qKlxyXG4gKiBBIHNpbXBsZSB0cmFuc2xhdGlvbiBzdHViIHRvIGJlIHVzZWQgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnQuXHJcbiAqIENhbiBiZSBlYXNpbHkgcmVwbGFjZWQgd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbi5cclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlIHRvIGludGVycG9sYXRlXHJcbiAqIEBwYXJhbSB7VHJhbnNsYXRlUmVwbGFjZW1lbnRzfSBbcmVwbGFjZW1lbnRzXSBhIG1hcCB3aXRoIHN1YnN0aXR1dGVzXHJcbiAqXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHRyYW5zbGF0ZWQgc3RyaW5nXHJcbiAqL1xuZnVuY3Rpb24gdHJhbnNsYXRlRmFsbGJhY2sodGVtcGxhdGUsIHJlcGxhY2VtZW50cykge1xuICByZXBsYWNlbWVudHMgPSByZXBsYWNlbWVudHMgfHwge307XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC97KFtefV0rKX0vZywgZnVuY3Rpb24gKF8sIGtleSkge1xuICAgIHJldHVybiByZXBsYWNlbWVudHNba2V5XSB8fCAneycgKyBrZXkgKyAnfSc7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBDb2xsYXBzaWJsZUVudHJ5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGVudHJpZXMgPSBbXSxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBvcGVuOiBzaG91bGRPcGVuLFxuICAgIHJlbW92ZSxcbiAgICB0cmFuc2xhdGUgPSB0cmFuc2xhdGVGYWxsYmFja1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKHNob3VsZE9wZW4pO1xuICBjb25zdCB0b2dnbGVPcGVuID0gKCkgPT4gc2V0T3Blbighb3Blbik7XG4gIGNvbnN0IHtcbiAgICBvblNob3dcbiAgfSA9IHVzZUNvbnRleHQoTGF5b3V0Q29udGV4dCk7XG4gIGNvbnN0IHByb3BlcnRpZXNQYW5lbENvbnRleHQgPSB7XG4gICAgLi4udXNlQ29udGV4dChMYXlvdXRDb250ZXh0KSxcbiAgICBvblNob3c6IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHNldE9wZW4odHJ1ZSk7XG4gICAgICBpZiAoaXNGdW5jdGlvbihvblNob3cpKSB7XG4gICAgICAgIG9uU2hvdygpO1xuICAgICAgfVxuICAgIH0sIFtvblNob3csIHNldE9wZW5dKVxuICB9O1xuICBjb25zdCBwbGFjZWhvbGRlckxhYmVsID0gdHJhbnNsYXRlKCc8ZW1wdHk+Jyk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWNvbGxhcHNpYmxlLWVudHJ5Jywgb3BlbiA/ICdvcGVuJyA6ICcnKSxcbiAgICBjaGlsZHJlbjogW2pzeHMoXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtY29sbGFwc2libGUtZW50cnktaGVhZGVyXCIsXG4gICAgICBvbkNsaWNrOiB0b2dnbGVPcGVuLFxuICAgICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgICB0aXRsZTogbGFiZWwgfHwgcGxhY2Vob2xkZXJMYWJlbCxcbiAgICAgICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWNvbGxhcHNpYmxlLWVudHJ5LWhlYWRlci10aXRsZScsICFsYWJlbCAmJiAnZW1wdHknKSxcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsIHx8IHBsYWNlaG9sZGVyTGFiZWxcbiAgICAgIH0pLCBqc3goXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICB0aXRsZTogdHJhbnNsYXRlKCdUb2dnbGUgbGlzdCBpdGVtJyksXG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93ICBiaW8tcHJvcGVydGllcy1wYW5lbC1jb2xsYXBzaWJsZS1lbnRyeS1hcnJvd1wiLFxuICAgICAgICBjaGlsZHJlbjoganN4KEFycm93SWNvbiwge1xuICAgICAgICAgIGNsYXNzOiBvcGVuID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd24nIDogJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LXJpZ2h0J1xuICAgICAgICB9KVxuICAgICAgfSksIHJlbW92ZSA/IGpzeChcImJ1dHRvblwiLCB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0RlbGV0ZSBpdGVtJyksXG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXJlbW92ZS1lbnRyeVwiLFxuICAgICAgICBvbkNsaWNrOiByZW1vdmUsXG4gICAgICAgIGNoaWxkcmVuOiBqc3goRGVsZXRlSWNvbiwge30pXG4gICAgICB9KSA6IG51bGxdXG4gICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtY29sbGFwc2libGUtZW50cnktZW50cmllcycsIG9wZW4gPyAnb3BlbicgOiAnJyksXG4gICAgICBjaGlsZHJlbjoganN4KExheW91dENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHByb3BlcnRpZXNQYW5lbENvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuOiBlbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH0gPSBlbnRyeTtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgIGtleTogaWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7XG4gICAgYXV0b0ZvY3VzRW50cnksXG4gICAgYXV0b09wZW4sXG4gICAgdHJhbnNsYXRlID0gdHJhbnNsYXRlRmFsbGJhY2tcbiAgfSA9IHByb3BzO1xuXG4gIC8vIGZvY3VzIHNwZWNpZmllZCBlbnRyeSBvbiBhdXRvIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b09wZW4gJiYgYXV0b0ZvY3VzRW50cnkpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gcXVlcnkoYFtkYXRhLWVudHJ5LWlkPVwiJHthdXRvRm9jdXNFbnRyeX1cIl1gKTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUlucHV0ID0gcXVlcnkoJy5iaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dCcsIGVudHJ5KTtcbiAgICAgIGlmIChmb2N1c2FibGVJbnB1dCkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihmb2N1c2FibGVJbnB1dC5zZWxlY3QpKSB7XG4gICAgICAgICAgZm9jdXNhYmxlSW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihmb2N1c2FibGVJbnB1dC5mb2N1cykpIHtcbiAgICAgICAgICBmb2N1c2FibGVJbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGZvY3VzYWJsZUlucHV0LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbYXV0b09wZW4sIGF1dG9Gb2N1c0VudHJ5XSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWxpc3QtaXRlbVwiLFxuICAgIGNoaWxkcmVuOiBqc3goQ29sbGFwc2libGVFbnRyeSwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBvcGVuOiBhdXRvT3BlbixcbiAgICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlXG4gICAgfSlcbiAgfSk7XG59XG5cbmNvbnN0IG5vb3AkMSA9ICgpID0+IHt9O1xuXG4vKipcclxuICogQHBhcmFtIHtpbXBvcnQoJy4uL1Byb3BlcnRpZXNQYW5lbCcpLkxpc3RHcm91cERlZmluaXRpb259IHByb3BzXHJcbiAqL1xuZnVuY3Rpb24gTGlzdEdyb3VwKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhZGQsXG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBpdGVtcyxcbiAgICBsYWJlbCxcbiAgICBzaG91bGRPcGVuID0gZmFsc2UsXG4gICAgdHJhbnNsYXRlID0gdHJhbnNsYXRlRmFsbGJhY2tcbiAgfSA9IHByb3BzO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcm9wcy5zaG91bGRTb3J0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCd0aGUgcHJvcGVydHkgXFwnc2hvdWxkU29ydFxcJyBpcyBubyBsb25nZXIgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9LCBbcHJvcHMuc2hvdWxkU29ydF0pO1xuICBjb25zdCBncm91cFJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlTGF5b3V0U3RhdGUoWydncm91cHMnLCBpZCwgJ29wZW4nXSwgc2hvdWxkT3Blbik7XG4gIGNvbnN0IFtzdGlja3ksIHNldFN0aWNreV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG9uU2hvdyA9IHVzZUNhbGxiYWNrKCgpID0+IHNldE9wZW4odHJ1ZSksIFtzZXRPcGVuXSk7XG4gIGNvbnN0IFtsb2NhbEl0ZW1zLCBzZXRMb2NhbEl0ZW1zXSA9IHVzZVN0YXRlKFtdKTtcblxuICAvLyBGbGFnIHRvIG1hcmsgdGhhdCBhZGQgYnV0dG9uIHdhcyBjbGlja2VkIGluIHRoZSBsYXN0IHJlbmRlciBjeWNsZVxuICBjb25zdCBbYWRkVHJpZ2dlcmVkLCBzZXRBZGRUcmlnZ2VyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBwcmV2RWxlbWVudCA9IHVzZVByZXZpb3VzKGVsZW1lbnQpO1xuICBjb25zdCB0b2dnbGVPcGVuID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0T3Blbighb3BlbiksIFtvcGVuXSk7XG4gIGNvbnN0IG9wZW5JdGVtSWRzID0gZWxlbWVudCA9PT0gcHJldkVsZW1lbnQgJiYgb3BlbiAmJiBhZGRUcmlnZ2VyZWQgPyBnZXROZXdJdGVtSWRzKGl0ZW1zLCBsb2NhbEl0ZW1zKSA6IFtdO1xuXG4gIC8vIHJlc2V0IGxvY2FsIHN0YXRlIGFmdGVyIGl0ZW1zIGNoYW5nZWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEl0ZW1zKGl0ZW1zKTtcbiAgICBzZXRBZGRUcmlnZ2VyZWQoZmFsc2UpO1xuICB9LCBbaXRlbXNdKTtcblxuICAvLyBzZXQgY3NzIGNsYXNzIHdoZW4gZ3JvdXAgaXMgc3RpY2t5IHRvIHRvcFxuICB1c2VTdGlja3lJbnRlcnNlY3Rpb25PYnNlcnZlcihncm91cFJlZiwgJ2Rpdi5iaW8tcHJvcGVydGllcy1wYW5lbC1zY3JvbGwtY29udGFpbmVyJywgc2V0U3RpY2t5KTtcbiAgY29uc3QgaGFzSXRlbXMgPSAhIWl0ZW1zLmxlbmd0aDtcbiAgY29uc3QgcHJvcGVydGllc1BhbmVsQ29udGV4dCA9IHtcbiAgICAuLi51c2VDb250ZXh0KExheW91dENvbnRleHQpLFxuICAgIG9uU2hvd1xuICB9O1xuICBjb25zdCBoYW5kbGVBZGRDbGljayA9IGUgPT4ge1xuICAgIHNldEFkZFRyaWdnZXJlZCh0cnVlKTtcbiAgICBzZXRPcGVuKHRydWUpO1xuICAgIGFkZChlKTtcbiAgfTtcbiAgY29uc3QgYWxsRXJyb3JzID0gdXNlRXJyb3JzKCk7XG4gIGNvbnN0IGhhc0Vycm9yID0gaXRlbXMuc29tZShpdGVtID0+IHtcbiAgICBpZiAoYWxsRXJyb3JzW2l0ZW0uaWRdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFpdGVtLmVudHJpZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbHNvIGNoZWNrIGlmIHRoZSBlcnJvciBpcyBuZXN0ZWQsIGUuZy4gZm9yIG5hbWUtdmFsdWUgZW50cmllc1xuICAgIHJldHVybiBpdGVtLmVudHJpZXMuc29tZShlbnRyeSA9PiBhbGxFcnJvcnNbZW50cnkuaWRdKTtcbiAgfSk7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cFwiLFxuICAgIFwiZGF0YS1ncm91cC1pZFwiOiAnZ3JvdXAtJyArIGlkLFxuICAgIHJlZjogZ3JvdXBSZWYsXG4gICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXInLCBoYXNJdGVtcyA/ICcnIDogJ2VtcHR5JywgaGFzSXRlbXMgJiYgb3BlbiA/ICdvcGVuJyA6ICcnLCBzdGlja3kgJiYgb3BlbiA/ICdzdGlja3knIDogJycpLFxuICAgICAgb25DbGljazogaGFzSXRlbXMgPyB0b2dnbGVPcGVuIDogbm9vcCQxLFxuICAgICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgICB0aXRsZTogcHJvcHMudG9vbHRpcCA/IG51bGwgOiBsYWJlbCxcbiAgICAgICAgXCJkYXRhLXRpdGxlXCI6IGxhYmVsLFxuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItdGl0bGVcIixcbiAgICAgICAgY2hpbGRyZW46IGpzeChUb29sdGlwV3JhcHBlciwge1xuICAgICAgICAgIHZhbHVlOiBwcm9wcy50b29sdGlwLFxuICAgICAgICAgIGZvcklkOiAnZ3JvdXAtJyArIGlkLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgcGFyZW50OiBncm91cFJlZixcbiAgICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgICAgfSlcbiAgICAgIH0pLCBqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZ3JvdXAtaGVhZGVyLWJ1dHRvbnNcIixcbiAgICAgICAgY2hpbGRyZW46IFthZGQgPyBqc3hzKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NyZWF0ZSBuZXcgbGlzdCBpdGVtJyksXG4gICAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZ3JvdXAtaGVhZGVyLWJ1dHRvbiBiaW8tcHJvcGVydGllcy1wYW5lbC1hZGQtZW50cnlcIixcbiAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVBZGRDbGljayxcbiAgICAgICAgICBjaGlsZHJlbjogW2pzeChDcmVhdGVJY29uLCB7fSksICFoYXNJdGVtcyA/IGpzeChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtYWRkLWVudHJ5LWxhYmVsXCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdDcmVhdGUnKVxuICAgICAgICAgIH0pIDogbnVsbF1cbiAgICAgICAgfSkgOiBudWxsLCBoYXNJdGVtcyA/IGpzeChcImRpdlwiLCB7XG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZShgTGlzdCBjb250YWlucyB7bnVtT2ZJdGVtc30gaXRlbSR7aXRlbXMubGVuZ3RoICE9IDEgPyAncycgOiAnJ31gLCB7XG4gICAgICAgICAgICBudW1PZkl0ZW1zOiBpdGVtcy5sZW5ndGhcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtbGlzdC1iYWRnZScsIGhhc0Vycm9yID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWxpc3QtYmFkZ2UtLWVycm9yJyA6ICcnKSxcbiAgICAgICAgICBjaGlsZHJlbjogaXRlbXMubGVuZ3RoXG4gICAgICAgIH0pIDogbnVsbCwgaGFzSXRlbXMgPyBqc3goXCJidXR0b25cIiwge1xuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnVG9nZ2xlIHNlY3Rpb24nKSxcbiAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItYnV0dG9uIGJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93XCIsXG4gICAgICAgICAgY2hpbGRyZW46IGpzeChBcnJvd0ljb24sIHtcbiAgICAgICAgICAgIGNsYXNzOiBvcGVuID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd24nIDogJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LXJpZ2h0J1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pIDogbnVsbF1cbiAgICAgIH0pXVxuICAgIH0pLCBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWxpc3QnLCBvcGVuICYmIGhhc0l0ZW1zID8gJ29wZW4nIDogJycpLFxuICAgICAgY2hpbGRyZW46IGpzeChMYXlvdXRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBwcm9wZXJ0aWVzUGFuZWxDb250ZXh0LFxuICAgICAgICBjaGlsZHJlbjogaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgIH0gPSBpdGVtO1xuXG4gICAgICAgICAgLy8gaWYgaXRlbSB3YXMgYWRkZWQsIG9wZW4gaXRcbiAgICAgICAgICAvLyBleGlzdGluZyBpdGVtcyB3aWxsIG5vdCBiZSBhZmZlY3RlZCBhcyBhdXRvT3BlblxuICAgICAgICAgIC8vIGlzIG9ubHkgYXBwbGllZCBvbiBmaXJzdCByZW5kZXJcbiAgICAgICAgICBjb25zdCBhdXRvT3BlbiA9IG9wZW5JdGVtSWRzLmluY2x1ZGVzKGl0ZW0uaWQpO1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KExpc3RJdGVtLCB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgYXV0b09wZW46IGF1dG9PcGVuLFxuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBnZXROZXdJdGVtSWRzKG5ld0l0ZW1zLCBvbGRJdGVtcykge1xuICBjb25zdCBuZXdJZHMgPSBuZXdJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgY29uc3Qgb2xkSWRzID0gb2xkSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gIHJldHVybiBuZXdJZHMuZmlsdGVyKGl0ZW1JZCA9PiAhb2xkSWRzLmluY2x1ZGVzKGl0ZW1JZCkpO1xufVxuXG5mdW5jdGlvbiBDaGVja2JveChwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgb25DaGFuZ2UsXG4gICAgZGlzYWJsZWQsXG4gICAgdmFsdWUgPSBmYWxzZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2xvY2FsVmFsdWUsIHNldExvY2FsVmFsdWVdID0gdXNlU3RhdGUodmFsdWUpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2VDYWxsYmFjayA9ICh7XG4gICAgdGFyZ2V0XG4gIH0pID0+IHtcbiAgICBvbkNoYW5nZSh0YXJnZXQuY2hlY2tlZCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGhhbmRsZUNoYW5nZUNhbGxiYWNrKGUpO1xuICAgIHNldExvY2FsVmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbG9jYWxWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRMb2NhbFZhbHVlKHZhbHVlKTtcbiAgfSwgW3ZhbHVlXSk7XG4gIGNvbnN0IHJlZiA9IHVzZVNob3dFbnRyeUV2ZW50KGlkKTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWNoZWNrYm94XCIsXG4gICAgY2hpbGRyZW46IFtqc3goXCJpbnB1dFwiLCB7XG4gICAgICByZWY6IHJlZixcbiAgICAgIGlkOiBwcmVmaXhJZCQ0KGlkKSxcbiAgICAgIG5hbWU6IGlkLFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtaW5wdXRcIixcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICBjaGVja2VkOiBsb2NhbFZhbHVlLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgfSksIGpzeChcImxhYmVsXCIsIHtcbiAgICAgIGZvcjogcHJlZml4SWQkNChpZCksXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IGpzeChUb29sdGlwV3JhcHBlciwge1xuICAgICAgICB2YWx1ZTogdG9vbHRpcCxcbiAgICAgICAgZm9ySWQ6IGlkLFxuICAgICAgICBlbGVtZW50OiBwcm9wcy5lbGVtZW50LFxuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufVxuXG4vKipcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcy5lbGVtZW50XHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5pZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuZGVzY3JpcHRpb25cclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmxhYmVsXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLmdldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uRm9jdXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25CbHVyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydCgncHJlYWN0JykuQ29tcG9uZW50fSBwcm9wcy50b29sdGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmRpc2FibGVkXVxyXG4gKi9cbmZ1bmN0aW9uIENoZWNrYm94RW50cnkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbGFiZWwsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGlzYWJsZWQsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCk7XG4gIGNvbnN0IGVycm9yID0gdXNlRXJyb3IoaWQpO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnkgYmlvLXByb3BlcnRpZXMtcGFuZWwtY2hlY2tib3gtZW50cnlcIixcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2hpbGRyZW46IFtqc3goQ2hlY2tib3gsIHtcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIG9uQ2hhbmdlOiBzZXRWYWx1ZSxcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHRvb2x0aXA6IHRvb2x0aXAsXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSwgZWxlbWVudCksIGVycm9yICYmIGpzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1lcnJvclwiLFxuICAgICAgY2hpbGRyZW46IGVycm9yXG4gICAgfSksIGpzeChEZXNjcmlwdGlvbiwge1xuICAgICAgZm9ySWQ6IGlkLFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHZhbHVlOiBkZXNjcmlwdGlvblxuICAgIH0pXVxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzRWRpdGVkJDUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiAhIW5vZGUuY2hlY2tlZDtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBwcmVmaXhJZCQ0KGlkKSB7XG4gIHJldHVybiBgYmlvLXByb3BlcnRpZXMtcGFuZWwtJHtpZH1gO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbi8qKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmlkXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5kZXNjcmlwdGlvblxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmRlYm91bmNlXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGlzYWJsZWRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmxhYmVsXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLmdldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnNldFZhbHVlXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLnRvb2x0aXBDb250YWluZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMudmFsaWRhdGVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuc2hvd1xyXG4gKi9cbmZ1bmN0aW9uIFRlbXBsYXRpbmdFbnRyeShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBkZWJvdW5jZSxcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbCxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICB0b29sdGlwQ29udGFpbmVyLFxuICAgIHZhbGlkYXRlLFxuICAgIHNob3cgPSBub29wXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW3ZhbGlkYXRpb25FcnJvciwgc2V0VmFsaWRhdGlvbkVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9jYWxFcnJvciwgc2V0TG9jYWxFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgbGV0IHZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdGUpKSB7XG4gICAgICBjb25zdCBuZXdWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZSh2YWx1ZSkgfHwgbnVsbDtcbiAgICAgIHNldFZhbGlkYXRpb25FcnJvcihuZXdWYWxpZGF0aW9uRXJyb3IpO1xuICAgIH1cbiAgfSwgW3ZhbHVlLCB2YWxpZGF0ZV0pO1xuICBjb25zdCBvbklucHV0ID0gdXNlU3RhdGljQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIGxldCBuZXdWYWxpZGF0aW9uRXJyb3IgPSBudWxsO1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbGlkYXRlKSkge1xuICAgICAgbmV3VmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGUobmV3VmFsdWUpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLy8gZG9uJ3QgY3JlYXRlIG11bHRpcGxlIGNvbW1hbmRTdGFjayBlbnRyaWVzIGZvciB0aGUgc2FtZSB2YWx1ZVxuICAgIGlmIChuZXdWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHNldFZhbHVlKG5ld1ZhbHVlLCBuZXdWYWxpZGF0aW9uRXJyb3IpO1xuICAgIH1cbiAgICBzZXRWYWxpZGF0aW9uRXJyb3IobmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgfSk7XG4gIGNvbnN0IG9uRXJyb3IgPSB1c2VDYWxsYmFjayhlcnIgPT4ge1xuICAgIHNldExvY2FsRXJyb3IoZXJyKTtcbiAgfSwgW10pO1xuICBjb25zdCB0ZW1wb3JhcnlFcnJvciA9IHVzZUVycm9yKGlkKTtcbiAgY29uc3QgZXJyb3IgPSBsb2NhbEVycm9yIHx8IHRlbXBvcmFyeUVycm9yIHx8IHZhbGlkYXRpb25FcnJvcjtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1lbnRyeScsIGVycm9yID8gJ2hhcy1lcnJvcicgOiAnJyksXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBbanN4KFRlbXBsYXRpbmcsIHtcbiAgICAgIGRlYm91bmNlOiBkZWJvdW5jZSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIG9uSW5wdXQ6IG9uSW5wdXQsXG4gICAgICBvbkVycm9yOiBvbkVycm9yLFxuICAgICAgc2hvdzogc2hvdyxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIHRvb2x0aXBDb250YWluZXI6IHRvb2x0aXBDb250YWluZXJcbiAgICB9LCBlbGVtZW50KSwgZXJyb3IgJiYganN4KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVycm9yXCIsXG4gICAgICBjaGlsZHJlbjogZXJyb3JcbiAgICB9KSwganN4KERlc2NyaXB0aW9uLCB7XG4gICAgICBmb3JJZDogaWQsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgdmFsdWU6IGRlc2NyaXB0aW9uXG4gICAgfSldXG4gIH0pO1xufVxuZnVuY3Rpb24gVGVtcGxhdGluZyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZGVib3VuY2UsXG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgb25JbnB1dCxcbiAgICBvbkVycm9yLFxuICAgIHZhbHVlID0gJycsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB0b29sdGlwQ29udGFpbmVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2xvY2FsVmFsdWUsIHNldExvY2FsVmFsdWVdID0gdXNlU3RhdGUodmFsdWUpO1xuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VTaG93RW50cnlFdmVudChpZCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBbZm9jdXMsIF9zZXRGb2N1c10gPSB1c2VTdGF0ZSh1bmRlZmluZWQpO1xuICBjb25zdCBzZXRGb2N1cyA9IChvZmZzZXQgPSAwKSA9PiB7XG4gICAgY29uc3QgaGFzRm9jdXMgPSBjb250YWluZXJSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICAgIC8vIEtlZXAgY2FyZXQgcG9zaXRpb24gaWYgaXQgaXMgYWxyZWFkeSBmb2N1c2VkLCBvdGhlcndpc2UgZm9jdXMgYXQgdGhlIGVuZFxuICAgIGNvbnN0IHBvc2l0aW9uID0gaGFzRm9jdXMgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IDogSW5maW5pdHk7XG4gICAgX3NldEZvY3VzKHBvc2l0aW9uICsgb2Zmc2V0KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlSW5wdXRDYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkZWJvdW5jZShuZXdWYWx1ZSA9PiBvbklucHV0KG5ld1ZhbHVlLmxlbmd0aCA/IG5ld1ZhbHVlIDogdW5kZWZpbmVkKSk7XG4gIH0sIFtvbklucHV0LCBkZWJvdW5jZV0pO1xuICBjb25zdCBoYW5kbGVJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICBoYW5kbGVJbnB1dENhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgICBzZXRMb2NhbFZhbHVlKG5ld1ZhbHVlKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlTGludCA9IHVzZVN0YXRpY0NhbGxiYWNrKGxpbnQgPT4ge1xuICAgIGNvbnN0IGVycm9ycyA9IGxpbnQgJiYgbGludC5sZW5ndGggJiYgbGludC5maWx0ZXIoZSA9PiBlLnNldmVyaXR5ID09PSAnZXJyb3InKSB8fCBbXTtcbiAgICBpZiAoIWVycm9ycy5sZW5ndGgpIHtcbiAgICAgIG9uRXJyb3IodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXJyb3IgPSBsaW50WzBdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtlcnJvci5zb3VyY2V9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICBvbkVycm9yKG1lc3NhZ2UpO1xuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGZvY3VzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoZm9jdXMpO1xuICAgICAgX3NldEZvY3VzKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9LCBbZm9jdXNdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IGxvY2FsVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0TG9jYWxWYWx1ZSh2YWx1ZSA/IHZhbHVlIDogJycpO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWZlZWxlcnNcIixcbiAgICBjaGlsZHJlbjogW2pzeChcImxhYmVsXCIsIHtcbiAgICAgIGlkOiBwcmVmaXhJZExhYmVsKGlkKSxcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWxhYmVsXCIsXG4gICAgICBvbkNsaWNrOiAoKSA9PiBzZXRGb2N1cygpLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsZXJzLWlucHV0XCIsXG4gICAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICAgIGNoaWxkcmVuOiBqc3goQ29kZUVkaXRvciQxLCB7XG4gICAgICAgIG5hbWU6IGlkLFxuICAgICAgICBvbklucHV0OiBoYW5kbGVJbnB1dCxcbiAgICAgICAgY29udGVudEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogcHJlZml4SWRMYWJlbChpZClcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBvbkxpbnQ6IGhhbmRsZUxpbnQsXG4gICAgICAgIHZhbHVlOiBsb2NhbFZhbHVlLFxuICAgICAgICByZWY6IGVkaXRvclJlZixcbiAgICAgICAgdG9vbHRpcENvbnRhaW5lcjogdG9vbHRpcENvbnRhaW5lclxuICAgICAgfSlcbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBpc0VkaXRlZCQ0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgKCEhbm9kZS52YWx1ZSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucygnZWRpdGVkJykpO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHByZWZpeElkTGFiZWwoaWQpIHtcbiAgcmV0dXJuIGBiaW8tcHJvcGVydGllcy1wYW5lbC1mZWVsZXJzLSR7aWR9LWxhYmVsYDtcbn1cblxuZnVuY3Rpb24gTGlzdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgZWxlbWVudCxcbiAgICBpdGVtcyA9IFtdLFxuICAgIGNvbXBvbmVudCxcbiAgICBsYWJlbCA9ICc8ZW1wdHk+JyxcbiAgICBvcGVuOiBzaG91bGRPcGVuLFxuICAgIG9uQWRkLFxuICAgIG9uUmVtb3ZlLFxuICAgIGF1dG9Gb2N1c0VudHJ5LFxuICAgIC4uLnJlc3RQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKCEhc2hvdWxkT3Blbik7XG4gIGNvbnN0IGhhc0l0ZW1zID0gISFpdGVtcy5sZW5ndGg7XG4gIGNvbnN0IHRvZ2dsZU9wZW4gPSAoKSA9PiBoYXNJdGVtcyAmJiBzZXRPcGVuKCFvcGVuKTtcbiAgY29uc3QgZWxlbWVudENoYW5nZWQgPSB1c2VQcmV2aW91cyhlbGVtZW50KSAhPT0gZWxlbWVudDtcbiAgY29uc3QgbmV3SXRlbXMgPSB1c2VOZXdJdGVtcyhpdGVtcywgZWxlbWVudENoYW5nZWQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuICYmICFoYXNJdGVtcykge1xuICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfVxuICB9LCBbb3BlbiwgaGFzSXRlbXNdKTtcblxuICAvKipcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICovXG4gIGZ1bmN0aW9uIGFkZEl0ZW0oZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvbkFkZCgpO1xuICAgIGlmICghb3Blbikge1xuICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIFwiZGF0YS1lbnRyeS1pZFwiOiBpZCxcbiAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnknLCAnYmlvLXByb3BlcnRpZXMtcGFuZWwtbGlzdC1lbnRyeScsIGhhc0l0ZW1zID8gJycgOiAnZW1wdHknLCBvcGVuID8gJ29wZW4nIDogJycpLFxuICAgIGNoaWxkcmVuOiBbanN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1saXN0LWVudHJ5LWhlYWRlclwiLFxuICAgICAgb25DbGljazogdG9nZ2xlT3BlbixcbiAgICAgIGNoaWxkcmVuOiBbanN4KFwiZGl2XCIsIHtcbiAgICAgICAgdGl0bGU6IGxhYmVsLFxuICAgICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtbGlzdC1lbnRyeS1oZWFkZXItdGl0bGUnLCBvcGVuICYmICdvcGVuJyksXG4gICAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgICAgfSksIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1saXN0LWVudHJ5LWhlYWRlci1idXR0b25zXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbanN4cyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICB0aXRsZTogXCJDcmVhdGUgbmV3IGxpc3QgaXRlbVwiLFxuICAgICAgICAgIG9uQ2xpY2s6IGFkZEl0ZW0sXG4gICAgICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtYWRkLWVudHJ5XCIsXG4gICAgICAgICAgY2hpbGRyZW46IFtqc3goQ3JlYXRlSWNvbiwge30pLCAhaGFzSXRlbXMgPyBqc3goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFkZC1lbnRyeS1sYWJlbFwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFwiQ3JlYXRlXCJcbiAgICAgICAgICB9KSA6IG51bGxdXG4gICAgICAgIH0pLCBoYXNJdGVtcyAmJiBqc3goXCJkaXZcIiwge1xuICAgICAgICAgIHRpdGxlOiBgTGlzdCBjb250YWlucyAke2l0ZW1zLmxlbmd0aH0gaXRlbSR7aXRlbXMubGVuZ3RoICE9IDEgPyAncycgOiAnJ31gLFxuICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWxpc3QtYmFkZ2VcIixcbiAgICAgICAgICBjaGlsZHJlbjogaXRlbXMubGVuZ3RoXG4gICAgICAgIH0pLCBoYXNJdGVtcyAmJiBqc3goXCJidXR0b25cIiwge1xuICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgdGl0bGU6IFwiVG9nZ2xlIGxpc3QgaXRlbVwiLFxuICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93XCIsXG4gICAgICAgICAgY2hpbGRyZW46IGpzeChBcnJvd0ljb24sIHtcbiAgICAgICAgICAgIGNsYXNzOiBvcGVuID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd24nIDogJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LXJpZ2h0J1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pXVxuICAgICAgfSldXG4gICAgfSksIGhhc0l0ZW1zICYmIGpzeChJdGVtc0xpc3QsIHtcbiAgICAgIC4uLnJlc3RQcm9wcyxcbiAgICAgIGF1dG9Gb2N1c0VudHJ5OiBhdXRvRm9jdXNFbnRyeSxcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgIG5ld0l0ZW1zOiBuZXdJdGVtcyxcbiAgICAgIG9uUmVtb3ZlOiBvblJlbW92ZSxcbiAgICAgIG9wZW46IG9wZW5cbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBJdGVtc0xpc3QocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGF1dG9Gb2N1c0VudHJ5LFxuICAgIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgaXRlbXMsXG4gICAgbmV3SXRlbXMsXG4gICAgb25SZW1vdmUsXG4gICAgb3BlbixcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCBnZXRLZXkgPSB1c2VLZXlGYWN0b3J5KCk7XG4gIGNvbnN0IG5ld0l0ZW0gPSBuZXdJdGVtc1swXTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobmV3SXRlbSAmJiBhdXRvRm9jdXNFbnRyeSkge1xuICAgICAgLy8gKDApIHNlbGVjdCB0aGUgcGFyZW50IGVudHJ5IChjb250YWluaW5nIGFsbCBsaXN0IGl0ZW1zKVxuICAgICAgY29uc3QgZW50cnkgPSBxdWVyeShgW2RhdGEtZW50cnktaWQ9XCIke2lkfVwiXWApO1xuXG4gICAgICAvLyAoMSkgc2VsZWN0IHRoZSBmaXJzdCBpbnB1dCBvciBhIGN1c3RvbSBlbGVtZW50IHRvIGJlIGZvY3Vzc2VkXG4gICAgICBjb25zdCBzZWxlY3RvciA9IHR5cGVvZiBhdXRvRm9jdXNFbnRyeSA9PT0gJ2Jvb2xlYW4nID8gJy5iaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dCcgOiBhdXRvRm9jdXNFbnRyeTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUlucHV0ID0gcXVlcnkoc2VsZWN0b3IsIGVudHJ5KTtcblxuICAgICAgLy8gKDIpIHNldCBmb2N1c1xuICAgICAgaWYgKGZvY3VzYWJsZUlucHV0KSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZvY3VzYWJsZUlucHV0LnNlbGVjdCkpIHtcbiAgICAgICAgICBmb2N1c2FibGVJbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKGZvY3VzYWJsZUlucHV0LmZvY3VzKSkge1xuICAgICAgICAgIGZvY3VzYWJsZUlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtuZXdJdGVtLCBhdXRvRm9jdXNFbnRyeSwgaWRdKTtcbiAgcmV0dXJuIGpzeChcIm9sXCIsIHtcbiAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtbGlzdC1lbnRyeS1pdGVtcycsIG9wZW4gPyAnb3BlbicgOiAnJyksXG4gICAgY2hpbGRyZW46IGl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGdldEtleShpdGVtKTtcbiAgICAgIHJldHVybiBqc3hzKFwibGlcIiwge1xuICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1saXN0LWVudHJ5LWl0ZW1cIixcbiAgICAgICAgY2hpbGRyZW46IFtqc3goQ29tcG9uZW50LCB7XG4gICAgICAgICAgLi4ucmVzdFByb3BzLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgIG9wZW46IGl0ZW0gPT09IG5ld0l0ZW1cbiAgICAgICAgfSksIG9uUmVtb3ZlICYmIGpzeChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICB0aXRsZTogXCJEZWxldGUgaXRlbVwiLFxuICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXJlbW92ZS1lbnRyeSBiaW8tcHJvcGVydGllcy1wYW5lbC1yZW1vdmUtbGlzdC1lbnRyeVwiLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uUmVtb3ZlICYmIG9uUmVtb3ZlKGl0ZW0pLFxuICAgICAgICAgIGNoaWxkcmVuOiBqc3goRGVsZXRlSWNvbiwge30pXG4gICAgICAgIH0pXVxuICAgICAgfSwga2V5KTtcbiAgICB9KVxuICB9KTtcbn1cbmZ1bmN0aW9uIHVzZU5ld0l0ZW1zKGl0ZW1zID0gW10sIHNob3VsZFJlc2V0KSB7XG4gIGNvbnN0IHByZXZpb3VzSXRlbXMgPSB1c2VQcmV2aW91cyhpdGVtcy5zbGljZSgpKSB8fCBbXTtcbiAgaWYgKHNob3VsZFJlc2V0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBwcmV2aW91c0l0ZW1zID8gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIXByZXZpb3VzSXRlbXMuaW5jbHVkZXMoaXRlbSkpIDogW107XG59XG5cbmZ1bmN0aW9uIFNlbGVjdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgb25DaGFuZ2UsXG4gICAgb3B0aW9ucyA9IFtdLFxuICAgIHZhbHVlID0gJycsXG4gICAgZGlzYWJsZWQsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHJlZiA9IHVzZVNob3dFbnRyeUV2ZW50KGlkKTtcbiAgY29uc3QgW2xvY2FsVmFsdWUsIHNldExvY2FsVmFsdWVdID0gdXNlU3RhdGUodmFsdWUpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2VDYWxsYmFjayA9ICh7XG4gICAgdGFyZ2V0XG4gIH0pID0+IHtcbiAgICBvbkNoYW5nZSh0YXJnZXQudmFsdWUpO1xuICB9O1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBoYW5kbGVDaGFuZ2VDYWxsYmFjayhlKTtcbiAgICBzZXRMb2NhbFZhbHVlKGUudGFyZ2V0LnZhbHVlKTtcbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IGxvY2FsVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0TG9jYWxWYWx1ZSh2YWx1ZSk7XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtc2VsZWN0XCIsXG4gICAgY2hpbGRyZW46IFtqc3goXCJsYWJlbFwiLCB7XG4gICAgICBmb3I6IHByZWZpeElkJDMoaWQpLFxuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtbGFiZWxcIixcbiAgICAgIGNoaWxkcmVuOiBqc3goVG9vbHRpcFdyYXBwZXIsIHtcbiAgICAgICAgdmFsdWU6IHRvb2x0aXAsXG4gICAgICAgIGZvcklkOiBpZCxcbiAgICAgICAgZWxlbWVudDogcHJvcHMuZWxlbWVudCxcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KVxuICAgIH0pLCBqc3goXCJzZWxlY3RcIiwge1xuICAgICAgcmVmOiByZWYsXG4gICAgICBpZDogcHJlZml4SWQkMyhpZCksXG4gICAgICBuYW1lOiBpZCxcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWlucHV0XCIsXG4gICAgICBvbklucHV0OiBoYW5kbGVDaGFuZ2UsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICB2YWx1ZTogbG9jYWxWYWx1ZSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNoaWxkcmVuOiBvcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgIHJldHVybiBqc3goXCJvcHRncm91cFwiLCB7XG4gICAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpZHgpID0+IGpzeChcIm9wdGlvblwiLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBjaGlsZC52YWx1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNoaWxkLmRpc2FibGVkLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGQubGFiZWxcbiAgICAgICAgICAgIH0sIGlkeCkpXG4gICAgICAgICAgfSwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganN4KFwib3B0aW9uXCIsIHtcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiBvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5sYWJlbFxuICAgICAgICB9LCBpZHgpO1xuICAgICAgfSlcbiAgICB9KV1cbiAgfSk7XG59XG5cbi8qKlxyXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmVsZW1lbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmlkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcHMuZGVzY3JpcHRpb25dXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wcy5sYWJlbFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5zZXRWYWx1ZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkZvY3VzXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQmx1clxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRPcHRpb25zXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmRpc2FibGVkXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMudmFsaWRhdGVdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGltcG9ydCgncHJlYWN0JykuQ29tcG9uZW50fSBwcm9wcy50b29sdGlwXHJcbiAqL1xuZnVuY3Rpb24gU2VsZWN0RW50cnkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbGFiZWwsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9ucyxcbiAgICBkaXNhYmxlZCxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICB2YWxpZGF0ZSxcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoZWxlbWVudCk7XG4gIGNvbnN0IGdsb2JhbEVycm9yID0gdXNlRXJyb3IoaWQpO1xuICBjb25zdCBbbG9jYWxFcnJvciwgc2V0TG9jYWxFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgbGV0IHZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdGUpKSB7XG4gICAgICBjb25zdCBuZXdWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZSh2YWx1ZSkgfHwgbnVsbDtcbiAgICAgIHNldExvY2FsRXJyb3IobmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgdmFsaWRhdGVdKTtcbiAgY29uc3Qgb25DaGFuZ2UgPSBuZXdWYWx1ZSA9PiB7XG4gICAgbGV0IG5ld1ZhbGlkYXRpb25FcnJvciA9IG51bGw7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdGUpKSB7XG4gICAgICBuZXdWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZShuZXdWYWx1ZSkgfHwgbnVsbDtcbiAgICB9XG4gICAgc2V0VmFsdWUobmV3VmFsdWUsIG5ld1ZhbGlkYXRpb25FcnJvcik7XG4gICAgc2V0TG9jYWxFcnJvcihuZXdWYWxpZGF0aW9uRXJyb3IpO1xuICB9O1xuICBjb25zdCBlcnJvciA9IGdsb2JhbEVycm9yIHx8IGxvY2FsRXJyb3I7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnknLCBlcnJvciA/ICdoYXMtZXJyb3InIDogJycpLFxuICAgIFwiZGF0YS1lbnRyeS1pZFwiOiBpZCxcbiAgICBjaGlsZHJlbjogW2pzeChTZWxlY3QsIHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0sIGVsZW1lbnQpLCBlcnJvciAmJiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZXJyb3JcIixcbiAgICAgIGNoaWxkcmVuOiBlcnJvclxuICAgIH0pLCBqc3goRGVzY3JpcHRpb24sIHtcbiAgICAgIGZvcklkOiBpZCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICB2YWx1ZTogZGVzY3JpcHRpb25cbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBpc0VkaXRlZCQzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgISFub2RlLnZhbHVlO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHByZWZpeElkJDMoaWQpIHtcbiAgcmV0dXJuIGBiaW8tcHJvcGVydGllcy1wYW5lbC0ke2lkfWA7XG59XG5cbmZ1bmN0aW9uIFNpbXBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZGVib3VuY2UsXG4gICAgZGlzYWJsZWQsXG4gICAgZWxlbWVudCxcbiAgICBnZXRWYWx1ZSxcbiAgICBpZCxcbiAgICBvbkJsdXIsXG4gICAgb25Gb2N1cyxcbiAgICBzZXRWYWx1ZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCk7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRDYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkZWJvdW5jZSh0YXJnZXQgPT4gc2V0VmFsdWUodGFyZ2V0LnZhbHVlLmxlbmd0aCA/IHRhcmdldC52YWx1ZSA6IHVuZGVmaW5lZCkpO1xuICB9LCBbc2V0VmFsdWUsIGRlYm91bmNlXSk7XG4gIGNvbnN0IGhhbmRsZUlucHV0ID0gZSA9PiB7XG4gICAgaGFuZGxlSW5wdXRDYWxsYmFjayhlLnRhcmdldCk7XG4gICAgc2V0TG9jYWxWYWx1ZShlLnRhcmdldC52YWx1ZSk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBsb2NhbFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldExvY2FsVmFsdWUodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIGpzeChcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtc2ltcGxlXCIsXG4gICAgY2hpbGRyZW46IGpzeChcImlucHV0XCIsIHtcbiAgICAgIGlkOiBwcmVmaXhJZCQyKGlkKSxcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbmFtZTogaWQsXG4gICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dFwiLFxuICAgICAgb25JbnB1dDogaGFuZGxlSW5wdXQsXG4gICAgICBcImFyaWEtbGFiZWxcIjogbG9jYWxWYWx1ZSB8fCAnPGVtcHR5PicsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICB2YWx1ZTogbG9jYWxWYWx1ZVxuICAgIH0sIGVsZW1lbnQpXG4gIH0pO1xufVxuZnVuY3Rpb24gaXNFZGl0ZWQkMihub2RlKSB7XG4gIHJldHVybiBub2RlICYmICEhbm9kZS52YWx1ZTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBwcmVmaXhJZCQyKGlkKSB7XG4gIHJldHVybiBgYmlvLXByb3BlcnRpZXMtcGFuZWwtJHtpZH1gO1xufVxuXG5mdW5jdGlvbiByZXNpemVUb0NvbnRlbnRzKGVsZW1lbnQpIHtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG5cbiAgLy8gYSAycHggcGl4ZWwgb2Zmc2V0IGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgc2Nyb2xsYmFyIGZyb21cbiAgLy8gYXBwZWFyaW5nIG9uIE9TIHdpdGggYSBmdWxsIGxlbmd0aCBzY3JvbGwgYmFyIChXaW5kb3dzL0xpbnV4KVxuICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgMn1weGA7XG59XG5mdW5jdGlvbiBUZXh0QXJlYShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgZGVib3VuY2UsXG4gICAgb25JbnB1dCxcbiAgICB2YWx1ZSA9ICcnLFxuICAgIGRpc2FibGVkLFxuICAgIG1vbm9zcGFjZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICBhdXRvUmVzaXplID0gdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcixcbiAgICByb3dzID0gYXV0b1Jlc2l6ZSA/IDEgOiAyLFxuICAgIHRvb2x0aXBcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbG9jYWxWYWx1ZSwgc2V0TG9jYWxWYWx1ZV0gPSB1c2VTdGF0ZSh2YWx1ZSk7XG4gIGNvbnN0IHJlZiA9IHVzZVNob3dFbnRyeUV2ZW50KGlkKTtcbiAgY29uc3QgdmlzaWJsZSA9IHVzZUVsZW1lbnRWaXNpYmxlKHJlZi5jdXJyZW50KTtcbiAgY29uc3QgaGFuZGxlSW5wdXRDYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBkZWJvdW5jZSh0YXJnZXQgPT4gb25JbnB1dCh0YXJnZXQudmFsdWUubGVuZ3RoID8gdGFyZ2V0LnZhbHVlIDogdW5kZWZpbmVkKSk7XG4gIH0sIFtvbklucHV0LCBkZWJvdW5jZV0pO1xuICBjb25zdCBoYW5kbGVJbnB1dCA9IGUgPT4ge1xuICAgIGhhbmRsZUlucHV0Q2FsbGJhY2soZS50YXJnZXQpO1xuICAgIGF1dG9SZXNpemUgJiYgcmVzaXplVG9Db250ZW50cyhlLnRhcmdldCk7XG4gICAgc2V0TG9jYWxWYWx1ZShlLnRhcmdldC52YWx1ZSk7XG4gIH07XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgYXV0b1Jlc2l6ZSAmJiByZXNpemVUb0NvbnRlbnRzKHJlZi5jdXJyZW50KTtcbiAgfSwgW10pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHZpc2libGUgJiYgYXV0b1Jlc2l6ZSAmJiByZXNpemVUb0NvbnRlbnRzKHJlZi5jdXJyZW50KTtcbiAgfSwgW3Zpc2libGVdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IGxvY2FsVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0TG9jYWxWYWx1ZSh2YWx1ZSk7XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtdGV4dGFyZWFcIixcbiAgICBjaGlsZHJlbjogW2pzeChcImxhYmVsXCIsIHtcbiAgICAgIGZvcjogcHJlZml4SWQkMShpZCksXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IGpzeChUb29sdGlwV3JhcHBlciwge1xuICAgICAgICB2YWx1ZTogdG9vbHRpcCxcbiAgICAgICAgZm9ySWQ6IGlkLFxuICAgICAgICBlbGVtZW50OiBwcm9wcy5lbGVtZW50LFxuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pXG4gICAgfSksIGpzeChcInRleHRhcmVhXCIsIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgaWQ6IHByZWZpeElkJDEoaWQpLFxuICAgICAgbmFtZTogaWQsXG4gICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtaW5wdXQnLCBtb25vc3BhY2UgPyAnYmlvLXByb3BlcnRpZXMtcGFuZWwtaW5wdXQtbW9ub3NwYWNlJyA6ICcnLCBhdXRvUmVzaXplID8gJ2F1dG8tcmVzaXplJyA6ICcnKSxcbiAgICAgIG9uSW5wdXQ6IGhhbmRsZUlucHV0LFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgcm93czogcm93cyxcbiAgICAgIHZhbHVlOiBsb2NhbFZhbHVlLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgXCJkYXRhLWdyYW1tXCI6IFwiZmFsc2VcIlxuICAgIH0pXVxuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5lbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcHMuaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wcy5kZXNjcmlwdGlvblxuICogQHBhcmFtIHtib29sZWFufSBwcm9wcy5kZWJvdW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmxhYmVsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRWYWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuc2V0VmFsdWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uRm9jdXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQmx1clxuICogQHBhcmFtIHtudW1iZXJ9IHByb3BzLnJvd3NcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMubW9ub3NwYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcHMudmFsaWRhdGVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5kaXNhYmxlZF1cbiAqL1xuZnVuY3Rpb24gVGV4dEFyZWFFbnRyeShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBkZWJvdW5jZSxcbiAgICBsYWJlbCxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICByb3dzLFxuICAgIG1vbm9zcGFjZSxcbiAgICBkaXNhYmxlZCxcbiAgICB2YWxpZGF0ZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICBwbGFjZWhvbGRlcixcbiAgICBhdXRvUmVzaXplLFxuICAgIHRvb2x0aXBcbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxFcnJvciA9IHVzZUVycm9yKGlkKTtcbiAgY29uc3QgW2xvY2FsRXJyb3IsIHNldExvY2FsRXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG4gIGxldCB2YWx1ZSA9IGdldFZhbHVlKGVsZW1lbnQpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbGlkYXRlKSkge1xuICAgICAgY29uc3QgbmV3VmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGUodmFsdWUpIHx8IG51bGw7XG4gICAgICBzZXRMb2NhbEVycm9yKG5ld1ZhbGlkYXRpb25FcnJvcik7XG4gICAgfVxuICB9LCBbdmFsdWUsIHZhbGlkYXRlXSk7XG4gIGNvbnN0IG9uSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgbGV0IG5ld1ZhbGlkYXRpb25FcnJvciA9IG51bGw7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsaWRhdGUpKSB7XG4gICAgICBuZXdWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZShuZXdWYWx1ZSkgfHwgbnVsbDtcbiAgICB9XG4gICAgc2V0VmFsdWUobmV3VmFsdWUsIG5ld1ZhbGlkYXRpb25FcnJvcik7XG4gICAgc2V0TG9jYWxFcnJvcihuZXdWYWxpZGF0aW9uRXJyb3IpO1xuICB9O1xuICBjb25zdCBlcnJvciA9IGdsb2JhbEVycm9yIHx8IGxvY2FsRXJyb3I7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBjbGFzczogY2xhc3NuYW1lcygnYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnknLCBlcnJvciA/ICdoYXMtZXJyb3InIDogJycpLFxuICAgIFwiZGF0YS1lbnRyeS1pZFwiOiBpZCxcbiAgICBjaGlsZHJlbjogW2pzeChUZXh0QXJlYSwge1xuICAgICAgaWQ6IGlkLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb25JbnB1dDogb25JbnB1dCxcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgIHJvd3M6IHJvd3MsXG4gICAgICBkZWJvdW5jZTogZGVib3VuY2UsXG4gICAgICBtb25vc3BhY2U6IG1vbm9zcGFjZSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgIGF1dG9SZXNpemU6IGF1dG9SZXNpemUsXG4gICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0sIGVsZW1lbnQpLCBlcnJvciAmJiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZXJyb3JcIixcbiAgICAgIGNoaWxkcmVuOiBlcnJvclxuICAgIH0pLCBqc3goRGVzY3JpcHRpb24sIHtcbiAgICAgIGZvcklkOiBpZCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICB2YWx1ZTogZGVzY3JpcHRpb25cbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBpc0VkaXRlZCQxKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgISFub2RlLnZhbHVlO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHByZWZpeElkJDEoaWQpIHtcbiAgcmV0dXJuIGBiaW8tcHJvcGVydGllcy1wYW5lbC0ke2lkfWA7XG59XG5cbmZ1bmN0aW9uIFRleHRmaWVsZChwcm9wcykge1xuICBjb25zdCB7XG4gICAgZGVib3VuY2UsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBvbklucHV0LFxuICAgIG9uRm9jdXMsXG4gICAgb25CbHVyLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHZhbHVlID0gJycsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsb2NhbFZhbHVlLCBzZXRMb2NhbFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlIHx8ICcnKTtcbiAgY29uc3QgcmVmID0gdXNlU2hvd0VudHJ5RXZlbnQoaWQpO1xuICBjb25zdCBoYW5kbGVJbnB1dENhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGRlYm91bmNlKHRhcmdldCA9PiBvbklucHV0KHRhcmdldC52YWx1ZS5sZW5ndGggPyB0YXJnZXQudmFsdWUgOiB1bmRlZmluZWQpKTtcbiAgfSwgW29uSW5wdXQsIGRlYm91bmNlXSk7XG4gIGNvbnN0IGhhbmRsZUlucHV0ID0gZSA9PiB7XG4gICAgaGFuZGxlSW5wdXRDYWxsYmFjayhlLnRhcmdldCk7XG4gICAgc2V0TG9jYWxWYWx1ZShlLnRhcmdldC52YWx1ZSk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBsb2NhbFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldExvY2FsVmFsdWUodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIGpzeHMoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRleHRmaWVsZFwiLFxuICAgIGNoaWxkcmVuOiBbanN4KFwibGFiZWxcIiwge1xuICAgICAgZm9yOiBwcmVmaXhJZChpZCksXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IGpzeChUb29sdGlwV3JhcHBlciwge1xuICAgICAgICB2YWx1ZTogdG9vbHRpcCxcbiAgICAgICAgZm9ySWQ6IGlkLFxuICAgICAgICBlbGVtZW50OiBwcm9wcy5lbGVtZW50LFxuICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgIH0pXG4gICAgfSksIGpzeChcImlucHV0XCIsIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgaWQ6IHByZWZpeElkKGlkKSxcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgbmFtZTogaWQsXG4gICAgICBzcGVsbENoZWNrOiBcImZhbHNlXCIsXG4gICAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1pbnB1dFwiLFxuICAgICAgb25JbnB1dDogaGFuZGxlSW5wdXQsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICB2YWx1ZTogbG9jYWxWYWx1ZVxuICAgIH0pXVxuICB9KTtcbn1cblxuLyoqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMuZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMuaWRcclxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmRlc2NyaXB0aW9uXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuZGVib3VuY2VcclxuICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5kaXNhYmxlZFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMubGFiZWxcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZ2V0VmFsdWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuc2V0VmFsdWVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Gb2N1c1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vbkJsdXJcclxuICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KCdwcmVhY3QnKS5Db21wb25lbnR9IHByb3BzLnRvb2x0aXBcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMudmFsaWRhdGVcclxuICovXG5mdW5jdGlvbiBUZXh0ZmllbGRFbnRyeShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBkZWJvdW5jZSxcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbCxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZSxcbiAgICB2YWxpZGF0ZSxcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsRXJyb3IgPSB1c2VFcnJvcihpZCk7XG4gIGNvbnN0IFtsb2NhbEVycm9yLCBzZXRMb2NhbEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICBsZXQgdmFsdWUgPSBnZXRWYWx1ZShlbGVtZW50KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0ZSkpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlKHZhbHVlKSB8fCBudWxsO1xuICAgICAgc2V0TG9jYWxFcnJvcihuZXdWYWxpZGF0aW9uRXJyb3IpO1xuICAgIH1cbiAgfSwgW3ZhbHVlLCB2YWxpZGF0ZV0pO1xuICBjb25zdCBvbklucHV0ID0gbmV3VmFsdWUgPT4ge1xuICAgIGxldCBuZXdWYWxpZGF0aW9uRXJyb3IgPSBudWxsO1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbGlkYXRlKSkge1xuICAgICAgbmV3VmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGUobmV3VmFsdWUpIHx8IG51bGw7XG4gICAgfVxuICAgIHNldFZhbHVlKG5ld1ZhbHVlLCBuZXdWYWxpZGF0aW9uRXJyb3IpO1xuICAgIHNldExvY2FsRXJyb3IobmV3VmFsaWRhdGlvbkVycm9yKTtcbiAgfTtcbiAgY29uc3QgZXJyb3IgPSBnbG9iYWxFcnJvciB8fCBsb2NhbEVycm9yO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5JywgZXJyb3IgPyAnaGFzLWVycm9yJyA6ICcnKSxcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2hpbGRyZW46IFtqc3goVGV4dGZpZWxkLCB7XG4gICAgICBkZWJvdW5jZTogZGVib3VuY2UsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvbklucHV0OiBvbklucHV0LFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgdG9vbHRpcDogdG9vbHRpcCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9LCBlbGVtZW50KSwgZXJyb3IgJiYganN4KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVycm9yXCIsXG4gICAgICBjaGlsZHJlbjogZXJyb3JcbiAgICB9KSwganN4KERlc2NyaXB0aW9uLCB7XG4gICAgICBmb3JJZDogaWQsXG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgdmFsdWU6IGRlc2NyaXB0aW9uXG4gICAgfSldXG4gIH0pO1xufVxuZnVuY3Rpb24gaXNFZGl0ZWQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiAhIW5vZGUudmFsdWU7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gcHJlZml4SWQoaWQpIHtcbiAgcmV0dXJuIGBiaW8tcHJvcGVydGllcy1wYW5lbC0ke2lkfWA7XG59XG5cbmNvbnN0IERFRkFVTFRfREVCT1VOQ0VfVElNRSA9IDMwMDtcbmZ1bmN0aW9uIGRlYm91bmNlSW5wdXQoZGVib3VuY2VEZWxheSkge1xuICByZXR1cm4gZnVuY3Rpb24gX2RlYm91bmNlSW5wdXQoZm4pIHtcbiAgICBpZiAoZGVib3VuY2VEZWxheSAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBkZWJvdW5jZVRpbWUgPSBpc051bWJlcihkZWJvdW5jZURlbGF5KSA/IGRlYm91bmNlRGVsYXkgOiBERUZBVUxUX0RFQk9VTkNFX1RJTUU7XG4gICAgICByZXR1cm4gZGVib3VuY2UoZm4sIGRlYm91bmNlVGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbjtcbiAgICB9XG4gIH07XG59XG5kZWJvdW5jZUlucHV0LiRpbmplY3QgPSBbJ2NvbmZpZy5kZWJvdW5jZUlucHV0J107XG5cbnZhciBpbmRleCQxID0ge1xuICBkZWJvdW5jZUlucHV0OiBbJ2ZhY3RvcnknLCBkZWJvdW5jZUlucHV0XVxufTtcblxuY2xhc3MgRmVlbFBvcHVwTW9kdWxlIHtcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMpIHtcbiAgICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICB9XG5cbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgdGhlIEZFRUwgcG9wdXAgaXMgb3Blbi5cclxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gICAqL1xuICBpc09wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50QnVzLmZpcmUoJ2ZlZWxQb3B1cC5faXNPcGVuJyk7XG4gIH1cblxuICAvKipcclxuICAgKiBPcGVuIHRoZSBGRUVMIHBvcHVwLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGVudHJ5SWRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcG9wdXBDb25maWdcclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBzb3VyY2VFbGVtZW50XHJcbiAgICovXG4gIG9wZW4oZW50cnlJZCwgcG9wdXBDb25maWcsIHNvdXJjZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRCdXMuZmlyZSgnZmVlbFBvcHVwLl9vcGVuJywge1xuICAgICAgZW50cnlJZCxcbiAgICAgIHBvcHVwQ29uZmlnLFxuICAgICAgc291cmNlRWxlbWVudFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXHJcbiAgICogQ2xvc2UgdGhlIEZFRUwgcG9wdXAuXHJcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHJldHVybiB0aGlzLl9ldmVudEJ1cy5maXJlKCdmZWVsUG9wdXAuX2Nsb3NlJyk7XG4gIH1cbn1cbkZlZWxQb3B1cE1vZHVsZS4kaW5qZWN0ID0gWydldmVudEJ1cyddO1xuXG52YXIgaW5kZXggPSB7XG4gIGZlZWxQb3B1cDogWyd0eXBlJywgRmVlbFBvcHVwTW9kdWxlXVxufTtcblxuZXhwb3J0IHsgQXJyb3dJY29uLCBDaGVja2JveEVudHJ5LCBDbG9zZUljb24sIENvbGxhcHNpYmxlRW50cnksIENyZWF0ZUljb24sIGluZGV4JDEgYXMgRGVib3VuY2VJbnB1dE1vZHVsZSwgRGVsZXRlSWNvbiwgRGVzY3JpcHRpb25Db250ZXh0LCBEZXNjcmlwdGlvbiBhcyBEZXNjcmlwdGlvbkVudHJ5LCBEcmFnSWNvbiwgRHJvcGRvd25CdXR0b24sIEVycm9yc0NvbnRleHQsIEV2ZW50Q29udGV4dCwgRXh0ZXJuYWxMaW5rSWNvbiwgRmVlbENoZWNrYm94RW50cnksIEZlZWxFbnRyeSwgRmVlbEljb24kMSBhcyBGZWVsSWNvbiwgRmVlbE51bWJlckVudHJ5LCBpbmRleCBhcyBGZWVsUG9wdXBNb2R1bGUsIEZlZWxUZW1wbGF0aW5nRW50cnksIEZlZWxUZXh0QXJlYUVudHJ5LCBGZWVsVG9nZ2xlU3dpdGNoRW50cnksIEdyb3VwLCBIZWFkZXIsIEhlYWRlckJ1dHRvbiwgTGF1bmNoSWNvbiwgTGF5b3V0Q29udGV4dCwgTGlzdCBhcyBMaXN0RW50cnksIExpc3RHcm91cCwgTGlzdEl0ZW0sIE51bWJlckZpZWxkRW50cnksIFBsYWNlaG9sZGVyLCBQb3B1cCwgUG9wdXBJY29uLCBQcm9wZXJ0aWVzUGFuZWwsIExheW91dENvbnRleHQgYXMgUHJvcGVydGllc1BhbmVsQ29udGV4dCwgU2VsZWN0RW50cnksIFNpbXBsZSBhcyBTaW1wbGVFbnRyeSwgVGVtcGxhdGluZ0VudHJ5LCBUZXh0QXJlYUVudHJ5LCBUZXh0ZmllbGRFbnRyeSBhcyBUZXh0RmllbGRFbnRyeSwgVG9nZ2xlU3dpdGNoRW50cnksIFRvb2x0aXBDb250ZXh0LCBUb29sdGlwV3JhcHBlciBhcyBUb29sdGlwRW50cnksIGlzRWRpdGVkJDUgYXMgaXNDaGVja2JveEVudHJ5RWRpdGVkLCBpc0VkaXRlZCQ2IGFzIGlzRmVlbEVudHJ5RWRpdGVkLCBpc0VkaXRlZCQ3IGFzIGlzTnVtYmVyRmllbGRFbnRyeUVkaXRlZCwgaXNFZGl0ZWQkMyBhcyBpc1NlbGVjdEVudHJ5RWRpdGVkLCBpc0VkaXRlZCQyIGFzIGlzU2ltcGxlRW50cnlFZGl0ZWQsIGlzRWRpdGVkJDQgYXMgaXNUZW1wbGF0aW5nRW50cnlFZGl0ZWQsIGlzRWRpdGVkJDEgYXMgaXNUZXh0QXJlYUVudHJ5RWRpdGVkLCBpc0VkaXRlZCBhcyBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLCBpc0VkaXRlZCQ4IGFzIGlzVG9nZ2xlU3dpdGNoRW50cnlFZGl0ZWQsIHVzZURlc2NyaXB0aW9uQ29udGV4dCwgdXNlRWxlbWVudFZpc2libGUsIHVzZUVycm9yLCB1c2VFcnJvcnMsIHVzZUV2ZW50LCB1c2VLZXlGYWN0b3J5LCB1c2VMYXlvdXRTdGF0ZSwgdXNlUHJldmlvdXMsIHVzZVNob3dFbnRyeUV2ZW50LCB1c2VTdGF0aWNDYWxsYmFjaywgdXNlU3RpY2t5SW50ZXJzZWN0aW9uT2JzZXJ2ZXIsIHVzZVRvb2x0aXBDb250ZXh0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/properties-panel/dist/index.esm.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/properties-panel/preact/compat/dist/compat.module.js":
-/*!************************************************************************************!*\
- !*** ./node_modules/@bpmn-io/properties-panel/preact/compat/dist/compat.module.js ***!
- \************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Children: () => (/* binding */ A),\n/* harmony export */ Component: () => (/* reexport safe */ ___WEBPACK_IMPORTED_MODULE_0__.Component),\n/* harmony export */ Fragment: () => (/* reexport safe */ ___WEBPACK_IMPORTED_MODULE_0__.Fragment),\n/* harmony export */ PureComponent: () => (/* binding */ E),\n/* harmony export */ StrictMode: () => (/* binding */ mn),\n/* harmony export */ Suspense: () => (/* binding */ L),\n/* harmony export */ SuspenseList: () => (/* binding */ M),\n/* harmony export */ __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: () => (/* binding */ on),\n/* harmony export */ cloneElement: () => (/* binding */ sn),\n/* harmony export */ createContext: () => (/* reexport safe */ ___WEBPACK_IMPORTED_MODULE_0__.createContext),\n/* harmony export */ createElement: () => (/* reexport safe */ ___WEBPACK_IMPORTED_MODULE_0__.createElement),\n/* harmony export */ createFactory: () => (/* binding */ cn),\n/* harmony export */ createPortal: () => (/* binding */ j),\n/* harmony export */ createRef: () => (/* reexport safe */ ___WEBPACK_IMPORTED_MODULE_0__.createRef),\n/* harmony export */ \"default\": () => (/* binding */ wn),\n/* harmony export */ findDOMNode: () => (/* binding */ vn),\n/* harmony export */ flushSync: () => (/* binding */ pn),\n/* harmony export */ forwardRef: () => (/* binding */ N),\n/* harmony export */ hydrate: () => (/* binding */ G),\n/* harmony export */ isElement: () => (/* binding */ gn),\n/* harmony export */ isFragment: () => (/* binding */ an),\n/* harmony export */ isValidElement: () => (/* binding */ fn),\n/* harmony export */ lazy: () => (/* binding */ D),\n/* harmony export */ memo: () => (/* binding */ w),\n/* harmony export */ render: () => (/* binding */ q),\n/* harmony export */ startTransition: () => (/* binding */ yn),\n/* harmony export */ unmountComponentAtNode: () => (/* binding */ hn),\n/* harmony export */ unstable_batchedUpdates: () => (/* binding */ dn),\n/* harmony export */ useCallback: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback),\n/* harmony export */ useContext: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useContext),\n/* harmony export */ useDebugValue: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useDebugValue),\n/* harmony export */ useDeferredValue: () => (/* binding */ _n),\n/* harmony export */ useEffect: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect),\n/* harmony export */ useErrorBoundary: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useErrorBoundary),\n/* harmony export */ useId: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useId),\n/* harmony export */ useImperativeHandle: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useImperativeHandle),\n/* harmony export */ useInsertionEffect: () => (/* binding */ Sn),\n/* harmony export */ useLayoutEffect: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect),\n/* harmony export */ useMemo: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useMemo),\n/* harmony export */ useReducer: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useReducer),\n/* harmony export */ useRef: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useRef),\n/* harmony export */ useState: () => (/* reexport safe */ _hooks__WEBPACK_IMPORTED_MODULE_1__.useState),\n/* harmony export */ useSyncExternalStore: () => (/* binding */ Cn),\n/* harmony export */ useTransition: () => (/* binding */ bn),\n/* harmony export */ version: () => (/* binding */ ln)\n/* harmony export */ });\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../.. */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks */ \"./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js\");\nfunction g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function w(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:C(this.props,n)}function u(e){return this.shouldComponentUpdate=r,(0,___WEBPACK_IMPORTED_MODULE_0__.createElement)(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u}(E.prototype=new ___WEBPACK_IMPORTED_MODULE_0__.Component).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=___WEBPACK_IMPORTED_MODULE_0__.options.__b;___WEBPACK_IMPORTED_MODULE_0__.options.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n)};var R=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function N(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var k=function(n,t){return null==n?null:(0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)((0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)(n).map(t))},A={map:k,forEach:k,count:function(n){return n?(0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)(n).length:0},only:function(n){var t=(0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:___WEBPACK_IMPORTED_MODULE_0__.toChildArray},O=___WEBPACK_IMPORTED_MODULE_0__.options.__e;___WEBPACK_IMPORTED_MODULE_0__.options.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);O(n,t,e,r)};var T=___WEBPACK_IMPORTED_MODULE_0__.options.unmount;function F(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return F(n,t,e)})),n}function I(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return I(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function L(){this.__u=0,this.t=null,this.__b=null}function U(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function D(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n},function(n){u=n}),u)throw u;if(!r)throw e;return (0,___WEBPACK_IMPORTED_MODULE_0__.createElement)(r,o)}return o.displayName=\"Lazy\",o.__f=!0,o}function M(){this.u=null,this.o=null}___WEBPACK_IMPORTED_MODULE_0__.options.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),T&&T(n)},(L.prototype=new ___WEBPACK_IMPORTED_MODULE_0__.Component).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=I(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},L.prototype.componentWillUnmount=function(){this.t=[]},L.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=F(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&(0,___WEBPACK_IMPORTED_MODULE_0__.createElement)(___WEBPACK_IMPORTED_MODULE_0__.Fragment,null,n.fallback);return i&&(i.__u&=-33),[(0,___WEBPACK_IMPORTED_MODULE_0__.createElement)(___WEBPACK_IMPORTED_MODULE_0__.Fragment,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]>>1,1),e.i.removeChild(n)}}),(0,___WEBPACK_IMPORTED_MODULE_0__.render)((0,___WEBPACK_IMPORTED_MODULE_0__.createElement)(W,{context:e.context},n.__v),e.l)}function j(n,e){var r=(0,___WEBPACK_IMPORTED_MODULE_0__.createElement)(P,{__v:n,i:e});return r.containerInfo=e,r}(M.prototype=new ___WEBPACK_IMPORTED_MODULE_0__.Component).__a=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u()};e?e(o):o()}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=(0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t)})};var z=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Z=/[A-Z0-9]/g,Y=\"undefined\"!=typeof document,$=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function q(n,t,e){return null==t.__k&&(t.textContent=\"\"),(0,___WEBPACK_IMPORTED_MODULE_0__.render)(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function G(n,t,e){return (0,___WEBPACK_IMPORTED_MODULE_0__.hydrate)(n,t),\"function\"==typeof e&&e(),n?n.__c:null}___WEBPACK_IMPORTED_MODULE_0__.Component.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(___WEBPACK_IMPORTED_MODULE_0__.Component.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var J=___WEBPACK_IMPORTED_MODULE_0__.options.event;function K(){}function Q(){return this.cancelBubble}function X(){return this.defaultPrevented}___WEBPACK_IMPORTED_MODULE_0__.options.event=function(n){return J&&(n=J(n)),n.persist=K,n.isPropagationStopped=Q,n.isDefaultPrevented=X,n.nativeEvent=n};var nn,tn={enumerable:!1,configurable:!0,get:function(){return this.class}},en=___WEBPACK_IMPORTED_MODULE_0__.options.vnode;___WEBPACK_IMPORTED_MODULE_0__.options.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={};for(var o in t){var i=t[o];if(!(\"value\"===o&&\"defaultValue\"in t&&null==i||Y&&\"children\"===o&&\"noscript\"===e||\"class\"===o||\"className\"===o)){var l=o.toLowerCase();\"defaultValue\"===o&&\"value\"in t&&null==t.value?o=\"value\":\"download\"===o&&!0===i?i=\"\":\"ondoubleclick\"===l?o=\"ondblclick\":\"onchange\"!==l||\"input\"!==e&&\"textarea\"!==e||$(t.type)?\"onfocus\"===l?o=\"onfocusin\":\"onblur\"===l?o=\"onfocusout\":H.test(o)?o=l:-1===e.indexOf(\"-\")&&B.test(o)?o=o.replace(Z,\"-$&\").toLowerCase():null===i&&(i=void 0):l=o=\"oninput\",\"oninput\"===l&&u[o=l]&&(o=\"oninputCapture\"),u[o]=i}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=(0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=(0,___WEBPACK_IMPORTED_MODULE_0__.toChildArray)(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",tn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=z,en&&en(n)};var rn=___WEBPACK_IMPORTED_MODULE_0__.options.__r;___WEBPACK_IMPORTED_MODULE_0__.options.__r=function(n){rn&&rn(n),nn=n.__c};var un=___WEBPACK_IMPORTED_MODULE_0__.options.diffed;___WEBPACK_IMPORTED_MODULE_0__.options.diffed=function(n){un&&un(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),nn=null};var on={ReactCurrentDispatcher:{current:{readContext:function(n){return nn.__n[n.__c].props.value}}}},ln=\"17.0.2\";function cn(n){return ___WEBPACK_IMPORTED_MODULE_0__.createElement.bind(null,n)}function fn(n){return!!n&&n.$$typeof===z}function an(n){return fn(n)&&n.type===___WEBPACK_IMPORTED_MODULE_0__.Fragment}function sn(n){return fn(n)?___WEBPACK_IMPORTED_MODULE_0__.cloneElement.apply(null,arguments):n}function hn(n){return!!n.__k&&((0,___WEBPACK_IMPORTED_MODULE_0__.render)(null,n),!0)}function vn(n){return n&&(n.base||1===n.nodeType&&n)||null}var dn=function(n,t){return n(t)},pn=function(n,t){return n(t)},mn=___WEBPACK_IMPORTED_MODULE_0__.Fragment;function yn(n){n()}function _n(n){return n}function bn(){return[!1,yn]}var Sn=_hooks__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect,gn=fn;function Cn(n,t){var e=t(),r=(0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)({h:{__:e,v:t}}),u=r[0].h,o=r[1];return (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(function(){u.__=e,u.v=t,En(u)&&o({h:u})},[n,e,t]),(0,_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(function(){return En(u)&&o({h:u}),n(function(){En(u)&&o({h:u})})},[n]),e}function En(n){var t,e,r=n.v,u=n.__;try{var o=r();return!((t=u)===(e=o)&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}}var wn={useState:_hooks__WEBPACK_IMPORTED_MODULE_1__.useState,useId:_hooks__WEBPACK_IMPORTED_MODULE_1__.useId,useReducer:_hooks__WEBPACK_IMPORTED_MODULE_1__.useReducer,useEffect:_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect,useLayoutEffect:_hooks__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect,useInsertionEffect:Sn,useTransition:bn,useDeferredValue:_n,useSyncExternalStore:Cn,startTransition:yn,useRef:_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef,useImperativeHandle:_hooks__WEBPACK_IMPORTED_MODULE_1__.useImperativeHandle,useMemo:_hooks__WEBPACK_IMPORTED_MODULE_1__.useMemo,useCallback:_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback,useContext:_hooks__WEBPACK_IMPORTED_MODULE_1__.useContext,useDebugValue:_hooks__WEBPACK_IMPORTED_MODULE_1__.useDebugValue,version:\"17.0.2\",Children:A,render:q,hydrate:G,unmountComponentAtNode:hn,createPortal:j,createElement:___WEBPACK_IMPORTED_MODULE_0__.createElement,createContext:___WEBPACK_IMPORTED_MODULE_0__.createContext,createFactory:cn,cloneElement:sn,createRef:___WEBPACK_IMPORTED_MODULE_0__.createRef,Fragment:___WEBPACK_IMPORTED_MODULE_0__.Fragment,isValidElement:fn,isElement:gn,isFragment:an,findDOMNode:vn,Component:___WEBPACK_IMPORTED_MODULE_0__.Component,PureComponent:E,memo:w,forwardRef:N,flushSync:pn,unstable_batchedUpdates:dn,StrictMode:mn,Suspense:L,SuspenseList:M,lazy:D,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:on};\n//# sourceMappingURL=compat.module.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFnZSxnQkFBZ0IseUJBQXlCLFNBQVMsZ0JBQWdCLHFEQUFxRCx1REFBdUQsU0FBUyxjQUFjLGFBQWEsZ0JBQWdCLGNBQWMsZ0NBQWdDLG9GQUFvRixjQUFjLG9DQUFvQyxnREFBQyxNQUFNLG9HQUFvRyxpQkFBaUIsd0NBQUMsMEVBQTBFLHlDQUF5QyxNQUFNLHNDQUFDLEtBQUssc0NBQUMsaUJBQWlCLG1FQUFtRSxvRkFBb0YsY0FBYyxjQUFjLFVBQVUsSUFBSSxxQ0FBcUMsK0hBQStILG9CQUFvQixvQkFBb0IsK0NBQUMsQ0FBQywrQ0FBQyxZQUFZLElBQUksa0NBQWtDLFNBQVMsK0NBQUMsYUFBYSxrQkFBa0IsTUFBTSwrQ0FBQyxJQUFJLHFDQUFxQyxZQUFZLFNBQVMsMkNBQUMsQ0FBQyxHQUFHLHNDQUFDLEtBQUssc0NBQUMsdUJBQXVCLHdCQUF3QixPQUFPLDhFQUE4RSxZQUFZLE1BQU0sc0NBQUMsU0FBUyxrQkFBa0IsK0RBQStELGtDQUFrQywrQkFBK0IsdUZBQXVGLGdCQUFnQixLQUFLLGtCQUFrQiw0REFBNEQsZ0JBQWdCLGtGQUFrRixhQUFhLHFDQUFxQyxjQUFjLGVBQWUsMEJBQTBCLGNBQWMsVUFBVSxjQUFjLCtCQUErQixlQUFlLGFBQWEsSUFBSSxZQUFZLGNBQWMsT0FBTyxnREFBQyxNQUFNLHVDQUF1QyxhQUFhLHdCQUF3QixzQ0FBQyxxQkFBcUIsWUFBWSxxREFBcUQsa0JBQWtCLHdDQUFDLG9CQUFvQixtQkFBbUIsZ0NBQWdDLGlDQUFpQyxpQ0FBaUMsUUFBUSxpQkFBaUIsYUFBYSxnQkFBZ0Isa0JBQWtCLHNDQUFzQyxNQUFNLGdCQUFnQixlQUFlLEVBQUUsWUFBWSxtQkFBbUIsK0JBQStCLHVCQUF1QixjQUFjLDZDQUE2QyxVQUFVLGtDQUFrQyxhQUFhLGlCQUFpQiwwREFBMEQsMENBQTBDLGNBQWMsYUFBYSxnREFBQyxDQUFDLHVDQUFDLGtCQUFrQix3QkFBd0IsZ0RBQUMsQ0FBQyx1Q0FBQyxpQ0FBaUMsc0JBQXNCLHlHQUF5RyxFQUFFLEVBQUUsS0FBSyxXQUFXLFdBQVcsbUJBQW1CLGFBQWEsY0FBYyx1Q0FBdUMsaUJBQWlCLFlBQVksY0FBYyxpQkFBaUIsa0NBQWtDLHlDQUFDLDZCQUE2Qix5REFBeUQsOERBQThELDJDQUEyQyw0QkFBNEIsMkNBQTJDLHlCQUF5Qiw2RUFBNkUsRUFBRSx5Q0FBQyxDQUFDLGdEQUFDLElBQUksa0JBQWtCLGFBQWEsZ0JBQWdCLE1BQU0sZ0RBQUMsSUFBSSxVQUFVLEVBQUUsMkJBQTJCLGlCQUFpQix3Q0FBQyxrQkFBa0IsbUNBQW1DLDBCQUEwQixpQkFBaUIsOENBQThDLFlBQVksZ0NBQWdDLDJCQUEyQixNQUFNLCtDQUFDLGFBQWEsbURBQW1ELG1CQUFtQixJQUFJLHNDQUFzQyxrQkFBa0IseUVBQXlFLFdBQVcsNkJBQTZCLFNBQVMsR0FBRyxpZEFBaWQsa0dBQWtHLGtCQUFrQix1Q0FBdUMseUNBQUMsNkNBQTZDLGtCQUFrQixPQUFPLDBDQUFDLDZDQUE2Qyx3Q0FBQyw4QkFBOEIsOEZBQThGLHNCQUFzQix3Q0FBQyxjQUFjLCtCQUErQix5QkFBeUIsaUJBQWlCLDhCQUE4QixvQ0FBb0MsR0FBRyxFQUFFLEVBQUUsTUFBTSxzQ0FBQyxPQUFPLGNBQWMsYUFBYSx5QkFBeUIsYUFBYSw2QkFBNkIsc0NBQUMsbUJBQW1CLGdHQUFnRyxXQUFXLDZDQUE2QyxtQkFBbUIsSUFBSSxzQ0FBQyxPQUFPLHNDQUFDLG1CQUFtQixxQ0FBcUMsNEJBQTRCLGdCQUFnQixXQUFXLGlIQUFpSCxzQkFBc0IsOFlBQThZLDBEQUEwRCwrQ0FBQyxpQ0FBaUMsb0RBQW9ELCtDQUErQywrQ0FBQyxpQ0FBaUMsb0dBQW9HLDhLQUE4Syw0QkFBNEIsT0FBTyxzQ0FBQyxLQUFLLHNDQUFDLGlCQUFpQixvQkFBb0IsT0FBTyxzQ0FBQyxRQUFRLHNDQUFDLG9CQUFvQixVQUFVLHNCQUFzQiwwR0FBMEcsUUFBUSx3QkFBd0IsU0FBUyx3QkFBd0Isb0NBQW9DLGFBQWEsZUFBZSxPQUFPLDRDQUFDLGNBQWMsZUFBZSwwQkFBMEIsZUFBZSx1QkFBdUIsdUNBQUMsQ0FBQyxlQUFlLGFBQWEsMkNBQUMseUJBQXlCLGVBQWUsZ0JBQWdCLHlDQUFDLGFBQWEsZUFBZSw0Q0FBNEMscUJBQXFCLFlBQVksa0JBQWtCLFlBQVksSUFBSSx1Q0FBQyxDQUFDLGVBQWUsSUFBSSxlQUFlLFNBQVMsY0FBYyxjQUFjLE9BQU8sbURBQUMsT0FBTyxpQkFBaUIsWUFBWSxnREFBQyxFQUFFLEdBQUcsVUFBVSxrQkFBa0IsT0FBTyx1REFBQyxZQUFZLHVCQUF1QixJQUFJLEVBQUUsVUFBVSxpREFBQyxZQUFZLGlCQUFpQixJQUFJLGVBQWUsVUFBVSxJQUFJLEVBQUUsRUFBRSxRQUFRLGVBQWUscUJBQXFCLElBQUksVUFBVSxzREFBc0QsU0FBUyxVQUFVLFFBQVEsU0FBUyw0Q0FBQyxPQUFPLHlDQUFDLFlBQVksOENBQUMsV0FBVyw2Q0FBQyxpQkFBaUIsbURBQUMsOEdBQThHLDBDQUFDLHFCQUFxQix1REFBQyxTQUFTLDJDQUFDLGFBQWEsK0NBQUMsWUFBWSw4Q0FBQyxlQUFlLGlEQUFDLHVHQUF1Ryw0Q0FBQyxlQUFlLDRDQUFDLDRDQUE0Qyx3Q0FBQyxVQUFVLHVDQUFDLHVFQUF1RSx3Q0FBQyxtTEFBZ3VCO0FBQzk1UyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby9wcm9wZXJ0aWVzLXBhbmVsL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzPzBjZGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cIi4uLy4uXCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cIi4uLy4uXCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlSWQgYXMgcyx1c2VSZWR1Y2VyIGFzIGgsdXNlRWZmZWN0IGFzIHYsdXNlTGF5b3V0RWZmZWN0IGFzIGQsdXNlUmVmIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyBtLHVzZU1lbW8gYXMgeSx1c2VDYWxsYmFjayBhcyBfLHVzZUNvbnRleHQgYXMgYix1c2VEZWJ1Z1ZhbHVlIGFzIFN9ZnJvbVwiLi4vLi4vaG9va3NcIjtleHBvcnQqZnJvbVwiLi4vLi4vaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEMobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRShuKXt0aGlzLnByb3BzPW59ZnVuY3Rpb24gdyhuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWYscj10PT1uLnJlZjtyZXR1cm4hciYmdCYmKHQuY2FsbD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fCFyOkModGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1Ll9fZj0hMCx1fShFLnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsRS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEModGhpcy5wcm9wcyxuKXx8Qyh0aGlzLnN0YXRlLHQpfTt2YXIgeD1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCkseCYmeChuKX07dmFyIFI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIE4obil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1SLHQucmVuZGVyPXQsdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBrPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sQT17bWFwOmssZm9yRWFjaDprLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxPPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fayksdS5fX2Mobix0KTtPKG4sdCxlLHIpfTt2YXIgVD1lLnVubW91bnQ7ZnVuY3Rpb24gRihuLHQsZSl7cmV0dXJuIG4mJihuLl9fYyYmbi5fX2MuX19IJiYobi5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX2MmJm4uX19jKCl9KSxuLl9fYy5fX0g9bnVsbCksbnVsbCE9KG49Zyh7fSxuKSkuX19jJiYobi5fX2MuX19QPT09ZSYmKG4uX19jLl9fUD10KSxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBGKG4sdCxlKX0pKSxufWZ1bmN0aW9uIEkobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBJKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gTCgpe3RoaXMuX191PTAsdGhpcy50PW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBVKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24gRChuKXt2YXIgZSxyLHU7ZnVuY3Rpb24gbyhvKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7cj1uLmRlZmF1bHR8fG59LGZ1bmN0aW9uKG4pe3U9bn0pLHUpdGhyb3cgdTtpZighcil0aHJvdyBlO3JldHVybiB0KHIsbyl9cmV0dXJuIG8uZGlzcGxheU5hbWU9XCJMYXp5XCIsby5fX2Y9ITAsb31mdW5jdGlvbiBNKCl7dGhpcy51PW51bGwsdGhpcy5vPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJnQuX19SJiZ0Ll9fUigpLHQmJjMyJm4uX191JiYobi50eXBlPW51bGwpLFQmJlQobil9LChMLnByb3RvdHlwZT1uZXcgbikuX19jPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dC5fX2Mscj10aGlzO251bGw9PXIudCYmKHIudD1bXSksci50LnB1c2goZSk7dmFyIHU9VShyLl9fdiksbz0hMSxpPWZ1bmN0aW9uKCl7b3x8KG89ITAsZS5fX1I9bnVsbCx1P3UobCk6bCgpKX07ZS5fX1I9aTt2YXIgbD1mdW5jdGlvbigpe2lmKCEtLXIuX191KXtpZihyLnN0YXRlLl9fYSl7dmFyIG49ci5zdGF0ZS5fX2E7ci5fX3YuX19rWzBdPUkobixuLl9fYy5fX1Asbi5fX2MuX19PKX12YXIgdDtmb3Ioci5zZXRTdGF0ZSh7X19hOnIuX19iPW51bGx9KTt0PXIudC5wb3AoKTspdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sTC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnQ9W119LEwucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1GKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBWPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLm8uZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLm8uc2l6ZSkpZm9yKGU9bi51O2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi51PWU9ZVsyXX19O2Z1bmN0aW9uIFcobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBQKG4pe3ZhciBlPXRoaXMscj1uLmk7ZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLmwpLGUubD1udWxsLGUuaT1udWxsfSxlLmkmJmUuaSE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSxlLmx8fChlLmk9cixlLmw9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaS5yZW1vdmVDaGlsZChuKX19KSxvKHQoVyx7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLmwpfWZ1bmN0aW9uIGoobixlKXt2YXIgcj10KFAse19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShNLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1VKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxWKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sTS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LE0ucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1NLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtWKG4sZSx0KX0pfTt2YXIgej1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsQj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sSD0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFo9L1tBLVowLTldL2csWT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQsJD1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBxKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIEcobix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIEo9ZS5ldmVudDtmdW5jdGlvbiBLKCl7fWZ1bmN0aW9uIFEoKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSiYmKG49SihuKSksbi5wZXJzaXN0PUssbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1RLG4uaXNEZWZhdWx0UHJldmVudGVkPVgsbi5uYXRpdmVFdmVudD1ufTt2YXIgbm4sdG49e2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sZW49ZS52bm9kZTtlLnZub2RlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJmZ1bmN0aW9uKG4pe3ZhciB0PW4ucHJvcHMsZT1uLnR5cGUsdT17fTtmb3IodmFyIG8gaW4gdCl7dmFyIGk9dFtvXTtpZighKFwidmFsdWVcIj09PW8mJlwiZGVmYXVsdFZhbHVlXCJpbiB0JiZudWxsPT1pfHxZJiZcImNoaWxkcmVuXCI9PT1vJiZcIm5vc2NyaXB0XCI9PT1lfHxcImNsYXNzXCI9PT1vfHxcImNsYXNzTmFtZVwiPT09bykpe3ZhciBsPW8udG9Mb3dlckNhc2UoKTtcImRlZmF1bHRWYWx1ZVwiPT09byYmXCJ2YWx1ZVwiaW4gdCYmbnVsbD09dC52YWx1ZT9vPVwidmFsdWVcIjpcImRvd25sb2FkXCI9PT1vJiYhMD09PWk/aT1cIlwiOlwib25kb3VibGVjbGlja1wiPT09bD9vPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWx8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fCQodC50eXBlKT9cIm9uZm9jdXNcIj09PWw/bz1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1sP289XCJvbmZvY3Vzb3V0XCI6SC50ZXN0KG8pP289bDotMT09PWUuaW5kZXhPZihcIi1cIikmJkIudGVzdChvKT9vPW8ucmVwbGFjZShaLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCk6bnVsbD09PWkmJihpPXZvaWQgMCk6bD1vPVwib25pbnB1dFwiLFwib25pbnB1dFwiPT09bCYmdVtvPWxdJiYobz1cIm9uaW5wdXRDYXB0dXJlXCIpLHVbb109aX19XCJzZWxlY3RcIj09ZSYmdS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh1LnZhbHVlKSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9LTEhPXUudmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKX0pKSxcInNlbGVjdFwiPT1lJiZudWxsIT11LmRlZmF1bHRWYWx1ZSYmKHUudmFsdWU9cih0LmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucHJvcHMuc2VsZWN0ZWQ9dS5tdWx0aXBsZT8tMSE9dS5kZWZhdWx0VmFsdWUuaW5kZXhPZihuLnByb3BzLnZhbHVlKTp1LmRlZmF1bHRWYWx1ZT09bi5wcm9wcy52YWx1ZX0pKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHRuKSk6KHQuY2xhc3NOYW1lJiYhdC5jbGFzc3x8dC5jbGFzcyYmdC5jbGFzc05hbWUpJiYodS5jbGFzcz11LmNsYXNzTmFtZT10LmNsYXNzTmFtZSksbi5wcm9wcz11fShuKSxuLiQkdHlwZW9mPXosZW4mJmVuKG4pfTt2YXIgcm49ZS5fX3I7ZS5fX3I9ZnVuY3Rpb24obil7cm4mJnJuKG4pLG5uPW4uX19jfTt2YXIgdW49ZS5kaWZmZWQ7ZS5kaWZmZWQ9ZnVuY3Rpb24obil7dW4mJnVuKG4pO3ZhciB0PW4ucHJvcHMsZT1uLl9fZTtudWxsIT1lJiZcInRleHRhcmVhXCI9PT1uLnR5cGUmJlwidmFsdWVcImluIHQmJnQudmFsdWUhPT1lLnZhbHVlJiYoZS52YWx1ZT1udWxsPT10LnZhbHVlP1wiXCI6dC52YWx1ZSksbm49bnVsbH07dmFyIG9uPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOntjdXJyZW50OntyZWFkQ29udGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gbm4uX19uW24uX19jXS5wcm9wcy52YWx1ZX19fX0sbG49XCIxNy4wLjJcIjtmdW5jdGlvbiBjbihuKXtyZXR1cm4gdC5iaW5kKG51bGwsbil9ZnVuY3Rpb24gZm4obil7cmV0dXJuISFuJiZuLiQkdHlwZW9mPT09en1mdW5jdGlvbiBhbihuKXtyZXR1cm4gZm4obikmJm4udHlwZT09PXV9ZnVuY3Rpb24gc24obil7cmV0dXJuIGZuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kLGduPWZuO2Z1bmN0aW9uIENuKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEVuKHUpJiZvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFbih1KSYmbyh7aDp1fSksbihmdW5jdGlvbigpe0VuKHUpJiZvKHtoOnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gRW4obil7dmFyIHQsZSxyPW4udix1PW4uX187dHJ5e3ZhciBvPXIoKTtyZXR1cm4hKCh0PXUpPT09KGU9bykmJigwIT09dHx8MS90PT0xL2UpfHx0IT10JiZlIT1lKX1jYXRjaChuKXtyZXR1cm4hMH19dmFyIHduPXt1c2VTdGF0ZTphLHVzZUlkOnMsdXNlUmVkdWNlcjpoLHVzZUVmZmVjdDp2LHVzZUxheW91dEVmZmVjdDpkLHVzZUluc2VydGlvbkVmZmVjdDpTbix1c2VUcmFuc2l0aW9uOmJuLHVzZURlZmVycmVkVmFsdWU6X24sdXNlU3luY0V4dGVybmFsU3RvcmU6Q24sc3RhcnRUcmFuc2l0aW9uOnluLHVzZVJlZjpwLHVzZUltcGVyYXRpdmVIYW5kbGU6bSx1c2VNZW1vOnksdXNlQ2FsbGJhY2s6Xyx1c2VDb250ZXh0OmIsdXNlRGVidWdWYWx1ZTpTLHZlcnNpb246XCIxNy4wLjJcIixDaGlsZHJlbjpBLHJlbmRlcjpxLGh5ZHJhdGU6Ryx1bm1vdW50Q29tcG9uZW50QXROb2RlOmhuLGNyZWF0ZVBvcnRhbDpqLGNyZWF0ZUVsZW1lbnQ6dCxjcmVhdGVDb250ZXh0OmwsY3JlYXRlRmFjdG9yeTpjbixjbG9uZUVsZW1lbnQ6c24sY3JlYXRlUmVmOmMsRnJhZ21lbnQ6dSxpc1ZhbGlkRWxlbWVudDpmbixpc0VsZW1lbnQ6Z24saXNGcmFnbWVudDphbixmaW5kRE9NTm9kZTp2bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50OkUsbWVtbzp3LGZvcndhcmRSZWY6TixmbHVzaFN5bmM6cG4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6ZG4sU3RyaWN0TW9kZTptbixTdXNwZW5zZTpMLFN1c3BlbnNlTGlzdDpNLGxhenk6RCxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpvbn07ZXhwb3J0e0EgYXMgQ2hpbGRyZW4sRSBhcyBQdXJlQ29tcG9uZW50LG1uIGFzIFN0cmljdE1vZGUsTCBhcyBTdXNwZW5zZSxNIGFzIFN1c3BlbnNlTGlzdCxvbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxzbiBhcyBjbG9uZUVsZW1lbnQsY24gYXMgY3JlYXRlRmFjdG9yeSxqIGFzIGNyZWF0ZVBvcnRhbCx3biBhcyBkZWZhdWx0LHZuIGFzIGZpbmRET01Ob2RlLHBuIGFzIGZsdXNoU3luYyxOIGFzIGZvcndhcmRSZWYsRyBhcyBoeWRyYXRlLGduIGFzIGlzRWxlbWVudCxhbiBhcyBpc0ZyYWdtZW50LGZuIGFzIGlzVmFsaWRFbGVtZW50LEQgYXMgbGF6eSx3IGFzIG1lbW8scSBhcyByZW5kZXIseW4gYXMgc3RhcnRUcmFuc2l0aW9uLGhuIGFzIHVubW91bnRDb21wb25lbnRBdE5vZGUsZG4gYXMgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsX24gYXMgdXNlRGVmZXJyZWRWYWx1ZSxTbiBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQ24gYXMgdXNlU3luY0V4dGVybmFsU3RvcmUsYm4gYXMgdXNlVHJhbnNpdGlvbixsbiBhcyB2ZXJzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBhdC5tb2R1bGUuanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/properties-panel/preact/compat/dist/compat.module.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js":
-/*!*****************************************************************************!*\
- !*** ./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js ***!
- \*****************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Component: () => (/* binding */ b),\n/* harmony export */ Fragment: () => (/* binding */ g),\n/* harmony export */ cloneElement: () => (/* binding */ E),\n/* harmony export */ createContext: () => (/* binding */ F),\n/* harmony export */ createElement: () => (/* binding */ y),\n/* harmony export */ createRef: () => (/* binding */ _),\n/* harmony export */ h: () => (/* binding */ y),\n/* harmony export */ hydrate: () => (/* binding */ B),\n/* harmony export */ isValidElement: () => (/* binding */ t),\n/* harmony export */ options: () => (/* binding */ l),\n/* harmony export */ render: () => (/* binding */ q),\n/* harmony export */ toChildArray: () => (/* binding */ $)\n/* harmony export */ });\nvar n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function g(n){return n.children}function b(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__i+1):null;for(var u;lu&&i.sort(f));x.__r=0}function C(n,l,u,t,i,o,r,f,e,a,h){var v,p,y,d,_,g=t&&t.__k||s,b=l.length;for(u.__d=e,P(u,l,g),e=u.__d,v=0;v0?d(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=H(i,u,r=t+a,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:a=f(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function F(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,w(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),w(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),w(this))},b.prototype.render=g,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},x.__r=0,e=0;\n//# sourceMappingURL=preact.module.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvZGlzdC9wcmVhY3QubW9kdWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBCQUEwQiw0RkFBNEYsZ0JBQWdCLHlCQUF5QixTQUFTLGNBQWMsbUJBQW1CLG9CQUFvQixrQkFBa0IsZUFBZSxxREFBcUQsd0xBQXdMLHVCQUF1QixzQkFBc0IsT0FBTyxrSUFBa0ksNENBQTRDLGFBQWEsT0FBTyxjQUFjLGNBQWMsa0JBQWtCLGdCQUFnQiw0QkFBNEIsZ0JBQWdCLDRDQUE0QyxVQUFVLGVBQWUsb0RBQW9ELDBDQUEwQyxjQUFjLFFBQVEsZ0NBQWdDLDhCQUE4QixlQUFlLHdDQUF3Qyx1QkFBdUIsTUFBTSxhQUFhLGNBQWMsb0dBQW9HLGFBQWEsc0JBQXNCLGNBQWMsWUFBWSw4RUFBOEUsbU1BQW1NLFFBQVEsa0NBQWtDLHVDQUF1QyxpQ0FBaUMsSUFBSSwrV0FBK1csZ0JBQWdCLGtCQUFrQiw0Q0FBNEMsaUJBQWlCLElBQUksdU1BQXVNLFdBQVcsd2JBQXdiLGFBQWEsSUFBSSwyRUFBMkUsa0JBQWtCLFFBQVEsOEJBQThCLGdCQUFnQixjQUFjLG9DQUFvQyxTQUFTLDBFQUEwRSxnQkFBZ0Isc0VBQXNFLE9BQU8sZUFBZSxvQkFBb0Isd0NBQXdDLDhDQUE4QywyQ0FBMkMsaUJBQWlCLEVBQUUsU0FBUyw4REFBOEQsSUFBSSxlQUFlLDhEQUE4RCxLQUFLLFNBQVMsa0JBQWtCLGdHQUFnRyxzQkFBc0IsTUFBTSx5REFBeUQsS0FBSyxzRkFBc0Ysa0RBQWtELDRKQUE0Six5R0FBeUcsS0FBSywwREFBMEQsNEpBQTRKLGtCQUFrQixRQUFRLFVBQVUsOEZBQThGLGNBQWMsd0JBQXdCLFFBQVEsbUJBQW1CLG9CQUFvQiwrQkFBK0IsY0FBYywrQ0FBK0MsZ0NBQWdDLDJDQUEyQyxzQ0FBc0MsOERBQThELDhCQUE4Qix5UEFBeVAsK0lBQStJLHFPQUFxTyxLQUFLLGlOQUFpTix3R0FBd0csWUFBWSxNQUFNLGVBQWUseUJBQXlCLGlDQUFpQyxRQUFRLGdIQUFnSCw0QkFBNEIsRUFBRSwyRkFBMkYsNkVBQTZFLGVBQWUseUJBQXlCLFNBQVMsUUFBUSxxRUFBcUUscUJBQXFCLGdEQUFnRCw2UEFBNlAsU0FBUyw0R0FBNEcscUZBQXFGLG1CQUFtQixrQkFBa0IsYUFBYSxZQUFZLFdBQVcsMEJBQTBCLHFDQUFxQyxJQUFJLG9DQUFvQyxVQUFVLEVBQUUsU0FBUyxnQkFBZ0IsRUFBRSw4QkFBOEIsK0NBQStDLHFDQUFxQyxXQUFXLDhFQUE4RSxjQUFjLE1BQU0sWUFBWSw4Q0FBOEMsMkdBQTJHLDZDQUE2QyxLQUFLLDhEQUE4RCxLQUFLLHNCQUFzQix3Q0FBd0MsdUdBQXVHLG1LQUFtSywwRkFBMEYsNkhBQTZILElBQUkscUJBQXFCLHVKQUF1SixTQUFTLGtCQUFrQixJQUFJLHNDQUFzQyxTQUFTLFlBQVksa0JBQWtCLFFBQVEsbUdBQW1HLDhCQUE4Qix5QkFBeUIsU0FBUyxXQUFXLCtCQUErQixtQkFBbUIsV0FBVyxpREFBaUQsaURBQWlELGtCQUFrQiw2QkFBNkIsa0JBQWtCLFlBQVksb1BBQW9QLGdCQUFnQixTQUFTLGtCQUFrQixrQkFBa0IsVUFBVSx5SUFBeUksb0hBQW9ILGdCQUFnQixPQUFPLDZDQUE2QyxxQkFBcUIsc0JBQXNCLFFBQVEsd0NBQXdDLDBDQUEwQyxTQUFTLHdDQUF3QywrQ0FBK0MsY0FBYyxFQUFFLHNCQUFzQixVQUFVLDZCQUE2QixrQ0FBa0MsdUNBQXVDLGVBQWUsOENBQThDLGFBQWEsc0JBQXNCLGNBQWMsT0FBTyx5QkFBeUIsbUtBQW1LLDRCQUE0QixTQUFTLElBQUksU0FBUyxtQkFBbUIsb0NBQW9DLG9DQUFvQyxNQUFNLDhEQUE4RCw0Q0FBNEMsNEVBQTRFLHFDQUFxQyxvREFBb0Qsa0lBQWtJLDJCQUEyQixhQUE0TTtBQUMxdlYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvZGlzdC9wcmVhY3QubW9kdWxlLmpzPzNlZTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG4sbCx1LHQsaSxvLHIsZixlLGM9e30scz1bXSxhPS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksaD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHYobixsKXtmb3IodmFyIHUgaW4gbCluW3VdPWxbdV07cmV0dXJuIG59ZnVuY3Rpb24gcChuKXt2YXIgbD1uLnBhcmVudE5vZGU7bCYmbC5yZW1vdmVDaGlsZChuKX1mdW5jdGlvbiB5KGwsdSx0KXt2YXIgaSxvLHIsZj17fTtmb3IociBpbiB1KVwia2V5XCI9PXI/aT11W3JdOlwicmVmXCI9PXI/bz11W3JdOmZbcl09dVtyXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGwmJm51bGwhPWwuZGVmYXVsdFByb3BzKWZvcihyIGluIGwuZGVmYXVsdFByb3BzKXZvaWQgMD09PWZbcl0mJihmW3JdPWwuZGVmYXVsdFByb3BzW3JdKTtyZXR1cm4gZChsLGYsaSxvLG51bGwpfWZ1bmN0aW9uIGQobix0LGksbyxyKXt2YXIgZj17dHlwZTpuLHByb3BzOnQsa2V5OmkscmVmOm8sX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2Q6dm9pZCAwLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09cj8rK3U6cixfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1yJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGYpLGZ9ZnVuY3Rpb24gXygpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIGcobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gYihuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiBtKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz9tKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT9tKG4pOm51bGx9ZnVuY3Rpb24gayhuKXt2YXIgbCx1O2lmKG51bGwhPShuPW4uX18pJiZudWxsIT1uLl9fYyl7Zm9yKG4uX19lPW4uX19jLmJhc2U9bnVsbCxsPTA7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2Upe24uX19lPW4uX19jLmJhc2U9dS5fX2U7YnJlYWt9cmV0dXJuIGsobil9fWZ1bmN0aW9uIHcobil7KCFuLl9fZCYmKG4uX19kPSEwKSYmaS5wdXNoKG4pJiYheC5fX3IrK3x8byE9PWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKG89bC5kZWJvdW5jZVJlbmRlcmluZyl8fHIpKHgpfWZ1bmN0aW9uIHgoKXt2YXIgbix1LHQsbyxyLGUsYyxzLGE7Zm9yKGkuc29ydChmKTtuPWkuc2hpZnQoKTspbi5fX2QmJih1PWkubGVuZ3RoLG89dm9pZCAwLGU9KHI9KHQ9bikuX192KS5fX2Uscz1bXSxhPVtdLChjPXQuX19QKSYmKChvPXYoe30scikpLl9fdj1yLl9fdisxLGwudm5vZGUmJmwudm5vZGUobyksTChjLG8scix0Ll9fbix2b2lkIDAhPT1jLm93bmVyU1ZHRWxlbWVudCwzMiZyLl9fdT9bZV06bnVsbCxzLG51bGw9PWU/bShyKTplLCEhKDMyJnIuX191KSxhKSxvLl9fLl9fa1tvLl9faV09byxNKHMsbyxhKSxvLl9fZSE9ZSYmayhvKSksaS5sZW5ndGg+dSYmaS5zb3J0KGYpKTt4Ll9fcj0wfWZ1bmN0aW9uIEMobixsLHUsdCxpLG8scixmLGUsYSxoKXt2YXIgdixwLHksZCxfLGc9dCYmdC5fX2t8fHMsYj1sLmxlbmd0aDtmb3IodS5fX2Q9ZSxQKHUsbCxnKSxlPXUuX19kLHY9MDt2PGI7disrKW51bGwhPSh5PXUuX19rW3ZdKSYmXCJib29sZWFuXCIhPXR5cGVvZiB5JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5JiYocD0tMT09PXkuX19pP2M6Z1t5Ll9faV18fGMseS5fX2k9dixMKG4seSxwLGksbyxyLGYsZSxhLGgpLGQ9eS5fX2UseS5yZWYmJnAucmVmIT15LnJlZiYmKHAucmVmJiZ6KHAucmVmLG51bGwseSksaC5wdXNoKHkucmVmLHkuX19jfHxkLHkpKSxudWxsPT1fJiZudWxsIT1kJiYoXz1kKSw2NTUzNiZ5Ll9fdXx8cC5fX2s9PT15Ll9faz9lPVMoeSxlLG4pOlwiZnVuY3Rpb25cIj09dHlwZW9mIHkudHlwZSYmdm9pZCAwIT09eS5fX2Q/ZT15Ll9fZDpkJiYoZT1kLm5leHRTaWJsaW5nKSx5Ll9fZD12b2lkIDAseS5fX3UmPS0xOTY2MDkpO3UuX19kPWUsdS5fX2U9X31mdW5jdGlvbiBQKG4sbCx1KXt2YXIgdCxpLG8scixmLGU9bC5sZW5ndGgsYz11Lmxlbmd0aCxzPWMsYT0wO2ZvcihuLl9faz1bXSx0PTA7dDxlO3QrKyludWxsIT0oaT1uLl9fa1t0XT1udWxsPT0oaT1sW3RdKXx8XCJib29sZWFuXCI9PXR5cGVvZiBpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBpP251bGw6XCJzdHJpbmdcIj09dHlwZW9mIGl8fFwibnVtYmVyXCI9PXR5cGVvZiBpfHxcImJpZ2ludFwiPT10eXBlb2YgaXx8aS5jb25zdHJ1Y3Rvcj09U3RyaW5nP2QobnVsbCxpLG51bGwsbnVsbCxpKTpoKGkpP2QoZyx7Y2hpbGRyZW46aX0sbnVsbCxudWxsLG51bGwpOnZvaWQgMD09PWkuY29uc3RydWN0b3ImJmkuX19iPjA/ZChpLnR5cGUsaS5wcm9wcyxpLmtleSxpLnJlZj9pLnJlZjpudWxsLGkuX192KTppKT8oaS5fXz1uLGkuX19iPW4uX19iKzEsZj1IKGksdSxyPXQrYSxzKSxpLl9faT1mLG89bnVsbCwtMSE9PWYmJihzLS0sKG89dVtmXSkmJihvLl9fdXw9MTMxMDcyKSksbnVsbD09b3x8bnVsbD09PW8uX192PygtMT09ZiYmYS0tLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkudHlwZSYmKGkuX191fD02NTUzNikpOmYhPT1yJiYoZj09PXIrMT9hKys6Zj5yP3M+ZS1yP2ErPWYtcjphLS06YT1mPHImJmY9PXItMT9mLXI6MCxmIT09dCthJiYoaS5fX3V8PTY1NTM2KSkpOihvPXVbdF0pJiZudWxsPT1vLmtleSYmby5fX2UmJihvLl9fZT09bi5fX2QmJihuLl9fZD1tKG8pKSxOKG8sbywhMSksdVt0XT1udWxsLHMtLSk7aWYocylmb3IodD0wO3Q8Yzt0KyspbnVsbCE9KG89dVt0XSkmJjA9PSgxMzEwNzImby5fX3UpJiYoby5fX2U9PW4uX19kJiYobi5fX2Q9bShvKSksTihvLG8pKX1mdW5jdGlvbiBTKG4sbCx1KXt2YXIgdCxpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSl7Zm9yKHQ9bi5fX2ssaT0wO3QmJmk8dC5sZW5ndGg7aSsrKXRbaV0mJih0W2ldLl9fPW4sbD1TKHRbaV0sbCx1KSk7cmV0dXJuIGx9cmV0dXJuIG4uX19lIT1sJiYodS5pbnNlcnRCZWZvcmUobi5fX2UsbHx8bnVsbCksbD1uLl9fZSksbCYmbC5uZXh0U2libGluZ31mdW5jdGlvbiAkKG4sbCl7cmV0dXJuIGw9bHx8W10sbnVsbD09bnx8XCJib29sZWFuXCI9PXR5cGVvZiBufHwoaChuKT9uLnNvbWUoZnVuY3Rpb24obil7JChuLGwpfSk6bC5wdXNoKG4pKSxsfWZ1bmN0aW9uIEgobixsLHUsdCl7dmFyIGk9bi5rZXksbz1uLnR5cGUscj11LTEsZj11KzEsZT1sW3VdO2lmKG51bGw9PT1lfHxlJiZpPT1lLmtleSYmbz09PWUudHlwZSlyZXR1cm4gdTtpZih0PihudWxsIT1lJiYwPT0oMTMxMDcyJmUuX191KT8xOjApKWZvcig7cj49MHx8ZjxsLmxlbmd0aDspe2lmKHI+PTApe2lmKChlPWxbcl0pJiYwPT0oMTMxMDcyJmUuX191KSYmaT09ZS5rZXkmJm89PT1lLnR5cGUpcmV0dXJuIHI7ci0tfWlmKGY8bC5sZW5ndGgpe2lmKChlPWxbZl0pJiYwPT0oMTMxMDcyJmUuX191KSYmaT09ZS5rZXkmJm89PT1lLnR5cGUpcmV0dXJuIGY7ZisrfX1yZXR1cm4tMX1mdW5jdGlvbiBJKG4sbCx1KXtcIi1cIj09PWxbMF0/bi5zZXRQcm9wZXJ0eShsLG51bGw9PXU/XCJcIjp1KTpuW2xdPW51bGw9PXU/XCJcIjpcIm51bWJlclwiIT10eXBlb2YgdXx8YS50ZXN0KGwpP3U6dStcInB4XCJ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciBvO246aWYoXCJzdHlsZVwiPT09bClpZihcInN0cmluZ1wiPT10eXBlb2YgdSluLnN0eWxlLmNzc1RleHQ9dTtlbHNle2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYobi5zdHlsZS5jc3NUZXh0PXQ9XCJcIiksdClmb3IobCBpbiB0KXUmJmwgaW4gdXx8SShuLnN0eWxlLGwsXCJcIik7aWYodSlmb3IobCBpbiB1KXQmJnVbbF09PT10W2xdfHxJKG4uc3R5bGUsbCx1W2xdKX1lbHNlIGlmKFwib1wiPT09bFswXSYmXCJuXCI9PT1sWzFdKW89bCE9PShsPWwucmVwbGFjZSgvKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvLFwiJDFcIikpLGw9bC50b0xvd2VyQ2FzZSgpaW4gbj9sLnRvTG93ZXJDYXNlKCkuc2xpY2UoMik6bC5zbGljZSgyKSxuLmx8fChuLmw9e30pLG4ubFtsK29dPXUsdT90P3UudT10LnU6KHUudT1EYXRlLm5vdygpLG4uYWRkRXZlbnRMaXN0ZW5lcihsLG8/RDpBLG8pKTpuLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxvP0Q6QSxvKTtlbHNle2lmKGkpbD1sLnJlcGxhY2UoL3hsaW5rKEh8OmgpLyxcImhcIikucmVwbGFjZSgvc05hbWUkLyxcInNcIik7ZWxzZSBpZihcIndpZHRoXCIhPT1sJiZcImhlaWdodFwiIT09bCYmXCJocmVmXCIhPT1sJiZcImxpc3RcIiE9PWwmJlwiZm9ybVwiIT09bCYmXCJ0YWJJbmRleFwiIT09bCYmXCJkb3dubG9hZFwiIT09bCYmXCJyb3dTcGFuXCIhPT1sJiZcImNvbFNwYW5cIiE9PWwmJlwicm9sZVwiIT09bCYmbCBpbiBuKXRyeXtuW2xdPW51bGw9PXU/XCJcIjp1O2JyZWFrIG59Y2F0Y2gobil7fVwiZnVuY3Rpb25cIj09dHlwZW9mIHV8fChudWxsPT11fHwhMT09PXUmJlwiLVwiIT09bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLHUpKX19ZnVuY3Rpb24gQShuKXt2YXIgdT10aGlzLmxbbi50eXBlKyExXTtpZihuLnQpe2lmKG4udDw9dS51KXJldHVybn1lbHNlIG4udD1EYXRlLm5vdygpO3JldHVybiB1KGwuZXZlbnQ/bC5ldmVudChuKTpuKX1mdW5jdGlvbiBEKG4pe3JldHVybiB0aGlzLmxbbi50eXBlKyEwXShsLmV2ZW50P2wuZXZlbnQobik6bil9ZnVuY3Rpb24gTChuLHUsdCxpLG8scixmLGUsYyxzKXt2YXIgYSxwLHksZCxfLG0sayx3LHgsUCxTLCQsSCxJLFQsQT11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxyPVtlPXUuX19lPXQuX19lXSksKGE9bC5fX2IpJiZhKHUpO246aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgQSl0cnl7aWYodz11LnByb3BzLHg9KGE9QS5jb250ZXh0VHlwZSkmJmlbYS5fX2NdLFA9YT94P3gucHJvcHMudmFsdWU6YS5fXzppLHQuX19jP2s9KHA9dS5fX2M9dC5fX2MpLl9fPXAuX19FOihcInByb3RvdHlwZVwiaW4gQSYmQS5wcm90b3R5cGUucmVuZGVyP3UuX19jPXA9bmV3IEEodyxQKToodS5fX2M9cD1uZXcgYih3LFApLHAuY29uc3RydWN0b3I9QSxwLnJlbmRlcj1PKSx4JiZ4LnN1YihwKSxwLnByb3BzPXcscC5zdGF0ZXx8KHAuc3RhdGU9e30pLHAuY29udGV4dD1QLHAuX19uPWkseT1wLl9fZD0hMCxwLl9faD1bXSxwLl9zYj1bXSksbnVsbD09cC5fX3MmJihwLl9fcz1wLnN0YXRlKSxudWxsIT1BLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKHAuX19zPT1wLnN0YXRlJiYocC5fX3M9dih7fSxwLl9fcykpLHYocC5fX3MsQS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHModyxwLl9fcykpKSxkPXAucHJvcHMsXz1wLnN0YXRlLHAuX192PXUseSludWxsPT1BLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9cC5jb21wb25lbnRXaWxsTW91bnQmJnAuY29tcG9uZW50V2lsbE1vdW50KCksbnVsbCE9cC5jb21wb25lbnREaWRNb3VudCYmcC5fX2gucHVzaChwLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKG51bGw9PUEuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZ3IT09ZCYmbnVsbCE9cC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZwLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHModyxQKSwhcC5fX2UmJihudWxsIT1wLnNob3VsZENvbXBvbmVudFVwZGF0ZSYmITE9PT1wLnNob3VsZENvbXBvbmVudFVwZGF0ZSh3LHAuX19zLFApfHx1Ll9fdj09PXQuX192KSl7Zm9yKHUuX192IT09dC5fX3YmJihwLnByb3BzPXcscC5zdGF0ZT1wLl9fcyxwLl9fZD0hMSksdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssdS5fX2suZm9yRWFjaChmdW5jdGlvbihuKXtuJiYobi5fXz11KX0pLFM9MDtTPHAuX3NiLmxlbmd0aDtTKyspcC5fX2gucHVzaChwLl9zYltTXSk7cC5fc2I9W10scC5fX2gubGVuZ3RoJiZmLnB1c2gocCk7YnJlYWsgbn1udWxsIT1wLmNvbXBvbmVudFdpbGxVcGRhdGUmJnAuY29tcG9uZW50V2lsbFVwZGF0ZSh3LHAuX19zLFApLG51bGwhPXAuY29tcG9uZW50RGlkVXBkYXRlJiZwLl9faC5wdXNoKGZ1bmN0aW9uKCl7cC5jb21wb25lbnREaWRVcGRhdGUoZCxfLG0pfSl9aWYocC5jb250ZXh0PVAscC5wcm9wcz13LHAuX19QPW4scC5fX2U9ITEsJD1sLl9fcixIPTAsXCJwcm90b3R5cGVcImluIEEmJkEucHJvdG90eXBlLnJlbmRlcil7Zm9yKHAuc3RhdGU9cC5fX3MscC5fX2Q9ITEsJCYmJCh1KSxhPXAucmVuZGVyKHAucHJvcHMscC5zdGF0ZSxwLmNvbnRleHQpLEk9MDtJPHAuX3NiLmxlbmd0aDtJKyspcC5fX2gucHVzaChwLl9zYltJXSk7cC5fc2I9W119ZWxzZSBkb3twLl9fZD0hMSwkJiYkKHUpLGE9cC5yZW5kZXIocC5wcm9wcyxwLnN0YXRlLHAuY29udGV4dCkscC5zdGF0ZT1wLl9fc313aGlsZShwLl9fZCYmKytIPDI1KTtwLnN0YXRlPXAuX19zLG51bGwhPXAuZ2V0Q2hpbGRDb250ZXh0JiYoaT12KHYoe30saSkscC5nZXRDaGlsZENvbnRleHQoKSkpLHl8fG51bGw9PXAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fChtPXAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZCxfKSksQyhuLGgoVD1udWxsIT1hJiZhLnR5cGU9PT1nJiZudWxsPT1hLmtleT9hLnByb3BzLmNoaWxkcmVuOmEpP1Q6W1RdLHUsdCxpLG8scixmLGUsYyxzKSxwLmJhc2U9dS5fX2UsdS5fX3UmPS0xNjEscC5fX2gubGVuZ3RoJiZmLnB1c2gocCksayYmKHAuX19FPXAuX189bnVsbCl9Y2F0Y2gobil7dS5fX3Y9bnVsbCxjfHxudWxsIT1yPyh1Ll9fZT1lLHUuX191fD1jPzE2MDozMixyW3IuaW5kZXhPZihlKV09bnVsbCk6KHUuX19lPXQuX19lLHUuX19rPXQuX19rKSxsLl9fZShuLHUsdCl9ZWxzZSBudWxsPT1yJiZ1Ll9fdj09PXQuX192Pyh1Ll9faz10Ll9fayx1Ll9fZT10Ll9fZSk6dS5fX2U9aih0Ll9fZSx1LHQsaSxvLHIsZixjLHMpOyhhPWwuZGlmZmVkKSYmYSh1KX1mdW5jdGlvbiBNKG4sdSx0KXt1Ll9fZD12b2lkIDA7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspeih0W2ldLHRbKytpXSx0WysraV0pO2wuX19jJiZsLl9fYyh1LG4pLG4uc29tZShmdW5jdGlvbih1KXt0cnl7bj11Ll9faCx1Ll9faD1bXSxuLnNvbWUoZnVuY3Rpb24obil7bi5jYWxsKHUpfSl9Y2F0Y2gobil7bC5fX2Uobix1Ll9fdil9fSl9ZnVuY3Rpb24gaihsLHUsdCxpLG8scixmLGUscyl7dmFyIGEsdix5LGQsXyxnLGIsaz10LnByb3BzLHc9dS5wcm9wcyx4PXUudHlwZTtpZihcInN2Z1wiPT09eCYmKG89ITApLG51bGwhPXIpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZigoXz1yW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIF89PSEheCYmKHg/Xy5sb2NhbE5hbWU9PT14OjM9PT1fLm5vZGVUeXBlKSl7bD1fLHJbYV09bnVsbDticmVha31pZihudWxsPT1sKXtpZihudWxsPT09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodyk7bD1vP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIseCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh4LHcuaXMmJncpLHI9bnVsbCxlPSExfWlmKG51bGw9PT14KWs9PT13fHxlJiZsLmRhdGE9PT13fHwobC5kYXRhPXcpO2Vsc2V7aWYocj1yJiZuLmNhbGwobC5jaGlsZE5vZGVzKSxrPXQucHJvcHN8fGMsIWUmJm51bGwhPXIpZm9yKGs9e30sYT0wO2E8bC5hdHRyaWJ1dGVzLmxlbmd0aDthKyspa1soXz1sLmF0dHJpYnV0ZXNbYV0pLm5hbWVdPV8udmFsdWU7Zm9yKGEgaW4gaylfPWtbYV0sXCJjaGlsZHJlblwiPT1hfHwoXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP3k9XzpcImtleVwiPT09YXx8YSBpbiB3fHxUKGwsYSxudWxsLF8sbykpO2ZvcihhIGluIHcpXz13W2FdLFwiY2hpbGRyZW5cIj09YT9kPV86XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP3Y9XzpcInZhbHVlXCI9PWE/Zz1fOlwiY2hlY2tlZFwiPT1hP2I9XzpcImtleVwiPT09YXx8ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgX3x8a1thXT09PV98fFQobCxhLF8sa1thXSxvKTtpZih2KWV8fHkmJih2Ll9faHRtbD09PXkuX19odG1sfHx2Ll9faHRtbD09PWwuaW5uZXJIVE1MKXx8KGwuaW5uZXJIVE1MPXYuX19odG1sKSx1Ll9faz1bXTtlbHNlIGlmKHkmJihsLmlubmVySFRNTD1cIlwiKSxDKGwsaChkKT9kOltkXSx1LHQsaSxvJiZcImZvcmVpZ25PYmplY3RcIiE9PXgscixmLHI/clswXTp0Ll9fayYmbSh0LDApLGUscyksbnVsbCE9cilmb3IoYT1yLmxlbmd0aDthLS07KW51bGwhPXJbYV0mJnAoclthXSk7ZXx8KGE9XCJ2YWx1ZVwiLHZvaWQgMCE9PWcmJihnIT09bFthXXx8XCJwcm9ncmVzc1wiPT09eCYmIWd8fFwib3B0aW9uXCI9PT14JiZnIT09a1thXSkmJlQobCxhLGcsa1thXSwhMSksYT1cImNoZWNrZWRcIix2b2lkIDAhPT1iJiZiIT09bFthXSYmVChsLGEsYixrW2FdLCExKSl9cmV0dXJuIGx9ZnVuY3Rpb24geihuLHUsdCl7dHJ5e1wiZnVuY3Rpb25cIj09dHlwZW9mIG4/bih1KTpuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBOKG4sdSx0KXt2YXIgaSxvO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT09bi5fX2V8fHooaSxudWxsLHUpKSxudWxsIT0oaT1uLl9fYykpe2lmKGkuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e2kuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChuKXtsLl9fZShuLHUpfWkuYmFzZT1pLl9fUD1udWxsLG4uX19jPXZvaWQgMH1pZihpPW4uX19rKWZvcihvPTA7bzxpLmxlbmd0aDtvKyspaVtvXSYmTihpW29dLHUsdHx8XCJmdW5jdGlvblwiIT10eXBlb2Ygbi50eXBlKTt0fHxudWxsPT1uLl9fZXx8cChuLl9fZSksbi5fXz1uLl9fZT1uLl9fZD12b2lkIDB9ZnVuY3Rpb24gTyhuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBxKHUsdCxpKXt2YXIgbyxyLGYsZTtsLl9fJiZsLl9fKHUsdCkscj0obz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxmPVtdLGU9W10sTCh0LHU9KCFvJiZpfHx0KS5fX2s9eShnLG51bGwsW3VdKSxyfHxjLGMsdm9pZCAwIT09dC5vd25lclNWR0VsZW1lbnQsIW8mJmk/W2ldOnI/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxmLCFvJiZpP2k6cj9yLl9fZTp0LmZpcnN0Q2hpbGQsbyxlKSxNKGYsdSxlKX1mdW5jdGlvbiBCKG4sbCl7cShuLGwsQil9ZnVuY3Rpb24gRShsLHUsdCl7dmFyIGksbyxyLGYsZT12KHt9LGwucHJvcHMpO2ZvcihyIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGY9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1yP2k9dVtyXTpcInJlZlwiPT1yP289dVtyXTplW3JdPXZvaWQgMD09PXVbcl0mJnZvaWQgMCE9PWY/ZltyXTp1W3JdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihlLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLGQobC50eXBlLGUsaXx8bC5rZXksb3x8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gRihuLGwpe3ZhciB1PXtfX2M6bD1cIl9fY0NcIitlKyssX186bixDb25zdW1lcjpmdW5jdGlvbihuLGwpe3JldHVybiBuLmNoaWxkcmVuKGwpfSxQcm92aWRlcjpmdW5jdGlvbihuKXt2YXIgdSx0O3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KHU9W10sKHQ9e30pW2xdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5wcm9wcy52YWx1ZSE9PW4udmFsdWUmJnUuc29tZShmdW5jdGlvbihuKXtuLl9fZT0hMCx3KG4pfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKG4pe3UucHVzaChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1LnNwbGljZSh1LmluZGV4T2YobiksMSksbCYmbC5jYWxsKG4pfX0pLG4uY2hpbGRyZW59fTtyZXR1cm4gdS5Qcm92aWRlci5fXz11LkNvbnN1bWVyLmNvbnRleHRUeXBlPXV9bj1zLnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGksbyxyO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKG89aS5jb25zdHJ1Y3RvcikmJm51bGwhPW8uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShvLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSkscj1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSkscj1pLl9fZCkscilyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZudWxsPT1uLmNvbnN0cnVjdG9yfSxiLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT09dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz12KHt9LHRoaXMuc3RhdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPW4odih7fSx1KSx0aGlzLnByb3BzKSksbiYmdih1LG4pLG51bGwhPW4mJnRoaXMuX192JiYobCYmdGhpcy5fc2IucHVzaChsKSx3KHRoaXMpKX0sYi5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24obil7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxuJiZ0aGlzLl9faC5wdXNoKG4pLHcodGhpcykpfSxiLnByb3RvdHlwZS5yZW5kZXI9ZyxpPVtdLHI9XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsZj1mdW5jdGlvbihuLGwpe3JldHVybiBuLl9fdi5fX2ItbC5fX3YuX19ifSx4Ll9fcj0wLGU9MDtleHBvcnR7YiBhcyBDb21wb25lbnQsZyBhcyBGcmFnbWVudCxFIGFzIGNsb25lRWxlbWVudCxGIGFzIGNyZWF0ZUNvbnRleHQseSBhcyBjcmVhdGVFbGVtZW50LF8gYXMgY3JlYXRlUmVmLHkgYXMgaCxCIGFzIGh5ZHJhdGUsdCBhcyBpc1ZhbGlkRWxlbWVudCxsIGFzIG9wdGlvbnMscSBhcyByZW5kZXIsJCBhcyB0b0NoaWxkQXJyYXl9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlYWN0Lm1vZHVsZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js":
-/*!**********************************************************************************!*\
- !*** ./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js ***!
- \**********************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCallback: () => (/* binding */ T),\n/* harmony export */ useContext: () => (/* binding */ q),\n/* harmony export */ useDebugValue: () => (/* binding */ x),\n/* harmony export */ useEffect: () => (/* binding */ p),\n/* harmony export */ useErrorBoundary: () => (/* binding */ P),\n/* harmony export */ useId: () => (/* binding */ V),\n/* harmony export */ useImperativeHandle: () => (/* binding */ A),\n/* harmony export */ useLayoutEffect: () => (/* binding */ y),\n/* harmony export */ useMemo: () => (/* binding */ F),\n/* harmony export */ useReducer: () => (/* binding */ s),\n/* harmony export */ useRef: () => (/* binding */ _),\n/* harmony export */ useState: () => (/* binding */ h)\n/* harmony export */ });\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../.. */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\nvar t,r,u,i,o=0,f=[],c=[],e=___WEBPACK_IMPORTED_MODULE_0__.options.__b,a=___WEBPACK_IMPORTED_MODULE_0__.options.__r,v=___WEBPACK_IMPORTED_MODULE_0__.options.diffed,l=___WEBPACK_IMPORTED_MODULE_0__.options.__c,m=___WEBPACK_IMPORTED_MODULE_0__.options.unmount;function d(t,u){___WEBPACK_IMPORTED_MODULE_0__.options.__h&&___WEBPACK_IMPORTED_MODULE_0__.options.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c}),i.__[t]}function h(n){return o=1,s(B,n)}function s(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function p(u,i){var o=d(t++,3);!___WEBPACK_IMPORTED_MODULE_0__.options.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o))}function y(u,i){var o=d(t++,4);!___WEBPACK_IMPORTED_MODULE_0__.options.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o))}function _(n){return o=5,F(function(){return{current:n}},[])}function A(n,t,r){o=6,y(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function F(n,r){var u=d(t++,7);return z(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T(n,t){return o=8,F(function(){return n},t)}function q(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x(t,r){___WEBPACK_IMPORTED_MODULE_0__.options.useDebugValue&&___WEBPACK_IMPORTED_MODULE_0__.options.useDebugValue(r?r(t):t)}function P(n){var u=d(t++,10),i=h();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function V(){var n=d(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w),t.__H.__h=[]}catch(r){t.__H.__h=[],___WEBPACK_IMPORTED_MODULE_0__.options.__e(r,t.__v)}}___WEBPACK_IMPORTED_MODULE_0__.options.__b=function(n){r=null,e&&e(n)},___WEBPACK_IMPORTED_MODULE_0__.options.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(k),i.__h.forEach(w),i.__h=[],t=0)),u=r},___WEBPACK_IMPORTED_MODULE_0__.options.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===___WEBPACK_IMPORTED_MODULE_0__.options.requestAnimationFrame||((i=___WEBPACK_IMPORTED_MODULE_0__.options.requestAnimationFrame)||j)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},___WEBPACK_IMPORTED_MODULE_0__.options.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return!n.__||w(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],___WEBPACK_IMPORTED_MODULE_0__.options.__e(u,t.__v)}}),l&&l(t,r)},___WEBPACK_IMPORTED_MODULE_0__.options.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n)}catch(n){r=n}}),u.__H=void 0,r&&___WEBPACK_IMPORTED_MODULE_0__.options.__e(r,u.__v))};var g=\"function\"==typeof requestAnimationFrame;function j(n){var t,r=function(){clearTimeout(u),g&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g&&(t=requestAnimationFrame(r))}function k(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function w(n){var t=r;n.__c=n.__(),r=t}function z(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B(n,t){return\"function\"==typeof t?t(n):t}\n//# sourceMappingURL=hooks.module.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFnQyw0QkFBNEIsc0NBQUMsT0FBTyxzQ0FBQyxPQUFPLHNDQUFDLFVBQVUsc0NBQUMsT0FBTyxzQ0FBQyxTQUFTLGdCQUFnQixzQ0FBQyxNQUFNLHNDQUFDLG1CQUFtQixxQkFBcUIsYUFBYSxFQUFFLGtDQUFrQyxNQUFNLFVBQVUsY0FBYyxrQkFBa0Isa0JBQWtCLGVBQWUsdURBQXVELHdDQUF3QywyQ0FBMkMsR0FBRyxpQkFBaUIsc0JBQXNCLHVCQUF1QixzQ0FBc0MsYUFBYSxFQUFFLHVCQUF1QixhQUFhLCtCQUErQixTQUFTLDZCQUE2QixVQUFVLGNBQWMsNkNBQTZDLG9EQUFvRCxPQUFPLHNEQUFzRCxzQ0FBc0MsYUFBYSxRQUFRLHNCQUFzQixzQkFBc0IsMkJBQTJCLG1CQUFtQixnQkFBZ0IsZUFBZSxDQUFDLHNDQUFDLG1EQUFtRCxnQkFBZ0IsZUFBZSxDQUFDLHNDQUFDLCtDQUErQyxjQUFjLHdCQUF3QixPQUFPLFdBQVcsS0FBSyxrQkFBa0IsaUJBQWlCLDhDQUE4QyxlQUFlLDhCQUE4QixzQkFBc0IsU0FBUyx3QkFBd0IsZ0JBQWdCLGVBQWUsdURBQXVELGdCQUFnQix3QkFBd0IsU0FBUyxJQUFJLGNBQWMsa0NBQWtDLG1FQUFtRSxnQkFBZ0Isc0NBQUMsZ0JBQWdCLHNDQUFDLHlCQUF5QixjQUFjLHNCQUFzQixzRUFBc0Usd0JBQXdCLG1CQUFtQixhQUFhLEVBQUUsYUFBYSxnQkFBZ0IsVUFBVSxnQkFBZ0IsOEJBQThCLFFBQVEsMkJBQTJCLHlCQUF5QixZQUFZLGFBQWEsVUFBVSxZQUFZLHFCQUFxQix1REFBdUQsU0FBUyxhQUFhLHNDQUFDLGVBQWUsc0NBQUMsaUJBQWlCLGVBQWUsQ0FBQyxzQ0FBQyxpQkFBaUIsWUFBWSxvQkFBb0Isc0RBQXNELDZDQUE2Qyx5REFBeUQsQ0FBQyxzQ0FBQyxvQkFBb0IsUUFBUSxZQUFZLGlEQUFpRCxzQ0FBQyw0QkFBNEIsc0NBQUMsNkRBQTZELDREQUE0RCxZQUFZLENBQUMsc0NBQUMsbUJBQW1CLG1CQUFtQixJQUFJLGdEQUFnRCxrQkFBa0IsRUFBRSxTQUFTLG1CQUFtQixrQkFBa0IsT0FBTyxzQ0FBQyxlQUFlLFlBQVksQ0FBQyxzQ0FBQyxxQkFBcUIsUUFBUSxjQUFjLHdDQUF3QyxJQUFJLEtBQUssU0FBUyxLQUFLLGtCQUFrQixzQ0FBQyxnQkFBZ0IsK0NBQStDLGNBQWMsbUJBQW1CLHlEQUF5RCxxQkFBcUIsZ0NBQWdDLGNBQWMsZ0JBQWdCLDZDQUE2QyxjQUFjLFFBQVEsaUJBQWlCLGdCQUFnQixvREFBb0QsZ0JBQWdCLEVBQUUsZ0JBQWdCLGtDQUFtUDtBQUMza0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanM/MTlkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnR7b3B0aW9ucyBhcyBufWZyb21cIi4uLy4uXCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPW4uX19iLGE9bi5fX3Isdj1uLmRpZmZlZCxsPW4uX19jLG09bi51bm1vdW50O2Z1bmN0aW9uIGQodCx1KXtuLl9faCYmbi5fX2gocix0LG98fHUpLG89MDt2YXIgaT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gdD49aS5fXy5sZW5ndGgmJmkuX18ucHVzaCh7X19WOmN9KSxpLl9fW3RdfWZ1bmN0aW9uIGgobil7cmV0dXJuIG89MSxzKEIsbil9ZnVuY3Rpb24gcyhuLHUsaSl7dmFyIG89ZCh0KyssMik7aWYoby50PW4sIW8uX19jJiYoby5fXz1baT9pKHUpOkIodm9pZCAwLHUpLGZ1bmN0aW9uKG4pe3ZhciB0PW8uX19OP28uX19OWzBdOm8uX19bMF0scj1vLnQodCxuKTt0IT09ciYmKG8uX19OPVtyLG8uX19bMV1dLG8uX19jLnNldFN0YXRlKHt9KSl9XSxvLl9fYz1yLCFyLnUpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT0hMTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksISghaSYmby5fX2MucHJvcHM9PT1uKSYmKCFjfHxjLmNhbGwodGhpcyxuLHQscikpfTtyLnU9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBwKHUsaSl7dmFyIG89ZCh0KyssMyk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19ILl9faC5wdXNoKG8pKX1mdW5jdGlvbiB5KHUsaSl7dmFyIG89ZCh0KyssNCk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19oLnB1c2gobykpfWZ1bmN0aW9uIF8obil7cmV0dXJuIG89NSxGKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBBKG4sdCxyKXtvPTYseShmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KG4odCgpKSxmdW5jdGlvbigpe3JldHVybiBuKG51bGwpfSk6bj8obi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBGKG4scil7dmFyIHU9ZCh0KyssNyk7cmV0dXJuIHoodS5fX0gscik/KHUuX19WPW4oKSx1Lmk9cix1Ll9faD1uLHUuX19WKTp1Ll9ffWZ1bmN0aW9uIFQobix0KXtyZXR1cm4gbz04LEYoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24gcShuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9ZCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIHgodCxyKXtuLnVzZURlYnVnVmFsdWUmJm4udXNlRGVidWdWYWx1ZShyP3IodCk6dCl9ZnVuY3Rpb24gUChuKXt2YXIgdT1kKHQrKywxMCksaT1oKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBWKCl7dmFyIG49ZCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGIoKXtmb3IodmFyIHQ7dD1mLnNoaWZ0KCk7KWlmKHQuX19QJiZ0Ll9fSCl0cnl7dC5fX0guX19oLmZvckVhY2goayksdC5fX0guX19oLmZvckVhY2godyksdC5fX0guX19oPVtdfWNhdGNoKHIpe3QuX19ILl9faD1bXSxuLl9fZShyLHQuX192KX19bi5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LG4uX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goayksaS5fX2guZm9yRWFjaCh3KSxpLl9faD1bXSx0PTApKSx1PXJ9LG4uZGlmZmVkPWZ1bmN0aW9uKHQpe3YmJnYodCk7dmFyIG89dC5fX2M7byYmby5fX0gmJihvLl9fSC5fX2gubGVuZ3RoJiYoMSE9PWYucHVzaChvKSYmaT09PW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxqKShiKSksby5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLmkmJihuLl9fSD1uLmkpLG4uX19WIT09YyYmKG4uX189bi5fX1YpLG4uaT12b2lkIDAsbi5fX1Y9Y30pKSx1PXI9bnVsbH0sbi5fX2M9ZnVuY3Rpb24odCxyKXtyLnNvbWUoZnVuY3Rpb24odCl7dHJ5e3QuX19oLmZvckVhY2goayksdC5fX2g9dC5fX2guZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFuLl9ffHx3KG4pfSl9Y2F0Y2godSl7ci5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pfSkscj1bXSxuLl9fZSh1LHQuX192KX19KSxsJiZsKHQscil9LG4udW5tb3VudD1mdW5jdGlvbih0KXttJiZtKHQpO3ZhciByLHU9dC5fX2M7dSYmdS5fX0gmJih1Ll9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3RyeXtrKG4pfWNhdGNoKG4pe3I9bn19KSx1Ll9fSD12b2lkIDAsciYmbi5fX2Uocix1Ll9fdikpfTt2YXIgZz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gaihuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGcmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobil9LHU9c2V0VGltZW91dChyLDEwMCk7ZyYmKHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpKX1mdW5jdGlvbiBrKG4pe3ZhciB0PXIsdT1uLl9fYztcImZ1bmN0aW9uXCI9PXR5cGVvZiB1JiYobi5fX2M9dm9pZCAwLHUoKSkscj10fWZ1bmN0aW9uIHcobil7dmFyIHQ9cjtuLl9fYz1uLl9fKCkscj10fWZ1bmN0aW9uIHoobix0KXtyZXR1cm4hbnx8bi5sZW5ndGghPT10Lmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQhPT1uW3JdfSl9ZnVuY3Rpb24gQihuLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChuKTp0fWV4cG9ydHtUIGFzIHVzZUNhbGxiYWNrLHEgYXMgdXNlQ29udGV4dCx4IGFzIHVzZURlYnVnVmFsdWUscCBhcyB1c2VFZmZlY3QsUCBhcyB1c2VFcnJvckJvdW5kYXJ5LFYgYXMgdXNlSWQsQSBhcyB1c2VJbXBlcmF0aXZlSGFuZGxlLHkgYXMgdXNlTGF5b3V0RWZmZWN0LEYgYXMgdXNlTWVtbyxzIGFzIHVzZVJlZHVjZXIsXyBhcyB1c2VSZWYsaCBhcyB1c2VTdGF0ZX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy5tb2R1bGUuanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/properties-panel/preact/jsx-runtime/dist/jsxRuntime.module.js":
-/*!*********************************************************************************************!*\
- !*** ./node_modules/@bpmn-io/properties-panel/preact/jsx-runtime/dist/jsxRuntime.module.js ***!
- \*********************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Fragment: () => (/* reexport safe */ ___WEBPACK_IMPORTED_MODULE_0__.Fragment),\n/* harmony export */ jsx: () => (/* binding */ u),\n/* harmony export */ jsxAttr: () => (/* binding */ l),\n/* harmony export */ jsxDEV: () => (/* binding */ u),\n/* harmony export */ jsxEscape: () => (/* binding */ _),\n/* harmony export */ jsxTemplate: () => (/* binding */ a),\n/* harmony export */ jsxs: () => (/* binding */ u)\n/* harmony export */ });\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../.. */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\nvar t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ VariableProvider)\n/* harmony export */ });\n/**\n * @typedef Variable\n * @property {string} name The name of the variable\n * @property {string} [type] The type of the variable\n * @property {string} [info] A description of the variable displayed as a tooltip\n * @property {boolean} [isList] whether the variable is a list\n * @property {Array} [entries] If the variable is a context, this contains the entries of the context\n * @property {djs.model.Base} [scope] The scope of the variable, by default it is the container element of the element the variable is created from\n */\n\n/**\n * A basic provider that may be extended to provide variables for the variable resolver.\n *\n * Extensions should implement the method `getVariables`.\n */\nclass VariableProvider {\n constructor(variableResolver) {\n this._variableResolver = variableResolver;\n this.register();\n }\n\n /**\n * This method should implement the creation of a list of process variables.\n *\n * @param {djs.model.Base} element\n * @return {Array} a list of process variables\n *\n * The following example contains one variable\n *\n * @example\n * VariableProvider.getVariables = function(element) {\n * const variables = [\n * {\n * name: 'myVariable',\n * type: 'String',\n * info: 'This is a global variable'\n * }\n * ];\n *\n * if (is(element, 'bpmn:Process')) {\n * return variables;\n * }\n * }\n */\n getVariables(element) { }\n\n register() {\n this._variableResolver.registerProvider(this);\n }\n}\n\nVariableProvider.$inject = [ 'variableResolver' ];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL1ZhcmlhYmxlUHJvdmlkZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFNBQVM7QUFDdkIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0IsY0FBYyxpQkFBaUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL1ZhcmlhYmxlUHJvdmlkZXIuanM/NTgyMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIFZhcmlhYmxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHlwZV0gVGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2luZm9dIEEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlhYmxlIGRpc3BsYXllZCBhcyBhIHRvb2x0aXBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzTGlzdF0gd2hldGhlciB0aGUgdmFyaWFibGUgaXMgYSBsaXN0XG4gKiBAcHJvcGVydHkge0FycmF5PFZhcmlhYmxlPn0gW2VudHJpZXNdIElmIHRoZSB2YXJpYWJsZSBpcyBhIGNvbnRleHQsIHRoaXMgY29udGFpbnMgdGhlIGVudHJpZXMgb2YgdGhlIGNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IFtzY29wZV0gVGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSwgYnkgZGVmYXVsdCBpdCBpcyB0aGUgY29udGFpbmVyIGVsZW1lbnQgb2YgdGhlIGVsZW1lbnQgdGhlIHZhcmlhYmxlIGlzIGNyZWF0ZWQgZnJvbVxuICovXG5cbi8qKlxuICogQSBiYXNpYyBwcm92aWRlciB0aGF0IG1heSBiZSBleHRlbmRlZCB0byBwcm92aWRlIHZhcmlhYmxlcyBmb3IgdGhlIHZhcmlhYmxlIHJlc29sdmVyLlxuICpcbiAqIEV4dGVuc2lvbnMgc2hvdWxkIGltcGxlbWVudCB0aGUgbWV0aG9kIGBnZXRWYXJpYWJsZXNgLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYXJpYWJsZVByb3ZpZGVyIHtcbiAgY29uc3RydWN0b3IodmFyaWFibGVSZXNvbHZlcikge1xuICAgIHRoaXMuX3ZhcmlhYmxlUmVzb2x2ZXIgPSB2YXJpYWJsZVJlc29sdmVyO1xuICAgIHRoaXMucmVnaXN0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgaW1wbGVtZW50IHRoZSBjcmVhdGlvbiBvZiBhIGxpc3Qgb2YgcHJvY2VzcyB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHJldHVybiB7QXJyYXk8VmFyaWFibGU+fSBhIGxpc3Qgb2YgcHJvY2VzcyB2YXJpYWJsZXNcbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGNvbnRhaW5zIG9uZSB2YXJpYWJsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBWYXJpYWJsZVByb3ZpZGVyLmdldFZhcmlhYmxlcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICogICBjb25zdCB2YXJpYWJsZXMgPSBbXG4gICAqICAgICB7XG4gICAqICAgICAgIG5hbWU6ICdteVZhcmlhYmxlJyxcbiAgICogICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAqICAgICAgIGluZm86ICdUaGlzIGlzIGEgZ2xvYmFsIHZhcmlhYmxlJ1xuICAgKiAgICAgfVxuICAgKiAgIF07XG4gICAqXG4gICAqICAgaWYgKGlzKGVsZW1lbnQsICdicG1uOlByb2Nlc3MnKSkge1xuICAgKiAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIGdldFZhcmlhYmxlcyhlbGVtZW50KSB7IH1cblxuICByZWdpc3RlcigpIHtcbiAgICB0aGlzLl92YXJpYWJsZVJlc29sdmVyLnJlZ2lzdGVyUHJvdmlkZXIodGhpcyk7XG4gIH1cbn1cblxuVmFyaWFibGVQcm92aWRlci4kaW5qZWN0ID0gWyAndmFyaWFibGVSZXNvbHZlcicgXTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/VariableProvider.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/base/VariableResolver.js":
-/*!******************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/base/VariableResolver.js ***!
- \******************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseVariableResolver: () => (/* binding */ BaseVariableResolver),\n/* harmony export */ mergeEntries: () => (/* binding */ mergeEntries)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _util_CachedValue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/CachedValue */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/CachedValue.js\");\n/* harmony import */ var _util_scopeUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/scopeUtil */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/scopeUtil.js\");\n\n\n\n\n/**\n * @typedef {Object} AdditionalVariable\n * @property {string} name The name of the variable\n * @property {string} [type] The type of the variable\n * @property {string} [info] A description of the variable displayed as a tooltip\n * @property {boolean} [isList] whether the variable is a list\n * @property {Array} [entries] If the variable is a context, this contains the entries of the context\n * @property {djs.model.Base} [scope] The scope of the variable, by default it is the container element of the element the variable is created from\n */\n\n/**\n * @typedef {AdditionalVariable} ProcessVariable\n * @property {Array} origin\n * @property {ModdleElement} scope\n */\n\n/**\n * Base Class that handles additional variable extractors, variable parsing and caching.\n */\nclass BaseVariableResolver {\n constructor(eventBus, bpmnjs) {\n this.providers = [];\n this._eventBus = eventBus;\n this._bpmnjs = bpmnjs;\n\n this.rawVariables = new _util_CachedValue__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this._generateRawVariables.bind(this));\n this.parsedVariables = new _util_CachedValue__WEBPACK_IMPORTED_MODULE_0__[\"default\"](async () => {\n\n const rawVariables = await this.getRawVariables();\n const context = { variables: rawVariables };\n\n eventBus.fire('variableResolver.parseVariables', context);\n\n return context.variables;\n });\n\n eventBus.on([ 'commandStack.changed', 'diagram.clear', 'import.done', 'variables.changed' ], () => {\n this.invalidateCache();\n });\n\n eventBus.on('variableResolver.parseVariables', (e, context) => {\n context.variables = this._parseVariables(context.variables);\n });\n }\n\n /**\n * To be implemented by super class. This should be an instance of `getProcessVariables` from `@bpmn-io/extract-process-variables`,\n * either C7 or C8.\n *\n * @returns {Promise>}\n */\n _baseExtractor() {\n return [];\n }\n\n\n /**\n * Returns an Object of all variables that are available in the current diagram,\n * mapped to the respective scope.\n * Variables with the same name are NOT merged together. Use this function to\n * run linting, e.g. to check for conflicting variable schemas.\n *\n * The result is cached until the diagram changes.\n *\n * @async\n * @returns {Object} rawVariables\n * @returns {Array} rawVariables.\n */\n async getRawVariables() {\n return await this.rawVariables.get();\n }\n\n /**\n * Returns an array of all variables that are available in the current diagram.\n * Variables with the same name are NOT merged together. Use this function to\n * run linting, e.g. to check for conflicting variable schemas.\n *\n * Use this function if you need all availables for all root elements. To filter for scope,\n * use `getProcessVariables` or `getVariablesForElement`\n *\n * The result is cached until the diagram changes.\n *\n * @async\n * @returns {Object} rawVariables\n * @returns {Array} rawVariables.\n */\n async getVariables() {\n return await this.parsedVariables.get();\n }\n\n /**\n * Force the cache to be invalidated an the variable extractors to be called\n * again the next time `getVariables` is called.\n */\n invalidateCache() {\n this.rawVariables.invalidate();\n this.parsedVariables.invalidate();\n }\n\n /**\n * Calls the baseExtractor and maps variables to the respective root element.\n * Cf. `getRawVariables`\n *\n * @async\n * @returns {Object} rawVariables\n * @returns {Array} rawVariables.\n */\n async _generateRawVariables() {\n const bpmnjs = this._bpmnjs;\n\n const variables = {};\n\n const workerTasks = bpmnjs.getDefinitions().get('rootElements').map(async element => {\n\n const elementVariables = await this._baseExtractor(element, [ this._extractor.bind(this) ]);\n\n // Annotate variables with extractor information\n variables[element.id] = elementVariables.map(variable => {\n if (!variable.provider) {\n variable.provider = [ this._baseExtractor ];\n }\n\n return variable;\n });\n });\n\n await Promise.all(workerTasks);\n\n return variables;\n }\n\n\n /**\n * Parses the list of all variables and checks for duplicates. If duplicates are found, the schemas are merged\n * into a single variable.\n * Also maps the attribute `variable.type` to `variable.detail` for the feel editor to display it.\n *\n * Cf. `getVariables`\n *\n * @async\n * @param {Object} rawVariables\n * @param {Array} rawVariables[scope]\n * @returns {Object} parsedVariables\n * @returns {Array} parsedVariables[scope]\n */\n _parseVariables(rawVariables) {\n const parsedVariables = {};\n for (const key in rawVariables) {\n const variables = rawVariables[key];\n\n const mergedVariables = [];\n\n variables.forEach(variable => {\n const existingVariable = mergedVariables.find(v =>\n v.name === variable.name && v.scope === variable.scope\n );\n\n if (existingVariable) {\n merge('origin', existingVariable, variable);\n merge('provider', existingVariable, variable);\n mergeEntries(existingVariable, variable);\n } else {\n mergedVariables.push(variable);\n }\n });\n\n mapToEditorFormat(mergedVariables);\n\n parsedVariables[key] = mergedVariables;\n }\n\n return parsedVariables;\n }\n\n /**\n * Callback used by `@bpmn-io/extract-process-variables`. It adds additional information from the \n * returned from the providers to the that is used by the resolver.\n *\n * It does not have a return value, the variables are added as a side effect to the `context.processVariables` array\n *\n * @async\n * @param {Object} context\n * @param {Array} context.elements\n * @param {ModdleElement} context.containerElement\n * @param {Array} context.processVariables\n */\n async _extractor(context) {\n const {\n elements,\n containerElement,\n processVariables\n } = context;\n\n const self = this;\n\n const workerTasks = elements.flatMap((element) => {\n return self.providers.map(async (provider) => {\n const newVariables = await provider.getVariables(element);\n\n if (!newVariables) {\n return;\n }\n\n // add scope and origin to variables\n newVariables.forEach(variable => {\n processVariables.push({\n ...cloneVariable(variable),\n origin: [ element ],\n scope: variable.scope || (0,_util_scopeUtil__WEBPACK_IMPORTED_MODULE_1__.getScope)(element, containerElement, variable.name),\n provider: [ provider ]\n });\n });\n });\n });\n\n await Promise.all(workerTasks);\n }\n\n /**\n * Add a new VariableProvider. This will be used the next time `getVariables` is called.\n *\n * @param {VariableProvider} provider\n */\n registerProvider(provider) {\n this.providers.push(provider);\n this.invalidateCache();\n }\n\n /**\n * Returns all variables for the given root element.\n *\n * @async\n * @param {ModdleElement} element\n * @returns {Array} variables\n */\n async getProcessVariables(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\n\n const allVariables = await this.getVariables();\n return allVariables[bo.id] || [];\n }\n\n /**\n * Returns all variables in the scope of the given element.\n *\n * @async\n * @param {ModdleElement} element\n * @returns {Array} variables\n */\n async getVariablesForElement(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\n\n const root = getRootElement(bo);\n const allVariables = await this.getProcessVariables(root);\n\n // (1) get variables for given scope\n var scopeVariables = allVariables.filter(function(variable) {\n return variable.scope.id === bo.id;\n });\n\n // (2) get variables for parent scopes\n var parents = (0,_util_scopeUtil__WEBPACK_IMPORTED_MODULE_1__.getParents)(bo);\n\n var parentsScopeVariables = allVariables.filter(function(variable) {\n return parents.find(function(parent) {\n return parent.id === variable.scope.id;\n });\n });\n\n return [ ...scopeVariables, ...parentsScopeVariables ];\n }\n}\n\nBaseVariableResolver.$inject = [ 'eventBus', 'bpmnjs' ];\n\n\n// helpers //////////////////////\n\nfunction getRootElement(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.getBusinessObject)(element);\n\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:Participant')) {\n return businessObject.processRef;\n }\n\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(businessObject, 'bpmn:Process')) {\n return businessObject;\n }\n\n let parent = businessObject;\n\n while (parent.$parent && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_2__.is)(parent, 'bpmn:Process')) {\n parent = parent.$parent;\n }\n\n return parent;\n}\n\nfunction merge(property, target, source) {\n if (!source[property]) {\n source[property] = [];\n }\n\n if (!target[property]) {\n target[property] = [];\n }\n\n const propertiesToAdd = source[property].filter(o => !target[property].includes(o));\n\n target[property].push(...propertiesToAdd);\n}\n\nfunction mergeEntries(target, source, visited = []) {\n if (visited.includes(source) || visited.includes(target)) {\n return;\n }\n visited.push(source);\n visited.push(target);\n\n target.type = extendList(target.type, source.type, '|');\n target.info = extendList(target.info, source.info, '\\n');\n target.isList = !!target.isList === !!source.isList ? target.isList : 'optional';\n\n if (!source.entries) {\n return;\n }\n\n if (!target.entries) {\n target.entries = [];\n }\n\n source.entries.forEach(variable => {\n const existingEntry = target.entries.find(e => e.name === variable.name);\n\n if (existingEntry) {\n mergeEntries(existingEntry, variable, visited);\n } else {\n target.entries.push(variable);\n }\n });\n}\n\nconst extendList = (target, source, separator) => {\n if (!target || target === source) {\n return source;\n } else {\n const existingTypes = target.split(separator);\n if (!existingTypes.includes(source)) {\n existingTypes.push(source);\n }\n return existingTypes.join(separator);\n }\n};\n\nfunction mapToEditorFormat(variables) {\n if (!variables) {\n return;\n }\n\n variables.forEach(variable => {\n variable.detail = variable.type;\n mapToEditorFormat(variable.entries);\n });\n}\n\nfunction cloneVariable(variable) {\n const newVariable = { ...variable };\n\n if (newVariable.entries) {\n newVariable.entries = newVariable.entries.map(cloneVariable);\n }\n\n return newVariable;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2Jhc2UvVmFyaWFibGVSZXNvbHZlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFtRTtBQUN0QjtBQUNXOztBQUV4RDtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFNBQVM7QUFDdkIsY0FBYywyQkFBMkI7QUFDekMsY0FBYyxnQkFBZ0I7QUFDOUI7O0FBRUE7QUFDQSxhQUFhLG9CQUFvQjtBQUNqQyxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLGVBQWU7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIseURBQVc7QUFDdkMsK0JBQStCLHlEQUFXOztBQUUxQztBQUNBLHdCQUF3Qjs7QUFFeEI7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSx3QkFBd0I7QUFDckMsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87O0FBRVA7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsc0JBQXNCO0FBQ25DLGFBQWEsZUFBZTtBQUM1QixhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5REFBUTtBQUM3QztBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxlQUFlO0FBQzVCLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7QUFDQSxlQUFlLDZFQUFpQjs7QUFFaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxlQUFlO0FBQzVCLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7QUFDQSxlQUFlLDZFQUFpQjs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0Esa0JBQWtCLDJEQUFVOztBQUU1QjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBOztBQUVBO0FBQ0EseUJBQXlCLDZFQUFpQjs7QUFFMUMsTUFBTSw4REFBRTtBQUNSO0FBQ0E7O0FBRUEsTUFBTSw4REFBRTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCLDhEQUFFO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2Jhc2UvVmFyaWFibGVSZXNvbHZlci5qcz81ZDVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEJ1c2luZXNzT2JqZWN0LCBpcyB9IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCBDYWNoZWRWYWx1ZSBmcm9tICcuL3V0aWwvQ2FjaGVkVmFsdWUnO1xuaW1wb3J0IHsgZ2V0UGFyZW50cywgZ2V0U2NvcGUgfSBmcm9tICcuL3V0aWwvc2NvcGVVdGlsJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBZGRpdGlvbmFsVmFyaWFibGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSBUaGUgdHlwZSBvZiB0aGUgdmFyaWFibGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5mb10gQSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaWFibGUgZGlzcGxheWVkIGFzIGEgdG9vbHRpcFxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNMaXN0XSB3aGV0aGVyIHRoZSB2YXJpYWJsZSBpcyBhIGxpc3RcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QWRkaXRpb25hbFZhcmlhYmxlPn0gW2VudHJpZXNdIElmIHRoZSB2YXJpYWJsZSBpcyBhIGNvbnRleHQsIHRoaXMgY29udGFpbnMgdGhlIGVudHJpZXMgb2YgdGhlIGNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7ZGpzLm1vZGVsLkJhc2V9IFtzY29wZV0gVGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSwgYnkgZGVmYXVsdCBpdCBpcyB0aGUgY29udGFpbmVyIGVsZW1lbnQgb2YgdGhlIGVsZW1lbnQgdGhlIHZhcmlhYmxlIGlzIGNyZWF0ZWQgZnJvbVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FkZGl0aW9uYWxWYXJpYWJsZX0gUHJvY2Vzc1ZhcmlhYmxlXG4gKiBAcHJvcGVydHkge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBvcmlnaW5cbiAqIEBwcm9wZXJ0eSB7TW9kZGxlRWxlbWVudH0gc2NvcGVcbiAqL1xuXG4vKipcbiAqIEJhc2UgQ2xhc3MgdGhhdCBoYW5kbGVzIGFkZGl0aW9uYWwgdmFyaWFibGUgZXh0cmFjdG9ycywgdmFyaWFibGUgcGFyc2luZyBhbmQgY2FjaGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VWYXJpYWJsZVJlc29sdmVyIHtcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMsIGJwbW5qcykge1xuICAgIHRoaXMucHJvdmlkZXJzID0gW107XG4gICAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgICB0aGlzLl9icG1uanMgPSBicG1uanM7XG5cbiAgICB0aGlzLnJhd1ZhcmlhYmxlcyA9IG5ldyBDYWNoZWRWYWx1ZSh0aGlzLl9nZW5lcmF0ZVJhd1ZhcmlhYmxlcy5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnBhcnNlZFZhcmlhYmxlcyA9IG5ldyBDYWNoZWRWYWx1ZShhc3luYyAoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHJhd1ZhcmlhYmxlcyA9IGF3YWl0IHRoaXMuZ2V0UmF3VmFyaWFibGVzKCk7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyB2YXJpYWJsZXM6IHJhd1ZhcmlhYmxlcyB9O1xuXG4gICAgICBldmVudEJ1cy5maXJlKCd2YXJpYWJsZVJlc29sdmVyLnBhcnNlVmFyaWFibGVzJywgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBjb250ZXh0LnZhcmlhYmxlcztcbiAgICB9KTtcblxuICAgIGV2ZW50QnVzLm9uKFsgJ2NvbW1hbmRTdGFjay5jaGFuZ2VkJywgJ2RpYWdyYW0uY2xlYXInLCAnaW1wb3J0LmRvbmUnLCAndmFyaWFibGVzLmNoYW5nZWQnIF0sICgpID0+IHtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZUNhY2hlKCk7XG4gICAgfSk7XG5cbiAgICBldmVudEJ1cy5vbigndmFyaWFibGVSZXNvbHZlci5wYXJzZVZhcmlhYmxlcycsIChlLCBjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LnZhcmlhYmxlcyA9IHRoaXMuX3BhcnNlVmFyaWFibGVzKGNvbnRleHQudmFyaWFibGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBiZSBpbXBsZW1lbnRlZCBieSBzdXBlciBjbGFzcy4gVGhpcyBzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgYGdldFByb2Nlc3NWYXJpYWJsZXNgIGZyb20gYEBicG1uLWlvL2V4dHJhY3QtcHJvY2Vzcy12YXJpYWJsZXNgLFxuICAgKiBlaXRoZXIgQzcgb3IgQzguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PFByb2Nlc3NWYXJpYWJsZT4+fVxuICAgKi9cbiAgX2Jhc2VFeHRyYWN0b3IoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBPYmplY3Qgb2YgYWxsIHZhcmlhYmxlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZGlhZ3JhbSxcbiAgICogbWFwcGVkIHRvIHRoZSByZXNwZWN0aXZlIHNjb3BlLlxuICAgKiBWYXJpYWJsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBOT1QgbWVyZ2VkIHRvZ2V0aGVyLiBVc2UgdGhpcyBmdW5jdGlvbiB0b1xuICAgKiBydW4gbGludGluZywgZS5nLiB0byBjaGVjayBmb3IgY29uZmxpY3RpbmcgdmFyaWFibGUgc2NoZW1hcy5cbiAgICpcbiAgICogVGhlIHJlc3VsdCBpcyBjYWNoZWQgdW50aWwgdGhlIGRpYWdyYW0gY2hhbmdlcy5cbiAgICpcbiAgICogQGFzeW5jXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHJhd1ZhcmlhYmxlc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPn0gcmF3VmFyaWFibGVzLjxzY29wZT5cbiAgICovXG4gIGFzeW5jIGdldFJhd1ZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yYXdWYXJpYWJsZXMuZ2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdmFyaWFibGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBkaWFncmFtLlxuICAgKiBWYXJpYWJsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBOT1QgbWVyZ2VkIHRvZ2V0aGVyLiBVc2UgdGhpcyBmdW5jdGlvbiB0b1xuICAgKiBydW4gbGludGluZywgZS5nLiB0byBjaGVjayBmb3IgY29uZmxpY3RpbmcgdmFyaWFibGUgc2NoZW1hcy5cbiAgICpcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IG5lZWQgYWxsIGF2YWlsYWJsZXMgZm9yIGFsbCByb290IGVsZW1lbnRzLiBUbyBmaWx0ZXIgZm9yIHNjb3BlLFxuICAgKiB1c2UgYGdldFByb2Nlc3NWYXJpYWJsZXNgIG9yIGBnZXRWYXJpYWJsZXNGb3JFbGVtZW50YFxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGNhY2hlZCB1bnRpbCB0aGUgZGlhZ3JhbSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAYXN5bmNcbiAgICogQHJldHVybnMge09iamVjdH0gcmF3VmFyaWFibGVzXG4gICAqIEByZXR1cm5zIHtBcnJheTxQcm9jZXNzVmFyaWFibGU+fSByYXdWYXJpYWJsZXMuPHJvb3RFbGVtZW50PlxuICAgKi9cbiAgYXN5bmMgZ2V0VmFyaWFibGVzKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBhcnNlZFZhcmlhYmxlcy5nZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgY2FjaGUgdG8gYmUgaW52YWxpZGF0ZWQgYW4gdGhlIHZhcmlhYmxlIGV4dHJhY3RvcnMgdG8gYmUgY2FsbGVkXG4gICAqIGFnYWluIHRoZSBuZXh0IHRpbWUgYGdldFZhcmlhYmxlc2AgaXMgY2FsbGVkLlxuICAgKi9cbiAgaW52YWxpZGF0ZUNhY2hlKCkge1xuICAgIHRoaXMucmF3VmFyaWFibGVzLmludmFsaWRhdGUoKTtcbiAgICB0aGlzLnBhcnNlZFZhcmlhYmxlcy5pbnZhbGlkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIGJhc2VFeHRyYWN0b3IgYW5kIG1hcHMgdmFyaWFibGVzIHRvIHRoZSByZXNwZWN0aXZlIHJvb3QgZWxlbWVudC5cbiAgICogQ2YuIGBnZXRSYXdWYXJpYWJsZXNgXG4gICAqXG4gICAqIEBhc3luY1xuICAgKiBAcmV0dXJucyB7T2JqZWN0fSByYXdWYXJpYWJsZXNcbiAgICogQHJldHVybnMge0FycmF5PFByb2Nlc3NWYXJpYWJsZT59IHJhd1ZhcmlhYmxlcy48c2NvcGU+XG4gICAqL1xuICBhc3luYyBfZ2VuZXJhdGVSYXdWYXJpYWJsZXMoKSB7XG4gICAgY29uc3QgYnBtbmpzID0gdGhpcy5fYnBtbmpzO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0ge307XG5cbiAgICBjb25zdCB3b3JrZXJUYXNrcyA9IGJwbW5qcy5nZXREZWZpbml0aW9ucygpLmdldCgncm9vdEVsZW1lbnRzJykubWFwKGFzeW5jIGVsZW1lbnQgPT4ge1xuXG4gICAgICBjb25zdCBlbGVtZW50VmFyaWFibGVzID0gYXdhaXQgdGhpcy5fYmFzZUV4dHJhY3RvcihlbGVtZW50LCBbIHRoaXMuX2V4dHJhY3Rvci5iaW5kKHRoaXMpIF0pO1xuXG4gICAgICAvLyBBbm5vdGF0ZSB2YXJpYWJsZXMgd2l0aCBleHRyYWN0b3IgaW5mb3JtYXRpb25cbiAgICAgIHZhcmlhYmxlc1tlbGVtZW50LmlkXSA9IGVsZW1lbnRWYXJpYWJsZXMubWFwKHZhcmlhYmxlID0+IHtcbiAgICAgICAgaWYgKCF2YXJpYWJsZS5wcm92aWRlcikge1xuICAgICAgICAgIHZhcmlhYmxlLnByb3ZpZGVyID0gWyB0aGlzLl9iYXNlRXh0cmFjdG9yIF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlclRhc2tzKTtcblxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGxpc3Qgb2YgYWxsIHZhcmlhYmxlcyBhbmQgY2hlY2tzIGZvciBkdXBsaWNhdGVzLiBJZiBkdXBsaWNhdGVzIGFyZSBmb3VuZCwgdGhlIHNjaGVtYXMgYXJlIG1lcmdlZFxuICAgKiBpbnRvIGEgc2luZ2xlIHZhcmlhYmxlLlxuICAgKiBBbHNvIG1hcHMgdGhlIGF0dHJpYnV0ZSBgdmFyaWFibGUudHlwZWAgdG8gYHZhcmlhYmxlLmRldGFpbGAgZm9yIHRoZSBmZWVsIGVkaXRvciB0byBkaXNwbGF5IGl0LlxuICAgKlxuICAgKiBDZi4gYGdldFZhcmlhYmxlc2BcbiAgICpcbiAgICogQGFzeW5jXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByYXdWYXJpYWJsZXNcbiAgICogQHBhcmFtIHtBcnJheTxQcm9jZXNzVmFyaWFibGU+fSByYXdWYXJpYWJsZXNbc2NvcGVdXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHBhcnNlZFZhcmlhYmxlc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPn0gcGFyc2VkVmFyaWFibGVzW3Njb3BlXVxuICAgKi9cbiAgX3BhcnNlVmFyaWFibGVzKHJhd1ZhcmlhYmxlcykge1xuICAgIGNvbnN0IHBhcnNlZFZhcmlhYmxlcyA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJhd1ZhcmlhYmxlcykge1xuICAgICAgY29uc3QgdmFyaWFibGVzID0gcmF3VmFyaWFibGVzW2tleV07XG5cbiAgICAgIGNvbnN0IG1lcmdlZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgICB2YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFyaWFibGUgPSBtZXJnZWRWYXJpYWJsZXMuZmluZCh2ID0+XG4gICAgICAgICAgdi5uYW1lID09PSB2YXJpYWJsZS5uYW1lICYmIHYuc2NvcGUgPT09IHZhcmlhYmxlLnNjb3BlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nVmFyaWFibGUpIHtcbiAgICAgICAgICBtZXJnZSgnb3JpZ2luJywgZXhpc3RpbmdWYXJpYWJsZSwgdmFyaWFibGUpO1xuICAgICAgICAgIG1lcmdlKCdwcm92aWRlcicsIGV4aXN0aW5nVmFyaWFibGUsIHZhcmlhYmxlKTtcbiAgICAgICAgICBtZXJnZUVudHJpZXMoZXhpc3RpbmdWYXJpYWJsZSwgdmFyaWFibGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lcmdlZFZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG1hcFRvRWRpdG9yRm9ybWF0KG1lcmdlZFZhcmlhYmxlcyk7XG5cbiAgICAgIHBhcnNlZFZhcmlhYmxlc1trZXldID0gbWVyZ2VkVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWRWYXJpYWJsZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgdXNlZCBieSBgQGJwbW4taW8vZXh0cmFjdC1wcm9jZXNzLXZhcmlhYmxlc2AuIEl0IGFkZHMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSA8QWRkaXRpb25hbFZhcmlhYmxlPlxuICAgKiByZXR1cm5lZCBmcm9tIHRoZSBwcm92aWRlcnMgdG8gdGhlIDxQcm9jZXNzVmFyaWFibGU+IHRoYXQgaXMgdXNlZCBieSB0aGUgcmVzb2x2ZXIuXG4gICAqXG4gICAqIEl0IGRvZXMgbm90IGhhdmUgYSByZXR1cm4gdmFsdWUsIHRoZSB2YXJpYWJsZXMgYXJlIGFkZGVkIGFzIGEgc2lkZSBlZmZlY3QgdG8gdGhlIGBjb250ZXh0LnByb2Nlc3NWYXJpYWJsZXNgIGFycmF5XG4gICAqXG4gICAqIEBhc3luY1xuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBjb250ZXh0LmVsZW1lbnRzXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGV4dC5jb250YWluZXJFbGVtZW50XG4gICAqIEBwYXJhbSB7QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPn0gY29udGV4dC5wcm9jZXNzVmFyaWFibGVzXG4gICAqL1xuICBhc3luYyBfZXh0cmFjdG9yKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQsXG4gICAgICBwcm9jZXNzVmFyaWFibGVzXG4gICAgfSA9IGNvbnRleHQ7XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGNvbnN0IHdvcmtlclRhc2tzID0gZWxlbWVudHMuZmxhdE1hcCgoZWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHNlbGYucHJvdmlkZXJzLm1hcChhc3luYyAocHJvdmlkZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV3VmFyaWFibGVzID0gYXdhaXQgcHJvdmlkZXIuZ2V0VmFyaWFibGVzKGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghbmV3VmFyaWFibGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHNjb3BlIGFuZCBvcmlnaW4gdG8gdmFyaWFibGVzXG4gICAgICAgIG5ld1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgICAgICBwcm9jZXNzVmFyaWFibGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uY2xvbmVWYXJpYWJsZSh2YXJpYWJsZSksXG4gICAgICAgICAgICBvcmlnaW46IFsgZWxlbWVudCBdLFxuICAgICAgICAgICAgc2NvcGU6IHZhcmlhYmxlLnNjb3BlIHx8IGdldFNjb3BlKGVsZW1lbnQsIGNvbnRhaW5lckVsZW1lbnQsIHZhcmlhYmxlLm5hbWUpLFxuICAgICAgICAgICAgcHJvdmlkZXI6IFsgcHJvdmlkZXIgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2VyVGFza3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBWYXJpYWJsZVByb3ZpZGVyLiBUaGlzIHdpbGwgYmUgdXNlZCB0aGUgbmV4dCB0aW1lIGBnZXRWYXJpYWJsZXNgIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtWYXJpYWJsZVByb3ZpZGVyfSBwcm92aWRlclxuICAgKi9cbiAgcmVnaXN0ZXJQcm92aWRlcihwcm92aWRlcikge1xuICAgIHRoaXMucHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xuICAgIHRoaXMuaW52YWxpZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgdmFyaWFibGVzIGZvciB0aGUgZ2l2ZW4gcm9vdCBlbGVtZW50LlxuICAgKlxuICAgKiBAYXN5bmNcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gICAqIEByZXR1cm5zIHtBcnJheTxQcm9jZXNzVmFyaWFibGU+fSB2YXJpYWJsZXNcbiAgICovXG4gIGFzeW5jIGdldFByb2Nlc3NWYXJpYWJsZXMoZWxlbWVudCkge1xuICAgIGNvbnN0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICBjb25zdCBhbGxWYXJpYWJsZXMgPSBhd2FpdCB0aGlzLmdldFZhcmlhYmxlcygpO1xuICAgIHJldHVybiBhbGxWYXJpYWJsZXNbYm8uaWRdIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHZhcmlhYmxlcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBhc3luY1xuICAgKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAgICogQHJldHVybnMge0FycmF5PFByb2Nlc3NWYXJpYWJsZT59IHZhcmlhYmxlc1xuICAgKi9cbiAgYXN5bmMgZ2V0VmFyaWFibGVzRm9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICAgIGNvbnN0IHJvb3QgPSBnZXRSb290RWxlbWVudChibyk7XG4gICAgY29uc3QgYWxsVmFyaWFibGVzID0gYXdhaXQgdGhpcy5nZXRQcm9jZXNzVmFyaWFibGVzKHJvb3QpO1xuXG4gICAgLy8gKDEpIGdldCB2YXJpYWJsZXMgZm9yIGdpdmVuIHNjb3BlXG4gICAgdmFyIHNjb3BlVmFyaWFibGVzID0gYWxsVmFyaWFibGVzLmZpbHRlcihmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIHZhcmlhYmxlLnNjb3BlLmlkID09PSBiby5pZDtcbiAgICB9KTtcblxuICAgIC8vICgyKSBnZXQgdmFyaWFibGVzIGZvciBwYXJlbnQgc2NvcGVzXG4gICAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGJvKTtcblxuICAgIHZhciBwYXJlbnRzU2NvcGVWYXJpYWJsZXMgPSBhbGxWYXJpYWJsZXMuZmlsdGVyKGZ1bmN0aW9uKHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gcGFyZW50cy5maW5kKGZ1bmN0aW9uKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50LmlkID09PSB2YXJpYWJsZS5zY29wZS5pZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFsgLi4uc2NvcGVWYXJpYWJsZXMsIC4uLnBhcmVudHNTY29wZVZhcmlhYmxlcyBdO1xuICB9XG59XG5cbkJhc2VWYXJpYWJsZVJlc29sdmVyLiRpbmplY3QgPSBbICdldmVudEJ1cycsICdicG1uanMnIF07XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZjtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0O1xuICB9XG5cbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuXG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCAmJiAhaXMocGFyZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHByb3BlcnR5LCB0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAoIXNvdXJjZVtwcm9wZXJ0eV0pIHtcbiAgICBzb3VyY2VbcHJvcGVydHldID0gW107XG4gIH1cblxuICBpZiAoIXRhcmdldFtwcm9wZXJ0eV0pIHtcbiAgICB0YXJnZXRbcHJvcGVydHldID0gW107XG4gIH1cblxuICBjb25zdCBwcm9wZXJ0aWVzVG9BZGQgPSBzb3VyY2VbcHJvcGVydHldLmZpbHRlcihvID0+ICF0YXJnZXRbcHJvcGVydHldLmluY2x1ZGVzKG8pKTtcblxuICB0YXJnZXRbcHJvcGVydHldLnB1c2goLi4ucHJvcGVydGllc1RvQWRkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRW50cmllcyh0YXJnZXQsIHNvdXJjZSwgdmlzaXRlZCA9IFtdKSB7XG4gIGlmICh2aXNpdGVkLmluY2x1ZGVzKHNvdXJjZSkgfHwgdmlzaXRlZC5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZpc2l0ZWQucHVzaChzb3VyY2UpO1xuICB2aXNpdGVkLnB1c2godGFyZ2V0KTtcblxuICB0YXJnZXQudHlwZSA9IGV4dGVuZExpc3QodGFyZ2V0LnR5cGUsIHNvdXJjZS50eXBlLCAnfCcpO1xuICB0YXJnZXQuaW5mbyA9IGV4dGVuZExpc3QodGFyZ2V0LmluZm8sIHNvdXJjZS5pbmZvLCAnXFxuJyk7XG4gIHRhcmdldC5pc0xpc3QgPSAhIXRhcmdldC5pc0xpc3QgPT09ICEhc291cmNlLmlzTGlzdCA/IHRhcmdldC5pc0xpc3QgOiAnb3B0aW9uYWwnO1xuXG4gIGlmICghc291cmNlLmVudHJpZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXRhcmdldC5lbnRyaWVzKSB7XG4gICAgdGFyZ2V0LmVudHJpZXMgPSBbXTtcbiAgfVxuXG4gIHNvdXJjZS5lbnRyaWVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nRW50cnkgPSB0YXJnZXQuZW50cmllcy5maW5kKGUgPT4gZS5uYW1lID09PSB2YXJpYWJsZS5uYW1lKTtcblxuICAgIGlmIChleGlzdGluZ0VudHJ5KSB7XG4gICAgICBtZXJnZUVudHJpZXMoZXhpc3RpbmdFbnRyeSwgdmFyaWFibGUsIHZpc2l0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuZW50cmllcy5wdXNoKHZhcmlhYmxlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCBleHRlbmRMaXN0ID0gKHRhcmdldCwgc291cmNlLCBzZXBhcmF0b3IpID0+IHtcbiAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0ID09PSBzb3VyY2UpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV4aXN0aW5nVHlwZXMgPSB0YXJnZXQuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICBpZiAoIWV4aXN0aW5nVHlwZXMuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgZXhpc3RpbmdUeXBlcy5wdXNoKHNvdXJjZSk7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZ1R5cGVzLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwVG9FZGl0b3JGb3JtYXQodmFyaWFibGVzKSB7XG4gIGlmICghdmFyaWFibGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgIHZhcmlhYmxlLmRldGFpbCA9IHZhcmlhYmxlLnR5cGU7XG4gICAgbWFwVG9FZGl0b3JGb3JtYXQodmFyaWFibGUuZW50cmllcyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbG9uZVZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gIGNvbnN0IG5ld1ZhcmlhYmxlID0geyAuLi52YXJpYWJsZSB9O1xuXG4gIGlmIChuZXdWYXJpYWJsZS5lbnRyaWVzKSB7XG4gICAgbmV3VmFyaWFibGUuZW50cmllcyA9IG5ld1ZhcmlhYmxlLmVudHJpZXMubWFwKGNsb25lVmFyaWFibGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1ZhcmlhYmxlO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/base/VariableResolver.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/base/util/CachedValue.js":
-/*!******************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/base/util/CachedValue.js ***!
- \******************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CachedValue)\n/* harmony export */ });\nclass CachedValue {\n constructor(generatorFunction) {\n this._generate = generatorFunction;\n this.value = null;\n this.valid = false;\n }\n\n invalidate() {\n this.valid = false;\n }\n\n get() {\n if (!this.valid) {\n this.value = this._generate();\n this.valid = true;\n }\n\n return this.value;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2Jhc2UvdXRpbC9DYWNoZWRWYWx1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby92YXJpYWJsZS1yZXNvbHZlci9saWIvYmFzZS91dGlsL0NhY2hlZFZhbHVlLmpzPzQxNTEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FjaGVkVmFsdWUge1xuICBjb25zdHJ1Y3RvcihnZW5lcmF0b3JGdW5jdGlvbikge1xuICAgIHRoaXMuX2dlbmVyYXRlID0gZ2VuZXJhdG9yRnVuY3Rpb247XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy52YWxpZCA9IGZhbHNlO1xuICB9XG5cbiAgaW52YWxpZGF0ZSgpIHtcbiAgICB0aGlzLnZhbGlkID0gZmFsc2U7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5fZ2VuZXJhdGUoKTtcbiAgICAgIHRoaXMudmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/base/util/CachedValue.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js":
-/*!****************************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js ***!
- \****************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getExtensionElementsList: () => (/* binding */ getExtensionElementsList),\n/* harmony export */ getInputOutput: () => (/* binding */ getInputOutput),\n/* harmony export */ hasInputParameter: () => (/* binding */ hasInputParameter),\n/* harmony export */ hasOutputMappings: () => (/* binding */ hasOutputMappings)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n\n\n\nfunction hasOutputMappings(element) {\n return !!getOutputParameters(element).length;\n}\n\nfunction hasInputParameter(element, name) {\n return getInputParameters(element).find(function(input) {\n return (\n input.target === name || // zeebe\n input.name === name // camunda\n );\n });\n}\n\nfunction getExtensionElementsList(businessObject, type = undefined) {\n const extensionElements = businessObject.get('extensionElements');\n\n if (!extensionElements) {\n return [];\n }\n\n const values = extensionElements.get('values');\n\n if (!values || !values.length) {\n return [];\n }\n\n if (type) {\n return values.filter(value => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(value, type));\n }\n\n return values;\n}\n\n// helpers //////////\n\nfunction getInputParameters(element) {\n return getParameters(element, 'inputParameters');\n}\n\nfunction getOutputParameters(element) {\n return getParameters(element, 'outputParameters');\n}\n\nfunction getInputOutput(element) {\n return (\n (getExtensionElements(element, 'zeebe:IoMapping'))[0] ||\n (getExtensionElements(element, 'camunda:InputOutput'))[0]\n );\n}\n\nfunction getParameters(element, property) {\n var inputOutput = getInputOutput(element);\n\n return (inputOutput && inputOutput.get(property)) || [];\n}\n\nfunction getExtensionElements(element, type) {\n var elements = [];\n var extensionElements = element.get('extensionElements');\n\n if (typeof extensionElements !== 'undefined') {\n var extensionValues = extensionElements.get('values');\n\n if (typeof extensionValues !== 'undefined') {\n elements = (0,min_dash__WEBPACK_IMPORTED_MODULE_1__.filter)(extensionValues, function(value) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(value, type);\n });\n }\n }\n\n return elements;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2Jhc2UvdXRpbC9FeHRlbnNpb25FbGVtZW50c1V0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWdEO0FBQ2Q7O0FBRTNCO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLDhEQUFFO0FBQ3BDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGdEQUFNO0FBQ3ZCLGVBQWUsOERBQUU7QUFDakIsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby92YXJpYWJsZS1yZXNvbHZlci9saWIvYmFzZS91dGlsL0V4dGVuc2lvbkVsZW1lbnRzVXRpbC5qcz9mODg3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnbWluLWRhc2gnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzT3V0cHV0TWFwcGluZ3MoZWxlbWVudCkge1xuICByZXR1cm4gISFnZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQpLmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0lucHV0UGFyYW1ldGVyKGVsZW1lbnQsIG5hbWUpIHtcbiAgcmV0dXJuIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50KS5maW5kKGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlucHV0LnRhcmdldCA9PT0gbmFtZSB8fCAvLyB6ZWViZVxuICAgICAgaW5wdXQubmFtZSA9PT0gbmFtZSAvLyBjYW11bmRhXG4gICAgKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25FbGVtZW50c0xpc3QoYnVzaW5lc3NPYmplY3QsIHR5cGUgPSB1bmRlZmluZWQpIHtcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG5cbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XG5cbiAgaWYgKCF2YWx1ZXMgfHwgIXZhbHVlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodHlwZSkge1xuICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKHZhbHVlID0+IGlzKHZhbHVlLCB0eXBlKSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMoZWxlbWVudCwgJ2lucHV0UGFyYW1ldGVycycpO1xufVxuXG5mdW5jdGlvbiBnZXRPdXRwdXRQYXJhbWV0ZXJzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFBhcmFtZXRlcnMoZWxlbWVudCwgJ291dHB1dFBhcmFtZXRlcnMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0T3V0cHV0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICAoZ2V0RXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOklvTWFwcGluZycpKVswXSB8fFxuICAgIChnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpKVswXVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJzKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIHZhciBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoaW5wdXRPdXRwdXQgJiYgaW5wdXRPdXRwdXQuZ2V0KHByb3BlcnR5KSkgfHwgW107XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIHR5cGUpIHtcbiAgdmFyIGVsZW1lbnRzID0gW107XG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnQuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gIGlmICh0eXBlb2YgZXh0ZW5zaW9uRWxlbWVudHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGV4dGVuc2lvblZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvblZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVsZW1lbnRzID0gZmlsdGVyKGV4dGVuc2lvblZhbHVlcywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzKHZhbHVlLCB0eXBlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50cztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/base/util/scopeUtil.js":
-/*!****************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/base/util/scopeUtil.js ***!
- \****************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getParents: () => (/* binding */ getParents),\n/* harmony export */ getScope: () => (/* binding */ getScope)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExtensionElementsUtil */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js\");\n\n\n\nfunction getScope(element, globalScope, variableName) {\n var parents = getParents(element);\n\n if ((0,_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__.hasOutputMappings)(element)) {\n return element;\n }\n\n var scopedParent = parents.find(function(parent) {\n return (\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_1__.is)(parent, 'bpmn:SubProcess') && (0,_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_0__.hasInputParameter)(parent, variableName)\n );\n });\n\n return scopedParent ? scopedParent : globalScope;\n}\n\nfunction getParents(element) {\n var parents = [];\n var current = element;\n\n while (current.$parent) {\n parents.push(current.$parent);\n current = current.$parent;\n }\n\n return parents;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2Jhc2UvdXRpbC9zY29wZVV0aWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFnRDtBQUMrQjs7QUFFeEU7QUFDUDs7QUFFQSxNQUFNLHlFQUFpQjtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLDhEQUFFLCtCQUErQix5RUFBaUI7QUFDeEQ7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2Jhc2UvdXRpbC9zY29wZVV0aWwuanM/YTFkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpcyB9IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IGhhc0lucHV0UGFyYW1ldGVyLCBoYXNPdXRwdXRNYXBwaW5ncyB9IGZyb20gJy4vRXh0ZW5zaW9uRWxlbWVudHNVdGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjb3BlKGVsZW1lbnQsIGdsb2JhbFNjb3BlLCB2YXJpYWJsZU5hbWUpIHtcbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnQpO1xuXG4gIGlmIChoYXNPdXRwdXRNYXBwaW5ncyhlbGVtZW50KSkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgdmFyIHNjb3BlZFBhcmVudCA9IHBhcmVudHMuZmluZChmdW5jdGlvbihwYXJlbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXMocGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaGFzSW5wdXRQYXJhbWV0ZXIocGFyZW50LCB2YXJpYWJsZU5hbWUpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjb3BlZFBhcmVudCA/IHNjb3BlZFBhcmVudCA6IGdsb2JhbFNjb3BlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBwYXJlbnRzID0gW107XG4gIHZhciBjdXJyZW50ID0gZWxlbWVudDtcblxuICB3aGlsZSAoY3VycmVudC4kcGFyZW50KSB7XG4gICAgcGFyZW50cy5wdXNoKGN1cnJlbnQuJHBhcmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQuJHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnRzO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/base/util/scopeUtil.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/camunda/VariableResolver.js":
-/*!*********************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/camunda/VariableResolver.js ***!
- \*********************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CamundaVariableResolver)\n/* harmony export */ });\n/* harmony import */ var _bpmn_io_extract_process_variables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @bpmn-io/extract-process-variables */ \"./node_modules/@bpmn-io/extract-process-variables/dist/index.mjs\");\n/* harmony import */ var _base_VariableResolver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/VariableResolver */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/VariableResolver.js\");\n\n\n\n/**\n * The Camunda 7 Implementation for the VariableResolver.\n */\nclass CamundaVariableResolver extends _base_VariableResolver__WEBPACK_IMPORTED_MODULE_1__.BaseVariableResolver {\n constructor(eventBus, bpmnjs) {\n super(eventBus, bpmnjs);\n this._baseExtractor = _bpmn_io_extract_process_variables__WEBPACK_IMPORTED_MODULE_0__.getProcessVariables;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2NhbXVuZGEvVmFyaWFibGVSZXNvbHZlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUU7QUFDVDs7QUFFaEU7QUFDQTtBQUNBO0FBQ2Usc0NBQXNDLHdFQUFvQjtBQUN6RTtBQUNBO0FBQ0EsMEJBQTBCLG1GQUFtQjtBQUM3QztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BicG1uLWlvL3ZhcmlhYmxlLXJlc29sdmVyL2xpYi9jYW11bmRhL1ZhcmlhYmxlUmVzb2x2ZXIuanM/NWY2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRQcm9jZXNzVmFyaWFibGVzIH0gZnJvbSAnQGJwbW4taW8vZXh0cmFjdC1wcm9jZXNzLXZhcmlhYmxlcyc7XG5pbXBvcnQgeyBCYXNlVmFyaWFibGVSZXNvbHZlciB9IGZyb20gJy4uL2Jhc2UvVmFyaWFibGVSZXNvbHZlcic7XG5cbi8qKlxuICogVGhlIENhbXVuZGEgNyBJbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFZhcmlhYmxlUmVzb2x2ZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbXVuZGFWYXJpYWJsZVJlc29sdmVyIGV4dGVuZHMgQmFzZVZhcmlhYmxlUmVzb2x2ZXIge1xuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgYnBtbmpzKSB7XG4gICAgc3VwZXIoZXZlbnRCdXMsIGJwbW5qcyk7XG4gICAgdGhpcy5fYmFzZUV4dHJhY3RvciA9IGdldFByb2Nlc3NWYXJpYWJsZXM7XG4gIH1cbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/camunda/VariableResolver.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/index.js":
-/*!**************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/index.js ***!
- \**************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CamundaVariableResolverModule: () => (/* binding */ CamundaVariableResolverModule),\n/* harmony export */ VariableProvider: () => (/* reexport safe */ _VariableProvider__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ ZeebeVariableResolverModule: () => (/* binding */ ZeebeVariableResolverModule)\n/* harmony export */ });\n/* harmony import */ var _camunda_VariableResolver__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./camunda/VariableResolver */ \"./node_modules/@bpmn-io/variable-resolver/lib/camunda/VariableResolver.js\");\n/* harmony import */ var _zeebe_VariableResolver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./zeebe/VariableResolver */ \"./node_modules/@bpmn-io/variable-resolver/lib/zeebe/VariableResolver.js\");\n/* harmony import */ var _VariableProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VariableProvider */ \"./node_modules/@bpmn-io/variable-resolver/lib/VariableProvider.js\");\n/* harmony import */ var _zeebe_extractors_connectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./zeebe/extractors/connectors */ \"./node_modules/@bpmn-io/variable-resolver/lib/zeebe/extractors/connectors.js\");\n\n\n\n\n\nconst ZeebeVariableResolverModule = {\n __init__: [\n 'variableResolver',\n 'connectorVariableProvider'\n ],\n variableResolver: [ 'type', _zeebe_VariableResolver__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ],\n connectorVariableProvider: [ 'type', _zeebe_extractors_connectors__WEBPACK_IMPORTED_MODULE_3__[\"default\"] ]\n};\n\nconst CamundaVariableResolverModule = {\n __init__: [\n 'variableResolver',\n ],\n variableResolver: [ 'type', _camunda_VariableResolver__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBaUU7QUFDSjtBQUNYO0FBQ29COztBQUUvRDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLCtEQUFxQjtBQUNuRCx1Q0FBdUMsb0VBQXlCO0FBQ2hFOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGlFQUF1QjtBQUNyRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby92YXJpYWJsZS1yZXNvbHZlci9saWIvaW5kZXguanM/N2ZkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2FtdW5kYVZhcmlhYmxlUmVzb2x2ZXIgZnJvbSAnLi9jYW11bmRhL1ZhcmlhYmxlUmVzb2x2ZXInO1xuaW1wb3J0IFplZWJlVmFyaWFibGVSZXNvbHZlciBmcm9tICcuL3plZWJlL1ZhcmlhYmxlUmVzb2x2ZXInO1xuaW1wb3J0IFZhcmlhYmxlUHJvdmlkZXIgZnJvbSAnLi9WYXJpYWJsZVByb3ZpZGVyJztcbmltcG9ydCBDb25uZWN0b3JWYXJpYWJsZVByb3ZpZGVyIGZyb20gJy4vemVlYmUvZXh0cmFjdG9ycy9jb25uZWN0b3JzJztcblxuZXhwb3J0IGNvbnN0IFplZWJlVmFyaWFibGVSZXNvbHZlck1vZHVsZSA9IHtcbiAgX19pbml0X186IFtcbiAgICAndmFyaWFibGVSZXNvbHZlcicsXG4gICAgJ2Nvbm5lY3RvclZhcmlhYmxlUHJvdmlkZXInXG4gIF0sXG4gIHZhcmlhYmxlUmVzb2x2ZXI6IFsgJ3R5cGUnLCBaZWViZVZhcmlhYmxlUmVzb2x2ZXIgXSxcbiAgY29ubmVjdG9yVmFyaWFibGVQcm92aWRlcjogWyAndHlwZScsIENvbm5lY3RvclZhcmlhYmxlUHJvdmlkZXIgXVxufTtcblxuZXhwb3J0IGNvbnN0IENhbXVuZGFWYXJpYWJsZVJlc29sdmVyTW9kdWxlID0ge1xuICBfX2luaXRfXzogW1xuICAgICd2YXJpYWJsZVJlc29sdmVyJyxcbiAgXSxcbiAgdmFyaWFibGVSZXNvbHZlcjogWyAndHlwZScsIENhbXVuZGFWYXJpYWJsZVJlc29sdmVyIF0sXG59O1xuXG5leHBvcnQgeyBWYXJpYWJsZVByb3ZpZGVyIH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/zeebe/VariableResolver.js":
-/*!*******************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/zeebe/VariableResolver.js ***!
- \*******************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ZeebeVariableResolver)\n/* harmony export */ });\n/* harmony import */ var _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @bpmn-io/extract-process-variables/zeebe */ \"./node_modules/@bpmn-io/extract-process-variables/zeebe/index.mjs\");\n/* harmony import */ var _base_VariableResolver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base/VariableResolver */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/VariableResolver.js\");\n/* harmony import */ var _util_feelUtility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/feelUtility */ \"./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/feelUtility.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var _base_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../base/util/ExtensionElementsUtil */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js\");\n\n\n\n\n\n\n\nconst HIGH_PRIORITY = 2000;\n\n/**\n * The Camunda 8 Implementation for the VariableResolver.\n */\nclass ZeebeVariableResolver extends _base_VariableResolver__WEBPACK_IMPORTED_MODULE_1__.BaseVariableResolver {\n constructor(eventBus, bpmnjs) {\n super(eventBus, bpmnjs);\n this._baseExtractor = _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_0__.getProcessVariables;\n\n eventBus.on('variableResolver.parseVariables', HIGH_PRIORITY, this._resolveIoMappings);\n }\n\n async getVariablesForElement(element, moddleElement) {\n const variables = await super.getVariablesForElement(element);\n\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.getBusinessObject)(element);\n\n if (!moddleElement) {\n return variables;\n }\n\n const inputOutput = (0,_base_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_3__.getInputOutput)(bo);\n\n if (!inputOutput) {\n return variables;\n }\n\n const namesToFilter = [];\n\n // Input: remove all inputs defined after the current input definition\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(moddleElement, 'zeebe:Input')) {\n const allInputs = inputOutput.inputParameters;\n\n const inputsToFilter =\n allInputs\n .slice(allInputs.indexOf(moddleElement))\n .map(o => o.target);\n\n namesToFilter.push(...inputsToFilter);\n }\n\n const allOutputs = inputOutput.outputParameters;\n\n // Output: remove all outputs defined after the current output definition\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(moddleElement, 'zeebe:Output')) {\n\n // Get all output mappings defined after the current element, including own name\n const outputsToFilter = allOutputs\n .slice(allOutputs.indexOf(moddleElement))\n .map(o => o.target);\n\n namesToFilter.push(...outputsToFilter);\n }\n\n // Input or general property: remove all outputs\n else if (allOutputs) {\n\n // Input or execution-related element, remove all outputs\n const outputsToFilter = allOutputs\n .map(o => o.target);\n\n namesToFilter.push(...outputsToFilter);\n }\n\n return variables.filter(v => {\n\n // Keep all variables that are also defined in other elements\n if (v.origin.length > 1 || v.origin[0] !== bo) {\n return true;\n }\n\n // Keep all variables from external data providers in outputs\n if (\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_4__.is)(moddleElement, 'zeebe:Output') &&\n v.provider.find(extractor => extractor !== this._baseExtractor)\n ) {\n return true;\n }\n\n // Filter all pre-defined variables\n return !namesToFilter.includes(v.name);\n });\n }\n\n /**\n * Parsed the variables that have io-mappings and resolves the variable schema to kept the\n * variable schema throughout the process.\n *\n * @param {Event} e\n * @param {Object} context\n * @param {Array} context.variables\n */\n _resolveIoMappings(e, context) {\n const rawVariables = context.variables;\n\n const mappedVariables = {};\n\n for (const key in rawVariables) {\n const variables = rawVariables[key];\n const newVariables = (0,_util_feelUtility__WEBPACK_IMPORTED_MODULE_2__.parseIoMappings)(variables);\n\n mappedVariables[key] = [ ...variables, ...newVariables ];\n }\n\n context.variables = mappedVariables;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL3plZWJlL1ZhcmlhYmxlUmVzb2x2ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQStFO0FBQ2Y7QUFDWDtBQUlqQjtBQUNnQzs7O0FBR3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNlLG9DQUFvQyx3RUFBb0I7QUFDdkU7QUFDQTtBQUNBLDBCQUEwQix5RkFBbUI7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxlQUFlLDZFQUFpQjs7QUFFaEM7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixnRkFBYzs7QUFFdEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsUUFBUSw4REFBRTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxRQUFRLDhEQUFFOztBQUVWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSw4REFBRTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsd0JBQXdCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLGtFQUFlOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby92YXJpYWJsZS1yZXNvbHZlci9saWIvemVlYmUvVmFyaWFibGVSZXNvbHZlci5qcz85ODBiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFByb2Nlc3NWYXJpYWJsZXMgfSBmcm9tICdAYnBtbi1pby9leHRyYWN0LXByb2Nlc3MtdmFyaWFibGVzL3plZWJlJztcbmltcG9ydCB7IEJhc2VWYXJpYWJsZVJlc29sdmVyIH0gZnJvbSAnLi4vYmFzZS9WYXJpYWJsZVJlc29sdmVyJztcbmltcG9ydCB7IHBhcnNlSW9NYXBwaW5ncyB9IGZyb20gJy4vdXRpbC9mZWVsVXRpbGl0eSc7XG5pbXBvcnQge1xuICBnZXRCdXNpbmVzc09iamVjdCxcbiAgaXNcbn0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9Nb2RlbFV0aWwnO1xuaW1wb3J0IHsgZ2V0SW5wdXRPdXRwdXQgfSBmcm9tICcuLi9iYXNlL3V0aWwvRXh0ZW5zaW9uRWxlbWVudHNVdGlsJztcblxuXG5jb25zdCBISUdIX1BSSU9SSVRZID0gMjAwMDtcblxuLyoqXG4gKiBUaGUgQ2FtdW5kYSA4IEltcGxlbWVudGF0aW9uIGZvciB0aGUgVmFyaWFibGVSZXNvbHZlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVlYmVWYXJpYWJsZVJlc29sdmVyIGV4dGVuZHMgQmFzZVZhcmlhYmxlUmVzb2x2ZXIge1xuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgYnBtbmpzKSB7XG4gICAgc3VwZXIoZXZlbnRCdXMsIGJwbW5qcyk7XG4gICAgdGhpcy5fYmFzZUV4dHJhY3RvciA9IGdldFByb2Nlc3NWYXJpYWJsZXM7XG5cbiAgICBldmVudEJ1cy5vbigndmFyaWFibGVSZXNvbHZlci5wYXJzZVZhcmlhYmxlcycsIEhJR0hfUFJJT1JJVFksIHRoaXMuX3Jlc29sdmVJb01hcHBpbmdzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFZhcmlhYmxlc0ZvckVsZW1lbnQoZWxlbWVudCwgbW9kZGxlRWxlbWVudCkge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IGF3YWl0IHN1cGVyLmdldFZhcmlhYmxlc0ZvckVsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gICAgaWYgKCFtb2RkbGVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdmFyaWFibGVzO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0T3V0cHV0ID0gZ2V0SW5wdXRPdXRwdXQoYm8pO1xuXG4gICAgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lc1RvRmlsdGVyID0gW107XG5cbiAgICAvLyBJbnB1dDogcmVtb3ZlIGFsbCBpbnB1dHMgZGVmaW5lZCBhZnRlciB0aGUgY3VycmVudCBpbnB1dCBkZWZpbml0aW9uXG4gICAgaWYgKGlzKG1vZGRsZUVsZW1lbnQsICd6ZWViZTpJbnB1dCcpKSB7XG4gICAgICBjb25zdCBhbGxJbnB1dHMgPSBpbnB1dE91dHB1dC5pbnB1dFBhcmFtZXRlcnM7XG5cbiAgICAgIGNvbnN0IGlucHV0c1RvRmlsdGVyID1cbiAgICAgICAgYWxsSW5wdXRzXG4gICAgICAgICAgLnNsaWNlKGFsbElucHV0cy5pbmRleE9mKG1vZGRsZUVsZW1lbnQpKVxuICAgICAgICAgIC5tYXAobyA9PiBvLnRhcmdldCk7XG5cbiAgICAgIG5hbWVzVG9GaWx0ZXIucHVzaCguLi5pbnB1dHNUb0ZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsT3V0cHV0cyA9IGlucHV0T3V0cHV0Lm91dHB1dFBhcmFtZXRlcnM7XG5cbiAgICAvLyBPdXRwdXQ6IHJlbW92ZSBhbGwgb3V0cHV0cyBkZWZpbmVkIGFmdGVyIHRoZSBjdXJyZW50IG91dHB1dCBkZWZpbml0aW9uXG4gICAgaWYgKGlzKG1vZGRsZUVsZW1lbnQsICd6ZWViZTpPdXRwdXQnKSkge1xuXG4gICAgICAvLyBHZXQgYWxsIG91dHB1dCBtYXBwaW5ncyBkZWZpbmVkIGFmdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQsIGluY2x1ZGluZyBvd24gbmFtZVxuICAgICAgY29uc3Qgb3V0cHV0c1RvRmlsdGVyID0gYWxsT3V0cHV0c1xuICAgICAgICAuc2xpY2UoYWxsT3V0cHV0cy5pbmRleE9mKG1vZGRsZUVsZW1lbnQpKVxuICAgICAgICAubWFwKG8gPT4gby50YXJnZXQpO1xuXG4gICAgICBuYW1lc1RvRmlsdGVyLnB1c2goLi4ub3V0cHV0c1RvRmlsdGVyKTtcbiAgICB9XG5cbiAgICAvLyBJbnB1dCBvciBnZW5lcmFsIHByb3BlcnR5OiByZW1vdmUgYWxsIG91dHB1dHNcbiAgICBlbHNlIGlmIChhbGxPdXRwdXRzKSB7XG5cbiAgICAgIC8vIElucHV0IG9yIGV4ZWN1dGlvbi1yZWxhdGVkIGVsZW1lbnQsIHJlbW92ZSBhbGwgb3V0cHV0c1xuICAgICAgY29uc3Qgb3V0cHV0c1RvRmlsdGVyID0gYWxsT3V0cHV0c1xuICAgICAgICAubWFwKG8gPT4gby50YXJnZXQpO1xuXG4gICAgICBuYW1lc1RvRmlsdGVyLnB1c2goLi4ub3V0cHV0c1RvRmlsdGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFibGVzLmZpbHRlcih2ID0+IHtcblxuICAgICAgLy8gS2VlcCBhbGwgdmFyaWFibGVzIHRoYXQgYXJlIGFsc28gZGVmaW5lZCBpbiBvdGhlciBlbGVtZW50c1xuICAgICAgaWYgKHYub3JpZ2luLmxlbmd0aCA+IDEgfHwgdi5vcmlnaW5bMF0gIT09IGJvKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBLZWVwIGFsbCB2YXJpYWJsZXMgZnJvbSBleHRlcm5hbCBkYXRhIHByb3ZpZGVycyBpbiBvdXRwdXRzXG4gICAgICBpZiAoXG4gICAgICAgIGlzKG1vZGRsZUVsZW1lbnQsICd6ZWViZTpPdXRwdXQnKSAmJlxuICAgICAgICB2LnByb3ZpZGVyLmZpbmQoZXh0cmFjdG9yID0+IGV4dHJhY3RvciAhPT0gdGhpcy5fYmFzZUV4dHJhY3RvcilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsdGVyIGFsbCBwcmUtZGVmaW5lZCB2YXJpYWJsZXNcbiAgICAgIHJldHVybiAhbmFtZXNUb0ZpbHRlci5pbmNsdWRlcyh2Lm5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlZCB0aGUgdmFyaWFibGVzIHRoYXQgaGF2ZSBpby1tYXBwaW5ncyBhbmQgcmVzb2x2ZXMgdGhlIHZhcmlhYmxlIHNjaGVtYSB0byBrZXB0IHRoZVxuICAgKiB2YXJpYWJsZSBzY2hlbWEgdGhyb3VnaG91dCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge0FycmF5PFByb2Nlc3NWYXJpYWJsZT59IGNvbnRleHQudmFyaWFibGVzXG4gICAqL1xuICBfcmVzb2x2ZUlvTWFwcGluZ3MoZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHJhd1ZhcmlhYmxlcyA9IGNvbnRleHQudmFyaWFibGVzO1xuXG4gICAgY29uc3QgbWFwcGVkVmFyaWFibGVzID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiByYXdWYXJpYWJsZXMpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHJhd1ZhcmlhYmxlc1trZXldO1xuICAgICAgY29uc3QgbmV3VmFyaWFibGVzID0gcGFyc2VJb01hcHBpbmdzKHZhcmlhYmxlcyk7XG5cbiAgICAgIG1hcHBlZFZhcmlhYmxlc1trZXldID0gWyAuLi52YXJpYWJsZXMsIC4uLm5ld1ZhcmlhYmxlcyBdO1xuICAgIH1cblxuICAgIGNvbnRleHQudmFyaWFibGVzID0gbWFwcGVkVmFyaWFibGVzO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/zeebe/VariableResolver.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/zeebe/extractors/connectors.js":
-/*!************************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/zeebe/extractors/connectors.js ***!
- \************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _VariableProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../VariableProvider */ \"./node_modules/@bpmn-io/variable-resolver/lib/VariableProvider.js\");\n/* harmony import */ var _base_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../base/util/ExtensionElementsUtil */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js\");\n/* harmony import */ var _util_feelUtility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/feelUtility */ \"./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/feelUtility.js\");\n\n\n\n\n/**\n * TODO: This method tries to mirror the behavior of ConnectorMappings. However, this is not possible in all cases,\n * as the absence of the header has execution implications. This should be replaced with engine behavior in the\n * Connector Implementation at one point.\n */\nclass ConnectorVariableProvider extends _VariableProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n getVariables(element) {\n\n const result = [];\n\n const taskheaders = (0,_base_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_1__.getExtensionElementsList)(element, 'zeebe:TaskHeaders')[0];\n\n if (!taskheaders || !taskheaders.values) {\n return;\n }\n\n const headers = taskheaders.values;\n\n const resultVariable = headers.find(header => {\n return header.key === 'resultVariable';\n });\n\n const resultExpression = headers.find(header => {\n return header.key === 'resultExpression';\n });\n\n if (resultVariable && resultVariable.value) {\n result.push({\n name: resultVariable.value\n });\n }\n\n if (resultExpression && resultExpression.value) {\n\n // parse with FEEL\n const resultContext = (0,_util_feelUtility__WEBPACK_IMPORTED_MODULE_2__.getResultContext)(resultExpression.value.substring(1));\n\n const expressionVariables = (0,_util_feelUtility__WEBPACK_IMPORTED_MODULE_2__.toUnifiedFormat)(resultContext.computedValue(), result);\n\n if (expressionVariables && expressionVariables.length > 0) {\n result.push(\n ...expressionVariables[0].entries\n );\n }\n }\n\n return result;\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConnectorVariableProvider);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL3plZWJlL2V4dHJhY3RvcnMvY29ubmVjdG9ycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNEO0FBQzJCO0FBQ1Q7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MseURBQWdCO0FBQ3hEOztBQUVBOztBQUVBLHdCQUF3QiwwRkFBd0I7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQSw0QkFBNEIsbUVBQWdCOztBQUU1QyxrQ0FBa0Msa0VBQWU7O0FBRWpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseUJBQXlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BicG1uLWlvL3ZhcmlhYmxlLXJlc29sdmVyL2xpYi96ZWViZS9leHRyYWN0b3JzL2Nvbm5lY3RvcnMuanM/NmU0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmFyaWFibGVQcm92aWRlciBmcm9tICcuLi8uLi9WYXJpYWJsZVByb3ZpZGVyJztcbmltcG9ydCB7IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdCB9IGZyb20gJy4uLy4uL2Jhc2UvdXRpbC9FeHRlbnNpb25FbGVtZW50c1V0aWwnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0Q29udGV4dCwgdG9VbmlmaWVkRm9ybWF0IH0gZnJvbSAnLi4vdXRpbC9mZWVsVXRpbGl0eSc7XG5cbi8qKlxuICogVE9ETzogVGhpcyBtZXRob2QgdHJpZXMgdG8gbWlycm9yIHRoZSBiZWhhdmlvciBvZiBDb25uZWN0b3JNYXBwaW5ncy4gSG93ZXZlciwgdGhpcyBpcyBub3QgcG9zc2libGUgaW4gYWxsIGNhc2VzLFxuICogYXMgdGhlIGFic2VuY2Ugb2YgdGhlIGhlYWRlciBoYXMgZXhlY3V0aW9uIGltcGxpY2F0aW9ucy4gVGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBlbmdpbmUgYmVoYXZpb3IgaW4gdGhlXG4gKiBDb25uZWN0b3IgSW1wbGVtZW50YXRpb24gYXQgb25lIHBvaW50LlxuICovXG5jbGFzcyBDb25uZWN0b3JWYXJpYWJsZVByb3ZpZGVyIGV4dGVuZHMgVmFyaWFibGVQcm92aWRlciB7XG4gIGdldFZhcmlhYmxlcyhlbGVtZW50KSB7XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGNvbnN0IHRhc2toZWFkZXJzID0gZ2V0RXh0ZW5zaW9uRWxlbWVudHNMaXN0KGVsZW1lbnQsICd6ZWViZTpUYXNrSGVhZGVycycpWzBdO1xuXG4gICAgaWYgKCF0YXNraGVhZGVycyB8fCAhdGFza2hlYWRlcnMudmFsdWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IHRhc2toZWFkZXJzLnZhbHVlcztcblxuICAgIGNvbnN0IHJlc3VsdFZhcmlhYmxlID0gaGVhZGVycy5maW5kKGhlYWRlciA9PiB7XG4gICAgICByZXR1cm4gaGVhZGVyLmtleSA9PT0gJ3Jlc3VsdFZhcmlhYmxlJztcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdEV4cHJlc3Npb24gPSBoZWFkZXJzLmZpbmQoaGVhZGVyID0+IHtcbiAgICAgIHJldHVybiBoZWFkZXIua2V5ID09PSAncmVzdWx0RXhwcmVzc2lvbic7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0VmFyaWFibGUgJiYgcmVzdWx0VmFyaWFibGUudmFsdWUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgbmFtZTogcmVzdWx0VmFyaWFibGUudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRFeHByZXNzaW9uICYmIHJlc3VsdEV4cHJlc3Npb24udmFsdWUpIHtcblxuICAgICAgLy8gcGFyc2Ugd2l0aCBGRUVMXG4gICAgICBjb25zdCByZXN1bHRDb250ZXh0ID0gZ2V0UmVzdWx0Q29udGV4dChyZXN1bHRFeHByZXNzaW9uLnZhbHVlLnN1YnN0cmluZygxKSk7XG5cbiAgICAgIGNvbnN0IGV4cHJlc3Npb25WYXJpYWJsZXMgPSB0b1VuaWZpZWRGb3JtYXQocmVzdWx0Q29udGV4dC5jb21wdXRlZFZhbHVlKCksIHJlc3VsdCk7XG5cbiAgICAgIGlmIChleHByZXNzaW9uVmFyaWFibGVzICYmIGV4cHJlc3Npb25WYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAuLi5leHByZXNzaW9uVmFyaWFibGVzWzBdLmVudHJpZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbm5lY3RvclZhcmlhYmxlUHJvdmlkZXI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/zeebe/extractors/connectors.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/VariableContext.js":
-/*!***********************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/VariableContext.js ***!
- \***********************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EntriesContext: () => (/* binding */ EntriesContext)\n/* harmony export */ });\n/* harmony import */ var lezer_feel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lezer-feel */ \"./node_modules/lezer-feel/dist/index.js\");\n\n\nclass EntriesContext extends lezer_feel__WEBPACK_IMPORTED_MODULE_0__.VariableContext {\n constructor(value = { entries: {} }) {\n super(value);\n\n this.value.entries = this.value.entries || {};\n\n const context = this.value;\n\n for (const key in context.entries) {\n const entry = context.entries[key];\n\n if (entry instanceof EntriesContext) {\n continue;\n }\n\n context.entries[key] = this.constructor.of(context.entries[key]);\n }\n }\n\n getKeys() {\n return Object.keys(this.value.entries);\n }\n\n get(key) {\n const value = this.value.entries[key];\n\n if (!value) {\n return value;\n }\n\n if (value.atomic) {\n return value.atomicValue;\n }\n\n return value;\n }\n\n set(key, value) {\n return this.constructor.of(\n {\n ...this.value,\n entries: {\n ...this.value.entries,\n [key]: value\n }\n }\n );\n }\n\n static of(...contexts) {\n const unwrap = (context) => {\n\n if (\n this.isAtomic(context)\n ) {\n if (context instanceof this) {\n return context.value;\n }\n\n return {\n atomic: true,\n atomicValue: context\n };\n }\n\n return { ...context };\n };\n\n const merged = contexts.reduce((merged, context) => {\n\n const {\n entries = {},\n ...rest\n } = unwrap(context);\n\n return {\n ...merged,\n ...rest,\n entries: {\n ...merged.entries,\n ...entries\n }\n };\n }, {});\n\n return new this(merged);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL3plZWJlL3V0aWwvVmFyaWFibGVDb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZDOztBQUV0Qyw2QkFBNkIsdURBQWU7QUFDbkQsd0JBQXdCLGFBQWE7QUFDckM7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmOztBQUVBOztBQUVBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJOztBQUVUO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby92YXJpYWJsZS1yZXNvbHZlci9saWIvemVlYmUvdXRpbC9WYXJpYWJsZUNvbnRleHQuanM/MjZmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYXJpYWJsZUNvbnRleHQgfSBmcm9tICdsZXplci1mZWVsJztcblxuZXhwb3J0IGNsYXNzIEVudHJpZXNDb250ZXh0IGV4dGVuZHMgVmFyaWFibGVDb250ZXh0IHtcbiAgY29uc3RydWN0b3IodmFsdWUgPSB7IGVudHJpZXM6IHt9IH0pIHtcbiAgICBzdXBlcih2YWx1ZSk7XG5cbiAgICB0aGlzLnZhbHVlLmVudHJpZXMgPSB0aGlzLnZhbHVlLmVudHJpZXMgfHwge307XG5cbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy52YWx1ZTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRleHQuZW50cmllcykge1xuICAgICAgY29uc3QgZW50cnkgPSBjb250ZXh0LmVudHJpZXNba2V5XTtcblxuICAgICAgaWYgKGVudHJ5IGluc3RhbmNlb2YgRW50cmllc0NvbnRleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuZW50cmllc1trZXldID0gdGhpcy5jb25zdHJ1Y3Rvci5vZihjb250ZXh0LmVudHJpZXNba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5cygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZS5lbnRyaWVzKTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUuZW50cmllc1trZXldO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5hdG9taWMpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5hdG9taWNWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm9mKFxuICAgICAge1xuICAgICAgICAuLi50aGlzLnZhbHVlLFxuICAgICAgICBlbnRyaWVzOiB7XG4gICAgICAgICAgLi4udGhpcy52YWx1ZS5lbnRyaWVzLFxuICAgICAgICAgIFtrZXldOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBvZiguLi5jb250ZXh0cykge1xuICAgIGNvbnN0IHVud3JhcCA9IChjb250ZXh0KSA9PiB7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0F0b21pYyhjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChjb250ZXh0IGluc3RhbmNlb2YgdGhpcykge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdG9taWM6IHRydWUsXG4gICAgICAgICAgYXRvbWljVmFsdWU6IGNvbnRleHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgLi4uY29udGV4dCB9O1xuICAgIH07XG5cbiAgICBjb25zdCBtZXJnZWQgPSBjb250ZXh0cy5yZWR1Y2UoKG1lcmdlZCwgY29udGV4dCkgPT4ge1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGVudHJpZXMgPSB7fSxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IHVud3JhcChjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWVyZ2VkLFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgICBlbnRyaWVzOiB7XG4gICAgICAgICAgLi4ubWVyZ2VkLmVudHJpZXMsXG4gICAgICAgICAgLi4uZW50cmllc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBuZXcgdGhpcyhtZXJnZWQpO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/VariableContext.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/feelUtility.js":
-/*!*******************************************************************************!*\
- !*** ./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/feelUtility.js ***!
- \*******************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getResultContext: () => (/* binding */ getResultContext),\n/* harmony export */ parseIoMappings: () => (/* binding */ parseIoMappings),\n/* harmony export */ toUnifiedFormat: () => (/* binding */ toUnifiedFormat)\n/* harmony export */ });\n/* harmony import */ var lezer_feel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lezer-feel */ \"./node_modules/lezer-feel/dist/index.js\");\n/* harmony import */ var _lezer_lr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lezer/lr */ \"./node_modules/@lezer/lr/dist/index.js\");\n/* harmony import */ var _VariableContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VariableContext */ \"./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/VariableContext.js\");\n/* harmony import */ var _base_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base/util/ExtensionElementsUtil */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/ExtensionElementsUtil.js\");\n/* harmony import */ var _base_util_scopeUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../base/util/scopeUtil */ \"./node_modules/@bpmn-io/variable-resolver/lib/base/util/scopeUtil.js\");\n\n\n\n\n\n\n\n\nfunction parseIoMappings(variables) {\n\n const variablesToResolve = [];\n\n // Step 1 - Parse all io mappings and populate all that don't have references\n // to other variables io-mappings\n variables.forEach(variable => {\n variable.origin.forEach(origin => {\n const expressionDetails = getExpressionDetails(variable, origin);\n\n if (!expressionDetails) {\n return;\n }\n\n const { expression, unresolved } = expressionDetails;\n\n variablesToResolve.push({ variable, expression, unresolved });\n });\n });\n\n // Step 2 - Order all Variables and resolve them\n return resolveReferences(variablesToResolve, variables);\n}\n\nfunction resolveReferences(variablesToResolve, allVariables) {\n const sortedVariables = [];\n\n // Step 2.1 - Try to order Variables that rely on each other\n variablesToResolve.forEach((details) => {\n const { variable, unresolved } = details;\n const insertBefore = sortedVariables.findIndex(({ unresolved: u }) => {\n return u.includes(variable.name);\n });\n\n // Insert directly before the first variable that depends on this one\n if (insertBefore > -1) {\n sortedVariables.splice(insertBefore, 0, details);\n return;\n }\n\n // Insert directly after the last variable that this one depends on\n // this ensures that later downstream variables are behind this one\n const insertAfter = sortedVariables.findLastIndex(({ variable: v }) => {\n return unresolved.includes(v.name);\n });\n\n if (insertAfter > -1) {\n sortedVariables.splice(insertAfter + 1, 0, details);\n return;\n }\n\n sortedVariables.push(details);\n });\n\n const variablesWithoutMappings = allVariables.filter(v =>\n !variablesToResolve.find(({ variable: unresolved }) => {\n v === unresolved;\n })\n );\n\n const rootContext = {\n name: 'OuterContext',\n entries: toOptimizedFormat(variablesWithoutMappings)\n };\n\n const newVariables = [];\n\n // Step 2.2 - parse in order, building up the context with resolved variable values\n // This will resolve all variables that don't have circular dependencies on each other\n sortedVariables.forEach(({ variable, expression }) => {\n const resultContext = getResultContext(expression, filterForScope(rootContext, variable));\n\n let computedResult = resultContext.computedValue();\n\n // Wrap primitive values in an EntriesContext\n if (!(computedResult instanceof _VariableContext__WEBPACK_IMPORTED_MODULE_1__.EntriesContext)) {\n computedResult = _VariableContext__WEBPACK_IMPORTED_MODULE_1__.EntriesContext.of(computedResult);\n }\n\n // Ensure we don't copy the scope from the mapped variable\n computedResult.scope = variable.scope;\n\n rootContext.entries[variable.name] = computedResult;\n\n newVariables.push({\n newVariable: toUnifiedFormat({\n [variable.name]: computedResult\n })[0],\n oldVariable: variable\n });\n });\n\n // Ensure meta-data (scope, origin) is kept from original variable\n const result = newVariables.map(({ newVariable, oldVariable }) => {\n if (oldVariable) {\n return {\n ...newVariable,\n ...oldVariable\n };\n }\n return newVariable;\n });\n\n return result;\n}\n\n\n// helpers //////////////////////\n\n/**\n * Parses the expression with the given variables and return the result context\n *\n * @param {String} expression\n * @param {Variables} variables\n * @returns {EntriesContext}\n */\nfunction getResultContext(expression, variables = {}) {\n const contextTracker = (0,lezer_feel__WEBPACK_IMPORTED_MODULE_4__.trackVariables)(variables, _VariableContext__WEBPACK_IMPORTED_MODULE_1__.EntriesContext);\n\n // This is a hack to get the latest variables from the context tracker\n // lezer does not automatically annotate the parse tree with the context\n let latestVariables = null;\n\n const customContextTracker = new _lezer_lr__WEBPACK_IMPORTED_MODULE_0__.ContextTracker({\n start: contextTracker.start,\n reduce(...args) {\n const result = contextTracker.reduce(...args);\n latestVariables = result;\n return result;\n }\n });\n\n const contextualParser = lezer_feel__WEBPACK_IMPORTED_MODULE_4__.parser.configure({\n contextTracker: customContextTracker\n });\n\n contextualParser.parse(expression);\n\n return latestVariables;\n}\n\n/**\n * Given a Variable and a specific origin, return the mapping expression and all\n * unresolved variables used in that expression. Returns undefined if no mapping\n * exists for the given origin.\n *\n * @param {ProcessVariable} variable\n * @param {djs.model.Base} origin\n * @returns {{ expression: String, unresolved: Array }}}\n */\nfunction getExpressionDetails(variable, origin) {\n const ioMapping = (0,_base_util_ExtensionElementsUtil__WEBPACK_IMPORTED_MODULE_2__.getExtensionElementsList)(origin, 'zeebe:IoMapping')[0];\n\n if (!ioMapping) {\n return;\n }\n\n let mappings;\n if (origin === variable.scope) {\n mappings = ioMapping.inputParameters;\n } else {\n mappings = ioMapping.outputParameters;\n }\n\n if (!mappings) {\n return;\n }\n\n const mapping = mappings.find(mapping => mapping.target === variable.name);\n\n if (!mapping || !mapping.source) {\n return;\n }\n\n const expression = mapping.source.substring(1);\n\n const result = getResultContext(expression);\n\n const unresolved = findUnresolvedVariables(result) ;\n\n return { expression, unresolved };\n}\n\n/**\n * Traverses the parseTree and returns all `VariableName` nodes with no value\n *\n * @param {Object} node\n * @returns {Array}\n */\nfunction findUnresolvedVariables(node) {\n const results = [];\n\n results.push(...(node.children.flatMap(findUnresolvedVariables)));\n\n if (node.name === 'VariableName' && !node.value) {\n results.push(node.raw);\n }\n\n return results;\n}\n\n\n/**\n * Transforms the entries of a variable from an array to an object.\n * This allows faster lookup times during parsing.\n *\n * [ { name, entries: [] } ]\n * to\n * {name: { name, entries: {} }}\n */\nfunction toOptimizedFormat(variables) {\n\n if (!variables) {\n return;\n }\n\n const result = {};\n\n variables.forEach(variable => {\n result[variable.name] = { ...variable };\n result[variable.name].entries = toOptimizedFormat(variable.entries);\n });\n\n return result;\n}\n\n/**\n * Transforms EntriesContext to the format required by the feel-editor\n */\nfunction toUnifiedFormat(variables) {\n if (!variables) {\n return;\n }\n\n const result = [];\n\n for (const key in variables) {\n let variable = variables[key];\n\n if (variable instanceof _VariableContext__WEBPACK_IMPORTED_MODULE_1__.EntriesContext) {\n variable = variable.value;\n }\n\n if (!variable) {\n result.push({\n name: key\n });\n continue;\n }\n\n result.push({\n ...annotate(variable),\n entries: toUnifiedFormat(variable.entries),\n name: key,\n scope: variable.scope\n });\n }\n\n return result;\n}\n\n\nfunction annotate(variable) {\n return {\n ...variable,\n type: getType(variable),\n info: getInfo(variable)\n };\n\n}\n\nfunction getType(variable) {\n\n if (!variable) {\n return '';\n }\n\n if (variable.type) {\n return variable.type;\n }\n\n if (variable.entries && Object.keys(variable.entries).length) {\n return 'Context';\n }\n\n if (variable.atomicValue) {\n return capitalize(typeof variable.atomicValue);\n }\n\n return '';\n}\n\nfunction getInfo(variable) {\n if (!variable) {\n return '';\n }\n\n if (variable.info) {\n return variable.info;\n }\n\n if (variable.atomicValue) {\n return '' + variable.atomicValue;\n }\n\n return '';\n}\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nfunction filterForScope(context, variable) {\n const scopedResults = {\n entries: {}\n };\n\n const validScopes = variable.origin.flatMap(bo => {\n return [ bo, ...(0,_base_util_scopeUtil__WEBPACK_IMPORTED_MODULE_3__.getParents)(bo) ];\n });\n\n for (const key in context.entries) {\n const entry = context.entries[key];\n\n if (validScopes.find(scope => scope.id === entry.scope.id)) {\n scopedResults.entries[key] = entry;\n }\n }\n\n return scopedResults;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJwbW4taW8vdmFyaWFibGUtcmVzb2x2ZXIvbGliL3plZWJlL3V0aWwvZmVlbFV0aWxpdHkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBb0Q7QUFHakM7O0FBRWdDO0FBQzhCO0FBQzFCOzs7QUFHaEQ7O0FBRVA7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyx5QkFBeUI7O0FBRXZDLGdDQUFnQyxrQ0FBa0M7QUFDbEUsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DLHNEQUFzRCxlQUFlO0FBQ3JFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0EsZ0NBQWdDLHNCQUFzQjtBQUN0RDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLHNCQUFzQjtBQUNuRDs7QUFFQTs7QUFFQTtBQUNBLG9DQUFvQyw0REFBYztBQUNsRCx1QkFBdUIsNERBQWM7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBLHFDQUFxQywwQkFBMEI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFdBQVc7QUFDdEIsYUFBYTtBQUNiO0FBQ08sb0RBQW9EO0FBQzNELHlCQUF5QiwwREFBYyxZQUFZLDREQUFjOztBQUVqRTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLHFEQUFjO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsMkJBQTJCLDhDQUFNO0FBQ2pDO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixXQUFXLGdCQUFnQjtBQUMzQixlQUFlO0FBQ2Y7QUFDQTtBQUNBLG9CQUFvQiwwRkFBd0I7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLG9CQUFvQjtBQUMzQjtBQUNBLElBQUksUUFBUTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLDREQUFjO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixnRUFBVTtBQUM5QixHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYnBtbi1pby92YXJpYWJsZS1yZXNvbHZlci9saWIvemVlYmUvdXRpbC9mZWVsVXRpbGl0eS5qcz9jOWRhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlciwgdHJhY2tWYXJpYWJsZXMgfSBmcm9tICdsZXplci1mZWVsJztcbmltcG9ydCB7XG4gIENvbnRleHRUcmFja2VyLFxufSBmcm9tICdAbGV6ZXIvbHInO1xuXG5pbXBvcnQgeyBFbnRyaWVzQ29udGV4dCB9IGZyb20gJy4vVmFyaWFibGVDb250ZXh0JztcbmltcG9ydCB7IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdCB9IGZyb20gJy4uLy4uL2Jhc2UvdXRpbC9FeHRlbnNpb25FbGVtZW50c1V0aWwnO1xuaW1wb3J0IHsgZ2V0UGFyZW50cyB9IGZyb20gJy4uLy4uL2Jhc2UvdXRpbC9zY29wZVV0aWwnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlvTWFwcGluZ3ModmFyaWFibGVzKSB7XG5cbiAgY29uc3QgdmFyaWFibGVzVG9SZXNvbHZlID0gW107XG5cbiAgLy8gU3RlcCAxIC0gUGFyc2UgYWxsIGlvIG1hcHBpbmdzIGFuZCBwb3B1bGF0ZSBhbGwgdGhhdCBkb24ndCBoYXZlIHJlZmVyZW5jZXNcbiAgLy8gdG8gb3RoZXIgdmFyaWFibGVzIGlvLW1hcHBpbmdzXG4gIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICB2YXJpYWJsZS5vcmlnaW4uZm9yRWFjaChvcmlnaW4gPT4ge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbkRldGFpbHMgPSBnZXRFeHByZXNzaW9uRGV0YWlscyh2YXJpYWJsZSwgb3JpZ2luKTtcblxuICAgICAgaWYgKCFleHByZXNzaW9uRGV0YWlscykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZXhwcmVzc2lvbiwgdW5yZXNvbHZlZCB9ID0gZXhwcmVzc2lvbkRldGFpbHM7XG5cbiAgICAgIHZhcmlhYmxlc1RvUmVzb2x2ZS5wdXNoKHsgdmFyaWFibGUsIGV4cHJlc3Npb24sIHVucmVzb2x2ZWQgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFN0ZXAgMiAtIE9yZGVyIGFsbCBWYXJpYWJsZXMgYW5kIHJlc29sdmUgdGhlbVxuICByZXR1cm4gcmVzb2x2ZVJlZmVyZW5jZXModmFyaWFibGVzVG9SZXNvbHZlLCB2YXJpYWJsZXMpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlcyh2YXJpYWJsZXNUb1Jlc29sdmUsIGFsbFZhcmlhYmxlcykge1xuICBjb25zdCBzb3J0ZWRWYXJpYWJsZXMgPSBbXTtcblxuICAvLyBTdGVwIDIuMSAtIFRyeSB0byBvcmRlciBWYXJpYWJsZXMgdGhhdCByZWx5IG9uIGVhY2ggb3RoZXJcbiAgdmFyaWFibGVzVG9SZXNvbHZlLmZvckVhY2goKGRldGFpbHMpID0+IHtcbiAgICBjb25zdCB7IHZhcmlhYmxlLCB1bnJlc29sdmVkIH0gPSBkZXRhaWxzO1xuICAgIGNvbnN0IGluc2VydEJlZm9yZSA9IHNvcnRlZFZhcmlhYmxlcy5maW5kSW5kZXgoKHsgdW5yZXNvbHZlZDogdSB9KSA9PiB7XG4gICAgICByZXR1cm4gdS5pbmNsdWRlcyh2YXJpYWJsZS5uYW1lKTtcbiAgICB9KTtcblxuICAgIC8vIEluc2VydCBkaXJlY3RseSBiZWZvcmUgdGhlIGZpcnN0IHZhcmlhYmxlIHRoYXQgZGVwZW5kcyBvbiB0aGlzIG9uZVxuICAgIGlmIChpbnNlcnRCZWZvcmUgPiAtMSkge1xuICAgICAgc29ydGVkVmFyaWFibGVzLnNwbGljZShpbnNlcnRCZWZvcmUsIDAsIGRldGFpbHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluc2VydCBkaXJlY3RseSBhZnRlciB0aGUgbGFzdCB2YXJpYWJsZSB0aGF0IHRoaXMgb25lIGRlcGVuZHMgb25cbiAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCBsYXRlciBkb3duc3RyZWFtIHZhcmlhYmxlcyBhcmUgYmVoaW5kIHRoaXMgb25lXG4gICAgY29uc3QgaW5zZXJ0QWZ0ZXIgPSBzb3J0ZWRWYXJpYWJsZXMuZmluZExhc3RJbmRleCgoeyB2YXJpYWJsZTogdiB9KSA9PiB7XG4gICAgICByZXR1cm4gdW5yZXNvbHZlZC5pbmNsdWRlcyh2Lm5hbWUpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluc2VydEFmdGVyID4gLTEpIHtcbiAgICAgIHNvcnRlZFZhcmlhYmxlcy5zcGxpY2UoaW5zZXJ0QWZ0ZXIgKyAxLCAwLCBkZXRhaWxzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzb3J0ZWRWYXJpYWJsZXMucHVzaChkZXRhaWxzKTtcbiAgfSk7XG5cbiAgY29uc3QgdmFyaWFibGVzV2l0aG91dE1hcHBpbmdzID0gYWxsVmFyaWFibGVzLmZpbHRlcih2ID0+XG4gICAgIXZhcmlhYmxlc1RvUmVzb2x2ZS5maW5kKCh7IHZhcmlhYmxlOiB1bnJlc29sdmVkIH0pID0+IHtcbiAgICAgIHYgPT09IHVucmVzb2x2ZWQ7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdCByb290Q29udGV4dCA9IHtcbiAgICBuYW1lOiAnT3V0ZXJDb250ZXh0JyxcbiAgICBlbnRyaWVzOiB0b09wdGltaXplZEZvcm1hdCh2YXJpYWJsZXNXaXRob3V0TWFwcGluZ3MpXG4gIH07XG5cbiAgY29uc3QgbmV3VmFyaWFibGVzID0gW107XG5cbiAgLy8gU3RlcCAyLjIgLSBwYXJzZSBpbiBvcmRlciwgYnVpbGRpbmcgdXAgdGhlIGNvbnRleHQgd2l0aCByZXNvbHZlZCB2YXJpYWJsZSB2YWx1ZXNcbiAgLy8gVGhpcyB3aWxsIHJlc29sdmUgYWxsIHZhcmlhYmxlcyB0aGF0IGRvbid0IGhhdmUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIG9uIGVhY2ggb3RoZXJcbiAgc29ydGVkVmFyaWFibGVzLmZvckVhY2goKHsgdmFyaWFibGUsIGV4cHJlc3Npb24gfSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdENvbnRleHQgPSBnZXRSZXN1bHRDb250ZXh0KGV4cHJlc3Npb24sIGZpbHRlckZvclNjb3BlKHJvb3RDb250ZXh0LCB2YXJpYWJsZSkpO1xuXG4gICAgbGV0IGNvbXB1dGVkUmVzdWx0ID0gcmVzdWx0Q29udGV4dC5jb21wdXRlZFZhbHVlKCk7XG5cbiAgICAvLyBXcmFwIHByaW1pdGl2ZSB2YWx1ZXMgaW4gYW4gRW50cmllc0NvbnRleHRcbiAgICBpZiAoIShjb21wdXRlZFJlc3VsdCBpbnN0YW5jZW9mIEVudHJpZXNDb250ZXh0KSkge1xuICAgICAgY29tcHV0ZWRSZXN1bHQgPSBFbnRyaWVzQ29udGV4dC5vZihjb21wdXRlZFJlc3VsdCk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHdlIGRvbid0IGNvcHkgdGhlIHNjb3BlIGZyb20gdGhlIG1hcHBlZCB2YXJpYWJsZVxuICAgIGNvbXB1dGVkUmVzdWx0LnNjb3BlID0gdmFyaWFibGUuc2NvcGU7XG5cbiAgICByb290Q29udGV4dC5lbnRyaWVzW3ZhcmlhYmxlLm5hbWVdID0gY29tcHV0ZWRSZXN1bHQ7XG5cbiAgICBuZXdWYXJpYWJsZXMucHVzaCh7XG4gICAgICBuZXdWYXJpYWJsZTogdG9VbmlmaWVkRm9ybWF0KHtcbiAgICAgICAgW3ZhcmlhYmxlLm5hbWVdOiBjb21wdXRlZFJlc3VsdFxuICAgICAgfSlbMF0sXG4gICAgICBvbGRWYXJpYWJsZTogdmFyaWFibGVcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gRW5zdXJlIG1ldGEtZGF0YSAoc2NvcGUsIG9yaWdpbikgaXMga2VwdCBmcm9tIG9yaWdpbmFsIHZhcmlhYmxlXG4gIGNvbnN0IHJlc3VsdCA9IG5ld1ZhcmlhYmxlcy5tYXAoKHsgbmV3VmFyaWFibGUsIG9sZFZhcmlhYmxlIH0pID0+IHtcbiAgICBpZiAob2xkVmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1ZhcmlhYmxlLFxuICAgICAgICAuLi5vbGRWYXJpYWJsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhcmlhYmxlO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFBhcnNlcyB0aGUgZXhwcmVzc2lvbiB3aXRoIHRoZSBnaXZlbiB2YXJpYWJsZXMgYW5kIHJldHVybiB0aGUgcmVzdWx0IGNvbnRleHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXhwcmVzc2lvblxuICogQHBhcmFtIHtWYXJpYWJsZXN9IHZhcmlhYmxlc1xuICogQHJldHVybnMge0VudHJpZXNDb250ZXh0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdWx0Q29udGV4dChleHByZXNzaW9uLCB2YXJpYWJsZXMgPSB7fSkge1xuICBjb25zdCBjb250ZXh0VHJhY2tlciA9IHRyYWNrVmFyaWFibGVzKHZhcmlhYmxlcywgRW50cmllc0NvbnRleHQpO1xuXG4gIC8vIFRoaXMgaXMgYSBoYWNrIHRvIGdldCB0aGUgbGF0ZXN0IHZhcmlhYmxlcyBmcm9tIHRoZSBjb250ZXh0IHRyYWNrZXJcbiAgLy8gbGV6ZXIgZG9lcyBub3QgYXV0b21hdGljYWxseSBhbm5vdGF0ZSB0aGUgcGFyc2UgdHJlZSB3aXRoIHRoZSBjb250ZXh0XG4gIGxldCBsYXRlc3RWYXJpYWJsZXMgPSBudWxsO1xuXG4gIGNvbnN0IGN1c3RvbUNvbnRleHRUcmFja2VyID0gbmV3IENvbnRleHRUcmFja2VyKHtcbiAgICBzdGFydDogY29udGV4dFRyYWNrZXIuc3RhcnQsXG4gICAgcmVkdWNlKC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHRUcmFja2VyLnJlZHVjZSguLi5hcmdzKTtcbiAgICAgIGxhdGVzdFZhcmlhYmxlcyA9IHJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjb250ZXh0dWFsUGFyc2VyID0gcGFyc2VyLmNvbmZpZ3VyZSh7XG4gICAgY29udGV4dFRyYWNrZXI6IGN1c3RvbUNvbnRleHRUcmFja2VyXG4gIH0pO1xuXG4gIGNvbnRleHR1YWxQYXJzZXIucGFyc2UoZXhwcmVzc2lvbik7XG5cbiAgcmV0dXJuIGxhdGVzdFZhcmlhYmxlcztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIFZhcmlhYmxlIGFuZCBhIHNwZWNpZmljIG9yaWdpbiwgcmV0dXJuIHRoZSBtYXBwaW5nIGV4cHJlc3Npb24gYW5kIGFsbFxuICogdW5yZXNvbHZlZCB2YXJpYWJsZXMgdXNlZCBpbiB0aGF0IGV4cHJlc3Npb24uIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vIG1hcHBpbmdcbiAqIGV4aXN0cyBmb3IgdGhlIGdpdmVuIG9yaWdpbi5cbiAqXG4gKiBAcGFyYW0ge1Byb2Nlc3NWYXJpYWJsZX0gdmFyaWFibGVcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IG9yaWdpblxuICogQHJldHVybnMge3sgZXhwcmVzc2lvbjogU3RyaW5nLCB1bnJlc29sdmVkOiBBcnJheTxTdHJpbmc+IH19fVxuICovXG5mdW5jdGlvbiBnZXRFeHByZXNzaW9uRGV0YWlscyh2YXJpYWJsZSwgb3JpZ2luKSB7XG4gIGNvbnN0IGlvTWFwcGluZyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzTGlzdChvcmlnaW4sICd6ZWViZTpJb01hcHBpbmcnKVswXTtcblxuICBpZiAoIWlvTWFwcGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBtYXBwaW5ncztcbiAgaWYgKG9yaWdpbiA9PT0gdmFyaWFibGUuc2NvcGUpIHtcbiAgICBtYXBwaW5ncyA9IGlvTWFwcGluZy5pbnB1dFBhcmFtZXRlcnM7XG4gIH0gZWxzZSB7XG4gICAgbWFwcGluZ3MgPSBpb01hcHBpbmcub3V0cHV0UGFyYW1ldGVycztcbiAgfVxuXG4gIGlmICghbWFwcGluZ3MpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXBwaW5nID0gbWFwcGluZ3MuZmluZChtYXBwaW5nID0+IG1hcHBpbmcudGFyZ2V0ID09PSB2YXJpYWJsZS5uYW1lKTtcblxuICBpZiAoIW1hcHBpbmcgfHwgIW1hcHBpbmcuc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IG1hcHBpbmcuc291cmNlLnN1YnN0cmluZygxKTtcblxuICBjb25zdCByZXN1bHQgPSBnZXRSZXN1bHRDb250ZXh0KGV4cHJlc3Npb24pO1xuXG4gIGNvbnN0IHVucmVzb2x2ZWQgPSBmaW5kVW5yZXNvbHZlZFZhcmlhYmxlcyhyZXN1bHQpIDtcblxuICByZXR1cm4geyBleHByZXNzaW9uLCB1bnJlc29sdmVkIH07XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHRoZSBwYXJzZVRyZWUgYW5kIHJldHVybnMgYWxsIGBWYXJpYWJsZU5hbWVgIG5vZGVzIHdpdGggbm8gdmFsdWVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbm9kZVxuICogQHJldHVybnMge0FycmF5PFN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGZpbmRVbnJlc29sdmVkVmFyaWFibGVzKG5vZGUpIHtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIHJlc3VsdHMucHVzaCguLi4obm9kZS5jaGlsZHJlbi5mbGF0TWFwKGZpbmRVbnJlc29sdmVkVmFyaWFibGVzKSkpO1xuXG4gIGlmIChub2RlLm5hbWUgPT09ICdWYXJpYWJsZU5hbWUnICYmICFub2RlLnZhbHVlKSB7XG4gICAgcmVzdWx0cy5wdXNoKG5vZGUucmF3KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZW50cmllcyBvZiBhIHZhcmlhYmxlIGZyb20gYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICogVGhpcyBhbGxvd3MgZmFzdGVyIGxvb2t1cCB0aW1lcyBkdXJpbmcgcGFyc2luZy5cbiAqXG4gKiBbIHsgbmFtZSwgZW50cmllczogW10gfSBdXG4gKiB0b1xuICoge25hbWU6IHsgbmFtZSwgZW50cmllczoge30gfX1cbiAqL1xuZnVuY3Rpb24gdG9PcHRpbWl6ZWRGb3JtYXQodmFyaWFibGVzKSB7XG5cbiAgaWYgKCF2YXJpYWJsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcblxuICB2YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgcmVzdWx0W3ZhcmlhYmxlLm5hbWVdID0geyAuLi52YXJpYWJsZSB9O1xuICAgIHJlc3VsdFt2YXJpYWJsZS5uYW1lXS5lbnRyaWVzID0gdG9PcHRpbWl6ZWRGb3JtYXQodmFyaWFibGUuZW50cmllcyk7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBFbnRyaWVzQ29udGV4dCB0byB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IHRoZSBmZWVsLWVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmlmaWVkRm9ybWF0KHZhcmlhYmxlcykge1xuICBpZiAoIXZhcmlhYmxlcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHZhcmlhYmxlcykge1xuICAgIGxldCB2YXJpYWJsZSA9IHZhcmlhYmxlc1trZXldO1xuXG4gICAgaWYgKHZhcmlhYmxlIGluc3RhbmNlb2YgRW50cmllc0NvbnRleHQpIHtcbiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBuYW1lOiBrZXlcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgLi4uYW5ub3RhdGUodmFyaWFibGUpLFxuICAgICAgZW50cmllczogdG9VbmlmaWVkRm9ybWF0KHZhcmlhYmxlLmVudHJpZXMpLFxuICAgICAgbmFtZToga2V5LFxuICAgICAgc2NvcGU6IHZhcmlhYmxlLnNjb3BlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmZ1bmN0aW9uIGFubm90YXRlKHZhcmlhYmxlKSB7XG4gIHJldHVybiB7XG4gICAgLi4udmFyaWFibGUsXG4gICAgdHlwZTogZ2V0VHlwZSh2YXJpYWJsZSksXG4gICAgaW5mbzogZ2V0SW5mbyh2YXJpYWJsZSlcbiAgfTtcblxufVxuXG5mdW5jdGlvbiBnZXRUeXBlKHZhcmlhYmxlKSB7XG5cbiAgaWYgKCF2YXJpYWJsZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh2YXJpYWJsZS50eXBlKSB7XG4gICAgcmV0dXJuIHZhcmlhYmxlLnR5cGU7XG4gIH1cblxuICBpZiAodmFyaWFibGUuZW50cmllcyAmJiBPYmplY3Qua2V5cyh2YXJpYWJsZS5lbnRyaWVzKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ0NvbnRleHQnO1xuICB9XG5cbiAgaWYgKHZhcmlhYmxlLmF0b21pY1ZhbHVlKSB7XG4gICAgcmV0dXJuIGNhcGl0YWxpemUodHlwZW9mIHZhcmlhYmxlLmF0b21pY1ZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0SW5mbyh2YXJpYWJsZSkge1xuICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHZhcmlhYmxlLmluZm8pIHtcbiAgICByZXR1cm4gdmFyaWFibGUuaW5mbztcbiAgfVxuXG4gIGlmICh2YXJpYWJsZS5hdG9taWNWYWx1ZSkge1xuICAgIHJldHVybiAnJyArIHZhcmlhYmxlLmF0b21pY1ZhbHVlO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJGb3JTY29wZShjb250ZXh0LCB2YXJpYWJsZSkge1xuICBjb25zdCBzY29wZWRSZXN1bHRzID0ge1xuICAgIGVudHJpZXM6IHt9XG4gIH07XG5cbiAgY29uc3QgdmFsaWRTY29wZXMgPSB2YXJpYWJsZS5vcmlnaW4uZmxhdE1hcChibyA9PiB7XG4gICAgcmV0dXJuIFsgYm8sIC4uLmdldFBhcmVudHMoYm8pIF07XG4gIH0pO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbnRleHQuZW50cmllcykge1xuICAgIGNvbnN0IGVudHJ5ID0gY29udGV4dC5lbnRyaWVzW2tleV07XG5cbiAgICBpZiAodmFsaWRTY29wZXMuZmluZChzY29wZSA9PiBzY29wZS5pZCA9PT0gZW50cnkuc2NvcGUuaWQpKSB7XG4gICAgICBzY29wZWRSZXN1bHRzLmVudHJpZXNba2V5XSA9IGVudHJ5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzY29wZWRSZXN1bHRzO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@bpmn-io/variable-resolver/lib/zeebe/util/feelUtility.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/createPopper.js":
-/*!*********************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/createPopper.js ***!
- \*********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ popperGenerator: () => (/* binding */ popperGenerator)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ \"./node_modules/@popperjs/core/lib/utils/orderModifiers.js\");\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ \"./node_modules/@popperjs/core/lib/utils/debounce.js\");\n/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ \"./node_modules/@popperjs/core/lib/utils/mergeByName.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(reference.contextElement) : [],\n popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(popper), state.options.strategy === 'fixed'),\n popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBK0Q7QUFDTjtBQUNRO0FBQ0o7QUFDTjtBQUNaO0FBQ007QUFDTTtBQUNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0UsYUFBYTtBQUNuRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQSxxQkFBcUIsbUVBQVMsY0FBYywyRUFBaUIseUNBQXlDLDJFQUFpQjtBQUN2SCxrQkFBa0IsMkVBQWlCO0FBQ25DLFdBQVc7QUFDWDs7QUFFQSwrQkFBK0Isb0VBQWMsQ0FBQyxpRUFBVyx5REFBeUQ7O0FBRWxIO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QztBQUM3Qzs7QUFFQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQSxxQkFBcUIsMEVBQWdCLFlBQVkseUVBQWU7QUFDaEUsa0JBQWtCLHVFQUFhO0FBQy9CLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0EsNkNBQTZDLEtBQUs7O0FBRWxEO0FBQ0Esc0VBQXNFO0FBQ3RFLFNBQVM7O0FBRVQsNEJBQTRCLHVDQUF1QztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsY0FBYyw4REFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzPzUwOTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/createPopper.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js":
-/*!***************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***!
- \***************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ contains)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQztBQUNoQztBQUNmLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLElBQUk7QUFDSix1QkFBdUIsNERBQVk7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQSxRQUFRO0FBQ1IsTUFBTTs7O0FBR047QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzP2EyMTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/contains.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js":
-/*!****************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***!
- \****************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getBoundingClientRect)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\");\n\n\n\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBMkQ7QUFDbEI7QUFDRjtBQUNjO0FBQ3RDO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLDZEQUFhO0FBQ25DLHVDQUF1QyxxREFBSztBQUM1Qyx3Q0FBd0MscURBQUs7QUFDN0M7O0FBRUEsYUFBYSx5REFBUyxZQUFZLHlEQUFTO0FBQzNDOztBQUVBLDBCQUEwQixnRUFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzP2ZjYzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getClippingRect)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\");\n/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\");\n/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(element).position) >= 0;\n var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(element) : element;\n\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);\n accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);\n accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);\n accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXVDO0FBQ1k7QUFDQTtBQUNJO0FBQ0o7QUFDTTtBQUNKO0FBQ007QUFDSTtBQUNoQjtBQUNWO0FBQ007QUFDaUI7QUFDaEI7O0FBRTVDO0FBQ0EsYUFBYSxxRUFBcUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsK0NBQVEsR0FBRyxzRUFBZ0IsQ0FBQywrREFBZSx1QkFBdUIseURBQVMsMEVBQTBFLHNFQUFnQixDQUFDLCtEQUFlLENBQUMsa0VBQWtCO0FBQ3BPLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBLHdCQUF3QixpRUFBaUIsQ0FBQyw2REFBYTtBQUN2RCx3REFBd0QsZ0VBQWdCO0FBQ3hFLDRDQUE0Qyw2REFBYSxZQUFZLGdFQUFlOztBQUVwRixPQUFPLHlEQUFTO0FBQ2hCO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxXQUFXLHlEQUFTLG9CQUFvQix5REFBUSxvQ0FBb0MsNERBQVc7QUFDL0YsR0FBRztBQUNILEVBQUU7QUFDRjs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG9EQUFHO0FBQ3JCLG9CQUFvQixvREFBRztBQUN2QixxQkFBcUIsb0RBQUc7QUFDeEIsbUJBQW1CLG9EQUFHO0FBQ3RCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcz82ZGJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js":
-/*!***********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***!
- \***********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getCompositeRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;\n var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);\n var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);\n var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(offsetParent);\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(documentElement)) {\n scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(offsetParent);\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {\n offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUErRDtBQUNoQjtBQUNKO0FBQ0s7QUFDVztBQUNGO0FBQ1I7QUFDUjs7QUFFekM7QUFDQTtBQUNBLGVBQWUscURBQUs7QUFDcEIsZUFBZSxxREFBSztBQUNwQjtBQUNBLEVBQUU7QUFDRjs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLDZEQUFhO0FBQzdDLDZCQUE2Qiw2REFBYTtBQUMxQyx3QkFBd0Isa0VBQWtCO0FBQzFDLGFBQWEscUVBQXFCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLDJEQUFXO0FBQ25CLElBQUksOERBQWM7QUFDbEIsZUFBZSw2REFBYTtBQUM1Qjs7QUFFQSxRQUFRLDZEQUFhO0FBQ3JCLGdCQUFnQixxRUFBcUI7QUFDckM7QUFDQTtBQUNBLE1BQU07QUFDTixrQkFBa0IsbUVBQW1CO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzPzZlM2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js":
-/*!***********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***!
- \***********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getComputedStyle)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getComputedStyle(element) {\n return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element).getComputedStyle(element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDO0FBQ3hCO0FBQ2YsU0FBUyx5REFBUztBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanM/MDlmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js":
-/*!*************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***!
- \*************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getDocumentElement)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNEM7QUFDN0I7QUFDZjtBQUNBLFdBQVcseURBQVM7QUFDcEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcz8zYThjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getDocumentRect)\n/* harmony export */ });\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n var y = -winScroll.scrollTop;\n\n if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(body || html).direction === 'rtl') {\n x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlEO0FBQ0o7QUFDTTtBQUNSO0FBQ1osQ0FBQztBQUN4Qzs7QUFFZTtBQUNmOztBQUVBLGFBQWEsa0VBQWtCO0FBQy9CLGtCQUFrQiwrREFBZTtBQUNqQztBQUNBLGNBQWMsbURBQUc7QUFDakIsZUFBZSxtREFBRztBQUNsQixrQ0FBa0MsbUVBQW1CO0FBQ3JEOztBQUVBLE1BQU0sZ0VBQWdCO0FBQ3RCLFNBQVMsbURBQUc7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcz9iZTA3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js":
-/*!***************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***!
- \***************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getHTMLElementScroll)\n/* harmony export */ });\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanM/NTUxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js":
-/*!********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***!
- \********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getLayoutRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStELENBQUM7QUFDaEU7O0FBRWU7QUFDZixtQkFBbUIscUVBQXFCLFdBQVc7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qcz8wYzRhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js":
-/*!******************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getNodeName)\n/* harmony export */ });\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanM/NzdjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js":
-/*!********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***!
- \********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getNodeScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\");\n\n\n\n\nfunction getNodeScroll(node) {\n if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {\n return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node);\n } else {\n return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW1EO0FBQ1o7QUFDUztBQUNhO0FBQzlDO0FBQ2YsZUFBZSx5REFBUyxXQUFXLDZEQUFhO0FBQ2hELFdBQVcsK0RBQWU7QUFDMUIsSUFBSTtBQUNKLFdBQVcsb0VBQW9CO0FBQy9CO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzPzI4MjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getOffsetParent)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\");\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837\n (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n\n if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(currentNode)) < 0) {\n var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBdUM7QUFDSTtBQUNVO0FBQ1M7QUFDYjtBQUNGO0FBQ0M7O0FBRWhEO0FBQ0EsT0FBTyw2REFBYTtBQUNwQixFQUFFLGdFQUFnQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBLGtDQUFrQywrREFBVztBQUM3Qyw2QkFBNkIsK0RBQVc7O0FBRXhDLGNBQWMsNkRBQWE7QUFDM0I7QUFDQSxxQkFBcUIsZ0VBQWdCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsNkRBQWE7O0FBRWpDLE1BQU0sNERBQVk7QUFDbEI7QUFDQTs7QUFFQSxTQUFTLDZEQUFhLDBDQUEwQywyREFBVztBQUMzRSxjQUFjLGdFQUFnQixlQUFlO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7OztBQUdlO0FBQ2YsZUFBZSx5REFBUztBQUN4Qjs7QUFFQSx5QkFBeUIsOERBQWMsa0JBQWtCLGdFQUFnQjtBQUN6RTtBQUNBOztBQUVBLHVCQUF1QiwyREFBVyw2QkFBNkIsMkRBQVcsNkJBQTZCLGdFQUFnQjtBQUN2SDtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanM/M2MwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js":
-/*!********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***!
- \********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getParentNode)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\nfunction getParentNode(element) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element) // fallback\n\n );\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBMkM7QUFDYztBQUNWO0FBQ2hDO0FBQ2YsTUFBTSwyREFBVztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDREQUFZO0FBQ2hCO0FBQ0EsSUFBSSxrRUFBa0I7O0FBRXRCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzPzVjYmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node)) {\n return node;\n }\n\n return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0M7QUFDRTtBQUNOO0FBQ0s7QUFDakM7QUFDZiw0Q0FBNEMsMkRBQVc7QUFDdkQ7QUFDQTtBQUNBOztBQUVBLE1BQU0sNkRBQWEsVUFBVSw4REFBYztBQUMzQztBQUNBOztBQUVBLHlCQUF5Qiw2REFBYTtBQUN0QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcz8xNzI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getViewportRect)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\");\n\n\n\n\nfunction getViewportRect(element, strategy) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element),\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBdUM7QUFDa0I7QUFDRTtBQUNOO0FBQ3RDO0FBQ2YsWUFBWSx5REFBUztBQUNyQixhQUFhLGtFQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnRUFBZ0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtRUFBbUI7QUFDOUI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzPzljYzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js":
-/*!****************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***!
- \****************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindow)\n/* harmony export */ });\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanM/NjE5NiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindowScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getWindowScroll(node) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBdUM7QUFDeEI7QUFDZixZQUFZLHlEQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzPzkyNTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js":
-/*!**************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***!
- \**************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindowScrollBarX)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n\n\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element).scrollLeft;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0Q7QUFDTjtBQUNOO0FBQ3BDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHFFQUFxQixDQUFDLGtFQUFrQixrQkFBa0IsK0RBQWU7QUFDbEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzP2UzZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js":
-/*!*****************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***!
- \*****************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isElement: () => (/* binding */ isElement),\n/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement),\n/* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\n\nfunction isElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBdUM7O0FBRXZDO0FBQ0EsbUJBQW1CLHlEQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIseURBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix5REFBUztBQUM1QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcz9hOTRlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js":
-/*!***********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***!
- \***********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isLayoutViewport)\n/* harmony export */ });\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\");\n\nfunction isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])());\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdEO0FBQ2pDO0FBQ2YsZ0RBQWdELCtEQUFXO0FBQzNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcz8xMGExIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js":
-/*!*********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***!
- \*********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxRDtBQUN0QztBQUNmO0FBQ0EsMEJBQTBCLGdFQUFnQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzPzQ2MDIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js":
-/*!*********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***!
- \*********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isTableElement)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) >= 0;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEyQztBQUM1QjtBQUNmLHVDQUF1QywyREFBVztBQUNsRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzPzU2NDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js":
-/*!************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***!
- \************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ listScrollParents)\n/* harmony export */ });\n/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(target)));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFtRDtBQUNKO0FBQ1I7QUFDVTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLCtEQUFlO0FBQ3BDO0FBQ0EsWUFBWSx5REFBUztBQUNyQiwrREFBK0QsOERBQWM7QUFDN0U7QUFDQTtBQUNBLHVDQUF1Qyw2REFBYTtBQUNwRCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzP2Q2NmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/enums.js":
-/*!**************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/enums.js ***!
- \**************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ afterMain: () => (/* binding */ afterMain),\n/* harmony export */ afterRead: () => (/* binding */ afterRead),\n/* harmony export */ afterWrite: () => (/* binding */ afterWrite),\n/* harmony export */ auto: () => (/* binding */ auto),\n/* harmony export */ basePlacements: () => (/* binding */ basePlacements),\n/* harmony export */ beforeMain: () => (/* binding */ beforeMain),\n/* harmony export */ beforeRead: () => (/* binding */ beforeRead),\n/* harmony export */ beforeWrite: () => (/* binding */ beforeWrite),\n/* harmony export */ bottom: () => (/* binding */ bottom),\n/* harmony export */ clippingParents: () => (/* binding */ clippingParents),\n/* harmony export */ end: () => (/* binding */ end),\n/* harmony export */ left: () => (/* binding */ left),\n/* harmony export */ main: () => (/* binding */ main),\n/* harmony export */ modifierPhases: () => (/* binding */ modifierPhases),\n/* harmony export */ placements: () => (/* binding */ placements),\n/* harmony export */ popper: () => (/* binding */ popper),\n/* harmony export */ read: () => (/* binding */ read),\n/* harmony export */ reference: () => (/* binding */ reference),\n/* harmony export */ right: () => (/* binding */ right),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ top: () => (/* binding */ top),\n/* harmony export */ variationPlacements: () => (/* binding */ variationPlacements),\n/* harmony export */ viewport: () => (/* binding */ viewport),\n/* harmony export */ write: () => (/* binding */ write)\n/* harmony export */ });\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ1A7QUFDQSxDQUFDO0FBQ007QUFDUDtBQUNBLENBQUMsT0FBTzs7QUFFRDtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanM/MzU5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/enums.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/index.js":
-/*!**************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/index.js ***!
- \**************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ afterMain: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterMain),\n/* harmony export */ afterRead: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterRead),\n/* harmony export */ afterWrite: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.afterWrite),\n/* harmony export */ applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.applyStyles),\n/* harmony export */ arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.arrow),\n/* harmony export */ auto: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.auto),\n/* harmony export */ basePlacements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements),\n/* harmony export */ beforeMain: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeMain),\n/* harmony export */ beforeRead: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeRead),\n/* harmony export */ beforeWrite: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.beforeWrite),\n/* harmony export */ bottom: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom),\n/* harmony export */ clippingParents: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents),\n/* harmony export */ computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.computeStyles),\n/* harmony export */ createPopper: () => (/* reexport safe */ _popper_js__WEBPACK_IMPORTED_MODULE_4__.createPopper),\n/* harmony export */ createPopperBase: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.createPopper),\n/* harmony export */ createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__.createPopper),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ end: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.end),\n/* harmony export */ eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.eventListeners),\n/* harmony export */ flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.flip),\n/* harmony export */ hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.hide),\n/* harmony export */ left: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.left),\n/* harmony export */ main: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.main),\n/* harmony export */ modifierPhases: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases),\n/* harmony export */ offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.offset),\n/* harmony export */ placements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements),\n/* harmony export */ popper: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper),\n/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_2__.popperGenerator),\n/* harmony export */ popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.popperOffsets),\n/* harmony export */ preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__.preventOverflow),\n/* harmony export */ read: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.read),\n/* harmony export */ reference: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference),\n/* harmony export */ right: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.right),\n/* harmony export */ start: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.start),\n/* harmony export */ top: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.top),\n/* harmony export */ variationPlacements: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements),\n/* harmony export */ viewport: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport),\n/* harmony export */ write: () => (/* reexport safe */ _enums_js__WEBPACK_IMPORTED_MODULE_0__.write)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ \"./node_modules/@popperjs/core/lib/modifiers/index.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper.js */ \"./node_modules/@popperjs/core/lib/popper.js\");\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./popper-lite.js */ \"./node_modules/@popperjs/core/lib/popper-lite.js\");\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTJCO0FBQ1UsQ0FBQzs7QUFFZ0UsQ0FBQzs7QUFFNUQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvaW5kZXguanM/ZGIwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lbnVtcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdywgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckJhc2UgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js":
-/*!******************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7QUFDSyxDQUFDO0FBQzVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDLFNBQVMsdUVBQWEsY0FBYyxxRUFBVztBQUMvQztBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUhBQXVIOztBQUV2SDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUksR0FBRzs7QUFFZCxXQUFXLHVFQUFhLGNBQWMscUVBQVc7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsRUFBRTs7O0FBR0YsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanM/ZjJlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js":
-/*!************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***!
- \************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ \"./node_modules/@popperjs/core/lib/utils/within.js\");\n/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state.placement);\n var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(basePlacement);\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(arrowElement);\n var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left;\n var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQTREO0FBQ0Y7QUFDVjtBQUNjO0FBQ2M7QUFDaEM7QUFDb0I7QUFDTjtBQUNhLENBQUM7O0FBRXhFO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0EsR0FBRztBQUNILFNBQVMsd0VBQWtCLHlDQUF5QyxxRUFBZSxVQUFVLHFEQUFjO0FBQzNHOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzRUFBZ0I7QUFDdEMsYUFBYSw4RUFBd0I7QUFDckMsb0JBQW9CLDJDQUFJLEVBQUUsNENBQUs7QUFDL0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLHVFQUFhO0FBQy9CLCtCQUErQiwwQ0FBRyxHQUFHLDJDQUFJO0FBQ3pDLCtCQUErQiw2Q0FBTSxHQUFHLDRDQUFLO0FBQzdDO0FBQ0E7QUFDQSwwQkFBMEIseUVBQWU7QUFDekM7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3REFBTSxvQkFBb0I7O0FBRXpDO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxrRUFBUTtBQUNmO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRixpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzPzdlZDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/arrow.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js":
-/*!********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***!
- \********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ mapToStyles: () => (/* binding */ mapToStyles)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,\n y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;\n var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper)) {\n offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(popper);\n\n if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\n sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\n sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.placement),\n variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBNEQ7QUFDRTtBQUNaO0FBQ2tCO0FBQ0o7QUFDSjtBQUNSO0FBQ1gsQ0FBQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLHFEQUFLO0FBQ1osT0FBTyxxREFBSztBQUNaO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDJDQUFJO0FBQ2xCLGNBQWMsMENBQUc7QUFDakI7O0FBRUE7QUFDQSx1QkFBdUIseUVBQWU7QUFDdEM7QUFDQTs7QUFFQSx5QkFBeUIsbUVBQVM7QUFDbEMscUJBQXFCLDRFQUFrQjs7QUFFdkMsVUFBVSwwRUFBZ0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUEsc0JBQXNCLDBDQUFHLG1CQUFtQiwyQ0FBSSxrQkFBa0IsNENBQUssbUJBQW1CLDBDQUFHO0FBQzdGLGNBQWMsNkNBQU07QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsMkNBQUksbUJBQW1CLDBDQUFHLGtCQUFrQiw2Q0FBTSxtQkFBbUIsMENBQUc7QUFDOUYsY0FBYyw0Q0FBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFLG1FQUFTO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkIsb0NBQW9DO0FBQy9EOztBQUVBLHlCQUF5QixxQ0FBcUM7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNFQUFnQjtBQUMvQixlQUFlLGtFQUFZO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsbURBQW1EO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EseUNBQXlDLGtEQUFrRDtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7O0FBR0YsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanM/M2Y5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js":
-/*!*********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***!
- \*********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRCxDQUFDOztBQUVuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanM/OTFjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js":
-/*!***********************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***!
- \***********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) {\n return [];\n }\n\n var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(placement);\n return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n\n var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start;\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(mainVariationSide);\n }\n\n var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQW9FO0FBQ1I7QUFDMEI7QUFDOUI7QUFDWTtBQUNBO0FBQ2hCLENBQUM7O0FBRXJEO0FBQ0EsTUFBTSxzRUFBZ0IsZ0JBQWdCLDJDQUFJO0FBQzFDO0FBQ0E7O0FBRUEsMEJBQTBCLDBFQUFvQjtBQUM5QyxVQUFVLG1GQUE2QixnQ0FBZ0MsbUZBQTZCO0FBQ3BHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzRUFBZ0I7QUFDdEM7QUFDQSxpR0FBaUcsMEVBQW9CO0FBQ3JIO0FBQ0Esc0JBQXNCLHNFQUFnQixnQkFBZ0IsMkNBQUksR0FBRywwRUFBb0I7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUEseUJBQXlCLHNFQUFnQjs7QUFFekMsMkJBQTJCLGtFQUFZLGdCQUFnQiw0Q0FBSztBQUM1RCxzQkFBc0IsMENBQUcsRUFBRSw2Q0FBTTtBQUNqQztBQUNBLG1CQUFtQixvRUFBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDREQUE0RCw0Q0FBSyxHQUFHLDJDQUFJLHNCQUFzQiw2Q0FBTSxHQUFHLDBDQUFHOztBQUUxRztBQUNBLDBCQUEwQiwwRUFBb0I7QUFDOUM7O0FBRUEsMkJBQTJCLDBFQUFvQjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsUUFBUTtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzPzVjY2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/flip.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js":
-/*!***********************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***!
- \***********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n\n\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1RDtBQUNDOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsMENBQUcsRUFBRSw0Q0FBSyxFQUFFLDZDQUFNLEVBQUUsMkNBQUk7QUFDbEM7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG9FQUFjO0FBQ3hDO0FBQ0EsR0FBRztBQUNILDBCQUEwQixvRUFBYztBQUN4QztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzPzM2ZjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/hide.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js":
-/*!************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***!
- \************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyStyles: () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ arrow: () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ computeStyles: () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ eventListeners: () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ flip: () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ hide: () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ offset: () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ popperOffsets: () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ preventOverflow: () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\");\n/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\");\n/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\");\n/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\");\n/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\");\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEQ7QUFDWjtBQUNnQjtBQUNFO0FBQ3BCO0FBQ0E7QUFDSTtBQUNjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaW5kZXguanM/NGY2OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IGFzIGFwcGx5U3R5bGVzIH0gZnJvbSBcIi4vYXBwbHlTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyb3cgfSBmcm9tIFwiLi9hcnJvdy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wdXRlU3R5bGVzIH0gZnJvbSBcIi4vY29tcHV0ZVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldmVudExpc3RlbmVycyB9IGZyb20gXCIuL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsaXAgfSBmcm9tIFwiLi9mbGlwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhpZGUgfSBmcm9tIFwiLi9oaWRlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9mZnNldCB9IGZyb20gXCIuL29mZnNldC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3BwZXJPZmZzZXRzIH0gZnJvbSBcIi4vcG9wcGVyT2Zmc2V0cy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tIFwiLi9wcmV2ZW50T3ZlcmZsb3cuanNcIjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js":
-/*!*************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***!
- \*************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ distanceAndSkiddingToXY: () => (/* binding */ distanceAndSkiddingToXY)\n/* harmony export */ });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0RDtBQUNELENBQUM7O0FBRXJEO0FBQ1Asc0JBQXNCLHNFQUFnQjtBQUN0Qyx3QkFBd0IsMkNBQUksRUFBRSwwQ0FBRzs7QUFFakMsbUVBQW1FO0FBQ25FO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsMkNBQUksRUFBRSw0Q0FBSztBQUNyQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaURBQVU7QUFDdkI7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanM/ODgyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/offset.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js":
-/*!********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***!
- \********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXdEOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixvRUFBYztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOzs7QUFHRixpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qcz9mZGE2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ \"./node_modules/@popperjs/core/lib/utils/getAltAxis.js\");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ \"./node_modules/@popperjs/core/lib/utils/within.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state.placement);\n var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(basePlacement);\n var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;\n var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;\n\n var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQThEO0FBQ0Y7QUFDZ0I7QUFDNUI7QUFDWTtBQUNGO0FBQ0k7QUFDTjtBQUNKO0FBQ1k7QUFDRTs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0VBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsc0JBQXNCLHNFQUFnQjtBQUN0QyxrQkFBa0Isa0VBQVk7QUFDOUI7QUFDQSxpQkFBaUIsOEVBQXdCO0FBQ3pDLGdCQUFnQixnRUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSw0RkFBNEY7QUFDNUY7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsMENBQUcsR0FBRywyQ0FBSTtBQUNoRCxxQ0FBcUMsNkNBQU0sR0FBRyw0Q0FBSztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDRDQUFLO0FBQ3BDLCtCQUErQiw0Q0FBSywyQ0FBMkM7QUFDL0U7O0FBRUE7QUFDQSw2Q0FBNkMsdUVBQWE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EseUhBQXlILHdFQUFrQjtBQUMzSTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0RBQU07QUFDekI7QUFDQTtBQUNBLG9EQUFvRCx5RUFBZTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix3REFBTSxVQUFVLG9EQUFPLHlDQUF5QyxvREFBTztBQUNqRztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsMENBQUcsR0FBRywyQ0FBSTs7QUFFakQsc0NBQXNDLDZDQUFNLEdBQUcsNENBQUs7O0FBRXBEOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHdCQUF3QiwwQ0FBRyxFQUFFLDJDQUFJOztBQUVqQzs7QUFFQTs7QUFFQTs7QUFFQSxvREFBb0QsZ0VBQWMsb0NBQW9DLHdEQUFNOztBQUU1RztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRixpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzP2ZlMTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/popper-lite.js":
-/*!********************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***!
- \********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)\n/* harmony export */ });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]];\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci1saXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBb0U7QUFDVDtBQUNGO0FBQ0E7QUFDSjtBQUNyRCx3QkFBd0Isb0VBQWMsRUFBRSxtRUFBYSxFQUFFLG1FQUFhLEVBQUUsaUVBQVc7QUFDakYsZ0NBQWdDLGlFQUFlO0FBQy9DO0FBQ0EsQ0FBQyxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXItbGl0ZS5qcz9mODM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/popper-lite.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/popper.js":
-/*!***************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/popper.js ***!
- \***************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles),\n/* harmony export */ arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow),\n/* harmony export */ computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles),\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper),\n/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners),\n/* harmony export */ flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip),\n/* harmony export */ hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide),\n/* harmony export */ offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset),\n/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator),\n/* harmony export */ popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets),\n/* harmony export */ preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow)\n/* harmony export */ });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\");\n/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\");\n/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\");\n/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\");\n/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\");\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ \"./node_modules/@popperjs/core/lib/popper-lite.js\");\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ \"./node_modules/@popperjs/core/lib/modifiers/index.js\");\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]];\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0U7QUFDVDtBQUNGO0FBQ0E7QUFDSjtBQUNWO0FBQ0o7QUFDc0I7QUFDcEI7QUFDRjtBQUN2Qyx3QkFBd0Isb0VBQWMsRUFBRSxtRUFBYSxFQUFFLG1FQUFhLEVBQUUsaUVBQVcsRUFBRSw0REFBTSxFQUFFLDBEQUFJLEVBQUUscUVBQWUsRUFBRSwyREFBSyxFQUFFLDBEQUFJO0FBQzdILGdDQUFnQyxpRUFBZTtBQUMvQztBQUNBLENBQUMsR0FBRzs7QUFFdUUsQ0FBQzs7QUFFUixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanM/YWY1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/popper.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js":
-/*!***********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***!
- \***********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ computeAutoPlacement)\n/* harmony export */ });\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n\n\n\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP;\n var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement);\n var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) {\n return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) === variation;\n }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTZDO0FBQ2tEO0FBQzlDO0FBQ0k7QUFDdEM7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsaURBQWE7QUFDOUUsa0JBQWtCLDREQUFZO0FBQzlCLGdEQUFnRCwwREFBbUIsR0FBRywwREFBbUI7QUFDekYsV0FBVyw0REFBWTtBQUN2QixHQUFHLElBQUkscURBQWM7QUFDckI7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0EscUJBQXFCLDhEQUFjO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxFQUFFLGdFQUFnQjtBQUN2QjtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzP2U5MjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js":
-/*!*****************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***!
- \*****************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ computeOffsets)\n/* harmony export */ });\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) : null;\n var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXFEO0FBQ1I7QUFDd0I7QUFDRjtBQUNwRDtBQUNmO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxnRUFBZ0I7QUFDbEQsOEJBQThCLDREQUFZO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsMENBQUc7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsNkNBQU07QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsNENBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsMkNBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsd0VBQXdCOztBQUV6RDtBQUNBOztBQUVBO0FBQ0EsV0FBVyw0Q0FBSztBQUNoQjtBQUNBOztBQUVBLFdBQVcsMENBQUc7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcz9lNTYyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js":
-/*!***********************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***!
- \***********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ debounce)\n/* harmony export */ });\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzPzI2MjciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/debounce.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js":
-/*!*****************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***!
- \*****************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ detectOverflow)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));\n var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.elements.reference);\n var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBOEQ7QUFDTTtBQUNNO0FBQ3pCO0FBQ0k7QUFDMEQ7QUFDeEQ7QUFDRTtBQUNOLENBQUM7O0FBRXJDO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxzREFBZTtBQUMvRDtBQUNBLHdEQUF3RCwrQ0FBUTtBQUNoRTtBQUNBLDBEQUEwRCw2Q0FBTTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixrRUFBa0IseUNBQXlDLCtEQUFlLFVBQVUscURBQWM7QUFDeEgsc0NBQXNDLDZDQUFNLEdBQUcsZ0RBQVMsR0FBRyw2Q0FBTTtBQUNqRTtBQUNBO0FBQ0EsMkJBQTJCLHlFQUFlLENBQUMsbUVBQVMsZ0RBQWdELDRFQUFrQjtBQUN0SCw0QkFBNEIsK0VBQXFCO0FBQ2pELHNCQUFzQiw4REFBYztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx5QkFBeUIsZ0VBQWdCLGlCQUFpQjtBQUMxRCw2Q0FBNkMsNkNBQU0sMkNBQTJDO0FBQzlGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0MseUJBQXlCLDZDQUFNO0FBQy9CO0FBQ0E7QUFDQSxzQkFBc0IsNENBQUssRUFBRSw2Q0FBTTtBQUNuQyxrQkFBa0IsMENBQUcsRUFBRSw2Q0FBTTtBQUM3QjtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcz8xNjE4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js":
-/*!******************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ expandToHashMap)\n/* harmony export */ });\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzPzlmODAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js":
-/*!*************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***!
- \*************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getAltAxis)\n/* harmony export */ });\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcz8zMmIyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js":
-/*!*******************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***!
- \*******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getBasePlacement)\n/* harmony export */ });\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFtQztBQUNwQjtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanM/ZGU5MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js":
-/*!*********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***!
- \*********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getFreshSideObject)\n/* harmony export */ });\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzPzdlNjkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js":
-/*!***************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***!
- \***************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getMainAxisFromPlacement)\n/* harmony export */ });\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanM/MWUzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js":
-/*!***********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***!
- \***********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getOppositePlacement)\n/* harmony export */ });\nvar hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzP2U1ODQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js":
-/*!********************************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***!
- \********************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getOppositeVariationPlacement)\n/* harmony export */ });\nvar hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanM/M2VlOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js":
-/*!***************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***!
- \***************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getVariation)\n/* harmony export */ });\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanM/NjA5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getVariation.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/math.js":
-/*!*******************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/math.js ***!
- \*******************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ max: () => (/* binding */ max),\n/* harmony export */ min: () => (/* binding */ min),\n/* harmony export */ round: () => (/* binding */ round)\n/* harmony export */ });\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU87QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tYXRoLmpzPzJhZjAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/math.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js":
-/*!**************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***!
- \**************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mergeByName)\n/* harmony export */ });\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixLQUFLO0FBQ0w7QUFDQSxHQUFHLElBQUksR0FBRzs7QUFFVjtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcz85NDgwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/mergeByName.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js":
-/*!*********************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***!
- \*********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mergePaddingObject)\n/* harmony export */ });\n/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), paddingObject);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF5RDtBQUMxQztBQUNmLHlCQUF5QixFQUFFLGtFQUFrQjtBQUM3QyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzPzU3NjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js":
-/*!*****************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***!
- \*****************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ orderModifiers)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZDLENBQUM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsR0FBRzs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRWU7QUFDZjtBQUNBLDJDQUEyQzs7QUFFM0MsU0FBUyxxREFBYztBQUN2QjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanM/NGYxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js":
-/*!*******************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***!
- \*******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ rectToClientRect)\n/* harmony export */ });\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2YseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzPzMyNDEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js":
-/*!************************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***!
- \************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getUAString)\n/* harmony export */ });\nfunction getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzPzM4ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/userAgent.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/@popperjs/core/lib/utils/within.js":
-/*!*********************************************************!*\
- !*** ./node_modules/@popperjs/core/lib/utils/within.js ***!
- \*********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ within: () => (/* binding */ within),\n/* harmony export */ withinMaxClamp: () => (/* binding */ withinMaxClamp)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\nfunction within(min, value, max) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));\n}\nfunction withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMkQ7QUFDcEQ7QUFDUCxTQUFTLDZDQUFPLE1BQU0sNkNBQU87QUFDN0I7QUFDTztBQUNQO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzPzM3YTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/within.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/index.js":
-/*!*************************************!*\
- !*** ./node_modules/axios/index.js ***!
- \*************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-eval("module.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/axios/lib/axios.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUEsNEZBQXVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzPzUzZTkiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/adapters/xhr.js":
-/*!************************************************!*\
- !*** ./node_modules/axios/lib/adapters/xhr.js ***!
- \************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/axios/lib/core/settle.js\");\nvar cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/axios/lib/helpers/cookies.js\");\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/axios/lib/helpers/buildURL.js\");\nvar buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ \"./node_modules/axios/lib/core/buildFullPath.js\");\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/axios/lib/helpers/parseHeaders.js\");\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/axios/lib/helpers/isURLSameOrigin.js\");\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/axios/lib/core/createError.js\");\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7QUFDaEMsYUFBYSxtQkFBTyxDQUFDLGlFQUFrQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMseUVBQXNCO0FBQzVDLGVBQWUsbUJBQU8sQ0FBQywyRUFBdUI7QUFDOUMsb0JBQW9CLG1CQUFPLENBQUMsNkVBQXVCO0FBQ25ELG1CQUFtQixtQkFBTyxDQUFDLG1GQUEyQjtBQUN0RCxzQkFBc0IsbUJBQU8sQ0FBQyx5RkFBOEI7QUFDNUQsa0JBQWtCLG1CQUFPLENBQUMseUVBQXFCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/MWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNvbmZpZy50cmFuc2l0aW9uYWwgJiYgY29uZmlnLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3REYXRhKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/adapters/xhr.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/axios.js":
-/*!*****************************************!*\
- !*** ./node_modules/axios/lib/axios.js ***!
- \*****************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/axios/lib/utils.js\");\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/axios/lib/helpers/bind.js\");\nvar Axios = __webpack_require__(/*! ./core/Axios */ \"./node_modules/axios/lib/core/Axios.js\");\nvar mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ \"./node_modules/axios/lib/core/mergeConfig.js\");\nvar defaults = __webpack_require__(/*! ./defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ \"./node_modules/axios/lib/cancel/Cancel.js\");\naxios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ \"./node_modules/axios/lib/cancel/CancelToken.js\");\naxios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ \"./node_modules/axios/lib/cancel/isCancel.js\");\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = __webpack_require__(/*! ./helpers/spread */ \"./node_modules/axios/lib/helpers/spread.js\");\n\n// Expose isAxiosError\naxios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ \"./node_modules/axios/lib/helpers/isAxiosError.js\");\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports[\"default\"] = axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxrREFBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyw0REFBYztBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx3RUFBb0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLHdEQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBaUI7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsNEVBQXNCO0FBQ2xELGlCQUFpQixtQkFBTyxDQUFDLHNFQUFtQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsb0VBQWtCOztBQUV6QztBQUNBLHFCQUFxQixtQkFBTyxDQUFDLGdGQUF3Qjs7QUFFckQ7O0FBRUE7QUFDQSx5QkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzP2ZhZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vY29yZS9tZXJnZUNvbmZpZycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhheGlvcy5kZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/axios.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/Cancel.js":
-/*!*************************************************!*\
- !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
- \*************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzP2QyYTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/cancel/Cancel.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
- \******************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar Cancel = __webpack_require__(/*! ./Cancel */ \"./node_modules/axios/lib/cancel/Cancel.js\");\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsMkRBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzPzcyYzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/cancel/CancelToken.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/isCancel.js":
-/*!***************************************************!*\
- !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
- \***************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9jMTdhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/cancel/isCancel.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/Axios.js":
-/*!**********************************************!*\
- !*** ./node_modules/axios/lib/core/Axios.js ***!
- \**********************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar buildURL = __webpack_require__(/*! ../helpers/buildURL */ \"./node_modules/axios/lib/helpers/buildURL.js\");\nvar InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ \"./node_modules/axios/lib/core/InterceptorManager.js\");\nvar dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ \"./node_modules/axios/lib/core/dispatchRequest.js\");\nvar mergeConfig = __webpack_require__(/*! ./mergeConfig */ \"./node_modules/axios/lib/core/mergeConfig.js\");\nvar validator = __webpack_require__(/*! ../helpers/validator */ \"./node_modules/axios/lib/helpers/validator.js\");\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),\n clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsWUFBWSxtQkFBTyxDQUFDLHFEQUFZO0FBQ2hDLGVBQWUsbUJBQU8sQ0FBQyx5RUFBcUI7QUFDNUMseUJBQXlCLG1CQUFPLENBQUMsaUZBQXNCO0FBQ3ZELHNCQUFzQixtQkFBTyxDQUFDLDJFQUFtQjtBQUNqRCxrQkFBa0IsbUJBQU8sQ0FBQyxtRUFBZTtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQywyRUFBc0I7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/MjlmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBhcmd1bWVudHNbMV0gfHwge307XG4gICAgY29uZmlnLnVybCA9IGFyZ3VtZW50c1swXTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJyksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuLCAnMS4wLjAnKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJylcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/Axios.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
-/*!***********************************************************!*\
- !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
- \***********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTs7QUFFaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzP2M3OTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHtcbiAgdGhpcy5oYW5kbGVycyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS51c2UgPSBmdW5jdGlvbiB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxuICAgIHJlamVjdGVkOiByZWplY3RlZCxcbiAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICB9KTtcbiAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmVqZWN0ID0gZnVuY3Rpb24gZWplY3QoaWQpIHtcbiAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/InterceptorManager.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/buildFullPath.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
- \******************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ \"./node_modules/axios/lib/helpers/isAbsoluteURL.js\");\nvar combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ \"./node_modules/axios/lib/helpers/combineURLs.js\");\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixvQkFBb0IsbUJBQU8sQ0FBQyxtRkFBMEI7QUFDdEQsa0JBQWtCLG1CQUFPLENBQUMsK0VBQXdCOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcz9mMDJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/buildFullPath.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/createError.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/core/createError.js ***!
- \****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ \"./node_modules/axios/lib/core/enhanceError.js\");\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsbUJBQW1CLG1CQUFPLENBQUMscUVBQWdCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzPzc3MGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/createError.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
- \********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar transformData = __webpack_require__(/*! ./transformData */ \"./node_modules/axios/lib/core/transformData.js\");\nvar isCancel = __webpack_require__(/*! ../cancel/isCancel */ \"./node_modules/axios/lib/cancel/isCancel.js\");\nvar defaults = __webpack_require__(/*! ../defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTtBQUNoQyxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBaUI7QUFDN0MsZUFBZSxtQkFBTyxDQUFDLHVFQUFvQjtBQUMzQyxlQUFlLG1CQUFPLENBQUMseURBQWE7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzRkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/dispatchRequest.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/enhanceError.js":
-/*!*****************************************************!*\
- !*** ./node_modules/axios/lib/core/enhanceError.js ***!
- \*****************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanM/MGRmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/enhanceError.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/mergeConfig.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
- \****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/axios/lib/utils.js\");\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsWUFBWSxtQkFBTyxDQUFDLG1EQUFVOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDJCQUEyQjtBQUMzQixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzP2JkMTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHZhciB2YWx1ZUZyb21Db25maWcyS2V5cyA9IFsndXJsJywgJ21ldGhvZCcsICdkYXRhJ107XG4gIHZhciBtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cyA9IFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5JywgJ3BhcmFtcyddO1xuICB2YXIgZGVmYXVsdFRvQ29uZmlnMktleXMgPSBbXG4gICAgJ2Jhc2VVUkwnLCAndHJhbnNmb3JtUmVxdWVzdCcsICd0cmFuc2Zvcm1SZXNwb25zZScsICdwYXJhbXNTZXJpYWxpemVyJyxcbiAgICAndGltZW91dCcsICd0aW1lb3V0TWVzc2FnZScsICd3aXRoQ3JlZGVudGlhbHMnLCAnYWRhcHRlcicsICdyZXNwb25zZVR5cGUnLCAneHNyZkNvb2tpZU5hbWUnLFxuICAgICd4c3JmSGVhZGVyTmFtZScsICdvblVwbG9hZFByb2dyZXNzJywgJ29uRG93bmxvYWRQcm9ncmVzcycsICdkZWNvbXByZXNzJyxcbiAgICAnbWF4Q29udGVudExlbmd0aCcsICdtYXhCb2R5TGVuZ3RoJywgJ21heFJlZGlyZWN0cycsICd0cmFuc3BvcnQnLCAnaHR0cEFnZW50JyxcbiAgICAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsICdzb2NrZXRQYXRoJywgJ3Jlc3BvbnNlRW5jb2RpbmcnXG4gIF07XG4gIHZhciBkaXJlY3RNZXJnZUtleXMgPSBbJ3ZhbGlkYXRlU3RhdHVzJ107XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB1dGlscy5mb3JFYWNoKHZhbHVlRnJvbUNvbmZpZzJLZXlzLCBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChtZXJnZURlZXBQcm9wZXJ0aWVzS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgdXRpbHMuZm9yRWFjaChkZWZhdWx0VG9Db25maWcyS2V5cywgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goZGlyZWN0TWVyZ2VLZXlzLCBmdW5jdGlvbiBtZXJnZShwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgYXhpb3NLZXlzID0gdmFsdWVGcm9tQ29uZmlnMktleXNcbiAgICAuY29uY2F0KG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzKVxuICAgIC5jb25jYXQoZGVmYXVsdFRvQ29uZmlnMktleXMpXG4gICAgLmNvbmNhdChkaXJlY3RNZXJnZUtleXMpO1xuXG4gIHZhciBvdGhlcktleXMgPSBPYmplY3RcbiAgICAua2V5cyhjb25maWcxKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpXG4gICAgLmZpbHRlcihmdW5jdGlvbiBmaWx0ZXJBeGlvc0tleXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXhpb3NLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChvdGhlcktleXMsIG1lcmdlRGVlcFByb3BlcnRpZXMpO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/mergeConfig.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/settle.js":
-/*!***********************************************!*\
- !*** ./node_modules/axios/lib/core/settle.js ***!
- \***********************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar createError = __webpack_require__(/*! ./createError */ \"./node_modules/axios/lib/core/createError.js\");\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQixtQkFBTyxDQUFDLG1FQUFlOztBQUV6QztBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanM/ODc2OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/settle.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/transformData.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/core/transformData.js ***!
- \******************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar defaults = __webpack_require__(/*! ./../defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7QUFDaEMsZUFBZSxtQkFBTyxDQUFDLDJEQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQSxXQUFXLGVBQWU7QUFDMUIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsZ0JBQWdCO0FBQzNCLGFBQWEsR0FBRztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz83NjYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/core/transformData.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/defaults.js":
-/*!********************************************!*\
- !*** ./node_modules/axios/lib/defaults.js ***!
- \********************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ \"./node_modules/process/browser.js\");\n\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/axios/lib/utils.js\");\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ \"./node_modules/axios/lib/helpers/normalizeHeaderName.js\");\nvar enhanceError = __webpack_require__(/*! ./core/enhanceError */ \"./node_modules/axios/lib/core/enhanceError.js\");\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(/*! ./adapters/xhr */ \"./node_modules/axios/lib/adapters/xhr.js\");\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = __webpack_require__(/*! ./adapters/http */ \"./node_modules/axios/lib/adapters/xhr.js\");\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsa0RBQVM7QUFDN0IsMEJBQTBCLG1CQUFPLENBQUMsOEZBQStCO0FBQ2pFLG1CQUFtQixtQkFBTyxDQUFDLDBFQUFxQjs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsZ0VBQWdCO0FBQ3RDLElBQUksZ0JBQWdCLE9BQU8sbURBQW1ELE9BQU87QUFDckY7QUFDQSxjQUFjLG1CQUFPLENBQUMsaUVBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcz9lMjIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDoge1xuICAgIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG4gIH0sXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSB8fCAoaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICB2YXIgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChzdHJpY3RKU09OUGFyc2luZyB8fCAoZm9yY2VkSlNPTlBhcnNpbmcgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgZGF0YS5sZW5ndGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZW5oYW5jZUVycm9yKGUsIHRoaXMsICdFX0pTT05fUEFSU0UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/defaults.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/bind.js":
-/*!************************************************!*\
- !*** ./node_modules/axios/lib/helpers/bind.js ***!
- \************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz80YmVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/bind.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/buildURL.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
- \****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsWUFBWSxtQkFBTyxDQUFDLHFEQUFZOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanM/YzE3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkUGFyYW1zO1xuICBpZiAocGFyYW1zU2VyaWFsaXplcikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXNTZXJpYWxpemVyKHBhcmFtcyk7XG4gIH0gZWxzZSBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSkge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFydHMgPSBbXTtcblxuICAgIHV0aWxzLmZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiBzZXJpYWxpemUodmFsLCBrZXkpIHtcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXRpbHMuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGtleSA9IGtleSArICdbXSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdmFyIGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cblxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/buildURL.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
-/*!*******************************************************!*\
- !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
- \*******************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzPzZiYzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/combineURLs.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/cookies.js":
-/*!***************************************************!*\
- !*** ./node_modules/axios/lib/helpers/cookies.js ***!
- \***************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMscURBQVk7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0MsU0FBUzs7QUFFVDtBQUNBLDREQUE0RCx3QkFBd0I7QUFDcEY7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsZ0NBQWdDLGNBQWM7QUFDOUM7QUFDQTtBQUNBLEtBQUs7QUFDTCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzPzFkM2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/cookies.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
-/*!*********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
- \*********************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanM/YTIyNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/isAbsoluteURL.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isAxiosError.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***!
- \********************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanM/YmQ5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gKHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JykgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/isAxiosError.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
-/*!***********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
- \***********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsUUFBUTtBQUN0QixnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzPzg3OTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/isURLSameOrigin.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
-/*!***************************************************************!*\
- !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
- \***************************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsbURBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzPzZiMTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/normalizeHeaderName.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
- \********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxxREFBWTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NTRlOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/parseHeaders.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/spread.js":
-/*!**************************************************!*\
- !*** ./node_modules/axios/lib/helpers/spread.js ***!
- \**************************************************/
-/***/ ((module) => {
-
-"use strict";
-eval("\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcz8yNzI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/spread.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/validator.js":
-/*!*****************************************************!*\
- !*** ./node_modules/axios/lib/helpers/validator.js ***!
- \*****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar pkg = __webpack_require__(/*! ./../../package.json */ \"./node_modules/axios/package.json\");\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\nvar currentVerArr = pkg.version.split('.');\n\n/**\n * Compare package versions\n * @param {string} version\n * @param {string?} thanVersion\n * @returns {boolean}\n */\nfunction isOlderVersion(version, thanVersion) {\n var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;\n var destVer = version.split('.');\n for (var i = 0; i < 3; i++) {\n if (pkgVersionArr[i] > destVer[i]) {\n return true;\n } else if (pkgVersionArr[i] < destVer[i]) {\n return false;\n }\n }\n return false;\n}\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator\n * @param {string?} version\n * @param {string} message\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n var isDeprecated = version && isOlderVersion(version);\n\n function formatMessage(opt, desc) {\n return '[Axios v' + pkg.version + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed in ' + version));\n }\n\n if (isDeprecated && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n isOlderVersion: isOlderVersion,\n assertOptions: assertOptions,\n validators: validators\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQywrREFBc0I7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLFNBQVM7QUFDcEIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcz8wMTMyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG52YXIgY3VycmVudFZlckFyciA9IHBrZy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5cbi8qKlxuICogQ29tcGFyZSBwYWNrYWdlIHZlcnNpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSB0aGFuVmVyc2lvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzT2xkZXJWZXJzaW9uKHZlcnNpb24sIHRoYW5WZXJzaW9uKSB7XG4gIHZhciBwa2dWZXJzaW9uQXJyID0gdGhhblZlcnNpb24gPyB0aGFuVmVyc2lvbi5zcGxpdCgnLicpIDogY3VycmVudFZlckFycjtcbiAgdmFyIGRlc3RWZXIgPSB2ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPiBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPCBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICB2YXIgaXNEZXByZWNhdGVkID0gdmVyc2lvbiAmJiBpc09sZGVyVmVyc2lvbih2ZXJzaW9uKTtcblxuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgcGtnLnZlcnNpb24gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQgaW4gJyArIHZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZXByZWNhdGVkICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc09sZGVyVmVyc2lvbjogaXNPbGRlclZlcnNpb24sXG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/helpers/validator.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/utils.js":
-/*!*****************************************!*\
- !*** ./node_modules/axios/lib/utils.js ***!
- \*****************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/axios/lib/helpers/bind.js\");\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTiw0QkFBNEI7QUFDNUIsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzP2M5ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/axios/lib/utils.js\n");
-
-/***/ }),
-
-/***/ "./resources/assets/js/app.js":
-/*!************************************!*\
- !*** ./resources/assets/js/app.js ***!
- \************************************/
-/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
-
-eval("__webpack_require__(/*! ./bootstrap */ \"./resources/assets/js/bootstrap.js\");\nwindow.BpmnModeler = __webpack_require__(/*! camunda-bpmn-js/lib/camunda-platform/Modeler */ \"./node_modules/camunda-bpmn-js/lib/camunda-platform/Modeler.js\");\n$(document).ready(function () {\n $('[data-toggle=\"tooltip\"]').tooltip();\n //\n // const menuLinks = document.querySelectorAll('.sidebar-platform .sidebar-list li .parent-link');\n // const sidebarDiv = document.querySelector('.sidebar-platform');\n // menuLinks.forEach((link, index) => {\n // link.addEventListener('mouseover', (event) => {\n // const newLink = link.cloneNode(true);\n // newLink.classList.add('clone-link');\n // newLink.classList.add('clone-link' + index);\n // sidebarDiv.appendChild(newLink);\n // const posTop = link.getBoundingClientRect().top;\n // newLink.style.top = posTop + 'px';\n // });\n // link.addEventListener('mouseout', (event) => {\n // document.querySelector('.clone-link' + index).remove();\n // });\n // });\n // const sidebarTreeParents = document.querySelectorAll('.sidebar-platform .tree-content.tree-parent');\n // const appDiv = document.getElementById('app');\n // sidebarTreeParents.forEach(item => {\n // const treeToggleButton = item.previousElementSibling;\n // const newTitle = treeToggleButton.cloneNode(true);\n // newTitle.classList.add('clone-title');\n // item.appendChild(newTitle);\n // treeToggleButton.addEventListener('mouseover', (event) => {\n // const posTop = treeToggleButton.getBoundingClientRect().top;\n // const posBottom = Number(window.innerHeight - treeToggleButton.getBoundingClientRect().bottom);\n // item.style.top = null;\n // item.style.bottom = null;\n // item.style.maxHeight = null;\n // item.style.overflow = null;\n // if (!appDiv.classList.contains('menu-open')) {\n // if (posBottom < 250) {\n // item.style.bottom = posBottom + 'px';\n // item.style.maxHeight = `calc(100vh - ${posBottom}px)`;\n // } else {\n // item.style.top = posTop + 50 + 'px';\n // newTitle.style.top = posTop + 'px';\n // item.style.maxHeight = `calc(100vh - ${posTop + 50}px)`;\n // }\n // item.style.overflow = 'auto';\n // }\n // });\n // });\n //\n // const sidebarTreeParentsRemoveStyles = () => {\n // sidebarTreeParents.forEach(item => {\n // item.style.top = null;\n // item.style.bottom = null;\n // item.style.maxHeight = null;\n // item.style.overflow = null;\n // });\n // };\n\n var sidebarList = document.querySelectorAll('.sidebar-platform .sidebar-list .li-parent');\n var sidebarContent = document.querySelector('.sidebar-platform .sidebar-content');\n if (sidebarList.length) {\n sidebarList.forEach(function (li, index) {\n var nextLi = li.nextElementSibling;\n li.addEventListener('mouseover', function () {\n sidebarContent.style.overflow = 'visible';\n index === 0 ? li.style.top = '-50px' : li.style.top = \"\".concat(index * 50, \"px\");\n });\n li.addEventListener('mouseout', function () {\n sidebarContent.style.overflow = null;\n li.style.top = null;\n });\n });\n }\n $('.tree-toggle').click(function () {\n if ($('#app').hasClass('menu-open')) {\n $(this).parent().children('ul.tree-content').slideToggle(200);\n $(this).toggleClass('active');\n }\n });\n $('.menu-trigger').click(function () {\n // sidebarTreeParentsRemoveStyles();\n axios.get('/ru/set_open_menu').then(function (resp) {\n console.log(resp.data);\n });\n if ($('#app').hasClass(\"menu-open\")) {\n $('#app').removeClass('menu-open');\n } else {\n $('#app').addClass('menu-open');\n }\n });\n $(\".filter-trigger\").on(\"click\", function (event) {\n event.stopPropagation();\n $(\"#filter_block\").slideToggle(200);\n $(this).toggleClass('active');\n });\n\n // save to localStorage history of redirected url\n // const locationPath = window.location.pathname + window.location.search;\n // const historyContent = document.querySelector('#history-urls');\n // const historyListEl = document.querySelector('#history-urls .history-list');\n // const clearButton = document.querySelector('#history-urls .clear-local-block');\n // const historyUrls = localStorage.getItem('historyUrls');\n //\n // function addEmpty() {\n // const span = document.createElement('span');\n // span.classList.add('no-history');\n // span.innerHTML = 'История пуста';\n // historyListEl.appendChild(span);\n // historyContent.classList.add('empty-list');\n // }\n //\n // function deleteChild() {\n // let child = historyListEl.lastElementChild;\n // while (child) {\n // historyListEl.removeChild(child);\n // child = historyListEl.lastElementChild;\n // }\n // }\n //\n // function textTimeFormatter(time, type) {\n // let text = '';\n // let lastNum = time;\n // if (time > 10) {\n // lastNum = Number(time.toString().split('')[1]);\n // }\n // if (type === 'sec') {\n // if (lastNum === 1) text = 'секунду';\n // if (lastNum > 1 && lastNum < 5) text = 'секунды';\n // if (lastNum >= 5 || lastNum === 0) text = 'секунд';\n // }\n // if (type === 'min') {\n // if (lastNum === 1) text = 'минуту';\n // if (lastNum > 1 && lastNum < 5) text = 'минуты';\n // if (lastNum >= 5 || lastNum === 0) text = 'минут';\n // }\n // if (type === 'hour') {\n // if (lastNum === 1) text = 'час';\n // if (lastNum > 1 && lastNum < 5) text = 'часа';\n // if (lastNum >= 5 || lastNum === 0) text = 'часов';\n // }\n // if (type === 'day') {\n // text = '1 дня';\n // }\n // return text;\n // }\n //\n // let historyUrlsArray = JSON.parse(historyUrls);\n // if (historyUrlsArray) {\n // historyContent.classList.remove('empty-list');\n // historyUrlsArray.forEach(item => {\n // let diffInDays = Math.floor((new Date() - new Date(item.date)) / 1000);\n // let timeType = '';\n // if (diffInDays < 60) {\n // timeType = 'sec';\n // } else if (diffInDays > 60 && diffInDays < 3600) {\n // diffInDays = Math.floor(diffInDays / 60);\n // timeType = 'min';\n // } else if (diffInDays > 3600 && diffInDays < 86400) {\n // diffInDays = Math.floor(diffInDays / 60 / 60);\n // timeType = 'hour';\n // } else {\n // timeType = 'day';\n // }\n // const timeTypeText = textTimeFormatter(diffInDays, timeType);\n // if (timeType === 'day') {\n // diffInDays = 'Более';\n // }\n // const a = document.createElement('a');\n // a.href = item.url;\n // a.innerHTML = `${item.url} ${item.dateString} ${diffInDays} ${timeTypeText} назад `;\n // historyListEl.prepend(a);\n // });\n // } else {\n // historyUrlsArray = [];\n // addEmpty();\n // }\n //\n // if (historyUrlsArray.length > 20) {\n // historyUrlsArray.pop();\n // }\n //\n // if (locationPath !== '/' && locationPath !== '/login' && locationPath !== '/register' && locationPath !== '/logout') {\n // historyUrlsArray.push({\n // url: locationPath,\n // date: new Date(),\n // dateString: new Date().toLocaleString()\n // });\n // }\n // localStorage.setItem('historyUrls', JSON.stringify(historyUrlsArray));\n //\n // clearButton.addEventListener('click', () => {\n // localStorage.setItem('historyUrls', null);\n // deleteChild();\n // addEmpty();\n // });\n // \n\n Waves.init();\n Waves.attach('.sidebar-list li a');\n Waves.attach('.sidebar-list li .tree-toggle');\n Waves.attach('.navbar-platform .item-nav');\n Waves.attach('.btn');\n $('[data-toggle=\"tooltip\"]').tooltip();\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssQ0FBQ0UsTUFBTSxDQUFDLDRCQUE0QixDQUFDO0VBQzFDRixLQUFLLENBQUNFLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDcEJ2QyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQ0csT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9hcHAuanM/ZTM0OCJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL2Jvb3RzdHJhcCcpO1xuXG53aW5kb3cuQnBtbk1vZGVsZXIgPSByZXF1aXJlKCdjYW11bmRhLWJwbW4tanMvbGliL2NhbXVuZGEtcGxhdGZvcm0vTW9kZWxlcicpXG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcblxuICAgICQoJ1tkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIl0nKS50b29sdGlwKCk7XG4gICAgLy9cbiAgICAvLyBjb25zdCBtZW51TGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2lkZWJhci1wbGF0Zm9ybSAuc2lkZWJhci1saXN0IGxpIC5wYXJlbnQtbGluaycpO1xuICAgIC8vIGNvbnN0IHNpZGViYXJEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2lkZWJhci1wbGF0Zm9ybScpO1xuICAgIC8vIG1lbnVMaW5rcy5mb3JFYWNoKChsaW5rLCBpbmRleCkgPT4ge1xuICAgIC8vICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIChldmVudCkgPT4ge1xuICAgIC8vICAgICAgICAgY29uc3QgbmV3TGluayA9IGxpbmsuY2xvbmVOb2RlKHRydWUpO1xuICAgIC8vICAgICAgICAgbmV3TGluay5jbGFzc0xpc3QuYWRkKCdjbG9uZS1saW5rJyk7XG4gICAgLy8gICAgICAgICBuZXdMaW5rLmNsYXNzTGlzdC5hZGQoJ2Nsb25lLWxpbmsnICsgaW5kZXgpO1xuICAgIC8vICAgICAgICAgc2lkZWJhckRpdi5hcHBlbmRDaGlsZChuZXdMaW5rKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IHBvc1RvcCA9IGxpbmsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIC8vICAgICAgICAgbmV3TGluay5zdHlsZS50b3AgPSBwb3NUb3AgKyAncHgnO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIChldmVudCkgPT4ge1xuICAgIC8vICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNsb25lLWxpbmsnICsgaW5kZXgpLnJlbW92ZSgpO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9KTtcbiAgICAvLyBjb25zdCBzaWRlYmFyVHJlZVBhcmVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2lkZWJhci1wbGF0Zm9ybSAudHJlZS1jb250ZW50LnRyZWUtcGFyZW50Jyk7XG4gICAgLy8gY29uc3QgYXBwRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FwcCcpO1xuICAgIC8vIHNpZGViYXJUcmVlUGFyZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIC8vICAgICBjb25zdCB0cmVlVG9nZ2xlQnV0dG9uID0gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIC8vICAgICBjb25zdCBuZXdUaXRsZSA9IHRyZWVUb2dnbGVCdXR0b24uY2xvbmVOb2RlKHRydWUpO1xuICAgIC8vICAgICBuZXdUaXRsZS5jbGFzc0xpc3QuYWRkKCdjbG9uZS10aXRsZScpO1xuICAgIC8vICAgICBpdGVtLmFwcGVuZENoaWxkKG5ld1RpdGxlKTtcbiAgICAvLyAgICAgdHJlZVRvZ2dsZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQpID0+IHtcbiAgICAvLyAgICAgICAgIGNvbnN0IHBvc1RvcCA9IHRyZWVUb2dnbGVCdXR0b24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIC8vICAgICAgICAgY29uc3QgcG9zQm90dG9tID0gTnVtYmVyKHdpbmRvdy5pbm5lckhlaWdodCAtIHRyZWVUb2dnbGVCdXR0b24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tKTtcbiAgICAvLyAgICAgICAgIGl0ZW0uc3R5bGUudG9wID0gbnVsbDtcbiAgICAvLyAgICAgICAgIGl0ZW0uc3R5bGUuYm90dG9tID0gbnVsbDtcbiAgICAvLyAgICAgICAgIGl0ZW0uc3R5bGUubWF4SGVpZ2h0ID0gbnVsbDtcbiAgICAvLyAgICAgICAgIGl0ZW0uc3R5bGUub3ZlcmZsb3cgPSBudWxsO1xuICAgIC8vICAgICAgICAgaWYgKCFhcHBEaXYuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LW9wZW4nKSkge1xuICAgIC8vICAgICAgICAgICAgIGlmIChwb3NCb3R0b20gPCAyNTApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5ib3R0b20gPSBwb3NCb3R0b20gKyAncHgnO1xuICAgIC8vICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKDEwMHZoIC0gJHtwb3NCb3R0b219cHgpYDtcbiAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLnRvcCA9IHBvc1RvcCArIDUwICsgJ3B4JztcbiAgICAvLyAgICAgICAgICAgICAgICAgbmV3VGl0bGUuc3R5bGUudG9wID0gcG9zVG9wICsgJ3B4JztcbiAgICAvLyAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygxMDB2aCAtICR7cG9zVG9wICsgNTB9cHgpYDtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgaXRlbS5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfSk7XG4gICAgLy9cbiAgICAvLyBjb25zdCBzaWRlYmFyVHJlZVBhcmVudHNSZW1vdmVTdHlsZXMgPSAoKSA9PiB7XG4gICAgLy8gICAgIHNpZGViYXJUcmVlUGFyZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIC8vICAgICAgICAgaXRlbS5zdHlsZS50b3AgPSBudWxsO1xuICAgIC8vICAgICAgICAgaXRlbS5zdHlsZS5ib3R0b20gPSBudWxsO1xuICAgIC8vICAgICAgICAgaXRlbS5zdHlsZS5tYXhIZWlnaHQgPSBudWxsO1xuICAgIC8vICAgICAgICAgaXRlbS5zdHlsZS5vdmVyZmxvdyA9IG51bGw7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH07XG5cbiAgICBjb25zdCBzaWRlYmFyTGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zaWRlYmFyLXBsYXRmb3JtIC5zaWRlYmFyLWxpc3QgLmxpLXBhcmVudCcpO1xuICAgIGNvbnN0IHNpZGViYXJDb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNpZGViYXItcGxhdGZvcm0gLnNpZGViYXItY29udGVudCcpO1xuICAgIGlmKHNpZGViYXJMaXN0Lmxlbmd0aCl7XG4gICAgICAgIHNpZGViYXJMaXN0LmZvckVhY2goKGxpLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV4dExpID0gbGkubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgbGkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNpZGViYXJDb250ZW50LnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgIGluZGV4ID09PSAwID8gbGkuc3R5bGUudG9wID0gJy01MHB4JyA6IGxpLnN0eWxlLnRvcCA9IGAke2luZGV4ICogNTB9cHhgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsaS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzaWRlYmFyQ29udGVudC5zdHlsZS5vdmVyZmxvdyA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGkuc3R5bGUudG9wID0gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICQoJy50cmVlLXRvZ2dsZScpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYoJCgnI2FwcCcpLmhhc0NsYXNzKCdtZW51LW9wZW4nKSl7XG4gICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCd1bC50cmVlLWNvbnRlbnQnKS5zbGlkZVRvZ2dsZSgyMDApO1xuICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoJy5tZW51LXRyaWdnZXInKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHNpZGViYXJUcmVlUGFyZW50c1JlbW92ZVN0eWxlcygpO1xuICAgICAgICBheGlvcy5nZXQoJy9ydS9zZXRfb3Blbl9tZW51JykudGhlbihyZXNwID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AuZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoJCgnI2FwcCcpLmhhc0NsYXNzKFwibWVudS1vcGVuXCIpKSB7XG4gICAgICAgICAgICAkKCcjYXBwJykucmVtb3ZlQ2xhc3MoJ21lbnUtb3BlbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnI2FwcCcpLmFkZENsYXNzKCdtZW51LW9wZW4nKTtcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICAkKFwiLmZpbHRlci10cmlnZ2VyXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAkKFwiI2ZpbHRlcl9ibG9ja1wiKS5zbGlkZVRvZ2dsZSgyMDApO1xuICAgICAgICAkKHRoaXMpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKVxuICAgIH0pO1xuXG5cbiAgICAvLyA8Y29kZS1ibG9jaz4gc2F2ZSB0byBsb2NhbFN0b3JhZ2UgaGlzdG9yeSBvZiByZWRpcmVjdGVkIHVybFxuICAgIC8vIGNvbnN0IGxvY2F0aW9uUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gICAgLy8gY29uc3QgaGlzdG9yeUNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaGlzdG9yeS11cmxzJyk7XG4gICAgLy8gY29uc3QgaGlzdG9yeUxpc3RFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNoaXN0b3J5LXVybHMgLmhpc3RvcnktbGlzdCcpO1xuICAgIC8vIGNvbnN0IGNsZWFyQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2hpc3RvcnktdXJscyAuY2xlYXItbG9jYWwtYmxvY2snKTtcbiAgICAvLyBjb25zdCBoaXN0b3J5VXJscyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoaXN0b3J5VXJscycpO1xuICAgIC8vXG4gICAgLy8gZnVuY3Rpb24gYWRkRW1wdHkoKSB7XG4gICAgLy8gICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgLy8gICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgnbm8taGlzdG9yeScpO1xuICAgIC8vICAgICBzcGFuLmlubmVySFRNTCA9ICfQmNGB0YLQvtGA0LjRjyDQv9GD0YHRgtCwJztcbiAgICAvLyAgICAgaGlzdG9yeUxpc3RFbC5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAvLyAgICAgaGlzdG9yeUNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnZW1wdHktbGlzdCcpO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKCkge1xuICAgIC8vICAgICBsZXQgY2hpbGQgPSBoaXN0b3J5TGlzdEVsLmxhc3RFbGVtZW50Q2hpbGQ7XG4gICAgLy8gICAgIHdoaWxlIChjaGlsZCkge1xuICAgIC8vICAgICAgICAgaGlzdG9yeUxpc3RFbC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgLy8gICAgICAgICBjaGlsZCA9IGhpc3RvcnlMaXN0RWwubGFzdEVsZW1lbnRDaGlsZDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGZ1bmN0aW9uIHRleHRUaW1lRm9ybWF0dGVyKHRpbWUsIHR5cGUpIHtcbiAgICAvLyAgICAgbGV0IHRleHQgPSAnJztcbiAgICAvLyAgICAgbGV0IGxhc3ROdW0gPSB0aW1lO1xuICAgIC8vICAgICBpZiAodGltZSA+IDEwKSB7XG4gICAgLy8gICAgICAgICBsYXN0TnVtID0gTnVtYmVyKHRpbWUudG9TdHJpbmcoKS5zcGxpdCgnJylbMV0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICh0eXBlID09PSAnc2VjJykge1xuICAgIC8vICAgICAgICAgaWYgKGxhc3ROdW0gPT09IDEpIHRleHQgPSAn0YHQtdC60YPQvdC00YMnO1xuICAgIC8vICAgICAgICAgaWYgKGxhc3ROdW0gPiAxICYmIGxhc3ROdW0gPCA1KSB0ZXh0ID0gJ9GB0LXQutGD0L3QtNGLJztcbiAgICAvLyAgICAgICAgIGlmIChsYXN0TnVtID49IDUgfHwgbGFzdE51bSA9PT0gMCkgdGV4dCA9ICfRgdC10LrRg9C90LQnO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICh0eXBlID09PSAnbWluJykge1xuICAgIC8vICAgICAgICAgaWYgKGxhc3ROdW0gPT09IDEpIHRleHQgPSAn0LzQuNC90YPRgtGDJztcbiAgICAvLyAgICAgICAgIGlmIChsYXN0TnVtID4gMSAmJiBsYXN0TnVtIDwgNSkgdGV4dCA9ICfQvNC40L3Rg9GC0YsnO1xuICAgIC8vICAgICAgICAgaWYgKGxhc3ROdW0gPj0gNSB8fCBsYXN0TnVtID09PSAwKSB0ZXh0ID0gJ9C80LjQvdGD0YInO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICh0eXBlID09PSAnaG91cicpIHtcbiAgICAvLyAgICAgICAgIGlmIChsYXN0TnVtID09PSAxKSB0ZXh0ID0gJ9GH0LDRgSc7XG4gICAgLy8gICAgICAgICBpZiAobGFzdE51bSA+IDEgJiYgbGFzdE51bSA8IDUpIHRleHQgPSAn0YfQsNGB0LAnO1xuICAgIC8vICAgICAgICAgaWYgKGxhc3ROdW0gPj0gNSB8fCBsYXN0TnVtID09PSAwKSB0ZXh0ID0gJ9GH0LDRgdC+0LInO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICh0eXBlID09PSAnZGF5Jykge1xuICAgIC8vICAgICAgICAgdGV4dCA9ICcxINC00L3Rjyc7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHRleHQ7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gbGV0IGhpc3RvcnlVcmxzQXJyYXkgPSBKU09OLnBhcnNlKGhpc3RvcnlVcmxzKTtcbiAgICAvLyBpZiAoaGlzdG9yeVVybHNBcnJheSkge1xuICAgIC8vICAgICBoaXN0b3J5Q29udGVudC5jbGFzc0xpc3QucmVtb3ZlKCdlbXB0eS1saXN0Jyk7XG4gICAgLy8gICAgIGhpc3RvcnlVcmxzQXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAvLyAgICAgICAgIGxldCBkaWZmSW5EYXlzID0gTWF0aC5mbG9vcigobmV3IERhdGUoKSAtIG5ldyBEYXRlKGl0ZW0uZGF0ZSkpIC8gMTAwMCk7XG4gICAgLy8gICAgICAgICBsZXQgdGltZVR5cGUgPSAnJztcbiAgICAvLyAgICAgICAgIGlmIChkaWZmSW5EYXlzIDwgNjApIHtcbiAgICAvLyAgICAgICAgICAgICB0aW1lVHlwZSA9ICdzZWMnO1xuICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChkaWZmSW5EYXlzID4gNjAgJiYgZGlmZkluRGF5cyA8IDM2MDApIHtcbiAgICAvLyAgICAgICAgICAgICBkaWZmSW5EYXlzID0gTWF0aC5mbG9vcihkaWZmSW5EYXlzIC8gNjApO1xuICAgIC8vICAgICAgICAgICAgIHRpbWVUeXBlID0gJ21pbic7XG4gICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRpZmZJbkRheXMgPiAzNjAwICYmIGRpZmZJbkRheXMgPCA4NjQwMCkge1xuICAgIC8vICAgICAgICAgICAgIGRpZmZJbkRheXMgPSBNYXRoLmZsb29yKGRpZmZJbkRheXMgLyA2MCAvIDYwKTtcbiAgICAvLyAgICAgICAgICAgICB0aW1lVHlwZSA9ICdob3VyJztcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgdGltZVR5cGUgPSAnZGF5JztcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIGNvbnN0IHRpbWVUeXBlVGV4dCA9IHRleHRUaW1lRm9ybWF0dGVyKGRpZmZJbkRheXMsIHRpbWVUeXBlKTtcbiAgICAvLyAgICAgICAgIGlmICh0aW1lVHlwZSA9PT0gJ2RheScpIHtcbiAgICAvLyAgICAgICAgICAgICBkaWZmSW5EYXlzID0gJ9CR0L7Qu9C10LUnO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAvLyAgICAgICAgIGEuaHJlZiA9IGl0ZW0udXJsO1xuICAgIC8vICAgICAgICAgYS5pbm5lckhUTUwgPSBgPHNwYW4+JHtpdGVtLnVybH08L3NwYW4+PHNtYWxsPjxiPiR7aXRlbS5kYXRlU3RyaW5nfTwvYj4gPGI+JHtkaWZmSW5EYXlzfSAke3RpbWVUeXBlVGV4dH0g0L3QsNC30LDQtDwvYj48L3NtYWxsPmA7XG4gICAgLy8gICAgICAgICBoaXN0b3J5TGlzdEVsLnByZXBlbmQoYSk7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICAgIGhpc3RvcnlVcmxzQXJyYXkgPSBbXTtcbiAgICAvLyAgICAgYWRkRW1wdHkoKTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBpZiAoaGlzdG9yeVVybHNBcnJheS5sZW5ndGggPiAyMCkge1xuICAgIC8vICAgICBoaXN0b3J5VXJsc0FycmF5LnBvcCgpO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGlmIChsb2NhdGlvblBhdGggIT09ICcvJyAmJiBsb2NhdGlvblBhdGggIT09ICcvbG9naW4nICYmIGxvY2F0aW9uUGF0aCAhPT0gJy9yZWdpc3RlcicgJiYgbG9jYXRpb25QYXRoICE9PSAnL2xvZ291dCcpIHtcbiAgICAvLyAgICAgaGlzdG9yeVVybHNBcnJheS5wdXNoKHtcbiAgICAvLyAgICAgICAgIHVybDogbG9jYXRpb25QYXRoLFxuICAgIC8vICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAvLyAgICAgICAgIGRhdGVTdHJpbmc6IG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG4gICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hpc3RvcnlVcmxzJywgSlNPTi5zdHJpbmdpZnkoaGlzdG9yeVVybHNBcnJheSkpO1xuICAgIC8vXG4gICAgLy8gY2xlYXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgLy8gICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoaXN0b3J5VXJscycsIG51bGwpO1xuICAgIC8vICAgICBkZWxldGVDaGlsZCgpO1xuICAgIC8vICAgICBhZGRFbXB0eSgpO1xuICAgIC8vIH0pO1xuICAgIC8vIDwvY29kZS1ibG9jaz5cblxuXG4gICAgV2F2ZXMuaW5pdCgpO1xuICAgIFdhdmVzLmF0dGFjaCgnLnNpZGViYXItbGlzdCBsaSBhJyk7XG4gICAgV2F2ZXMuYXR0YWNoKCcuc2lkZWJhci1saXN0IGxpIC50cmVlLXRvZ2dsZScpO1xuICAgIFdhdmVzLmF0dGFjaCgnLm5hdmJhci1wbGF0Zm9ybSAuaXRlbS1uYXYnKTtcbiAgICBXYXZlcy5hdHRhY2goJy5idG4nKTtcbiAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xufSk7XG5cblxuIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJ3aW5kb3ciLCJCcG1uTW9kZWxlciIsIiQiLCJkb2N1bWVudCIsInJlYWR5IiwidG9vbHRpcCIsInNpZGViYXJMaXN0IiwicXVlcnlTZWxlY3RvckFsbCIsInNpZGViYXJDb250ZW50IiwicXVlcnlTZWxlY3RvciIsImxlbmd0aCIsImZvckVhY2giLCJsaSIsImluZGV4IiwibmV4dExpIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0eWxlIiwib3ZlcmZsb3ciLCJ0b3AiLCJjb25jYXQiLCJjbGljayIsImhhc0NsYXNzIiwicGFyZW50IiwiY2hpbGRyZW4iLCJzbGlkZVRvZ2dsZSIsInRvZ2dsZUNsYXNzIiwiYXhpb3MiLCJnZXQiLCJ0aGVuIiwicmVzcCIsImNvbnNvbGUiLCJsb2ciLCJkYXRhIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsIm9uIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJXYXZlcyIsImluaXQiLCJhdHRhY2giXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/assets/js/app.js\n");
-
-/***/ }),
-
-/***/ "./resources/assets/js/bootstrap.js":
-/*!******************************************!*\
- !*** ./resources/assets/js/bootstrap.js ***!
- \******************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nwindow._ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\ntry {\n __webpack_require__(/*! bootstrap */ \"./node_modules/bootstrap/dist/js/bootstrap.esm.js\");\n} catch (e) {}\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n\n// import Echo from 'laravel-echo';\n\n// window.Pusher = require('pusher-js');\n\n// window.Echo = new Echo({\n// broadcaster: 'pusher',\n// key: process.env.MIX_PUSHER_APP_KEY,\n// cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n// forceTLS: true\n// });\n\n\nwindow.$ = window.jQuery = (jquery__WEBPACK_IMPORTED_MODULE_0___default());\n__webpack_require__(/*! select2 */ \"./node_modules/select2/dist/js/select2.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvYXNzZXRzL2pzL2Jvb3RzdHJhcC5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQUEsTUFBTSxDQUFDQyxDQUFDLEdBQUdDLG1CQUFPLENBQUMsK0NBQVEsQ0FBQztBQUU1QixJQUFJO0VBQ0FBLG1CQUFPLENBQUMsb0VBQVcsQ0FBQztBQUN4QixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFLENBQUM7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUgsTUFBTSxDQUFDSSxLQUFLLEdBQUdGLG1CQUFPLENBQUMsNENBQU8sQ0FBQztBQUUvQkYsTUFBTSxDQUFDSSxLQUFLLENBQUNDLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0I7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUV1QjtBQUN2QlAsTUFBTSxDQUFDUSxDQUFDLEdBQUdSLE1BQU0sQ0FBQ1MsTUFBTSxHQUFHRCwrQ0FBQztBQUM1Qk4sbUJBQU8sQ0FBQywwREFBUyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2Fzc2V0cy9qcy9ib290c3RyYXAuanM/MWYwZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG50cnkge1xuICAgIHJlcXVpcmUoJ2Jvb3RzdHJhcCcpO1xufSBjYXRjaCAoZSkge31cblxuLyoqXG4gKiBXZSdsbCBsb2FkIHRoZSBheGlvcyBIVFRQIGxpYnJhcnkgd2hpY2ggYWxsb3dzIHVzIHRvIGVhc2lseSBpc3N1ZSByZXF1ZXN0c1xuICogdG8gb3VyIExhcmF2ZWwgYmFjay1lbmQuIFRoaXMgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgc2VuZGluZyB0aGVcbiAqIENTUkYgdG9rZW4gYXMgYSBoZWFkZXIgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBcIlhTUkZcIiB0b2tlbiBjb29raWUuXG4gKi9cblxud2luZG93LmF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKTtcblxud2luZG93LmF4aW9zLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uWydYLVJlcXVlc3RlZC1XaXRoJ10gPSAnWE1MSHR0cFJlcXVlc3QnO1xuXG4vKipcbiAqIEVjaG8gZXhwb3NlcyBhbiBleHByZXNzaXZlIEFQSSBmb3Igc3Vic2NyaWJpbmcgdG8gY2hhbm5lbHMgYW5kIGxpc3RlbmluZ1xuICogZm9yIGV2ZW50cyB0aGF0IGFyZSBicm9hZGNhc3QgYnkgTGFyYXZlbC4gRWNobyBhbmQgZXZlbnQgYnJvYWRjYXN0aW5nXG4gKiBhbGxvd3MgeW91ciB0ZWFtIHRvIGVhc2lseSBidWlsZCByb2J1c3QgcmVhbC10aW1lIHdlYiBhcHBsaWNhdGlvbnMuXG4gKi9cblxuLy8gaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJztcblxuLy8gd2luZG93LlB1c2hlciA9IHJlcXVpcmUoJ3B1c2hlci1qcycpO1xuXG4vLyB3aW5kb3cuRWNobyA9IG5ldyBFY2hvKHtcbi8vICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsXG4vLyAgICAga2V5OiBwcm9jZXNzLmVudi5NSVhfUFVTSEVSX0FQUF9LRVksXG4vLyAgICAgY2x1c3RlcjogcHJvY2Vzcy5lbnYuTUlYX1BVU0hFUl9BUFBfQ0xVU1RFUixcbi8vICAgICBmb3JjZVRMUzogdHJ1ZVxuLy8gfSk7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG53aW5kb3cuJCA9IHdpbmRvdy5qUXVlcnkgPSAkO1xucmVxdWlyZSgnc2VsZWN0MicpO1xuIl0sIm5hbWVzIjpbIndpbmRvdyIsIl8iLCJyZXF1aXJlIiwiZSIsImF4aW9zIiwiZGVmYXVsdHMiLCJoZWFkZXJzIiwiY29tbW9uIiwiJCIsImpRdWVyeSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/assets/js/bootstrap.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bootstrap/dist/js/bootstrap.esm.js":
-/*!*********************************************************!*\
- !*** ./node_modules/bootstrap/dist/js/bootstrap.esm.js ***!
- \*********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Alert: () => (/* binding */ Alert),\n/* harmony export */ Button: () => (/* binding */ Button),\n/* harmony export */ Carousel: () => (/* binding */ Carousel),\n/* harmony export */ Collapse: () => (/* binding */ Collapse),\n/* harmony export */ Dropdown: () => (/* binding */ Dropdown),\n/* harmony export */ Modal: () => (/* binding */ Modal),\n/* harmony export */ Offcanvas: () => (/* binding */ Offcanvas),\n/* harmony export */ Popover: () => (/* binding */ Popover),\n/* harmony export */ ScrollSpy: () => (/* binding */ ScrollSpy),\n/* harmony export */ Tab: () => (/* binding */ Tab),\n/* harmony export */ Toast: () => (/* binding */ Toast),\n/* harmony export */ Tooltip: () => (/* binding */ Tooltip)\n/* harmony export */ });\n/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @popperjs/core */ \"./node_modules/@popperjs/core/lib/index.js\");\n/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @popperjs/core */ \"./node_modules/@popperjs/core/lib/popper.js\");\n/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof _popperjs_core__WEBPACK_IMPORTED_MODULE_0__ === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return _popperjs_core__WEBPACK_IMPORTED_MODULE_1__.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both and markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE$1);\n }\n }\n }\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE$1);\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE$1);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME$1;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n relatedTarget: innerElem\n }) : null;\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n relatedTarget: active\n });\n if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n return;\n }\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.add(CLASS_NAME_ACTIVE);\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW$1);\n return;\n }\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW$1);\n return;\n }\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _keydown(event) {\n if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n return;\n }\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n const children = this._getChildren().filter(element => !isDisabled(element));\n let nextActiveElement;\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n }\n if (nextActiveElement) {\n nextActiveElement.focus({\n preventScroll: true\n });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null;\n }\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n if (!target) {\n return;\n }\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n outerElem.setAttribute('aria-expanded', open);\n }\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n};\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._timeout = null;\n this._hasMouseInteraction = false;\n this._hasKeyboardInteraction = false;\n this._setListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._clearTimeout();\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE);\n }\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n this._maybeScheduleHide();\n };\n this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n hide() {\n if (!this.isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n this._element.classList.add(CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n dispose() {\n this._clearTimeout();\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n super.dispose();\n }\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return;\n }\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return;\n }\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._config.delay);\n }\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout':\n {\n this._hasMouseInteraction = isInteracting;\n break;\n }\n case 'focusin':\n case 'focusout':\n {\n this._hasKeyboardInteraction = isInteracting;\n break;\n }\n }\n if (isInteracting) {\n this._clearTimeout();\n return;\n }\n const nextElement = event.relatedTarget;\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return;\n }\n this._maybeScheduleHide();\n }\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n }\n _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\n\n//# sourceMappingURL=bootstrap.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtR0FBbUcsa0NBQWtDO0FBQ3JJO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxlQUFlO0FBQ25GO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsWUFBWSxjQUFjO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsSUFBSSxJQUFJLFdBQVc7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxTQUFTLDJCQUEyQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEVBQTRFLE1BQU07QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DLGtDQUFrQyxZQUFZO0FBQzlDLHdDQUF3QyxZQUFZO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCw2Q0FBNkM7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsV0FBVztBQUNuQztBQUNBO0FBQ0EsNEJBQTRCLFlBQVk7QUFDeEMsK0NBQStDLFlBQVk7QUFDM0QsZ0NBQWdDLFlBQVk7QUFDNUMsNEJBQTRCLFlBQVk7QUFDeEMsOEJBQThCLFlBQVk7QUFDMUMsZ0NBQWdDLFlBQVk7QUFDNUMsNENBQTRDLFlBQVk7QUFDeEQsb0RBQW9ELFlBQVk7QUFDaEUsa0RBQWtELFlBQVk7QUFDOUQsdUNBQXVDLFlBQVksRUFBRSxlQUFlO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGVBQWU7QUFDeEQ7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGVBQWU7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0EscUNBQXFDLFlBQVksRUFBRSxlQUFlO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixZQUFZO0FBQ3hDLDhCQUE4QixZQUFZO0FBQzFDLDRCQUE0QixZQUFZO0FBQ3hDLDZDQUE2QyxZQUFZO0FBQ3pELGdDQUFnQyxZQUFZO0FBQzVDLDhCQUE4QixZQUFZO0FBQzFDLHVDQUF1QyxZQUFZLEVBQUUsZUFBZTtBQUNwRSxnREFBZ0QsWUFBWTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELE9BQU87QUFDdkQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsaUJBQWlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsMkNBQU07QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3REFBbUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUU7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FB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QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxTQUFTO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLFNBQVM7QUFDL0Isb0NBQW9DLFVBQVU7QUFDOUMsa0NBQWtDLFVBQVU7QUFDNUMsZ0NBQWdDLFVBQVU7QUFDMUMsa0NBQWtDLFVBQVU7QUFDNUMsMEJBQTBCLFVBQVU7QUFDcEMsOEJBQThCLFVBQVU7QUFDeEMsMEJBQTBCLFVBQVU7QUFDcEMsNEJBQTRCLFVBQVU7QUFDdEM7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxPQUFPO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRWtIO0FBQ2xIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5lc20uanM/MGE2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAgKiBCb290c3RyYXAgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IERhdGEgPSB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpO1xuICB9LFxuICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKGVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSk7XG5cbiAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICBpZiAoaW5zdGFuY2VNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwO1xuY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yO1xufTtcblxuLy8gU2hvdXQtb3V0IEFuZ3VzIENyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5jb25zdCB0b1R5cGUgPSBvYmplY3QgPT4ge1xuICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke29iamVjdH1gO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogUHVibGljIFV0aWwgQVBJXG4gKi9cblxuY29uc3QgZ2V0VUlEID0gcHJlZml4ID0+IHtcbiAgZG8ge1xuICAgIHByZWZpeCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBNQVhfVUlEKTtcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSk7XG4gIHJldHVybiBwcmVmaXg7XG59O1xuY29uc3QgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICB0cmFuc2l0aW9uRGVsYXlcbiAgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG4gIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUjtcbn07XG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSk7XG59O1xuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuY29uc3QgZ2V0RWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QuanF1ZXJ5ID8gb2JqZWN0WzBdIDogb2JqZWN0O1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgaXNWaXNpYmxlID0gZWxlbWVudCA9PiB7XG4gIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gIC8vIEhhbmRsZSBgZGV0YWlsc2AgZWxlbWVudCBhcyBpdHMgY29udGVudCBtYXkgZmFsc2llIGFwcGVhciB2aXNpYmxlIHdoZW4gaXQgaXMgY2xvc2VkXG4gIGNvbnN0IGNsb3NlZERldGFpbHMgPSBlbGVtZW50LmNsb3Nlc3QoJ2RldGFpbHM6bm90KFtvcGVuXSknKTtcbiAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG4gIH1cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5Jyk7XG4gICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xufTtcbmNvbnN0IGlzRGlzYWJsZWQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbn07XG5jb25zdCBmaW5kU2hhZG93Um9vdCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICB9XG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbn07XG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiB3aW5kb3cualF1ZXJ5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXTtcbmNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIC8vIGFkZCBsaXN0ZW5lciBvbiB0aGUgZmlyc3QgY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBpbiBsb2FkaW5nIHN0YXRlXG4gICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG5jb25zdCBkZWZpbmVKUXVlcnlQbHVnaW4gPSBwbHVnaW4gPT4ge1xuICBvbkRPTUNvbnRlbnRMb2FkZWQoKCkgPT4ge1xuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXTtcbiAgICAgICQuZm5bbmFtZV0gPSBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgZXhlY3V0ZSA9IChwb3NzaWJsZUNhbGxiYWNrLCBhcmdzID0gW10sIGRlZmF1bHRWYWx1ZSA9IHBvc3NpYmxlQ2FsbGJhY2spID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjayguLi5hcmdzKSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNTtcbiAgY29uc3QgZW11bGF0ZWREdXJhdGlvbiA9IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRyYW5zaXRpb25FbGVtZW50KSArIGR1cmF0aW9uUGFkZGluZztcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICBjb25zdCBoYW5kbGVyID0gKHtcbiAgICB0YXJnZXRcbiAgfSkgPT4ge1xuICAgIGlmICh0YXJnZXQgIT09IHRyYW5zaXRpb25FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgdHJhbnNpdGlvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gIH07XG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpO1xuICAgIH1cbiAgfSwgZW11bGF0ZWREdXJhdGlvbik7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBjb25zdCBsaXN0TGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIGxldCBpbmRleCA9IGxpc3QuaW5kZXhPZihhY3RpdmVFbGVtZW50KTtcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAvLyBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdO1xuICB9XG4gIGluZGV4ICs9IHNob3VsZEdldE5leHQgPyAxIDogLTE7XG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoO1xuICB9XG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXTtcbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZXZlbnQtaGFuZGxlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi87XG5jb25zdCBzdHJpcE5hbWVSZWdleCA9IC9cXC4uKi87XG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvO1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9OyAvLyBFdmVudHMgc3RvcmFnZVxubGV0IHVpZEV2ZW50ID0gMTtcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn07XG5jb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2V1cCcsICdtb3VzZWRvd24nLCAnY29udGV4dG1lbnUnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJywgJ3NlbGVjdHN0YXJ0JywgJ3NlbGVjdGVuZCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ29yaWVudGF0aW9uY2hhbmdlJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVybGVhdmUnLCAncG9pbnRlcmNhbmNlbCcsICdnZXN0dXJlc3RhcnQnLCAnZ2VzdHVyZWNoYW5nZScsICdnZXN0dXJlZW5kJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJywgJ3Jlc2V0JywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdsb2FkJywgJ3VubG9hZCcsICdiZWZvcmV1bmxvYWQnLCAncmVzaXplJywgJ21vdmUnLCAnRE9NQ29udGVudExvYWRlZCcsICdyZWFkeXN0YXRlY2hhbmdlJywgJ2Vycm9yJywgJ2Fib3J0JywgJ3Njcm9sbCddKTtcblxuLyoqXG4gKiBQcml2YXRlIG1ldGhvZHNcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRXZlbnRVaWQoZWxlbWVudCwgdWlkKSB7XG4gIHJldHVybiB1aWQgJiYgYCR7dWlkfTo6JHt1aWRFdmVudCsrfWAgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrO1xufVxuZnVuY3Rpb24gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChlbGVtZW50KTtcbiAgZWxlbWVudC51aWRFdmVudCA9IHVpZDtcbiAgZXZlbnRSZWdpc3RyeVt1aWRdID0gZXZlbnRSZWdpc3RyeVt1aWRdIHx8IHt9O1xuICByZXR1cm4gZXZlbnRSZWdpc3RyeVt1aWRdO1xufVxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgIGRlbGVnYXRlVGFyZ2V0OiBlbGVtZW50XG4gICAgfSk7XG4gICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pO1xuICB9O1xufVxuZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIGZvciAobGV0IHtcbiAgICAgIHRhcmdldFxuICAgIH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgICAgIGRlbGVnYXRlVGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGFyZ2V0LCBbZXZlbnRdKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGV2ZW50cykuZmluZChldmVudCA9PiBldmVudC5jYWxsYWJsZSA9PT0gY2FsbGFibGUgJiYgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yID09PSBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gIGNvbnN0IGlzRGVsZWdhdGVkID0gdHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnO1xuICAvLyBUT0RPOiB0b29sdGlwIHBhc3NlcyBgZmFsc2VgIGluc3RlYWQgb2Ygc2VsZWN0b3IsIHNvIHdlIG5lZWQgdG8gY2hlY2tcbiAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IGhhbmRsZXIgfHwgZGVsZWdhdGlvbkZ1bmN0aW9uO1xuICBsZXQgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KG9yaWdpbmFsVHlwZUV2ZW50KTtcbiAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgfVxuICByZXR1cm4gW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XTtcbn1cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgb25lT2ZmKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcblxuICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gIC8vIHRoaXMgcHJldmVudHMgdGhlIGhhbmRsZXIgZnJvbSBiZWluZyBkaXNwYXRjaGVkIHRoZSBzYW1lIHdheSBhcyBtb3VzZW92ZXIgb3IgbW91c2VvdXQgZG9lc1xuICBpZiAob3JpZ2luYWxUeXBlRXZlbnQgaW4gY3VzdG9tRXZlbnRzKSB7XG4gICAgY29uc3Qgd3JhcEZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgY2FsbGFibGUgPSB3cmFwRnVuY3Rpb24oY2FsbGFibGUpO1xuICB9XG4gIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pO1xuICBjb25zdCBwcmV2aW91c0Z1bmN0aW9uID0gZmluZEhhbmRsZXIoaGFuZGxlcnMsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiA9IHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmICYmIG9uZU9mZjtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGNhbGxhYmxlLCBvcmlnaW5hbFR5cGVFdmVudC5yZXBsYWNlKG5hbWVzcGFjZVJlZ2V4LCAnJykpO1xuICBjb25zdCBmbiA9IGlzRGVsZWdhdGVkID8gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDogYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBjYWxsYWJsZSk7XG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGw7XG4gIGZuLmNhbGxhYmxlID0gY2FsbGFibGU7XG4gIGZuLm9uZU9mZiA9IG9uZU9mZjtcbiAgZm4udWlkRXZlbnQgPSB1aWQ7XG4gIGhhbmRsZXJzW3VpZF0gPSBmbjtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICBpZiAoIWZuKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpO1xuICBkZWxldGUgZXZlbnRzW3R5cGVFdmVudF1bZm4udWlkRXZlbnRdO1xufVxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fTtcbiAgZm9yIChjb25zdCBbaGFuZGxlcktleSwgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0VHlwZUV2ZW50KGV2ZW50KSB7XG4gIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgZXZlbnQgPSBldmVudC5yZXBsYWNlKHN0cmlwTmFtZVJlZ2V4LCAnJyk7XG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50O1xufVxuY29uc3QgRXZlbnRIYW5kbGVyID0ge1xuICBvbihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBmYWxzZSk7XG4gIH0sXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKTtcbiAgfSxcbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IHR5cGVFdmVudCAhPT0gb3JpZ2luYWxUeXBlRXZlbnQ7XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgIGNvbnN0IGlzTmFtZXNwYWNlID0gb3JpZ2luYWxUeXBlRXZlbnQuc3RhcnRzV2l0aCgnLicpO1xuICAgIGlmICh0eXBlb2YgY2FsbGFibGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgIGlmICghT2JqZWN0LmtleXMoc3RvcmVFbGVtZW50RXZlbnQpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5SGFuZGxlcnMsIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKTtcbiAgICAgIGlmICghaW5OYW1lc3BhY2UgfHwgb3JpZ2luYWxUeXBlRXZlbnQuaW5jbHVkZXMoaGFuZGxlcktleSkpIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KCk7XG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KTtcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IGV2ZW50ICE9PSB0eXBlRXZlbnQ7XG4gICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbDtcbiAgICBsZXQgYnViYmxlcyA9IHRydWU7XG4gICAgbGV0IG5hdGl2ZURpc3BhdGNoID0gdHJ1ZTtcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICBqUXVlcnlFdmVudCA9ICQuRXZlbnQoZXZlbnQsIGFyZ3MpO1xuICAgICAgJChlbGVtZW50KS50cmlnZ2VyKGpRdWVyeUV2ZW50KTtcbiAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICBkZWZhdWx0UHJldmVudGVkID0galF1ZXJ5RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfVxuICAgIGNvbnN0IGV2dCA9IGh5ZHJhdGVPYmoobmV3IEV2ZW50KGV2ZW50LCB7XG4gICAgICBidWJibGVzLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pLCBhcmdzKTtcbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChuYXRpdmVEaXNwYXRjaCkge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgfVxuICAgIGlmIChldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBqUXVlcnlFdmVudCkge1xuICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGV2dDtcbiAgfVxufTtcbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBOdW1iZXIodmFsdWUpLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YCk7XG59XG5jb25zdCBNYW5pcHVsYXRvciA9IHtcbiAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCwgdmFsdWUpO1xuICB9LFxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApO1xuICB9LFxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb25zdCBic0tleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykgJiYgIWtleS5zdGFydHNXaXRoKCdic0NvbmZpZycpKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBic0tleXMpIHtcbiAgICAgIGxldCBwdXJlS2V5ID0ga2V5LnJlcGxhY2UoL15icy8sICcnKTtcbiAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aCk7XG4gICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9LFxuICBnZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApKTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29uZmlnLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgZWxlbWVudCkge1xuICAgIGNvbnN0IGpzb25Db25maWcgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsICdjb25maWcnKSA6IHt9OyAvLyB0cnkgdG8gcGFyc2VcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGpzb25Db25maWcgPT09ICdvYmplY3QnID8ganNvbkNvbmZpZyA6IHt9KSxcbiAgICAgIC4uLihpc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH07XG4gIH1cbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcsIGNvbmZpZ1R5cGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSkge1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCBleHBlY3RlZFR5cGVzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdUeXBlcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW3Byb3BlcnR5XTtcbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGlzRWxlbWVudCh2YWx1ZSkgPyAnZWxlbWVudCcgOiB0b1R5cGUodmFsdWUpO1xuICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IuTkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBWRVJTSU9OID0gJzUuMy4zJztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnLCB0aGlzLl9lbGVtZW50KTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHJldHVybiBEYXRhLmdldChnZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKTtcbiAgfVxuICBzdGF0aWMgZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCBjb25maWcgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlKGVsZW1lbnQpIHx8IG5ldyB0aGlzKGVsZW1lbnQsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbCk7XG4gIH1cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OO1xuICB9XG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gO1xuICB9XG4gIHN0YXRpYyBnZXQgRVZFTlRfS0VZKCkge1xuICAgIHJldHVybiBgLiR7dGhpcy5EQVRBX0tFWX1gO1xuICB9XG4gIHN0YXRpYyBldmVudE5hbWUobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpO1xuICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICBsZXQgaHJlZkF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgIWhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgIGlmIChocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBocmVmQXR0cmlidXRlID0gYCMke2hyZWZBdHRyaWJ1dGUuc3BsaXQoJyMnKVsxXX1gO1xuICAgIH1cbiAgICBzZWxlY3RvciA9IGhyZWZBdHRyaWJ1dGUgJiYgaHJlZkF0dHJpYnV0ZSAhPT0gJyMnID8gaHJlZkF0dHJpYnV0ZS50cmltKCkgOiBudWxsO1xuICB9XG4gIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBwYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGw7XG59O1xuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpO1xuICB9LFxuICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IuY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7XG4gIH0sXG4gIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5lbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpO1xuICB9LFxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgIHBhcmVudHMucHVzaChhbmNlc3Rvcik7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xuICB9LFxuICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbcHJldmlvdXNdO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG4gIC8vIFRPRE86IHRoaXMgaXMgbm93IHVudXNlZDsgcmVtb3ZlIGxhdGVyIGFsb25nIHdpdGggcHJldigpXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICBpZiAobmV4dC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW25leHRdO1xuICAgICAgfVxuICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG4gIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICBjb25zdCBmb2N1c2FibGVzID0gWydhJywgJ2J1dHRvbicsICdpbnB1dCcsICd0ZXh0YXJlYScsICdzZWxlY3QnLCAnZGV0YWlscycsICdbdGFiaW5kZXhdJywgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJ10ubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfTpub3QoW3RhYmluZGV4Xj1cIi1cIl0pYCkuam9pbignLCcpO1xuICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpc0Rpc2FibGVkKGVsKSAmJiBpc1Zpc2libGUoZWwpKTtcbiAgfSxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgOiBudWxsO1xuICB9LFxuICBnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW107XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBlbmFibGVEaXNtaXNzVHJpZ2dlciA9IChjb21wb25lbnQsIG1ldGhvZCA9ICdoaWRlJykgPT4ge1xuICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YDtcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FO1xuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIGNsaWNrRXZlbnQsIGBbZGF0YS1icy1kaXNtaXNzPVwiJHtuYW1lfVwiXWAsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcblxuICAgIC8vIE1ldGhvZCBhcmd1bWVudCBpcyBsZWZ0LCBmb3IgQWxlcnQgYW5kIG9ubHksIGFzIGl0IGRvZXNuJ3QgaW1wbGVtZW50IHRoZSAnaGlkZScgbWV0aG9kXG4gICAgaW5zdGFuY2VbbWV0aG9kXSgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGYgPSAnYWxlcnQnO1xuY29uc3QgREFUQV9LRVkkYSA9ICdicy5hbGVydCc7XG5jb25zdCBFVkVOVF9LRVkkYiA9IGAuJHtEQVRBX0tFWSRhfWA7XG5jb25zdCBFVkVOVF9DTE9TRSA9IGBjbG9zZSR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IEVWRU5UX0NMT1NFRCA9IGBjbG9zZWQke0VWRU5UX0tFWSRifWA7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkNSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ4ID0gJ3Nob3cnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBBbGVydCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRmO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGNsb3NlKCkge1xuICAgIGNvbnN0IGNsb3NlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRSk7XG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDgpO1xuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkNSk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rlc3Ryb3lFbGVtZW50KCkge1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0VEKTtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEFsZXJ0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQWxlcnQpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZSA9ICdidXR0b24nO1xuY29uc3QgREFUQV9LRVkkOSA9ICdicy5idXR0b24nO1xuY29uc3QgRVZFTlRfS0VZJGEgPSBgLiR7REFUQV9LRVkkOX1gO1xuY29uc3QgREFUQV9BUElfS0VZJDYgPSAnLmRhdGEtYXBpJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDMgPSAnYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJztcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDYgPSBgY2xpY2ske0VWRU5UX0tFWSRhfSR7REFUQV9BUElfS0VZJDZ9YDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSQzKSk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmIChjb25maWcgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDYsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUsIGV2ZW50ID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUkNSk7XG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pO1xuICBkYXRhLnRvZ2dsZSgpO1xufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEJ1dHRvbik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZCA9ICdzd2lwZSc7XG5jb25zdCBFVkVOVF9LRVkkOSA9ICcuYnMuc3dpcGUnO1xuY29uc3QgRVZFTlRfVE9VQ0hTVEFSVCA9IGB0b3VjaHN0YXJ0JHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hNT1ZFID0gYHRvdWNobW92ZSR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1RPVUNIRU5EID0gYHRvdWNoZW5kJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfUE9JTlRFUkRPV04gPSBgcG9pbnRlcmRvd24ke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSVVAgPSBgcG9pbnRlcnVwJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgUE9JTlRFUl9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJztcbmNvbnN0IENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCA9ICdwb2ludGVyLWV2ZW50JztcbmNvbnN0IFNXSVBFX1RIUkVTSE9MRCA9IDQwO1xuY29uc3QgRGVmYXVsdCRjID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYyA9IHtcbiAgZW5kQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBsZWZ0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICByaWdodENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU3dpcGUgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIGlmICghZWxlbWVudCB8fCAhU3dpcGUuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9kZWx0YVggPSAwO1xuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KTtcbiAgICB0aGlzLl9pbml0RXZlbnRzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRjO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGM7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGQ7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWSQ5KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3N0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cykge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgfVxuICB9XG4gIF9lbmQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKCk7XG4gICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuZW5kQ2FsbGJhY2spO1xuICB9XG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgPyAwIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fZGVsdGFYO1xuICB9XG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpO1xuICAgIGlmIChhYnNEZWx0YVggPD0gU1dJUEVfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGFic0RlbHRhWCAvIHRoaXMuX2RlbHRhWDtcbiAgICB0aGlzLl9kZWx0YVggPSAwO1xuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4ZWN1dGUoZGlyZWN0aW9uID4gMCA/IHRoaXMuX2NvbmZpZy5yaWdodENhbGxiYWNrIDogdGhpcy5fY29uZmlnLmxlZnRDYWxsYmFjayk7XG4gIH1cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUlVQLCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hTVEFSVCwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSE1PVkUsIGV2ZW50ID0+IHRoaXMuX21vdmUoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSk7XG4gICAgfVxuICB9XG4gIF9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzICYmIChldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1BFTiB8fCBldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1RPVUNIKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBjYXJvdXNlbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGMgPSAnY2Fyb3VzZWwnO1xuY29uc3QgREFUQV9LRVkkOCA9ICdicy5jYXJvdXNlbCc7XG5jb25zdCBFVkVOVF9LRVkkOCA9IGAuJHtEQVRBX0tFWSQ4fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNSA9ICcuZGF0YS1hcGknO1xuY29uc3QgQVJST1dfTEVGVF9LRVkkMSA9ICdBcnJvd0xlZnQnO1xuY29uc3QgQVJST1dfUklHSFRfS0VZJDEgPSAnQXJyb3dSaWdodCc7XG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwOyAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0JztcbmNvbnN0IE9SREVSX1BSRVYgPSAncHJldic7XG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0JztcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCc7XG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0tFWURPV04kMSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiQxID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFJDEgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQzID0gYGxvYWQke0VWRU5UX0tFWSQ4fSR7REFUQV9BUElfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDUgPSBgY2xpY2ske0VWRU5UX0tFWSQ4fSR7REFUQV9BUElfS0VZJDV9YDtcbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMiA9ICdhY3RpdmUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSc7XG5jb25zdCBDTEFTU19OQU1FX0VORCA9ICdjYXJvdXNlbC1pdGVtLWVuZCc7XG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnO1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCc7XG5jb25zdCBDTEFTU19OQU1FX1BSRVYgPSAnY2Fyb3VzZWwtaXRlbS1wcmV2JztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0lURU0gPSAnLmNhcm91c2VsLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSBTRUxFQ1RPUl9BQ1RJVkUgKyBTRUxFQ1RPUl9JVEVNO1xuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJztcbmNvbnN0IFNFTEVDVE9SX0lORElDQVRPUlMgPSAnLmNhcm91c2VsLWluZGljYXRvcnMnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1JJREUgPSAnW2RhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJdJztcbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWSQxXTogRElSRUNUSU9OX1JJR0hULFxuICBbQVJST1dfUklHSFRfS0VZJDFdOiBESVJFQ1RJT05fTEVGVFxufTtcbmNvbnN0IERlZmF1bHQkYiA9IHtcbiAgaW50ZXJ2YWw6IDUwMDAsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBwYXVzZTogJ2hvdmVyJyxcbiAgcmlkZTogZmFsc2UsXG4gIHRvdWNoOiB0cnVlLFxuICB3cmFwOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYiA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJyxcbiAgLy8gVE9ETzp2NiByZW1vdmUgYm9vbGVhbiBzdXBwb3J0XG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHJpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgdG91Y2g6ICdib29sZWFuJyxcbiAgd3JhcDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDYXJvdXNlbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBudWxsO1xuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIGlmICh0aGlzLl9jb25maWcucmlkZSA9PT0gQ0xBU1NfTkFNRV9DQVJPVVNFTCkge1xuICAgICAgdGhpcy5jeWNsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGI7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYztcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpO1xuICB9XG4gIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAvLyBGSVhNRSBUT0RPIHVzZSBgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlYFxuICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVudCBpc24ndCB2aXNpYmxlXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgaXNWaXNpYmxlKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH1cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKTtcbiAgfVxuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICB9XG4gIGN5Y2xlKCkge1xuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKTtcbiAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCgpO1xuICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5uZXh0V2hlblZpc2libGUoKSwgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgfVxuICBfbWF5YmVFbmFibGVDeWNsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy5jeWNsZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jeWNsZSgpO1xuICB9XG4gIHRvKGluZGV4KSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtcygpO1xuICAgIGlmIChpbmRleCA+IGl0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy50byhpbmRleCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9nZXRBY3RpdmUoKSk7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgICB0aGlzLl9zbGlkZShvcmRlciwgaXRlbXNbaW5kZXhdKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9zd2lwZUhlbHBlcikge1xuICAgICAgdGhpcy5fc3dpcGVIZWxwZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgPSBjb25maWcuaW50ZXJ2YWw7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04kMSwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiQxLCAoKSA9PiB0aGlzLnBhdXNlKCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUkMSwgKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiBTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGZvciAoY29uc3QgaW1nIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICB9XG4gICAgY29uc3QgZW5kQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlICE9PSAnaG92ZXInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgaWYgKHRoaXMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgICB9O1xuICAgIGNvbnN0IHN3aXBlQ29uZmlnID0ge1xuICAgICAgbGVmdENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9MRUZUKSksXG4gICAgICByaWdodENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9SSUdIVCkpLFxuICAgICAgZW5kQ2FsbGJhY2s6IGVuZENhbGxCYWNrXG4gICAgfTtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG5ldyBTd2lwZSh0aGlzLl9lbGVtZW50LCBzd2lwZUNvbmZpZyk7XG4gIH1cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldO1xuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbikpO1xuICAgIH1cbiAgfVxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbXMoKS5pbmRleE9mKGVsZW1lbnQpO1xuICB9XG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRSwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpO1xuICAgIGFjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICAgIGNvbnN0IG5ld0FjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYFtkYXRhLWJzLXNsaWRlLXRvPVwiJHtpbmRleH1cIl1gLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgaWYgKG5ld0FjdGl2ZUluZGljYXRvcikge1xuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3Iuc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRJbnRlcnZhbCA9IE51bWJlci5wYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1pbnRlcnZhbCcpLCAxMCk7XG4gICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gZWxlbWVudEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWw7XG4gIH1cbiAgX3NsaWRlKG9yZGVyLCBlbGVtZW50ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2dldEFjdGl2ZSgpO1xuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUO1xuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRJdGVtcygpLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKTtcbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudCk7XG4gICAgY29uc3QgdHJpZ2dlckV2ZW50ID0gZXZlbnROYW1lID0+IHtcbiAgICAgIHJldHVybiBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBldmVudE5hbWUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlciksXG4gICAgICAgIGZyb206IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KSxcbiAgICAgICAgdG86IG5leHRFbGVtZW50SW5kZXhcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRyaWdnZXJFdmVudChFVkVOVF9TTElERSk7XG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAvLyBTb21lIHdlaXJkbmVzcyBpcyBoYXBwZW5pbmcsIHNvIHdlIGJhaWxcbiAgICAgIC8vIFRPRE86IGNoYW5nZSB0ZXN0cyB0aGF0IHVzZSBlbXB0eSBkaXZzIHRvIGF2b2lkIHRoaXMgY2hlY2tcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudEluZGV4KTtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkQ7XG4gICAgY29uc3Qgb3JkZXJDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX05FWFQgOiBDTEFTU19OQU1FX1BSRVY7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSk7XG4gICAgcmVmbG93KG5leHRFbGVtZW50KTtcbiAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSk7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDIsIG9yZGVyQ2xhc3NOYW1lLCBkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRyaWdnZXJFdmVudChFVkVOVF9TTElEKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKTtcbiAgfVxuICBfZ2V0QWN0aXZlKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfZ2V0SXRlbXMoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTSwgdGhpcy5fZWxlbWVudCk7XG4gIH1cbiAgX2NsZWFySW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfUFJFViA6IE9SREVSX05FWFQ7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVY7XG4gIH1cbiAgX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgfVxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRhdGEudG8oY29uZmlnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSwgU0VMRUNUT1JfREFUQV9TTElERSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IGNhcm91c2VsID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBjb25zdCBzbGlkZUluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtc2xpZGUtdG8nKTtcbiAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICBjYXJvdXNlbC50byhzbGlkZUluZGV4KTtcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZSh0aGlzLCAnc2xpZGUnKSA9PT0gJ25leHQnKSB7XG4gICAgY2Fyb3VzZWwubmV4dCgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNhcm91c2VsLnByZXYoKTtcbiAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQzLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKTtcbiAgZm9yIChjb25zdCBjYXJvdXNlbCBvZiBjYXJvdXNlbHMpIHtcbiAgICBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKGNhcm91c2VsKTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENhcm91c2VsKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYiA9ICdjb2xsYXBzZSc7XG5jb25zdCBEQVRBX0tFWSQ3ID0gJ2JzLmNvbGxhcHNlJztcbmNvbnN0IEVWRU5UX0tFWSQ3ID0gYC4ke0RBVEFfS0VZJDd9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ0ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9TSE9XJDYgPSBgc2hvdyR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDYgPSBgc2hvd24ke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9ISURFJDYgPSBgaGlkZSR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ2ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDQgPSBgY2xpY2ske0VWRU5UX0tFWSQ3fSR7REFUQV9BUElfS0VZJDR9YDtcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ3ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFRCA9ICdjb2xsYXBzZWQnO1xuY29uc3QgQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4gPSBgOnNjb3BlIC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YDtcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJztcbmNvbnN0IFdJRFRIID0gJ3dpZHRoJztcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFUyA9ICcuY29sbGFwc2Uuc2hvdywgLmNvbGxhcHNlLmNvbGxhcHNpbmcnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCA9ICdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXSc7XG5jb25zdCBEZWZhdWx0JGEgPSB7XG4gIHBhcmVudDogbnVsbCxcbiAgdG9nZ2xlOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYSA9IHtcbiAgcGFyZW50OiAnKG51bGx8ZWxlbWVudCknLFxuICB0b2dnbGU6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl90cmlnZ2VyQXJyYXkgPSBbXTtcbiAgICBjb25zdCB0b2dnbGVMaXN0ID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdG9nZ2xlTGlzdCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBTZWxlY3RvckVuZ2luZS5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pO1xuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpLmZpbHRlcihmb3VuZEVsZW1lbnQgPT4gZm91bmRFbGVtZW50ID09PSB0aGlzLl9lbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChlbGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0aGlzLl9pc1Nob3duKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRhO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYWN0aXZlQ2hpbGRyZW4gPSBbXTtcblxuICAgIC8vIGZpbmQgYWN0aXZlIGNoaWxkcmVuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIGFjdGl2ZUNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0FDVElWRVMpLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQpLm1hcChlbGVtZW50ID0+IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgICB0b2dnbGU6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChhY3RpdmVDaGlsZHJlbi5sZW5ndGggJiYgYWN0aXZlQ2hpbGRyZW5bMF0uX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYWN0aXZlSW5zdGFuY2Ugb2YgYWN0aXZlQ2hpbGRyZW4pIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlLmhpZGUoKTtcbiAgICB9XG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IDA7XG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ2KTtcbiAgICB9O1xuICAgIGNvbnN0IGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSk7XG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWA7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGA7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNik7XG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl19cHhgO1xuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0aGlzLl90cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRyaWdnZXIpO1xuICAgICAgaWYgKGVsZW1lbnQgJiYgIXRoaXMuX2lzU2hvd24oZWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFt0cmlnZ2VyXSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ2KTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFQ7XG4gIH1cbiAgX2luaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfREFUQV9UT0dHTEUkNCk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFtlbGVtZW50XSwgdGhpcy5faXNTaG93bihzZWxlY3RlZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KTtcbiAgICAvLyByZW1vdmUgY2hpbGRyZW4gaWYgZ3JlYXRlciBkZXB0aFxuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZWxlbWVudCA9PiAhY2hpbGRyZW4uaW5jbHVkZXMoZWxlbWVudCkpO1xuICB9XG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyaWdnZXJBcnJheSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQ09MTEFQU0VELCAhaXNPcGVuKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICBjb25zdCBfY29uZmlnID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBfY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDQsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQsIGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IodGhpcykpIHtcbiAgICBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9KS50b2dnbGUoKTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENvbGxhcHNlKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRyb3Bkb3duLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYSA9ICdkcm9wZG93bic7XG5jb25zdCBEQVRBX0tFWSQ2ID0gJ2JzLmRyb3Bkb3duJztcbmNvbnN0IEVWRU5UX0tFWSQ2ID0gYC4ke0RBVEFfS0VZJDZ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQzID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFU0NBUEVfS0VZJDIgPSAnRXNjYXBlJztcbmNvbnN0IFRBQl9LRVkkMSA9ICdUYWInO1xuY29uc3QgQVJST1dfVVBfS0VZJDEgPSAnQXJyb3dVcCc7XG5jb25zdCBBUlJPV19ET1dOX0tFWSQxID0gJ0Fycm93RG93bic7XG5jb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyOyAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFJDUgPSBgaGlkZSR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ1ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX1NIT1ckNSA9IGBzaG93JHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPV04kNSA9IGBzaG93biR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMgPSBgY2xpY2ske0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZVVBfREFUQV9BUEkgPSBga2V5dXAke0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ2ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVAgPSAnZHJvcHVwJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFNUQVJUID0gJ2Ryb3BzdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUF9DRU5URVIgPSAnZHJvcHVwLWNlbnRlcic7XG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMyA9ICdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTiA9IGAke1NFTEVDVE9SX0RBVEFfVE9HR0xFJDN9LiR7Q0xBU1NfTkFNRV9TSE9XJDZ9YDtcbmNvbnN0IFNFTEVDVE9SX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnO1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSID0gJy5uYXZiYXInO1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdic7XG5jb25zdCBTRUxFQ1RPUl9WSVNJQkxFX0lURU1TID0gJy5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfVE9QRU5EID0gaXNSVEwoKSA/ICd0b3Atc3RhcnQnIDogJ3RvcC1lbmQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTSA9IGlzUlRMKCkgPyAnYm90dG9tLWVuZCcgOiAnYm90dG9tLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfUklHSFQgPSBpc1JUTCgpID8gJ2xlZnQtc3RhcnQnIDogJ3JpZ2h0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9MRUZUID0gaXNSVEwoKSA/ICdyaWdodC1zdGFydCcgOiAnbGVmdC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSID0gJ2JvdHRvbSc7XG5jb25zdCBEZWZhdWx0JDkgPSB7XG4gIGF1dG9DbG9zZTogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBkaXNwbGF5OiAnZHluYW1pYycsXG4gIG9mZnNldDogWzAsIDJdLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHJlZmVyZW5jZTogJ3RvZ2dsZSdcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ5ID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZTsgLy8gZHJvcGRvd24gd3JhcHBlclxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICB0aGlzLl9tZW51ID0gU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fCBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KTtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkOTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRhO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93bigpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKTtcbiAgfVxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY3JlYXRlUG9wcGVyKCk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgIXRoaXMuX3BhcmVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUl9OQVYpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9O1xuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNSwgcmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSBzdXBlci5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmIHR5cGVvZiBjb25maWcucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUG9wcGVyIHZpcnR1YWwgZWxlbWVudHMgcmVxdWlyZSBhIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2RcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7TkFNRSRhLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCJyZWZlcmVuY2VcIiBwcm92aWRlZCB0eXBlIFwib2JqZWN0XCIgd2l0aG91dCBhIHJlcXVpcmVkIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIgbWV0aG9kLmApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jcmVhdGVQb3BwZXIoKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgIH1cbiAgICBsZXQgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50O1xuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gZ2V0RWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7XG4gICAgfVxuICAgIGNvbnN0IHBvcHBlckNvbmZpZyA9IHRoaXMuX2dldFBvcHBlckNvbmZpZygpO1xuICAgIHRoaXMuX3BvcHBlciA9IFBvcHBlci5jcmVhdGVQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgdGhpcy5fbWVudSwgcG9wcGVyQ29uZmlnKTtcbiAgfVxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICB9XG4gIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgcGFyZW50RHJvcGRvd24gPSB0aGlzLl9wYXJlbnQ7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BFTkQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1JJR0hUO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfVE9QQ0VOVEVSO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9CT1RUT01DRU5URVI7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byB0cmltIHRoZSB2YWx1ZSBiZWNhdXNlIGN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBhbHNvIGluY2x1ZGUgc3BhY2VzXG4gICAgY29uc3QgaXNFbmQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lbnUpLmdldFByb3BlcnR5VmFsdWUoJy0tYnMtcG9zaXRpb24nKS50cmltKCkgPT09ICdlbmQnO1xuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVApKSB7XG4gICAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfVE9QRU5EIDogUExBQ0VNRU5UX1RPUDtcbiAgICB9XG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT007XG4gIH1cbiAgX2RldGVjdE5hdmJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUikgIT09IG51bGw7XG4gIH1cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvZmZzZXRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKTsgLy8gVE9ETzogdjYgcmVtb3ZlXG4gICAgICBkZWZhdWx0QnNQb3BwZXJDb25maWcubW9kaWZpZXJzID0gW3tcbiAgICAgICAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1dO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9O1xuICB9XG4gIF9zZWxlY3RNZW51SXRlbSh7XG4gICAga2V5LFxuICAgIHRhcmdldFxuICB9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMsIHRoaXMuX21lbnUpLmZpbHRlcihlbGVtZW50ID0+IGlzVmlzaWJsZShlbGVtZW50KSk7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0YXJnZXQgaXNuJ3QgaW5jbHVkZWQgaW4gaXRlbXMgKGUuZy4gd2hlbiBleHBhbmRpbmcgdGhlIGRyb3Bkb3duKVxuICAgIC8vIGFsbG93IGN5Y2xpbmcgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gY2FzZSBrZXkgZXF1YWxzIEFSUk9XX1VQX0tFWVxuICAgIGdldE5leHRBY3RpdmVFbGVtZW50KGl0ZW1zLCB0YXJnZXQsIGtleSA9PT0gQVJST1dfRE9XTl9LRVkkMSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxuICBzdGF0aWMgY2xlYXJNZW51cyhldmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IFJJR0hUX01PVVNFX0JVVFRPTiB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSQxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Ub2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTik7XG4gICAgZm9yIChjb25zdCB0b2dnbGUgb2Ygb3BlblRvZ2dsZXMpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBEcm9wZG93bi5nZXRJbnN0YW5jZSh0b2dnbGUpO1xuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSk7XG4gICAgICBpZiAoY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdpbnNpZGUnICYmICFpc01lbnVUYXJnZXQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgaWYgKGNvbnRleHQuX21lbnUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkkMSB8fCAvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudFxuICAgICAgfTtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50O1xuICAgICAgfVxuICAgICAgY29udGV4dC5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGFuIFVQIHwgRE9XTiB8IEVTQ0FQRSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhICYmIGlmIGtleSBpcyBvdGhlciB0aGFuIEVTQ0FQRSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG5cbiAgICBjb25zdCBpc0lucHV0ID0gL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSk7XG4gICAgY29uc3QgaXNFc2NhcGVFdmVudCA9IGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSQyO1xuICAgIGNvbnN0IGlzVXBPckRvd25FdmVudCA9IFtBUlJPV19VUF9LRVkkMSwgQVJST1dfRE9XTl9LRVkkMV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICBpZiAoIWlzVXBPckRvd25FdmVudCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNJbnB1dCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIGNvbnN0IGdldFRvZ2dsZUJ1dHRvbiA9IHRoaXMubWF0Y2hlcyhTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKSA/IHRoaXMgOiBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpWzBdIHx8IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMylbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UoZ2V0VG9nZ2xlQnV0dG9uKTtcbiAgICBpZiAoaXNVcE9yRG93bkV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGluc3RhbmNlLnNob3coKTtcbiAgICAgIGluc3RhbmNlLl9zZWxlY3RNZW51SXRlbShldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS5faXNTaG93bigpKSB7XG4gICAgICAvLyBlbHNlIGlzIGVzY2FwZSBhbmQgd2UgY2hlY2sgaWYgaXQgaXMgc2hvd25cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgZ2V0VG9nZ2xlQnV0dG9uLmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcik7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcik7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMsIERyb3Bkb3duLmNsZWFyTWVudXMpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cyk7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpO1xufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvYmFja2Ryb3AuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ5ID0gJ2JhY2tkcm9wJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ0ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDUgPSAnc2hvdyc7XG5jb25zdCBFVkVOVF9NT1VTRURPV04gPSBgbW91c2Vkb3duLmJzLiR7TkFNRSQ5fWA7XG5jb25zdCBEZWZhdWx0JDggPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgY2xpY2tDYWxsYmFjazogbnVsbCxcbiAgaXNBbmltYXRlZDogZmFsc2UsXG4gIGlzVmlzaWJsZTogdHJ1ZSxcbiAgLy8gaWYgZmFsc2UsIHdlIHVzZSB0aGUgYmFja2Ryb3AgaGVscGVyIHdpdGhvdXQgYWRkaW5nIGFueSBlbGVtZW50IHRvIHRoZSBkb21cbiAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkOCA9IHtcbiAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgY2xpY2tDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGlzQW5pbWF0ZWQ6ICdib29sZWFuJyxcbiAgaXNWaXNpYmxlOiAnYm9vbGVhbicsXG4gIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ4O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDg7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdyhjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FwcGVuZCgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3coZWxlbWVudCk7XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNSk7XG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuICBoaWRlKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDUpO1xuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICghdGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTik7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9nZXRFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudCkge1xuICAgICAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWU7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUkNCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50ID0gYmFja2Ryb3A7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50O1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpO1xuICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCBFVkVOVF9NT1VTRURPV04sICgpID0+IHtcbiAgICAgIGV4ZWN1dGUodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSB0cnVlO1xuICB9XG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkOCA9ICdmb2N1c3RyYXAnO1xuY29uc3QgREFUQV9LRVkkNSA9ICdicy5mb2N1c3RyYXAnO1xuY29uc3QgRVZFTlRfS0VZJDUgPSBgLiR7REFUQV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfRk9DVVNJTiQyID0gYGZvY3VzaW4ke0VWRU5UX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX1RBQiA9IGBrZXlkb3duLnRhYiR7RVZFTlRfS0VZJDV9YDtcbmNvbnN0IFRBQl9LRVkgPSAnVGFiJztcbmNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJztcbmNvbnN0IFRBQl9OQVZfQkFDS1dBUkQgPSAnYmFja3dhcmQnO1xuY29uc3QgRGVmYXVsdCQ3ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNyA9IHtcbiAgYXV0b2ZvY3VzOiAnYm9vbGVhbicsXG4gIHRyYXBFbGVtZW50OiAnZWxlbWVudCdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEZvY3VzVHJhcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbDtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDc7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkODtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgIHRoaXMuX2NvbmZpZy50cmFwRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkkNSk7IC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiQyLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpO1xuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTtcbiAgfVxuICBkZWFjdGl2YXRlKCkge1xuICAgIGlmICghdGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkkNSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9oYW5kbGVGb2N1c2luKGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgdHJhcEVsZW1lbnRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KTtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cmFwRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkQ7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQgPSAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCc7XG5jb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCc7XG5jb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnO1xuY29uc3QgUFJPUEVSVFlfTUFSR0lOID0gJ21hcmdpbi1yaWdodCc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbEJhckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aCk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKTtcbiAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlIC0gd2lkdGgpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTik7XG4gIH1cbiAgaXNPdmVyZmxvd2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXaWR0aCgpID4gMDtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rpc2FibGVPdmVyRmxvdygpIHtcbiAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cbiAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIGAke2NhbGxiYWNrKE51bWJlci5wYXJzZUZsb2F0KGNhbGN1bGF0ZWRWYWx1ZSkpfXB4YCk7XG4gICAgfTtcbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gIH1cbiAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICBpZiAoYWN0dWFsVmFsdWUpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSwgYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgfVxuICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBwcm9wZXJ0eSBpZiB0aGUgdmFsdWUgaXMgYG51bGxgOyB0aGUgdmFsdWUgY2FuIGFsc28gYmUgemVyb1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIHZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgfVxuICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkge1xuICAgICAgY2FsbEJhY2soc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlbCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgY2FsbEJhY2soc2VsKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNyA9ICdtb2RhbCc7XG5jb25zdCBEQVRBX0tFWSQ0ID0gJ2JzLm1vZGFsJztcbmNvbnN0IEVWRU5UX0tFWSQ0ID0gYC4ke0RBVEFfS0VZJDR9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQyID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFU0NBUEVfS0VZJDEgPSAnRXNjYXBlJztcbmNvbnN0IEVWRU5UX0hJREUkNCA9IGBoaWRlJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQkMSA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfSElEREVOJDQgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfU0hPVyQ0ID0gYHNob3cke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ0ID0gYHNob3duJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfUkVTSVpFJDEgPSBgcmVzaXplJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MkMSA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQyID0gYGNsaWNrJHtFVkVOVF9LRVkkNH0ke0RBVEFfQVBJX0tFWSQyfWA7XG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3Blbic7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMyA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ0ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJztcbmNvbnN0IE9QRU5fU0VMRUNUT1IkMSA9ICcubW9kYWwuc2hvdyc7XG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZyc7XG5jb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5JztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDIgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nO1xuY29uc3QgRGVmYXVsdCQ2ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAgZm9jdXM6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNiA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgZm9jdXM6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ2O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ3O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ0LCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ0KTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDQpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHdpbmRvdywgRVZFTlRfS0VZJDQpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9LRVkkNCk7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGlzVmlzaWJsZTogQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApLFxuICAgICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlLFxuICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgfSk7XG4gIH1cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuICBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgIC8vIHRyeSB0byBhcHBlbmQgZHluYW1pYyBtb2RhbFxuICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgICB0aGlzLl9lbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpO1xuICAgIGlmIChtb2RhbEJvZHkpIHtcbiAgICAgIG1vZGFsQm9keS5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ0KTtcbiAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ0LCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUyQxLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZJDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpO1xuICAgIH0pO1xuICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSQxLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgLy8gYSBiYWQgdHJpY2sgdG8gc2VncmVnYXRlIGNsaWNrcyB0aGF0IG1heSBzdGFydCBpbnNpZGUgZGlhbG9nIGJ1dCBlbmQgb3V0c2lkZSwgYW5kIGF2b2lkIGxpc3RlbiB0byBzY3JvbGxiYXIgY2xpY2tzXG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgfHwgdGhpcy5fZWxlbWVudCAhPT0gZXZlbnQyLnRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKTtcbiAgICAgIHRoaXMuX3Njcm9sbEJhci5yZXNldCgpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDQpO1xuICAgIH0pO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMyk7XG4gIH1cbiAgX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQkMSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKGluaXRpYWxPdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU1RBVElDKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZO1xuICAgICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgKi9cblxuICBfYWRqdXN0RGlhbG9nKCkge1xuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpO1xuICAgIGNvbnN0IGlzQm9keU92ZXJmbG93aW5nID0gc2Nyb2xsYmFyV2lkdGggPiAwO1xuICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCc7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICB9XG4gICAgaWYgKCFpc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nUmlnaHQnIDogJ3BhZGRpbmdMZWZ0JztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgIH1cbiAgfVxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJyc7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnJztcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQyLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQyLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1ckNCwgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiQ0LCAoKSA9PiB7XG4gICAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IkMSk7XG4gIGlmIChhbHJlYWR5T3Blbikge1xuICAgIE1vZGFsLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgZGF0YS50b2dnbGUodGhpcyk7XG59KTtcbmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNiA9ICdvZmZjYW52YXMnO1xuY29uc3QgREFUQV9LRVkkMyA9ICdicy5vZmZjYW52YXMnO1xuY29uc3QgRVZFTlRfS0VZJDMgPSBgLiR7REFUQV9LRVkkM31gO1xuY29uc3QgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMiA9IGBsb2FkJHtFVkVOVF9LRVkkM30ke0RBVEFfQVBJX0tFWSQxfWA7XG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyQxID0gJ3Nob3dpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9ISURJTkcgPSAnaGlkaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQkFDS0RST1AgPSAnb2ZmY2FudmFzLWJhY2tkcm9wJztcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93JztcbmNvbnN0IEVWRU5UX1NIT1ckMyA9IGBzaG93JHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfU0hPV04kMyA9IGBzaG93biR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJREUkMyA9IGBoaWRlJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQzID0gYGhpZGRlbiR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQxID0gYGNsaWNrJHtFVkVOVF9LRVkkM30ke0RBVEFfQVBJX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMSA9ICdbZGF0YS1icy10b2dnbGU9XCJvZmZjYW52YXNcIl0nO1xuY29uc3QgRGVmYXVsdCQ1ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ1ID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzY3JvbGw6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgT2ZmY2FudmFzIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ1O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDU7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckMywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkckMSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCB8fCB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDMpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyQxKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDMsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkMyk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZWxlbWVudC5ibHVyKCk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJRElORyk7XG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDMsIENMQVNTX05BTUVfSElESU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5yZXNldCgpO1xuICAgICAgfVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDMpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxiYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICBjb25zdCBjbGlja0NhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9O1xuXG4gICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgY29uc3QgaXNWaXNpYmxlID0gQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApO1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgY2xhc3NOYW1lOiBDTEFTU19OQU1FX0JBQ0tEUk9QLFxuICAgICAgaXNWaXNpYmxlLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIHJvb3RFbGVtZW50OiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICBjbGlja0NhbGxiYWNrOiBpc1Zpc2libGUgPyBjbGlja0NhbGxiYWNrIDogbnVsbFxuICAgIH0pO1xuICB9XG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQxLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQxLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiQzLCAoKSA9PiB7XG4gICAgLy8gZm9jdXMgb24gdHJpZ2dlciB3aGVuIGl0IGlzIGNsb3NlZFxuICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgYSB0b2dnbGVyIG9mIGFuIG9mZmNhbnZhcywgd2hpbGUgYW5vdGhlciBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKTtcbiAgaWYgKGFscmVhZHlPcGVuICYmIGFscmVhZHlPcGVuICE9PSB0YXJnZXQpIHtcbiAgICBPZmZjYW52YXMuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKTtcbiAgfVxuICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgZGF0YS50b2dnbGUodGhpcyk7XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMiwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoT1BFTl9TRUxFQ1RPUikpIHtcbiAgICBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShzZWxlY3Rvcikuc2hvdygpO1xuICB9XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZCgnW2FyaWEtbW9kYWxdW2NsYXNzKj1zaG93XVtjbGFzcyo9b2ZmY2FudmFzLV0nKSkge1xuICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XG4gICAgICBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50KS5oaWRlKCk7XG4gICAgfVxuICB9XG59KTtcbmVuYWJsZURpc21pc3NUcmlnZ2VyKE9mZmNhbnZhcyk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE9mZmNhbnZhcyk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8vIGpzLWRvY3Mtc3RhcnQgYWxsb3ctbGlzdFxuY29uc3QgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuY29uc3QgRGVmYXVsdEFsbG93bGlzdCA9IHtcbiAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgJyonOiBbJ2NsYXNzJywgJ2RpcicsICdpZCcsICdsYW5nJywgJ3JvbGUnLCBBUklBX0FUVFJJQlVURV9QQVRURVJOXSxcbiAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgYXJlYTogW10sXG4gIGI6IFtdLFxuICBicjogW10sXG4gIGNvbDogW10sXG4gIGNvZGU6IFtdLFxuICBkZDogW10sXG4gIGRpdjogW10sXG4gIGRsOiBbXSxcbiAgZHQ6IFtdLFxuICBlbTogW10sXG4gIGhyOiBbXSxcbiAgaDE6IFtdLFxuICBoMjogW10sXG4gIGgzOiBbXSxcbiAgaDQ6IFtdLFxuICBoNTogW10sXG4gIGg2OiBbXSxcbiAgaTogW10sXG4gIGltZzogWydzcmMnLCAnc3Jjc2V0JywgJ2FsdCcsICd0aXRsZScsICd3aWR0aCcsICdoZWlnaHQnXSxcbiAgbGk6IFtdLFxuICBvbDogW10sXG4gIHA6IFtdLFxuICBwcmU6IFtdLFxuICBzOiBbXSxcbiAgc21hbGw6IFtdLFxuICBzcGFuOiBbXSxcbiAgc3ViOiBbXSxcbiAgc3VwOiBbXSxcbiAgc3Ryb25nOiBbXSxcbiAgdTogW10sXG4gIHVsOiBbXVxufTtcbi8vIGpzLWRvY3MtZW5kIGFsbG93LWxpc3RcblxuY29uc3QgdXJpQXR0cmlidXRlcyA9IG5ldyBTZXQoWydiYWNrZ3JvdW5kJywgJ2NpdGUnLCAnaHJlZicsICdpdGVtdHlwZScsICdsb25nZGVzYycsICdwb3N0ZXInLCAnc3JjJywgJ3hsaW5rOmhyZWYnXSk7XG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBVUkxzIHRoYXQgYXJlIHNhZmUgd3J0LiBYU1MgaW4gVVJMIG5hdmlnYXRpb25cbiAqIGNvbnRleHRzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xNS4yLjgvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHMjTDM4XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvaTtcbmNvbnN0IGFsbG93ZWRBdHRyaWJ1dGUgPSAoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlTGlzdCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgcmV0dXJuIGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihhdHRyaWJ1dGVSZWdleCA9PiBhdHRyaWJ1dGVSZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkuc29tZShyZWdleCA9PiByZWdleC50ZXN0KGF0dHJpYnV0ZU5hbWUpKTtcbn07XG5mdW5jdGlvbiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgYWxsb3dMaXN0LCBzYW5pdGl6ZUZ1bmN0aW9uKSB7XG4gIGlmICghdW5zYWZlSHRtbC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zYWZlSHRtbDtcbiAgfVxuICBpZiAoc2FuaXRpemVGdW5jdGlvbiAmJiB0eXBlb2Ygc2FuaXRpemVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZ1bmN0aW9uKHVuc2FmZUh0bWwpO1xuICB9XG4gIGNvbnN0IGRvbVBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpO1xuICBjb25zdCBlbGVtZW50cyA9IFtdLmNvbmNhdCguLi5jcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIU9iamVjdC5rZXlzKGFsbG93TGlzdCkuaW5jbHVkZXMoZWxlbWVudE5hbWUpKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBbXS5jb25jYXQoLi4uZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICBjb25zdCBhbGxvd2VkQXR0cmlidXRlcyA9IFtdLmNvbmNhdChhbGxvd0xpc3RbJyonXSB8fCBbXSwgYWxsb3dMaXN0W2VsZW1lbnROYW1lXSB8fCBbXSk7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlTGlzdCkge1xuICAgICAgaWYgKCFhbGxvd2VkQXR0cmlidXRlKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS5ub2RlTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3RlbXBsYXRlLWZhY3RvcnkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ1ID0gJ1RlbXBsYXRlRmFjdG9yeSc7XG5jb25zdCBEZWZhdWx0JDQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgY29udGVudDoge30sXG4gIC8vIHsgc2VsZWN0b3IgOiB0ZXh0ICwgIHNlbGVjdG9yMiA6IHRleHQyICwgfVxuICBleHRyYUNsYXNzOiAnJyxcbiAgaHRtbDogZmFsc2UsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+J1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDQgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGNvbnRlbnQ6ICdvYmplY3QnLFxuICBleHRyYUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZydcbn07XG5jb25zdCBEZWZhdWx0Q29udGVudFR5cGUgPSB7XG4gIGVudHJ5OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9ufG51bGwpJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGVtcGxhdGVGYWN0b3J5IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KS5tYXAoY29uZmlnID0+IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbmZpZykpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBoYXNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggPiAwO1xuICB9XG4gIGNoYW5nZUNvbnRlbnQoY29udGVudCkge1xuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb250ZW50KTtcbiAgICB0aGlzLl9jb25maWcuY29udGVudCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbmZpZy5jb250ZW50LFxuICAgICAgLi4uY29udGVudFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdG9IdG1sKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRlbXBsYXRlV3JhcHBlci5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKHRoaXMuX2NvbmZpZy50ZW1wbGF0ZSk7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIHRleHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KSkge1xuICAgICAgdGhpcy5fc2V0Q29udGVudCh0ZW1wbGF0ZVdyYXBwZXIsIHRleHQsIHNlbGVjdG9yKTtcbiAgICB9XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZVdyYXBwZXIuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZXh0cmFDbGFzcyA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5leHRyYUNsYXNzKTtcbiAgICBpZiAoZXh0cmFDbGFzcykge1xuICAgICAgdGVtcGxhdGUuY2xhc3NMaXN0LmFkZCguLi5leHRyYUNsYXNzLnNwbGl0KCcgJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnKSB7XG4gICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb25maWcuY29udGVudCk7XG4gIH1cbiAgX2NoZWNrQ29udGVudChhcmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoYXJnKSkge1xuICAgICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7XG4gICAgICAgIHNlbGVjdG9yLFxuICAgICAgICBlbnRyeTogY29udGVudFxuICAgICAgfSwgRGVmYXVsdENvbnRlbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgX3NldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpO1xuICAgIGlmICghdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRlbnQgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgdGhpcy5fcHV0RWxlbWVudEluVGVtcGxhdGUoZ2V0RWxlbWVudChjb250ZW50KSwgdGVtcGxhdGVFbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudDtcbiAgfVxuICBfbWF5YmVTYW5pdGl6ZShhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhbml0aXplID8gc2FuaXRpemVIdG1sKGFyZywgdGhpcy5fY29uZmlnLmFsbG93TGlzdCwgdGhpcy5fY29uZmlnLnNhbml0aXplRm4pIDogYXJnO1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzXSk7XG4gIH1cbiAgX3B1dEVsZW1lbnRJblRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdG9vbHRpcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDQgPSAndG9vbHRpcCc7XG5jb25zdCBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFsnc2FuaXRpemUnLCAnYWxsb3dMaXN0JywgJ3Nhbml0aXplRm4nXSk7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMiA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfTU9EQUwgPSAnbW9kYWwnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDIgPSAnc2hvdyc7XG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJztcbmNvbnN0IFNFTEVDVE9SX01PREFMID0gYC4ke0NMQVNTX05BTUVfTU9EQUx9YDtcbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCc7XG5jb25zdCBUUklHR0VSX0hPVkVSID0gJ2hvdmVyJztcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnO1xuY29uc3QgVFJJR0dFUl9DTElDSyA9ICdjbGljayc7XG5jb25zdCBUUklHR0VSX01BTlVBTCA9ICdtYW51YWwnO1xuY29uc3QgRVZFTlRfSElERSQyID0gJ2hpZGUnO1xuY29uc3QgRVZFTlRfSElEREVOJDIgPSAnaGlkZGVuJztcbmNvbnN0IEVWRU5UX1NIT1ckMiA9ICdzaG93JztcbmNvbnN0IEVWRU5UX1NIT1dOJDIgPSAnc2hvd24nO1xuY29uc3QgRVZFTlRfSU5TRVJURUQgPSAnaW5zZXJ0ZWQnO1xuY29uc3QgRVZFTlRfQ0xJQ0skMSA9ICdjbGljayc7XG5jb25zdCBFVkVOVF9GT0NVU0lOJDEgPSAnZm9jdXNpbic7XG5jb25zdCBFVkVOVF9GT0NVU09VVCQxID0gJ2ZvY3Vzb3V0JztcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSAnbW91c2VlbnRlcic7XG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gJ21vdXNlbGVhdmUnO1xuY29uc3QgQXR0YWNobWVudE1hcCA9IHtcbiAgQVVUTzogJ2F1dG8nLFxuICBUT1A6ICd0b3AnLFxuICBSSUdIVDogaXNSVEwoKSA/ICdsZWZ0JyA6ICdyaWdodCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG4gIExFRlQ6IGlzUlRMKCkgPyAncmlnaHQnIDogJ2xlZnQnXG59O1xuY29uc3QgRGVmYXVsdCQzID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjb250YWluZXI6IGZhbHNlLFxuICBjdXN0b21DbGFzczogJycsXG4gIGRlbGF5OiAwLFxuICBmYWxsYmFja1BsYWNlbWVudHM6IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10sXG4gIGh0bWw6IGZhbHNlLFxuICBvZmZzZXQ6IFswLCA2XSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgc2VsZWN0b3I6IGZhbHNlLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+JyArICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PicgKyAnPC9kaXY+JyxcbiAgdGl0bGU6ICcnLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMyA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gIGN1c3RvbUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogJ2FycmF5JyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBsYWNlbWVudDogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gIHRpdGxlOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKScsXG4gIHRyaWdnZXI6ICdzdHJpbmcnXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgIH1cbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBudWxsO1xuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBudWxsO1xuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy50aXAgPSBudWxsO1xuICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgfVxuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuICB9XG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZDtcbiAgfVxuICB0b2dnbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICF0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrO1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2xlYXZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VudGVyKCk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgaWYgKCEodGhpcy5faXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPVyQyKSk7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbnN0IGlzSW5UaGVEb20gPSAoc2hhZG93Um9vdCB8fCB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB2NiByZW1vdmUgdGhpcyBvciBtYWtlIGl0IG9wdGlvbmFsXG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcC5nZXRBdHRyaWJ1dGUoJ2lkJykpO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRhaW5lclxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSU5TRVJURUQpKTtcbiAgICB9XG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcCk7XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPV04kMikpO1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURFJDIpKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQyKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfQ0xJQ0tdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZTtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsOyAvLyBpdCBpcyBhIHRyaWNrIHRvIHN1cHBvcnQgbWFudWFsIHRyaWdnZXJpbmdcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElEREVOJDIpKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpO1xuICB9XG4gIF9nZXRUaXBFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy5fY3JlYXRlVGlwRWxlbWVudCh0aGlzLl9uZXdDb250ZW50IHx8IHRoaXMuX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGlwO1xuICB9XG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKCk7XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayBpbiB2NlxuICAgIGlmICghdGlwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFJDIsIENMQVNTX05BTUVfU0hPVyQyKTtcbiAgICAvLyBUT0RPOiB2NiB0aGUgZm9sbG93aW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIENTUyBvbmx5XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoYGJzLSR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hdXRvYCk7XG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKS50b1N0cmluZygpO1xuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgIGlmICh0aGlzLl9pc0FuaW1hdGVkKCkpIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpcDtcbiAgfVxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gY29udGVudDtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG5ldyBUZW1wbGF0ZUZhY3Rvcnkoe1xuICAgICAgICAuLi50aGlzLl9jb25maWcsXG4gICAgICAgIC8vIHRoZSBgY29udGVudGAgdmFyIGhhcyB0byBiZSBhZnRlciBgdGhpcy5fY29uZmlnYFxuICAgICAgICAvLyB0byBvdmVycmlkZSBjb25maWcuY29udGVudCBpbiBjYXNlIG9mIHBvcG92ZXJcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgZXh0cmFDbGFzczogdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3Rvcnk7XG4gIH1cbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RPT0xUSVBfSU5ORVJdOiB0aGlzLl9nZXRUaXRsZSgpXG4gICAgfTtcbiAgfVxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy50aXRsZSkgfHwgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UoZXZlbnQuZGVsZWdhdGVUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuYW5pbWF0aW9uIHx8IHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMik7XG4gIH1cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckMik7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcih0aXApIHtcbiAgICBjb25zdCBwbGFjZW1lbnQgPSBleGVjdXRlKHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQsIFt0aGlzLCB0aXAsIHRoaXMuX2VsZW1lbnRdKTtcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV07XG4gICAgcmV0dXJuIFBvcHBlci5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkpO1xuICB9XG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzLl9lbGVtZW50XSk7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZWxlbWVudDogYC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3ByZVNldFBsYWNlbWVudCcsXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHBoYXNlOiAnYmVmb3JlTWFpbicsXG4gICAgICAgIGZuOiBkYXRhID0+IHtcbiAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgLy8gT3RoZXJ3aXNlLCBQb3BwZXIgbWl4ZXMgdXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucyBzaW5jZSB0aGUgaW5pdGlhbCBhcnJvdyBzdHlsZSBpcyBmb3IgdG9wIHBsYWNlbWVudFxuICAgICAgICAgIHRoaXMuX2dldFRpcEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcsIGRhdGEuc3RhdGUucGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH07XG4gIH1cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBjb25zdCB0cmlnZ2VycyA9IHRoaXMuX2NvbmZpZy50cmlnZ2VyLnNwbGl0KCcgJyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0skMSksIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDogdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfRk9DVVNJTiQxKTtcbiAgICAgICAgY29uc3QgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VMRUFWRSkgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVCQxKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50SW4sIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gdHJ1ZTtcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50T3V0LCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgIGNvbnRleHQuX2xlYXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcik7XG4gIH1cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgIXRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSk7IC8vIERPIE5PVCBVU0UgSVQuIElzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIH1cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdyk7XG4gIH1cbiAgX2xlYXZlKCkge1xuICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuaGlkZSk7XG4gIH1cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KTtcbiAgfVxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCk7XG4gICAgZm9yIChjb25zdCBkYXRhQXR0cmlidXRlIG9mIE9iamVjdC5rZXlzKGRhdGFBdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5oYXMoZGF0YUF0dHJpYnV0ZSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyaWJ1dGVdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcik7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aXRsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy50aXRsZSA9IGNvbmZpZy50aXRsZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlO1xuICAgIGNvbmZpZy50cmlnZ2VyID0gJ21hbnVhbCc7XG5cbiAgICAvLyBJbiB0aGUgZnV0dXJlIGNhbiBiZSByZXBsYWNlZCB3aXRoOlxuICAgIC8vIGNvbnN0IGtleXNXaXRoRGlmZmVyZW50VmFsdWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VudHJ5WzBdXSAhPT0gdGhpcy5fY29uZmlnW2VudHJ5WzBdXSlcbiAgICAvLyBgT2JqZWN0LmZyb21FbnRyaWVzKGtleXNXaXRoRGlmZmVyZW50VmFsdWVzKWBcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9kaXNwb3NlUG9wcGVyKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpO1xuICAgICAgdGhpcy50aXAgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9vbHRpcCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBwb3BvdmVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMyA9ICdwb3BvdmVyJztcbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcic7XG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknO1xuY29uc3QgRGVmYXVsdCQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHQsXG4gIGNvbnRlbnQ6ICcnLFxuICBvZmZzZXQ6IFswLCA4XSxcbiAgcGxhY2VtZW50OiAncmlnaHQnLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWFycm93XCI+PC9kaXY+JyArICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0cmlnZ2VyOiAnY2xpY2snXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMiA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFBvcG92ZXIgZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQyO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQzO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RJVExFXTogdGhpcy5fZ2V0VGl0bGUoKSxcbiAgICAgIFtTRUxFQ1RPUl9DT05URU5UXTogdGhpcy5fZ2V0Q29udGVudCgpXG4gICAgfTtcbiAgfVxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gUG9wb3Zlci5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDIgPSAnc2Nyb2xsc3B5JztcbmNvbnN0IERBVEFfS0VZJDIgPSAnYnMuc2Nyb2xsc3B5JztcbmNvbnN0IEVWRU5UX0tFWSQyID0gYC4ke0RBVEFfS0VZJDJ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWSQyfWA7XG5jb25zdCBFVkVOVF9DTElDSyA9IGBjbGljayR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMSA9IGBsb2FkJHtFVkVOVF9LRVkkMn0ke0RBVEFfQVBJX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNID0gJ2Ryb3Bkb3duLWl0ZW0nO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMSA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TUFkgPSAnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJztcbmNvbnN0IFNFTEVDVE9SX1RBUkdFVF9MSU5LUyA9ICdbaHJlZl0nO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJTktTID0gJy5uYXYtbGluayc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9MSU5LX0lURU1TID0gYCR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9OQVZfSVRFTVN9ID4gJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9YDtcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOID0gJy5kcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUkMSA9ICcuZHJvcGRvd24tdG9nZ2xlJztcbmNvbnN0IERlZmF1bHQkMSA9IHtcbiAgb2Zmc2V0OiBudWxsLFxuICAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn07XG5jb25zdCBEZWZhdWx0VHlwZSQxID0ge1xuICBvZmZzZXQ6ICcobnVtYmVyfG51bGwpJyxcbiAgLy8gVE9ETyB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnc3RyaW5nJyxcbiAgc21vb3RoU2Nyb2xsOiAnYm9vbGVhbicsXG4gIHRhcmdldDogJ2VsZW1lbnQnLFxuICB0aHJlc2hvbGQ6ICdhcnJheSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbFNweSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9yb290RWxlbWVudCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudCkub3ZlcmZsb3dZID09PSAndmlzaWJsZScgPyBudWxsIDogdGhpcy5fZWxlbWVudDtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEgPSB7XG4gICAgICB2aXNpYmxlRW50cnlUb3A6IDAsXG4gICAgICBwYXJlbnRTY3JvbGxUb3A6IDBcbiAgICB9O1xuICAgIHRoaXMucmVmcmVzaCgpOyAvLyBpbml0aWFsaXplXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQxO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCk7XG4gICAgdGhpcy5fbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKTtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSB0aGlzLl9nZXROZXdPYnNlcnZlcigpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIFRPRE86IG9uIHY2IHRhcmdldCBzaG91bGQgYmUgZ2l2ZW4gZXhwbGljaXRseSAmIHJlbW92ZSB0aGUge3RhcmdldDogJ3NzLXRhcmdldCd9IGNhc2VcbiAgICBjb25maWcudGFyZ2V0ID0gZ2V0RWxlbWVudChjb25maWcudGFyZ2V0KSB8fCBkb2N1bWVudC5ib2R5O1xuXG4gICAgLy8gVE9ETzogdjYgT25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gVXNlIHJvb3RNYXJnaW4gb25seVxuICAgIGNvbmZpZy5yb290TWFyZ2luID0gY29uZmlnLm9mZnNldCA/IGAke2NvbmZpZy5vZmZzZXR9cHggMHB4IC0zMCVgIDogY29uZmlnLnJvb3RNYXJnaW47XG4gICAgaWYgKHR5cGVvZiBjb25maWcudGhyZXNob2xkID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnLnRocmVzaG9sZCA9IGNvbmZpZy50aHJlc2hvbGQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc21vb3RoU2Nyb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSyk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLLCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLmdldChldmVudC50YXJnZXQuaGFzaCk7XG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3RFbGVtZW50IHx8IHdpbmRvdztcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gb2JzZXJ2YWJsZVNlY3Rpb24ub2Zmc2V0VG9wIC0gdGhpcy5fZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3A6IGhlaWdodCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLl9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9IGVudHJ5ID0+IHtcbiAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3AgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wO1xuICAgICAgdGhpcy5fcHJvY2Vzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGxUb3AgPSAodGhpcy5fcm9vdEVsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3A7XG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcCA9IHBhcmVudFNjcm9sbFRvcDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wO1xuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICAgIC8vIGlmIHBhcmVudCBpc24ndCBzY3JvbGxlZCwgbGV0J3Mga2VlcCB0aGUgZmlyc3QgdmlzaWJsZSBpdGVtLCBicmVha2luZyB0aGUgaXRlcmF0aW9uXG4gICAgICAgIGlmICghcGFyZW50U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIHVwLCBwaWNrIHRoZSBzbWFsbGVzdCBvZmZzZXRUb3BcbiAgICAgIGlmICghdXNlclNjcm9sbHNEb3duICYmICFlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMpIHtcbiAgICAgICAgYWN0aXZhdGUoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgZm9yIChjb25zdCBhbmNob3Igb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbmNob3IgaGFzIGFuIGlkIGFuZCBpcyBub3QgZGlzYWJsZWRcbiAgICAgIGlmICghYW5jaG9yLmhhc2ggfHwgaXNEaXNhYmxlZChhbmNob3IpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGRlY29kZVVSSShhbmNob3IuaGFzaCksIHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2YWJsZVNlY3Rpb24gZXhpc3RzICYgaXMgdmlzaWJsZVxuICAgICAgaWYgKGlzVmlzaWJsZShvYnNlcnZhYmxlU2VjdGlvbikpIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0TGlua3Muc2V0KGRlY29kZVVSSShhbmNob3IuaGFzaCksIGFuY2hvcik7XG4gICAgICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5zZXQoYW5jaG9yLmhhc2gsIG9ic2VydmFibGVTZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbiAgfVxuICBfYWN0aXZhdGVQYXJlbnRzKHRhcmdldCkge1xuICAgIC8vIEFjdGl2YXRlIGRyb3Bkb3duIHBhcmVudHNcbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0lURU0pKSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxLCB0YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTikpLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdEdyb3VwIG9mIFNlbGVjdG9yRW5naW5lLnBhcmVudHModGFyZ2V0LCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCkpIHtcbiAgICAgIC8vIFNldCB0cmlnZ2VyZWQgbGlua3MgcGFyZW50cyBhcyBhY3RpdmVcbiAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBTRUxFQ1RPUl9MSU5LX0lURU1TKSkge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIGNvbnN0IGFjdGl2ZU5vZGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChgJHtTRUxFQ1RPUl9UQVJHRVRfTElOS1N9LiR7Q0xBU1NfTkFNRV9BQ1RJVkUkMX1gLCBwYXJlbnQpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhY3RpdmVOb2Rlcykge1xuICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQxLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc3B5IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9TUFkpKSB7XG4gICAgU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2Uoc3B5KTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0YWIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQxID0gJ3RhYic7XG5jb25zdCBEQVRBX0tFWSQxID0gJ2JzLnRhYic7XG5jb25zdCBFVkVOVF9LRVkkMSA9IGAuJHtEQVRBX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9ISURFJDEgPSBgaGlkZSR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQxID0gYGhpZGRlbiR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX1NIT1ckMSA9IGBzaG93JHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPV04kMSA9IGBzaG93biR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0JztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZID0gJ0Fycm93RG93bic7XG5jb25zdCBIT01FX0tFWSA9ICdIb21lJztcbmNvbnN0IEVORF9LRVkgPSAnRW5kJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQxID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gYDpub3QoJHtTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9KWA7XG5jb25zdCBTRUxFQ1RPUl9UQUJfUEFORUwgPSAnLmxpc3QtZ3JvdXAsIC5uYXYsIFtyb2xlPVwidGFibGlzdFwiXSc7XG5jb25zdCBTRUxFQ1RPUl9PVVRFUiA9ICcubmF2LWl0ZW0sIC5saXN0LWdyb3VwLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfSU5ORVIgPSBgLm5hdi1saW5rJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgLmxpc3QtZ3JvdXAtaXRlbSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIFtyb2xlPVwidGFiXCJdJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nOyAvLyBUT0RPOiBjb3VsZCBvbmx5IGJlIGB0YWJgIGluIHY2XG5jb25zdCBTRUxFQ1RPUl9JTk5FUl9FTEVNID0gYCR7U0VMRUNUT1JfSU5ORVJ9LCAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUgPSBgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdYDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBzdXBlcihlbGVtZW50KTtcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfVEFCX1BBTkVMKTtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgICAgLy8gVE9ETzogc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpbiB2NlxuICAgICAgLy8gdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlbGVtZW50Lm91dGVySFRNTH0gaGFzIG5vdCBhIHZhbGlkIHBhcmVudCAke1NFTEVDVE9SX0lOTkVSX0VMRU19YClcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgaW5pdGlhbCBhcmlhIGF0dHJpYnV0ZXNcbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlcyh0aGlzLl9wYXJlbnQsIHRoaXMuX2dldENoaWxkcmVuKCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQxO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgLy8gU2hvd3MgdGhpcyBlbGVtIGFuZCBkZWFjdGl2YXRlIHRoZSBhY3RpdmUgc2libGluZyBpZiBleGlzdHNcbiAgICBjb25zdCBpbm5lckVsZW0gPSB0aGlzLl9lbGVtZW50O1xuICAgIGlmICh0aGlzLl9lbGVtSXNBY3RpdmUoaW5uZXJFbGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCBmb3IgYWN0aXZlIHRhYiBvbiBzYW1lIHBhcmVudCB0byBkZWFjdGl2YXRlIGl0XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbSgpO1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IGFjdGl2ZSA/IEV2ZW50SGFuZGxlci50cmlnZ2VyKGFjdGl2ZSwgRVZFTlRfSElERSQxLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBpbm5lckVsZW1cbiAgICB9KSA6IG51bGw7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIoaW5uZXJFbGVtLCBFVkVOVF9TSE9XJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGFjdGl2ZVxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBoaWRlRXZlbnQgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGVhY3RpdmF0ZShhY3RpdmUsIGlubmVyRWxlbSk7XG4gICAgdGhpcy5fYWN0aXZhdGUoaW5uZXJFbGVtLCBhY3RpdmUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKTsgLy8gU2VhcmNoIGFuZCBhY3RpdmF0ZS9zaG93IHRoZSBwcm9wZXIgc2VjdGlvblxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgdHJ1ZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9TSE9XTiQxLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQxKSk7XG4gIH1cbiAgX2RlYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICBlbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9kZWFjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGRlYWN0aXZhdGUgdGhlIHNob3duIHNlY3Rpb24gdG9vXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgZmFsc2UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfSElEREVOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICghW0FSUk9XX0xFRlRfS0VZLCBBUlJPV19SSUdIVF9LRVksIEFSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVksIEhPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBzdG9wUHJvcGFnYXRpb24vcHJldmVudERlZmF1bHQgYm90aCBhZGRlZCB0byBzdXBwb3J0IHVwL2Rvd24ga2V5cyB3aXRob3V0IHNjcm9sbGluZyB0aGUgcGFnZVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKTtcbiAgICBsZXQgbmV4dEFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKFtIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBjaGlsZHJlbltldmVudC5rZXkgPT09IEhPTUVfS0VZID8gMCA6IGNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc05leHQgPSBbQVJST1dfUklHSFRfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoY2hpbGRyZW4sIGV2ZW50LnRhcmdldCwgaXNOZXh0LCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG5leHRBY3RpdmVFbGVtZW50KSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldENoaWxkcmVuKCkge1xuICAgIC8vIGNvbGxlY3Rpb24gb2YgaW5uZXIgZWxlbWVudHNcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JTk5FUl9FTEVNLCB0aGlzLl9wYXJlbnQpO1xuICB9XG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbDtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXMocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHBhcmVudCwgJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCk7XG4gICAgfVxuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZCk7XG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpO1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChjaGlsZCk7XG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpO1xuICAgIGlmIChvdXRlckVsZW0gIT09IGNoaWxkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhvdXRlckVsZW0sICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKTtcblxuICAgIC8vIHNldCBhdHRyaWJ1dGVzIHRvIHRoZSByZWxhdGVkIHBhbmVsIHRvb1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCk7XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ3JvbGUnLCAndGFicGFuZWwnKTtcbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAke2NoaWxkLmlkfWApO1xuICAgIH1cbiAgfVxuICBfdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgb3Blbikge1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIW91dGVyRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfRFJPUERPV04pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvZ2dsZSA9IChzZWxlY3RvciwgY2xhc3NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3Rvciwgb3V0ZXJFbGVtKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIG9wZW4pO1xuICAgICAgfVxuICAgIH07XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VLCBDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgb3V0ZXJFbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4pO1xuICB9XG4gIF9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX2VsZW1Jc0FjdGl2ZShlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIGlubmVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtbGluaylcbiAgX2dldElubmVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhTRUxFQ1RPUl9JTk5FUl9FTEVNKSA/IGVsZW0gOiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lOTkVSX0VMRU0sIGVsZW0pO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgb3V0ZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1pdGVtKVxuICBfZ2V0T3V0ZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbG9zZXN0KFNFTEVDVE9SX09VVEVSKSB8fCBlbGVtO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS5zaG93KCk7XG59KTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG9uIGZvY3VzXG4gKi9cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFKSkge1xuICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpO1xuICB9XG59KTtcbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b2FzdC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RvYXN0JztcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvYXN0JztcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gO1xuY29uc3QgRVZFTlRfTU9VU0VPVkVSID0gYG1vdXNlb3ZlciR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSBgZm9jdXNvdXQke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJzsgLy8gQGRlcHJlY2F0ZWQgLSBrZXB0IGhlcmUgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJztcbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYXV0b2hpZGU6ICdib29sZWFuJyxcbiAgZGVsYXk6ICdudW1iZXInXG59O1xuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTik7XG4gICAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbik7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJREUpOyAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTik7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBpc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9tYXliZVNjaGVkdWxlSGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hdXRvaGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiB8fCB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheSk7XG4gIH1cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBpZiAodGhpcy5fZWxlbWVudCA9PT0gbmV4dEVsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5jb250YWlucyhuZXh0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9WRVIsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTSU4sIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSk7XG4gIH1cbiAgX2NsZWFyVGltZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKFRvYXN0KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9hc3QpO1xuXG5leHBvcnQgeyBBbGVydCwgQnV0dG9uLCBDYXJvdXNlbCwgQ29sbGFwc2UsIERyb3Bkb3duLCBNb2RhbCwgT2ZmY2FudmFzLCBQb3BvdmVyLCBTY3JvbGxTcHksIFRhYiwgVG9hc3QsIFRvb2x0aXAgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5lc20uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bootstrap/dist/js/bootstrap.esm.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-color-picker/colors/ColorContextPadProvider.js":
-/*!*****************************************************************************!*\
- !*** ./node_modules/bpmn-js-color-picker/colors/ColorContextPadProvider.js ***!
- \*****************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ColorContextPadProvider)\n/* harmony export */ });\nconst colorImageSvg = `\r\n \r\n `;\r\n\r\n\r\nfunction ColorContextPadProvider(contextPad, popupMenu, canvas, translate) {\r\n\r\n this._contextPad = contextPad;\r\n this._popupMenu = popupMenu;\r\n this._canvas = canvas;\r\n this._translate = translate;\r\n\r\n contextPad.registerProvider(this);\r\n}\r\n\r\n\r\nColorContextPadProvider.$inject = [\r\n 'contextPad',\r\n 'popupMenu',\r\n 'canvas',\r\n 'translate'\r\n];\r\n\r\n\r\nColorContextPadProvider.prototype.getContextPadEntries = function(element) {\r\n return this._createPopupAction([ element ]);\r\n};\r\n\r\n\r\nColorContextPadProvider.prototype.getMultiElementContextPadEntries = function(elements) {\r\n\r\n return this._createPopupAction(elements);\r\n};\r\n\r\nColorContextPadProvider.prototype._createPopupAction = function(elements) {\r\n\r\n const translate = this._translate;\r\n const contextPad = this._contextPad;\r\n const popupMenu = this._popupMenu;\r\n\r\n return {\r\n 'set-color': {\r\n group: 'edit',\r\n className: 'bpmn-icon-color',\r\n title: translate('Set color'),\r\n html: `${colorImageSvg}
`,\r\n action: {\r\n click: (event, element) => {\r\n\r\n // get start popup draw start position\r\n var position = {\r\n ...getStartPosition(contextPad, elements),\r\n cursor: {\r\n x: event.x,\r\n y: event.y\r\n }\r\n };\r\n\r\n // open new color-picker popup\r\n popupMenu.open(elements, 'color-picker', position);\r\n }\r\n }\r\n }\r\n };\r\n\r\n};\r\n\r\n\r\n// helpers //////////////////////\r\n\r\nfunction getStartPosition(contextPad, elements) {\r\n\r\n var Y_OFFSET = 5;\r\n\r\n var pad = contextPad.getPad(elements).html;\r\n\r\n var padRect = pad.getBoundingClientRect();\r\n\r\n var pos = {\r\n x: padRect.left,\r\n y: padRect.bottom + Y_OFFSET\r\n };\r\n\r\n return pos;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1jb2xvci1waWNrZXIvY29sb3JzL0NvbG9yQ29udGV4dFBhZFByb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1jb2xvci1waWNrZXIvY29sb3JzL0NvbG9yQ29udGV4dFBhZFByb3ZpZGVyLmpzP2FmZDEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY29sb3JJbWFnZVN2ZyA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgPHBhdGggZD1cIm0xMi41IDUuNS4zLS40IDMuNi0zLjZjLjUtLjUgMS4zLS41IDEuNyAwbDEgMWMuNS40LjUgMS4yIDAgMS43bC0zLjYgMy42LS40LjJ2LjJjMCAxLjQuNiAyIDEgMi43di42bC0xLjcgMS42Yy0uMi4yLS40LjItLjYgMEw3LjMgNi42YS40LjQgMCAwIDEgMC0uNmwuMy0uMy41LS41LjgtLjhjLjItLjIuNC0uMS42IDAgLjkuNSAxLjUgMS4xIDMgMS4xem0tOS45IDYgNC4yLTQuMiA2LjMgNi4zLTQuMiA0LjJjLS4zLjMtLjkuMy0xLjIgMGwtLjgtLjgtLjktLjgtMi4zLTIuOVwiIC8+XHJcbjwvc3ZnPmA7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29sb3JDb250ZXh0UGFkUHJvdmlkZXIoY29udGV4dFBhZCwgcG9wdXBNZW51LCBjYW52YXMsIHRyYW5zbGF0ZSkge1xyXG5cclxuICB0aGlzLl9jb250ZXh0UGFkID0gY29udGV4dFBhZDtcclxuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XHJcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xyXG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcclxuXHJcbiAgY29udGV4dFBhZC5yZWdpc3RlclByb3ZpZGVyKHRoaXMpO1xyXG59XHJcblxyXG5cclxuQ29sb3JDb250ZXh0UGFkUHJvdmlkZXIuJGluamVjdCA9IFtcclxuICAnY29udGV4dFBhZCcsXHJcbiAgJ3BvcHVwTWVudScsXHJcbiAgJ2NhbnZhcycsXHJcbiAgJ3RyYW5zbGF0ZSdcclxuXTtcclxuXHJcblxyXG5Db2xvckNvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuZ2V0Q29udGV4dFBhZEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZVBvcHVwQWN0aW9uKFsgZWxlbWVudCBdKTtcclxufTtcclxuXHJcblxyXG5Db2xvckNvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuZ2V0TXVsdGlFbGVtZW50Q29udGV4dFBhZEVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50cykge1xyXG5cclxuICByZXR1cm4gdGhpcy5fY3JlYXRlUG9wdXBBY3Rpb24oZWxlbWVudHMpO1xyXG59O1xyXG5cclxuQ29sb3JDb250ZXh0UGFkUHJvdmlkZXIucHJvdG90eXBlLl9jcmVhdGVQb3B1cEFjdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XHJcblxyXG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcclxuICBjb25zdCBjb250ZXh0UGFkID0gdGhpcy5fY29udGV4dFBhZDtcclxuICBjb25zdCBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnU7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAnc2V0LWNvbG9yJzoge1xyXG4gICAgICBncm91cDogJ2VkaXQnLFxyXG4gICAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY29sb3InLFxyXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdTZXQgY29sb3InKSxcclxuICAgICAgaHRtbDogYDxkaXYgY2xhc3M9XCJlbnRyeVwiPiR7Y29sb3JJbWFnZVN2Z308L2Rpdj5gLFxyXG4gICAgICBhY3Rpb246IHtcclxuICAgICAgICBjbGljazogKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcblxyXG4gICAgICAgICAgLy8gZ2V0IHN0YXJ0IHBvcHVwIGRyYXcgc3RhcnQgcG9zaXRpb25cclxuICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgLi4uZ2V0U3RhcnRQb3NpdGlvbihjb250ZXh0UGFkLCBlbGVtZW50cyksXHJcbiAgICAgICAgICAgIGN1cnNvcjoge1xyXG4gICAgICAgICAgICAgIHg6IGV2ZW50LngsXHJcbiAgICAgICAgICAgICAgeTogZXZlbnQueVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIG9wZW4gbmV3IGNvbG9yLXBpY2tlciBwb3B1cFxyXG4gICAgICAgICAgcG9wdXBNZW51Lm9wZW4oZWxlbWVudHMsICdjb2xvci1waWNrZXInLCBwb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbn07XHJcblxyXG5cclxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5mdW5jdGlvbiBnZXRTdGFydFBvc2l0aW9uKGNvbnRleHRQYWQsIGVsZW1lbnRzKSB7XHJcblxyXG4gIHZhciBZX09GRlNFVCA9IDU7XHJcblxyXG4gIHZhciBwYWQgPSBjb250ZXh0UGFkLmdldFBhZChlbGVtZW50cykuaHRtbDtcclxuXHJcbiAgdmFyIHBhZFJlY3QgPSBwYWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gIHZhciBwb3MgPSB7XHJcbiAgICB4OiBwYWRSZWN0LmxlZnQsXHJcbiAgICB5OiBwYWRSZWN0LmJvdHRvbSArIFlfT0ZGU0VUXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIHBvcztcclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-color-picker/colors/ColorContextPadProvider.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-color-picker/colors/ColorPopupProvider.js":
-/*!************************************************************************!*\
- !*** ./node_modules/bpmn-js-color-picker/colors/ColorPopupProvider.js ***!
- \************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ ColorPopupProvider)\n/* harmony export */ });\nconst COLORS = [ {\n label: 'Default',\n fill: undefined,\n stroke: undefined\n}, {\n label: 'Blue',\n fill: '#BBDEFB',\n stroke: '#0D4372'\n}, {\n label: 'Orange',\n fill: '#FFE0B2',\n stroke: '#6B3C00'\n}, {\n label: 'Green',\n fill: '#C8E6C9',\n stroke: '#205022'\n}, {\n label: 'Red',\n fill: '#FFCDD2',\n stroke: '#831311'\n}, {\n label: 'Purple',\n fill: '#E1BEE7',\n stroke: '#5B176D'\n} ];\n\n\nfunction ColorPopupProvider(config, bpmnRendererConfig, popupMenu, modeling, translate) {\n this._popupMenu = popupMenu;\n this._modeling = modeling;\n this._translate = translate;\n\n this._colors = config && config.colors || COLORS;\n this._defaultFillColor = bpmnRendererConfig && bpmnRendererConfig.defaultFillColor || 'white';\n this._defaultStrokeColor = bpmnRendererConfig && bpmnRendererConfig.defaultStrokeColor || 'rgb(34, 36, 42)';\n\n this._popupMenu.registerProvider('color-picker', this);\n}\n\n\nColorPopupProvider.$inject = [\n 'config.colorPicker',\n 'config.bpmnRenderer',\n 'popupMenu',\n 'modeling',\n 'translate'\n];\n\n\nColorPopupProvider.prototype.getEntries = function(elements) {\n var self = this;\n\n var colorIconHtml = `\n \n \n \n `;\n\n var entries = this._colors.map(function(color) {\n\n var entryColorIconHtml = colorIconHtml.replace('var(--fill-color)', color.fill || self._defaultFillColor)\n .replace('var(--stroke-color)', color.stroke || self._defaultStrokeColor);\n\n return {\n title: self._translate(color.label),\n id: color.label.toLowerCase() + '-color',\n imageHtml: entryColorIconHtml,\n action: createAction(self._modeling, elements, color)\n };\n });\n\n return entries;\n};\n\n\nfunction createAction(modeling, element, color) {\n return function() {\n modeling.setColor(element, color);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1jb2xvci1waWNrZXIvY29sb3JzL0NvbG9yUG9wdXBQcm92aWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdhO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JwbW4tanMtY29sb3ItcGlja2VyL2NvbG9ycy9Db2xvclBvcHVwUHJvdmlkZXIuanM/ZmFjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDT0xPUlMgPSBbIHtcbiAgbGFiZWw6ICdEZWZhdWx0JyxcbiAgZmlsbDogdW5kZWZpbmVkLFxuICBzdHJva2U6IHVuZGVmaW5lZFxufSwge1xuICBsYWJlbDogJ0JsdWUnLFxuICBmaWxsOiAnI0JCREVGQicsXG4gIHN0cm9rZTogJyMwRDQzNzInXG59LCB7XG4gIGxhYmVsOiAnT3JhbmdlJyxcbiAgZmlsbDogJyNGRkUwQjInLFxuICBzdHJva2U6ICcjNkIzQzAwJ1xufSwge1xuICBsYWJlbDogJ0dyZWVuJyxcbiAgZmlsbDogJyNDOEU2QzknLFxuICBzdHJva2U6ICcjMjA1MDIyJ1xufSwge1xuICBsYWJlbDogJ1JlZCcsXG4gIGZpbGw6ICcjRkZDREQyJyxcbiAgc3Ryb2tlOiAnIzgzMTMxMSdcbn0sIHtcbiAgbGFiZWw6ICdQdXJwbGUnLFxuICBmaWxsOiAnI0UxQkVFNycsXG4gIHN0cm9rZTogJyM1QjE3NkQnXG59IF07XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29sb3JQb3B1cFByb3ZpZGVyKGNvbmZpZywgYnBtblJlbmRlcmVyQ29uZmlnLCBwb3B1cE1lbnUsIG1vZGVsaW5nLCB0cmFuc2xhdGUpIHtcbiAgdGhpcy5fcG9wdXBNZW51ID0gcG9wdXBNZW51O1xuICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdGhpcy5fY29sb3JzID0gY29uZmlnICYmIGNvbmZpZy5jb2xvcnMgfHwgQ09MT1JTO1xuICB0aGlzLl9kZWZhdWx0RmlsbENvbG9yID0gYnBtblJlbmRlcmVyQ29uZmlnICYmIGJwbW5SZW5kZXJlckNvbmZpZy5kZWZhdWx0RmlsbENvbG9yIHx8ICd3aGl0ZSc7XG4gIHRoaXMuX2RlZmF1bHRTdHJva2VDb2xvciA9IGJwbW5SZW5kZXJlckNvbmZpZyAmJiBicG1uUmVuZGVyZXJDb25maWcuZGVmYXVsdFN0cm9rZUNvbG9yIHx8ICdyZ2IoMzQsIDM2LCA0MiknO1xuXG4gIHRoaXMuX3BvcHVwTWVudS5yZWdpc3RlclByb3ZpZGVyKCdjb2xvci1waWNrZXInLCB0aGlzKTtcbn1cblxuXG5Db2xvclBvcHVwUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2NvbmZpZy5jb2xvclBpY2tlcicsXG4gICdjb25maWcuYnBtblJlbmRlcmVyJyxcbiAgJ3BvcHVwTWVudScsXG4gICdtb2RlbGluZycsXG4gICd0cmFuc2xhdGUnXG5dO1xuXG5cbkNvbG9yUG9wdXBQcm92aWRlci5wcm90b3R5cGUuZ2V0RW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB2YXIgY29sb3JJY29uSHRtbCA9IGBcbiAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI1IDI1XCIgaGVpZ2h0PVwiMTAwJVwiIHdpZHRoPVwiMTAwJVwiPlxuICAgICAgPHJlY3Qgcng9XCIyXCIgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIGZpbGw9XCJ2YXIoLS1maWxsLWNvbG9yKVwiIHN0cm9rZT1cInZhcigtLXN0cm9rZS1jb2xvcilcIiBzdHlsZT1cInN0cm9rZS13aWR0aDoyXCI+PC9yZWN0PlxuICAgIDwvc3ZnPlxuICBgO1xuXG4gIHZhciBlbnRyaWVzID0gdGhpcy5fY29sb3JzLm1hcChmdW5jdGlvbihjb2xvcikge1xuXG4gICAgdmFyIGVudHJ5Q29sb3JJY29uSHRtbCA9IGNvbG9ySWNvbkh0bWwucmVwbGFjZSgndmFyKC0tZmlsbC1jb2xvciknLCBjb2xvci5maWxsIHx8IHNlbGYuX2RlZmF1bHRGaWxsQ29sb3IpXG4gICAgICAucmVwbGFjZSgndmFyKC0tc3Ryb2tlLWNvbG9yKScsIGNvbG9yLnN0cm9rZSB8fCBzZWxmLl9kZWZhdWx0U3Ryb2tlQ29sb3IpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBzZWxmLl90cmFuc2xhdGUoY29sb3IubGFiZWwpLFxuICAgICAgaWQ6IGNvbG9yLmxhYmVsLnRvTG93ZXJDYXNlKCkgKyAnLWNvbG9yJyxcbiAgICAgIGltYWdlSHRtbDogZW50cnlDb2xvckljb25IdG1sLFxuICAgICAgYWN0aW9uOiBjcmVhdGVBY3Rpb24oc2VsZi5fbW9kZWxpbmcsIGVsZW1lbnRzLCBjb2xvcilcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn07XG5cblxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uKG1vZGVsaW5nLCBlbGVtZW50LCBjb2xvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgbW9kZWxpbmcuc2V0Q29sb3IoZWxlbWVudCwgY29sb3IpO1xuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-color-picker/colors/ColorPopupProvider.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-color-picker/colors/index.js":
-/*!***********************************************************!*\
- !*** ./node_modules/bpmn-js-color-picker/colors/index.js ***!
- \***********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ColorContextPadProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ColorContextPadProvider */ \"./node_modules/bpmn-js-color-picker/colors/ColorContextPadProvider.js\");\n/* harmony import */ var _ColorPopupProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ColorPopupProvider */ \"./node_modules/bpmn-js-color-picker/colors/ColorPopupProvider.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [\n 'colorContextPadProvider',\n 'colorPopupProvider'\n ],\n colorContextPadProvider: [ 'type', _ColorContextPadProvider__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ],\n colorPopupProvider: [ 'type', _ColorPopupProvider__WEBPACK_IMPORTED_MODULE_1__[\"default\"] ]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1jb2xvci1waWNrZXIvY29sb3JzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFnRTtBQUNWOztBQUV0RCxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLGdFQUF1QjtBQUM1RCxnQ0FBZ0MsMkRBQWtCO0FBQ2xELENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1jb2xvci1waWNrZXIvY29sb3JzL2luZGV4LmpzPzA0ZTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbG9yQ29udGV4dFBhZFByb3ZpZGVyIGZyb20gJy4vQ29sb3JDb250ZXh0UGFkUHJvdmlkZXInO1xuaW1wb3J0IENvbG9yUG9wdXBQcm92aWRlciBmcm9tICcuL0NvbG9yUG9wdXBQcm92aWRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19pbml0X186IFtcbiAgICAnY29sb3JDb250ZXh0UGFkUHJvdmlkZXInLFxuICAgICdjb2xvclBvcHVwUHJvdmlkZXInXG4gIF0sXG4gIGNvbG9yQ29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQ29sb3JDb250ZXh0UGFkUHJvdmlkZXIgXSxcbiAgY29sb3JQb3B1cFByb3ZpZGVyOiBbICd0eXBlJywgQ29sb3JQb3B1cFByb3ZpZGVyIF1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-color-picker/colors/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-create-append-anything/dist/index.es.js":
-/*!**********************************************************************!*\
- !*** ./node_modules/bpmn-js-create-append-anything/dist/index.es.js ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CreateAppendAnythingModule: () => (/* binding */ index$1),\n/* harmony export */ CreateAppendElementTemplatesModule: () => (/* binding */ index),\n/* harmony export */ RemoveTemplatesModule: () => (/* binding */ RemoveTemplatesModule)\n/* harmony export */ });\n/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][]} arr\n *\n * @return {T[]}\n */\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n return obj === undefined;\n}\n\nfunction isArray(obj) {\n return nativeToString.call(obj) === '[object Array]';\n}\n\nfunction isObject(obj) {\n return nativeToString.call(obj) === '[object Object]';\n}\n\nfunction isNumber(obj) {\n return nativeToString.call(obj) === '[object Number]';\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isFunction(obj) {\n const tag = nativeToString.call(obj);\n\n return (\n tag === '[object Function]' ||\n tag === '[object AsyncFunction]' ||\n tag === '[object GeneratorFunction]' ||\n tag === '[object AsyncGeneratorFunction]' ||\n tag === '[object Proxy]'\n );\n}\n\n/**\n * Return true, if target owns a property with the given key.\n *\n * @param {Object} target\n * @param {String} key\n *\n * @return {Boolean}\n */\nfunction has(target, key) {\n return nativeHasOwnProperty.call(target, key);\n}\n\n/**\n * @template T\n * @typedef { (\n * ((e: T) => boolean) |\n * ((e: T, idx: number) => boolean) |\n * ((e: T, key: string) => boolean) |\n * string |\n * number\n * ) } Matcher\n */\n\n/**\n * @template T\n * @template U\n *\n * @typedef { (\n * ((e: T) => U) | string | number\n * ) } Extractor\n */\n\n\n/**\n * @template T\n * @typedef { (val: T, key: any) => boolean } MatchFn\n */\n\n/**\n * @template T\n * @typedef { T[] } ArrayCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: string]: T } } StringKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: number]: T } } NumberKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { StringKeyValueCollection | NumberKeyValueCollection } KeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { KeyValueCollection | ArrayCollection } Collection\n */\n\n/**\n * Find element in collection.\n *\n * @template T\n * @param {Collection} collection\n * @param {Matcher} matcher\n *\n * @return {Object}\n */\nfunction find(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let match;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n match = val;\n\n return false;\n }\n });\n\n return match;\n\n}\n\n\n/**\n * Iterate over collection; returning something\n * (non-undefined) will stop iteration.\n *\n * @template T\n * @param {Collection} collection\n * @param { ((item: T, idx: number) => (boolean|void)) | ((item: T, key: string) => (boolean|void)) } iterator\n *\n * @return {T} return result that stopped the iteration\n */\nfunction forEach(collection, iterator) {\n\n let val,\n result;\n\n if (isUndefined(collection)) {\n return;\n }\n\n const convertKey = isArray(collection) ? toNum : identity;\n\n for (let key in collection) {\n\n if (has(collection, key)) {\n val = collection[key];\n\n result = iterator(val, convertKey(key));\n\n if (result === false) {\n return val;\n }\n }\n }\n}\n\n\n/**\n * Return true if some elements in the collection\n * match the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction some(collection, matcher) {\n\n return !!find(collection, matcher);\n}\n\n\n/**\n * @template T\n * @param {Matcher} matcher\n *\n * @return {MatchFn}\n */\nfunction toMatcher(matcher) {\n return isFunction(matcher) ? matcher : (e) => {\n return e === matcher;\n };\n}\n\n\nfunction identity(arg) {\n return arg;\n}\n\nfunction toNum(arg) {\n return Number(arg);\n}\n\n/**\n * Convenience wrapper for `Object.assign`.\n *\n * @param {Object} target\n * @param {...Object} others\n *\n * @return {Object} the target\n */\nfunction assign(target, ...others) {\n return Object.assign(target, ...others);\n}\n\nconst EVENT_GROUP = {\n id: 'events',\n name: 'Events'\n};\n\nconst TASK_GROUP = {\n id: 'tasks',\n name: 'Tasks'\n};\n\nconst DATA_GROUP = {\n id: 'data',\n name: 'Data'\n};\n\nconst PARTICIPANT_GROUP = {\n id: 'participants',\n name: 'Participants'\n};\n\nconst SUBPROCESS_GROUP = {\n id: 'subprocess',\n name: 'Sub-processes'\n};\n\nconst GATEWAY_GROUP = {\n id: 'gateways',\n name: 'Gateways'\n};\n\nconst NONE_EVENTS = [\n {\n label: 'Start event',\n actionName: 'none-start-event',\n className: 'bpmn-icon-start-event-none',\n target: {\n type: 'bpmn:StartEvent'\n }\n },\n {\n label: 'Intermediate throw event',\n actionName: 'none-intermediate-throwing',\n className: 'bpmn-icon-intermediate-event-none',\n target: {\n type: 'bpmn:IntermediateThrowEvent'\n }\n },\n {\n label: 'Boundary event',\n actionName: 'none-boundary-event',\n className: 'bpmn-icon-intermediate-event-none',\n target: {\n type: 'bpmn:BoundaryEvent'\n }\n },\n {\n label: 'End event',\n actionName: 'none-end-event',\n className: 'bpmn-icon-end-event-none',\n target: {\n type: 'bpmn:EndEvent'\n }\n }\n].map(option => ({ ...option, group: EVENT_GROUP }));\n\nconst TYPED_START_EVENTS = [\n {\n label: 'Message start event',\n actionName: 'message-start',\n className: 'bpmn-icon-start-event-message',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Timer start event',\n actionName: 'timer-start',\n className: 'bpmn-icon-start-event-timer',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition'\n }\n },\n {\n label: 'Conditional start event',\n actionName: 'conditional-start',\n className: 'bpmn-icon-start-event-condition',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition'\n }\n },\n {\n label: 'Signal start event',\n actionName: 'signal-start',\n className: 'bpmn-icon-start-event-signal',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n }\n].map(option => ({ ...option, group: EVENT_GROUP }));\n\nconst TYPED_INTERMEDIATE_EVENT = [\n {\n label: 'Message intermediate catch event',\n actionName: 'message-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-message',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Message intermediate throw event',\n actionName: 'message-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-message',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Timer intermediate catch event',\n actionName: 'timer-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-timer',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition'\n }\n },\n {\n label: 'Escalation intermediate throw event',\n actionName: 'escalation-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-escalation',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition'\n }\n },\n {\n label: 'Conditional intermediate catch event',\n actionName: 'conditional-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-condition',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition'\n }\n },\n {\n label: 'Link intermediate catch event',\n actionName: 'link-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-link',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:LinkEventDefinition',\n eventDefinitionAttrs: {\n name: ''\n }\n }\n },\n {\n label: 'Link intermediate throw event',\n actionName: 'link-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-link',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:LinkEventDefinition',\n eventDefinitionAttrs: {\n name: ''\n }\n }\n },\n {\n label: 'Compensation intermediate throw event',\n actionName: 'compensation-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-compensation',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition'\n }\n },\n {\n label: 'Signal intermediate catch event',\n actionName: 'signal-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-signal',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n },\n {\n label: 'Signal intermediate throw event',\n actionName: 'signal-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-signal',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n }\n].map(option => ({ ...option, group: EVENT_GROUP }));\n\nconst TYPED_BOUNDARY_EVENT = [\n {\n label: 'Message boundary event',\n actionName: 'message-boundary',\n className: 'bpmn-icon-intermediate-event-catch-message',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Timer boundary event',\n actionName: 'timer-boundary',\n className: 'bpmn-icon-intermediate-event-catch-timer',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition'\n }\n },\n {\n label: 'Escalation boundary event',\n actionName: 'escalation-boundary',\n className: 'bpmn-icon-intermediate-event-catch-escalation',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition'\n }\n },\n {\n label: 'Conditional boundary event',\n actionName: 'conditional-boundary',\n className: 'bpmn-icon-intermediate-event-catch-condition',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition'\n }\n },\n {\n label: 'Error boundary event',\n actionName: 'error-boundary',\n className: 'bpmn-icon-intermediate-event-catch-error',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:ErrorEventDefinition'\n }\n },\n {\n label: 'Cancel boundary event',\n actionName: 'cancel-boundary',\n className: 'bpmn-icon-intermediate-event-catch-cancel',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:CancelEventDefinition'\n }\n },\n {\n label: 'Signal boundary event',\n actionName: 'signal-boundary',\n className: 'bpmn-icon-intermediate-event-catch-signal',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n },\n {\n label: 'Compensation boundary event',\n actionName: 'compensation-boundary',\n className: 'bpmn-icon-intermediate-event-catch-compensation',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition'\n }\n },\n {\n label: 'Message boundary event (non-interrupting)',\n actionName: 'non-interrupting-message-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-message',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Timer boundary event (non-interrupting)',\n actionName: 'non-interrupting-timer-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-timer',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Escalation boundary event (non-interrupting)',\n actionName: 'non-interrupting-escalation-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-escalation',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Conditional boundary event (non-interrupting)',\n actionName: 'non-interrupting-conditional-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-condition',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Signal boundary event (non-interrupting)',\n actionName: 'non-interrupting-signal-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-signal',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition',\n cancelActivity: false\n }\n }\n].map(option => ({ ...option, group: EVENT_GROUP }));\n\nconst TYPED_END_EVENT = [\n {\n label: 'Message end event',\n actionName: 'message-end',\n className: 'bpmn-icon-end-event-message',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Escalation end event',\n actionName: 'escalation-end',\n className: 'bpmn-icon-end-event-escalation',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition'\n }\n },\n {\n label: 'Error end event',\n actionName: 'error-end',\n className: 'bpmn-icon-end-event-error',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:ErrorEventDefinition'\n }\n },\n {\n label: 'Cancel end event',\n actionName: 'cancel-end',\n className: 'bpmn-icon-end-event-cancel',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:CancelEventDefinition'\n }\n },\n {\n label: 'Compensation end event',\n actionName: 'compensation-end',\n className: 'bpmn-icon-end-event-compensation',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition'\n }\n },\n {\n label: 'Signal end event',\n actionName: 'signal-end',\n className: 'bpmn-icon-end-event-signal',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n },\n {\n label: 'Terminate end event',\n actionName: 'terminate-end',\n className: 'bpmn-icon-end-event-terminate',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:TerminateEventDefinition'\n }\n }\n].map(option => ({ ...option, group: EVENT_GROUP }));\n\nconst GATEWAY$1 = [\n {\n label: 'Exclusive gateway',\n actionName: 'exclusive-gateway',\n className: 'bpmn-icon-gateway-xor',\n target: {\n type: 'bpmn:ExclusiveGateway'\n }\n },\n {\n label: 'Parallel gateway',\n actionName: 'parallel-gateway',\n className: 'bpmn-icon-gateway-parallel',\n target: {\n type: 'bpmn:ParallelGateway'\n }\n },\n {\n label: 'Inclusive gateway',\n search: 'or',\n actionName: 'inclusive-gateway',\n className: 'bpmn-icon-gateway-or',\n target: {\n type: 'bpmn:InclusiveGateway'\n },\n rank: -1\n },\n {\n label: 'Complex gateway',\n actionName: 'complex-gateway',\n className: 'bpmn-icon-gateway-complex',\n target: {\n type: 'bpmn:ComplexGateway'\n },\n rank: -1\n },\n {\n label: 'Event-based gateway',\n actionName: 'event-based-gateway',\n className: 'bpmn-icon-gateway-eventbased',\n target: {\n type: 'bpmn:EventBasedGateway',\n instantiate: false,\n eventGatewayType: 'Exclusive'\n }\n }\n].map(option => ({ ...option, group: GATEWAY_GROUP }));\n\nconst SUBPROCESS = [\n {\n label: 'Call activity',\n actionName: 'call-activity',\n className: 'bpmn-icon-call-activity',\n target: {\n type: 'bpmn:CallActivity'\n }\n },\n {\n label: 'Transaction',\n actionName: 'transaction',\n className: 'bpmn-icon-transaction',\n target: {\n type: 'bpmn:Transaction',\n isExpanded: true\n }\n },\n {\n label: 'Event sub-process',\n search: 'subprocess',\n actionName: 'event-subprocess',\n className: 'bpmn-icon-event-subprocess-expanded',\n target: {\n type: 'bpmn:SubProcess',\n triggeredByEvent: true,\n isExpanded: true\n }\n },\n {\n label: 'Sub-process (collapsed)',\n search: 'subprocess',\n actionName: 'collapsed-subprocess',\n className: 'bpmn-icon-subprocess-collapsed',\n target: {\n type: 'bpmn:SubProcess',\n isExpanded: false\n }\n },\n {\n label: 'Sub-process (expanded)',\n search: 'subprocess',\n actionName: 'expanded-subprocess',\n className: 'bpmn-icon-subprocess-expanded',\n target: {\n type: 'bpmn:SubProcess',\n isExpanded: true\n }\n }\n].map(option => ({ ...option, group: SUBPROCESS_GROUP }));\n\nconst TASK$1 = [\n {\n label: 'Task',\n actionName: 'task',\n className: 'bpmn-icon-task',\n target: {\n type: 'bpmn:Task'\n }\n },\n {\n label: 'User task',\n actionName: 'user-task',\n className: 'bpmn-icon-user',\n target: {\n type: 'bpmn:UserTask'\n }\n },\n {\n label: 'Service task',\n actionName: 'service-task',\n className: 'bpmn-icon-service',\n target: {\n type: 'bpmn:ServiceTask'\n }\n },\n {\n label: 'Send task',\n actionName: 'send-task',\n className: 'bpmn-icon-send',\n target: {\n type: 'bpmn:SendTask'\n },\n rank: -1\n },\n {\n label: 'Receive task',\n actionName: 'receive-task',\n className: 'bpmn-icon-receive',\n target: {\n type: 'bpmn:ReceiveTask'\n },\n rank: -1\n },\n {\n label: 'Manual task',\n actionName: 'manual-task',\n className: 'bpmn-icon-manual',\n target: {\n type: 'bpmn:ManualTask'\n },\n rank: -1\n },\n {\n label: 'Business rule task',\n actionName: 'rule-task',\n className: 'bpmn-icon-business-rule',\n target: {\n type: 'bpmn:BusinessRuleTask'\n }\n },\n {\n label: 'Script task',\n actionName: 'script-task',\n className: 'bpmn-icon-script',\n target: {\n type: 'bpmn:ScriptTask'\n }\n }\n].map(option => ({ ...option, group: TASK_GROUP }));\n\nconst DATA_OBJECTS = [\n {\n label: 'Data store reference',\n actionName: 'data-store-reference',\n className: 'bpmn-icon-data-store',\n target: {\n type: 'bpmn:DataStoreReference'\n }\n },\n {\n label: 'Data object reference',\n actionName: 'data-object-reference',\n className: 'bpmn-icon-data-object',\n target: {\n type: 'bpmn:DataObjectReference'\n }\n }\n].map(option => ({ ...option, group: DATA_GROUP }));\n\nconst PARTICIPANT$1 = [\n {\n label: 'Expanded pool/participant',\n search: 'Non-empty pool/participant',\n actionName: 'expanded-pool',\n className: 'bpmn-icon-participant',\n target: {\n type: 'bpmn:Participant',\n isExpanded: true\n }\n },\n {\n label: 'Empty pool/participant',\n search: 'Collapsed pool/participant',\n actionName: 'collapsed-pool',\n className: 'bpmn-icon-lane',\n target: {\n type: 'bpmn:Participant',\n isExpanded: false\n }\n }\n].map(option => ({ ...option, group: PARTICIPANT_GROUP }));\n\nconst CREATE_OPTIONS = [\n ...GATEWAY$1,\n ...TASK$1,\n ...SUBPROCESS,\n ...NONE_EVENTS,\n ...TYPED_START_EVENTS,\n ...TYPED_INTERMEDIATE_EVENT,\n ...TYPED_END_EVENT,\n ...TYPED_BOUNDARY_EVENT,\n ...DATA_OBJECTS,\n ...PARTICIPANT$1\n];\n\n/**\n * This module is an append menu provider for the popup menu.\n */\nfunction AppendMenuProvider(\n elementFactory, popupMenu,\n create, autoPlace, rules,\n mouse, translate\n) {\n\n this._elementFactory = elementFactory;\n this._popupMenu = popupMenu;\n this._create = create;\n this._autoPlace = autoPlace;\n this._rules = rules;\n this._create = create;\n this._mouse = mouse;\n this._translate = translate;\n\n this.register();\n}\n\nAppendMenuProvider.$inject = [\n 'elementFactory',\n 'popupMenu',\n 'create',\n 'autoPlace',\n 'rules',\n 'mouse',\n 'translate'\n];\n\n/**\n * Register append menu provider in the popup menu\n */\nAppendMenuProvider.prototype.register = function() {\n this._popupMenu.registerProvider('bpmn-append', this);\n};\n\n/**\n * Gets the append options for the given element as menu entries\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of menu entry items\n */\nAppendMenuProvider.prototype.getPopupMenuEntries = function(element) {\n const rules = this._rules;\n const translate = this._translate;\n\n const entries = {};\n\n if (!rules.allowed('shape.append', { element: element })) {\n return [];\n }\n\n // filter out elements with no incoming connections\n const appendOptions = this._filterEntries(CREATE_OPTIONS);\n\n // map options to menu entries\n appendOptions.forEach(option => {\n const {\n actionName,\n className,\n label,\n target,\n description,\n group,\n search,\n rank\n } = option;\n\n entries[`append-${actionName}`] = {\n label: label && translate(label),\n className,\n description,\n group: group && {\n ...group,\n name: translate(group.name)\n },\n search,\n rank,\n action: this._createEntryAction(element, target)\n };\n });\n\n return entries;\n};\n\n/**\n * Filter out entries from the options.\n *\n * @param {Array} entries\n *\n * @return {Array} filtered entries\n */\nAppendMenuProvider.prototype._filterEntries = function(entries) {\n return entries.filter(option => {\n\n const target = option.target;\n const {\n type,\n eventDefinitionType\n } = target;\n\n if ([\n 'bpmn:StartEvent',\n 'bpmn:Participant'\n ].includes(type)) {\n return false;\n }\n\n if (type === 'bpmn:BoundaryEvent' && isUndefined(eventDefinitionType)) {\n return false;\n }\n\n return true;\n });\n};\n\n/**\n * Create an action for a given target.\n *\n * @param {djs.model.Base} element\n * @param {Object} target\n *\n * @return {Object}\n */\nAppendMenuProvider.prototype._createEntryAction = function(element, target) {\n const elementFactory = this._elementFactory;\n const autoPlace = this._autoPlace;\n const create = this._create;\n const mouse = this._mouse;\n\n\n const autoPlaceElement = () => {\n const newElement = elementFactory.create('shape', target);\n autoPlace.append(element, newElement);\n };\n\n const manualPlaceElement = (event) => {\n const newElement = elementFactory.create('shape', target);\n\n if (event instanceof KeyboardEvent) {\n event = mouse.getLastMoveEvent();\n }\n\n return create.start(event, newElement, {\n source: element\n });\n };\n\n return {\n click: this._canAutoPlaceElement(target) ? autoPlaceElement : manualPlaceElement,\n dragstart: manualPlaceElement\n };\n};\n\n/**\n * Check if the element should be auto placed.\n *\n * @param {Object} target\n *\n * @return {Boolean}\n */\nAppendMenuProvider.prototype._canAutoPlaceElement = (target) => {\n const { type } = target;\n\n if (type === 'bpmn:BoundaryEvent') {\n return false;\n }\n\n if (type === 'bpmn:SubProcess' && target.triggeredByEvent) {\n return false;\n }\n\n if (type === 'bpmn:IntermediateCatchEvent' && target.eventDefinitionType === 'bpmn:LinkEventDefinition') {\n return false;\n }\n\n return true;\n};\n\nconst appendIcon = `\n \n `;\nconst createIcon = `\n \n `;\n\n/**\n * A provider for append context pad button\n */\nfunction AppendContextPadProvider(contextPad, popupMenu, translate, canvas, rules) {\n\n this._contextPad = contextPad;\n this._popupMenu = popupMenu;\n this._translate = translate;\n this._canvas = canvas;\n this._rules = rules;\n\n this.register();\n}\n\nAppendContextPadProvider.$inject = [\n 'contextPad',\n 'popupMenu',\n 'translate',\n 'canvas',\n 'rules'\n];\n\n/**\n * Register append button provider in the context pad\n */\nAppendContextPadProvider.prototype.register = function() {\n this._contextPad.registerProvider(this);\n};\n\n/**\n * Gets the append context pad entry\n *\n * @param {djs.model.Base} element\n * @returns {Object} entries\n */\nAppendContextPadProvider.prototype.getContextPadEntries = function(element) {\n const popupMenu = this._popupMenu;\n const translate = this._translate;\n const rules = this._rules;\n const getAppendMenuPosition = this._getAppendMenuPosition.bind(this);\n\n if (rules.allowed('shape.append', { element })) {\n\n // append menu entry\n return {\n 'append': {\n group: 'model',\n html: `${appendIcon}
`,\n title: translate('Append element'),\n action: {\n click: function(event, element) {\n\n const position = assign(getAppendMenuPosition(element), {\n cursor: { x: event.x, y: event.y }\n });\n\n popupMenu.open(element, 'bpmn-append', position, {\n title: translate('Append element'),\n width: 300,\n search: true\n });\n }\n }\n }\n };\n }\n};\n\n/**\n * Calculates the position for the append menu relatively to the element\n *\n * @param {djs.model.Base} element\n * @returns {Object}\n */\nAppendContextPadProvider.prototype._getAppendMenuPosition = function(element) {\n const contextPad = this._contextPad;\n\n const X_OFFSET = 5;\n\n const pad = contextPad.getPad(element).html;\n\n const padRect = pad.getBoundingClientRect();\n\n const pos = {\n x: padRect.right + X_OFFSET,\n y: padRect.top\n };\n\n return pos;\n};\n\nfunction e(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}));}\n\n/**\n * @typedef { import('../model/Types').Element } Element\n * @typedef { import('../model/Types').ModdleElement } ModdleElement\n */\n\n/**\n * Is an element of the given BPMN type?\n *\n * @param {Element|ModdleElement} element\n * @param {string} type\n *\n * @return {boolean}\n */\nfunction is(element, type) {\n var bo = getBusinessObject(element);\n\n return bo && (typeof bo.$instanceOf === 'function') && bo.$instanceOf(type);\n}\n\n\n/**\n * Return true if element has any of the given types.\n *\n * @param {Element|ModdleElement} element\n * @param {string[]} types\n *\n * @return {boolean}\n */\nfunction isAny(element, types) {\n return some(types, function(t) {\n return is(element, t);\n });\n}\n\n/**\n * Return the business object for a given element.\n *\n * @param {Element|ModdleElement} element\n *\n * @return {ModdleElement}\n */\nfunction getBusinessObject(element) {\n return (element && element.businessObject) || element;\n}\n\n/**\n * Return the di object for a given element.\n *\n * @param {Element} element\n *\n * @return {ModdleElement}\n */\nfunction getDi(element) {\n return element && element.di;\n}\n\n/**\n * Checks whether a value is an instance of Label.\n *\n * @param {any} value\n *\n * @return {boolean}\n */\nfunction isLabel(value) {\n return isObject(value) && has(value, 'labelTarget');\n}\n\n/**\n * @typedef {import('../core/Types').ElementLike} ElementLike\n * @typedef {import('../core/EventBus').default} EventBus\n * @typedef {import('./CommandStack').CommandContext} CommandContext\n *\n * @typedef {string|string[]} Events\n * @typedef { (context: CommandContext) => ElementLike[] | void } HandlerFunction\n * @typedef { (context: CommandContext) => void } ComposeHandlerFunction\n */\n\nvar DEFAULT_PRIORITY = 1000;\n\n/**\n * A utility that can be used to plug into the command execution for\n * extension and/or validation.\n *\n * @class\n * @constructor\n *\n * @example\n *\n * ```javascript\n * import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';\n *\n * class CommandLogger extends CommandInterceptor {\n * constructor(eventBus) {\n * super(eventBus);\n *\n * this.preExecute('shape.create', (event) => {\n * console.log('commandStack.shape-create.preExecute', event);\n * });\n * }\n * ```\n *\n * @param {EventBus} eventBus\n */\nfunction CommandInterceptor(eventBus) {\n\n /**\n * @type {EventBus}\n */\n this._eventBus = eventBus;\n}\n\nCommandInterceptor.$inject = [ 'eventBus' ];\n\nfunction unwrapEvent(fn, that) {\n return function(event) {\n return fn.call(that || null, event.context, event.command, event);\n };\n}\n\n\n/**\n * Intercept a command during one of the phases.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {string} [hook] phase to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.on = function(events, hook, priority, handlerFn, unwrap, that) {\n\n if (isFunction(hook) || isNumber(hook)) {\n that = unwrap;\n unwrap = handlerFn;\n handlerFn = priority;\n priority = hook;\n hook = null;\n }\n\n if (isFunction(priority)) {\n that = unwrap;\n unwrap = handlerFn;\n handlerFn = priority;\n priority = DEFAULT_PRIORITY;\n }\n\n if (isObject(unwrap)) {\n that = unwrap;\n unwrap = false;\n }\n\n if (!isFunction(handlerFn)) {\n throw new Error('handlerFn must be a function');\n }\n\n if (!isArray(events)) {\n events = [ events ];\n }\n\n var eventBus = this._eventBus;\n\n forEach(events, function(event) {\n\n // concat commandStack(.event)?(.hook)?\n var fullEvent = [ 'commandStack', event, hook ].filter(function(e) { return e; }).join('.');\n\n eventBus.on(fullEvent, priority, unwrap ? unwrapEvent(handlerFn, that) : handlerFn, that);\n });\n};\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.canExecute = createHook('canExecute');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.preExecute = createHook('preExecute');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.preExecuted = createHook('preExecuted');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.execute = createHook('execute');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.executed = createHook('executed');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.postExecute = createHook('postExecute');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.postExecuted = createHook('postExecuted');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.revert = createHook('revert');\n\n/**\n * Add a phase of command interceptor.\n *\n * @param {Events} [events] command(s) to intercept\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap] whether the event should be unwrapped\n * @param {any} [that]\n */\nCommandInterceptor.prototype.reverted = createHook('reverted');\n\n/*\n * Add prototype methods for each phase of command execution (e.g. execute,\n * revert).\n *\n * @param {string} hook\n *\n * @return { (\n * events?: Events,\n * priority?: number,\n * handlerFn: ComposeHandlerFunction|HandlerFunction,\n * unwrap?: boolean\n * ) => any }\n */\nfunction createHook(hook) {\n\n /**\n * @this {CommandInterceptor}\n *\n * @param {Events} [events]\n * @param {number} [priority]\n * @param {ComposeHandlerFunction|HandlerFunction} handlerFn\n * @param {boolean} [unwrap]\n * @param {any} [that]\n */\n const hookFn = function(events, priority, handlerFn, unwrap, that) {\n\n if (isFunction(events) || isNumber(events)) {\n that = unwrap;\n unwrap = handlerFn;\n handlerFn = priority;\n priority = events;\n events = null;\n }\n\n this.on(events, hook, priority, handlerFn, unwrap, that);\n };\n\n return hookFn;\n}\n\n/**\n * @typedef {import('../../core/EventBus').default} EventBus\n */\n\n/**\n * A basic provider that may be extended to implement modeling rules.\n *\n * Extensions should implement the init method to actually add their custom\n * modeling checks. Checks may be added via the #addRule(action, fn) method.\n *\n * @class\n *\n * @param {EventBus} eventBus\n */\nfunction RuleProvider(eventBus) {\n CommandInterceptor.call(this, eventBus);\n\n this.init();\n}\n\nRuleProvider.$inject = [ 'eventBus' ];\n\ne(RuleProvider, CommandInterceptor);\n\n\n/**\n * Adds a modeling rule for the given action, implemented through\n * a callback function.\n *\n * The callback receives a modeling specific action context\n * to perform its check. It must return `false` to disallow the\n * action from happening or `true` to allow the action. Usually returing\n * `null` denotes that a particular interaction shall be ignored.\n * By returning nothing or `undefined` you pass evaluation to lower\n * priority rules.\n *\n * @example\n *\n * ```javascript\n * ResizableRules.prototype.init = function() {\n *\n * \\/**\n * * Return `true`, `false` or nothing to denote\n * * _allowed_, _not allowed_ and _continue evaluating_.\n * *\\/\n * this.addRule('shape.resize', function(context) {\n *\n * var shape = context.shape;\n *\n * if (!context.newBounds) {\n * // check general resizability\n * if (!shape.resizable) {\n * return false;\n * }\n *\n * // not returning anything (read: undefined)\n * // will continue the evaluation of other rules\n * // (with lower priority)\n * return;\n * } else {\n * // element must have minimum size of 10*10 points\n * return context.newBounds.width > 10 && context.newBounds.height > 10;\n * }\n * });\n * };\n * ```\n *\n * @param {string|string[]} actions the identifier for the modeling action to check\n * @param {number} [priority] the priority at which this rule is being applied\n * @param {(any) => any} fn the callback function that performs the actual check\n */\nRuleProvider.prototype.addRule = function(actions, priority, fn) {\n\n var self = this;\n\n if (typeof actions === 'string') {\n actions = [ actions ];\n }\n\n actions.forEach(function(action) {\n\n self.canExecute(action, priority, function(context, action, event) {\n return fn(context);\n }, true);\n });\n};\n\n/**\n * Implement this method to add new rules during provider initialization.\n */\nRuleProvider.prototype.init = function() {};\n\n/**\n * Append anything modeling rules\n */\nfunction AppendRules(eventBus) {\n RuleProvider.call(this, eventBus);\n}\n\ne(AppendRules, RuleProvider);\n\nAppendRules.$inject = [\n 'eventBus'\n];\n\nAppendRules.prototype.init = function() {\n this.addRule('shape.append', function(context) {\n\n const source = context.element;\n\n const businessObject = getBusinessObject(source);\n\n if (isLabel(source)) {\n return false;\n }\n\n if (isAny(source, [\n 'bpmn:EndEvent',\n 'bpmn:Group',\n 'bpmn:TextAnnotation',\n 'bpmn:Lane',\n 'bpmn:Participant',\n 'bpmn:DataStoreReference',\n 'bpmn:DataObjectReference'\n ])) {\n return false;\n }\n\n if (isConnection(source)) {\n return false;\n }\n\n if (is(source, 'bpmn:IntermediateThrowEvent') && hasEventDefinition(source, 'bpmn:LinkEventDefinition')) {\n return false;\n }\n\n if (is(source, 'bpmn:SubProcess') && businessObject.triggeredByEvent) {\n return false;\n }\n });\n\n};\n\n\n// helpers //////////////\nfunction hasEventDefinition(element, eventDefinition) {\n const bo = getBusinessObject(element);\n\n return !!find(bo.eventDefinitions || [], function(definition) {\n return is(definition, eventDefinition);\n });\n}\n\nfunction isConnection(element) {\n return element.waypoints;\n}\n\nvar AppendMenuModule = {\n __init__: [\n 'appendMenuProvider',\n 'appendContextPadProvider',\n 'appendRules'\n ],\n appendMenuProvider: [ 'type', AppendMenuProvider ],\n appendContextPadProvider: [ 'type', AppendContextPadProvider ],\n appendRules: [ 'type', AppendRules ]\n};\n\n/**\n * This module is a create menu provider for the popup menu.\n */\nfunction CreateMenuProvider(\n elementFactory, popupMenu, create,\n autoPlace, mouse, translate\n) {\n this._elementFactory = elementFactory;\n this._popupMenu = popupMenu;\n this._create = create;\n this._autoPlace = autoPlace;\n this._mouse = mouse;\n this._translate = translate;\n\n this.register();\n}\n\nCreateMenuProvider.$inject = [\n 'elementFactory',\n 'popupMenu',\n 'create',\n 'autoPlace',\n 'mouse',\n 'translate'\n];\n\n/**\n * Register create menu provider in the popup menu\n */\nCreateMenuProvider.prototype.register = function() {\n this._popupMenu.registerProvider('bpmn-create', this);\n};\n\n/**\n * Returns the create options as menu entries\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of menu entry items\n */\nCreateMenuProvider.prototype.getPopupMenuEntries = function() {\n\n const entries = {};\n\n // map options to menu entries\n CREATE_OPTIONS.forEach(option => {\n const {\n actionName,\n className,\n label,\n target,\n description,\n group,\n search,\n rank\n } = option;\n\n const targetAction = this._createEntryAction(target);\n\n entries[`create-${actionName}`] = {\n label: label && this._translate(label),\n className,\n description,\n group: group && {\n ...group,\n name: this._translate(group.name)\n },\n search,\n rank,\n action: {\n click: targetAction,\n dragstart: targetAction\n }\n };\n });\n\n return entries;\n};\n\n/**\n * Create an action for a given target\n *\n * @param {Object} target\n * @returns {Object}\n */\nCreateMenuProvider.prototype._createEntryAction = function(target) {\n\n const create = this._create;\n const mouse = this._mouse;\n const popupMenu = this._popupMenu;\n const elementFactory = this._elementFactory;\n\n let newElement;\n\n return (event) => {\n popupMenu.close();\n\n // create the new element\n if (target.type === 'bpmn:Participant') {\n newElement = elementFactory.createParticipantShape(target);\n } else {\n newElement = elementFactory.create('shape', target);\n }\n\n // use last mouse event if triggered via keyboard\n if (event instanceof KeyboardEvent) {\n event = mouse.getLastMoveEvent();\n }\n\n return create.start(event, newElement);\n };\n};\n\nvar bugTestDiv;\nif (typeof document !== 'undefined') {\n bugTestDiv = document.createElement('div');\n // Setup\n bugTestDiv.innerHTML = ' a ';\n // Make sure that link elements get serialized correctly by innerHTML\n // This requires a wrapper element in IE\n !bugTestDiv.getElementsByTagName('link').length;\n bugTestDiv = undefined;\n}\n\nfunction query(selector, el) {\n el = el || document;\n\n return el.querySelector(selector);\n}\n\nconst LOWER_PRIORITY = 900;\n\n/**\n * A palette provider for the create elements menu.\n */\nfunction CreatePaletteProvider(palette, translate, popupMenu, canvas, mouse) {\n\n this._palette = palette;\n this._translate = translate;\n this._popupMenu = popupMenu;\n this._canvas = canvas;\n this._mouse = mouse;\n\n this.register();\n}\n\nCreatePaletteProvider.$inject = [\n 'palette',\n 'translate',\n 'popupMenu',\n 'canvas',\n 'mouse'\n];\n\n/**\n * Register create button provider in the palette\n */\nCreatePaletteProvider.prototype.register = function() {\n this._palette.registerProvider(LOWER_PRIORITY, this);\n};\n\n/**\n * Gets the palette create entry\n *\n * @param {djs.model.Base} element\n * @returns {Object}\n */\nCreatePaletteProvider.prototype.getPaletteEntries = function(element) {\n const translate = this._translate,\n popupMenu = this._popupMenu,\n canvas = this._canvas,\n mouse = this._mouse;\n\n const getPosition = (event) => {\n const X_OFFSET = 35;\n const Y_OFFSET = 10;\n\n if (event instanceof KeyboardEvent) {\n event = mouse.getLastMoveEvent();\n return { x: event.x, y: event.y };\n }\n\n const target = event && event.target || query('.djs-palette [data-action=\"create\"]');\n const targetPosition = target.getBoundingClientRect();\n\n return target && {\n x: targetPosition.left + targetPosition.width / 2 + X_OFFSET,\n y: targetPosition.top + targetPosition.height / 2 + Y_OFFSET\n };\n };\n\n return {\n 'create': {\n group: 'create',\n html: ` ${createIcon}
`,\n title: translate('Create element'),\n action: {\n click: function(event) {\n const position = getPosition(event);\n\n const element = canvas.getRootElement();\n\n popupMenu.open(element, 'bpmn-create', position, {\n title: translate('Create element'),\n width: 300,\n search: true\n });\n }\n }\n }\n };\n};\n\nvar CreateMenuModule = {\n __init__: [\n 'createMenuProvider',\n 'createPaletteProvider'\n ],\n createMenuProvider: [ 'type', CreateMenuProvider ],\n createPaletteProvider: [ 'type', CreatePaletteProvider ]\n};\n\n/**\n * Registers and executes BPMN specific editor actions.\n *\n * @param {Injector} injector\n */\nfunction CreateAppendEditorActions(injector) {\n this._injector = injector;\n\n this.registerActions();\n}\n\nCreateAppendEditorActions.$inject = [\n 'injector'\n];\n\n/**\n * Register actions.\n *\n * @param {Injector} injector\n */\nCreateAppendEditorActions.prototype.registerActions = function() {\n const editorActions = this._injector.get('editorActions', false);\n const selection = this._injector.get('selection', false);\n const contextPad = this._injector.get('contextPad', false);\n const palette = this._injector.get('palette', false);\n const popupMenu = this._injector.get('popupMenu', false);\n\n const actions = {};\n\n // append\n if (selection && contextPad && palette && popupMenu && palette) {\n assign(actions, {\n 'appendElement': function(event) {\n const selected = selection && selection.get();\n\n if (selected.length == 1 && !popupMenu.isEmpty(selected[0], 'bpmn-append')) {\n contextPad.triggerEntry('append', 'click', event);\n } else {\n palette.triggerEntry('create', 'click', event);\n }\n }\n });\n }\n\n // create\n if (palette) {\n assign(actions, {\n 'createElement': function(event) {\n palette.triggerEntry('create', 'click', event);\n } }\n );\n }\n\n editorActions && editorActions.register(actions);\n\n};\n\nvar EditorActionsModule = {\n __depends__: [\n AppendMenuModule,\n CreateMenuModule\n ],\n __init__: [\n 'createAppendEditorActions'\n ],\n createAppendEditorActions: [ 'type', CreateAppendEditorActions ]\n};\n\nvar KEYS_COPY = [ 'c', 'C' ];\r\nvar KEYS_PASTE = [ 'v', 'V' ];\r\nvar KEYS_REDO = [ 'y', 'Y' ];\r\nvar KEYS_UNDO = [ 'z', 'Z' ];\r\n\r\n/**\r\n * @param {KeyboardEvent} event\r\n * @return {boolean}\r\n */\r\nfunction isCmd(event) {\r\n\r\n // ensure we don't react to AltGr\r\n // (mapped to CTRL + ALT)\r\n if (event.altKey) {\r\n return false;\r\n }\r\n\r\n return event.ctrlKey || event.metaKey;\r\n}\r\n\r\n/**\r\n * Checks if key pressed is one of provided keys.\r\n *\r\n * @param {string|string[]} keys\r\n * @param {KeyboardEvent} event\r\n * @return {boolean}\r\n */\r\nfunction isKey(keys, event) {\r\n keys = isArray(keys) ? keys : [ keys ];\r\n\r\n return keys.indexOf(event.key) !== -1 || keys.indexOf(event.code) !== -1;\r\n}\r\n\r\n/**\r\n * @param {KeyboardEvent} event\r\n */\r\nfunction isShift(event) {\r\n return event.shiftKey;\r\n}\r\n\r\n/**\r\n * @param {KeyboardEvent} event\r\n */\r\nfunction isCopy(event) {\r\n return isCmd(event) && isKey(KEYS_COPY, event);\r\n}\r\n\r\n/**\r\n * @param {KeyboardEvent} event\r\n */\r\nfunction isPaste(event) {\r\n return isCmd(event) && isKey(KEYS_PASTE, event);\r\n}\r\n\r\n/**\r\n * @param {KeyboardEvent} event\r\n */\r\nfunction isUndo(event) {\r\n return isCmd(event) && !isShift(event) && isKey(KEYS_UNDO, event);\r\n}\r\n\r\n/**\r\n * @param {KeyboardEvent} event\r\n */\r\nfunction isRedo(event) {\r\n return isCmd(event) && (\r\n isKey(KEYS_REDO, event) || (\r\n isKey(KEYS_UNDO, event) && isShift(event)\r\n )\r\n );\r\n}\n\nvar LOW_PRIORITY = 500;\n\n\n/**\n * Adds default keyboard bindings.\n *\n * This does not pull in any features will bind only actions that\n * have previously been registered against the editorActions component.\n *\n * @param {EventBus} eventBus\n * @param {Keyboard} keyboard\n */\nfunction KeyboardBindings(eventBus, keyboard) {\n\n var self = this;\n\n eventBus.on('editorActions.init', LOW_PRIORITY, function(event) {\n\n var editorActions = event.editorActions;\n\n self.registerBindings(keyboard, editorActions);\n });\n}\n\nKeyboardBindings.$inject = [\n 'eventBus',\n 'keyboard'\n];\n\n\n/**\n * Register available keyboard bindings.\n *\n * @param {Keyboard} keyboard\n * @param {EditorActions} editorActions\n */\nKeyboardBindings.prototype.registerBindings = function(keyboard, editorActions) {\n\n /**\n * Add keyboard binding if respective editor action\n * is registered.\n *\n * @param {string} action name\n * @param {Function} fn that implements the key binding\n */\n function addListener(action, fn) {\n\n if (editorActions.isRegistered(action)) {\n keyboard.addListener(fn);\n }\n }\n\n\n // undo\n // (CTRL|CMD) + Z\n addListener('undo', function(context) {\n\n var event = context.keyEvent;\n\n if (isUndo(event)) {\n editorActions.trigger('undo');\n\n return true;\n }\n });\n\n // redo\n // CTRL + Y\n // CMD + SHIFT + Z\n addListener('redo', function(context) {\n\n var event = context.keyEvent;\n\n if (isRedo(event)) {\n editorActions.trigger('redo');\n\n return true;\n }\n });\n\n // copy\n // CTRL/CMD + C\n addListener('copy', function(context) {\n\n var event = context.keyEvent;\n\n if (isCopy(event)) {\n editorActions.trigger('copy');\n\n return true;\n }\n });\n\n // paste\n // CTRL/CMD + V\n addListener('paste', function(context) {\n\n var event = context.keyEvent;\n\n if (isPaste(event)) {\n editorActions.trigger('paste');\n\n return true;\n }\n });\n\n // zoom in one step\n // CTRL/CMD + +\n addListener('stepZoom', function(context) {\n\n var event = context.keyEvent;\n\n // quirk: it has to be triggered by `=` as well to work on international keyboard layout\n // cf: https://github.com/bpmn-io/bpmn-js/issues/1362#issuecomment-722989754\n if (isKey([ '+', 'Add', '=' ], event) && isCmd(event)) {\n editorActions.trigger('stepZoom', { value: 1 });\n\n return true;\n }\n });\n\n // zoom out one step\n // CTRL + -\n addListener('stepZoom', function(context) {\n\n var event = context.keyEvent;\n\n if (isKey([ '-', 'Subtract' ], event) && isCmd(event)) {\n editorActions.trigger('stepZoom', { value: -1 });\n\n return true;\n }\n });\n\n // zoom to the default level\n // CTRL + 0\n addListener('zoom', function(context) {\n\n var event = context.keyEvent;\n\n if (isKey('0', event) && isCmd(event)) {\n editorActions.trigger('zoom', { value: 1 });\n\n return true;\n }\n });\n\n // delete selected element\n // DEL\n addListener('removeSelection', function(context) {\n\n var event = context.keyEvent;\n\n if (isKey([ 'Backspace', 'Delete', 'Del' ], event)) {\n editorActions.trigger('removeSelection');\n\n return true;\n }\n });\n};\n\n/**\n * BPMN 2.0 specific keyboard bindings.\n *\n * @param {Injector} injector\n */\nfunction CreateAppendKeyboardBindings(injector) {\n\n this._injector = injector;\n this._keyboard = this._injector.get('keyboard', false);\n this._editorActions = this._injector.get('editorActions', false);\n\n if (this._keyboard) {\n this._injector.invoke(KeyboardBindings, this);\n }\n}\n\ne(CreateAppendKeyboardBindings, KeyboardBindings);\n\nCreateAppendKeyboardBindings.$inject = [\n 'injector'\n];\n\n\n/**\n * Register available keyboard bindings.\n *\n * @param {Keyboard} keyboard\n * @param {EditorActions} editorActions\n */\nCreateAppendKeyboardBindings.prototype.registerBindings = function() {\n\n const keyboard = this._keyboard;\n const editorActions = this._editorActions;\n\n // inherit default bindings\n KeyboardBindings.prototype.registerBindings.call(this, keyboard, editorActions);\n\n /**\n * Add keyboard binding if respective editor action\n * is registered.\n *\n * @param {string} action name\n * @param {Function} fn that implements the key binding\n */\n function addListener(action, fn) {\n\n if (editorActions && editorActions.isRegistered(action)) {\n keyboard && keyboard.addListener(fn);\n }\n }\n\n // activate append/create element\n // A\n addListener('appendElement', function(context) {\n\n const event = context.keyEvent;\n\n if (keyboard && keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard && keyboard.isKey([ 'a', 'A' ], event)) {\n\n editorActions && editorActions.trigger('appendElement', event);\n return true;\n }\n });\n\n // N\n addListener('createElement', function(context) {\n\n const event = context.keyEvent;\n\n if (keyboard && keyboard.hasModifier(event)) {\n return;\n }\n\n if (keyboard && keyboard.isKey([ 'n', 'N' ], event)) {\n editorActions && editorActions.trigger('createElement', event);\n\n return true;\n }\n });\n\n};\n\nvar KeyboardBindingsModule = {\n __depends__: [\n AppendMenuModule,\n CreateMenuModule\n ],\n __init__: [\n 'createAppendKeyboardBindings'\n ],\n createAppendKeyboardBindings: [ 'type', CreateAppendKeyboardBindings ]\n};\n\nvar index$1 = {\n __depends__: [\n AppendMenuModule,\n CreateMenuModule,\n EditorActionsModule,\n KeyboardBindingsModule\n ],\n};\n\n/**\n * A popup menu provider that allows to append elements with\n * element templates.\n */\nfunction ElementTemplatesAppendProvider(\n popupMenu, translate, elementTemplates,\n autoPlace, create, mouse, rules) {\n\n this._popupMenu = popupMenu;\n this._translate = translate;\n this._elementTemplates = elementTemplates;\n this._autoPlace = autoPlace;\n this._create = create;\n this._mouse = mouse;\n this._rules = rules;\n\n this.register();\n}\n\nElementTemplatesAppendProvider.$inject = [\n 'popupMenu',\n 'translate',\n 'elementTemplates',\n 'autoPlace',\n 'create',\n 'move',\n 'rules'\n];\n\n/**\n * Register append menu provider in the popup menu\n */\nElementTemplatesAppendProvider.prototype.register = function() {\n this._popupMenu.registerProvider('bpmn-append', this);\n};\n\n/**\n * Adds the element templates to the append menu.\n * @param {djs.model.Base} element\n *\n * @returns {Object}\n */\nElementTemplatesAppendProvider.prototype.getPopupMenuEntries = function(element) {\n return (entries) => {\n\n if (!this._rules.allowed('shape.append', { element: element })) {\n return [];\n }\n\n const filteredTemplates = this._filterTemplates(this._elementTemplates.getLatest());\n\n // add template entries\n assign(entries, this.getTemplateEntries(element, filteredTemplates));\n\n return entries;\n };\n};\n\n/**\n * Get all element templates.\n *\n * @param {djs.model.Base} element\n *\n * @return {Object} element templates as menu entries\n */\nElementTemplatesAppendProvider.prototype.getTemplateEntries = function(element, templates) {\n\n const templateEntries = {};\n\n templates.map(template => {\n\n const {\n icon = {},\n category,\n } = template;\n\n const entryId = `append.template-${template.id}`;\n\n const defaultGroup = {\n id: 'templates',\n name: this._translate('Templates')\n };\n\n templateEntries[entryId] = {\n label: template.name,\n description: template.description,\n documentationRef: template.documentationRef,\n imageUrl: icon.contents,\n group: category || defaultGroup,\n action: this._getEntryAction(element, template)\n };\n });\n\n return templateEntries;\n};\n\n/**\n * Filter out templates from the options.\n *\n * @param {Array} templates\n *\n * @returns {Array}\n */\nElementTemplatesAppendProvider.prototype._filterTemplates = function(templates) {\n return templates.filter(template => {\n const {\n appliesTo,\n elementType\n } = template;\n\n const type = (elementType && elementType.value) || appliesTo[0];\n\n // elements that can not be appended\n if ([\n 'bpmn:StartEvent',\n 'bpmn:Participant'\n ].includes(type)) {\n return false;\n }\n\n // sequence flow templates are supported\n // but connections are not appendable\n if ('bpmn:SequenceFlow' === type) {\n return false;\n }\n\n return true;\n });\n};\n\n/**\n * Create an action for a given template.\n *\n * @param {djs.model.Base} element\n * @param {Object} template\n *\n * @returns {Object}\n */\nElementTemplatesAppendProvider.prototype._getEntryAction = function(element, template) {\n return {\n\n click: () => {\n const newElement = this._elementTemplates.createElement(template);\n this._autoPlace.append(element, newElement);\n },\n\n dragstart: (event) => {\n const newElement = this._elementTemplates.createElement(template);\n\n if (event instanceof KeyboardEvent) {\n event = this._mouse.getLastMoveEvent();\n }\n\n this._create.start(event, newElement, {\n source: element\n });\n }\n };\n};\n\nvar AppendElementTemplatesModule = {\n __init__: [ 'elementTemplatesAppendProvider' ],\n elementTemplatesAppendProvider: [ 'type', ElementTemplatesAppendProvider ]\n};\n\n/**\n * A popup menu provider that allows to create elements with\n * element templates.\n */\nfunction ElementTemplatesCreateProvider(\n popupMenu, translate,\n elementTemplates, mouse, create) {\n\n this._popupMenu = popupMenu;\n this._translate = translate;\n this._elementTemplates = elementTemplates;\n this._mouse = mouse;\n this._create = create;\n\n this.register();\n}\n\nElementTemplatesCreateProvider.$inject = [\n 'popupMenu',\n 'translate',\n 'elementTemplates',\n 'mouse',\n 'create'\n];\n\n/**\n * Register create menu provider in the popup menu\n */\nElementTemplatesCreateProvider.prototype.register = function() {\n this._popupMenu.registerProvider('bpmn-create', this);\n};\n\n/**\n * Adds the element templates to the create menu.\n * @param {djs.model.Base} element\n *\n * @returns {Object}\n */\nElementTemplatesCreateProvider.prototype.getPopupMenuEntries = function(element) {\n return (entries) => {\n\n // add template entries\n assign(entries, this.getTemplateEntries(element));\n\n return entries;\n };\n};\n\n/**\n * Get all element templates.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of element templates as menu entries\n */\nElementTemplatesCreateProvider.prototype.getTemplateEntries = function() {\n\n const templates = this._elementTemplates.getLatest();\n const templateEntries = {};\n\n templates.map(template => {\n\n const {\n icon = {},\n category,\n } = template;\n\n const entryId = `create.template-${template.id}`;\n\n const defaultGroup = {\n id: 'templates',\n name: this._translate('Templates')\n };\n\n templateEntries[entryId] = {\n label: template.name,\n description: template.description,\n documentationRef: template.documentationRef,\n imageUrl: icon.contents,\n group: category || defaultGroup,\n action: {\n click: this._getEntryAction(template),\n dragstart: this._getEntryAction(template)\n }\n };\n });\n\n return templateEntries;\n};\n\n\nElementTemplatesCreateProvider.prototype._getEntryAction = function(template) {\n const create = this._create;\n const popupMenu = this._popupMenu;\n const elementTemplates = this._elementTemplates;\n const mouse = this._mouse;\n\n return (event) => {\n\n popupMenu.close();\n\n // create the new element\n let newElement = elementTemplates.createElement(template);\n\n // use last mouse event if triggered via keyboard\n if (event instanceof KeyboardEvent) {\n event = mouse.getLastMoveEvent();\n }\n\n return create.start(event, newElement);\n };\n};\n\nvar CreateElementTemplatesModule = {\n __init__: [ 'elementTemplatesCreateProvider' ],\n elementTemplatesCreateProvider: [ 'type', ElementTemplatesCreateProvider ]\n};\n\n/**\n * A replace menu provider that allows to replace elements with\n * element templates.\n */\nfunction ElementTemplatesReplaceProvider(popupMenu, translate, elementTemplates) {\n\n this._popupMenu = popupMenu;\n this._translate = translate;\n this._elementTemplates = elementTemplates;\n\n this.register();\n}\n\nElementTemplatesReplaceProvider.$inject = [\n 'popupMenu',\n 'translate',\n 'elementTemplates'\n];\n\n/**\n * Register replace menu provider in the popup menu\n */\nElementTemplatesReplaceProvider.prototype.register = function() {\n this._popupMenu.registerProvider('bpmn-replace', this);\n};\n\n/**\n * Adds the element templates to the replace menu.\n * @param {djs.model.Base} element\n *\n * @returns {Object}\n */\nElementTemplatesReplaceProvider.prototype.getPopupMenuEntries = function(element) {\n\n return (entries) => {\n\n // convert our entries into something sortable\n let entrySet = Object.entries(entries);\n\n // add template entries\n entrySet = [ ...entrySet, ...this.getTemplateEntries(element) ];\n\n // convert back to object\n return entrySet.reduce((entries, [ key, value ]) => {\n entries[key] = value;\n\n return entries;\n }, {});\n };\n};\n\n/**\n * Get all element templates that can be used to replace the given element.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array} a list of element templates as menu entries\n */\nElementTemplatesReplaceProvider.prototype.getTemplateEntries = function(element) {\n\n const templates = this._getMatchingTemplates(element);\n return templates.map(template => {\n\n const {\n icon = {},\n category,\n } = template;\n\n const entryId = `replace.template-${template.id}`;\n\n const defaultGroup = {\n id: 'templates',\n name: this._translate('Templates')\n };\n\n return [ entryId, {\n label: template.name,\n description: template.description,\n documentationRef: template.documentationRef,\n imageUrl: icon.contents,\n group: category || defaultGroup,\n action: () => {\n this._elementTemplates.applyTemplate(element, template);\n }\n } ];\n });\n};\n\n/**\n * Returns the templates that can the element can be replaced with.\n *\n * @param {djs.model.Base} element\n *\n * @return {Array}\n */\nElementTemplatesReplaceProvider.prototype._getMatchingTemplates = function(element) {\n return this._elementTemplates.getLatest().filter(template => {\n return isAny(element, template.appliesTo) && !isTemplateApplied(element, template);\n });\n};\n\n\n// helpers ////////////\nfunction isTemplateApplied(element, template) {\n const businessObject = getBusinessObject(element);\n\n if (businessObject) {\n return businessObject.get('zeebe:modelerTemplate') === template.id;\n }\n\n return false;\n}\n\nvar ReplaceElementTemplatesModule = {\n __init__: [\n 'elementTemplatesReplaceProvider'\n ],\n elementTemplatesReplaceProvider: [ 'type', ElementTemplatesReplaceProvider ]\n};\n\n/**\n * @typedef {import('../model/Types').Element} Element\n * @typedef {import('../model/Types').ModdleElement} ModdleElement\n */\n\n/**\n * @param {Element} element\n * @param {ModdleElement} [di]\n *\n * @return {boolean}\n */\nfunction isExpanded(element, di) {\n\n if (is(element, 'bpmn:CallActivity')) {\n return false;\n }\n\n if (is(element, 'bpmn:SubProcess')) {\n di = di || getDi(element);\n\n if (di && is(di, 'bpmndi:BPMNPlane')) {\n return true;\n }\n\n return di && !!di.isExpanded;\n }\n\n if (is(element, 'bpmn:Participant')) {\n return !!getBusinessObject(element).processRef;\n }\n\n return true;\n}\n\n/**\n * @typedef {import('../../../model/Types').Element} Element\n * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuTarget} PopupMenuTarget\n *\n * @typedef {(entry: PopupMenuTarget) => boolean} DifferentTypeValidator\n */\n\n/**\n * Returns true, if an element is from a different type\n * than a target definition. Takes into account the type,\n * event definition type and triggeredByEvent property.\n *\n * @param {Element} element\n *\n * @return {DifferentTypeValidator}\n */\nfunction isDifferentType(element) {\n\n return function(entry) {\n var target = entry.target;\n\n var businessObject = getBusinessObject(element),\n eventDefinition = businessObject.eventDefinitions && businessObject.eventDefinitions[0];\n\n var isTypeEqual = businessObject.$type === target.type;\n\n var isEventDefinitionEqual = (\n (eventDefinition && eventDefinition.$type) === target.eventDefinitionType\n );\n\n var isTriggeredByEventEqual = (\n\n // coherse to \n !!target.triggeredByEvent === !!businessObject.triggeredByEvent\n );\n\n var isExpandedEqual = (\n target.isExpanded === undefined ||\n target.isExpanded === isExpanded(element)\n );\n\n return !isTypeEqual || !isEventDefinitionEqual || !isTriggeredByEventEqual || !isExpandedEqual;\n };\n}\n\n/**\n * @typedef { () => string } LabelGetter\n *\n * @typedef { {\n * label: string | LabelGetter;\n * actionName: string;\n * className: string;\n * target?: {\n * type: string;\n * isExpanded?: boolean;\n * isInterrupting?: boolean;\n * triggeredByEvent?: boolean;\n * cancelActivity?: boolean;\n * eventDefinitionType?: string;\n * eventDefinitionAttrs?: Record\n * };\n * } } ReplaceOption\n */\n\n/**\n * @type {ReplaceOption[]}\n */\nvar START_EVENT = [\n {\n label: 'Start event',\n actionName: 'replace-with-none-start',\n className: 'bpmn-icon-start-event-none',\n target: {\n type: 'bpmn:StartEvent'\n }\n },\n {\n label: 'Intermediate throw event',\n actionName: 'replace-with-none-intermediate-throwing',\n className: 'bpmn-icon-intermediate-event-none',\n target: {\n type: 'bpmn:IntermediateThrowEvent'\n }\n },\n {\n label: 'End event',\n actionName: 'replace-with-none-end',\n className: 'bpmn-icon-end-event-none',\n target: {\n type: 'bpmn:EndEvent'\n }\n },\n {\n label: 'Message start event',\n actionName: 'replace-with-message-start',\n className: 'bpmn-icon-start-event-message',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Timer start event',\n actionName: 'replace-with-timer-start',\n className: 'bpmn-icon-start-event-timer',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition'\n }\n },\n {\n label: 'Conditional start event',\n actionName: 'replace-with-conditional-start',\n className: 'bpmn-icon-start-event-condition',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition'\n }\n },\n {\n label: 'Signal start event',\n actionName: 'replace-with-signal-start',\n className: 'bpmn-icon-start-event-signal',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar START_EVENT_SUB_PROCESS = [\n {\n label: 'Start event',\n actionName: 'replace-with-none-start',\n className: 'bpmn-icon-start-event-none',\n target: {\n type: 'bpmn:StartEvent'\n }\n },\n {\n label: 'Intermediate throw event',\n actionName: 'replace-with-none-intermediate-throwing',\n className: 'bpmn-icon-intermediate-event-none',\n target: {\n type: 'bpmn:IntermediateThrowEvent'\n }\n },\n {\n label: 'End event',\n actionName: 'replace-with-none-end',\n className: 'bpmn-icon-end-event-none',\n target: {\n type: 'bpmn:EndEvent'\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar INTERMEDIATE_EVENT = [\n {\n label: 'Start event',\n actionName: 'replace-with-none-start',\n className: 'bpmn-icon-start-event-none',\n target: {\n type: 'bpmn:StartEvent'\n }\n },\n {\n label: 'Intermediate throw event',\n actionName: 'replace-with-none-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-none',\n target: {\n type: 'bpmn:IntermediateThrowEvent'\n }\n },\n {\n label: 'End event',\n actionName: 'replace-with-none-end',\n className: 'bpmn-icon-end-event-none',\n target: {\n type: 'bpmn:EndEvent'\n }\n },\n {\n label: 'Message intermediate catch event',\n actionName: 'replace-with-message-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-message',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Message intermediate throw event',\n actionName: 'replace-with-message-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-message',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Timer intermediate catch event',\n actionName: 'replace-with-timer-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-timer',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition'\n }\n },\n {\n label: 'Escalation intermediate throw event',\n actionName: 'replace-with-escalation-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-escalation',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition'\n }\n },\n {\n label: 'Conditional intermediate catch event',\n actionName: 'replace-with-conditional-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-condition',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition'\n }\n },\n {\n label: 'Link intermediate catch event',\n actionName: 'replace-with-link-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-link',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:LinkEventDefinition',\n eventDefinitionAttrs: {\n name: ''\n }\n }\n },\n {\n label: 'Link intermediate throw event',\n actionName: 'replace-with-link-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-link',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:LinkEventDefinition',\n eventDefinitionAttrs: {\n name: ''\n }\n }\n },\n {\n label: 'Compensation intermediate throw event',\n actionName: 'replace-with-compensation-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-compensation',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition'\n }\n },\n {\n label: 'Signal intermediate catch event',\n actionName: 'replace-with-signal-intermediate-catch',\n className: 'bpmn-icon-intermediate-event-catch-signal',\n target: {\n type: 'bpmn:IntermediateCatchEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n },\n {\n label: 'Signal intermediate throw event',\n actionName: 'replace-with-signal-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-throw-signal',\n target: {\n type: 'bpmn:IntermediateThrowEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar END_EVENT = [\n {\n label: 'Start event',\n actionName: 'replace-with-none-start',\n className: 'bpmn-icon-start-event-none',\n target: {\n type: 'bpmn:StartEvent'\n }\n },\n {\n label: 'Intermediate throw event',\n actionName: 'replace-with-none-intermediate-throw',\n className: 'bpmn-icon-intermediate-event-none',\n target: {\n type: 'bpmn:IntermediateThrowEvent'\n }\n },\n {\n label: 'End event',\n actionName: 'replace-with-none-end',\n className: 'bpmn-icon-end-event-none',\n target: {\n type: 'bpmn:EndEvent'\n }\n },\n {\n label: 'Message end event',\n actionName: 'replace-with-message-end',\n className: 'bpmn-icon-end-event-message',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition'\n }\n },\n {\n label: 'Escalation end event',\n actionName: 'replace-with-escalation-end',\n className: 'bpmn-icon-end-event-escalation',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition'\n }\n },\n {\n label: 'Error end event',\n actionName: 'replace-with-error-end',\n className: 'bpmn-icon-end-event-error',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:ErrorEventDefinition'\n }\n },\n {\n label: 'Cancel end event',\n actionName: 'replace-with-cancel-end',\n className: 'bpmn-icon-end-event-cancel',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:CancelEventDefinition'\n }\n },\n {\n label: 'Compensation end event',\n actionName: 'replace-with-compensation-end',\n className: 'bpmn-icon-end-event-compensation',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition'\n }\n },\n {\n label: 'Signal end event',\n actionName: 'replace-with-signal-end',\n className: 'bpmn-icon-end-event-signal',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition'\n }\n },\n {\n label: 'Terminate end event',\n actionName: 'replace-with-terminate-end',\n className: 'bpmn-icon-end-event-terminate',\n target: {\n type: 'bpmn:EndEvent',\n eventDefinitionType: 'bpmn:TerminateEventDefinition'\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar GATEWAY = [\n {\n label: 'Exclusive gateway',\n actionName: 'replace-with-exclusive-gateway',\n className: 'bpmn-icon-gateway-xor',\n target: {\n type: 'bpmn:ExclusiveGateway'\n }\n },\n {\n label: 'Parallel gateway',\n actionName: 'replace-with-parallel-gateway',\n className: 'bpmn-icon-gateway-parallel',\n target: {\n type: 'bpmn:ParallelGateway'\n }\n },\n {\n label: 'Inclusive gateway',\n actionName: 'replace-with-inclusive-gateway',\n className: 'bpmn-icon-gateway-or',\n target: {\n type: 'bpmn:InclusiveGateway'\n }\n },\n {\n label: 'Complex gateway',\n actionName: 'replace-with-complex-gateway',\n className: 'bpmn-icon-gateway-complex',\n target: {\n type: 'bpmn:ComplexGateway'\n }\n },\n {\n label: 'Event-based gateway',\n actionName: 'replace-with-event-based-gateway',\n className: 'bpmn-icon-gateway-eventbased',\n target: {\n type: 'bpmn:EventBasedGateway',\n instantiate: false,\n eventGatewayType: 'Exclusive'\n }\n }\n\n // Gateways deactivated until https://github.com/bpmn-io/bpmn-js/issues/194\n // {\n // label: 'Event based instantiating Gateway',\n // actionName: 'replace-with-exclusive-event-based-gateway',\n // className: 'bpmn-icon-exclusive-event-based',\n // target: {\n // type: 'bpmn:EventBasedGateway'\n // },\n // options: {\n // businessObject: { instantiate: true, eventGatewayType: 'Exclusive' }\n // }\n // },\n // {\n // label: 'Parallel Event based instantiating Gateway',\n // actionName: 'replace-with-parallel-event-based-instantiate-gateway',\n // className: 'bpmn-icon-parallel-event-based-instantiate-gateway',\n // target: {\n // type: 'bpmn:EventBasedGateway'\n // },\n // options: {\n // businessObject: { instantiate: true, eventGatewayType: 'Parallel' }\n // }\n // }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar SUBPROCESS_EXPANDED = [\n {\n label: 'Transaction',\n actionName: 'replace-with-transaction',\n className: 'bpmn-icon-transaction',\n target: {\n type: 'bpmn:Transaction',\n isExpanded: true\n }\n },\n {\n label: 'Event sub-process',\n actionName: 'replace-with-event-subprocess',\n className: 'bpmn-icon-event-subprocess-expanded',\n target: {\n type: 'bpmn:SubProcess',\n triggeredByEvent: true,\n isExpanded: true\n }\n },\n {\n label: 'Sub-process (collapsed)',\n actionName: 'replace-with-collapsed-subprocess',\n className: 'bpmn-icon-subprocess-collapsed',\n target: {\n type: 'bpmn:SubProcess',\n isExpanded: false\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar TRANSACTION = [\n {\n label: 'Transaction',\n actionName: 'replace-with-transaction',\n className: 'bpmn-icon-transaction',\n target: {\n type: 'bpmn:Transaction',\n isExpanded: true\n }\n },\n {\n label: 'Sub-process',\n actionName: 'replace-with-subprocess',\n className: 'bpmn-icon-subprocess-expanded',\n target: {\n type: 'bpmn:SubProcess',\n isExpanded: true\n }\n },\n {\n label: 'Event sub-process',\n actionName: 'replace-with-event-subprocess',\n className: 'bpmn-icon-event-subprocess-expanded',\n target: {\n type: 'bpmn:SubProcess',\n triggeredByEvent: true,\n isExpanded: true\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar EVENT_SUB_PROCESS = TRANSACTION;\n\n/**\n * @type {ReplaceOption[]}\n */\nvar TASK = [\n {\n label: 'Task',\n actionName: 'replace-with-task',\n className: 'bpmn-icon-task',\n target: {\n type: 'bpmn:Task'\n }\n },\n {\n label: 'User task',\n actionName: 'replace-with-user-task',\n className: 'bpmn-icon-user',\n target: {\n type: 'bpmn:UserTask'\n }\n },\n {\n label: 'Service task',\n actionName: 'replace-with-service-task',\n className: 'bpmn-icon-service',\n target: {\n type: 'bpmn:ServiceTask'\n }\n },\n {\n label: 'Send task',\n actionName: 'replace-with-send-task',\n className: 'bpmn-icon-send',\n target: {\n type: 'bpmn:SendTask'\n }\n },\n {\n label: 'Receive task',\n actionName: 'replace-with-receive-task',\n className: 'bpmn-icon-receive',\n target: {\n type: 'bpmn:ReceiveTask'\n }\n },\n {\n label: 'Manual task',\n actionName: 'replace-with-manual-task',\n className: 'bpmn-icon-manual',\n target: {\n type: 'bpmn:ManualTask'\n }\n },\n {\n label: 'Business rule task',\n actionName: 'replace-with-rule-task',\n className: 'bpmn-icon-business-rule',\n target: {\n type: 'bpmn:BusinessRuleTask'\n }\n },\n {\n label: 'Script task',\n actionName: 'replace-with-script-task',\n className: 'bpmn-icon-script',\n target: {\n type: 'bpmn:ScriptTask'\n }\n },\n {\n label: 'Call activity',\n actionName: 'replace-with-call-activity',\n className: 'bpmn-icon-call-activity',\n target: {\n type: 'bpmn:CallActivity'\n }\n },\n {\n label: 'Sub-process (collapsed)',\n actionName: 'replace-with-collapsed-subprocess',\n className: 'bpmn-icon-subprocess-collapsed',\n target: {\n type: 'bpmn:SubProcess',\n isExpanded: false\n }\n },\n {\n label: 'Sub-process (expanded)',\n actionName: 'replace-with-expanded-subprocess',\n className: 'bpmn-icon-subprocess-expanded',\n target: {\n type: 'bpmn:SubProcess',\n isExpanded: true\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar DATA_OBJECT_REFERENCE = [\n {\n label: 'Data store reference',\n actionName: 'replace-with-data-store-reference',\n className: 'bpmn-icon-data-store',\n target: {\n type: 'bpmn:DataStoreReference'\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar DATA_STORE_REFERENCE = [\n {\n label: 'Data object reference',\n actionName: 'replace-with-data-object-reference',\n className: 'bpmn-icon-data-object',\n target: {\n type: 'bpmn:DataObjectReference'\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar BOUNDARY_EVENT = [\n {\n label: 'Message boundary event',\n actionName: 'replace-with-message-boundary',\n className: 'bpmn-icon-intermediate-event-catch-message',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Timer boundary event',\n actionName: 'replace-with-timer-boundary',\n className: 'bpmn-icon-intermediate-event-catch-timer',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Escalation boundary event',\n actionName: 'replace-with-escalation-boundary',\n className: 'bpmn-icon-intermediate-event-catch-escalation',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Conditional boundary event',\n actionName: 'replace-with-conditional-boundary',\n className: 'bpmn-icon-intermediate-event-catch-condition',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Error boundary event',\n actionName: 'replace-with-error-boundary',\n className: 'bpmn-icon-intermediate-event-catch-error',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:ErrorEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Cancel boundary event',\n actionName: 'replace-with-cancel-boundary',\n className: 'bpmn-icon-intermediate-event-catch-cancel',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:CancelEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Signal boundary event',\n actionName: 'replace-with-signal-boundary',\n className: 'bpmn-icon-intermediate-event-catch-signal',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Compensation boundary event',\n actionName: 'replace-with-compensation-boundary',\n className: 'bpmn-icon-intermediate-event-catch-compensation',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition',\n cancelActivity: true\n }\n },\n {\n label: 'Message boundary event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-message-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-message',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Timer boundary event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-timer-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-timer',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Escalation boundary event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-escalation-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-escalation',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Conditional boundary event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-conditional-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-condition',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition',\n cancelActivity: false\n }\n },\n {\n label: 'Signal boundary event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-signal-boundary',\n className: 'bpmn-icon-intermediate-event-catch-non-interrupting-signal',\n target: {\n type: 'bpmn:BoundaryEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition',\n cancelActivity: false\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar EVENT_SUB_PROCESS_START_EVENT = [\n {\n label: 'Message start event',\n actionName: 'replace-with-message-start',\n className: 'bpmn-icon-start-event-message',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Timer start event',\n actionName: 'replace-with-timer-start',\n className: 'bpmn-icon-start-event-timer',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Conditional start event',\n actionName: 'replace-with-conditional-start',\n className: 'bpmn-icon-start-event-condition',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Signal start event',\n actionName: 'replace-with-signal-start',\n className: 'bpmn-icon-start-event-signal',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Error start event',\n actionName: 'replace-with-error-start',\n className: 'bpmn-icon-start-event-error',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:ErrorEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Escalation start event',\n actionName: 'replace-with-escalation-start',\n className: 'bpmn-icon-start-event-escalation',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Compensation start event',\n actionName: 'replace-with-compensation-start',\n className: 'bpmn-icon-start-event-compensation',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:CompensateEventDefinition',\n isInterrupting: true\n }\n },\n {\n label: 'Message start event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-message-start',\n className: 'bpmn-icon-start-event-non-interrupting-message',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:MessageEventDefinition',\n isInterrupting: false\n }\n },\n {\n label: 'Timer start event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-timer-start',\n className: 'bpmn-icon-start-event-non-interrupting-timer',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:TimerEventDefinition',\n isInterrupting: false\n }\n },\n {\n label: 'Conditional start event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-conditional-start',\n className: 'bpmn-icon-start-event-non-interrupting-condition',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:ConditionalEventDefinition',\n isInterrupting: false\n }\n },\n {\n label: 'Signal start event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-signal-start',\n className: 'bpmn-icon-start-event-non-interrupting-signal',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:SignalEventDefinition',\n isInterrupting: false\n }\n },\n {\n label: 'Escalation start event (non-interrupting)',\n actionName: 'replace-with-non-interrupting-escalation-start',\n className: 'bpmn-icon-start-event-non-interrupting-escalation',\n target: {\n type: 'bpmn:StartEvent',\n eventDefinitionType: 'bpmn:EscalationEventDefinition',\n isInterrupting: false\n }\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar SEQUENCE_FLOW = [\n {\n label: 'Sequence flow',\n actionName: 'replace-with-sequence-flow',\n className: 'bpmn-icon-connection'\n },\n {\n label: 'Default flow',\n actionName: 'replace-with-default-flow',\n className: 'bpmn-icon-default-flow'\n },\n {\n label: 'Conditional flow',\n actionName: 'replace-with-conditional-flow',\n className: 'bpmn-icon-conditional-flow'\n }\n];\n\n/**\n * @type {ReplaceOption[]}\n */\nvar PARTICIPANT = [\n {\n label: 'Expanded pool/participant',\n actionName: 'replace-with-expanded-pool',\n className: 'bpmn-icon-participant',\n target: {\n type: 'bpmn:Participant',\n isExpanded: true\n }\n },\n {\n label: function(element) {\n var label = 'Empty pool/participant';\n\n if (element.children && element.children.length) {\n label += ' (removes content)';\n }\n\n return label;\n },\n actionName: 'replace-with-collapsed-pool',\n\n // TODO(@janstuemmel): maybe design new icon\n className: 'bpmn-icon-lane',\n target: {\n type: 'bpmn:Participant',\n isExpanded: false\n }\n }\n];\n\nvar replaceOptions = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BOUNDARY_EVENT: BOUNDARY_EVENT,\n DATA_OBJECT_REFERENCE: DATA_OBJECT_REFERENCE,\n DATA_STORE_REFERENCE: DATA_STORE_REFERENCE,\n END_EVENT: END_EVENT,\n EVENT_SUB_PROCESS: EVENT_SUB_PROCESS,\n EVENT_SUB_PROCESS_START_EVENT: EVENT_SUB_PROCESS_START_EVENT,\n GATEWAY: GATEWAY,\n INTERMEDIATE_EVENT: INTERMEDIATE_EVENT,\n PARTICIPANT: PARTICIPANT,\n SEQUENCE_FLOW: SEQUENCE_FLOW,\n START_EVENT: START_EVENT,\n START_EVENT_SUB_PROCESS: START_EVENT_SUB_PROCESS,\n SUBPROCESS_EXPANDED: SUBPROCESS_EXPANDED,\n TASK: TASK,\n TRANSACTION: TRANSACTION\n});\n\nconst ALL_OPTIONS = Object.values(replaceOptions);\n\nfunction getReplaceOptionGroups() {\n return ALL_OPTIONS;\n}\n\n/**\n * A replace menu provider that allows to replace elements with\n * templates applied with the correspondent plain element.\n */\nfunction RemoveTemplateReplaceProvider(popupMenu, translate, elementTemplates) {\n\n this._popupMenu = popupMenu;\n this._translate = translate;\n this._elementTemplates = elementTemplates;\n\n this.register();\n}\n\nRemoveTemplateReplaceProvider.$inject = [\n 'popupMenu',\n 'translate',\n 'elementTemplates'\n];\n\n/**\n * Register replace menu provider in the popup menu\n */\nRemoveTemplateReplaceProvider.prototype.register = function() {\n this._popupMenu.registerProvider('bpmn-replace', this);\n};\n\n/**\n * Adds the element templates to the replace menu.\n * @param {djs.model.Base} element\n *\n * @returns {Object}\n */\nRemoveTemplateReplaceProvider.prototype.getPopupMenuEntries = function(element) {\n\n return (entries) => {\n\n // convert our entries into something sortable\n let entrySet = Object.entries(entries);\n\n if (this._elementTemplates && this._elementTemplates.get(element)) {\n\n // add remove template option\n this.addPlainElementEntry(element, entrySet, this._translate, this._elementTemplates);\n }\n\n // convert back to object\n return entrySet.reduce((entries, [ key, value ]) => {\n entries[key] = value;\n\n return entries;\n }, {});\n };\n};\n\n\n/**\n * Adds the option to replace with plain element (remove template).\n *\n * @param {djs.model.Base} element\n * @param {Array} entries\n */\nRemoveTemplateReplaceProvider.prototype.addPlainElementEntry = function(element, entries, translate, elementTemplates) {\n\n const replaceOption = this.getPlainEntry(element, entries, translate, elementTemplates);\n\n if (!replaceOption) {\n return;\n }\n\n const [\n insertIndex,\n entry\n ] = replaceOption;\n\n // insert remove entry\n entries.splice(insertIndex, 0, [ entry.id, entry ]);\n};\n\n/**\n * Returns the option to replace with plain element and the index where it should be inserted.\n *\n * @param {djs.model.Base} element\n * @param {Array} entries\n *\n * @returns {Array}\n */\nRemoveTemplateReplaceProvider.prototype.getPlainEntry = function(element, entries, translate, elementTemplates) {\n\n const {\n options,\n option,\n optionIndex\n } = findReplaceOptions(element) || { };\n\n if (!options) {\n return null;\n }\n\n const entry = {\n id: 'replace-remove-element-template',\n action: () => {\n elementTemplates.removeTemplate(element);\n },\n label: translate(option.label),\n className: option.className\n };\n\n // insert after previous option, if it exists\n const previousIndex = getOptionIndex(options, optionIndex - 1, entries);\n\n if (previousIndex) {\n return [\n previousIndex + 1,\n entry\n ];\n }\n\n // insert before next option, if it exists\n const nextIndex = getOptionIndex(options, optionIndex + 1, entries);\n\n if (nextIndex) {\n return [\n nextIndex,\n entry\n ];\n }\n\n // fallback to insert at start\n return [\n 0,\n entry\n ];\n};\n\n\n/**\n * @param {ModdleElement} element\n *\n * @return { { options: Array, option: any, optionIndex: number } | null }\n */\nfunction findReplaceOptions(element) {\n\n const isSameType = (element, option) => option.target && !isDifferentType(element)(option);\n\n return getReplaceOptionGroups().reduce((result, options) => {\n\n if (result) {\n return result;\n }\n\n const optionIndex = options.findIndex(option => isSameType(element, option));\n\n if (optionIndex === -1) {\n return;\n }\n\n return {\n options,\n option: options[optionIndex],\n optionIndex\n };\n }, null);\n}\n\nfunction getOptionIndex(options, index, entries) {\n const option = options[index];\n\n if (!option) {\n return false;\n }\n\n return entries.findIndex(\n ([ key ]) => key === option.actionName\n );\n}\n\nvar RemoveTemplatesModule = {\n __init__: [ 'removeTemplateReplaceProvider' ],\n removeTemplateReplaceProvider: [ 'type', RemoveTemplateReplaceProvider ]\n};\n\nvar index = {\n __depends__: [\n AppendElementTemplatesModule,\n CreateElementTemplatesModule,\n ReplaceElementTemplatesModule,\n RemoveTemplatesModule\n ]\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1jcmVhdGUtYXBwZW5kLWFueXRoaW5nL2Rpc3QvaW5kZXguZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLE9BQU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBLGNBQWMsZ0NBQWdDO0FBQzlDOztBQUVBO0FBQ0E7QUFDQSxjQUFjLE1BQU07QUFDcEI7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7O0FBRUE7QUFDQTtBQUNBLGNBQWMsNERBQTREO0FBQzFFOztBQUVBO0FBQ0E7QUFDQSxjQUFjLDZDQUE2QztBQUMzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFlBQVk7QUFDdkI7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7OztBQUdBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixZQUFZLDBGQUEwRjtBQUN0RztBQUNBLFlBQVksR0FBRztBQUNmO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxjQUFjO0FBQzFCLFlBQVksVUFBVTtBQUN0QjtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkI7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFdBQVc7QUFDdEI7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLCtCQUErQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsK0JBQStCOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwrQkFBK0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwrQkFBK0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLCtCQUErQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSx5RUFBeUUsV0FBVzs7QUFFcEY7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLHdDQUF3QztBQUNuRCxXQUFXLFNBQVM7QUFDcEIs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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxVQUFVOztBQUVwRDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwwQ0FBMEMsV0FBVzs7QUFFckQ7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esc0NBQXNDLFVBQVU7O0FBRWhEO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsZUFBZTtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFVBQVU7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUssSUFBSTtBQUNUO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCLFdBQVcsZUFBZTtBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBLGVBQWUsd0RBQXdEO0FBQ3ZFO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXFIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JwbW4tanMtY3JlYXRlLWFwcGVuZC1hbnl0aGluZy9kaXN0L2luZGV4LmVzLmpzPzcxMDkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGbGF0dGVuIGFycmF5LCBvbmUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICpcbiAqIEBwYXJhbSB7VFtdW119IGFyclxuICpcbiAqIEByZXR1cm4ge1RbXX1cbiAqL1xuXG5jb25zdCBuYXRpdmVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCBuYXRpdmVIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gbmF0aXZlVG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7XG4gIHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE51bWJlcl0nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvYmpcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikge1xuICBjb25zdCB0YWcgPSBuYXRpdmVUb1N0cmluZy5jYWxsKG9iaik7XG5cbiAgcmV0dXJuIChcbiAgICB0YWcgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICB0YWcgPT09ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyB8fFxuICAgIHRhZyA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyB8fFxuICAgIHRhZyA9PT0gJ1tvYmplY3QgQXN5bmNHZW5lcmF0b3JGdW5jdGlvbl0nIHx8XG4gICAgdGFnID09PSAnW29iamVjdCBQcm94eV0nXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUsIGlmIHRhcmdldCBvd25zIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXlcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBoYXModGFyZ2V0LCBrZXkpIHtcbiAgcmV0dXJuIG5hdGl2ZUhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7IChcbiAqICAgKChlOiBUKSA9PiBib29sZWFuKSB8XG4gKiAgICgoZTogVCwgaWR4OiBudW1iZXIpID0+IGJvb2xlYW4pIHxcbiAqICAgKChlOiBULCBrZXk6IHN0cmluZykgPT4gYm9vbGVhbikgfFxuICogICBzdHJpbmcgfFxuICogICBudW1iZXJcbiAqICkgfSBNYXRjaGVyXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqXG4gKiBAdHlwZWRlZiB7IChcbiAqICAgKChlOiBUKSA9PiBVKSB8IHN0cmluZyB8IG51bWJlclxuICogKSB9IEV4dHJhY3RvclxuICovXG5cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYgeyAodmFsOiBULCBrZXk6IGFueSkgPT4gYm9vbGVhbiB9IE1hdGNoRm5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7IFRbXSB9IEFycmF5Q29sbGVjdGlvblxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHsgeyBba2V5OiBzdHJpbmddOiBUIH0gfSBTdHJpbmdLZXlWYWx1ZUNvbGxlY3Rpb25cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7IHsgW2tleTogbnVtYmVyXTogVCB9IH0gTnVtYmVyS2V5VmFsdWVDb2xsZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYgeyBTdHJpbmdLZXlWYWx1ZUNvbGxlY3Rpb248VD4gfCBOdW1iZXJLZXlWYWx1ZUNvbGxlY3Rpb248VD4gfSBLZXlWYWx1ZUNvbGxlY3Rpb25cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7IEtleVZhbHVlQ29sbGVjdGlvbjxUPiB8IEFycmF5Q29sbGVjdGlvbjxUPiB9IENvbGxlY3Rpb25cbiAqL1xuXG4vKipcbiAqIEZpbmQgZWxlbWVudCBpbiBjb2xsZWN0aW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge0NvbGxlY3Rpb248VD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7TWF0Y2hlcjxUPn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZmluZChjb2xsZWN0aW9uLCBtYXRjaGVyKSB7XG5cbiAgY29uc3QgbWF0Y2hGbiA9IHRvTWF0Y2hlcihtYXRjaGVyKTtcblxuICBsZXQgbWF0Y2g7XG5cbiAgZm9yRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWwsIGtleSkge1xuICAgIGlmIChtYXRjaEZuKHZhbCwga2V5KSkge1xuICAgICAgbWF0Y2ggPSB2YWw7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtYXRjaDtcblxufVxuXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGNvbGxlY3Rpb247IHJldHVybmluZyBzb21ldGhpbmdcbiAqIChub24tdW5kZWZpbmVkKSB3aWxsIHN0b3AgaXRlcmF0aW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge0NvbGxlY3Rpb248VD59IGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7ICgoaXRlbTogVCwgaWR4OiBudW1iZXIpID0+IChib29sZWFufHZvaWQpKSB8ICgoaXRlbTogVCwga2V5OiBzdHJpbmcpID0+IChib29sZWFufHZvaWQpKSB9IGl0ZXJhdG9yXG4gKlxuICogQHJldHVybiB7VH0gcmV0dXJuIHJlc3VsdCB0aGF0IHN0b3BwZWQgdGhlIGl0ZXJhdGlvblxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdG9yKSB7XG5cbiAgbGV0IHZhbCxcbiAgICAgIHJlc3VsdDtcblxuICBpZiAoaXNVbmRlZmluZWQoY29sbGVjdGlvbikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb252ZXJ0S2V5ID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IHRvTnVtIDogaWRlbnRpdHk7XG5cbiAgZm9yIChsZXQga2V5IGluIGNvbGxlY3Rpb24pIHtcblxuICAgIGlmIChoYXMoY29sbGVjdGlvbiwga2V5KSkge1xuICAgICAgdmFsID0gY29sbGVjdGlvbltrZXldO1xuXG4gICAgICByZXN1bHQgPSBpdGVyYXRvcih2YWwsIGNvbnZlcnRLZXkoa2V5KSk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBzb21lIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uXG4gKiBtYXRjaCB0aGUgY3JpdGVyaWEuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWF0Y2hlclxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xuXG4gIHJldHVybiAhIWZpbmQoY29sbGVjdGlvbiwgbWF0Y2hlcik7XG59XG5cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtNYXRjaGVyPFQ+fSBtYXRjaGVyXG4gKlxuICogQHJldHVybiB7TWF0Y2hGbjxUPn1cbiAqL1xuZnVuY3Rpb24gdG9NYXRjaGVyKG1hdGNoZXIpIHtcbiAgcmV0dXJuIGlzRnVuY3Rpb24obWF0Y2hlcikgPyBtYXRjaGVyIDogKGUpID0+IHtcbiAgICByZXR1cm4gZSA9PT0gbWF0Y2hlcjtcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBpZGVudGl0eShhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn1cblxuZnVuY3Rpb24gdG9OdW0oYXJnKSB7XG4gIHJldHVybiBOdW1iZXIoYXJnKTtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIGZvciBgT2JqZWN0LmFzc2lnbmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG90aGVyc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHRhcmdldFxuICovXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCAuLi5vdGhlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGFyZ2V0LCAuLi5vdGhlcnMpO1xufVxuXG5jb25zdCBFVkVOVF9HUk9VUCA9IHtcbiAgaWQ6ICdldmVudHMnLFxuICBuYW1lOiAnRXZlbnRzJ1xufTtcblxuY29uc3QgVEFTS19HUk9VUCA9IHtcbiAgaWQ6ICd0YXNrcycsXG4gIG5hbWU6ICdUYXNrcydcbn07XG5cbmNvbnN0IERBVEFfR1JPVVAgPSB7XG4gIGlkOiAnZGF0YScsXG4gIG5hbWU6ICdEYXRhJ1xufTtcblxuY29uc3QgUEFSVElDSVBBTlRfR1JPVVAgPSB7XG4gIGlkOiAncGFydGljaXBhbnRzJyxcbiAgbmFtZTogJ1BhcnRpY2lwYW50cydcbn07XG5cbmNvbnN0IFNVQlBST0NFU1NfR1JPVVAgPSB7XG4gIGlkOiAnc3VicHJvY2VzcycsXG4gIG5hbWU6ICdTdWItcHJvY2Vzc2VzJ1xufTtcblxuY29uc3QgR0FURVdBWV9HUk9VUCA9IHtcbiAgaWQ6ICdnYXRld2F5cycsXG4gIG5hbWU6ICdHYXRld2F5cydcbn07XG5cbmNvbnN0IE5PTkVfRVZFTlRTID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdGFydCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ25vbmUtc3RhcnQtZXZlbnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdub25lLWludGVybWVkaWF0ZS10aHJvd2luZycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCb3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ25vbmUtYm91bmRhcnktZXZlbnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnbm9uZS1lbmQtZXZlbnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCdcbiAgICB9XG4gIH1cbl0ubWFwKG9wdGlvbiA9PiAoeyAuLi5vcHRpb24sIGdyb3VwOiBFVkVOVF9HUk9VUCB9KSk7XG5cbmNvbnN0IFRZUEVEX1NUQVJUX0VWRU5UUyA9IFtcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBzdGFydCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ21lc3NhZ2Utc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIHN0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAndGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgc3RhcnQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdjb25kaXRpb25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIHN0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnc2lnbmFsLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfVxuXS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgZ3JvdXA6IEVWRU5UX0dST1VQIH0pKTtcblxuY29uc3QgVFlQRURfSU5URVJNRURJQVRFX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIGludGVybWVkaWF0ZSBjYXRjaCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ21lc3NhZ2UtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBpbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdtZXNzYWdlLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIGludGVybWVkaWF0ZSBjYXRjaCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3RpbWVyLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBpbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdlc2NhbGF0aW9uLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIGludGVybWVkaWF0ZSBjYXRjaCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ2NvbmRpdGlvbmFsLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0xpbmsgaW50ZXJtZWRpYXRlIGNhdGNoIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnbGluay1pbnRlcm1lZGlhdGUtY2F0Y2gnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0xpbmsgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnbGluay1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBpbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdjb21wZW5zYXRpb24taW50ZXJtZWRpYXRlLXRocm93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LXRocm93LWNvbXBlbnNhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgaW50ZXJtZWRpYXRlIGNhdGNoIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnc2lnbmFsLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnc2lnbmFsLWludGVybWVkaWF0ZS10aHJvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC10aHJvdy1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9XG5dLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBncm91cDogRVZFTlRfR1JPVVAgfSkpO1xuXG5jb25zdCBUWVBFRF9CT1VOREFSWV9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ21lc3NhZ2UtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUaW1lciBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3RpbWVyLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXRpbWVyJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGltZXJFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIGJvdW5kYXJ5IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnZXNjYWxhdGlvbi1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIGJvdW5kYXJ5IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnY29uZGl0aW9uYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ2Vycm9yLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWVycm9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDYW5jZWwgYm91bmRhcnkgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdjYW5jZWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtY2FuY2VsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIGJvdW5kYXJ5IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnc2lnbmFsLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBlbnNhdGlvbiBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ2NvbXBlbnNhdGlvbi1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBib3VuZGFyeSBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdub24taW50ZXJydXB0aW5nLW1lc3NhZ2UtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIGJvdW5kYXJ5IGV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ25vbi1pbnRlcnJ1cHRpbmctdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBib3VuZGFyeSBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdub24taW50ZXJydXB0aW5nLWVzY2FsYXRpb24tYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIGJvdW5kYXJ5IGV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ25vbi1pbnRlcnJ1cHRpbmctY29uZGl0aW9uYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBib3VuZGFyeSBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdub24taW50ZXJydXB0aW5nLXNpZ25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH1cbl0ubWFwKG9wdGlvbiA9PiAoeyAuLi5vcHRpb24sIGdyb3VwOiBFVkVOVF9HUk9VUCB9KSk7XG5cbmNvbnN0IFRZUEVEX0VORF9FVkVOVCA9IFtcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBlbmQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdtZXNzYWdlLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFc2NhbGF0aW9uIGVuZCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ2VzY2FsYXRpb24tZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0Vycm9yIGVuZCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ2Vycm9yLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1lcnJvcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NhbmNlbCBlbmQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdjYW5jZWwtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWNhbmNlbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wZW5zYXRpb24gZW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAnY29tcGVuc2F0aW9uLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1jb21wZW5zYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBlbmQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdzaWduYWwtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUZXJtaW5hdGUgZW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAndGVybWluYXRlLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC10ZXJtaW5hdGUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46VGVybWluYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfVxuXS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgZ3JvdXA6IEVWRU5UX0dST1VQIH0pKTtcblxuY29uc3QgR0FURVdBWSQxID0gW1xuICB7XG4gICAgbGFiZWw6ICdFeGNsdXNpdmUgZ2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ2V4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS14b3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BhcmFsbGVsIGdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdwYXJhbGxlbC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1wYXJhbGxlbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJhbGxlbEdhdGV3YXknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbmNsdXNpdmUgZ2F0ZXdheScsXG4gICAgc2VhcmNoOiAnb3InLFxuICAgIGFjdGlvbk5hbWU6ICdpbmNsdXNpdmUtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktb3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW5jbHVzaXZlR2F0ZXdheSdcbiAgICB9LFxuICAgIHJhbms6IC0xXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbXBsZXggZ2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ2NvbXBsZXgtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktY29tcGxleCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpDb21wbGV4R2F0ZXdheSdcbiAgICB9LFxuICAgIHJhbms6IC0xXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0V2ZW50LWJhc2VkIGdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdldmVudC1iYXNlZC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1ldmVudGJhc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JyxcbiAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSxcbiAgICAgIGV2ZW50R2F0ZXdheVR5cGU6ICdFeGNsdXNpdmUnXG4gICAgfVxuICB9XG5dLm1hcChvcHRpb24gPT4gKHsgLi4ub3B0aW9uLCBncm91cDogR0FURVdBWV9HUk9VUCB9KSk7XG5cbmNvbnN0IFNVQlBST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0NhbGwgYWN0aXZpdHknLFxuICAgIGFjdGlvbk5hbWU6ICdjYWxsLWFjdGl2aXR5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tY2FsbC1hY3Rpdml0eScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpDYWxsQWN0aXZpdHknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUcmFuc2FjdGlvbicsXG4gICAgYWN0aW9uTmFtZTogJ3RyYW5zYWN0aW9uJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhbnNhY3Rpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VHJhbnNhY3Rpb24nLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQgc3ViLXByb2Nlc3MnLFxuICAgIHNlYXJjaDogJ3N1YnByb2Nlc3MnLFxuICAgIGFjdGlvbk5hbWU6ICdldmVudC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZXZlbnQtc3VicHJvY2Vzcy1leHBhbmRlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIHRyaWdnZXJlZEJ5RXZlbnQ6IHRydWUsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTdWItcHJvY2VzcyAoY29sbGFwc2VkKScsXG4gICAgc2VhcmNoOiAnc3VicHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ2NvbGxhcHNlZC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3VicHJvY2Vzcy1jb2xsYXBzZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViLXByb2Nlc3MgKGV4cGFuZGVkKScsXG4gICAgc2VhcmNoOiAnc3VicHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ2V4cGFuZGVkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfVxuXS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgZ3JvdXA6IFNVQlBST0NFU1NfR1JPVVAgfSkpO1xuXG5jb25zdCBUQVNLJDEgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1Rhc2snLFxuICAgIGFjdGlvbk5hbWU6ICd0YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdGFzaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVXNlciB0YXNrJyxcbiAgICBhY3Rpb25OYW1lOiAndXNlci10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpVc2VyVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlcnZpY2UgdGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3NlcnZpY2UtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNlcnZpY2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2VydmljZVRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTZW5kIHRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdzZW5kLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZW5kJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlNlbmRUYXNrJ1xuICAgIH0sXG4gICAgcmFuazogLTFcbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnUmVjZWl2ZSB0YXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVjZWl2ZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcmVjZWl2ZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpSZWNlaXZlVGFzaydcbiAgICB9LFxuICAgIHJhbms6IC0xXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hbnVhbCB0YXNrJyxcbiAgICBhY3Rpb25OYW1lOiAnbWFudWFsLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1tYW51YWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46TWFudWFsVGFzaydcbiAgICB9LFxuICAgIHJhbms6IC0xXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0J1c2luZXNzIHJ1bGUgdGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3J1bGUtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWJ1c2luZXNzLXJ1bGUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46QnVzaW5lc3NSdWxlVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NjcmlwdCB0YXNrJyxcbiAgICBhY3Rpb25OYW1lOiAnc2NyaXB0LXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zY3JpcHQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2NyaXB0VGFzaydcbiAgICB9XG4gIH1cbl0ubWFwKG9wdGlvbiA9PiAoeyAuLi5vcHRpb24sIGdyb3VwOiBUQVNLX0dST1VQIH0pKTtcblxuY29uc3QgREFUQV9PQkpFQ1RTID0gW1xuICB7XG4gICAgbGFiZWw6ICdEYXRhIHN0b3JlIHJlZmVyZW5jZScsXG4gICAgYWN0aW9uTmFtZTogJ2RhdGEtc3RvcmUtcmVmZXJlbmNlJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZGF0YS1zdG9yZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpEYXRhU3RvcmVSZWZlcmVuY2UnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdEYXRhIG9iamVjdCByZWZlcmVuY2UnLFxuICAgIGFjdGlvbk5hbWU6ICdkYXRhLW9iamVjdC1yZWZlcmVuY2UnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1kYXRhLW9iamVjdCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJ1xuICAgIH1cbiAgfVxuXS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgZ3JvdXA6IERBVEFfR1JPVVAgfSkpO1xuXG5jb25zdCBQQVJUSUNJUEFOVCQxID0gW1xuICB7XG4gICAgbGFiZWw6ICdFeHBhbmRlZCBwb29sL3BhcnRpY2lwYW50JyxcbiAgICBzZWFyY2g6ICdOb24tZW1wdHkgcG9vbC9wYXJ0aWNpcGFudCcsXG4gICAgYWN0aW9uTmFtZTogJ2V4cGFuZGVkLXBvb2wnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1wYXJ0aWNpcGFudCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFbXB0eSBwb29sL3BhcnRpY2lwYW50JyxcbiAgICBzZWFyY2g6ICdDb2xsYXBzZWQgcG9vbC9wYXJ0aWNpcGFudCcsXG4gICAgYWN0aW9uTmFtZTogJ2NvbGxhcHNlZC1wb29sJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXS5tYXAob3B0aW9uID0+ICh7IC4uLm9wdGlvbiwgZ3JvdXA6IFBBUlRJQ0lQQU5UX0dST1VQIH0pKTtcblxuY29uc3QgQ1JFQVRFX09QVElPTlMgPSBbXG4gIC4uLkdBVEVXQVkkMSxcbiAgLi4uVEFTSyQxLFxuICAuLi5TVUJQUk9DRVNTLFxuICAuLi5OT05FX0VWRU5UUyxcbiAgLi4uVFlQRURfU1RBUlRfRVZFTlRTLFxuICAuLi5UWVBFRF9JTlRFUk1FRElBVEVfRVZFTlQsXG4gIC4uLlRZUEVEX0VORF9FVkVOVCxcbiAgLi4uVFlQRURfQk9VTkRBUllfRVZFTlQsXG4gIC4uLkRBVEFfT0JKRUNUUyxcbiAgLi4uUEFSVElDSVBBTlQkMVxuXTtcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBhbiBhcHBlbmQgbWVudSBwcm92aWRlciBmb3IgdGhlIHBvcHVwIG1lbnUuXG4gKi9cbmZ1bmN0aW9uIEFwcGVuZE1lbnVQcm92aWRlcihcbiAgICBlbGVtZW50RmFjdG9yeSwgcG9wdXBNZW51LFxuICAgIGNyZWF0ZSwgYXV0b1BsYWNlLCBydWxlcyxcbiAgICBtb3VzZSwgdHJhbnNsYXRlXG4pIHtcblxuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX2NyZWF0ZSA9IGNyZWF0ZTtcbiAgdGhpcy5fYXV0b1BsYWNlID0gYXV0b1BsYWNlO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX21vdXNlID0gbW91c2U7XG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcblxuICB0aGlzLnJlZ2lzdGVyKCk7XG59XG5cbkFwcGVuZE1lbnVQcm92aWRlci4kaW5qZWN0ID0gW1xuICAnZWxlbWVudEZhY3RvcnknLFxuICAncG9wdXBNZW51JyxcbiAgJ2NyZWF0ZScsXG4gICdhdXRvUGxhY2UnLFxuICAncnVsZXMnLFxuICAnbW91c2UnLFxuICAndHJhbnNsYXRlJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBhcHBlbmQgbWVudSBwcm92aWRlciBpbiB0aGUgcG9wdXAgbWVudVxuICovXG5BcHBlbmRNZW51UHJvdmlkZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3BvcHVwTWVudS5yZWdpc3RlclByb3ZpZGVyKCdicG1uLWFwcGVuZCcsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBhcHBlbmQgb3B0aW9ucyBmb3IgdGhlIGdpdmVuIGVsZW1lbnQgYXMgbWVudSBlbnRyaWVzXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGVudHJ5IGl0ZW1zXG4gKi9cbkFwcGVuZE1lbnVQcm92aWRlci5wcm90b3R5cGUuZ2V0UG9wdXBNZW51RW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgcnVsZXMgPSB0aGlzLl9ydWxlcztcbiAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlO1xuXG4gIGNvbnN0IGVudHJpZXMgPSB7fTtcblxuICBpZiAoIXJ1bGVzLmFsbG93ZWQoJ3NoYXBlLmFwcGVuZCcsIHsgZWxlbWVudDogZWxlbWVudCB9KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgZWxlbWVudHMgd2l0aCBubyBpbmNvbWluZyBjb25uZWN0aW9uc1xuICBjb25zdCBhcHBlbmRPcHRpb25zID0gdGhpcy5fZmlsdGVyRW50cmllcyhDUkVBVEVfT1BUSU9OUyk7XG5cbiAgLy8gbWFwIG9wdGlvbnMgdG8gbWVudSBlbnRyaWVzXG4gIGFwcGVuZE9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBsYWJlbCxcbiAgICAgIHRhcmdldCxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JvdXAsXG4gICAgICBzZWFyY2gsXG4gICAgICByYW5rXG4gICAgfSA9IG9wdGlvbjtcblxuICAgIGVudHJpZXNbYGFwcGVuZC0ke2FjdGlvbk5hbWV9YF0gPSB7XG4gICAgICBsYWJlbDogbGFiZWwgJiYgdHJhbnNsYXRlKGxhYmVsKSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JvdXA6IGdyb3VwICYmIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIG5hbWU6IHRyYW5zbGF0ZShncm91cC5uYW1lKVxuICAgICAgfSxcbiAgICAgIHNlYXJjaCxcbiAgICAgIHJhbmssXG4gICAgICBhY3Rpb246IHRoaXMuX2NyZWF0ZUVudHJ5QWN0aW9uKGVsZW1lbnQsIHRhcmdldClcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gZW50cmllcztcbn07XG5cbi8qKlxuICogRmlsdGVyIG91dCBlbnRyaWVzIGZyb20gdGhlIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBlbnRyaWVzXG4gKlxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gZmlsdGVyZWQgZW50cmllc1xuICovXG5BcHBlbmRNZW51UHJvdmlkZXIucHJvdG90eXBlLl9maWx0ZXJFbnRyaWVzID0gZnVuY3Rpb24oZW50cmllcykge1xuICByZXR1cm4gZW50cmllcy5maWx0ZXIob3B0aW9uID0+IHtcblxuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbi50YXJnZXQ7XG4gICAgY29uc3Qge1xuICAgICAgdHlwZSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGVcbiAgICB9ID0gdGFyZ2V0O1xuXG4gICAgaWYgKFtcbiAgICAgICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnXG4gICAgXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYnBtbjpCb3VuZGFyeUV2ZW50JyAmJiBpc1VuZGVmaW5lZChldmVudERlZmluaXRpb25UeXBlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFjdGlvbiBmb3IgYSBnaXZlbiB0YXJnZXQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQXBwZW5kTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlRW50cnlBY3Rpb24gPSBmdW5jdGlvbihlbGVtZW50LCB0YXJnZXQpIHtcbiAgY29uc3QgZWxlbWVudEZhY3RvcnkgPSB0aGlzLl9lbGVtZW50RmFjdG9yeTtcbiAgY29uc3QgYXV0b1BsYWNlID0gdGhpcy5fYXV0b1BsYWNlO1xuICBjb25zdCBjcmVhdGUgPSB0aGlzLl9jcmVhdGU7XG4gIGNvbnN0IG1vdXNlID0gdGhpcy5fbW91c2U7XG5cblxuICBjb25zdCBhdXRvUGxhY2VFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGUoJ3NoYXBlJywgdGFyZ2V0KTtcbiAgICBhdXRvUGxhY2UuYXBwZW5kKGVsZW1lbnQsIG5ld0VsZW1lbnQpO1xuICB9O1xuXG4gIGNvbnN0IG1hbnVhbFBsYWNlRWxlbWVudCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGUoJ3NoYXBlJywgdGFyZ2V0KTtcblxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgIGV2ZW50ID0gbW91c2UuZ2V0TGFzdE1vdmVFdmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGUuc3RhcnQoZXZlbnQsIG5ld0VsZW1lbnQsIHtcbiAgICAgIHNvdXJjZTogZWxlbWVudFxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2xpY2s6IHRoaXMuX2NhbkF1dG9QbGFjZUVsZW1lbnQodGFyZ2V0KSA/IGF1dG9QbGFjZUVsZW1lbnQgOiBtYW51YWxQbGFjZUVsZW1lbnQsXG4gICAgZHJhZ3N0YXJ0OiBtYW51YWxQbGFjZUVsZW1lbnRcbiAgfTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGF1dG8gcGxhY2VkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5BcHBlbmRNZW51UHJvdmlkZXIucHJvdG90eXBlLl9jYW5BdXRvUGxhY2VFbGVtZW50ID0gKHRhcmdldCkgPT4ge1xuICBjb25zdCB7IHR5cGUgfSA9IHRhcmdldDtcblxuICBpZiAodHlwZSA9PT0gJ2JwbW46Qm91bmRhcnlFdmVudCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2JwbW46U3ViUHJvY2VzcycgJiYgdGFyZ2V0LnRyaWdnZXJlZEJ5RXZlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZSA9PT0gJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcgJiYgdGFyZ2V0LmV2ZW50RGVmaW5pdGlvblR5cGUgPT09ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBhcHBlbmRJY29uID0gYDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCA1LjgyIDUuODJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuICA8cGF0aCBkPVwiTTEuMyAzLjRjLjMgMCAuNS0uMi41LS41cy0uMi0uNC0uNS0uNGMtLjIgMC0uNC4xLS40LjQgMCAuMy4yLjUuNC41ek0zIDMuNGMuMiAwIC40LS4yLjQtLjVzLS4yLS40LS40LS40Yy0uMyAwLS41LjEtLjUuNCAwIC4zLjIuNS41LjV6TTQuNiAzLjRjLjIgMCAuNC0uMi40LS41cy0uMi0uNC0uNC0uNGMtLjMgMC0uNS4xLS41LjQgMCAuMy4yLjUuNS41elwiLz5cbjwvc3ZnPmA7XG5jb25zdCBjcmVhdGVJY29uID0gYDxzdmcgd2lkdGg9XCI0NlwiIGhlaWdodD1cIjQ2XCIgdmlld0JveD1cIi0yIC0yIDkuODIgOS44MlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XG4gIDxwYXRoIGQ9XCJNMS4zIDMuNGMuMyAwIC41LS4yLjUtLjVzLS4yLS40LS41LS40Yy0uMiAwLS40LjEtLjQuNCAwIC4zLjIuNS40LjV6TTMgMy40Yy4yIDAgLjQtLjIuNC0uNXMtLjItLjQtLjQtLjRjLS4zIDAtLjUuMS0uNS40IDAgLjMuMi41LjUuNXpNNC42IDMuNGMuMiAwIC40LS4yLjQtLjVzLS4yLS40LS40LS40Yy0uMyAwLS41LjEtLjUuNCAwIC4zLjIuNS41LjV6XCIvPlxuPC9zdmc+YDtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIGZvciBhcHBlbmQgY29udGV4dCBwYWQgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIEFwcGVuZENvbnRleHRQYWRQcm92aWRlcihjb250ZXh0UGFkLCBwb3B1cE1lbnUsIHRyYW5zbGF0ZSwgY2FudmFzLCBydWxlcykge1xuXG4gIHRoaXMuX2NvbnRleHRQYWQgPSBjb250ZXh0UGFkO1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX3RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcbiAgdGhpcy5fY2FudmFzID0gY2FudmFzO1xuICB0aGlzLl9ydWxlcyA9IHJ1bGVzO1xuXG4gIHRoaXMucmVnaXN0ZXIoKTtcbn1cblxuQXBwZW5kQ29udGV4dFBhZFByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdjb250ZXh0UGFkJyxcbiAgJ3BvcHVwTWVudScsXG4gICd0cmFuc2xhdGUnLFxuICAnY2FudmFzJyxcbiAgJ3J1bGVzJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBhcHBlbmQgYnV0dG9uIHByb3ZpZGVyIGluIHRoZSBjb250ZXh0IHBhZFxuICovXG5BcHBlbmRDb250ZXh0UGFkUHJvdmlkZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NvbnRleHRQYWQucmVnaXN0ZXJQcm92aWRlcih0aGlzKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwZW5kIGNvbnRleHQgcGFkIGVudHJ5XG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHJldHVybnMge09iamVjdH0gZW50cmllc1xuICovXG5BcHBlbmRDb250ZXh0UGFkUHJvdmlkZXIucHJvdG90eXBlLmdldENvbnRleHRQYWRFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICBjb25zdCBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnU7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMuX3RyYW5zbGF0ZTtcbiAgY29uc3QgcnVsZXMgPSB0aGlzLl9ydWxlcztcbiAgY29uc3QgZ2V0QXBwZW5kTWVudVBvc2l0aW9uID0gdGhpcy5fZ2V0QXBwZW5kTWVudVBvc2l0aW9uLmJpbmQodGhpcyk7XG5cbiAgaWYgKHJ1bGVzLmFsbG93ZWQoJ3NoYXBlLmFwcGVuZCcsIHsgZWxlbWVudCB9KSkge1xuXG4gICAgLy8gYXBwZW5kIG1lbnUgZW50cnlcbiAgICByZXR1cm4ge1xuICAgICAgJ2FwcGVuZCc6IHtcbiAgICAgICAgZ3JvdXA6ICdtb2RlbCcsXG4gICAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwiZW50cnlcIj4ke2FwcGVuZEljb259PC9kaXY+YCxcbiAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQXBwZW5kIGVsZW1lbnQnKSxcbiAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGV2ZW50LCBlbGVtZW50KSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXNzaWduKGdldEFwcGVuZE1lbnVQb3NpdGlvbihlbGVtZW50KSwge1xuICAgICAgICAgICAgICBjdXJzb3I6IHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcG9wdXBNZW51Lm9wZW4oZWxlbWVudCwgJ2JwbW4tYXBwZW5kJywgcG9zaXRpb24sIHtcbiAgICAgICAgICAgICAgdGl0bGU6IHRyYW5zbGF0ZSgnQXBwZW5kIGVsZW1lbnQnKSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICAgICAgc2VhcmNoOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIGZvciB0aGUgYXBwZW5kIG1lbnUgcmVsYXRpdmVseSB0byB0aGUgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbkFwcGVuZENvbnRleHRQYWRQcm92aWRlci5wcm90b3R5cGUuX2dldEFwcGVuZE1lbnVQb3NpdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgY29udGV4dFBhZCA9IHRoaXMuX2NvbnRleHRQYWQ7XG5cbiAgY29uc3QgWF9PRkZTRVQgPSA1O1xuXG4gIGNvbnN0IHBhZCA9IGNvbnRleHRQYWQuZ2V0UGFkKGVsZW1lbnQpLmh0bWw7XG5cbiAgY29uc3QgcGFkUmVjdCA9IHBhZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBwb3MgPSB7XG4gICAgeDogcGFkUmVjdC5yaWdodCArIFhfT0ZGU0VULFxuICAgIHk6IHBhZFJlY3QudG9wXG4gIH07XG5cbiAgcmV0dXJuIHBvcztcbn07XG5cbmZ1bmN0aW9uIGUoZSx0KXt0JiYoZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSk7fVxuXG4vKipcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KCcuLi9tb2RlbC9UeXBlcycpLkVsZW1lbnQgfSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7IGltcG9ydCgnLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50IH0gTW9kZGxlRWxlbWVudFxuICovXG5cbi8qKlxuICogSXMgYW4gZWxlbWVudCBvZiB0aGUgZ2l2ZW4gQlBNTiB0eXBlP1xuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR8TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgKHR5cGVvZiBiby4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJykgJiYgYm8uJGluc3RhbmNlT2YodHlwZSk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBlbGVtZW50IGhhcyBhbnkgb2YgdGhlIGdpdmVuIHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB0eXBlc1xuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQW55KGVsZW1lbnQsIHR5cGVzKSB7XG4gIHJldHVybiBzb21lKHR5cGVzLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGlzKGVsZW1lbnQsIHQpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGJ1c2luZXNzIG9iamVjdCBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkge1xuICByZXR1cm4gKGVsZW1lbnQgJiYgZWxlbWVudC5idXNpbmVzc09iamVjdCkgfHwgZWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGRpIG9iamVjdCBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGdldERpKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5kaTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIExhYmVsLlxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTGFiZWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiBoYXModmFsdWUsICdsYWJlbFRhcmdldCcpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2NvcmUvVHlwZXMnKS5FbGVtZW50TGlrZX0gRWxlbWVudExpa2VcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2NvcmUvRXZlbnRCdXMnKS5kZWZhdWx0fSBFdmVudEJ1c1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9Db21tYW5kU3RhY2snKS5Db21tYW5kQ29udGV4dH0gQ29tbWFuZENvbnRleHRcbiAqXG4gKiBAdHlwZWRlZiB7c3RyaW5nfHN0cmluZ1tdfSBFdmVudHNcbiAqIEB0eXBlZGVmIHsgKGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KSA9PiBFbGVtZW50TGlrZVtdIHwgdm9pZCB9IEhhbmRsZXJGdW5jdGlvblxuICogQHR5cGVkZWYgeyAoY29udGV4dDogQ29tbWFuZENvbnRleHQpID0+IHZvaWQgfSBDb21wb3NlSGFuZGxlckZ1bmN0aW9uXG4gKi9cblxudmFyIERFRkFVTFRfUFJJT1JJVFkgPSAxMDAwO1xuXG4vKipcbiAqIEEgdXRpbGl0eSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBsdWcgaW50byB0aGUgY29tbWFuZCBleGVjdXRpb24gZm9yXG4gKiBleHRlbnNpb24gYW5kL29yIHZhbGlkYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCBDb21tYW5kSW50ZXJjZXB0b3IgZnJvbSAnZGlhZ3JhbS1qcy9saWIvY29tbWFuZC9Db21tYW5kSW50ZXJjZXB0b3InO1xuICpcbiAqIGNsYXNzIENvbW1hbmRMb2dnZXIgZXh0ZW5kcyBDb21tYW5kSW50ZXJjZXB0b3Ige1xuICogICBjb25zdHJ1Y3RvcihldmVudEJ1cykge1xuICogICAgIHN1cGVyKGV2ZW50QnVzKTtcbiAqXG4gKiAgIHRoaXMucHJlRXhlY3V0ZSgnc2hhcGUuY3JlYXRlJywgKGV2ZW50KSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ2NvbW1hbmRTdGFjay5zaGFwZS1jcmVhdGUucHJlRXhlY3V0ZScsIGV2ZW50KTtcbiAqICAgfSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0V2ZW50QnVzfSBldmVudEJ1c1xuICovXG5mdW5jdGlvbiBDb21tYW5kSW50ZXJjZXB0b3IoZXZlbnRCdXMpIHtcblxuICAvKipcbiAgICogQHR5cGUge0V2ZW50QnVzfVxuICAgKi9cbiAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbn1cblxuQ29tbWFuZEludGVyY2VwdG9yLiRpbmplY3QgPSBbICdldmVudEJ1cycgXTtcblxuZnVuY3Rpb24gdW53cmFwRXZlbnQoZm4sIHRoYXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhhdCB8fCBudWxsLCBldmVudC5jb250ZXh0LCBldmVudC5jb21tYW5kLCBldmVudCk7XG4gIH07XG59XG5cblxuLyoqXG4gKiBJbnRlcmNlcHQgYSBjb21tYW5kIGR1cmluZyBvbmUgb2YgdGhlIHBoYXNlcy5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbaG9va10gcGhhc2UgdG8gaW50ZXJjZXB0XG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICogQHBhcmFtIHtDb21wb3NlSGFuZGxlckZ1bmN0aW9ufEhhbmRsZXJGdW5jdGlvbn0gaGFuZGxlckZuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bndyYXBdIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSB1bndyYXBwZWRcbiAqIEBwYXJhbSB7YW55fSBbdGhhdF1cbiAqL1xuQ29tbWFuZEludGVyY2VwdG9yLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2ZW50cywgaG9vaywgcHJpb3JpdHksIGhhbmRsZXJGbiwgdW53cmFwLCB0aGF0KSB7XG5cbiAgaWYgKGlzRnVuY3Rpb24oaG9vaykgfHwgaXNOdW1iZXIoaG9vaykpIHtcbiAgICB0aGF0ID0gdW53cmFwO1xuICAgIHVud3JhcCA9IGhhbmRsZXJGbjtcbiAgICBoYW5kbGVyRm4gPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IGhvb2s7XG4gICAgaG9vayA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNGdW5jdGlvbihwcmlvcml0eSkpIHtcbiAgICB0aGF0ID0gdW53cmFwO1xuICAgIHVud3JhcCA9IGhhbmRsZXJGbjtcbiAgICBoYW5kbGVyRm4gPSBwcmlvcml0eTtcbiAgICBwcmlvcml0eSA9IERFRkFVTFRfUFJJT1JJVFk7XG4gIH1cblxuICBpZiAoaXNPYmplY3QodW53cmFwKSkge1xuICAgIHRoYXQgPSB1bndyYXA7XG4gICAgdW53cmFwID0gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzRnVuY3Rpb24oaGFuZGxlckZuKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaGFuZGxlckZuIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgaWYgKCFpc0FycmF5KGV2ZW50cykpIHtcbiAgICBldmVudHMgPSBbIGV2ZW50cyBdO1xuICB9XG5cbiAgdmFyIGV2ZW50QnVzID0gdGhpcy5fZXZlbnRCdXM7XG5cbiAgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAvLyBjb25jYXQgY29tbWFuZFN0YWNrKC5ldmVudCk/KC5ob29rKT9cbiAgICB2YXIgZnVsbEV2ZW50ID0gWyAnY29tbWFuZFN0YWNrJywgZXZlbnQsIGhvb2sgXS5maWx0ZXIoZnVuY3Rpb24oZSkgeyByZXR1cm4gZTsgfSkuam9pbignLicpO1xuXG4gICAgZXZlbnRCdXMub24oZnVsbEV2ZW50LCBwcmlvcml0eSwgdW53cmFwID8gdW53cmFwRXZlbnQoaGFuZGxlckZuLCB0aGF0KSA6IGhhbmRsZXJGbiwgdGhhdCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBBZGQgYSA8Y2FuRXhlY3V0ZT4gcGhhc2Ugb2YgY29tbWFuZCBpbnRlcmNlcHRvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcF0gd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIHVud3JhcHBlZFxuICogQHBhcmFtIHthbnl9IFt0aGF0XVxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLmNhbkV4ZWN1dGUgPSBjcmVhdGVIb29rKCdjYW5FeGVjdXRlJyk7XG5cbi8qKlxuICogQWRkIGEgPHByZUV4ZWN1dGU+IHBoYXNlIG9mIGNvbW1hbmQgaW50ZXJjZXB0b3IuXG4gKlxuICogQHBhcmFtIHtFdmVudHN9IFtldmVudHNdIGNvbW1hbmQocykgdG8gaW50ZXJjZXB0XG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICogQHBhcmFtIHtDb21wb3NlSGFuZGxlckZ1bmN0aW9ufEhhbmRsZXJGdW5jdGlvbn0gaGFuZGxlckZuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bndyYXBdIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSB1bndyYXBwZWRcbiAqIEBwYXJhbSB7YW55fSBbdGhhdF1cbiAqL1xuQ29tbWFuZEludGVyY2VwdG9yLnByb3RvdHlwZS5wcmVFeGVjdXRlID0gY3JlYXRlSG9vaygncHJlRXhlY3V0ZScpO1xuXG4vKipcbiAqIEFkZCBhIDxwcmVFeGVjdXRlZD4gcGhhc2Ugb2YgY29tbWFuZCBpbnRlcmNlcHRvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcF0gd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIHVud3JhcHBlZFxuICogQHBhcmFtIHthbnl9IFt0aGF0XVxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLnByZUV4ZWN1dGVkID0gY3JlYXRlSG9vaygncHJlRXhlY3V0ZWQnKTtcblxuLyoqXG4gKiBBZGQgYSA8ZXhlY3V0ZT4gcGhhc2Ugb2YgY29tbWFuZCBpbnRlcmNlcHRvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcF0gd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIHVud3JhcHBlZFxuICogQHBhcmFtIHthbnl9IFt0aGF0XVxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLmV4ZWN1dGUgPSBjcmVhdGVIb29rKCdleGVjdXRlJyk7XG5cbi8qKlxuICogQWRkIGEgPGV4ZWN1dGVkPiBwaGFzZSBvZiBjb21tYW5kIGludGVyY2VwdG9yLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRzfSBbZXZlbnRzXSBjb21tYW5kKHMpIHRvIGludGVyY2VwdFxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV1cbiAqIEBwYXJhbSB7Q29tcG9zZUhhbmRsZXJGdW5jdGlvbnxIYW5kbGVyRnVuY3Rpb259IGhhbmRsZXJGblxuICogQHBhcmFtIHtib29sZWFufSBbdW53cmFwXSB3aGV0aGVyIHRoZSBldmVudCBzaG91bGQgYmUgdW53cmFwcGVkXG4gKiBAcGFyYW0ge2FueX0gW3RoYXRdXG4gKi9cbkNvbW1hbmRJbnRlcmNlcHRvci5wcm90b3R5cGUuZXhlY3V0ZWQgPSBjcmVhdGVIb29rKCdleGVjdXRlZCcpO1xuXG4vKipcbiAqIEFkZCBhIDxwb3N0RXhlY3V0ZT4gcGhhc2Ugb2YgY29tbWFuZCBpbnRlcmNlcHRvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcF0gd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIHVud3JhcHBlZFxuICogQHBhcmFtIHthbnl9IFt0aGF0XVxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLnBvc3RFeGVjdXRlID0gY3JlYXRlSG9vaygncG9zdEV4ZWN1dGUnKTtcblxuLyoqXG4gKiBBZGQgYSA8cG9zdEV4ZWN1dGVkPiBwaGFzZSBvZiBjb21tYW5kIGludGVyY2VwdG9yLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRzfSBbZXZlbnRzXSBjb21tYW5kKHMpIHRvIGludGVyY2VwdFxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmlvcml0eV1cbiAqIEBwYXJhbSB7Q29tcG9zZUhhbmRsZXJGdW5jdGlvbnxIYW5kbGVyRnVuY3Rpb259IGhhbmRsZXJGblxuICogQHBhcmFtIHtib29sZWFufSBbdW53cmFwXSB3aGV0aGVyIHRoZSBldmVudCBzaG91bGQgYmUgdW53cmFwcGVkXG4gKiBAcGFyYW0ge2FueX0gW3RoYXRdXG4gKi9cbkNvbW1hbmRJbnRlcmNlcHRvci5wcm90b3R5cGUucG9zdEV4ZWN1dGVkID0gY3JlYXRlSG9vaygncG9zdEV4ZWN1dGVkJyk7XG5cbi8qKlxuICogQWRkIGEgPHJldmVydD4gcGhhc2Ugb2YgY29tbWFuZCBpbnRlcmNlcHRvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcF0gd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIHVud3JhcHBlZFxuICogQHBhcmFtIHthbnl9IFt0aGF0XVxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLnJldmVydCA9IGNyZWF0ZUhvb2soJ3JldmVydCcpO1xuXG4vKipcbiAqIEFkZCBhIDxyZXZlcnRlZD4gcGhhc2Ugb2YgY29tbWFuZCBpbnRlcmNlcHRvci5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50c30gW2V2ZW50c10gY29tbWFuZChzKSB0byBpbnRlcmNlcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldXG4gKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vud3JhcF0gd2hldGhlciB0aGUgZXZlbnQgc2hvdWxkIGJlIHVud3JhcHBlZFxuICogQHBhcmFtIHthbnl9IFt0aGF0XVxuICovXG5Db21tYW5kSW50ZXJjZXB0b3IucHJvdG90eXBlLnJldmVydGVkID0gY3JlYXRlSG9vaygncmV2ZXJ0ZWQnKTtcblxuLypcbiAqIEFkZCBwcm90b3R5cGUgbWV0aG9kcyBmb3IgZWFjaCBwaGFzZSBvZiBjb21tYW5kIGV4ZWN1dGlvbiAoZS5nLiBleGVjdXRlLFxuICogcmV2ZXJ0KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va1xuICpcbiAqIEByZXR1cm4geyAoXG4gKiAgIGV2ZW50cz86IEV2ZW50cyxcbiAqICAgcHJpb3JpdHk/OiBudW1iZXIsXG4gKiAgIGhhbmRsZXJGbjogQ29tcG9zZUhhbmRsZXJGdW5jdGlvbnxIYW5kbGVyRnVuY3Rpb24sXG4gKiAgIHVud3JhcD86IGJvb2xlYW5cbiAqICkgPT4gYW55IH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSG9vayhob29rKSB7XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21tYW5kSW50ZXJjZXB0b3J9XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRzfSBbZXZlbnRzXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XVxuICAgKiBAcGFyYW0ge0NvbXBvc2VIYW5kbGVyRnVuY3Rpb258SGFuZGxlckZ1bmN0aW9ufSBoYW5kbGVyRm5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdW53cmFwXVxuICAgKiBAcGFyYW0ge2FueX0gW3RoYXRdXG4gICAqL1xuICBjb25zdCBob29rRm4gPSBmdW5jdGlvbihldmVudHMsIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCkge1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZlbnRzKSB8fCBpc051bWJlcihldmVudHMpKSB7XG4gICAgICB0aGF0ID0gdW53cmFwO1xuICAgICAgdW53cmFwID0gaGFuZGxlckZuO1xuICAgICAgaGFuZGxlckZuID0gcHJpb3JpdHk7XG4gICAgICBwcmlvcml0eSA9IGV2ZW50cztcbiAgICAgIGV2ZW50cyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5vbihldmVudHMsIGhvb2ssIHByaW9yaXR5LCBoYW5kbGVyRm4sIHVud3JhcCwgdGhhdCk7XG4gIH07XG5cbiAgcmV0dXJuIGhvb2tGbjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9jb3JlL0V2ZW50QnVzJykuZGVmYXVsdH0gRXZlbnRCdXNcbiAqL1xuXG4vKipcbiAqIEEgYmFzaWMgcHJvdmlkZXIgdGhhdCBtYXkgYmUgZXh0ZW5kZWQgdG8gaW1wbGVtZW50IG1vZGVsaW5nIHJ1bGVzLlxuICpcbiAqIEV4dGVuc2lvbnMgc2hvdWxkIGltcGxlbWVudCB0aGUgaW5pdCBtZXRob2QgdG8gYWN0dWFsbHkgYWRkIHRoZWlyIGN1c3RvbVxuICogbW9kZWxpbmcgY2hlY2tzLiBDaGVja3MgbWF5IGJlIGFkZGVkIHZpYSB0aGUgI2FkZFJ1bGUoYWN0aW9uLCBmbikgbWV0aG9kLlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmZ1bmN0aW9uIFJ1bGVQcm92aWRlcihldmVudEJ1cykge1xuICBDb21tYW5kSW50ZXJjZXB0b3IuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG5cbiAgdGhpcy5pbml0KCk7XG59XG5cblJ1bGVQcm92aWRlci4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG5cbmUoUnVsZVByb3ZpZGVyLCBDb21tYW5kSW50ZXJjZXB0b3IpO1xuXG5cbi8qKlxuICogQWRkcyBhIG1vZGVsaW5nIHJ1bGUgZm9yIHRoZSBnaXZlbiBhY3Rpb24sIGltcGxlbWVudGVkIHRocm91Z2hcbiAqIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIGEgbW9kZWxpbmcgc3BlY2lmaWMgYWN0aW9uIGNvbnRleHRcbiAqIHRvIHBlcmZvcm0gaXRzIGNoZWNrLiBJdCBtdXN0IHJldHVybiBgZmFsc2VgIHRvIGRpc2FsbG93IHRoZVxuICogYWN0aW9uIGZyb20gaGFwcGVuaW5nIG9yIGB0cnVlYCB0byBhbGxvdyB0aGUgYWN0aW9uLiBVc3VhbGx5IHJldHVyaW5nXG4gKiBgbnVsbGAgZGVub3RlcyB0aGF0IGEgcGFydGljdWxhciBpbnRlcmFjdGlvbiBzaGFsbCBiZSBpZ25vcmVkLlxuICogQnkgcmV0dXJuaW5nIG5vdGhpbmcgb3IgYHVuZGVmaW5lZGAgeW91IHBhc3MgZXZhbHVhdGlvbiB0byBsb3dlclxuICogcHJpb3JpdHkgcnVsZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBSZXNpemFibGVSdWxlcy5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICpcbiAqICAgXFwvKipcbiAqICAgICogUmV0dXJuIGB0cnVlYCwgYGZhbHNlYCBvciBub3RoaW5nIHRvIGRlbm90ZVxuICogICAgKiBfYWxsb3dlZF8sIF9ub3QgYWxsb3dlZF8gYW5kIF9jb250aW51ZSBldmFsdWF0aW5nXy5cbiAqICAgICpcXC9cbiAqICAgdGhpcy5hZGRSdWxlKCdzaGFwZS5yZXNpemUnLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gKlxuICogICAgIHZhciBzaGFwZSA9IGNvbnRleHQuc2hhcGU7XG4gKlxuICogICAgIGlmICghY29udGV4dC5uZXdCb3VuZHMpIHtcbiAqICAgICAgIC8vIGNoZWNrIGdlbmVyYWwgcmVzaXphYmlsaXR5XG4gKiAgICAgICBpZiAoIXNoYXBlLnJlc2l6YWJsZSkge1xuICogICAgICAgICByZXR1cm4gZmFsc2U7XG4gKiAgICAgICB9XG4gKlxuICogICAgICAgLy8gbm90IHJldHVybmluZyBhbnl0aGluZyAocmVhZDogdW5kZWZpbmVkKVxuICogICAgICAgLy8gd2lsbCBjb250aW51ZSB0aGUgZXZhbHVhdGlvbiBvZiBvdGhlciBydWxlc1xuICogICAgICAgLy8gKHdpdGggbG93ZXIgcHJpb3JpdHkpXG4gKiAgICAgICByZXR1cm47XG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgIC8vIGVsZW1lbnQgbXVzdCBoYXZlIG1pbmltdW0gc2l6ZSBvZiAxMCoxMCBwb2ludHNcbiAqICAgICAgIHJldHVybiBjb250ZXh0Lm5ld0JvdW5kcy53aWR0aCA+IDEwICYmIGNvbnRleHQubmV3Qm91bmRzLmhlaWdodCA+IDEwO1xuICogICAgIH1cbiAqICAgfSk7XG4gKiB9O1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGFjdGlvbnMgdGhlIGlkZW50aWZpZXIgZm9yIHRoZSBtb2RlbGluZyBhY3Rpb24gdG8gY2hlY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldIHRoZSBwcmlvcml0eSBhdCB3aGljaCB0aGlzIHJ1bGUgaXMgYmVpbmcgYXBwbGllZFxuICogQHBhcmFtIHsoYW55KSA9PiBhbnl9IGZuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBhY3R1YWwgY2hlY2tcbiAqL1xuUnVsZVByb3ZpZGVyLnByb3RvdHlwZS5hZGRSdWxlID0gZnVuY3Rpb24oYWN0aW9ucywgcHJpb3JpdHksIGZuKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhY3Rpb25zID0gWyBhY3Rpb25zIF07XG4gIH1cblxuICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oYWN0aW9uKSB7XG5cbiAgICBzZWxmLmNhbkV4ZWN1dGUoYWN0aW9uLCBwcmlvcml0eSwgZnVuY3Rpb24oY29udGV4dCwgYWN0aW9uLCBldmVudCkge1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQpO1xuICAgIH0sIHRydWUpO1xuICB9KTtcbn07XG5cbi8qKlxuICogSW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFkZCBuZXcgcnVsZXMgZHVyaW5nIHByb3ZpZGVyIGluaXRpYWxpemF0aW9uLlxuICovXG5SdWxlUHJvdmlkZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEFwcGVuZCBhbnl0aGluZyBtb2RlbGluZyBydWxlc1xuICovXG5mdW5jdGlvbiBBcHBlbmRSdWxlcyhldmVudEJ1cykge1xuICBSdWxlUHJvdmlkZXIuY2FsbCh0aGlzLCBldmVudEJ1cyk7XG59XG5cbmUoQXBwZW5kUnVsZXMsIFJ1bGVQcm92aWRlcik7XG5cbkFwcGVuZFJ1bGVzLiRpbmplY3QgPSBbXG4gICdldmVudEJ1cydcbl07XG5cbkFwcGVuZFJ1bGVzLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuYWRkUnVsZSgnc2hhcGUuYXBwZW5kJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgY29uc3Qgc291cmNlID0gY29udGV4dC5lbGVtZW50O1xuXG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChzb3VyY2UpO1xuXG4gICAgaWYgKGlzTGFiZWwoc291cmNlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc0FueShzb3VyY2UsIFtcbiAgICAgICdicG1uOkVuZEV2ZW50JyxcbiAgICAgICdicG1uOkdyb3VwJyxcbiAgICAgICdicG1uOlRleHRBbm5vdGF0aW9uJyxcbiAgICAgICdicG1uOkxhbmUnLFxuICAgICAgJ2JwbW46UGFydGljaXBhbnQnLFxuICAgICAgJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJyxcbiAgICAgICdicG1uOkRhdGFPYmplY3RSZWZlcmVuY2UnXG4gICAgXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNDb25uZWN0aW9uKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXMoc291cmNlLCAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JykgJiYgaGFzRXZlbnREZWZpbml0aW9uKHNvdXJjZSwgJ2JwbW46TGlua0V2ZW50RGVmaW5pdGlvbicpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzKHNvdXJjZSwgJ2JwbW46U3ViUHJvY2VzcycpICYmIGJ1c2luZXNzT2JqZWN0LnRyaWdnZXJlZEJ5RXZlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIGhhc0V2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBldmVudERlZmluaXRpb24pIHtcbiAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gISFmaW5kKGJvLmV2ZW50RGVmaW5pdGlvbnMgfHwgW10sIGZ1bmN0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgZXZlbnREZWZpbml0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQ29ubmVjdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LndheXBvaW50cztcbn1cblxudmFyIEFwcGVuZE1lbnVNb2R1bGUgPSB7XG4gIF9faW5pdF9fOiBbXG4gICAgJ2FwcGVuZE1lbnVQcm92aWRlcicsXG4gICAgJ2FwcGVuZENvbnRleHRQYWRQcm92aWRlcicsXG4gICAgJ2FwcGVuZFJ1bGVzJ1xuICBdLFxuICBhcHBlbmRNZW51UHJvdmlkZXI6IFsgJ3R5cGUnLCBBcHBlbmRNZW51UHJvdmlkZXIgXSxcbiAgYXBwZW5kQ29udGV4dFBhZFByb3ZpZGVyOiBbICd0eXBlJywgQXBwZW5kQ29udGV4dFBhZFByb3ZpZGVyIF0sXG4gIGFwcGVuZFJ1bGVzOiBbICd0eXBlJywgQXBwZW5kUnVsZXMgXVxufTtcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBhIGNyZWF0ZSBtZW51IHByb3ZpZGVyIGZvciB0aGUgcG9wdXAgbWVudS5cbiAqL1xuZnVuY3Rpb24gQ3JlYXRlTWVudVByb3ZpZGVyKFxuICAgIGVsZW1lbnRGYWN0b3J5LCBwb3B1cE1lbnUsIGNyZWF0ZSxcbiAgICBhdXRvUGxhY2UsIG1vdXNlLCB0cmFuc2xhdGVcbikge1xuICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX2NyZWF0ZSA9IGNyZWF0ZTtcbiAgdGhpcy5fYXV0b1BsYWNlID0gYXV0b1BsYWNlO1xuICB0aGlzLl9tb3VzZSA9IG1vdXNlO1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG5cbiAgdGhpcy5yZWdpc3RlcigpO1xufVxuXG5DcmVhdGVNZW51UHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ2VsZW1lbnRGYWN0b3J5JyxcbiAgJ3BvcHVwTWVudScsXG4gICdjcmVhdGUnLFxuICAnYXV0b1BsYWNlJyxcbiAgJ21vdXNlJyxcbiAgJ3RyYW5zbGF0ZSdcbl07XG5cbi8qKlxuICogUmVnaXN0ZXIgY3JlYXRlIG1lbnUgcHJvdmlkZXIgaW4gdGhlIHBvcHVwIG1lbnVcbiAqL1xuQ3JlYXRlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9wb3B1cE1lbnUucmVnaXN0ZXJQcm92aWRlcignYnBtbi1jcmVhdGUnLCB0aGlzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3JlYXRlIG9wdGlvbnMgYXMgbWVudSBlbnRyaWVzXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBtZW51IGVudHJ5IGl0ZW1zXG4gKi9cbkNyZWF0ZU1lbnVQcm92aWRlci5wcm90b3R5cGUuZ2V0UG9wdXBNZW51RW50cmllcyA9IGZ1bmN0aW9uKCkge1xuXG4gIGNvbnN0IGVudHJpZXMgPSB7fTtcblxuICAvLyBtYXAgb3B0aW9ucyB0byBtZW51IGVudHJpZXNcbiAgQ1JFQVRFX09QVElPTlMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBsYWJlbCxcbiAgICAgIHRhcmdldCxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JvdXAsXG4gICAgICBzZWFyY2gsXG4gICAgICByYW5rXG4gICAgfSA9IG9wdGlvbjtcblxuICAgIGNvbnN0IHRhcmdldEFjdGlvbiA9IHRoaXMuX2NyZWF0ZUVudHJ5QWN0aW9uKHRhcmdldCk7XG5cbiAgICBlbnRyaWVzW2BjcmVhdGUtJHthY3Rpb25OYW1lfWBdID0ge1xuICAgICAgbGFiZWw6IGxhYmVsICYmIHRoaXMuX3RyYW5zbGF0ZShsYWJlbCksXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGdyb3VwOiBncm91cCAmJiB7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUoZ3JvdXAubmFtZSlcbiAgICAgIH0sXG4gICAgICBzZWFyY2gsXG4gICAgICByYW5rLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiB0YXJnZXRBY3Rpb24sXG4gICAgICAgIGRyYWdzdGFydDogdGFyZ2V0QWN0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhY3Rpb24gZm9yIGEgZ2l2ZW4gdGFyZ2V0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuQ3JlYXRlTWVudVByb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlRW50cnlBY3Rpb24gPSBmdW5jdGlvbih0YXJnZXQpIHtcblxuICBjb25zdCBjcmVhdGUgPSB0aGlzLl9jcmVhdGU7XG4gIGNvbnN0IG1vdXNlID0gdGhpcy5fbW91c2U7XG4gIGNvbnN0IHBvcHVwTWVudSA9IHRoaXMuX3BvcHVwTWVudTtcbiAgY29uc3QgZWxlbWVudEZhY3RvcnkgPSB0aGlzLl9lbGVtZW50RmFjdG9yeTtcblxuICBsZXQgbmV3RWxlbWVudDtcblxuICByZXR1cm4gKGV2ZW50KSA9PiB7XG4gICAgcG9wdXBNZW51LmNsb3NlKCk7XG5cbiAgICAvLyBjcmVhdGUgdGhlIG5ldyBlbGVtZW50XG4gICAgaWYgKHRhcmdldC50eXBlID09PSAnYnBtbjpQYXJ0aWNpcGFudCcpIHtcbiAgICAgIG5ld0VsZW1lbnQgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGVQYXJ0aWNpcGFudFNoYXBlKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0VsZW1lbnQgPSBlbGVtZW50RmFjdG9yeS5jcmVhdGUoJ3NoYXBlJywgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvLyB1c2UgbGFzdCBtb3VzZSBldmVudCBpZiB0cmlnZ2VyZWQgdmlhIGtleWJvYXJkXG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgZXZlbnQgPSBtb3VzZS5nZXRMYXN0TW92ZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZS5zdGFydChldmVudCwgbmV3RWxlbWVudCk7XG4gIH07XG59O1xuXG52YXIgYnVnVGVzdERpdjtcbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIGJ1Z1Rlc3REaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgLy8gU2V0dXBcbiAgYnVnVGVzdERpdi5pbm5lckhUTUwgPSAnICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj1cIi9hXCI+YTwvYT48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIvPic7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVjdGx5IGJ5IGlubmVySFRNTFxuICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFXG4gICFidWdUZXN0RGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJykubGVuZ3RoO1xuICBidWdUZXN0RGl2ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBxdWVyeShzZWxlY3RvciwgZWwpIHtcbiAgZWwgPSBlbCB8fCBkb2N1bWVudDtcblxuICByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmNvbnN0IExPV0VSX1BSSU9SSVRZID0gOTAwO1xuXG4vKipcbiAqIEEgcGFsZXR0ZSBwcm92aWRlciBmb3IgdGhlIGNyZWF0ZSBlbGVtZW50cyBtZW51LlxuICovXG5mdW5jdGlvbiBDcmVhdGVQYWxldHRlUHJvdmlkZXIocGFsZXR0ZSwgdHJhbnNsYXRlLCBwb3B1cE1lbnUsIGNhbnZhcywgbW91c2UpIHtcblxuICB0aGlzLl9wYWxldHRlID0gcGFsZXR0ZTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl9wb3B1cE1lbnUgPSBwb3B1cE1lbnU7XG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fbW91c2UgPSBtb3VzZTtcblxuICB0aGlzLnJlZ2lzdGVyKCk7XG59XG5cbkNyZWF0ZVBhbGV0dGVQcm92aWRlci4kaW5qZWN0ID0gW1xuICAncGFsZXR0ZScsXG4gICd0cmFuc2xhdGUnLFxuICAncG9wdXBNZW51JyxcbiAgJ2NhbnZhcycsXG4gICdtb3VzZSdcbl07XG5cbi8qKlxuICogUmVnaXN0ZXIgY3JlYXRlIGJ1dHRvbiBwcm92aWRlciBpbiB0aGUgcGFsZXR0ZVxuICovXG5DcmVhdGVQYWxldHRlUHJvdmlkZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3BhbGV0dGUucmVnaXN0ZXJQcm92aWRlcihMT1dFUl9QUklPUklUWSwgdGhpcyk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHBhbGV0dGUgY3JlYXRlIGVudHJ5XG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuQ3JlYXRlUGFsZXR0ZVByb3ZpZGVyLnByb3RvdHlwZS5nZXRQYWxldHRlRW50cmllcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5fdHJhbnNsYXRlLFxuICAgICAgICBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnUsXG4gICAgICAgIGNhbnZhcyA9IHRoaXMuX2NhbnZhcyxcbiAgICAgICAgbW91c2UgPSB0aGlzLl9tb3VzZTtcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IFhfT0ZGU0VUID0gMzU7XG4gICAgY29uc3QgWV9PRkZTRVQgPSAxMDtcblxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgIGV2ZW50ID0gbW91c2UuZ2V0TGFzdE1vdmVFdmVudCgpO1xuICAgICAgcmV0dXJuIHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCB8fCBxdWVyeSgnLmRqcy1wYWxldHRlIFtkYXRhLWFjdGlvbj1cImNyZWF0ZVwiXScpO1xuICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHRhcmdldCAmJiB7XG4gICAgICB4OiB0YXJnZXRQb3NpdGlvbi5sZWZ0ICsgdGFyZ2V0UG9zaXRpb24ud2lkdGggLyAyICsgWF9PRkZTRVQsXG4gICAgICB5OiB0YXJnZXRQb3NpdGlvbi50b3AgKyB0YXJnZXRQb3NpdGlvbi5oZWlnaHQgLyAyICsgWV9PRkZTRVRcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgJ2NyZWF0ZSc6IHtcbiAgICAgIGdyb3VwOiAnY3JlYXRlJyxcbiAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwiZW50cnlcIj4gJHtjcmVhdGVJY29ufTwvZGl2PmAsXG4gICAgICB0aXRsZTogdHJhbnNsYXRlKCdDcmVhdGUgZWxlbWVudCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb24oZXZlbnQpO1xuXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNhbnZhcy5nZXRSb290RWxlbWVudCgpO1xuXG4gICAgICAgICAgcG9wdXBNZW51Lm9wZW4oZWxlbWVudCwgJ2JwbW4tY3JlYXRlJywgcG9zaXRpb24sIHtcbiAgICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NyZWF0ZSBlbGVtZW50JyksXG4gICAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgICAgc2VhcmNoOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG52YXIgQ3JlYXRlTWVudU1vZHVsZSA9IHtcbiAgX19pbml0X186IFtcbiAgICAnY3JlYXRlTWVudVByb3ZpZGVyJyxcbiAgICAnY3JlYXRlUGFsZXR0ZVByb3ZpZGVyJ1xuICBdLFxuICBjcmVhdGVNZW51UHJvdmlkZXI6IFsgJ3R5cGUnLCBDcmVhdGVNZW51UHJvdmlkZXIgXSxcbiAgY3JlYXRlUGFsZXR0ZVByb3ZpZGVyOiBbICd0eXBlJywgQ3JlYXRlUGFsZXR0ZVByb3ZpZGVyIF1cbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFuZCBleGVjdXRlcyBCUE1OIHNwZWNpZmljIGVkaXRvciBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmZ1bmN0aW9uIENyZWF0ZUFwcGVuZEVkaXRvckFjdGlvbnMoaW5qZWN0b3IpIHtcbiAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcblxuICB0aGlzLnJlZ2lzdGVyQWN0aW9ucygpO1xufVxuXG5DcmVhdGVBcHBlbmRFZGl0b3JBY3Rpb25zLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cbi8qKlxuICogUmVnaXN0ZXIgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5DcmVhdGVBcHBlbmRFZGl0b3JBY3Rpb25zLnByb3RvdHlwZS5yZWdpc3RlckFjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgY29uc3QgZWRpdG9yQWN0aW9ucyA9IHRoaXMuX2luamVjdG9yLmdldCgnZWRpdG9yQWN0aW9ucycsIGZhbHNlKTtcbiAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5faW5qZWN0b3IuZ2V0KCdzZWxlY3Rpb24nLCBmYWxzZSk7XG4gIGNvbnN0IGNvbnRleHRQYWQgPSB0aGlzLl9pbmplY3Rvci5nZXQoJ2NvbnRleHRQYWQnLCBmYWxzZSk7XG4gIGNvbnN0IHBhbGV0dGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoJ3BhbGV0dGUnLCBmYWxzZSk7XG4gIGNvbnN0IHBvcHVwTWVudSA9IHRoaXMuX2luamVjdG9yLmdldCgncG9wdXBNZW51JywgZmFsc2UpO1xuXG4gIGNvbnN0IGFjdGlvbnMgPSB7fTtcblxuICAvLyBhcHBlbmRcbiAgaWYgKHNlbGVjdGlvbiAmJiBjb250ZXh0UGFkICYmIHBhbGV0dGUgJiYgcG9wdXBNZW51ICYmIHBhbGV0dGUpIHtcbiAgICBhc3NpZ24oYWN0aW9ucywge1xuICAgICAgJ2FwcGVuZEVsZW1lbnQnOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24uZ2V0KCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA9PSAxICYmICFwb3B1cE1lbnUuaXNFbXB0eShzZWxlY3RlZFswXSwgJ2JwbW4tYXBwZW5kJykpIHtcbiAgICAgICAgICBjb250ZXh0UGFkLnRyaWdnZXJFbnRyeSgnYXBwZW5kJywgJ2NsaWNrJywgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhbGV0dGUudHJpZ2dlckVudHJ5KCdjcmVhdGUnLCAnY2xpY2snLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNyZWF0ZVxuICBpZiAocGFsZXR0ZSkge1xuICAgIGFzc2lnbihhY3Rpb25zLCB7XG4gICAgICAnY3JlYXRlRWxlbWVudCc6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHBhbGV0dGUudHJpZ2dlckVudHJ5KCdjcmVhdGUnLCAnY2xpY2snLCBldmVudCk7XG4gICAgICB9IH1cbiAgICApO1xuICB9XG5cbiAgZWRpdG9yQWN0aW9ucyAmJiBlZGl0b3JBY3Rpb25zLnJlZ2lzdGVyKGFjdGlvbnMpO1xuXG59O1xuXG52YXIgRWRpdG9yQWN0aW9uc01vZHVsZSA9IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBBcHBlbmRNZW51TW9kdWxlLFxuICAgIENyZWF0ZU1lbnVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnY3JlYXRlQXBwZW5kRWRpdG9yQWN0aW9ucydcbiAgXSxcbiAgY3JlYXRlQXBwZW5kRWRpdG9yQWN0aW9uczogWyAndHlwZScsIENyZWF0ZUFwcGVuZEVkaXRvckFjdGlvbnMgXVxufTtcblxudmFyIEtFWVNfQ09QWSA9IFsgJ2MnLCAnQycgXTtcclxudmFyIEtFWVNfUEFTVEUgPSBbICd2JywgJ1YnIF07XHJcbnZhciBLRVlTX1JFRE8gPSBbICd5JywgJ1knIF07XHJcbnZhciBLRVlTX1VORE8gPSBbICd6JywgJ1onIF07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuZnVuY3Rpb24gaXNDbWQoZXZlbnQpIHtcclxuXHJcbiAgLy8gZW5zdXJlIHdlIGRvbid0IHJlYWN0IHRvIEFsdEdyXHJcbiAgLy8gKG1hcHBlZCB0byBDVFJMICsgQUxUKVxyXG4gIGlmIChldmVudC5hbHRLZXkpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYga2V5IHByZXNzZWQgaXMgb25lIG9mIHByb3ZpZGVkIGtleXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBrZXlzXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIGlzS2V5KGtleXMsIGV2ZW50KSB7XHJcbiAga2V5cyA9IGlzQXJyYXkoa2V5cykgPyBrZXlzIDogWyBrZXlzIF07XHJcblxyXG4gIHJldHVybiBrZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEgfHwga2V5cy5pbmRleE9mKGV2ZW50LmNvZGUpICE9PSAtMTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcclxuICovXHJcbmZ1bmN0aW9uIGlzU2hpZnQoZXZlbnQpIHtcclxuICByZXR1cm4gZXZlbnQuc2hpZnRLZXk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5mdW5jdGlvbiBpc0NvcHkoZXZlbnQpIHtcclxuICByZXR1cm4gaXNDbWQoZXZlbnQpICYmIGlzS2V5KEtFWVNfQ09QWSwgZXZlbnQpO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZnVuY3Rpb24gaXNQYXN0ZShldmVudCkge1xyXG4gIHJldHVybiBpc0NtZChldmVudCkgJiYgaXNLZXkoS0VZU19QQVNURSwgZXZlbnQpO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxyXG4gKi9cclxuZnVuY3Rpb24gaXNVbmRvKGV2ZW50KSB7XHJcbiAgcmV0dXJuIGlzQ21kKGV2ZW50KSAmJiAhaXNTaGlmdChldmVudCkgJiYgaXNLZXkoS0VZU19VTkRPLCBldmVudCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XHJcbiAqL1xyXG5mdW5jdGlvbiBpc1JlZG8oZXZlbnQpIHtcclxuICByZXR1cm4gaXNDbWQoZXZlbnQpICYmIChcclxuICAgIGlzS2V5KEtFWVNfUkVETywgZXZlbnQpIHx8IChcclxuICAgICAgaXNLZXkoS0VZU19VTkRPLCBldmVudCkgJiYgaXNTaGlmdChldmVudClcclxuICAgIClcclxuICApO1xyXG59XG5cbnZhciBMT1dfUFJJT1JJVFkgPSA1MDA7XG5cblxuLyoqXG4gKiBBZGRzIGRlZmF1bHQga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogVGhpcyBkb2VzIG5vdCBwdWxsIGluIGFueSBmZWF0dXJlcyB3aWxsIGJpbmQgb25seSBhY3Rpb25zIHRoYXRcbiAqIGhhdmUgcHJldmlvdXNseSBiZWVuIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGUgZWRpdG9yQWN0aW9ucyBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEJ1c30gZXZlbnRCdXNcbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKi9cbmZ1bmN0aW9uIEtleWJvYXJkQmluZGluZ3MoZXZlbnRCdXMsIGtleWJvYXJkKSB7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGV2ZW50QnVzLm9uKCdlZGl0b3JBY3Rpb25zLmluaXQnLCBMT1dfUFJJT1JJVFksIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICB2YXIgZWRpdG9yQWN0aW9ucyA9IGV2ZW50LmVkaXRvckFjdGlvbnM7XG5cbiAgICBzZWxmLnJlZ2lzdGVyQmluZGluZ3Moa2V5Ym9hcmQsIGVkaXRvckFjdGlvbnMpO1xuICB9KTtcbn1cblxuS2V5Ym9hcmRCaW5kaW5ncy4kaW5qZWN0ID0gW1xuICAnZXZlbnRCdXMnLFxuICAna2V5Ym9hcmQnXG5dO1xuXG5cbi8qKlxuICogUmVnaXN0ZXIgYXZhaWxhYmxlIGtleWJvYXJkIGJpbmRpbmdzLlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmR9IGtleWJvYXJkXG4gKiBAcGFyYW0ge0VkaXRvckFjdGlvbnN9IGVkaXRvckFjdGlvbnNcbiAqL1xuS2V5Ym9hcmRCaW5kaW5ncy5wcm90b3R5cGUucmVnaXN0ZXJCaW5kaW5ncyA9IGZ1bmN0aW9uKGtleWJvYXJkLCBlZGl0b3JBY3Rpb25zKSB7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMuaXNSZWdpc3RlcmVkKGFjdGlvbikpIHtcbiAgICAgIGtleWJvYXJkLmFkZExpc3RlbmVyKGZuKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIHVuZG9cbiAgLy8gKENUUkx8Q01EKSArIFpcbiAgYWRkTGlzdGVuZXIoJ3VuZG8nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGlzVW5kbyhldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigndW5kbycpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlZG9cbiAgLy8gQ1RSTCArIFlcbiAgLy8gQ01EICsgU0hJRlQgKyBaXG4gIGFkZExpc3RlbmVyKCdyZWRvJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc1JlZG8oZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3JlZG8nKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb3B5XG4gIC8vIENUUkwvQ01EICsgQ1xuICBhZGRMaXN0ZW5lcignY29weScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNDb3B5KGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdjb3B5Jyk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcGFzdGVcbiAgLy8gQ1RSTC9DTUQgKyBWXG4gIGFkZExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNQYXN0ZShldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMudHJpZ2dlcigncGFzdGUnKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyB6b29tIGluIG9uZSBzdGVwXG4gIC8vIENUUkwvQ01EICsgK1xuICBhZGRMaXN0ZW5lcignc3RlcFpvb20nLCBmdW5jdGlvbihjb250ZXh0KSB7XG5cbiAgICB2YXIgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgLy8gcXVpcms6IGl0IGhhcyB0byBiZSB0cmlnZ2VyZWQgYnkgYD1gIGFzIHdlbGwgdG8gd29yayBvbiBpbnRlcm5hdGlvbmFsIGtleWJvYXJkIGxheW91dFxuICAgIC8vIGNmOiBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzL2lzc3Vlcy8xMzYyI2lzc3VlY29tbWVudC03MjI5ODk3NTRcbiAgICBpZiAoaXNLZXkoWyAnKycsICdBZGQnLCAnPScgXSwgZXZlbnQpICYmIGlzQ21kKGV2ZW50KSkge1xuICAgICAgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdzdGVwWm9vbScsIHsgdmFsdWU6IDEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gem9vbSBvdXQgb25lIHN0ZXBcbiAgLy8gQ1RSTCArIC1cbiAgYWRkTGlzdGVuZXIoJ3N0ZXBab29tJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleShbICctJywgJ1N1YnRyYWN0JyBdLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3N0ZXBab29tJywgeyB2YWx1ZTogLTEgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gem9vbSB0byB0aGUgZGVmYXVsdCBsZXZlbFxuICAvLyBDVFJMICsgMFxuICBhZGRMaXN0ZW5lcignem9vbScsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIHZhciBldmVudCA9IGNvbnRleHQua2V5RXZlbnQ7XG5cbiAgICBpZiAoaXNLZXkoJzAnLCBldmVudCkgJiYgaXNDbWQoZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3pvb20nLCB7IHZhbHVlOiAxIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGRlbGV0ZSBzZWxlY3RlZCBlbGVtZW50XG4gIC8vIERFTFxuICBhZGRMaXN0ZW5lcigncmVtb3ZlU2VsZWN0aW9uJywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgdmFyIGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChpc0tleShbICdCYWNrc3BhY2UnLCAnRGVsZXRlJywgJ0RlbCcgXSwgZXZlbnQpKSB7XG4gICAgICBlZGl0b3JBY3Rpb25zLnRyaWdnZXIoJ3JlbW92ZVNlbGVjdGlvbicpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBCUE1OIDIuMCBzcGVjaWZpYyBrZXlib2FyZCBiaW5kaW5ncy5cbiAqXG4gKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvclxuICovXG5mdW5jdGlvbiBDcmVhdGVBcHBlbmRLZXlib2FyZEJpbmRpbmdzKGluamVjdG9yKSB7XG5cbiAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgdGhpcy5fa2V5Ym9hcmQgPSB0aGlzLl9pbmplY3Rvci5nZXQoJ2tleWJvYXJkJywgZmFsc2UpO1xuICB0aGlzLl9lZGl0b3JBY3Rpb25zID0gdGhpcy5faW5qZWN0b3IuZ2V0KCdlZGl0b3JBY3Rpb25zJywgZmFsc2UpO1xuXG4gIGlmICh0aGlzLl9rZXlib2FyZCkge1xuICAgIHRoaXMuX2luamVjdG9yLmludm9rZShLZXlib2FyZEJpbmRpbmdzLCB0aGlzKTtcbiAgfVxufVxuXG5lKENyZWF0ZUFwcGVuZEtleWJvYXJkQmluZGluZ3MsIEtleWJvYXJkQmluZGluZ3MpO1xuXG5DcmVhdGVBcHBlbmRLZXlib2FyZEJpbmRpbmdzLiRpbmplY3QgPSBbXG4gICdpbmplY3Rvcidcbl07XG5cblxuLyoqXG4gKiBSZWdpc3RlciBhdmFpbGFibGUga2V5Ym9hcmQgYmluZGluZ3MuXG4gKlxuICogQHBhcmFtIHtLZXlib2FyZH0ga2V5Ym9hcmRcbiAqIEBwYXJhbSB7RWRpdG9yQWN0aW9uc30gZWRpdG9yQWN0aW9uc1xuICovXG5DcmVhdGVBcHBlbmRLZXlib2FyZEJpbmRpbmdzLnByb3RvdHlwZS5yZWdpc3RlckJpbmRpbmdzID0gZnVuY3Rpb24oKSB7XG5cbiAgY29uc3Qga2V5Ym9hcmQgPSB0aGlzLl9rZXlib2FyZDtcbiAgY29uc3QgZWRpdG9yQWN0aW9ucyA9IHRoaXMuX2VkaXRvckFjdGlvbnM7XG5cbiAgLy8gaW5oZXJpdCBkZWZhdWx0IGJpbmRpbmdzXG4gIEtleWJvYXJkQmluZGluZ3MucHJvdG90eXBlLnJlZ2lzdGVyQmluZGluZ3MuY2FsbCh0aGlzLCBrZXlib2FyZCwgZWRpdG9yQWN0aW9ucyk7XG5cbiAgLyoqXG4gICAqIEFkZCBrZXlib2FyZCBiaW5kaW5nIGlmIHJlc3BlY3RpdmUgZWRpdG9yIGFjdGlvblxuICAgKiBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhhdCBpbXBsZW1lbnRzIHRoZSBrZXkgYmluZGluZ1xuICAgKi9cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIoYWN0aW9uLCBmbikge1xuXG4gICAgaWYgKGVkaXRvckFjdGlvbnMgJiYgZWRpdG9yQWN0aW9ucy5pc1JlZ2lzdGVyZWQoYWN0aW9uKSkge1xuICAgICAga2V5Ym9hcmQgJiYga2V5Ym9hcmQuYWRkTGlzdGVuZXIoZm4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFjdGl2YXRlIGFwcGVuZC9jcmVhdGUgZWxlbWVudFxuICAvLyBBXG4gIGFkZExpc3RlbmVyKCdhcHBlbmRFbGVtZW50JywgZnVuY3Rpb24oY29udGV4dCkge1xuXG4gICAgY29uc3QgZXZlbnQgPSBjb250ZXh0LmtleUV2ZW50O1xuXG4gICAgaWYgKGtleWJvYXJkICYmIGtleWJvYXJkLmhhc01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlib2FyZCAmJiBrZXlib2FyZC5pc0tleShbICdhJywgJ0EnIF0sIGV2ZW50KSkge1xuXG4gICAgICBlZGl0b3JBY3Rpb25zICYmIGVkaXRvckFjdGlvbnMudHJpZ2dlcignYXBwZW5kRWxlbWVudCcsIGV2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTlxuICBhZGRMaXN0ZW5lcignY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIGNvbnN0IGV2ZW50ID0gY29udGV4dC5rZXlFdmVudDtcblxuICAgIGlmIChrZXlib2FyZCAmJiBrZXlib2FyZC5oYXNNb2RpZmllcihldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Ym9hcmQgJiYga2V5Ym9hcmQuaXNLZXkoWyAnbicsICdOJyBdLCBldmVudCkpIHtcbiAgICAgIGVkaXRvckFjdGlvbnMgJiYgZWRpdG9yQWN0aW9ucy50cmlnZ2VyKCdjcmVhdGVFbGVtZW50JywgZXZlbnQpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG59O1xuXG52YXIgS2V5Ym9hcmRCaW5kaW5nc01vZHVsZSA9IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBBcHBlbmRNZW51TW9kdWxlLFxuICAgIENyZWF0ZU1lbnVNb2R1bGVcbiAgXSxcbiAgX19pbml0X186IFtcbiAgICAnY3JlYXRlQXBwZW5kS2V5Ym9hcmRCaW5kaW5ncydcbiAgXSxcbiAgY3JlYXRlQXBwZW5kS2V5Ym9hcmRCaW5kaW5nczogWyAndHlwZScsIENyZWF0ZUFwcGVuZEtleWJvYXJkQmluZGluZ3MgXVxufTtcblxudmFyIGluZGV4JDEgPSB7XG4gIF9fZGVwZW5kc19fOiBbXG4gICAgQXBwZW5kTWVudU1vZHVsZSxcbiAgICBDcmVhdGVNZW51TW9kdWxlLFxuICAgIEVkaXRvckFjdGlvbnNNb2R1bGUsXG4gICAgS2V5Ym9hcmRCaW5kaW5nc01vZHVsZVxuICBdLFxufTtcblxuLyoqXG4gKiBBIHBvcHVwIG1lbnUgcHJvdmlkZXIgdGhhdCBhbGxvd3MgdG8gYXBwZW5kIGVsZW1lbnRzIHdpdGhcbiAqIGVsZW1lbnQgdGVtcGxhdGVzLlxuICovXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzQXBwZW5kUHJvdmlkZXIoXG4gICAgcG9wdXBNZW51LCB0cmFuc2xhdGUsIGVsZW1lbnRUZW1wbGF0ZXMsXG4gICAgYXV0b1BsYWNlLCBjcmVhdGUsIG1vdXNlLCBydWxlcykge1xuXG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgdGhpcy5fYXV0b1BsYWNlID0gYXV0b1BsYWNlO1xuICB0aGlzLl9jcmVhdGUgPSBjcmVhdGU7XG4gIHRoaXMuX21vdXNlID0gbW91c2U7XG4gIHRoaXMuX3J1bGVzID0gcnVsZXM7XG5cbiAgdGhpcy5yZWdpc3RlcigpO1xufVxuXG5FbGVtZW50VGVtcGxhdGVzQXBwZW5kUHJvdmlkZXIuJGluamVjdCA9IFtcbiAgJ3BvcHVwTWVudScsXG4gICd0cmFuc2xhdGUnLFxuICAnZWxlbWVudFRlbXBsYXRlcycsXG4gICdhdXRvUGxhY2UnLFxuICAnY3JlYXRlJyxcbiAgJ21vdmUnLFxuICAncnVsZXMnXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGFwcGVuZCBtZW51IHByb3ZpZGVyIGluIHRoZSBwb3B1cCBtZW51XG4gKi9cbkVsZW1lbnRUZW1wbGF0ZXNBcHBlbmRQcm92aWRlci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2JwbW4tYXBwZW5kJywgdGhpcyk7XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIGVsZW1lbnQgdGVtcGxhdGVzIHRvIHRoZSBhcHBlbmQgbWVudS5cbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5FbGVtZW50VGVtcGxhdGVzQXBwZW5kUHJvdmlkZXIucHJvdG90eXBlLmdldFBvcHVwTWVudUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiAoZW50cmllcykgPT4ge1xuXG4gICAgaWYgKCF0aGlzLl9ydWxlcy5hbGxvd2VkKCdzaGFwZS5hcHBlbmQnLCB7IGVsZW1lbnQ6IGVsZW1lbnQgfSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFRlbXBsYXRlcyA9IHRoaXMuX2ZpbHRlclRlbXBsYXRlcyh0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldExhdGVzdCgpKTtcblxuICAgIC8vIGFkZCB0ZW1wbGF0ZSBlbnRyaWVzXG4gICAgYXNzaWduKGVudHJpZXMsIHRoaXMuZ2V0VGVtcGxhdGVFbnRyaWVzKGVsZW1lbnQsIGZpbHRlcmVkVGVtcGxhdGVzKSk7XG5cbiAgICByZXR1cm4gZW50cmllcztcbiAgfTtcbn07XG5cbi8qKlxuICogR2V0IGFsbCBlbGVtZW50IHRlbXBsYXRlcy5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7T2JqZWN0fSBlbGVtZW50IHRlbXBsYXRlcyBhcyBtZW51IGVudHJpZXNcbiAqL1xuRWxlbWVudFRlbXBsYXRlc0FwcGVuZFByb3ZpZGVyLnByb3RvdHlwZS5nZXRUZW1wbGF0ZUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50LCB0ZW1wbGF0ZXMpIHtcblxuICBjb25zdCB0ZW1wbGF0ZUVudHJpZXMgPSB7fTtcblxuICB0ZW1wbGF0ZXMubWFwKHRlbXBsYXRlID0+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIGljb24gPSB7fSxcbiAgICAgIGNhdGVnb3J5LFxuICAgIH0gPSB0ZW1wbGF0ZTtcblxuICAgIGNvbnN0IGVudHJ5SWQgPSBgYXBwZW5kLnRlbXBsYXRlLSR7dGVtcGxhdGUuaWR9YDtcblxuICAgIGNvbnN0IGRlZmF1bHRHcm91cCA9IHtcbiAgICAgIGlkOiAndGVtcGxhdGVzJyxcbiAgICAgIG5hbWU6IHRoaXMuX3RyYW5zbGF0ZSgnVGVtcGxhdGVzJylcbiAgICB9O1xuXG4gICAgdGVtcGxhdGVFbnRyaWVzW2VudHJ5SWRdID0ge1xuICAgICAgbGFiZWw6IHRlbXBsYXRlLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGVtcGxhdGUuZGVzY3JpcHRpb24sXG4gICAgICBkb2N1bWVudGF0aW9uUmVmOiB0ZW1wbGF0ZS5kb2N1bWVudGF0aW9uUmVmLFxuICAgICAgaW1hZ2VVcmw6IGljb24uY29udGVudHMsXG4gICAgICBncm91cDogY2F0ZWdvcnkgfHwgZGVmYXVsdEdyb3VwLFxuICAgICAgYWN0aW9uOiB0aGlzLl9nZXRFbnRyeUFjdGlvbihlbGVtZW50LCB0ZW1wbGF0ZSlcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gdGVtcGxhdGVFbnRyaWVzO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgb3V0IHRlbXBsYXRlcyBmcm9tIHRoZSBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gdGVtcGxhdGVzXG4gKlxuICogQHJldHVybnMge0FycmF5PE9iamVjdD59XG4gKi9cbkVsZW1lbnRUZW1wbGF0ZXNBcHBlbmRQcm92aWRlci5wcm90b3R5cGUuX2ZpbHRlclRlbXBsYXRlcyA9IGZ1bmN0aW9uKHRlbXBsYXRlcykge1xuICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcih0ZW1wbGF0ZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgYXBwbGllc1RvLFxuICAgICAgZWxlbWVudFR5cGVcbiAgICB9ID0gdGVtcGxhdGU7XG5cbiAgICBjb25zdCB0eXBlID0gKGVsZW1lbnRUeXBlICYmIGVsZW1lbnRUeXBlLnZhbHVlKSB8fCBhcHBsaWVzVG9bMF07XG5cbiAgICAvLyBlbGVtZW50cyB0aGF0IGNhbiBub3QgYmUgYXBwZW5kZWRcbiAgICBpZiAoW1xuICAgICAgJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICAnYnBtbjpQYXJ0aWNpcGFudCdcbiAgICBdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gc2VxdWVuY2UgZmxvdyB0ZW1wbGF0ZXMgYXJlIHN1cHBvcnRlZFxuICAgIC8vIGJ1dCBjb25uZWN0aW9ucyBhcmUgbm90IGFwcGVuZGFibGVcbiAgICBpZiAoJ2JwbW46U2VxdWVuY2VGbG93JyA9PT0gdHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFjdGlvbiBmb3IgYSBnaXZlbiB0ZW1wbGF0ZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gdGVtcGxhdGVcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5FbGVtZW50VGVtcGxhdGVzQXBwZW5kUHJvdmlkZXIucHJvdG90eXBlLl9nZXRFbnRyeUFjdGlvbiA9IGZ1bmN0aW9uKGVsZW1lbnQsIHRlbXBsYXRlKSB7XG4gIHJldHVybiB7XG5cbiAgICBjbGljazogKCkgPT4ge1xuICAgICAgY29uc3QgbmV3RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMuY3JlYXRlRWxlbWVudCh0ZW1wbGF0ZSk7XG4gICAgICB0aGlzLl9hdXRvUGxhY2UuYXBwZW5kKGVsZW1lbnQsIG5ld0VsZW1lbnQpO1xuICAgIH0sXG5cbiAgICBkcmFnc3RhcnQ6IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgbmV3RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMuY3JlYXRlRWxlbWVudCh0ZW1wbGF0ZSk7XG5cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQgPSB0aGlzLl9tb3VzZS5nZXRMYXN0TW92ZUV2ZW50KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NyZWF0ZS5zdGFydChldmVudCwgbmV3RWxlbWVudCwge1xuICAgICAgICBzb3VyY2U6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBBcHBlbmRFbGVtZW50VGVtcGxhdGVzTW9kdWxlID0ge1xuICBfX2luaXRfXzogWyAnZWxlbWVudFRlbXBsYXRlc0FwcGVuZFByb3ZpZGVyJyBdLFxuICBlbGVtZW50VGVtcGxhdGVzQXBwZW5kUHJvdmlkZXI6IFsgJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzQXBwZW5kUHJvdmlkZXIgXVxufTtcblxuLyoqXG4gKiBBIHBvcHVwIG1lbnUgcHJvdmlkZXIgdGhhdCBhbGxvd3MgdG8gY3JlYXRlIGVsZW1lbnRzIHdpdGhcbiAqIGVsZW1lbnQgdGVtcGxhdGVzLlxuICovXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzQ3JlYXRlUHJvdmlkZXIoXG4gICAgcG9wdXBNZW51LCB0cmFuc2xhdGUsXG4gICAgZWxlbWVudFRlbXBsYXRlcywgbW91c2UsIGNyZWF0ZSkge1xuXG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgdGhpcy5fbW91c2UgPSBtb3VzZTtcbiAgdGhpcy5fY3JlYXRlID0gY3JlYXRlO1xuXG4gIHRoaXMucmVnaXN0ZXIoKTtcbn1cblxuRWxlbWVudFRlbXBsYXRlc0NyZWF0ZVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdwb3B1cE1lbnUnLFxuICAndHJhbnNsYXRlJyxcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnLFxuICAnbW91c2UnLFxuICAnY3JlYXRlJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciBjcmVhdGUgbWVudSBwcm92aWRlciBpbiB0aGUgcG9wdXAgbWVudVxuICovXG5FbGVtZW50VGVtcGxhdGVzQ3JlYXRlUHJvdmlkZXIucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3BvcHVwTWVudS5yZWdpc3RlclByb3ZpZGVyKCdicG1uLWNyZWF0ZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBlbGVtZW50IHRlbXBsYXRlcyB0byB0aGUgY3JlYXRlIG1lbnUuXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuRWxlbWVudFRlbXBsYXRlc0NyZWF0ZVByb3ZpZGVyLnByb3RvdHlwZS5nZXRQb3B1cE1lbnVFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICByZXR1cm4gKGVudHJpZXMpID0+IHtcblxuICAgIC8vIGFkZCB0ZW1wbGF0ZSBlbnRyaWVzXG4gICAgYXNzaWduKGVudHJpZXMsIHRoaXMuZ2V0VGVtcGxhdGVFbnRyaWVzKGVsZW1lbnQpKTtcblxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9O1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIGVsZW1lbnQgdGVtcGxhdGVzLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fSBhIGxpc3Qgb2YgZWxlbWVudCB0ZW1wbGF0ZXMgYXMgbWVudSBlbnRyaWVzXG4gKi9cbkVsZW1lbnRUZW1wbGF0ZXNDcmVhdGVQcm92aWRlci5wcm90b3R5cGUuZ2V0VGVtcGxhdGVFbnRyaWVzID0gZnVuY3Rpb24oKSB7XG5cbiAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5nZXRMYXRlc3QoKTtcbiAgY29uc3QgdGVtcGxhdGVFbnRyaWVzID0ge307XG5cbiAgdGVtcGxhdGVzLm1hcCh0ZW1wbGF0ZSA9PiB7XG5cbiAgICBjb25zdCB7XG4gICAgICBpY29uID0ge30sXG4gICAgICBjYXRlZ29yeSxcbiAgICB9ID0gdGVtcGxhdGU7XG5cbiAgICBjb25zdCBlbnRyeUlkID0gYGNyZWF0ZS50ZW1wbGF0ZS0ke3RlbXBsYXRlLmlkfWA7XG5cbiAgICBjb25zdCBkZWZhdWx0R3JvdXAgPSB7XG4gICAgICBpZDogJ3RlbXBsYXRlcycsXG4gICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUoJ1RlbXBsYXRlcycpXG4gICAgfTtcblxuICAgIHRlbXBsYXRlRW50cmllc1tlbnRyeUlkXSA9IHtcbiAgICAgIGxhYmVsOiB0ZW1wbGF0ZS5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHRlbXBsYXRlLmRlc2NyaXB0aW9uLFxuICAgICAgZG9jdW1lbnRhdGlvblJlZjogdGVtcGxhdGUuZG9jdW1lbnRhdGlvblJlZixcbiAgICAgIGltYWdlVXJsOiBpY29uLmNvbnRlbnRzLFxuICAgICAgZ3JvdXA6IGNhdGVnb3J5IHx8IGRlZmF1bHRHcm91cCxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBjbGljazogdGhpcy5fZ2V0RW50cnlBY3Rpb24odGVtcGxhdGUpLFxuICAgICAgICBkcmFnc3RhcnQ6IHRoaXMuX2dldEVudHJ5QWN0aW9uKHRlbXBsYXRlKVxuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIHJldHVybiB0ZW1wbGF0ZUVudHJpZXM7XG59O1xuXG5cbkVsZW1lbnRUZW1wbGF0ZXNDcmVhdGVQcm92aWRlci5wcm90b3R5cGUuX2dldEVudHJ5QWN0aW9uID0gZnVuY3Rpb24odGVtcGxhdGUpIHtcbiAgY29uc3QgY3JlYXRlID0gdGhpcy5fY3JlYXRlO1xuICBjb25zdCBwb3B1cE1lbnUgPSB0aGlzLl9wb3B1cE1lbnU7XG4gIGNvbnN0IGVsZW1lbnRUZW1wbGF0ZXMgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzO1xuICBjb25zdCBtb3VzZSA9IHRoaXMuX21vdXNlO1xuXG4gIHJldHVybiAoZXZlbnQpID0+IHtcblxuICAgIHBvcHVwTWVudS5jbG9zZSgpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBuZXcgZWxlbWVudFxuICAgIGxldCBuZXdFbGVtZW50ID0gZWxlbWVudFRlbXBsYXRlcy5jcmVhdGVFbGVtZW50KHRlbXBsYXRlKTtcblxuICAgIC8vIHVzZSBsYXN0IG1vdXNlIGV2ZW50IGlmIHRyaWdnZXJlZCB2aWEga2V5Ym9hcmRcbiAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICBldmVudCA9IG1vdXNlLmdldExhc3RNb3ZlRXZlbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlLnN0YXJ0KGV2ZW50LCBuZXdFbGVtZW50KTtcbiAgfTtcbn07XG5cbnZhciBDcmVhdGVFbGVtZW50VGVtcGxhdGVzTW9kdWxlID0ge1xuICBfX2luaXRfXzogWyAnZWxlbWVudFRlbXBsYXRlc0NyZWF0ZVByb3ZpZGVyJyBdLFxuICBlbGVtZW50VGVtcGxhdGVzQ3JlYXRlUHJvdmlkZXI6IFsgJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzQ3JlYXRlUHJvdmlkZXIgXVxufTtcblxuLyoqXG4gKiBBIHJlcGxhY2UgbWVudSBwcm92aWRlciB0aGF0IGFsbG93cyB0byByZXBsYWNlIGVsZW1lbnRzIHdpdGhcbiAqIGVsZW1lbnQgdGVtcGxhdGVzLlxuICovXG5mdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzUmVwbGFjZVByb3ZpZGVyKHBvcHVwTWVudSwgdHJhbnNsYXRlLCBlbGVtZW50VGVtcGxhdGVzKSB7XG5cbiAgdGhpcy5fcG9wdXBNZW51ID0gcG9wdXBNZW51O1xuICB0aGlzLl90cmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gIHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMgPSBlbGVtZW50VGVtcGxhdGVzO1xuXG4gIHRoaXMucmVnaXN0ZXIoKTtcbn1cblxuRWxlbWVudFRlbXBsYXRlc1JlcGxhY2VQcm92aWRlci4kaW5qZWN0ID0gW1xuICAncG9wdXBNZW51JyxcbiAgJ3RyYW5zbGF0ZScsXG4gICdlbGVtZW50VGVtcGxhdGVzJ1xuXTtcblxuLyoqXG4gKiBSZWdpc3RlciByZXBsYWNlIG1lbnUgcHJvdmlkZXIgaW4gdGhlIHBvcHVwIG1lbnVcbiAqL1xuRWxlbWVudFRlbXBsYXRlc1JlcGxhY2VQcm92aWRlci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2JwbW4tcmVwbGFjZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBlbGVtZW50IHRlbXBsYXRlcyB0byB0aGUgcmVwbGFjZSBtZW51LlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbkVsZW1lbnRUZW1wbGF0ZXNSZXBsYWNlUHJvdmlkZXIucHJvdG90eXBlLmdldFBvcHVwTWVudUVudHJpZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgcmV0dXJuIChlbnRyaWVzKSA9PiB7XG5cbiAgICAvLyBjb252ZXJ0IG91ciBlbnRyaWVzIGludG8gc29tZXRoaW5nIHNvcnRhYmxlXG4gICAgbGV0IGVudHJ5U2V0ID0gT2JqZWN0LmVudHJpZXMoZW50cmllcyk7XG5cbiAgICAvLyBhZGQgdGVtcGxhdGUgZW50cmllc1xuICAgIGVudHJ5U2V0ID0gWyAuLi5lbnRyeVNldCwgLi4udGhpcy5nZXRUZW1wbGF0ZUVudHJpZXMoZWxlbWVudCkgXTtcblxuICAgIC8vIGNvbnZlcnQgYmFjayB0byBvYmplY3RcbiAgICByZXR1cm4gZW50cnlTZXQucmVkdWNlKChlbnRyaWVzLCBbIGtleSwgdmFsdWUgXSkgPT4ge1xuICAgICAgZW50cmllc1trZXldID0gdmFsdWU7XG5cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH0sIHt9KTtcbiAgfTtcbn07XG5cbi8qKlxuICogR2V0IGFsbCBlbGVtZW50IHRlbXBsYXRlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE9iamVjdD59IGEgbGlzdCBvZiBlbGVtZW50IHRlbXBsYXRlcyBhcyBtZW51IGVudHJpZXNcbiAqL1xuRWxlbWVudFRlbXBsYXRlc1JlcGxhY2VQcm92aWRlci5wcm90b3R5cGUuZ2V0VGVtcGxhdGVFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIGNvbnN0IHRlbXBsYXRlcyA9IHRoaXMuX2dldE1hdGNoaW5nVGVtcGxhdGVzKGVsZW1lbnQpO1xuICByZXR1cm4gdGVtcGxhdGVzLm1hcCh0ZW1wbGF0ZSA9PiB7XG5cbiAgICBjb25zdCB7XG4gICAgICBpY29uID0ge30sXG4gICAgICBjYXRlZ29yeSxcbiAgICB9ID0gdGVtcGxhdGU7XG5cbiAgICBjb25zdCBlbnRyeUlkID0gYHJlcGxhY2UudGVtcGxhdGUtJHt0ZW1wbGF0ZS5pZH1gO1xuXG4gICAgY29uc3QgZGVmYXVsdEdyb3VwID0ge1xuICAgICAgaWQ6ICd0ZW1wbGF0ZXMnLFxuICAgICAgbmFtZTogdGhpcy5fdHJhbnNsYXRlKCdUZW1wbGF0ZXMnKVxuICAgIH07XG5cbiAgICByZXR1cm4gWyBlbnRyeUlkLCB7XG4gICAgICBsYWJlbDogdGVtcGxhdGUubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0ZW1wbGF0ZS5kZXNjcmlwdGlvbixcbiAgICAgIGRvY3VtZW50YXRpb25SZWY6IHRlbXBsYXRlLmRvY3VtZW50YXRpb25SZWYsXG4gICAgICBpbWFnZVVybDogaWNvbi5jb250ZW50cyxcbiAgICAgIGdyb3VwOiBjYXRlZ29yeSB8fCBkZWZhdWx0R3JvdXAsXG4gICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5hcHBseVRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9IF07XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZXMgdGhhdCBjYW4gdGhlIGVsZW1lbnQgY2FuIGJlIHJlcGxhY2VkIHdpdGguXG4gKlxuICogQHBhcmFtICB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxFbGVtZW50VGVtcGxhdGU+fVxuICovXG5FbGVtZW50VGVtcGxhdGVzUmVwbGFjZVByb3ZpZGVyLnByb3RvdHlwZS5fZ2V0TWF0Y2hpbmdUZW1wbGF0ZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldExhdGVzdCgpLmZpbHRlcih0ZW1wbGF0ZSA9PiB7XG4gICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIHRlbXBsYXRlLmFwcGxpZXNUbykgJiYgIWlzVGVtcGxhdGVBcHBsaWVkKGVsZW1lbnQsIHRlbXBsYXRlKTtcbiAgfSk7XG59O1xuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBpc1RlbXBsYXRlQXBwbGllZChlbGVtZW50LCB0ZW1wbGF0ZSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIGlmIChidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZScpID09PSB0ZW1wbGF0ZS5pZDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFJlcGxhY2VFbGVtZW50VGVtcGxhdGVzTW9kdWxlID0ge1xuICBfX2luaXRfXzogW1xuICAgICdlbGVtZW50VGVtcGxhdGVzUmVwbGFjZVByb3ZpZGVyJ1xuICBdLFxuICBlbGVtZW50VGVtcGxhdGVzUmVwbGFjZVByb3ZpZGVyOiBbICd0eXBlJywgRWxlbWVudFRlbXBsYXRlc1JlcGxhY2VQcm92aWRlciBdXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL21vZGVsL1R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vbW9kZWwvVHlwZXMnKS5Nb2RkbGVFbGVtZW50fSBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gW2RpXVxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRXhwYW5kZWQoZWxlbWVudCwgZGkpIHtcblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46U3ViUHJvY2VzcycpKSB7XG4gICAgZGkgPSBkaSB8fCBnZXREaShlbGVtZW50KTtcblxuICAgIGlmIChkaSAmJiBpcyhkaSwgJ2JwbW5kaTpCUE1OUGxhbmUnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpICYmICEhZGkuaXNFeHBhbmRlZDtcbiAgfVxuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuICEhZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkucHJvY2Vzc1JlZjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uLy4uL21vZGVsL1R5cGVzJykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnZGlhZ3JhbS1qcy9saWIvZmVhdHVyZXMvcG9wdXAtbWVudS9Qb3B1cE1lbnUnKS5Qb3B1cE1lbnVUYXJnZXR9IFBvcHVwTWVudVRhcmdldFxuICpcbiAqIEB0eXBlZGVmIHsoZW50cnk6IFBvcHVwTWVudVRhcmdldCkgPT4gYm9vbGVhbn0gRGlmZmVyZW50VHlwZVZhbGlkYXRvclxuICovXG5cbi8qKlxuICogUmV0dXJucyB0cnVlLCBpZiBhbiBlbGVtZW50IGlzIGZyb20gYSBkaWZmZXJlbnQgdHlwZVxuICogdGhhbiBhIHRhcmdldCBkZWZpbml0aW9uLiBUYWtlcyBpbnRvIGFjY291bnQgdGhlIHR5cGUsXG4gKiBldmVudCBkZWZpbml0aW9uIHR5cGUgYW5kIHRyaWdnZXJlZEJ5RXZlbnQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7RGlmZmVyZW50VHlwZVZhbGlkYXRvcn1cbiAqL1xuZnVuY3Rpb24gaXNEaWZmZXJlbnRUeXBlKGVsZW1lbnQpIHtcblxuICByZXR1cm4gZnVuY3Rpb24oZW50cnkpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZW50cnkudGFyZ2V0O1xuXG4gICAgdmFyIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgICAgIGV2ZW50RGVmaW5pdGlvbiA9IGJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnMgJiYgYnVzaW5lc3NPYmplY3QuZXZlbnREZWZpbml0aW9uc1swXTtcblxuICAgIHZhciBpc1R5cGVFcXVhbCA9IGJ1c2luZXNzT2JqZWN0LiR0eXBlID09PSB0YXJnZXQudHlwZTtcblxuICAgIHZhciBpc0V2ZW50RGVmaW5pdGlvbkVxdWFsID0gKFxuICAgICAgKGV2ZW50RGVmaW5pdGlvbiAmJiBldmVudERlZmluaXRpb24uJHR5cGUpID09PSB0YXJnZXQuZXZlbnREZWZpbml0aW9uVHlwZVxuICAgICk7XG5cbiAgICB2YXIgaXNUcmlnZ2VyZWRCeUV2ZW50RXF1YWwgPSAoXG5cbiAgICAgIC8vIGNvaGVyc2UgdG8gPGZhbHNlPlxuICAgICAgISF0YXJnZXQudHJpZ2dlcmVkQnlFdmVudCA9PT0gISFidXNpbmVzc09iamVjdC50cmlnZ2VyZWRCeUV2ZW50XG4gICAgKTtcblxuICAgIHZhciBpc0V4cGFuZGVkRXF1YWwgPSAoXG4gICAgICB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0YXJnZXQuaXNFeHBhbmRlZCA9PT0gaXNFeHBhbmRlZChlbGVtZW50KVxuICAgICk7XG5cbiAgICByZXR1cm4gIWlzVHlwZUVxdWFsIHx8ICFpc0V2ZW50RGVmaW5pdGlvbkVxdWFsIHx8ICFpc1RyaWdnZXJlZEJ5RXZlbnRFcXVhbCB8fCAhaXNFeHBhbmRlZEVxdWFsO1xuICB9O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsgKCkgPT4gc3RyaW5nIH0gTGFiZWxHZXR0ZXJcbiAqXG4gKiBAdHlwZWRlZiB7IHtcbiAqICAgbGFiZWw6IHN0cmluZyB8IExhYmVsR2V0dGVyO1xuICogICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gKiAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICogICB0YXJnZXQ/OiB7XG4gKiAgICAgdHlwZTogc3RyaW5nO1xuICogICAgIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xuICogICAgIGlzSW50ZXJydXB0aW5nPzogYm9vbGVhbjtcbiAqICAgICB0cmlnZ2VyZWRCeUV2ZW50PzogYm9vbGVhbjtcbiAqICAgICBjYW5jZWxBY3Rpdml0eT86IGJvb2xlYW47XG4gKiAgICAgZXZlbnREZWZpbml0aW9uVHlwZT86IHN0cmluZztcbiAqICAgICBldmVudERlZmluaXRpb25BdHRycz86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAqICAgfTtcbiAqIH0gfSBSZXBsYWNlT3B0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgU1RBUlRfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1pbnRlcm1lZGlhdGUtdGhyb3dpbmcnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIHN0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2Utc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIHN0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRpbWVyLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtdGltZXInLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIHN0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNvbmRpdGlvbmFsLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtY29uZGl0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29uZGl0aW9uYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgc3RhcnQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfVxuXTtcblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgU1RBUlRfRVZFTlRfU1VCX1BST0NFU1MgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1pbnRlcm1lZGlhdGUtdGhyb3dpbmcnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gICAgfVxuICB9XG5dO1xuXG4vKipcbiAqIEB0eXBlIHtSZXBsYWNlT3B0aW9uW119XG4gKi9cbnZhciBJTlRFUk1FRElBVEVfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1N0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdJbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uZS1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIGludGVybWVkaWF0ZSBjYXRjaCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1tZXNzYWdlLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZUNhdGNoRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2UtaW50ZXJtZWRpYXRlLXRocm93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LXRocm93LW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgaW50ZXJtZWRpYXRlIGNhdGNoIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRpbWVyLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBpbnRlcm1lZGlhdGUgdGhyb3cgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXNjYWxhdGlvbi1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVUaHJvd0V2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBpbnRlcm1lZGlhdGUgY2F0Y2ggZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtaW50ZXJtZWRpYXRlLWNhdGNoJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTGluayBpbnRlcm1lZGlhdGUgY2F0Y2ggZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbGluay1pbnRlcm1lZGlhdGUtY2F0Y2gnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbGluaycsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkxpbmtFdmVudERlZmluaXRpb24nLFxuICAgICAgZXZlbnREZWZpbml0aW9uQXR0cnM6IHtcbiAgICAgICAgbmFtZTogJydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0xpbmsgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWxpbmstaW50ZXJtZWRpYXRlLXRocm93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LXRocm93LWxpbmsnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpMaW5rRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvbkF0dHJzOiB7XG4gICAgICAgIG5hbWU6ICcnXG4gICAgICB9XG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wZW5zYXRpb24gaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNvbXBlbnNhdGlvbi1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctY29tcGVuc2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBpbnRlcm1lZGlhdGUgY2F0Y2ggZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLWludGVybWVkaWF0ZS1jYXRjaCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1zaWduYWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlQ2F0Y2hFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgaW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNpZ25hbC1pbnRlcm1lZGlhdGUtdGhyb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtdGhyb3ctc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkludGVybWVkaWF0ZVRocm93RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfVxuXTtcblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgRU5EX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdTdGFydCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW50ZXJtZWRpYXRlIHRocm93IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbmUtaW50ZXJtZWRpYXRlLXRocm93JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LW5vbmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VuZCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub25lLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1ub25lJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBlbmQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtbWVzc2FnZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBlbmQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXNjYWxhdGlvbi1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXJyb3IgZW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWVycm9yLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1lcnJvcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NhbmNlbCBlbmQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY2FuY2VsLWVuZCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWVuZC1ldmVudC1jYW5jZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RW5kRXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q2FuY2VsRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29tcGVuc2F0aW9uIGVuZCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb21wZW5zYXRpb24tZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LWNvbXBlbnNhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIGVuZCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtZW5kJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZW5kLWV2ZW50LXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpFbmRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpTaWduYWxFdmVudERlZmluaXRpb24nXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdUZXJtaW5hdGUgZW5kIGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRlcm1pbmF0ZS1lbmQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1lbmQtZXZlbnQtdGVybWluYXRlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkVuZEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRlcm1pbmF0ZUV2ZW50RGVmaW5pdGlvbidcbiAgICB9XG4gIH1cbl07XG5cbi8qKlxuICogQHR5cGUge1JlcGxhY2VPcHRpb25bXX1cbiAqL1xudmFyIEdBVEVXQVkgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0V4Y2x1c2l2ZSBnYXRld2F5JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4Y2x1c2l2ZS1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS14b3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RXhjbHVzaXZlR2F0ZXdheSdcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1BhcmFsbGVsIGdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZ2F0ZXdheScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWdhdGV3YXktcGFyYWxsZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46UGFyYWxsZWxHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnSW5jbHVzaXZlIGdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtaW5jbHVzaXZlLWdhdGV3YXknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1nYXRld2F5LW9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkluY2x1c2l2ZUdhdGV3YXknXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wbGV4IGdhdGV3YXknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGxleC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1jb21wbGV4JyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkNvbXBsZXhHYXRld2F5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXZlbnQtYmFzZWQgZ2F0ZXdheScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ldmVudC1iYXNlZC1nYXRld2F5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZ2F0ZXdheS1ldmVudGJhc2VkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkV2ZW50QmFzZWRHYXRld2F5JyxcbiAgICAgIGluc3RhbnRpYXRlOiBmYWxzZSxcbiAgICAgIGV2ZW50R2F0ZXdheVR5cGU6ICdFeGNsdXNpdmUnXG4gICAgfVxuICB9XG5cbiAgLy8gR2F0ZXdheXMgZGVhY3RpdmF0ZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy9pc3N1ZXMvMTk0XG4gIC8vIHtcbiAgLy8gICBsYWJlbDogJ0V2ZW50IGJhc2VkIGluc3RhbnRpYXRpbmcgR2F0ZXdheScsXG4gIC8vICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1leGNsdXNpdmUtZXZlbnQtYmFzZWQtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWV4Y2x1c2l2ZS1ldmVudC1iYXNlZCcsXG4gIC8vICAgdGFyZ2V0OiB7XG4gIC8vICAgICB0eXBlOiAnYnBtbjpFdmVudEJhc2VkR2F0ZXdheSdcbiAgLy8gICB9LFxuICAvLyAgIG9wdGlvbnM6IHtcbiAgLy8gICAgIGJ1c2luZXNzT2JqZWN0OiB7IGluc3RhbnRpYXRlOiB0cnVlLCBldmVudEdhdGV3YXlUeXBlOiAnRXhjbHVzaXZlJyB9XG4gIC8vICAgfVxuICAvLyB9LFxuICAvLyB7XG4gIC8vICAgbGFiZWw6ICdQYXJhbGxlbCBFdmVudCBiYXNlZCBpbnN0YW50aWF0aW5nIEdhdGV3YXknLFxuICAvLyAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcGFyYWxsZWwtZXZlbnQtYmFzZWQtaW5zdGFudGlhdGUtZ2F0ZXdheScsXG4gIC8vICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXBhcmFsbGVsLWV2ZW50LWJhc2VkLWluc3RhbnRpYXRlLWdhdGV3YXknLFxuICAvLyAgIHRhcmdldDoge1xuICAvLyAgICAgdHlwZTogJ2JwbW46RXZlbnRCYXNlZEdhdGV3YXknXG4gIC8vICAgfSxcbiAgLy8gICBvcHRpb25zOiB7XG4gIC8vICAgICBidXNpbmVzc09iamVjdDogeyBpbnN0YW50aWF0ZTogdHJ1ZSwgZXZlbnRHYXRld2F5VHlwZTogJ1BhcmFsbGVsJyB9XG4gIC8vICAgfVxuICAvLyB9XG5dO1xuXG4vKipcbiAqIEB0eXBlIHtSZXBsYWNlT3B0aW9uW119XG4gKi9cbnZhciBTVUJQUk9DRVNTX0VYUEFOREVEID0gW1xuICB7XG4gICAgbGFiZWw6ICdUcmFuc2FjdGlvbicsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC10cmFuc2FjdGlvbicsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXRyYW5zYWN0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlRyYW5zYWN0aW9uJyxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0V2ZW50IHN1Yi1wcm9jZXNzJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV2ZW50LXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1ldmVudC1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgdHJpZ2dlcmVkQnlFdmVudDogdHJ1ZSxcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1N1Yi1wcm9jZXNzIChjb2xsYXBzZWQpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNvbGxhcHNlZC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3VicHJvY2Vzcy1jb2xsYXBzZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXTtcblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgVFJBTlNBQ1RJT04gPSBbXG4gIHtcbiAgICBsYWJlbDogJ1RyYW5zYWN0aW9uJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRyYW5zYWN0aW9uJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdHJhbnNhY3Rpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46VHJhbnNhY3Rpb24nLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViLXByb2Nlc3MnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc3VicHJvY2VzcycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN1YnByb2Nlc3MtZXhwYW5kZWQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3ViUHJvY2VzcycsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFdmVudCBzdWItcHJvY2VzcycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ldmVudC1zdWJwcm9jZXNzJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tZXZlbnQtc3VicHJvY2Vzcy1leHBhbmRlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIHRyaWdnZXJlZEJ5RXZlbnQ6IHRydWUsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9XG5dO1xuXG4vKipcbiAqIEB0eXBlIHtSZXBsYWNlT3B0aW9uW119XG4gKi9cbnZhciBFVkVOVF9TVUJfUFJPQ0VTUyA9IFRSQU5TQUNUSU9OO1xuXG4vKipcbiAqIEB0eXBlIHtSZXBsYWNlT3B0aW9uW119XG4gKi9cbnZhciBUQVNLID0gW1xuICB7XG4gICAgbGFiZWw6ICdUYXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi10YXNrJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdVc2VyIHRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdXNlci10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tdXNlcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpVc2VyVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NlcnZpY2UgdGFzaycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zZXJ2aWNlLXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zZXJ2aWNlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlNlcnZpY2VUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2VuZCB0YXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLXNlbmQtdGFzaycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXNlbmQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2VuZFRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdSZWNlaXZlIHRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcmVjZWl2ZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tcmVjZWl2ZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpSZWNlaXZlVGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01hbnVhbCB0YXNrJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1hbnVhbC10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbWFudWFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOk1hbnVhbFRhc2snXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdCdXNpbmVzcyBydWxlIHRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtcnVsZS10YXNrJyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tYnVzaW5lc3MtcnVsZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCdXNpbmVzc1J1bGVUYXNrJ1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2NyaXB0IHRhc2snLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2NyaXB0LXRhc2snLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zY3JpcHQnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U2NyaXB0VGFzaydcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NhbGwgYWN0aXZpdHknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY2FsbC1hY3Rpdml0eScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNhbGwtYWN0aXZpdHknLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Q2FsbEFjdGl2aXR5J1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU3ViLXByb2Nlc3MgKGNvbGxhcHNlZCknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWNvbGxhcHNlZCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdWJQcm9jZXNzJyxcbiAgICAgIGlzRXhwYW5kZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTdWItcHJvY2VzcyAoZXhwYW5kZWQpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4cGFuZGVkLXN1YnByb2Nlc3MnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdWJwcm9jZXNzLWV4cGFuZGVkJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN1YlByb2Nlc3MnLFxuICAgICAgaXNFeHBhbmRlZDogdHJ1ZVxuICAgIH1cbiAgfVxuXTtcblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgREFUQV9PQkpFQ1RfUkVGRVJFTkNFID0gW1xuICB7XG4gICAgbGFiZWw6ICdEYXRhIHN0b3JlIHJlZmVyZW5jZScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1kYXRhLXN0b3JlLXJlZmVyZW5jZScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWRhdGEtc3RvcmUnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46RGF0YVN0b3JlUmVmZXJlbmNlJ1xuICAgIH1cbiAgfVxuXTtcblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgREFUQV9TVE9SRV9SRUZFUkVOQ0UgPSBbXG4gIHtcbiAgICBsYWJlbDogJ0RhdGEgb2JqZWN0IHJlZmVyZW5jZScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1kYXRhLW9iamVjdC1yZWZlcmVuY2UnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1kYXRhLW9iamVjdCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpEYXRhT2JqZWN0UmVmZXJlbmNlJ1xuICAgIH1cbiAgfVxuXTtcblxuLyoqXG4gKiBAdHlwZSB7UmVwbGFjZU9wdGlvbltdfVxuICovXG52YXIgQk9VTkRBUllfRVZFTlQgPSBbXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgYm91bmRhcnkgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbWVzc2FnZS1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgYm91bmRhcnkgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtdGltZXInLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpUaW1lckV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jb25kaXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXJyb3IgYm91bmRhcnkgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXJyb3ItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtZXJyb3InLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFcnJvckV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ2FuY2VsIGJvdW5kYXJ5IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWNhbmNlbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1jYW5jZWwnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpDYW5jZWxFdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1NpZ25hbCBib3VuZGFyeSBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1zaWduYWwtYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOkJvdW5kYXJ5RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wZW5zYXRpb24gYm91bmRhcnkgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLWNvbXBlbnNhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbXBlbnNhdGVFdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ01lc3NhZ2UgYm91bmRhcnkgZXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctbWVzc2FnZS1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLW1lc3NhZ2UnLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46Qm91bmRhcnlFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpNZXNzYWdlRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgYm91bmRhcnkgZXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctdGltZXItYm91bmRhcnknLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1pbnRlcm1lZGlhdGUtZXZlbnQtY2F0Y2gtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBib3VuZGFyeSBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLWJvdW5kYXJ5JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24taW50ZXJtZWRpYXRlLWV2ZW50LWNhdGNoLW5vbi1pbnRlcnJ1cHRpbmctZXNjYWxhdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkVzY2FsYXRpb25FdmVudERlZmluaXRpb24nLFxuICAgICAgY2FuY2VsQWN0aXZpdHk6IGZhbHNlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBib3VuZGFyeSBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1jb25kaXRpb25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGNhbmNlbEFjdGl2aXR5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIGJvdW5kYXJ5IGV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1ib3VuZGFyeScsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWludGVybWVkaWF0ZS1ldmVudC1jYXRjaC1ub24taW50ZXJydXB0aW5nLXNpZ25hbCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpCb3VuZGFyeUV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlNpZ25hbEV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBjYW5jZWxBY3Rpdml0eTogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbi8qKlxuICogQHR5cGUge1JlcGxhY2VPcHRpb25bXX1cbiAqL1xudmFyIEVWRU5UX1NVQl9QUk9DRVNTX1NUQVJUX0VWRU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdNZXNzYWdlIHN0YXJ0IGV2ZW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW1lc3NhZ2Utc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnVGltZXIgc3RhcnQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtdGltZXItc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb25kaXRpb25hbCBzdGFydCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1jb25kaXRpb25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdTaWduYWwgc3RhcnQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2lnbmFsLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdFcnJvciBzdGFydCBldmVudCcsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1lcnJvci1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWVycm9yJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXJyb3JFdmVudERlZmluaXRpb24nLFxuICAgICAgaXNJbnRlcnJ1cHRpbmc6IHRydWVcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0VzY2FsYXRpb24gc3RhcnQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtZXNjYWxhdGlvbi1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LWVzY2FsYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgdHlwZTogJ2JwbW46U3RhcnRFdmVudCcsXG4gICAgICBldmVudERlZmluaXRpb25UeXBlOiAnYnBtbjpFc2NhbGF0aW9uRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6ICdDb21wZW5zYXRpb24gc3RhcnQgZXZlbnQnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29tcGVuc2F0aW9uLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtY29tcGVuc2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46Q29tcGVuc2F0ZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogdHJ1ZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnTWVzc2FnZSBzdGFydCBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1tZXNzYWdlLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1tZXNzYWdlJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46TWVzc2FnZUV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ1RpbWVyIHN0YXJ0IGV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXRpbWVyLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy10aW1lcicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOlRpbWVyRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnQ29uZGl0aW9uYWwgc3RhcnQgZXZlbnQgKG5vbi1pbnRlcnJ1cHRpbmcpJyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLW5vbi1pbnRlcnJ1cHRpbmctY29uZGl0aW9uYWwtc3RhcnQnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1zdGFydC1ldmVudC1ub24taW50ZXJydXB0aW5nLWNvbmRpdGlvbicsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpTdGFydEV2ZW50JyxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6ICdicG1uOkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnU2lnbmFsIHN0YXJ0IGV2ZW50IChub24taW50ZXJydXB0aW5nKScsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1ub24taW50ZXJydXB0aW5nLXNpZ25hbC1zdGFydCcsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLXN0YXJ0LWV2ZW50LW5vbi1pbnRlcnJ1cHRpbmctc2lnbmFsJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyxcbiAgICAgIGlzSW50ZXJydXB0aW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGxhYmVsOiAnRXNjYWxhdGlvbiBzdGFydCBldmVudCAobm9uLWludGVycnVwdGluZyknLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uLXN0YXJ0JyxcbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tc3RhcnQtZXZlbnQtbm9uLWludGVycnVwdGluZy1lc2NhbGF0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgIHR5cGU6ICdicG1uOlN0YXJ0RXZlbnQnLFxuICAgICAgZXZlbnREZWZpbml0aW9uVHlwZTogJ2JwbW46RXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvbicsXG4gICAgICBpc0ludGVycnVwdGluZzogZmFsc2VcbiAgICB9XG4gIH1cbl07XG5cbi8qKlxuICogQHR5cGUge1JlcGxhY2VPcHRpb25bXX1cbiAqL1xudmFyIFNFUVVFTkNFX0ZMT1cgPSBbXG4gIHtcbiAgICBsYWJlbDogJ1NlcXVlbmNlIGZsb3cnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtc2VxdWVuY2UtZmxvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNvbm5lY3Rpb24nXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0RlZmF1bHQgZmxvdycsXG4gICAgYWN0aW9uTmFtZTogJ3JlcGxhY2Utd2l0aC1kZWZhdWx0LWZsb3cnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1kZWZhdWx0LWZsb3cnXG4gIH0sXG4gIHtcbiAgICBsYWJlbDogJ0NvbmRpdGlvbmFsIGZsb3cnLFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29uZGl0aW9uYWwtZmxvdycsXG4gICAgY2xhc3NOYW1lOiAnYnBtbi1pY29uLWNvbmRpdGlvbmFsLWZsb3cnXG4gIH1cbl07XG5cbi8qKlxuICogQHR5cGUge1JlcGxhY2VPcHRpb25bXX1cbiAqL1xudmFyIFBBUlRJQ0lQQU5UID0gW1xuICB7XG4gICAgbGFiZWw6ICdFeHBhbmRlZCBwb29sL3BhcnRpY2lwYW50JyxcbiAgICBhY3Rpb25OYW1lOiAncmVwbGFjZS13aXRoLWV4cGFuZGVkLXBvb2wnLFxuICAgIGNsYXNzTmFtZTogJ2JwbW4taWNvbi1wYXJ0aWNpcGFudCcsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgbGFiZWw6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBsYWJlbCA9ICdFbXB0eSBwb29sL3BhcnRpY2lwYW50JztcblxuICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgbGFiZWwgKz0gJyAocmVtb3ZlcyBjb250ZW50KSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9LFxuICAgIGFjdGlvbk5hbWU6ICdyZXBsYWNlLXdpdGgtY29sbGFwc2VkLXBvb2wnLFxuXG4gICAgLy8gVE9ETyhAamFuc3R1ZW1tZWwpOiBtYXliZSBkZXNpZ24gbmV3IGljb25cbiAgICBjbGFzc05hbWU6ICdicG1uLWljb24tbGFuZScsXG4gICAgdGFyZ2V0OiB7XG4gICAgICB0eXBlOiAnYnBtbjpQYXJ0aWNpcGFudCcsXG4gICAgICBpc0V4cGFuZGVkOiBmYWxzZVxuICAgIH1cbiAgfVxuXTtcblxudmFyIHJlcGxhY2VPcHRpb25zID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEJPVU5EQVJZX0VWRU5UOiBCT1VOREFSWV9FVkVOVCxcbiAgREFUQV9PQkpFQ1RfUkVGRVJFTkNFOiBEQVRBX09CSkVDVF9SRUZFUkVOQ0UsXG4gIERBVEFfU1RPUkVfUkVGRVJFTkNFOiBEQVRBX1NUT1JFX1JFRkVSRU5DRSxcbiAgRU5EX0VWRU5UOiBFTkRfRVZFTlQsXG4gIEVWRU5UX1NVQl9QUk9DRVNTOiBFVkVOVF9TVUJfUFJPQ0VTUyxcbiAgRVZFTlRfU1VCX1BST0NFU1NfU1RBUlRfRVZFTlQ6IEVWRU5UX1NVQl9QUk9DRVNTX1NUQVJUX0VWRU5ULFxuICBHQVRFV0FZOiBHQVRFV0FZLFxuICBJTlRFUk1FRElBVEVfRVZFTlQ6IElOVEVSTUVESUFURV9FVkVOVCxcbiAgUEFSVElDSVBBTlQ6IFBBUlRJQ0lQQU5ULFxuICBTRVFVRU5DRV9GTE9XOiBTRVFVRU5DRV9GTE9XLFxuICBTVEFSVF9FVkVOVDogU1RBUlRfRVZFTlQsXG4gIFNUQVJUX0VWRU5UX1NVQl9QUk9DRVNTOiBTVEFSVF9FVkVOVF9TVUJfUFJPQ0VTUyxcbiAgU1VCUFJPQ0VTU19FWFBBTkRFRDogU1VCUFJPQ0VTU19FWFBBTkRFRCxcbiAgVEFTSzogVEFTSyxcbiAgVFJBTlNBQ1RJT046IFRSQU5TQUNUSU9OXG59KTtcblxuY29uc3QgQUxMX09QVElPTlMgPSBPYmplY3QudmFsdWVzKHJlcGxhY2VPcHRpb25zKTtcblxuZnVuY3Rpb24gZ2V0UmVwbGFjZU9wdGlvbkdyb3VwcygpIHtcbiAgcmV0dXJuIEFMTF9PUFRJT05TO1xufVxuXG4vKipcbiAqIEEgcmVwbGFjZSBtZW51IHByb3ZpZGVyIHRoYXQgYWxsb3dzIHRvIHJlcGxhY2UgZWxlbWVudHMgd2l0aFxuICogdGVtcGxhdGVzIGFwcGxpZWQgd2l0aCB0aGUgY29ycmVzcG9uZGVudCBwbGFpbiBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBSZW1vdmVUZW1wbGF0ZVJlcGxhY2VQcm92aWRlcihwb3B1cE1lbnUsIHRyYW5zbGF0ZSwgZWxlbWVudFRlbXBsYXRlcykge1xuXG4gIHRoaXMuX3BvcHVwTWVudSA9IHBvcHVwTWVudTtcbiAgdGhpcy5fdHJhbnNsYXRlID0gdHJhbnNsYXRlO1xuICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcblxuICB0aGlzLnJlZ2lzdGVyKCk7XG59XG5cblJlbW92ZVRlbXBsYXRlUmVwbGFjZVByb3ZpZGVyLiRpbmplY3QgPSBbXG4gICdwb3B1cE1lbnUnLFxuICAndHJhbnNsYXRlJyxcbiAgJ2VsZW1lbnRUZW1wbGF0ZXMnXG5dO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHJlcGxhY2UgbWVudSBwcm92aWRlciBpbiB0aGUgcG9wdXAgbWVudVxuICovXG5SZW1vdmVUZW1wbGF0ZVJlcGxhY2VQcm92aWRlci5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcG9wdXBNZW51LnJlZ2lzdGVyUHJvdmlkZXIoJ2JwbW4tcmVwbGFjZScsIHRoaXMpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBlbGVtZW50IHRlbXBsYXRlcyB0byB0aGUgcmVwbGFjZSBtZW51LlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblJlbW92ZVRlbXBsYXRlUmVwbGFjZVByb3ZpZGVyLnByb3RvdHlwZS5nZXRQb3B1cE1lbnVFbnRyaWVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gIHJldHVybiAoZW50cmllcykgPT4ge1xuXG4gICAgLy8gY29udmVydCBvdXIgZW50cmllcyBpbnRvIHNvbWV0aGluZyBzb3J0YWJsZVxuICAgIGxldCBlbnRyeVNldCA9IE9iamVjdC5lbnRyaWVzKGVudHJpZXMpO1xuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMgJiYgdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCkpIHtcblxuICAgICAgLy8gYWRkIHJlbW92ZSB0ZW1wbGF0ZSBvcHRpb25cbiAgICAgIHRoaXMuYWRkUGxhaW5FbGVtZW50RW50cnkoZWxlbWVudCwgZW50cnlTZXQsIHRoaXMuX3RyYW5zbGF0ZSwgdGhpcy5fZWxlbWVudFRlbXBsYXRlcyk7XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBiYWNrIHRvIG9iamVjdFxuICAgIHJldHVybiBlbnRyeVNldC5yZWR1Y2UoKGVudHJpZXMsIFsga2V5LCB2YWx1ZSBdKSA9PiB7XG4gICAgICBlbnRyaWVzW2tleV0gPSB2YWx1ZTtcblxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfSwge30pO1xuICB9O1xufTtcblxuXG4vKipcbiAqIEFkZHMgdGhlIG9wdGlvbiB0byByZXBsYWNlIHdpdGggcGxhaW4gZWxlbWVudCAocmVtb3ZlIHRlbXBsYXRlKS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGVudHJpZXNcbiAqL1xuUmVtb3ZlVGVtcGxhdGVSZXBsYWNlUHJvdmlkZXIucHJvdG90eXBlLmFkZFBsYWluRWxlbWVudEVudHJ5ID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cmllcywgdHJhbnNsYXRlLCBlbGVtZW50VGVtcGxhdGVzKSB7XG5cbiAgY29uc3QgcmVwbGFjZU9wdGlvbiA9IHRoaXMuZ2V0UGxhaW5FbnRyeShlbGVtZW50LCBlbnRyaWVzLCB0cmFuc2xhdGUsIGVsZW1lbnRUZW1wbGF0ZXMpO1xuXG4gIGlmICghcmVwbGFjZU9wdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFtcbiAgICBpbnNlcnRJbmRleCxcbiAgICBlbnRyeVxuICBdID0gcmVwbGFjZU9wdGlvbjtcblxuICAvLyBpbnNlcnQgcmVtb3ZlIGVudHJ5XG4gIGVudHJpZXMuc3BsaWNlKGluc2VydEluZGV4LCAwLCBbIGVudHJ5LmlkLCBlbnRyeSBdKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3B0aW9uIHRvIHJlcGxhY2Ugd2l0aCBwbGFpbiBlbGVtZW50IGFuZCB0aGUgaW5kZXggd2hlcmUgaXQgc2hvdWxkIGJlIGluc2VydGVkLlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZW50cmllc1xuICpcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3QsIG51bWJlcj59XG4gKi9cblJlbW92ZVRlbXBsYXRlUmVwbGFjZVByb3ZpZGVyLnByb3RvdHlwZS5nZXRQbGFpbkVudHJ5ID0gZnVuY3Rpb24oZWxlbWVudCwgZW50cmllcywgdHJhbnNsYXRlLCBlbGVtZW50VGVtcGxhdGVzKSB7XG5cbiAgY29uc3Qge1xuICAgIG9wdGlvbnMsXG4gICAgb3B0aW9uLFxuICAgIG9wdGlvbkluZGV4XG4gIH0gPSBmaW5kUmVwbGFjZU9wdGlvbnMoZWxlbWVudCkgfHwgeyB9O1xuXG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZW50cnkgPSB7XG4gICAgaWQ6ICdyZXBsYWNlLXJlbW92ZS1lbGVtZW50LXRlbXBsYXRlJyxcbiAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZXMucmVtb3ZlVGVtcGxhdGUoZWxlbWVudCk7XG4gICAgfSxcbiAgICBsYWJlbDogdHJhbnNsYXRlKG9wdGlvbi5sYWJlbCksXG4gICAgY2xhc3NOYW1lOiBvcHRpb24uY2xhc3NOYW1lXG4gIH07XG5cbiAgLy8gaW5zZXJ0IGFmdGVyIHByZXZpb3VzIG9wdGlvbiwgaWYgaXQgZXhpc3RzXG4gIGNvbnN0IHByZXZpb3VzSW5kZXggPSBnZXRPcHRpb25JbmRleChvcHRpb25zLCBvcHRpb25JbmRleCAtIDEsIGVudHJpZXMpO1xuXG4gIGlmIChwcmV2aW91c0luZGV4KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByZXZpb3VzSW5kZXggKyAxLFxuICAgICAgZW50cnlcbiAgICBdO1xuICB9XG5cbiAgLy8gaW5zZXJ0IGJlZm9yZSBuZXh0IG9wdGlvbiwgaWYgaXQgZXhpc3RzXG4gIGNvbnN0IG5leHRJbmRleCA9IGdldE9wdGlvbkluZGV4KG9wdGlvbnMsIG9wdGlvbkluZGV4ICsgMSwgZW50cmllcyk7XG5cbiAgaWYgKG5leHRJbmRleCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXh0SW5kZXgsXG4gICAgICBlbnRyeVxuICAgIF07XG4gIH1cblxuICAvLyBmYWxsYmFjayB0byBpbnNlcnQgYXQgc3RhcnRcbiAgcmV0dXJuIFtcbiAgICAwLFxuICAgIGVudHJ5XG4gIF07XG59O1xuXG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7IHsgb3B0aW9uczogQXJyYXk8YW55Piwgb3B0aW9uOiBhbnksIG9wdGlvbkluZGV4OiBudW1iZXIgfSB8IG51bGwgfVxuICovXG5mdW5jdGlvbiBmaW5kUmVwbGFjZU9wdGlvbnMoZWxlbWVudCkge1xuXG4gIGNvbnN0IGlzU2FtZVR5cGUgPSAoZWxlbWVudCwgb3B0aW9uKSA9PiBvcHRpb24udGFyZ2V0ICYmICFpc0RpZmZlcmVudFR5cGUoZWxlbWVudCkob3B0aW9uKTtcblxuICByZXR1cm4gZ2V0UmVwbGFjZU9wdGlvbkdyb3VwcygpLnJlZHVjZSgocmVzdWx0LCBvcHRpb25zKSA9PiB7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IGlzU2FtZVR5cGUoZWxlbWVudCwgb3B0aW9uKSk7XG5cbiAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvcHRpb246IG9wdGlvbnNbb3B0aW9uSW5kZXhdLFxuICAgICAgb3B0aW9uSW5kZXhcbiAgICB9O1xuICB9LCBudWxsKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9uSW5kZXgob3B0aW9ucywgaW5kZXgsIGVudHJpZXMpIHtcbiAgY29uc3Qgb3B0aW9uID0gb3B0aW9uc1tpbmRleF07XG5cbiAgaWYgKCFvcHRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZW50cmllcy5maW5kSW5kZXgoXG4gICAgKFsga2V5IF0pID0+IGtleSA9PT0gb3B0aW9uLmFjdGlvbk5hbWVcbiAgKTtcbn1cblxudmFyIFJlbW92ZVRlbXBsYXRlc01vZHVsZSA9IHtcbiAgX19pbml0X186IFsgJ3JlbW92ZVRlbXBsYXRlUmVwbGFjZVByb3ZpZGVyJyBdLFxuICByZW1vdmVUZW1wbGF0ZVJlcGxhY2VQcm92aWRlcjogWyAndHlwZScsIFJlbW92ZVRlbXBsYXRlUmVwbGFjZVByb3ZpZGVyIF1cbn07XG5cbnZhciBpbmRleCA9IHtcbiAgX19kZXBlbmRzX186IFtcbiAgICBBcHBlbmRFbGVtZW50VGVtcGxhdGVzTW9kdWxlLFxuICAgIENyZWF0ZUVsZW1lbnRUZW1wbGF0ZXNNb2R1bGUsXG4gICAgUmVwbGFjZUVsZW1lbnRUZW1wbGF0ZXNNb2R1bGUsXG4gICAgUmVtb3ZlVGVtcGxhdGVzTW9kdWxlXG4gIF1cbn07XG5cbmV4cG9ydCB7IGluZGV4JDEgYXMgQ3JlYXRlQXBwZW5kQW55dGhpbmdNb2R1bGUsIGluZGV4IGFzIENyZWF0ZUFwcGVuZEVsZW1lbnRUZW1wbGF0ZXNNb2R1bGUsIFJlbW92ZVRlbXBsYXRlc01vZHVsZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-create-append-anything/dist/index.es.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-element-templates/dist/index.esm.js":
-/*!******************************************************************!*\
- !*** ./node_modules/bpmn-js-element-templates/dist/index.esm.js ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CloudElementTemplatesCoreModule: () => (/* binding */ coreModule$1),\n/* harmony export */ CloudElementTemplatesLinterPlugin: () => (/* binding */ ElementTemplateLinterPlugin),\n/* harmony export */ CloudElementTemplatesPropertiesProviderModule: () => (/* binding */ index$1),\n/* harmony export */ CloudElementTemplatesValidator: () => (/* binding */ Validator),\n/* harmony export */ ElementTemplatesCoreModule: () => (/* binding */ coreModule),\n/* harmony export */ ElementTemplatesPropertiesProviderModule: () => (/* binding */ index)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! uuid */ \"./node_modules/uuid/dist/esm-browser/v4.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var semver_compare__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! semver-compare */ \"./node_modules/semver-compare/index.js\");\n/* harmony import */ var semver_compare__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(semver_compare__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _bpmn_io_element_templates_validator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @bpmn-io/element-templates-validator */ \"./node_modules/@bpmn-io/element-templates-validator/dist/index.js\");\n/* harmony import */ var ids__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ids */ \"./node_modules/ids/dist/index.esm.js\");\n/* harmony import */ var bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! bpmn-js/lib/features/label-editing/LabelUtil */ \"./node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var bpmn_js_lib_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! bpmn-js/lib/util/DrilldownUtil */ \"./node_modules/bpmn-js/lib/util/DrilldownUtil.js\");\n/* harmony import */ var bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! bpmn-js/lib/util/DiUtil */ \"./node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! diagram-js/lib/command/CommandInterceptor */ \"./node_modules/diagram-js/lib/command/CommandInterceptor.js\");\n/* harmony import */ var diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! diagram-js/lib/i18n/translate */ \"./node_modules/diagram-js/lib/i18n/translate/index.js\");\n/* harmony import */ var _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @bpmn-io/properties-panel */ \"./node_modules/@bpmn-io/properties-panel/dist/index.esm.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! bpmn-js-properties-panel */ \"./node_modules/bpmn-js-properties-panel/dist/index.esm.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/jsx-runtime */ \"./node_modules/@bpmn-io/properties-panel/preact/jsx-runtime/dist/jsxRuntime.module.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/hooks */ \"./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js\");\n/* harmony import */ var _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @bpmn-io/extract-process-variables/zeebe */ \"./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js\");\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var bpmnlint_lib_resolver_static_resolver__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! bpmnlint/lib/resolver/static-resolver */ \"./node_modules/bpmnlint/lib/resolver/static-resolver.js\");\n/* harmony import */ var bpmnlint_lib_resolver_static_resolver__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(bpmnlint_lib_resolver_static_resolver__WEBPACK_IMPORTED_MODULE_10__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The BPMN 2.0 extension attribute name under\n * which the element template ID is stored.\n *\n * @type {String}\n */\nconst TEMPLATE_ID_ATTR$1 = 'zeebe:modelerTemplate';\n\n/**\n * The BPMN 2.0 extension attribute name under\n * which the element template version is stored.\n *\n * @type {String}\n */\nconst TEMPLATE_VERSION_ATTR$1 = 'zeebe:modelerTemplateVersion';\n\n/**\n * The BPMN 2.0 extension attribute name under\n * which the element template icon is stored.\n *\n * @type {String}\n */\nconst TEMPLATE_ICON_ATTR = 'zeebe:modelerTemplateIcon';\n\n/**\n * Get template id for a given diagram element.\n *\n * @param {djs.model.Base} element\n *\n * @return {String}\n */\nfunction getTemplateId$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if (businessObject) {\n return businessObject.get(TEMPLATE_ID_ATTR$1);\n }\n}\n\n/**\n * Get template version for a given diagram element.\n *\n * @param {djs.model.Base} element\n *\n * @return {String}\n */\nfunction getTemplateVersion$1(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if (businessObject) {\n return businessObject.get(TEMPLATE_VERSION_ATTR$1);\n }\n}\n\n/**\n * Get template icon for a given diagram element.\n *\n * @param {djs.model.Base} element\n *\n * @return {String}\n */\nfunction getTemplateIcon(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if (businessObject) {\n return businessObject.get(TEMPLATE_ICON_ATTR);\n }\n}\n\n/**\n * Find extension with given type in\n * BPMN element, diagram element or ExtensionElement.\n *\n * @param {ModdleElement|djs.model.Base} element\n * @param {String} type\n *\n * @return {ModdleElement} the extension\n */\nfunction findExtension$1(element, type) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n let extensionElements;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:ExtensionElements')) {\n extensionElements = businessObject;\n } else {\n extensionElements = businessObject.get('extensionElements');\n }\n if (!extensionElements) {\n return;\n }\n return extensionElements.get('values').find(value => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(value, type);\n });\n}\nfunction findZeebeProperty(zeebeProperties, binding) {\n return zeebeProperties.get('properties').find(value => {\n return value.name === binding.name;\n });\n}\nfunction findInputParameter$1(ioMapping, binding) {\n const parameters = ioMapping.get('inputParameters');\n return parameters.find(parameter => {\n return parameter.target === binding.name;\n });\n}\nfunction findOutputParameter$1(ioMapping, binding) {\n const parameters = ioMapping.get('outputParameters');\n return parameters.find(parameter => {\n return parameter.source === binding.source;\n });\n}\nfunction findTaskHeader(taskHeaders, binding) {\n const headers = taskHeaders.get('values');\n return headers.find(header => {\n return header.key === binding.key;\n });\n}\nfunction findMessage(businessObject) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:Event')) {\n const eventDefinitions = businessObject.get('eventDefinitions');\n if (!eventDefinitions || !eventDefinitions.length) {\n return;\n }\n businessObject = eventDefinitions[0];\n }\n if (!businessObject) {\n return;\n }\n return businessObject.get('messageRef');\n}\nfunction getDefaultValue(property) {\n if (property.value !== undefined) {\n return property.value;\n }\n if (property.generatedValue) {\n const {\n type\n } = property.generatedValue;\n if (type === 'uuid') {\n return (0,uuid__WEBPACK_IMPORTED_MODULE_12__[\"default\"])();\n }\n }\n}\n\n/**\n * The BPMN 2.0 extension attribute name under\n * which the element template ID is stored.\n *\n * @type {String}\n */\nconst TEMPLATE_ID_ATTR = 'camunda:modelerTemplate';\n\n/**\n * The BPMN 2.0 extension attribute name under\n * which the element template version is stored.\n *\n * @type {String}\n */\nconst TEMPLATE_VERSION_ATTR = 'camunda:modelerTemplateVersion';\n\n/**\n * Get template id for a given diagram element.\n *\n * @param {djs.model.Base} element\n *\n * @return {String}\n */\nfunction getTemplateId(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if (businessObject) {\n return businessObject.get(TEMPLATE_ID_ATTR);\n }\n}\n\n/**\n * Get template version for a given diagram element.\n *\n * @param {djs.model.Base} element\n *\n * @return {String}\n */\nfunction getTemplateVersion(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if (businessObject) {\n return businessObject.get(TEMPLATE_VERSION_ATTR);\n }\n}\n\n/**\n * Find extension with given type in\n * BPMN element, diagram element or ExtensionElement.\n *\n * @param {ModdleElement|djs.model.Base} element\n * @param {String} type\n *\n * @return {ModdleElement} the extension\n */\nfunction findExtension(element, type) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n let extensionElements;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:ExtensionElements')) {\n extensionElements = businessObject;\n } else {\n extensionElements = businessObject.get('extensionElements');\n }\n if (!extensionElements) {\n return null;\n }\n return extensionElements.get('values').find(value => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(value, type);\n });\n}\nfunction findExtensions(element, types) {\n const extensionElements = getExtensionElements(element);\n if (!extensionElements) {\n return [];\n }\n return extensionElements.get('values').filter(value => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(value, types);\n });\n}\nfunction findCamundaInOut(element, binding) {\n const extensionElements = getExtensionElements(element);\n if (!extensionElements) {\n return;\n }\n const {\n type\n } = binding;\n let matcher;\n if (type === 'camunda:in') {\n matcher = element => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'camunda:In') && isInOut(element, binding);\n };\n } else if (type === 'camunda:out') {\n matcher = element => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'camunda:Out') && isInOut(element, binding);\n };\n } else if (type === 'camunda:in:businessKey') {\n matcher = element => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'camunda:In') && 'businessKey' in element;\n };\n }\n return extensionElements.get('values').find(matcher);\n}\nfunction findCamundaProperty(camundaProperties, binding) {\n return camundaProperties.get('values').find(value => {\n return value.name === binding.name;\n });\n}\nfunction findInputParameter(inputOutput, binding) {\n const parameters = inputOutput.get('inputParameters');\n return parameters.find(parameter => {\n return parameter.name === binding.name;\n });\n}\nfunction findOutputParameter(inputOutput, binding) {\n const parameters = inputOutput.get('outputParameters');\n return parameters.find(function (parameter) {\n const {\n value\n } = parameter;\n if (!binding.scriptFormat) {\n return value === binding.source;\n }\n const definition = parameter.get('camunda:definition');\n if (!definition || binding.scriptFormat !== definition.get('camunda:scriptFormat')) {\n return false;\n }\n return definition.get('camunda:value') === binding.source;\n });\n}\nfunction findCamundaErrorEventDefinition(element, errorRef) {\n const errorEventDefinitions = findExtensions(element, ['camunda:ErrorEventDefinition']);\n let error;\n\n // error ID has to start with \n return errorEventDefinitions.find(definition => {\n error = definition.get('bpmn:errorRef');\n if (error) {\n return error.get('bpmn:id').startsWith(`Error_${errorRef}`);\n }\n });\n}\n\n// helpers //////////\n\nfunction getExtensionElements(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:ExtensionElements')) {\n return businessObject;\n } else {\n return businessObject.get('extensionElements');\n }\n}\nfunction isInOut(element, binding) {\n if (binding.type === 'camunda:in') {\n // find based on target attribute\n if (binding.target) {\n return element.target === binding.target;\n }\n }\n if (binding.type === 'camunda:out') {\n // find based on source / sourceExpression\n if (binding.source) {\n return element.source === binding.source;\n }\n if (binding.sourceExpression) {\n return element.sourceExpression === binding.sourceExpression;\n }\n }\n\n // find based variables / local combination\n if (binding.variables) {\n return element.variables === 'all' && (binding.variables !== 'local' || element.local);\n }\n}\n\n/**\n * Registry for element templates.\n */\nlet ElementTemplates$1 = class ElementTemplates {\n constructor(commandStack, eventBus, modeling, injector) {\n this._commandStack = commandStack;\n this._eventBus = eventBus;\n this._injector = injector;\n this._modeling = modeling;\n this._templates = {};\n }\n\n /**\n * Get template with given ID and optional version or for element.\n *\n * @param {String|djs.model.Base} id\n * @param {number} [version]\n *\n * @return {ElementTemplate}\n */\n get(id, version) {\n const templates = this._templates;\n let element;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(id)) {\n return null;\n } else if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(id)) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(version)) {\n version = '_';\n }\n if (templates[id] && templates[id][version]) {\n return templates[id][version];\n } else {\n return null;\n }\n } else {\n element = id;\n return this.get(this._getTemplateId(element), this._getTemplateVersion(element));\n }\n }\n\n /**\n * Get default template for given element.\n *\n * @param {djs.model.Base} element\n *\n * @return {ElementTemplate}\n */\n getDefault(element) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(this.getAll(element), function (template) {\n return template.isDefault;\n }) || null;\n }\n\n /**\n * Get all templates (with given ID or applicable to element).\n *\n * @param {string|djs.model.Base} [id]\n * @return {Array}\n */\n getAll(id) {\n return this._getTemplateVerions(id, {\n includeDeprecated: true\n });\n }\n\n /**\n * Get all templates (with given ID or applicable to element) with the latest\n * version.\n *\n * @param {String|djs.model.Base} [id]\n * @param {{ deprecated?: boolean }} [options]\n *\n * @return {Array}\n */\n getLatest(id, options = {}) {\n return this._getTemplateVerions(id, {\n ...options,\n latest: true\n });\n }\n\n /**\n * Set templates.\n *\n * @param {Array} templates\n */\n set(templates) {\n this._templates = {};\n templates.forEach(template => {\n const id = template.id,\n version = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(template.version) ? '_' : template.version;\n if (!this._templates[id]) {\n this._templates[id] = {\n latest: template\n };\n }\n this._templates[id][version] = template;\n const latestVerions = this._templates[id].latest.version;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(latestVerions) || template.version > latestVerions) {\n this._templates[id].latest = template;\n }\n });\n }\n\n /**\n * @param {object|string|null} id\n * @param { { latest?: boolean, deprecated?: boolean } [options]\n *\n * @return {Array}\n */\n _getTemplateVerions(id, options = {}) {\n const {\n latest: latestOnly,\n deprecated: includeDeprecated\n } = options;\n const templates = this._templates;\n const getVersions = template => {\n const {\n latest,\n ...versions\n } = template;\n return latestOnly ? !includeDeprecated && latest.deprecated ? [] : [latest] : (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.values)(versions);\n };\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isNil)(id)) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.flatten)((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.values)(templates).map(getVersions));\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(id)) {\n const element = id;\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(this._getTemplateVerions(null, options), function (template) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(element, template.appliesTo);\n }) || [];\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(id)) {\n return templates[id] && getVersions(templates[id]);\n }\n throw new Error('argument must be of type {string|djs.model.Base|undefined}');\n }\n _getTemplateId(element) {\n return getTemplateId(element);\n }\n _getTemplateVersion(element) {\n return getTemplateVersion(element);\n }\n\n /**\n * Apply element template to a given element.\n *\n * @param {djs.model.Base} element\n * @param {ElementTemplate} newTemplate\n *\n * @return {djs.model.Base} the updated element\n */\n applyTemplate(element, newTemplate) {\n let action = 'apply';\n let payload = {\n element,\n newTemplate\n };\n const oldTemplate = this.get(element);\n if (oldTemplate && !newTemplate) {\n action = 'unlink';\n payload = {\n element\n };\n }\n if (newTemplate && oldTemplate && newTemplate.id === oldTemplate.id) {\n action = 'update';\n }\n const context = {\n element,\n newTemplate,\n oldTemplate\n };\n this._commandStack.execute('propertiesPanel.camunda.changeTemplate', context);\n this._eventBus.fire(`elementTemplates.${action}`, payload);\n return context.element;\n }\n\n /**\n * Remove template from a given element.\n *\n * @param {djs.model.Base} element\n *\n * @return {djs.model.Base} the updated element\n */\n removeTemplate(element) {\n const eventBus = this._injector.get('eventBus');\n eventBus.fire('elementTemplates.remove', {\n element\n });\n const context = {\n element\n };\n this._commandStack.execute('propertiesPanel.removeTemplate', context);\n return context.newElement;\n }\n\n /**\n * Unlink template from a given element.\n *\n * @param {djs.model.Base} element\n *\n * @return {djs.model.Base} the updated element\n */\n unlinkTemplate(element) {\n return this.applyTemplate(element, null);\n }\n};\nElementTemplates$1.$inject = ['commandStack', 'eventBus', 'modeling', 'injector'];\n\n/**\n * Registry for element templates.\n */\nclass ElementTemplates extends ElementTemplates$1 {\n constructor(templateElementFactory, commandStack, eventBus, modeling, injector) {\n super(commandStack, eventBus, modeling, injector);\n this._templateElementFactory = templateElementFactory;\n }\n _getTemplateId(element) {\n return getTemplateId$1(element);\n }\n _getTemplateVersion(element) {\n return getTemplateVersion$1(element);\n }\n\n /**\n * Create an element based on an element template.\n *\n * @param {ElementTemplate} template\n * @returns {djs.model.Base}\n */\n createElement(template) {\n if (!template) {\n throw new Error('template is missing');\n }\n const element = this._templateElementFactory.create(template);\n return element;\n }\n\n /**\n * Apply element template to a given element.\n *\n * @param {djs.model.Base} element\n * @param {ElementTemplate} newTemplate\n *\n * @return {djs.model.Base} the updated element\n */\n applyTemplate(element, newTemplate) {\n let action = 'apply';\n let payload = {\n element,\n newTemplate\n };\n const oldTemplate = this.get(element);\n if (oldTemplate && !newTemplate) {\n action = 'unlink';\n payload = {\n element\n };\n }\n if (newTemplate && oldTemplate && newTemplate.id === oldTemplate.id) {\n action = 'update';\n }\n const context = {\n element,\n newTemplate,\n oldTemplate\n };\n this._commandStack.execute('propertiesPanel.zeebe.changeTemplate', context);\n this._eventBus.fire(`elementTemplates.${action}`, payload);\n return context.element;\n }\n}\nElementTemplates.$inject = ['templateElementFactory', 'commandStack', 'eventBus', 'modeling', 'injector'];\n\nconst SUPPORTED_SCHEMA_VERSION$1 = (0,_bpmn_io_element_templates_validator__WEBPACK_IMPORTED_MODULE_1__.getSchemaVersion)();\nconst MORPHABLE_TYPES = ['bpmn:Activity', 'bpmn:Event', 'bpmn:Gateway'];\n\n/**\n * A element template validator.\n */\nlet Validator$1 = class Validator {\n constructor(moddle) {\n this._templatesById = {};\n this._validTemplates = [];\n this._errors = [];\n this._moddle = moddle;\n }\n\n /**\n * Adds the templates.\n *\n * @param {Array} templates\n *\n * @return {Validator}\n */\n addAll(templates) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isArray)(templates)) {\n this._logError('templates must be []');\n } else {\n templates.forEach(this.add, this);\n }\n return this;\n }\n\n /**\n * Add the given element template, if it is valid.\n *\n * @param {TemplateDescriptor} template\n *\n * @return {Validator}\n */\n add(template) {\n const err = this._validateTemplate(template);\n let id, version;\n if (!err) {\n id = template.id;\n version = template.version || '_';\n if (!this._templatesById[id]) {\n this._templatesById[id] = {};\n }\n this._templatesById[id][version] = template;\n this._validTemplates.push(template);\n }\n return this;\n }\n\n /**\n * Validate given template and return error (if any).\n *\n * @param {TemplateDescriptor} template\n *\n * @return {Error} validation error, if any\n */\n _validateTemplate(template) {\n let err;\n const id = template.id,\n version = template.version || '_',\n schemaVersion = template.$schema && getSchemaVersion(template.$schema);\n\n // (1) compatibility\n if (schemaVersion && semver_compare__WEBPACK_IMPORTED_MODULE_0___default()(SUPPORTED_SCHEMA_VERSION$1, schemaVersion) < 0) {\n return this._logError(`unsupported element template schema version <${schemaVersion}>. Your installation only supports up to version <${SUPPORTED_SCHEMA_VERSION$1}>. Please update your installation`, template);\n }\n\n // (2) versioning\n if (this._templatesById[id] && this._templatesById[id][version]) {\n if (version === '_') {\n return this._logError(`template id <${id}> already used`, template);\n } else {\n return this._logError(`template id <${id}> and version <${version}> already used`, template);\n }\n }\n\n // (3) elementType validation\n const elementTypeError = this._validateElementType(template);\n if (elementTypeError) {\n return elementTypeError;\n }\n\n // (4) JSON schema compliance\n const validationResult = (0,_bpmn_io_element_templates_validator__WEBPACK_IMPORTED_MODULE_1__.validate)(template);\n const {\n errors,\n valid\n } = validationResult;\n if (!valid) {\n err = new Error('invalid template');\n filteredSchemaErrors(errors).forEach(error => {\n this._logError(error.message, template);\n });\n }\n return err;\n }\n\n /**\n * Validate elementType for given template and return error (if any).\n *\n * @param {TemplateDescriptor} template\n *\n * @return {Error} validation error, if any\n */\n _validateElementType(template) {\n if (template.elementType && template.appliesTo) {\n const elementType = template.elementType.value,\n appliesTo = template.appliesTo;\n\n // (3.1) template can be applied to elementType\n // prevents cases where the elementType is not part of appliesTo\n if (!appliesTo.find(type => this._isType(elementType, type))) {\n return this._logError(`template does not apply to requested element type <${elementType}>`, template);\n }\n\n // (3.2) template only applies to same type of element\n // prevent elementTemplates to morph into incompatible types, e.g. Task -> SequenceFlow\n for (const sourceType of appliesTo) {\n if (!this._canMorph(sourceType, elementType)) {\n return this._logError(`can not morph <${sourceType}> into <${elementType}>`, template);\n }\n }\n }\n }\n\n /**\n * Check if given type is a subtype of given base type.\n *\n * @param {String} type\n * @param {String} baseType\n * @returns {Boolean}\n */\n _isType(type, baseType) {\n const moddleType = this._moddle.getType(type);\n return moddleType && baseType in this._moddle.getElementDescriptor(moddleType).allTypesByName;\n }\n\n /**\n * Checks if a given type can be morphed into another type.\n *\n * @param {String} sourceType\n * @param {String} targetType\n * @returns {Boolean}\n */\n _canMorph(sourceType, targetType) {\n if (sourceType === targetType) {\n return true;\n }\n const baseType = MORPHABLE_TYPES.find(type => this._isType(sourceType, type));\n if (!baseType) {\n return false;\n }\n return this._isType(targetType, baseType);\n }\n\n /**\n * Log an error for the given template\n *\n * @param {(String|Error)} err\n * @param {TemplateDescriptor} template\n *\n * @return {Error} logged validation errors\n */\n _logError(err, template) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(err)) {\n if (template) {\n const {\n id,\n name\n } = template;\n err = `template(id: <${id}>, name: <${name}>): ${err}`;\n }\n err = new Error(err);\n }\n this._errors.push(err);\n return err;\n }\n getErrors() {\n return this._errors;\n }\n getValidTemplates() {\n return this._validTemplates;\n }\n};\n\n// helpers //////////\n\n/**\n * Extract schema version from schema URI\n *\n * @param {String} schemaUri - for example https://unpkg.com/@camunda/element-templates-json-schema@99.99.99/resources/schema.json\n *\n * @return {String} for example '99.99.99'\n */\nfunction getSchemaVersion(schemaUri) {\n const re = /\\d+\\.\\d+\\.\\d+/g;\n const match = schemaUri.match(re);\n return match === null ? undefined : match[0];\n}\n\n/**\n * Extract only relevant errors of the validation result.\n *\n * The JSON Schema we use under the hood produces more errors than we need for a\n * detected schema violation (for example, unmatched sub-schemas, if-then-rules,\n * `oneOf`-definitions ...).\n *\n * We call these errors \"relevant\" that have a custom error message defined by us OR\n * are basic data type errors.\n *\n * @param {Array} schemaErrors\n *\n * @return {Array}\n */\nfunction filteredSchemaErrors(schemaErrors) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(schemaErrors, err => {\n const {\n instancePath,\n keyword\n } = err;\n\n // (1) regular errors are customized from the schema\n if (keyword === 'errorMessage') {\n return true;\n }\n\n // (2) data type errors\n // ignore type errors nested in scopes\n if (keyword === 'type' && instancePath && !instancePath.startsWith('/scopes/')) {\n return true;\n }\n return false;\n });\n}\n\nconst SUPPORTED_SCHEMA_VERSION = (0,_bpmn_io_element_templates_validator__WEBPACK_IMPORTED_MODULE_1__.getZeebeSchemaVersion)();\nconst SUPPORTED_SCHEMA_PACKAGE = (0,_bpmn_io_element_templates_validator__WEBPACK_IMPORTED_MODULE_1__.getZeebeSchemaPackage)();\n\n/**\n * A Camunda Cloud element template validator.\n */\nclass Validator extends Validator$1 {\n constructor(moddle) {\n super(moddle);\n }\n\n /**\n * Validate given template and return error (if any).\n *\n * @param {TemplateDescriptor} template\n *\n * @return {Error} validation error, if any\n */\n _validateTemplate(template) {\n let err;\n const id = template.id,\n version = template.version || '_',\n schema = template.$schema,\n schemaVersion = schema && getSchemaVersion(schema);\n\n // (1) $schema attribute defined\n if (!schema) {\n return this._logError('missing $schema attribute.', template);\n }\n if (!this.isSchemaValid(schema)) {\n return this._logError(`unsupported $schema attribute <${schema}>.`, template);\n }\n\n // (2) compatibility\n if (schemaVersion && semver_compare__WEBPACK_IMPORTED_MODULE_0___default()(SUPPORTED_SCHEMA_VERSION, schemaVersion) < 0) {\n return this._logError(`unsupported element template schema version <${schemaVersion}>. Your installation only supports up to version <${SUPPORTED_SCHEMA_VERSION}>. Please update your installation`, template);\n }\n\n // (3) versioning\n if (this._templatesById[id] && this._templatesById[id][version]) {\n if (version === '_') {\n return this._logError(`template id <${id}> already used`, template);\n } else {\n return this._logError(`template id <${id}> and version <${version}> already used`, template);\n }\n }\n\n // (4) elementType validation\n const elementTypeError = this._validateElementType(template);\n if (elementTypeError) {\n return elementTypeError;\n }\n\n // (5) JSON schema compliance\n const validationResult = (0,_bpmn_io_element_templates_validator__WEBPACK_IMPORTED_MODULE_1__.validateZeebe)(template);\n const {\n errors,\n valid\n } = validationResult;\n if (!valid) {\n err = new Error('invalid template');\n filteredSchemaErrors(errors).forEach(error => {\n this._logError(error.message, template);\n });\n }\n return err;\n }\n isSchemaValid(schema) {\n return schema && schema.includes(SUPPORTED_SCHEMA_PACKAGE);\n }\n}\n\n/**\n * The guy responsible for template loading.\n *\n * Provide the actual templates via the `config.elementTemplates`.\n *\n * That configuration can either be an array of template\n * descriptors or a node style callback to retrieve\n * the templates asynchronously.\n *\n * @param {Array|Function} loadTemplates\n * @param {EventBus} eventBus\n * @param {ElementTemplates} elementTemplates\n * @param {Moddle} moddle\n */\nlet ElementTemplatesLoader$1 = class ElementTemplatesLoader {\n constructor(loadTemplates, eventBus, elementTemplates, moddle) {\n this._loadTemplates = loadTemplates;\n this._eventBus = eventBus;\n this._elementTemplates = elementTemplates;\n this._moddle = moddle;\n eventBus.on('diagram.init', () => {\n this.reload();\n });\n }\n reload() {\n const loadTemplates = this._loadTemplates;\n\n // no templates specified\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(loadTemplates)) {\n return;\n }\n\n // template loader function specified\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isFunction)(loadTemplates)) {\n return loadTemplates((err, templates) => {\n if (err) {\n return this.templateErrors([err]);\n }\n this.setTemplates(templates);\n });\n }\n\n // templates array specified\n if (loadTemplates.length) {\n return this.setTemplates(loadTemplates);\n }\n }\n setTemplates(templates) {\n const elementTemplates = this._elementTemplates,\n moddle = this._moddle;\n const validator = new Validator$1(moddle).addAll(templates);\n const errors = validator.getErrors(),\n validTemplates = validator.getValidTemplates();\n elementTemplates.set(validTemplates);\n if (errors.length) {\n this.templateErrors(errors);\n }\n this.templatesChanged();\n }\n templatesChanged() {\n this._eventBus.fire('elementTemplates.changed');\n }\n templateErrors(errors) {\n this._eventBus.fire('elementTemplates.errors', {\n errors: errors\n });\n }\n};\nElementTemplatesLoader$1.$inject = ['config.elementTemplates', 'eventBus', 'elementTemplates', 'moddle'];\n\nclass ElementTemplatesLoader extends ElementTemplatesLoader$1 {\n constructor(loadTemplates, eventBus, elementTemplates, moddle) {\n super(loadTemplates, eventBus, elementTemplates, moddle);\n this._elementTemplates = elementTemplates;\n }\n setTemplates(templates) {\n const elementTemplates = this._elementTemplates,\n moddle = this._moddle;\n const validator = new Validator(moddle).addAll(templates);\n const errors = validator.getErrors(),\n validTemplates = validator.getValidTemplates();\n elementTemplates.set(validTemplates);\n if (errors.length) {\n this.templateErrors(errors);\n }\n this.templatesChanged();\n }\n}\nElementTemplatesLoader.$inject = ['config.elementTemplates', 'eventBus', 'elementTemplates', 'moddle'];\n\n/**\n * Create a new element and set its parent.\n *\n * @param {String} elementType of the new element\n * @param {Object} properties of the new element in key-value pairs\n * @param {moddle.object} parent of the new element\n * @param {BpmnFactory} factory which creates the new element\n *\n * @returns {djs.model.Base} element which is created\n */\nfunction createElement(elementType, properties, parent, factory) {\n const element = factory.create(elementType, properties);\n if (parent) {\n element.$parent = parent;\n }\n return element;\n}\n\n/**\n * generate a semantic id with given prefix\n */\nfunction nextId(prefix) {\n const ids = new ids__WEBPACK_IMPORTED_MODULE_2__[\"default\"]([32, 32, 1]);\n return ids.nextPrefixed(prefix);\n}\nfunction getRoot(businessObject) {\n let parent = businessObject;\n while (parent.$parent) {\n parent = parent.$parent;\n }\n return parent;\n}\nfunction filterElementsByType(objectList, type) {\n const list = objectList || [];\n return list.filter(element => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, type));\n}\nfunction findRootElementsByType(businessObject, referencedType) {\n const root = getRoot(businessObject);\n return filterElementsByType(root.get('rootElements'), referencedType);\n}\nfunction findRootElementById(businessObject, type, id) {\n const elements = findRootElementsByType(businessObject, type);\n return elements.find(element => element.id === id);\n}\n\n/**\n * Create an input parameter representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createInputParameter$1(binding, value, bpmnFactory) {\n const {\n name\n } = binding;\n return bpmnFactory.create('zeebe:Input', {\n source: value,\n target: name\n });\n}\n\n/**\n * Create an output parameter representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createOutputParameter$1(binding, value, bpmnFactory) {\n const {\n source\n } = binding;\n return bpmnFactory.create('zeebe:Output', {\n source,\n target: value\n });\n}\n\n/**\n * Create a task header representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createTaskHeader(binding, value, bpmnFactory) {\n const {\n key\n } = binding;\n return bpmnFactory.create('zeebe:Header', {\n key,\n value\n });\n}\n\n/**\n * Create a task definition representing the given value.\n *\n * @param {object} attrs\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createTaskDefinition(attrs = {}, bpmnFactory) {\n return bpmnFactory.create('zeebe:TaskDefinition', attrs);\n}\n\n/**\n * Create zeebe:Property from the given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createZeebeProperty(binding, value = '', bpmnFactory) {\n const {\n name\n } = binding;\n return bpmnFactory.create('zeebe:Property', {\n name,\n value\n });\n}\n\n/**\n * Create a called element representing the given value.\n *\n * @param {object} attrs\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCalledElement(attrs = {}, bpmnFactory) {\n return bpmnFactory.create('zeebe:CalledElement', attrs);\n}\n\n/**\n * Retrieves whether an element should be updated for a given property.\n *\n * That matches once\n * a) the property value is not empty, or\n * b) the property is not optional\n *\n * @param {String} value\n * @param {Object} property\n * @returns {Boolean}\n */\nfunction shouldUpdate(value, property) {\n const {\n optional\n } = property;\n return value || !optional;\n}\n\n/**\n * Gets or, in case not existent, creates extension element for given element.\n *\n * @param {djs.model.Base} element\n * @param {String} type\n * @param {BpmnFactory} bpmnFactory\n * @returns {ModdleElement}\n */\nfunction ensureExtension(element, type, bpmnFactory) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', {}, businessObject, bpmnFactory);\n businessObject.set('extensionElements', extensionElements);\n }\n let extension = findExtension$1(extensionElements, type);\n if (!extension) {\n extension = bpmnFactory.create(type);\n extension.$parent = extensionElements;\n extensionElements.get('values').push(extension);\n }\n return extension;\n}\n\nconst PROPERTY_TYPE$1 = 'property';\nconst ZEBBE_PROPERTY_TYPE = 'zeebe:property';\nconst ZEBBE_INPUT_TYPE = 'zeebe:input';\nconst ZEEBE_OUTPUT_TYPE = 'zeebe:output';\nconst ZEEBE_PROPERTY_TYPE = 'zeebe:property';\nconst ZEEBE_TASK_DEFINITION_TYPE_TYPE = 'zeebe:taskDefinition:type';\nconst ZEEBE_TASK_DEFINITION = 'zeebe:taskDefinition';\nconst ZEEBE_TASK_HEADER_TYPE = 'zeebe:taskHeader';\nconst MESSAGE_PROPERTY_TYPE = 'bpmn:Message#property';\nconst MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE = 'bpmn:Message#zeebe:subscription#property';\nconst ZEEBE_CALLED_ELEMENT = 'zeebe:calledElement';\nconst EXTENSION_BINDING_TYPES$1 = [MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE, ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE, ZEEBE_PROPERTY_TYPE, ZEEBE_TASK_DEFINITION_TYPE_TYPE, ZEEBE_TASK_DEFINITION, ZEEBE_TASK_HEADER_TYPE, ZEEBE_CALLED_ELEMENT];\nconst TASK_DEFINITION_TYPES = [ZEEBE_TASK_DEFINITION_TYPE_TYPE, ZEEBE_TASK_DEFINITION];\nconst IO_BINDING_TYPES$1 = [ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE];\nconst MESSAGE_BINDING_TYPES = [MESSAGE_PROPERTY_TYPE, MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE];\nconst PROPERTY_BINDING_TYPES = [PROPERTY_TYPE$1, MESSAGE_PROPERTY_TYPE];\n\nfunction getTaskDefinitionPropertyName(binding) {\n return binding.type === ZEEBE_TASK_DEFINITION_TYPE_TYPE ? 'type' : binding.property;\n}\n\nfunction removeRootElement(rootElement, injector) {\n const modeling = injector.get('modeling'),\n canvas = injector.get('canvas'),\n bpmnjs = injector.get('bpmnjs');\n const element = canvas.getRootElement(),\n definitions = bpmnjs.getDefinitions(),\n rootElements = definitions.get('rootElements');\n const newRootElements = rootElements.filter(e => e !== rootElement);\n\n // short-circuit to prevent unnecessary updates\n if (newRootElements.length === rootElements.length) {\n return;\n }\n modeling.updateModdleProperties(element, definitions, {\n rootElements: newRootElements\n });\n}\n\n/**\n * Remove message from element and the diagram.\n *\n * @param {import('bpmn-js/lib/model/Types').Element} element\n * @param {import('didi').Injector} injector\n */\nfunction removeMessage(element, injector) {\n const modeling = injector.get('modeling');\n const bo = getReferringElement(element);\n\n // Event does not have an event definition\n if (!bo) {\n return;\n }\n const message = findMessage(bo);\n if (!message) {\n return;\n }\n modeling.updateModdleProperties(element, bo, {\n messageRef: undefined\n });\n removeRootElement(message, injector);\n}\nfunction getReferringElement(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(bo, 'bpmn:Event')) {\n return bo.get('eventDefinitions')[0];\n }\n return bo;\n}\n\n/**\n * Applies an element template to an element. Sets `zeebe:modelerTemplate` and\n * `zeebe:modelerTemplateVersion`.\n */\nlet ChangeElementTemplateHandler$1 = class ChangeElementTemplateHandler {\n constructor(bpmnFactory, bpmnReplace, commandStack, modeling, injector) {\n this._bpmnFactory = bpmnFactory;\n this._bpmnReplace = bpmnReplace;\n this._modeling = modeling;\n this._commandStack = commandStack;\n this._injector = injector;\n }\n\n /**\n * Change an element's template and update its properties as specified in `newTemplate`. Specify\n * `oldTemplate` to update from one template to another. If `newTemplate` isn't specified the\n * `zeebe:modelerTemplate` and `zeebe:modelerTemplateVersion` properties will be removed from\n * the element.\n *\n * @param {Object} context\n * @param {Object} context.element\n * @param {Object} [context.oldTemplate]\n * @param {Object} [context.newTemplate]\n */\n preExecute(context) {\n let newTemplate = context.newTemplate,\n oldTemplate = context.oldTemplate;\n let element = context.element;\n\n // update zeebe:modelerTemplate attribute\n this._updateZeebeModelerTemplate(element, newTemplate);\n\n // update zeebe:modelerTemplateIcon\n this._updateZeebeModelerTemplateIcon(element, newTemplate);\n if (newTemplate) {\n // update element type\n element = context.element = this._updateElementType(element, oldTemplate, newTemplate);\n\n // update properties\n this._updateProperties(element, oldTemplate, newTemplate);\n\n // update zeebe:TaskDefinition\n this._updateZeebeTaskDefinition(element, oldTemplate, newTemplate);\n\n // update zeebe:Input and zeebe:Output properties\n this._updateZeebeInputOutputParameterProperties(element, oldTemplate, newTemplate);\n\n // update zeebe:Header properties\n this._updateZeebeTaskHeaderProperties(element, oldTemplate, newTemplate);\n\n // update zeebe:Property properties\n this._updateZeebePropertyProperties(element, oldTemplate, newTemplate);\n this._updateMessage(element, oldTemplate, newTemplate);\n this._updateCalledElement(element, oldTemplate, newTemplate);\n }\n }\n _getOrCreateExtensionElements(element, businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element)) {\n const bpmnFactory = this._bpmnFactory,\n modeling = this._modeling;\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = bpmnFactory.create('bpmn:ExtensionElements', {\n values: []\n });\n extensionElements.$parent = businessObject;\n modeling.updateModdleProperties(element, businessObject, {\n extensionElements: extensionElements\n });\n }\n return extensionElements;\n }\n _updateZeebeModelerTemplate(element, newTemplate) {\n const modeling = this._modeling;\n const newId = newTemplate && newTemplate.id;\n const newVersion = newTemplate && newTemplate.version;\n if (getTemplateId$1(element) !== newId || getTemplateVersion$1(element) !== newVersion) {\n modeling.updateProperties(element, {\n 'zeebe:modelerTemplate': newId,\n 'zeebe:modelerTemplateVersion': newVersion\n });\n }\n }\n _updateZeebeModelerTemplateIcon(element, newTemplate) {\n const modeling = this._modeling;\n const newIcon = newTemplate && newTemplate.icon;\n const newIconContents = newIcon && newIcon.contents;\n if (getTemplateIcon(element) !== newIconContents) {\n modeling.updateProperties(element, {\n 'zeebe:modelerTemplateIcon': newIconContents\n });\n }\n }\n _updateProperties(element, oldTemplate, newTemplate) {\n const commandStack = this._commandStack;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'property';\n });\n\n // Remove old Properties if no new Properties specified\n const propertiesToRemove = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'property' && !newProperties.find(newProperty => newProperty.binding.name === oldProperty.binding.name);\n }) || [];\n if (propertiesToRemove.length) {\n const payload = propertiesToRemove.reduce((properties, property) => {\n properties[property.binding.name] = undefined;\n return properties;\n }, {});\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: payload\n });\n }\n if (!newProperties.length) {\n return;\n }\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newPropertyValue = getDefaultValue(newProperty),\n changedElement = businessObject;\n let properties = {};\n if (shouldKeepValue(changedElement, oldProperty, newProperty)) {\n return;\n }\n properties[newBindingName] = newPropertyValue;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties\n });\n });\n }\n\n /**\n * Update `zeebe:TaskDefinition` properties of specified business object. This\n * can only exist in `bpmn:ExtensionElements`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateZeebeTaskDefinition(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return TASK_DEFINITION_TYPES.includes(newBindingType);\n });\n const businessObject = this._getOrCreateExtensionElements(element);\n let taskDefinition = findExtension$1(businessObject, 'zeebe:TaskDefinition');\n\n // (1) remove old task definition if no new properties specified\n\n if (!newProperties.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get('values'), taskDefinition)\n }\n });\n return;\n }\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n newPropertyValue = getDefaultValue(newProperty),\n newBinding = newProperty.binding,\n propertyName = getTaskDefinitionPropertyName(newBinding);\n\n // (2) update old task definition\n if (taskDefinition) {\n if (!shouldKeepValue(taskDefinition, oldProperty, newProperty)) {\n const properties = {\n [propertyName]: newPropertyValue\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: taskDefinition,\n properties\n });\n }\n }\n\n // (3) add new task definition\n else {\n const properties = {\n [propertyName]: newPropertyValue\n };\n taskDefinition = createTaskDefinition(properties, bpmnFactory);\n taskDefinition.$parent = businessObject;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), taskDefinition]\n }\n });\n }\n });\n\n // (4) remove properties no longer templated\n const oldProperties = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return TASK_DEFINITION_TYPES.includes(oldBindingType) && !newProperties.find(newProperty => newProperty.binding.property === oldProperty.binding.property);\n }) || [];\n oldProperties.forEach(oldProperty => {\n const properties = {\n [oldProperty.binding.property]: undefined\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: taskDefinition,\n properties\n });\n });\n }\n\n /**\n * Update `zeebe:Input` and `zeebe:Output` properties of specified business\n * object. Both can only exist in `zeebe:ioMapping` which can exist in `bpmn:ExtensionElements`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateZeebeInputOutputParameterProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'zeebe:input' || newBindingType === 'zeebe:output';\n });\n const businessObject = this._getOrCreateExtensionElements(element);\n let ioMapping = findExtension$1(businessObject, 'zeebe:IoMapping');\n\n // (1) remove old mappings if no new specified\n if (!newProperties.length) {\n if (!ioMapping) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get('values'), ioMapping)\n }\n });\n }\n if (!ioMapping) {\n ioMapping = bpmnFactory.create('zeebe:IoMapping');\n ioMapping.$parent = businessObject;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), ioMapping]\n }\n });\n }\n const oldInputs = ioMapping.get('zeebe:inputParameters') ? ioMapping.get('zeebe:inputParameters').slice() : [];\n const oldOutputs = ioMapping.get('zeebe:outputParameters') ? ioMapping.get('zeebe:outputParameters').slice() : [];\n let propertyName;\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n inputOrOutput = findBusinessObject(businessObject, newProperty),\n newPropertyValue = getDefaultValue(newProperty),\n newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n let newInputOrOutput, properties;\n\n // (2) update old inputs and outputs\n if (inputOrOutput) {\n // (2a) exclude old inputs and outputs from cleanup, unless\n // a) optional and has empty value, and\n // b) not changed\n if (shouldUpdate(newPropertyValue, newProperty) || shouldKeepValue(inputOrOutput, oldProperty, newProperty)) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(inputOrOutput, 'zeebe:Input')) {\n remove$1(oldInputs, inputOrOutput);\n } else {\n remove$1(oldOutputs, inputOrOutput);\n }\n }\n\n // (2a) do updates (unless changed)\n if (!shouldKeepValue(inputOrOutput, oldProperty, newProperty)) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(inputOrOutput, 'zeebe:Input')) {\n properties = {\n source: newPropertyValue\n };\n } else {\n properties = {\n target: newPropertyValue\n };\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOrOutput,\n properties\n });\n }\n }\n\n // (3) add new inputs and outputs (unless optional)\n else if (shouldUpdate(newPropertyValue, newProperty)) {\n if (newBindingType === 'zeebe:input') {\n propertyName = 'inputParameters';\n newInputOrOutput = createInputParameter$1(newBinding, newPropertyValue, bpmnFactory);\n } else {\n propertyName = 'outputParameters';\n newInputOrOutput = createOutputParameter$1(newBinding, newPropertyValue, bpmnFactory);\n }\n newInputOrOutput.$parent = ioMapping;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: ioMapping,\n properties: {\n [propertyName]: [...ioMapping.get(propertyName), newInputOrOutput]\n }\n });\n }\n });\n\n // (4) remove old inputs and outputs\n if (oldInputs.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: ioMapping,\n properties: {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(ioMapping.get('inputParameters'), inputParameter => oldInputs.includes(inputParameter))\n }\n });\n }\n if (oldOutputs.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: ioMapping,\n properties: {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(ioMapping.get('outputParameters'), outputParameter => oldOutputs.includes(outputParameter))\n }\n });\n }\n }\n\n /**\n * Update `zeebe:Header` properties of specified business\n * object. Those can only exist in `zeebe:taskHeaders` which can exist in `bpmn:ExtensionElements`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateZeebeTaskHeaderProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'zeebe:taskHeader';\n });\n const businessObject = this._getOrCreateExtensionElements(element);\n let taskHeaders = findExtension$1(businessObject, 'zeebe:TaskHeaders');\n\n // (1) remove old headers if no new specified\n if (!newProperties.length) {\n if (!taskHeaders) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get('values'), taskHeaders)\n }\n });\n }\n if (!taskHeaders) {\n taskHeaders = bpmnFactory.create('zeebe:TaskHeaders');\n taskHeaders.$parent = businessObject;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), taskHeaders]\n }\n });\n }\n const oldHeaders = taskHeaders.get('zeebe:values') ? taskHeaders.get('zeebe:values').slice() : [];\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n oldHeader = findBusinessObject(businessObject, newProperty),\n newPropertyValue = getDefaultValue(newProperty),\n newBinding = newProperty.binding;\n\n // (2) update old headers\n if (oldHeader) {\n if (!shouldKeepValue(oldHeader, oldProperty, newProperty)) {\n const properties = {\n value: newPropertyValue\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldHeader,\n properties\n });\n }\n remove$1(oldHeaders, oldHeader);\n }\n\n // (3) add new (non-empty) headers\n else if (newPropertyValue) {\n const newHeader = createTaskHeader(newBinding, newPropertyValue, bpmnFactory);\n newHeader.$parent = taskHeaders;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: taskHeaders,\n properties: {\n values: [...taskHeaders.get('values'), newHeader]\n }\n });\n }\n });\n\n // (4) remove old headers\n if (oldHeaders.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: taskHeaders,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(taskHeaders.get('values'), header => oldHeaders.includes(header))\n }\n });\n }\n }\n\n /**\n * Update zeebe:Property properties of zeebe:Properties extension element.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateZeebePropertyProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'zeebe:property';\n });\n const businessObject = this._getOrCreateExtensionElements(element);\n let zeebeProperties = findExtension$1(businessObject, 'zeebe:Properties');\n\n // (1) remove old zeebe:Properties if no new zeebe:Property properties\n if (!newProperties.length) {\n if (!zeebeProperties) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get('values'), zeebeProperties)\n }\n });\n }\n if (!zeebeProperties) {\n zeebeProperties = bpmnFactory.create('zeebe:Properties');\n zeebeProperties.$parent = businessObject;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), zeebeProperties]\n }\n });\n }\n const oldZeebeProperties = zeebeProperties.get('properties') ? zeebeProperties.get('properties').slice() : [];\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n oldZeebeProperty = findBusinessObject(businessObject, newProperty),\n newPropertyValue = getDefaultValue(newProperty),\n newBinding = newProperty.binding;\n\n // (2) update old zeebe:Property\n if (oldZeebeProperty) {\n if (shouldUpdate(newPropertyValue, newProperty) || shouldKeepValue(oldZeebeProperty, oldProperty, newProperty)) {\n remove$1(oldZeebeProperties, oldZeebeProperty);\n }\n if (!shouldKeepValue(oldZeebeProperty, oldProperty, newProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldZeebeProperty,\n properties: {\n value: newPropertyValue\n }\n });\n }\n }\n\n // (3) add new zeebe:Property\n else if (shouldUpdate(newPropertyValue, newProperty)) {\n const newProperty = createZeebeProperty(newBinding, newPropertyValue, bpmnFactory);\n newProperty.$parent = zeebeProperties;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: zeebeProperties,\n properties: {\n properties: [...zeebeProperties.get('properties'), newProperty]\n }\n });\n }\n });\n\n // (4) remove old zeebe:Property\n if (oldZeebeProperties.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: zeebeProperties,\n properties: {\n properties: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(zeebeProperties.get('properties'), zeebeProperty => oldZeebeProperties.includes(zeebeProperty))\n }\n });\n }\n }\n _updateMessage(element, oldTemplate, newTemplate) {\n // update bpmn:Message properties\n this._updateMessageProperties(element, oldTemplate, newTemplate);\n\n // update bpmn:Message zeebe:subscription properties\n this._updateMessageZeebeSubscriptionProperties(element, oldTemplate, newTemplate);\n this._updateZeebeModelerTemplateOnReferencedElement(element, oldTemplate, newTemplate);\n if (!hasMessageProperties(newTemplate)) {\n removeMessage(element, this._injector);\n }\n }\n\n /**\n * Update bpmn:Message properties.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateMessageProperties(element, oldTemplate, newTemplate) {\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === MESSAGE_PROPERTY_TYPE;\n });\n const removedProperties = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === MESSAGE_PROPERTY_TYPE && !newProperties.find(newProperty => newProperty.binding.name === oldProperty.binding.name);\n }) || [];\n let message = this._getMessage(element);\n message && removedProperties.forEach(removedProperty => {\n this._modeling.updateModdleProperties(element, message, {\n [removedProperty.binding.name]: undefined\n });\n });\n if (!newProperties.length) {\n return;\n }\n message = this._getOrCreateMessage(element, newTemplate);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newPropertyValue = getDefaultValue(newProperty),\n changedElement = message;\n let properties = {};\n if (shouldKeepValue(changedElement, oldProperty, newProperty)) {\n return;\n }\n properties[newBindingName] = newPropertyValue;\n this._modeling.updateModdleProperties(element, changedElement, properties);\n });\n }\n\n /**\n * Update bpmn:Message#zeebe:subscription properties.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateMessageZeebeSubscriptionProperties(element, oldTemplate, newTemplate) {\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE;\n });\n const removedProperties = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE && !newProperties.find(newProperty => newProperty.binding.name === oldProperty.binding.name);\n }) || [];\n if (!newProperties.length && !removedProperties.length) {\n return;\n }\n const message = this._getOrCreateMessage(element, newTemplate);\n const messageExtensionElements = this._getOrCreateExtensionElements(element, message);\n const zeebeSubscription = this._getSubscription(element, message);\n const propertiesToSet = newProperties.reduce((properties, newProperty) => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newPropertyValue = getDefaultValue(newProperty),\n changedElement = zeebeSubscription;\n if (shouldKeepValue(changedElement, oldProperty, newProperty)) {\n return properties;\n }\n properties[newBindingName] = newPropertyValue;\n return properties;\n }, {});\n\n // Update zeebe Subscription\n if (zeebeSubscription) {\n this._modeling.updateModdleProperties(element, zeebeSubscription, propertiesToSet);\n } else {\n // create new Subscription\n const newSubscription = createElement('zeebe:Subscription', propertiesToSet, message, this._bpmnFactory);\n this._modeling.updateModdleProperties(element, messageExtensionElements, {\n values: [...messageExtensionElements.get('values'), newSubscription]\n });\n }\n\n // Remove old properties\n if (!oldTemplate || !zeebeSubscription) {\n return;\n }\n const propertiesToRemove = removedProperties.reduce((properties, removedProperty) => {\n properties[removedProperty.binding.name] = undefined;\n return properties;\n }, {});\n this._modeling.updateModdleProperties(element, zeebeSubscription, propertiesToRemove);\n }\n _updateZeebeModelerTemplateOnReferencedElement(element, oldTemplate, newTemplate) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const message = findMessage(businessObject);\n if (!message) {\n return;\n }\n if (getTemplateId$1(message) === newTemplate.id) {\n return;\n }\n this._modeling.updateModdleProperties(element, message, {\n 'zeebe:modelerTemplate': newTemplate.id\n });\n }\n _getSubscription(element, bo) {\n const extensionElements = this._getOrCreateExtensionElements(element, bo);\n const extension = findExtension$1(extensionElements, 'zeebe:Subscription');\n if (extension) {\n return extension;\n }\n }\n _getOrCreateMessage(element, template) {\n return this._getMessage(element) || this._createMessage(element, template);\n }\n _createMessage(element, template) {\n let bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(bo, 'bpmn:Event')) {\n bo = bo.get('eventDefinitions')[0];\n }\n const message = this._bpmnFactory.create('bpmn:Message', {\n 'zeebe:modelerTemplate': template.id\n });\n message.$parent = getRoot(bo);\n this._modeling.updateModdleProperties(element, bo, {\n messageRef: message\n });\n return message;\n }\n _getMessage(element) {\n let bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(bo, 'bpmn:Event')) {\n bo = bo.get('eventDefinitions')[0];\n }\n return bo && bo.get('messageRef');\n }\n\n /**\n * Update `zeebe:CalledElement` properties of specified business object. This\n * can only exist in `bpmn:ExtensionElements`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCalledElement(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === ZEEBE_CALLED_ELEMENT;\n });\n const businessObject = this._getOrCreateExtensionElements(element);\n let calledElement = findExtension$1(businessObject, 'zeebe:CalledElement');\n\n // (1) remove old called element if no new properties specified\n if (!newProperties.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get('values'), calledElement)\n }\n });\n return;\n }\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty$1(oldTemplate, newProperty),\n newPropertyValue = getDefaultValue(newProperty),\n propertyName = newProperty.binding.property;\n\n // (2) update old called element\n if (calledElement) {\n if (!shouldKeepValue(calledElement, oldProperty, newProperty)) {\n const properties = {\n [propertyName]: newPropertyValue\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: calledElement,\n properties\n });\n }\n }\n\n // (3) add new called element\n else {\n const properties = {\n [propertyName]: newPropertyValue\n };\n calledElement = createCalledElement(properties, bpmnFactory);\n calledElement.$parent = businessObject;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), calledElement]\n }\n });\n }\n });\n\n // (4) remove properties no longer templated\n const oldProperties = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === ZEEBE_CALLED_ELEMENT && !newProperties.find(newProperty => newProperty.binding.property === oldProperty.binding.property);\n }) || [];\n oldProperties.forEach(oldProperty => {\n const properties = {\n [oldProperty.binding.property]: undefined\n };\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: calledElement,\n properties\n });\n });\n }\n\n /**\n * Replaces the element with the specified elementType.\n * Takes into account the eventDefinition for events.\n *\n * @param {djs.model.Base} element\n * @param {Object} newTemplate\n */\n _updateElementType(element, oldTemplate, newTemplate) {\n // determine new task type\n const newType = newTemplate.elementType;\n if (!newType) {\n return element;\n }\n\n // TODO(nre): handle old event definition\n const oldType = oldTemplate && oldTemplate.elementType || {\n value: element.type\n };\n\n // Do not replace if the element type did not change\n if (oldType && oldType.value === newType.value && oldType.eventDefinition === newType.eventDefinition) {\n return element;\n }\n const replacement = {\n type: newType.value\n };\n if (newType.eventDefinition) {\n replacement.eventDefinitionType = newType.eventDefinition;\n }\n const replacedElement = this._bpmnReplace.replaceElement(element, replacement);\n return replacedElement;\n }\n};\nChangeElementTemplateHandler$1.$inject = ['bpmnFactory', 'bpmnReplace', 'commandStack', 'modeling', 'injector'];\n\n// helpers //////////\n\n/**\n * Find business object matching specified property.\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} property\n *\n * @returns {ModdleElement}\n */\nfunction findBusinessObject(element, property) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const binding = property.binding,\n bindingType = binding.type;\n if (TASK_DEFINITION_TYPES.includes(bindingType)) {\n return findExtension$1(businessObject, 'zeebe:TaskDefinition');\n }\n if (bindingType === 'zeebe:input' || bindingType === 'zeebe:output') {\n const extensionElements = findExtension$1(businessObject, 'zeebe:IoMapping');\n if (!extensionElements) {\n return;\n }\n if (bindingType === 'zeebe:input') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(extensionElements.get('zeebe:inputParameters'), function (input) {\n return input.get('zeebe:target') === binding.name;\n });\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(extensionElements.get('zeebe:outputParameters'), function (output) {\n return output.get('zeebe:source') === binding.source;\n });\n }\n }\n if (bindingType === 'zeebe:taskHeader') {\n const extensionElements = findExtension$1(businessObject, 'zeebe:TaskHeaders');\n if (!extensionElements) {\n return;\n }\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(extensionElements.get('zeebe:values'), function (value) {\n return value.get('zeebe:key') === binding.key;\n });\n }\n if (bindingType === 'zeebe:property') {\n const zeebeProperties = findExtension$1(businessObject, 'zeebe:Properties');\n if (!zeebeProperties) {\n return;\n }\n return zeebeProperties.get('properties').find(value => {\n return value.get('name') === binding.name;\n });\n }\n}\n\n/**\n * Find old property matching specified new property.\n *\n * @param {Object} oldTemplate\n * @param {Object} newProperty\n *\n * @returns {Object}\n */\nfunction findOldProperty$1(oldTemplate, newProperty) {\n if (!oldTemplate) {\n return;\n }\n const oldProperties = oldTemplate.properties,\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newBindingType = newBinding.type;\n if (newBindingType === 'property') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'property' && oldBindingName === newBindingName;\n });\n }\n if (TASK_DEFINITION_TYPES.includes(newBindingType)) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldPropertyName = getTaskDefinitionPropertyName(oldBinding),\n newPropertyName = getTaskDefinitionPropertyName(newBinding);\n return oldPropertyName === newPropertyName;\n });\n }\n if (newBindingType === 'zeebe:input') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'zeebe:input') {\n return;\n }\n return oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'zeebe:output') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'zeebe:output') {\n return;\n }\n return oldBinding.source === newBinding.source;\n });\n }\n if (newBindingType === 'zeebe:taskHeader') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'zeebe:taskHeader') {\n return;\n }\n return oldBinding.key === newBinding.key;\n });\n }\n if (newBindingType === 'zeebe:property') {\n return oldProperties.find(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'zeebe:property') {\n return;\n }\n return oldBinding.name === newBinding.name;\n });\n }\n if (newBindingType === MESSAGE_PROPERTY_TYPE) {\n return oldProperties.find(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== MESSAGE_PROPERTY_TYPE) {\n return;\n }\n return oldBinding.name === newBinding.name;\n });\n }\n if (newBindingType === MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE) {\n return oldProperties.find(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE) {\n return;\n }\n return oldBinding.name === newBinding.name;\n });\n }\n}\n\n/**\n * Check whether the existing property should be keept. This is the case if\n * - an old template was set and the value differs from the default\n * - no template was set but the property was set manually\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} oldProperty\n * @param {Object} newProperty\n *\n * @returns {boolean}\n */\nfunction shouldKeepValue(element, oldProperty, newProperty) {\n // \"Hidden\" values are treated as a constant\n if (newProperty.type === 'Hidden') {\n return false;\n }\n\n // Dropdowns should keep existing configuration\n // cf. https://github.com/bpmn-io/bpmn-js-properties-panel/issues/767\n if (newProperty.type === 'Dropdown') {\n const currentValue = getPropertyValue$1(element, newProperty);\n\n // only keep value if old value is a valid option\n return newProperty.choices && newProperty.choices.some(choice => choice.value === currentValue);\n }\n\n // keep existing old property if\n // user changed it from the original\n if (oldProperty) {\n return propertyChanged$1(element, oldProperty);\n }\n\n // keep existing property value\n return !!getPropertyValue$1(element, newProperty);\n}\n\n/**\n * Check whether property was changed after being set by template.\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} oldProperty\n *\n * @returns {boolean}\n */\nfunction propertyChanged$1(element, oldProperty) {\n const oldPropertyValue = oldProperty.value;\n return getPropertyValue$1(element, oldProperty) !== oldPropertyValue;\n}\nfunction getPropertyValue$1(element, property) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if (!businessObject) {\n return;\n }\n const binding = property.binding,\n bindingName = binding.name,\n bindingType = binding.type;\n if (bindingType === 'property') {\n return businessObject.get(bindingName);\n }\n if (TASK_DEFINITION_TYPES.includes(bindingType)) {\n return businessObject.get(getTaskDefinitionPropertyName(binding));\n }\n if (bindingType === 'zeebe:input') {\n return businessObject.get('zeebe:source');\n }\n if (bindingType === 'zeebe:output') {\n return businessObject.get('zeebe:target');\n }\n if (bindingType === 'zeebe:taskHeader') {\n return businessObject.get('zeebe:value');\n }\n if (bindingType === 'zeebe:property') {\n return businessObject.get('zeebe:value');\n }\n if (bindingType === MESSAGE_PROPERTY_TYPE) {\n return businessObject.get(bindingName);\n }\n if (bindingType === MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE) {\n return businessObject.get(bindingName);\n }\n}\nfunction remove$1(array, item) {\n const index = array.indexOf(item);\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(index)) {\n return array;\n }\n array.splice(index, 1);\n return array;\n}\nfunction hasMessageProperties(template) {\n return template.properties.some(p => MESSAGE_BINDING_TYPES.includes(p.binding.type));\n}\n\nclass RemoveElementTemplateHandler {\n constructor(modeling, elementFactory, elementRegistry, canvas, bpmnFactory, replace, commandStack) {\n this._modeling = modeling;\n this._elementFactory = elementFactory;\n this._elementRegistry = elementRegistry;\n this._canvas = canvas;\n this._bpmnFactory = bpmnFactory;\n this._replace = replace;\n this._commandStack = commandStack;\n }\n preExecute(context) {\n const {\n element\n } = context;\n if (element.parent) {\n context.newElement = this._removeTemplate(element);\n } else {\n context.newElement = this._removeRootTemplate(element);\n }\n }\n _removeTemplate(element) {\n const replace = this._replace;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const type = businessObject.$type,\n eventDefinitionType = this._getEventDefinitionType(businessObject);\n const newBusinessObject = this._createBlankBusinessObject(element);\n return replace.replaceElement(element, {\n type: type,\n businessObject: newBusinessObject,\n eventDefinitionType: eventDefinitionType\n }, {\n createElementsBehavior: false\n });\n }\n\n /**\n * Remove template from a given element.\n *\n * @param {djs.model.Base} element\n *\n * @return {djs.model.Base} the updated element\n */\n _removeRootTemplate(element) {\n var modeling = this._modeling,\n elementFactory = this._elementFactory,\n elementRegistry = this._elementRegistry,\n canvas = this._canvas;\n\n // We are inside a collapsed subprocess, move up to the parent before replacing the collapsed object\n if ((0,bpmn_js_lib_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_14__.isPlane)(element)) {\n const shapeId = (0,bpmn_js_lib_util_DrilldownUtil__WEBPACK_IMPORTED_MODULE_14__.getShapeIdFromPlane)(element);\n const shape = elementRegistry.get(shapeId);\n if (shape && shape !== element) {\n canvas.setRootElement(canvas.findRoot(shape));\n return this._removeTemplate(shape);\n }\n }\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const type = businessObject.$type;\n const newBusinessObject = this._createBlankBusinessObject(element);\n const newRoot = elementFactory.create('root', {\n type: type,\n businessObject: newBusinessObject\n });\n this._commandStack.execute('canvas.updateRoot', {\n newRoot: newRoot,\n oldRoot: element\n });\n modeling.moveElements(element.children, {\n x: 0,\n y: 0\n }, newRoot);\n return newRoot;\n }\n _getEventDefinitionType(businessObject) {\n if (!businessObject.eventDefinitions) {\n return null;\n }\n const eventDefinition = businessObject.eventDefinitions[0];\n if (!eventDefinition) {\n return null;\n }\n return eventDefinition.$type;\n }\n _createBlankBusinessObject(element) {\n const bpmnFactory = this._bpmnFactory;\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n newBo = bpmnFactory.create(bo.$type),\n label = (0,bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_15__.getLabel)(element);\n if (!label) {\n return newBo;\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:Group')) {\n newBo.categoryValueRef = bpmnFactory.create('bpmn:CategoryValue');\n }\n (0,bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_15__.setLabel)({\n businessObject: newBo\n }, label);\n return newBo;\n }\n}\nRemoveElementTemplateHandler.$inject = ['modeling', 'elementFactory', 'elementRegistry', 'canvas', 'bpmnFactory', 'replace', 'commandStack'];\n\n/**\n * A handler that combines and executes multiple commands.\n *\n * All updates are bundled on the command stack and executed in one step.\n * This also makes it possible to revert the changes in one step.\n *\n * Example use case: remove the camunda:formKey attribute and in addition\n * add all form fields needed for the camunda:formData property.\n */\nclass MultiCommandHandler {\n constructor(commandStack) {\n this._commandStack = commandStack;\n }\n preExecute(context) {\n const commandStack = this._commandStack;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(context, function (command) {\n commandStack.execute(command.cmd, command.context);\n });\n }\n}\nMultiCommandHandler.$inject = ['commandStack'];\n\nlet ElementTemplatesCommands$1 = class ElementTemplatesCommands {\n constructor(commandStack, elementTemplates, eventBus) {\n commandStack.registerHandler('element-templates.multi-command-executor', MultiCommandHandler);\n commandStack.registerHandler('propertiesPanel.zeebe.changeTemplate', ChangeElementTemplateHandler$1);\n commandStack.registerHandler('propertiesPanel.removeTemplate', RemoveElementTemplateHandler);\n\n // apply default element templates on shape creation\n eventBus.on(['commandStack.shape.create.postExecuted'], function (event) {\n const {\n context: {\n hints = {},\n shape\n }\n } = event;\n if (hints.createElementsBehavior !== false) {\n applyDefaultTemplate$1(shape, elementTemplates, commandStack);\n }\n });\n\n // apply default element templates on connection creation\n eventBus.on(['commandStack.connection.create.postExecuted'], function (event) {\n const {\n context: {\n hints = {},\n connection\n }\n } = event;\n if (hints.createElementsBehavior !== false) {\n applyDefaultTemplate$1(connection, elementTemplates, commandStack);\n }\n });\n }\n};\nElementTemplatesCommands$1.$inject = ['commandStack', 'elementTemplates', 'eventBus'];\nfunction applyDefaultTemplate$1(element, elementTemplates, commandStack) {\n if (!elementTemplates.get(element) && elementTemplates.getDefault(element)) {\n const command = 'propertiesPanel.zeebe.changeTemplate';\n const commandContext = {\n element: element,\n newTemplate: elementTemplates.getDefault(element)\n };\n commandStack.execute(command, commandContext);\n }\n}\n\nvar commandsModule$1 = {\n __init__: ['elementTemplateCommands'],\n elementTemplateCommands: ['type', ElementTemplatesCommands$1]\n};\n\nclass PropertyBindingProvider {\n static create(element, options) {\n const {\n property\n } = options;\n const {\n binding\n } = property;\n const {\n name\n } = binding;\n const value = getDefaultValue(property);\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n businessObject[name] = value;\n }\n}\n\nclass TaskDefinitionTypeBindingProvider {\n static create(element, options) {\n const {\n property,\n bpmnFactory\n } = options;\n const value = getDefaultValue(property);\n const propertyName = getTaskDefinitionPropertyName(property.binding);\n const taskDefinition = ensureExtension(element, 'zeebe:TaskDefinition', bpmnFactory);\n taskDefinition.set(propertyName, value);\n }\n}\n\nclass InputBindingProvider {\n static create(element, options) {\n const {\n property,\n bpmnFactory\n } = options;\n const {\n binding\n } = property;\n const value = getDefaultValue(property);\n const ioMapping = ensureExtension(element, 'zeebe:IoMapping', bpmnFactory);\n if (!shouldUpdate(value, property)) {\n return;\n }\n const input = createInputParameter$1(binding, value, bpmnFactory);\n input.$parent = ioMapping;\n ioMapping.get('inputParameters').push(input);\n }\n}\n\nclass OutputBindingProvider {\n static create(element, options) {\n const {\n property,\n bpmnFactory\n } = options;\n const {\n binding\n } = property;\n const value = getDefaultValue(property);\n const ioMapping = ensureExtension(element, 'zeebe:IoMapping', bpmnFactory);\n if (!shouldUpdate(value, property)) {\n return;\n }\n const output = createOutputParameter$1(binding, value, bpmnFactory);\n output.$parent = ioMapping;\n ioMapping.get('outputParameters').push(output);\n }\n}\n\nclass TaskHeaderBindingProvider {\n static create(element, options) {\n const {\n property,\n bpmnFactory\n } = options;\n const {\n binding\n } = property;\n const value = getDefaultValue(property);\n const taskHeaders = ensureExtension(element, 'zeebe:TaskHeaders', bpmnFactory);\n const header = createTaskHeader(binding, value, bpmnFactory);\n header.$parent = taskHeaders;\n taskHeaders.get('values').push(header);\n }\n}\n\nclass ZeebePropertiesProvider {\n static create(element, options) {\n const {\n property,\n bpmnFactory\n } = options;\n const {\n binding\n } = property;\n const value = getDefaultValue(property);\n const zeebeProperties = ensureExtension(element, 'zeebe:Properties', bpmnFactory);\n if (!shouldUpdate(value, property)) {\n return;\n }\n const zeebeProperty = createZeebeProperty(binding, value, bpmnFactory);\n zeebeProperty.$parent = zeebeProperties;\n zeebeProperties.get('properties').push(zeebeProperty);\n }\n}\n\nclass MessagePropertyBindingProvider {\n static create(element, options) {\n const {\n bpmnFactory,\n property\n } = options;\n const {\n binding\n } = property;\n const {\n name\n } = binding;\n const value = getDefaultValue(property);\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:Event')) {\n businessObject = businessObject.get('eventDefinitions')[0];\n }\n let message = businessObject.get('messageRef');\n if (!message) {\n message = bpmnFactory.create('bpmn:Message', {\n 'zeebe:modelerTemplate': getTemplateId$1(element)\n });\n businessObject.set('messageRef', message);\n }\n message.set(name, value);\n }\n}\n\nclass MessageZeebeSubscriptionBindingProvider {\n static create(element, options) {\n const {\n bpmnFactory,\n property\n } = options;\n const {\n binding\n } = property;\n const {\n name\n } = binding;\n const value = getDefaultValue(property);\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:Event')) {\n businessObject = businessObject.get('eventDefinitions')[0];\n }\n let message = businessObject.get('messageRef');\n if (!message) {\n message = bpmnFactory.create('bpmn:Message', {\n 'zeebe:modelerTemplate': getTemplateId$1(element)\n });\n businessObject.set('messageRef', message);\n }\n const subscription = ensureExtension(message, 'zeebe:Subscription', bpmnFactory);\n if (!shouldUpdate(value, property)) {\n return;\n }\n subscription.set(name, value);\n }\n}\n\nclass CalledElementBindingProvider {\n static create(element, options) {\n const {\n property,\n bpmnFactory\n } = options;\n const {\n binding\n } = property;\n const {\n property: propertyName\n } = binding;\n const value = getDefaultValue(property);\n const calledElement = ensureExtension(element, 'zeebe:CalledElement', bpmnFactory);\n\n // TODO(@barmac): remove if we decide to support propagation in templates\n ensureNoPropagation(calledElement);\n calledElement.set(propertyName, value);\n }\n}\nfunction ensureNoPropagation(calledElement) {\n calledElement.set('propagateAllChildVariables', false);\n calledElement.set('propagateAllParentVariables', false);\n}\n\nconst PRIMITIVE_MODDLE_TYPES$1 = ['Boolean', 'Integer', 'String'];\nfunction getPropertyValue(element, property, scope) {\n const rawValue = getRawPropertyValue(element, property);\n const {\n type\n } = property;\n if (type === 'Boolean') {\n return getBooleanPropertyValue(rawValue);\n }\n return rawValue;\n}\nfunction getRawPropertyValue(element, property, scope) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const defaultValue = '';\n const {\n binding\n } = property;\n const {\n name,\n property: bindingProperty,\n type\n } = binding;\n\n // property\n if (type === 'property') {\n const value = businessObject.get(name);\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(value)) {\n return value;\n }\n return defaultValue;\n }\n\n // zeebe:taskDefinition\n if (TASK_DEFINITION_TYPES.includes(type)) {\n const taskDefinition = findExtension$1(businessObject, 'zeebe:TaskDefinition');\n if (taskDefinition) {\n if (type === ZEEBE_TASK_DEFINITION_TYPE_TYPE) {\n return taskDefinition.get('type');\n } else if (type === ZEEBE_TASK_DEFINITION) {\n return taskDefinition.get(bindingProperty);\n }\n }\n return defaultValue;\n }\n if (IO_BINDING_TYPES$1.includes(type)) {\n const ioMapping = findExtension$1(businessObject, 'zeebe:IoMapping');\n if (!ioMapping) {\n return defaultValue;\n }\n\n // zeebe:Input\n if (type === ZEBBE_INPUT_TYPE) {\n const inputParameter = findInputParameter$1(ioMapping, binding);\n if (inputParameter) {\n return inputParameter.get('source');\n }\n return defaultValue;\n }\n\n // zeebe:Output\n if (type === ZEEBE_OUTPUT_TYPE) {\n const outputParameter = findOutputParameter$1(ioMapping, binding);\n if (outputParameter) {\n return outputParameter.get('target');\n }\n return defaultValue;\n }\n }\n\n // zeebe:taskHeaders\n if (type === ZEEBE_TASK_HEADER_TYPE) {\n const taskHeaders = findExtension$1(businessObject, 'zeebe:TaskHeaders');\n if (!taskHeaders) {\n return defaultValue;\n }\n const header = findTaskHeader(taskHeaders, binding);\n if (header) {\n return header.get('value');\n }\n return defaultValue;\n }\n\n // zeebe:Property\n if (type === ZEEBE_PROPERTY_TYPE) {\n const zeebeProperties = findExtension$1(businessObject, 'zeebe:Properties');\n if (zeebeProperties) {\n const zeebeProperty = findZeebeProperty(zeebeProperties, binding);\n if (zeebeProperty) {\n return zeebeProperty.get('value');\n }\n }\n return defaultValue;\n }\n\n // bpmn:Message#property\n if (type === MESSAGE_PROPERTY_TYPE) {\n const message = findMessage(businessObject);\n const value = message ? message.get(name) : undefined;\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(value)) {\n return value;\n }\n return defaultValue;\n }\n\n // bpmn:Message#zeebe:subscription#property\n if (type === MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE) {\n const message = findMessage(businessObject);\n if (message) {\n const subscription = findExtension$1(message, 'zeebe:Subscription');\n const value = subscription ? subscription.get(name) : undefined;\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(value)) {\n return subscription.get(name);\n }\n }\n return defaultValue;\n }\n\n // zeebe:calledElement\n if (type === ZEEBE_CALLED_ELEMENT) {\n const calledElement = findExtension$1(businessObject, 'zeebe:CalledElement');\n return calledElement ? calledElement.get(bindingProperty) : defaultValue;\n }\n\n // should never throw as templates are validated beforehand\n throw unknownBindingError$1(element, property);\n}\n\n/**\n * Cast a string value to a boolean if possible. Otherwise return the value.\n * Cannot always cast due to FEEL expressions.\n *\n * @param {string|boolean} value\n */\nfunction getBooleanPropertyValue(value) {\n switch (value) {\n case 'true':\n return true;\n case 'false':\n return false;\n }\n return value;\n}\nconst NO_OP = null;\nfunction setPropertyValue(bpmnFactory, commandStack, element, property, value) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const {\n binding\n } = property;\n const {\n name,\n type\n } = binding;\n let extensionElements;\n let propertyValue;\n const commands = [];\n const context = {\n element,\n property\n };\n\n // ensure message exists\n if (MESSAGE_BINDING_TYPES.includes(type)) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:Event')) {\n businessObject = businessObject.get('eventDefinitions')[0];\n }\n let message = findMessage(businessObject);\n if (!message) {\n message = bpmnFactory.create('bpmn:Message', {\n 'zeebe:modelerTemplate': getTemplateId$1(element)\n });\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: businessObject,\n properties: {\n messageRef: message\n }\n }\n });\n }\n businessObject = message;\n }\n\n // ensure extension elements\n if (EXTENSION_BINDING_TYPES$1.includes(type)) {\n extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', null, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n } else {\n commands.push(NO_OP);\n }\n }\n\n // property\n if (PROPERTY_BINDING_TYPES.includes(type)) {\n const propertyDescriptor = businessObject.$descriptor.propertiesByName[name];\n\n // if property not created yet\n if (!propertyDescriptor) {\n // make sure we create the property\n propertyValue = value || '';\n } else {\n const {\n type: propertyType\n } = propertyDescriptor;\n\n // do not override non-primitive types\n if (!PRIMITIVE_MODDLE_TYPES$1.includes(propertyType)) {\n throw new Error(`cannot set property of type <${propertyType}>`);\n }\n if (propertyType === 'Boolean') {\n propertyValue = !!value;\n } else if (propertyType === 'Integer') {\n propertyValue = parseInt(value, 10);\n if (isNaN(propertyValue)) {\n // do not set NaN value\n propertyValue = undefined;\n }\n } else {\n // make sure we don't remove the property\n propertyValue = value || '';\n }\n }\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(propertyValue)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: businessObject,\n properties: {\n [name]: propertyValue\n }\n }\n });\n } else {\n commands.push(NO_OP);\n }\n }\n\n // zeebe:taskDefinition\n if (TASK_DEFINITION_TYPES.includes(type)) {\n const oldTaskDefinition = findExtension$1(extensionElements, 'zeebe:TaskDefinition'),\n propertyName = getTaskDefinitionPropertyName(binding),\n properties = {\n [propertyName]: value || ''\n };\n if (oldTaskDefinition) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n properties,\n moddleElement: oldTaskDefinition\n }\n });\n } else {\n const newTaskDefinition = createTaskDefinition(properties, bpmnFactory);\n newTaskDefinition.$parent = businessObject;\n const values = extensionElements.get('values');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: extensionElements,\n properties: {\n values: [...values, newTaskDefinition]\n }\n }\n });\n }\n }\n if (IO_BINDING_TYPES$1.includes(type)) {\n let ioMapping = findExtension$1(extensionElements, 'zeebe:IoMapping');\n if (!ioMapping) {\n ioMapping = createElement('zeebe:IoMapping', null, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), ioMapping]\n }\n }\n });\n }\n\n // zeebe:Input\n if (type === ZEBBE_INPUT_TYPE) {\n const oldZeebeInputParameter = findInputParameter$1(ioMapping, binding);\n const values = ioMapping.get('inputParameters').filter(value => value !== oldZeebeInputParameter);\n\n // do not persist empty parameters when configured as \n if (shouldUpdate(value, property)) {\n const newZeebeInputParameter = createInputParameter$1(binding, value, bpmnFactory);\n values.push(newZeebeInputParameter);\n }\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: ioMapping,\n properties: {\n inputParameters: [...values]\n }\n }\n });\n }\n\n // zeebe:Output\n if (type === ZEEBE_OUTPUT_TYPE) {\n const oldZeebeOutputParameter = findOutputParameter$1(ioMapping, binding);\n const values = ioMapping.get('outputParameters').filter(value => value !== oldZeebeOutputParameter);\n\n // do not persist empty parameters when configured as \n if (shouldUpdate(value, property)) {\n const newZeebeOutputParameter = createOutputParameter$1(binding, value, bpmnFactory);\n values.push(newZeebeOutputParameter);\n }\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: ioMapping,\n properties: {\n 'outputParameters': [...values]\n }\n }\n });\n }\n }\n\n // zeebe:taskHeaders\n if (type === ZEEBE_TASK_HEADER_TYPE) {\n let taskHeaders = findExtension$1(extensionElements, 'zeebe:TaskHeaders');\n if (!taskHeaders) {\n taskHeaders = createElement('zeebe:TaskHeaders', null, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), taskHeaders]\n }\n }\n });\n }\n const oldTaskHeader = findTaskHeader(taskHeaders, binding);\n const values = taskHeaders.get('values').filter(value => value !== oldTaskHeader);\n\n // do not persist task headers with empty value\n if (!value) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: taskHeaders,\n properties: {\n values\n }\n }\n });\n } else {\n const newTaskHeader = createTaskHeader(binding, value, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: taskHeaders,\n properties: {\n values: [...values, newTaskHeader]\n }\n }\n });\n }\n }\n\n // zeebe:Property\n if (type === ZEEBE_PROPERTY_TYPE) {\n let zeebeProperties = findExtension$1(extensionElements, 'zeebe:Properties');\n if (!zeebeProperties) {\n zeebeProperties = createElement('zeebe:Properties', null, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), zeebeProperties]\n }\n }\n });\n }\n const oldZeebeProperty = findZeebeProperty(zeebeProperties, binding);\n const properties = zeebeProperties.get('properties').filter(property => property !== oldZeebeProperty);\n if (shouldUpdate(value, property)) {\n const newZeebeProperty = createZeebeProperty(binding, value, bpmnFactory);\n properties.push(newZeebeProperty);\n }\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: zeebeProperties,\n properties: {\n properties\n }\n }\n });\n }\n\n // bpmn:Message#zeebe:subscription#property\n if (type === MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE) {\n let subscription = findExtension$1(extensionElements, 'zeebe:Subscription');\n const properties = {\n [name]: value || ''\n };\n if (subscription) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n properties,\n moddleElement: subscription\n }\n });\n } else {\n subscription = createElement('zeebe:Subscription', properties, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), subscription]\n }\n }\n });\n }\n }\n\n // zeebe:calledElement\n if (type === ZEEBE_CALLED_ELEMENT) {\n let calledElement = findExtension$1(element, 'zeebe:CalledElement');\n const propertyName = binding.property;\n const properties = {\n [propertyName]: value || ''\n };\n if (calledElement) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n properties,\n moddleElement: calledElement\n }\n });\n } else {\n calledElement = createElement('zeebe:CalledElement', properties, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), calledElement]\n }\n }\n });\n }\n }\n if (commands.length) {\n const commandsToExecute = commands.filter(command => command !== NO_OP);\n commandsToExecute.length && commandStack.execute('element-templates.multi-command-executor', commandsToExecute);\n return;\n }\n\n // should never throw as templates are validated beforehand\n throw unknownBindingError$1(element, property);\n}\n\n// TODO(@barmac): fix translate usage (https://github.com/bpmn-io/bpmn-js-element-templates/pull/53#issuecomment-1906203270)\nfunction validateProperty(value, property, translate = defaultTranslate) {\n const {\n constraints = {},\n label\n } = property;\n const {\n maxLength,\n minLength,\n notEmpty\n } = constraints;\n if (notEmpty && isEmpty(value)) {\n return `${label} ${translate('must not be empty.')}`;\n }\n if (maxLength && (value || '').length > maxLength) {\n return `${label} ${translate('must have max length {maxLength}.', {\n maxLength\n })}`;\n }\n if (minLength && (value || '').length < minLength) {\n return `${label} ${translate('must have min length {minLength}.', {\n minLength\n })}`;\n }\n let {\n pattern\n } = constraints;\n if (pattern) {\n let message;\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(pattern)) {\n message = pattern.message;\n pattern = pattern.value;\n }\n if (!matchesPattern$1(value, pattern)) {\n if (message) {\n return `${label} ${translate(message)}`;\n }\n return `${label} ${translate('must match pattern {pattern}.', {\n pattern\n })}`;\n }\n }\n}\n\n// helpers\nfunction unknownBindingError$1(element, property) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const id = businessObject.get('id');\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n return new Error(`unknown binding <${type}> for element <${id}>, this should never happen`);\n}\nfunction isEmpty(value) {\n if (typeof value === 'string') {\n return !value.trim().length;\n }\n return value === undefined;\n}\nfunction matchesPattern$1(string, pattern) {\n return new RegExp(pattern).test(string);\n}\nfunction defaultTranslate(template, replacements) {\n replacements = replacements || {};\n return template.replace(/{([^}]+)}/g, function (_, key) {\n return replacements[key] || '{' + key + '}';\n });\n}\n\n/**\n * Based on conditions, remove properties from the template.\n */\nfunction applyConditions(element, elementTemplate) {\n const {\n properties\n } = elementTemplate;\n const filteredProperties = properties.filter(property => {\n return isPropertyAllowed(element, property) && isConditionMet(element, properties, property);\n });\n return {\n ...elementTemplate,\n properties: filteredProperties\n };\n}\nfunction isConditionMet(element, properties, property) {\n const {\n condition\n } = property;\n\n // If no condition is defined, return true.\n if (!condition) {\n return true;\n }\n\n // multiple (\"and\") conditions\n if (condition.allMatch) {\n const conditions = condition.allMatch;\n return conditions.every(condition => isSimpleConditionMet(element, properties, condition));\n }\n\n // single condition\n return isSimpleConditionMet(element, properties, condition);\n}\nfunction isSimpleConditionMet(element, properties, condition) {\n const {\n property,\n equals,\n oneOf,\n isActive\n } = condition;\n if (typeof isActive !== 'undefined') {\n const relatedCondition = properties.find(p => p.id === property);\n if (!relatedCondition) {\n return !isActive;\n }\n return isActive ? isConditionMet(element, properties, relatedCondition) : !isConditionMet(element, properties, relatedCondition);\n }\n const propertyValue = getValue(element, properties, property);\n if (hasProperty(condition, 'equals')) {\n return propertyValue === equals;\n }\n if (oneOf) {\n return oneOf.includes(propertyValue);\n }\n return false;\n}\nfunction getValue(element, properties, propertyId) {\n const property = properties.find(p => p.id === propertyId);\n if (!property) {\n return;\n }\n return getPropertyValue(element, property);\n}\nfunction isPropertyAllowed(element, property) {\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n if (type === 'bpmn:Message#zeebe:subscription#property' && binding.name === 'correlationKey' && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:StartEvent') && !(0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_16__.isEventSubProcess)(element.parent)) {\n return false;\n }\n return true;\n}\n\n// helpers //////////////////////\n\nfunction hasProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nclass TemplateElementFactory {\n constructor(bpmnFactory, elementFactory) {\n this._bpmnFactory = bpmnFactory;\n this._elementFactory = elementFactory;\n this._providers = {\n [PROPERTY_TYPE$1]: PropertyBindingProvider,\n [ZEEBE_TASK_DEFINITION_TYPE_TYPE]: TaskDefinitionTypeBindingProvider,\n [ZEEBE_TASK_DEFINITION]: TaskDefinitionTypeBindingProvider,\n [ZEBBE_PROPERTY_TYPE]: ZeebePropertiesProvider,\n [ZEBBE_INPUT_TYPE]: InputBindingProvider,\n [ZEEBE_OUTPUT_TYPE]: OutputBindingProvider,\n [ZEEBE_TASK_HEADER_TYPE]: TaskHeaderBindingProvider,\n [MESSAGE_PROPERTY_TYPE]: MessagePropertyBindingProvider,\n [MESSAGE_ZEEBE_SUBSCRIPTION_PROPERTY_TYPE]: MessageZeebeSubscriptionBindingProvider,\n [ZEEBE_CALLED_ELEMENT]: CalledElementBindingProvider\n };\n }\n\n /**\n * Create an element based on an element template.\n *\n * @param {ElementTemplate} template\n * @returns {djs.model.Base}\n */\n create(template) {\n const {\n properties\n } = template;\n\n // (1) base shape\n const element = this._createShape(template);\n\n // (2) apply template\n this._setModelerTemplate(element, template);\n\n // (3) apply icon\n if (hasIcon(template)) {\n this._setModelerTemplateIcon(element, template);\n }\n\n // (4) apply properties\n this._applyProperties(element, properties);\n return element;\n }\n _createShape(template) {\n const {\n appliesTo,\n elementType = {}\n } = template;\n const elementFactory = this._elementFactory;\n const attrs = {\n type: elementType.value || appliesTo[0]\n };\n\n // apply eventDefinition\n if (elementType.eventDefinition) {\n attrs.eventDefinitionType = elementType.eventDefinition;\n }\n const element = elementFactory.createShape(attrs);\n return element;\n }\n _ensureExtensionElements(element) {\n const bpmnFactory = this._bpmnFactory;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = bpmnFactory.create('bpmn:ExtensionElements', {\n values: []\n });\n extensionElements.$parent = businessObject;\n businessObject.set('extensionElements', extensionElements);\n }\n return extensionElements;\n }\n _setModelerTemplate(element, template) {\n const {\n id,\n version\n } = template;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n businessObject.set('zeebe:modelerTemplate', id);\n businessObject.set('zeebe:modelerTemplateVersion', version);\n }\n _setModelerTemplateIcon(element, template) {\n const {\n icon\n } = template;\n const {\n contents\n } = icon;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n businessObject.set('zeebe:modelerTemplateIcon', contents);\n }\n\n /**\n * Apply properties to a given element.\n *\n * @param {djs.model.Base} element\n * @param {Array} properties\n */\n _applyProperties(element, properties) {\n const processedProperties = [];\n properties.forEach(property => this._applyProperty(element, property, properties, processedProperties));\n }\n\n /**\n * Apply a property and its parent properties to an element based on conditions.\n *\n * @param {djs.model.Base} element\n * @param {Object} property\n * @param {Array} properties\n * @param {Array} processedProperties\n */\n _applyProperty(element, property, properties, processedProperties) {\n // skip if already processed\n if (processedProperties.includes(property)) {\n return;\n }\n\n // apply dependant property first if not already applied\n const dependentProperties = findDependentProperties(property, properties);\n dependentProperties.forEach(property => this._applyProperty(element, property, properties, processedProperties));\n\n // check condition and apply property if condition is met\n if (isConditionMet(element, properties, property)) {\n this._bindProperty(property, element);\n }\n processedProperties.push(property);\n }\n\n /**\n * Bind property to element.\n * @param {Object} property\n * @param {djs.Model.Base} element\n */\n _bindProperty(property, element) {\n const {\n binding\n } = property;\n const {\n type: bindingType\n } = binding;\n const bindingProvider = this._providers[bindingType];\n bindingProvider.create(element, {\n property,\n bpmnFactory: this._bpmnFactory\n });\n }\n}\nTemplateElementFactory.$inject = ['bpmnFactory', 'elementFactory'];\n\n// helper ////////////////\n\nfunction hasIcon(template) {\n const {\n icon\n } = template;\n return !!(icon && icon.contents);\n}\nfunction findDependentProperties(property, properties) {\n const {\n condition\n } = property;\n if (!condition) {\n return [];\n }\n const dependentProperty = findProperyById(properties, condition.property);\n if (dependentProperty) {\n return [dependentProperty];\n }\n return [];\n}\nfunction findProperyById(properties, id) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(properties, function (property) {\n return property.id === id;\n });\n}\n\nvar createModule = {\n __init__: ['templateElementFactory'],\n templateElementFactory: ['type', TemplateElementFactory]\n};\n\n/**\n * Checks the conditions of an element template and sets/resets the\n * corresponding properties on the element.\n */\nclass ConditionalBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(eventBus, elementTemplates, commandStack, bpmnFactory, injector) {\n super(eventBus);\n this._eventBus = eventBus;\n this._elementTemplates = elementTemplates;\n this._commandStack = commandStack;\n this._bpmnFactory = bpmnFactory;\n this._injector = injector;\n\n // (1) save pre-conditional state before updating a property\n this.preExecute(['element.updateProperties', 'element.updateModdleProperties', 'element.move'], this._saveConditionalState, true, this);\n\n // (2) check if we need to apply post-conditional updates\n //\n // if [additional bindings activate] then\n // (re-)trigger setting the template\n // else\n // else we're done\n //\n this.postExecute(['element.updateProperties', 'element.updateModdleProperties', 'propertiesPanel.zeebe.changeTemplate', 'element.move'], this._applyConditions, true, this);\n\n // (3) set conditions before changing the template\n this.preExecute(['propertiesPanel.zeebe.changeTemplate'], this._ensureConditional, true, this);\n }\n _saveConditionalState(context) {\n const {\n element\n } = context;\n const template = this._elementTemplates.get(element);\n if (!template) {\n return;\n }\n context.oldTemplateWithConditions = applyConditions(element, template);\n }\n _applyConditions(context) {\n const {\n element,\n newTemplate,\n oldTemplateWithConditions\n } = context;\n const template = this._elementTemplates.get(element);\n\n // new Template is persisted before applying default values,\n // new conditions might apply after the defaults are present.\n const oldTemplate = oldTemplateWithConditions || newTemplate;\n if (!template || !oldTemplate) {\n return;\n }\n const newTemplateWithConditions = applyConditions(element, template);\n\n // verify that new bindings were activated\n if (!hasDifferentPropertyBindings(newTemplateWithConditions, oldTemplate)) {\n return;\n }\n\n // do another pass to apply further conditional bindings\n // newTemplate will always be the original template; it is filtered\n // at a later step (3)\n const changeContext = {\n element,\n newTemplate: template,\n oldTemplate\n };\n this._commandStack.execute('propertiesPanel.zeebe.changeTemplate', changeContext);\n }\n _ensureConditional(context) {\n const {\n element,\n newTemplate\n } = context;\n if (!newTemplate) {\n return;\n }\n\n // ensure conditions are applied before changing the template.\n // `newTemplate` will always be the original template.\n context.newTemplate = applyConditions(element, newTemplate);\n }\n}\nConditionalBehavior.$inject = ['eventBus', 'elementTemplates', 'commandStack', 'bpmnFactory', 'injector'];\n\n// helpers\n\nfunction hasDifferentPropertyBindings(sourceTemplate, targetTemplate) {\n return hasNewProperties(sourceTemplate, targetTemplate) || hasRemovedProperties(sourceTemplate, targetTemplate);\n}\nfunction hasNewProperties(sourceTemplate, targetTemplate) {\n let properties = targetTemplate.properties;\n return properties.some(targetProp => !sourceTemplate.properties.find(sourceProp => compareProps(sourceProp, targetProp)));\n}\nfunction hasRemovedProperties(oldTemplate, newTemplate) {\n const oldProperties = getMissingProperties(newTemplate, oldTemplate);\n\n // ensure XML properties are mantained for properties with\n // different conditions but same bindings\n return oldProperties.some(property => !findPropertyWithBinding(newTemplate, property));\n}\nfunction getMissingProperties(sourceTemplate, targetTemplate) {\n let properties = targetTemplate.properties;\n return properties.filter(targetProp => !sourceTemplate.properties.find(sourceProp => compareProps(sourceProp, targetProp)));\n}\nfunction compareProps(sourceProp, targetProp) {\n return areBindingsEqual(sourceProp.binding, targetProp.binding) && equals(sourceProp.condition, targetProp.condition);\n}\nfunction findPropertyWithBinding(template, prop1) {\n return template.properties.some(prop2 => areBindingsEqual(prop1.binding, prop2.binding));\n}\nfunction normalizeReplacer$1(key, value) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(value)) {\n const keys = Object.keys(value).sort();\n return keys.reduce((obj, key) => {\n obj[key] = value[key];\n return obj;\n }, {});\n }\n return value;\n}\nfunction areBindingsEqual(binding1, binding2) {\n binding1 = normalizeBinding(binding1);\n binding2 = normalizeBinding(binding2);\n return equals(binding1, binding2);\n}\n\n/**\n * Convert deprecated binding type to new type.\n */\nfunction normalizeBinding(binding) {\n if (binding.type === ZEEBE_TASK_DEFINITION_TYPE_TYPE) {\n return {\n ...binding,\n type: ZEEBE_TASK_DEFINITION,\n property: 'type'\n };\n }\n return binding;\n}\nfunction equals(a, b) {\n return JSON.stringify(a, normalizeReplacer$1) === JSON.stringify(b, normalizeReplacer$1);\n}\n\n/**\n * This Behavior checks if the new element's type is in\n * the list of elements the template applies to and unlinks\n * it if not.\n */\nlet ReplaceBehavior$1 = class ReplaceBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(elementTemplates, injector) {\n super(injector.get('eventBus'));\n this.postExecuted('shape.replace', function (e) {\n var context = e.context,\n oldShape = context.oldShape,\n oldBo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(oldShape),\n newShape = context.newShape,\n newBo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(newShape);\n if (!oldBo.modelerTemplate) {\n return;\n }\n const template = newBo.modelerTemplate;\n const version = newBo.modelerTemplateVersion;\n const elementTemplate = elementTemplates.get(template, version);\n if (!elementTemplate) {\n elementTemplates.unlinkTemplate(newShape);\n return;\n }\n const {\n appliesTo,\n elementType\n } = elementTemplate;\n if (elementType) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newShape, elementType.value) || shouldUnlinkEvent(newShape, elementType)) {\n elementTemplates.unlinkTemplate(newShape);\n }\n return;\n }\n const allowed = appliesTo.reduce((allowed, type) => {\n return allowed || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newBo, type);\n }, false);\n if (!allowed) {\n elementTemplates.unlinkTemplate(newShape);\n }\n });\n }\n};\nReplaceBehavior$1.$inject = ['elementTemplates', 'injector'];\nfunction shouldUnlinkEvent(newShape, elementType) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newShape, 'bpmn:Event')) {\n return false;\n }\n const {\n eventDefinition\n } = elementType,\n bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(newShape),\n eventDefinitions = bo.get('eventDefinitions');\n if (!eventDefinition) {\n return eventDefinitions.length !== 0;\n }\n return !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(eventDefinitions[0], eventDefinition);\n}\n\n/**\n * Restores the original order of the template properties\n * on the moddle element.\n */\nclass UpdateTemplatePropertiesOrder extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(eventBus, elementTemplates, commandStack, bpmnFactory) {\n super(eventBus);\n this._eventBus = eventBus;\n this._elementTemplates = elementTemplates;\n this._commandStack = commandStack;\n this._bpmnFactory = bpmnFactory;\n this.postExecute(['element.updateProperties', 'element.updateModdleProperties'], this._updatePropertiesOrder, true, this);\n }\n _updatePropertiesOrder(context) {\n const {\n element\n } = context;\n const template = this._elementTemplates.get(element);\n const businessObject = element.businessObject;\n const commands = [];\n if (!template) {\n return;\n }\n const templateProperties = applyConditions(element, template).properties;\n\n // zeebe:Property\n const zeebeProperties = findExtension$1(businessObject, 'zeebe:Properties');\n if (zeebeProperties) {\n this._updateZeebePropertiesOrder(zeebeProperties, templateProperties, commands, context);\n }\n\n // zeebe:IoMapping\n const ioMapping = findExtension$1(businessObject, 'zeebe:IoMapping');\n if (ioMapping) {\n // zeebe:Input\n this._updateInputOrder(ioMapping, templateProperties, commands, context);\n\n // zeebe:Output\n this._updateOutputOrder(ioMapping, templateProperties, commands, context);\n }\n\n // zeebe:TaskHeaders\n const taskHeaders = findExtension$1(businessObject, 'zeebe:TaskHeaders');\n if (taskHeaders) {\n this._updateTaskHeadersOrder(taskHeaders, templateProperties, commands, context);\n }\n if (commands.length) {\n const commandsToExecute = commands.filter(command => command !== null);\n commandsToExecute.length && this._commandStack.execute('element-templates.multi-command-executor', commandsToExecute);\n return;\n }\n }\n _updateZeebePropertiesOrder(zeebeProperties, templateProperties, commands, context) {\n const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:property' && prop.binding.name === propertyToFind.get('name'));\n const properties = zeebeProperties.get('properties');\n if (properties.length < 1) return;\n let newPropertiesOrder = [...properties];\n sortProperties(newPropertiesOrder, findIndex, templateProperties);\n if (!arrayEquals(newPropertiesOrder, properties)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: zeebeProperties,\n properties: {\n properties: newPropertiesOrder\n }\n }\n });\n }\n }\n _updateInputOrder(ioMapping, templateProperties, commands, context) {\n const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:input' && prop.binding.name === propertyToFind.get('target'));\n const inputParameters = ioMapping.get('inputParameters');\n if (inputParameters.length < 1) return;\n let newInputOrder = [...inputParameters];\n sortProperties(newInputOrder, findIndex, templateProperties);\n if (!arrayEquals(newInputOrder, inputParameters)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: ioMapping,\n properties: {\n inputParameters: newInputOrder\n }\n }\n });\n }\n }\n _updateOutputOrder(ioMapping, templateProperties, commands, context) {\n const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:output' && prop.binding.source === propertyToFind.get('source'));\n const outputParameters = ioMapping.get('outputParameters');\n if (outputParameters.length < 1) return;\n let newOutputOrder = [...outputParameters];\n sortProperties(newOutputOrder, findIndex, templateProperties);\n if (!arrayEquals(newOutputOrder, outputParameters)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: ioMapping,\n properties: {\n outputParameters: newOutputOrder\n }\n }\n });\n }\n }\n _updateTaskHeadersOrder(taskHeaders, templateProperties, commands, context) {\n const findIndex = (properties, propertyToFind) => properties.findIndex(prop => prop.binding.type == 'zeebe:taskHeader' && prop.binding.key === propertyToFind.get('key'));\n const headers = taskHeaders.get('zeebe:values');\n if (headers.length < 1) return;\n let newHeadersOrder = [...headers];\n sortProperties(newHeadersOrder, findIndex, templateProperties);\n if (!arrayEquals(newHeadersOrder, headers)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n ...context,\n moddleElement: taskHeaders,\n properties: {\n values: newHeadersOrder\n }\n }\n });\n }\n }\n}\nUpdateTemplatePropertiesOrder.$inject = ['eventBus', 'elementTemplates', 'commandStack', 'bpmnFactory'];\n\n// helpers\n\nfunction normalizeReplacer(key, value) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(value)) {\n const keys = Object.keys(value).sort();\n return keys.reduce((obj, key) => {\n obj[key] = value[key];\n return obj;\n }, {});\n }\n return value;\n}\nfunction objectEquals(a, b) {\n return JSON.stringify(a, normalizeReplacer) === JSON.stringify(b, normalizeReplacer);\n}\nfunction arrayEquals(a, b) {\n return a.every((element, idx) => objectEquals(element, b[idx]));\n}\nfunction sortProperties(array, findIndex, templateProperties) {\n return array.sort((a, b) => {\n const aIndex = findIndex(templateProperties, a);\n const bIndex = findIndex(templateProperties, b);\n return aIndex - bIndex;\n });\n}\n\n/**\n * Handles referenced elements.\n */\nclass ReferencedElementBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(eventBus, elementTemplates, modeling, injector, moddleCopy, bpmnFactory) {\n super(eventBus);\n this._eventBus = eventBus;\n this._elementTemplates = elementTemplates;\n this._modeling = modeling;\n this._injector = injector;\n this.postExecuted(['element.updateProperties', 'element.updateModdleProperties'], this._handlePropertiesUpdate, true, this);\n this.postExecuted('shape.replace', this._handleReplacement, true, this);\n this.postExecuted('shape.delete', this._handleRemoval, true, this);\n\n // copy templated root element when pasting\n eventBus.on('copyPaste.pasteElement', function (context) {\n const {\n referencedRootElement\n } = context.descriptor;\n if (!referencedRootElement) {\n return;\n }\n if (!getTemplateId$1(referencedRootElement)) {\n return;\n }\n context.descriptor.referencedRootElement = moddleCopy.copyElement(referencedRootElement, bpmnFactory.create(referencedRootElement.$type));\n });\n }\n\n /**\n * Unlink referenced element when template is unlinked.\n */\n _handlePropertiesUpdate(context) {\n const {\n element,\n properties\n } = context;\n if (!canHaveReferencedElement(element)) {\n return;\n }\n if (!(TEMPLATE_ID_ATTR$1 in properties) || (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(properties[TEMPLATE_ID_ATTR$1])) {\n return;\n }\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const message = findMessage(bo);\n if (message && getTemplateId$1(message)) {\n this._modeling.updateModdleProperties(element, message, {\n [TEMPLATE_ID_ATTR$1]: null\n });\n }\n }\n\n /**\n * Remove referenced element when template is removed.\n * Keep referenced element when template is replaced.\n */\n _handleReplacement(context) {\n const {\n oldShape,\n newShape\n } = context;\n const oldTemplate = getTemplateId$1(oldShape),\n newTemplate = getTemplateId$1(newShape);\n if (!canHaveReferencedElement(oldShape) || !oldTemplate) {\n return;\n }\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(oldShape);\n const message = findMessage(bo);\n if (!message || !getTemplateId$1(message)) {\n return;\n }\n if (!canHaveReferencedElement(newShape) || !newTemplate) {\n removeRootElement(message, this._injector);\n return;\n }\n this._addMessage(newShape, message);\n }\n _handleRemoval(context) {\n const {\n shape\n } = context;\n if (isLabel(shape)) {\n return;\n }\n if (!canHaveReferencedElement(shape)) {\n return;\n }\n if (!getTemplateId$1(shape)) {\n return;\n }\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(shape);\n const message = findMessage(bo);\n if (message && getTemplateId$1(message)) {\n removeRootElement(message, this._injector);\n }\n }\n _addMessage(element, message) {\n const bo = getReferringElement(element);\n this._modeling.updateModdleProperties(element, bo, {\n 'messageRef': message\n });\n }\n}\nReferencedElementBehavior.$inject = ['eventBus', 'elementTemplates', 'modeling', 'injector', 'moddleCopy', 'bpmnFactory'];\nfunction canHaveReferencedElement(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(element, ['bpmn:ReceiveTask', 'bpmn:SendTask', 'bpmn:Event']);\n}\nfunction isLabel(element) {\n return element.type === 'label';\n}\n\n/**\n * Handles generated value properties.\n */\nclass GeneratedValueBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(eventBus, elementTemplates, modeling, commandStack, bpmnFactory) {\n super(eventBus);\n this._eventBus = eventBus;\n this._elementTemplates = elementTemplates;\n this._modeling = modeling;\n this.preExecute('shape.create', context => {\n const element = context.shape;\n const template = elementTemplates.get(element);\n if (!template) {\n return;\n }\n const generatedProps = template.properties.filter(p => p.generatedValue);\n generatedProps.forEach(p => {\n if (!getPropertyValue(element, p)) {\n return;\n }\n const value = getDefaultValue(p);\n setPropertyValue(bpmnFactory, commandStack, element, p, value);\n });\n }, true);\n }\n}\nGeneratedValueBehavior.$inject = ['eventBus', 'elementTemplates', 'modeling', 'commandStack', 'bpmnFactory'];\n\n/**\n * Enforces no variable propagation for templated call activities.\n */\nclass CalledElementBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n /**\n * @param {*} eventBus\n * @param {*} modeling\n * @param {import('../ElementTemplates').default} elementTemplates\n */\n constructor(eventBus, modeling, elementTemplates) {\n super(eventBus);\n this._modeling = modeling;\n this._elementTemplates = elementTemplates;\n this.postExecuted(['element.updateProperties', 'element.updateModdleProperties'], this._ensureNoPropagation, true, this);\n }\n _ensureNoPropagation(context) {\n const {\n element\n } = context;\n if (!this._elementTemplates.get(element)) {\n return;\n }\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:CallActivity')) {\n return;\n }\n const calledElement = findExtension$1(element, 'zeebe:CalledElement');\n if (!calledElement) {\n return;\n }\n for (const property of ['propagateAllChildVariables', 'propagateAllParentVariables']) {\n if (calledElement.get(property) !== false) {\n this._modeling.updateModdleProperties(element, calledElement, {\n [property]: false\n });\n }\n }\n }\n}\nCalledElementBehavior.$inject = ['eventBus', 'modeling', 'elementTemplates'];\n\nvar behaviorModule$1 = {\n __init__: ['elementTemplatesReplaceBehavior', 'elementTemplatesConditionalBehavior', 'elementTemplatesGeneratedValueBehavior', 'elementTemplatesReferencedElementBehavior', 'elementTemplatesUpdatePropertiesOrderBehavior', 'elementTemplatesCalledElementBehavior'],\n elementTemplatesReplaceBehavior: ['type', ReplaceBehavior$1],\n elementTemplatesConditionalBehavior: ['type', ConditionalBehavior],\n elementTemplatesGeneratedValueBehavior: ['type', GeneratedValueBehavior],\n elementTemplatesReferencedElementBehavior: ['type', ReferencedElementBehavior],\n elementTemplatesUpdatePropertiesOrderBehavior: ['type', UpdateTemplatePropertiesOrder],\n elementTemplatesCalledElementBehavior: ['type', CalledElementBehavior]\n};\n\nvar coreModule$1 = {\n __depends__: [commandsModule$1, behaviorModule$1, createModule],\n __init__: ['elementTemplatesLoader'],\n elementTemplates: ['type', ElementTemplates],\n elementTemplatesLoader: ['type', ElementTemplatesLoader]\n};\n\nfunction getVersionOrDateFromTemplate(template) {\n const metadata = template.metadata,\n version = template.version;\n if (metadata) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(metadata.created)) {\n return toDateString(metadata.created);\n } else if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(metadata.updated)) {\n return toDateString(metadata.updated);\n }\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(version)) {\n return null;\n }\n return version;\n}\n\n// helper ///////////\n\n/**\n * Example: 01.01.1900 01:01\n *\n * @param {number} timestamp\n * @returns {string}\n */\nfunction toDateString(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = withLeadingZeros(String(date.getMonth() + 1));\n const day = withLeadingZeros(String(date.getDate()));\n const hours = withLeadingZeros(String(date.getHours()));\n const minutes = withLeadingZeros(String(date.getMinutes()));\n return day + '.' + month + '.' + year + ' ' + hours + ':' + minutes;\n}\nfunction withLeadingZeros(string) {\n return leftPad(string, 2, '0');\n}\nfunction leftPad(string, length, character) {\n while (string.length < length) {\n string = character + string;\n }\n return string;\n}\n\nfunction createElementTemplatesGroup(props = {}) {\n const {\n getTemplateId: getTemplateId$1 = getTemplateId\n } = props;\n return function ElementTemplatesGroup(props) {\n const {\n id,\n label,\n element,\n entries = []\n } = props;\n const [open, setOpen] = (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.useLayoutState)(['groups', id, 'open'], false);\n const empty = !entries.length;\n const toggleOpen = () => !empty && setOpen(!open);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n class: \"bio-properties-panel-group bio-properties-panel-templates-group\",\n \"data-group-id\": 'group-' + id,\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-group-header', {\n empty,\n open: open && !empty\n }),\n onClick: toggleOpen,\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n title: label,\n class: \"bio-properties-panel-group-header-title\",\n children: label\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n class: \"bio-properties-panel-group-header-buttons\",\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(TemplateGroupButtons, {\n element: element,\n getTemplateId: getTemplateId$1\n }), !empty && (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(SectionToggle, {\n open: open\n })]\n })]\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: classnames__WEBPACK_IMPORTED_MODULE_4___default()('bio-properties-panel-group-entries', {\n open: open && !empty\n }),\n children: entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n return (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_7__.createElement)(Component, {\n ...entry,\n key: id,\n element: element\n });\n })\n })]\n });\n };\n}\nfunction SectionToggle({\n open\n}) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.HeaderButton, {\n title: \"Toggle section\",\n class: \"bio-properties-panel-arrow\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ArrowIcon, {\n class: open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right'\n })\n });\n}\n\n/**\n *\n * @param {object} props\n * @param {object} props.element\n * @param {function} props.getTemplateId\n * @param {function} props.unlinkTemplate\n * @param {function} props.updateTemplate\n */\nfunction TemplateGroupButtons({\n element,\n getTemplateId\n}) {\n const elementTemplates = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('elementTemplates');\n const templateState = getTemplateState(elementTemplates, element, getTemplateId);\n if (templateState.type === 'NO_TEMPLATE') {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(SelectEntryTemplate, {\n element: element\n });\n } else if (templateState.type === 'KNOWN_TEMPLATE') {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(AppliedTemplate, {\n element: element\n });\n } else if (templateState.type === 'UNKNOWN_TEMPLATE') {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(UnknownTemplate, {\n element: element\n });\n } else if (templateState.type === 'DEPRECATED_TEMPLATE') {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DeprecatedTemplate, {\n element: element,\n templateState: templateState\n });\n } else if (templateState.type === 'OUTDATED_TEMPLATE') {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(OutdatedTemplate, {\n element: element,\n templateState: templateState\n });\n }\n}\nfunction SelectEntryTemplate({\n element\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const eventBus = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('eventBus');\n const selectTemplate = () => eventBus.fire('elementTemplates.select', {\n element\n });\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.HeaderButton, {\n title: \"Select a template\",\n class: \"bio-properties-panel-select-template-button\",\n onClick: selectTemplate,\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.CreateIcon, {}), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n children: translate('Select')\n })]\n });\n}\nfunction AppliedTemplate({\n element\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate'),\n elementTemplates = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('elementTemplates');\n const menuItems = [{\n entry: translate('Unlink'),\n action: () => elementTemplates.unlinkTemplate(element)\n }, {\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(RemoveTemplate, {}),\n action: () => elementTemplates.removeTemplate(element)\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.DropdownButton, {\n menuItems: menuItems,\n class: \"bio-properties-panel-applied-template-button\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.HeaderButton, {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n children: translate('Applied')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ArrowIcon, {\n class: \"bio-properties-panel-arrow-down\"\n })]\n })\n });\n}\nfunction RemoveTemplate() {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n class: \"bio-properties-panel-remove-template\",\n children: translate('Remove')\n });\n}\nfunction UnknownTemplate({\n element\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate'),\n elementTemplates = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('elementTemplates');\n const menuItems = [{\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(NotFoundText, {})\n }, {\n separator: true\n }, {\n entry: translate('Unlink'),\n action: () => elementTemplates.unlinkTemplate(element)\n }, {\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(RemoveTemplate, {}),\n action: () => elementTemplates.removeTemplate(element)\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.DropdownButton, {\n menuItems: menuItems,\n class: \"bio-properties-panel-template-not-found\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.HeaderButton, {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n children: translate('Not found')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ArrowIcon, {\n class: \"bio-properties-panel-arrow-down\"\n })]\n })\n });\n}\nfunction NotFoundText() {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-template-not-found-text\",\n children: translate('The template applied was not found. Therefore, its properties cannot be shown. Unlink to access the data.')\n });\n}\n\n/**\n *\n * @param {object} props\n * @param {object} element\n * @param {UnknownTemplate} templateState\n * @param {function} unlinkTemplate\n * @param {function} updateTemplate\n */\nfunction OutdatedTemplate({\n element,\n templateState\n}) {\n const {\n newerTemplate\n } = templateState;\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate'),\n elementTemplates = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('elementTemplates');\n const menuItems = [{\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(UpdateAvailableText, {\n newerTemplate: newerTemplate\n })\n }, {\n separator: true\n }, {\n entry: translate('Update'),\n action: () => elementTemplates.applyTemplate(element, newerTemplate)\n }, {\n entry: translate('Unlink'),\n action: () => elementTemplates.unlinkTemplate(element)\n }, {\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(RemoveTemplate, {}),\n action: () => elementTemplates.removeTemplate(element)\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.DropdownButton, {\n menuItems: menuItems,\n class: \"bio-properties-panel-template-update-available\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.HeaderButton, {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n children: translate('Update available')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ArrowIcon, {\n class: \"bio-properties-panel-arrow-down\"\n })]\n })\n });\n}\nfunction UpdateAvailableText({\n newerTemplate\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const text = translate('A new version of the template is available: {templateVersion}', {\n templateVersion: getVersionOrDateFromTemplate(newerTemplate)\n });\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-template-update-available-text\",\n children: text\n });\n}\nfunction DeprecatedTemplate({\n element,\n templateState\n}) {\n const {\n template\n } = templateState;\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate'),\n elementTemplates = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('elementTemplates');\n const menuItems = [{\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DeprecationWarning, {\n template: template\n })\n }, {\n separator: true\n }, {\n entry: translate('Unlink'),\n action: () => elementTemplates.unlinkTemplate(element)\n }, {\n entry: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(RemoveTemplate, {}),\n action: () => elementTemplates.removeTemplate(element)\n }];\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.DropdownButton, {\n menuItems: menuItems,\n class: \"bio-properties-panel-deprecated-template-button\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.HeaderButton, {\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n children: translate('Deprecated')\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ArrowIcon, {\n class: \"bio-properties-panel-arrow-down\"\n })]\n })\n });\n}\nfunction DeprecationWarning({\n template\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const {\n message = translate('This template is deprecated.'),\n documentationRef\n } = template.deprecated;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n class: \"bio-properties-panel-deprecated-template-text\",\n children: [message, documentationRef && (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {\n children: [\"\\xA0\", (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"a\", {\n href: documentationRef,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(DocumentationIcon, {})\n })]\n })]\n });\n}\nfunction DocumentationIcon() {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"svg\", {\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 12 12\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M10.6368 10.6375V5.91761H11.9995V10.6382C11.9995 10.9973 11.8623 11.3141 11.5878 11.5885C11.3134 11.863 10.9966 12.0002 10.6375 12.0002H1.36266C0.982345 12.0002 0.660159 11.8681 0.396102 11.6041C0.132044 11.34 1.52588e-05 11.0178 1.52588e-05 10.6375V1.36267C1.52588e-05 0.98236 0.132044 0.660173 0.396102 0.396116C0.660159 0.132058 0.982345 2.95639e-05 1.36266 2.95639e-05H5.91624V1.36267H1.36266V10.6375H10.6368ZM12 0H7.2794L7.27873 1.36197H9.68701L3.06507 7.98391L4.01541 8.93425L10.6373 2.31231V4.72059H12V0Z\",\n fill: \"#818798\"\n })\n });\n}\n\n// helper //////\n\n/**\n * Determine template state in the current element.\n *\n * @param {object} elementTemplates\n * @param {object} element\n * @param {function} getTemplateId\n * @returns {TemplateState}\n */\nfunction getTemplateState(elementTemplates, element, getTemplateId) {\n const templateId = getTemplateId(element),\n template = elementTemplates.get(element);\n if (!templateId) {\n return {\n type: 'NO_TEMPLATE'\n };\n }\n if (!template) {\n return {\n type: 'UNKNOWN_TEMPLATE',\n templateId\n };\n }\n if (template.deprecated) {\n return {\n type: 'DEPRECATED_TEMPLATE',\n template\n };\n }\n const newerTemplate = elementTemplates.getLatest(templateId, {\n deprecated: true\n })[0];\n if (newerTemplate !== template) {\n return {\n type: 'OUTDATED_TEMPLATE',\n template,\n newerTemplate\n };\n }\n return {\n type: 'KNOWN_TEMPLATE',\n template\n };\n}\n\nfunction TemplateProps({\n element,\n elementTemplates\n}) {\n const template = elementTemplates.get(element);\n if (!template) {\n return [];\n }\n return [{\n id: 'template-name',\n component: TemplateName,\n template\n }, {\n id: 'template-version',\n component: TemplateVersion,\n template\n }, {\n id: 'template-description',\n component: TemplateDescription,\n template\n }].filter(entry => !!entry.component);\n}\nfunction TemplateName({\n id,\n template\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(TextEntry, {\n id: id,\n label: translate('Name'),\n content: template.name\n });\n}\nfunction TemplateVersion({\n id,\n template\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const version = getVersionOrDateFromTemplate(template);\n return version ? (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(TextEntry, {\n id: id,\n label: translate('Version'),\n content: version\n }) : null;\n}\nfunction TemplateDescription({\n id,\n template\n}) {\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const {\n description\n } = template;\n return description ? (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(TextEntry, {\n id: id,\n label: translate('Description'),\n content: template.description\n }) : null;\n}\nfunction TextEntry({\n id,\n label,\n content\n}) {\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n \"data-entry-id\": id,\n class: \"bio-properties-panel-entry bio-properties-panel-text-entry\",\n children: [(0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n class: \"bio-properties-panel-label\",\n children: label\n }), (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n class: \"bio-properties-panel-text-entry__content\",\n children: content\n })]\n });\n}\n\nvar e,\n o = {};\nfunction n(r, t, e) {\n if (3 === r.nodeType) {\n var o = \"textContent\" in r ? r.textContent : r.nodeValue || \"\";\n if (!1 !== n.options.trim) {\n var a = 0 === t || t === e.length - 1;\n if ((!(o = o.match(/^[\\s\\n]+$/g) && \"all\" !== n.options.trim ? \" \" : o.replace(/(^[\\s\\n]+|[\\s\\n]+$)/g, \"all\" === n.options.trim || a ? \"\" : \" \")) || \" \" === o) && e.length > 1 && a) return null;\n }\n return o;\n }\n if (1 !== r.nodeType) return null;\n var p = String(r.nodeName).toLowerCase();\n if (\"script\" === p && !n.options.allowScripts) return null;\n var l,\n s,\n u = n.h(p, function (r) {\n var t = r && r.length;\n if (!t) return null;\n for (var e = {}, o = 0; o < t; o++) {\n var a = r[o],\n i = a.name,\n p = a.value;\n \"on\" === i.substring(0, 2) && n.options.allowEvents && (p = new Function(p)), e[i] = p;\n }\n return e;\n }(r.attributes), (s = (l = r.childNodes) && Array.prototype.map.call(l, n).filter(i)) && s.length ? s : null);\n return n.visitor && n.visitor(u), u;\n}\nvar a,\n i = function (r) {\n return r;\n },\n p = {};\nfunction l(r) {\n var t = (r.type || \"\").toLowerCase(),\n e = l.map;\n e && e.hasOwnProperty(t) ? (r.type = e[t], r.props = Object.keys(r.props || {}).reduce(function (t, e) {\n var o;\n return t[(o = e, o.replace(/-(.)/g, function (r, t) {\n return t.toUpperCase();\n }))] = r.props[e], t;\n }, {})) : r.type = t.replace(/[^a-z0-9-]/i, \"\");\n}\nvar Markup = (function (t) {\n function i() {\n t.apply(this, arguments);\n }\n return t && (i.__proto__ = t), (i.prototype = Object.create(t && t.prototype)).constructor = i, i.setReviver = function (r) {\n a = r;\n }, i.prototype.shouldComponentUpdate = function (r) {\n var t = this.props;\n return r.wrap !== t.wrap || r.type !== t.type || r.markup !== t.markup;\n }, i.prototype.setComponents = function (r) {\n if (this.map = {}, r) for (var t in r) if (r.hasOwnProperty(t)) {\n var e = t.replace(/([A-Z]+)([A-Z][a-z0-9])|([a-z0-9]+)([A-Z])/g, \"$1$3-$2$4\").toLowerCase();\n this.map[e] = r[t];\n }\n }, i.prototype.render = function (t) {\n var i = t.wrap;\n void 0 === i && (i = !0);\n var s,\n u = t.type,\n c = t.markup,\n m = t.components,\n v = t.reviver,\n f = t.onError,\n d = t[\"allow-scripts\"],\n h$1 = t[\"allow-events\"],\n y = t.trim,\n w = function (r, t) {\n var e = {};\n for (var o in r) Object.prototype.hasOwnProperty.call(r, o) && -1 === t.indexOf(o) && (e[o] = r[o]);\n return e;\n }(t, [\"wrap\", \"type\", \"markup\", \"components\", \"reviver\", \"onError\", \"allow-scripts\", \"allow-events\", \"trim\"]),\n C = v || this.reviver || this.constructor.prototype.reviver || a || _bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_7__.h;\n this.setComponents(m);\n var g = {\n allowScripts: d,\n allowEvents: h$1,\n trim: y\n };\n try {\n s = function (r, t, a, i, s) {\n var u = function (r, t) {\n var o,\n n,\n a,\n i,\n p = \"html\" === t ? \"text/html\" : \"application/xml\";\n \"html\" === t ? (i = \"body\", a = \"\\n\" + r + \"\") : (i = \"xml\", a = '\\n' + r + \" \");\n try {\n o = new DOMParser().parseFromString(a, p);\n } catch (r) {\n n = r;\n }\n if (o || \"html\" !== t || ((o = e || (e = function () {\n if (document.implementation && document.implementation.createHTMLDocument) return document.implementation.createHTMLDocument(\"\");\n var r = document.createElement(\"iframe\");\n return r.style.cssText = \"position:absolute; left:0; top:-999em; width:1px; height:1px; overflow:hidden;\", r.setAttribute(\"sandbox\", \"allow-forms\"), document.body.appendChild(r), r.contentWindow.document;\n }())).open(), o.write(a), o.close()), o) {\n var l = o.getElementsByTagName(i)[0],\n s = l.firstChild;\n return r && !s && (l.error = \"Document parse failed.\"), s && \"parsererror\" === String(s.nodeName).toLowerCase() && (s.removeChild(s.firstChild), s.removeChild(s.lastChild), l.error = s.textContent || s.nodeValue || n || \"Unknown error\", l.removeChild(s)), l;\n }\n }(r, t);\n if (u && u.error) throw new Error(u.error);\n var c = u && u.body || u;\n l.map = i || p;\n var m = c && function (r, t, e, a) {\n return n.visitor = t, n.h = e, n.options = a || o, n(r);\n }(c, l, a, s);\n return l.map = null, m && m.props && m.props.children || null;\n }(c, u, C, this.map, g);\n } catch (r) {\n f ? f({\n error: r\n }) : \"undefined\" != typeof console && console.error && console.error(\"preact-markup: \" + r);\n }\n if (!1 === i) return s || null;\n var x = w.hasOwnProperty(\"className\") ? \"className\" : \"class\",\n b = w[x];\n return b ? b.splice ? b.splice(0, 0, \"markup\") : \"string\" == typeof b ? w[x] += \" markup\" : \"object\" == typeof b && (b.markup = !0) : w[x] = \"markup\", C(\"div\", w, s || null);\n }, i;\n})(_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_7__.Component);\n\n/**\n * Copied from existing form-js#Sanitizer\n * cf. https://github.com/bpmn-io/form-js/blob/master/packages/form-js-viewer/src/render/components/Sanitizer.js\n */\n\nconst NODE_TYPE_TEXT = 3,\n NODE_TYPE_ELEMENT = 1;\nconst ALLOWED_NODES = ['h1', 'h2', 'h3', 'h4', 'h5', 'span', 'em', 'a', 'p', 'div', 'ul', 'ol', 'li', 'hr', 'blockquote', 'img', 'pre', 'code', 'br', 'strong'];\nconst ALLOWED_ATTRIBUTES = ['align', 'alt', 'class', 'href', 'id', 'name', 'rel', 'target', 'src'];\nconst ALLOWED_URI_PATTERN = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\nconst ATTR_WHITESPACE_PATTERN = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g; // eslint-disable-line no-control-regex\n\nconst FORM_ELEMENT = document.createElement('form');\n\n/**\n * Sanitize a HTML string and return the cleaned, safe version.\n *\n * @param {string} html\n * @return {string}\n */\nfunction sanitizeHTML(html) {\n const doc = new DOMParser().parseFromString(`\\n${html}`, 'text/html');\n doc.normalize();\n const element = doc.body.firstChild;\n if (element) {\n sanitizeNode( /** @type Element */element);\n return new XMLSerializer().serializeToString(element);\n } else {\n // handle the case that document parsing\n // does not work at all, due to HTML gibberish\n return '';\n }\n}\n\n/**\n * Recursively sanitize a HTML node, potentially\n * removing it, its children or attributes.\n *\n * Inspired by https://github.com/developit/snarkdown/issues/70\n * and https://github.com/cure53/DOMPurify. Simplified\n * for our use-case.\n *\n * @param {Element} node\n */\nfunction sanitizeNode(node) {\n // allow text nodes\n if (node.nodeType === NODE_TYPE_TEXT) {\n return;\n }\n\n // disallow all other nodes but Element\n if (node.nodeType !== NODE_TYPE_ELEMENT) {\n return node.remove();\n }\n const lcTag = node.tagName.toLowerCase();\n\n // disallow non-whitelisted tags\n if (!ALLOWED_NODES.includes(lcTag)) {\n return node.remove();\n }\n const attributes = node.attributes;\n\n // clean attributes\n for (let i = attributes.length; i--;) {\n const attribute = attributes[i];\n const name = attribute.name;\n const lcName = name.toLowerCase();\n\n // normalize node value\n const value = attribute.value.trim();\n node.removeAttribute(name);\n const valid = isValidAttribute(lcTag, lcName, value);\n if (valid) {\n node.setAttribute(name, value);\n }\n }\n\n // force noopener on target=\"_blank\" links\n if (lcTag === 'a' && node.getAttribute('target') === '_blank' && node.getAttribute('rel') !== 'noopener') {\n node.setAttribute('rel', 'noopener');\n }\n for (let i = node.childNodes.length; i--;) {\n sanitizeNode( /** @type Element */node.childNodes[i]);\n }\n}\n\n/**\n * Validates attributes for validity.\n *\n * @param {string} lcTag\n * @param {string} lcName\n * @param {string} value\n * @return {boolean}\n */\nfunction isValidAttribute(lcTag, lcName, value) {\n // disallow most attributes based on whitelist\n if (!ALLOWED_ATTRIBUTES.includes(lcName)) {\n return false;\n }\n\n // disallow \"DOM clobbering\" / polution of document and wrapping form elements\n if ((lcName === 'id' || lcName === 'name') && (value in document || value in FORM_ELEMENT)) {\n return false;\n }\n if (lcName === 'target' && value !== '_blank') {\n return false;\n }\n\n // allow valid url links only\n if (lcName === 'href' && !ALLOWED_URI_PATTERN.test(value.replace(ATTR_WHITESPACE_PATTERN, ''))) {\n return false;\n }\n return true;\n}\n\nfunction PropertyTooltip(props) {\n const {\n tooltip\n } = props;\n return tooltip && (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Markup, {\n markup: sanitizeHTML(tooltip),\n trim: false\n });\n}\n\nfunction usePropertyAccessors(bpmnFactory, commandStack, element, property) {\n const directSet = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(propertySetter$1(bpmnFactory, commandStack, element, property), [bpmnFactory, commandStack, element, property]);\n const directGet = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(propertyGetter$1(element, property), [element, property]);\n const [isFeelEnabled, setIsFeelEnabled] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useState)(feelEnabled(property, directGet()));\n const handleFeelToggle = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(value => {\n if (!isFeelEnabled && typeof value === 'string' && value.startsWith('=')) {\n setIsFeelEnabled(true);\n }\n if (isFeelEnabled && (typeof value !== 'string' || !value.startsWith('='))) {\n setIsFeelEnabled(false);\n }\n }, [isFeelEnabled]);\n const set = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)((value, error) => {\n handleFeelToggle(value);\n directSet(toFeelExpression(value, property.type));\n }, [directSet, property, handleFeelToggle]);\n const get = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(() => {\n if (isFeelEnabled) {\n return directGet();\n }\n return fromFeelExpression(directGet(), property.type);\n }, [directGet, property, isFeelEnabled]);\n if (!isSpecialFeelProperty(property)) {\n return [directGet, directSet];\n }\n return [get, set];\n}\nconst isSpecialFeelProperty = property => {\n return ['optional', 'static'].includes(property.feel) && ['Boolean', 'Number'].includes(property.type);\n};\nconst toFeelExpression = (value, type) => {\n if (typeof value === 'string' && value.startsWith('=')) {\n return value;\n }\n if (type === 'Boolean') {\n value = value === 'false' ? false : value;\n return '=' + !!value;\n }\n if (typeof value === 'undefined') {\n return value;\n }\n return '=' + value.toString();\n};\nconst fromFeelExpression = (value, type) => {\n if (typeof value === 'undefined') {\n return value;\n }\n if (typeof value === 'string' && value.startsWith('=')) {\n value = value.slice(1);\n }\n if (type === 'Number') {\n return Number(value);\n }\n if (type === 'Boolean') {\n return value !== 'false';\n }\n return value;\n};\nconst feelEnabled = (property, value) => {\n if (!isSpecialFeelProperty(property)) {\n return true;\n }\n if (property.type === 'Boolean') {\n return !(value === '=true' || value === '=false');\n }\n if (property.type === 'Number') {\n return isNaN(fromFeelExpression(value, property.type));\n }\n return true;\n};\nfunction propertyGetter$1(element, property) {\n return function getValue() {\n return getPropertyValue(element, property);\n };\n}\nfunction propertySetter$1(bpmnFactory, commandStack, element, property) {\n return function setValue(value) {\n return setPropertyValue(bpmnFactory, commandStack, element, property, value);\n };\n}\nfunction propertyValidator$1(translate, property) {\n return value => validateProperty(value, property, translate);\n}\nfunction groupByGroupId$1(properties) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.groupBy)(properties, 'group');\n}\nfunction findCustomGroup$1(groups, id) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(groups, g => g.id === id);\n}\n\n/**\n * Is the given property executed by the engine?\n *\n * @param { { binding: { type: string } } } property\n * @return {boolean}\n */\nfunction isExternalProperty(property) {\n return ['zeebe:property', 'zeebe:taskHeader'].includes(property.binding.type);\n}\n\nfunction PropertyDescription(props) {\n const {\n description\n } = props;\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return description && (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Markup, {\n markup: sanitizeHTML(translate(description)),\n trim: false\n });\n}\n\nfunction TextAreaProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n language,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextAreaEntry)({\n debounce,\n element,\n id,\n label,\n feel,\n placeholder,\n monospace: !!language,\n autoResize: true,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter$1(element, property),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction StringProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n debounce,\n element,\n getValue: propertyGetter$1(element, property),\n id,\n label,\n feel,\n placeholder,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction useServiceIfAvailable(service, fallback) {\n const resolved = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)(service, false);\n if (!resolved) {\n return fallback;\n }\n return resolved;\n}\nfunction withVariableContext(Component) {\n return props => {\n const {\n bpmnElement,\n element\n } = props;\n const bo = (bpmnElement || element).businessObject;\n const [variables, setVariables] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useState)([]);\n const eventBus = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('eventBus');\n const variableResolver = useServiceIfAvailable('variableResolver', {\n getVariablesForElement: _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_9__.getVariablesForElement\n });\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useEffect)(() => {\n const extractVariables = async () => {\n const variables = await variableResolver.getVariablesForElement(bo);\n setVariables(variables.map(variable => {\n return {\n ...variable,\n info: variable.info || variable.origin && 'Written in ' + variable.origin.map(origin => origin.name || origin.id).join(', ')\n };\n }));\n };\n\n // The callback must return undefined, so the event propagation is not canceled.\n // Cf. https://github.com/camunda/camunda-modeler/issues/3392\n const callback = () => {\n extractVariables();\n };\n eventBus.on('commandStack.changed', callback);\n callback();\n return () => {\n eventBus.off('commandStack.changed', callback);\n };\n }, [bo]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Component, {\n ...props,\n variables: variables\n });\n };\n}\n\nfunction withTooltipContainer(Component) {\n return props => {\n const tooltipContainer = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useMemo)(() => {\n const config = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('config');\n return config && config.propertiesPanel && config.propertiesPanel.feelTooltipContainer;\n }, []);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Component, {\n ...props,\n tooltipContainer: tooltipContainer\n });\n };\n}\n\nconst FeelEntry = withTooltipContainer(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelEntry);\nconst FeelTextAreaEntry = withTooltipContainer(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelTextAreaEntry);\nconst FeelEntryWithVariableContext = withVariableContext(FeelEntry);\nconst FeelTextAreaEntryWithVariableContext = withVariableContext(FeelTextAreaEntry);\n\nfunction FeelProperty(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const TextFieldComponent = !isExternalProperty(property) ? FeelEntryWithVariableContext : FeelEntry;\n return TextFieldComponent({\n debounce,\n element,\n getValue: propertyGetter$1(element, property),\n id,\n label,\n feel,\n placeholder,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction FeelTextAreaProperty(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n placeholder,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const TextAreaComponent = !isExternalProperty(property) ? FeelTextAreaEntryWithVariableContext : FeelTextAreaEntry;\n return TextAreaComponent({\n debounce,\n element,\n getValue: propertyGetter$1(element, property),\n id,\n label,\n feel,\n placeholder,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction DropdownProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n tooltip\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getOptions = () => {\n const {\n choices,\n optional\n } = property;\n let dropdownOptions = [];\n dropdownOptions = choices.map(({\n name,\n value\n }) => {\n return {\n label: name,\n value\n };\n });\n if (optional) {\n dropdownOptions = [{\n label: '',\n value: undefined\n }, ...dropdownOptions];\n }\n return dropdownOptions;\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.SelectEntry)({\n element,\n id,\n label,\n getOptions,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter$1(element, property),\n setValue: propertySetter$1(bpmnFactory, commandStack, element, property),\n validate: propertyValidator$1(translate, property),\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction BooleanProperty$1(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n tooltip,\n feel\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const Component = feel === 'optional' ? _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelCheckboxEntry : _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.CheckboxEntry;\n const [getValue, setValue] = usePropertyAccessors(bpmnFactory, commandStack, element, property);\n return Component({\n element,\n debounce,\n translate,\n getValue,\n id,\n label,\n description: PropertyDescription({\n description\n }),\n setValue,\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction NumberProperty(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n description,\n editable,\n label,\n feel,\n tooltip\n } = property;\n const Component = feel === 'optional' ? _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.FeelNumberEntry : _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.NumberFieldEntry;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const [getValue, setValue] = usePropertyAccessors(bpmnFactory, commandStack, element, property);\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useCallback)(value => {\n if (isSpecialFeelProperty(property) && (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isNumber)(value) && value.toString().includes('e')) {\n return translate('Scientific notation is disallowed in FEEL.');\n }\n const defaultValidator = propertyValidator$1(translate, property);\n return defaultValidator(value);\n }, [translate, property]);\n return Component({\n debounce,\n element,\n getValue,\n id,\n label,\n description: PropertyDescription({\n description\n }),\n setValue,\n validate: validate,\n disabled: editable === false,\n tooltip: PropertyTooltip({\n tooltip\n })\n });\n}\n\nfunction CustomProperties$1(props) {\n const {\n element,\n elementTemplate,\n injector\n } = props;\n const translate = injector.get('translate');\n const groups = [];\n const {\n id,\n properties,\n groups: propertyGroups\n } = elementTemplate;\n\n // (1) group properties by group id\n const groupedProperties = groupByGroupId$1(properties);\n const defaultProps = [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(groupedProperties, (properties, groupId) => {\n const group = findCustomGroup$1(propertyGroups, groupId);\n if (!group) {\n return defaultProps.push(...properties);\n }\n addCustomGroup$1(groups, {\n element,\n id: `ElementTemplates__CustomProperties-${groupId}`,\n label: translate(group.label),\n openByDefault: group.openByDefault,\n properties: properties,\n templateId: `${id}-${groupId}`,\n tooltip: PropertyTooltip({\n tooltip: group.tooltip\n })\n });\n });\n\n // (2) add default custom props\n if (defaultProps.length) {\n addCustomGroup$1(groups, {\n id: 'ElementTemplates__CustomProperties',\n label: translate('Custom properties'),\n element,\n properties: defaultProps,\n templateId: id\n });\n }\n return groups;\n}\nfunction addCustomGroup$1(groups, props) {\n const {\n element,\n id,\n label,\n openByDefault = true,\n properties,\n templateId,\n tooltip\n } = props;\n const customPropertiesGroup = {\n id,\n label,\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.Group,\n entries: [],\n shouldOpen: openByDefault,\n tooltip\n };\n properties.forEach((property, index) => {\n const entry = createCustomEntry$1(`custom-entry-${templateId}-${index}`, element, property);\n if (entry) {\n customPropertiesGroup.entries.push(entry);\n }\n });\n if (customPropertiesGroup.entries.length) {\n groups.push(customPropertiesGroup);\n }\n}\nfunction createCustomEntry$1(id, element, property) {\n let {\n type,\n feel\n } = property;\n if (!type) {\n type = getDefaultType$1(property);\n }\n if (feel === 'required') {\n return {\n id,\n component: FeelProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isFeelEntryEdited,\n property\n };\n }\n if (type === 'Number') {\n return {\n id,\n component: NumberProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isNumberFieldEntryEdited,\n property\n };\n }\n if (type === 'Boolean') {\n return {\n id,\n component: BooleanProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isCheckboxEntryEdited,\n property\n };\n }\n if (type === 'Dropdown') {\n return {\n id,\n component: DropdownProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isSelectEntryEdited,\n property\n };\n }\n if (type === 'String') {\n if (feel) {\n return {\n id,\n component: FeelProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isFeelEntryEdited,\n property\n };\n }\n return {\n id,\n component: StringProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextFieldEntryEdited,\n property\n };\n }\n if (type === 'Text') {\n if (feel) {\n return {\n id,\n component: FeelTextAreaProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isFeelEntryEdited,\n property\n };\n }\n return {\n id,\n component: TextAreaProperty$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextAreaEntryEdited,\n property\n };\n }\n}\nfunction getDefaultType$1(property) {\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n if ([PROPERTY_TYPE$1, ZEEBE_TASK_DEFINITION_TYPE_TYPE, ZEEBE_TASK_DEFINITION, ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE, ZEEBE_PROPERTY_TYPE, ZEEBE_TASK_HEADER_TYPE].includes(type)) {\n return 'String';\n }\n}\n\nfunction ReferenceSelectEntry(props) {\n const {\n autoFocusEntry,\n element,\n getOptions\n } = props;\n const options = getOptions(element);\n const prevOptions = (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.usePrevious)(options);\n\n // auto focus specifc other entry when options changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_8__.useEffect)(() => {\n if (autoFocusEntry && prevOptions && options.length > prevOptions.length) {\n const entry = (0,min_dom__WEBPACK_IMPORTED_MODULE_18__.query)(`[data-entry-id=\"${autoFocusEntry}\"]`);\n const focusableInput = (0,min_dom__WEBPACK_IMPORTED_MODULE_18__.query)('.bio-properties-panel-input', entry);\n if (focusableInput) {\n focusableInput.select();\n }\n }\n }, [options]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.SelectEntry, {\n ...props\n });\n}\n\nfunction getEventDefinition(element, eventType) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const eventDefinitions = businessObject.get('eventDefinitions') || [];\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(eventDefinitions, function (definition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(definition, eventType);\n });\n}\nfunction isMessageSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:ReceiveTask') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(element, ['bpmn:StartEvent', 'bpmn:EndEvent', 'bpmn:IntermediateThrowEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent']) && !!getMessageEventDefinition(element);\n}\nfunction getMessageEventDefinition(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(element, 'bpmn:ReceiveTask')) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n }\n return getEventDefinition(element, 'bpmn:MessageEventDefinition');\n}\nfunction getMessage(element) {\n const messageEventDefinition = getMessageEventDefinition(element);\n return messageEventDefinition && messageEventDefinition.get('messageRef');\n}\nfunction getSignalEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:SignalEventDefinition');\n}\n\nconst EMPTY_OPTION = '';\nconst CREATE_NEW_OPTION = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array
} entries\n */\nfunction MessageProps(props) {\n const {\n element\n } = props;\n if (!isMessageSupported(element)) {\n return [];\n }\n return [{\n id: 'messageRef',\n component: MessageRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isSelectEntryEdited\n }];\n}\nfunction MessageRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory');\n const modeling = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('modeling');\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const messageEventDefinition = getMessageEventDefinition(element);\n const getValue = () => {\n const message = getMessage(element);\n if (message) {\n return message.get('id');\n }\n return EMPTY_OPTION;\n };\n const setValue = value => {\n const root = getRoot(messageEventDefinition);\n let message;\n\n // (1) create new message\n if (value === CREATE_NEW_OPTION) {\n const id = nextId('Message_');\n message = createElement('bpmn:Message', {\n id,\n name: id\n }, root, bpmnFactory);\n value = message.get('id');\n }\n\n // (2) update (or remove) messageRef\n message = findRootElementById(messageEventDefinition, 'bpmn:Message', value) || message;\n\n // (3) commit all updates\n return modeling.updateModdleProperties(element, messageEventDefinition, {\n messageRef: message\n });\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION,\n label: translate('Create new ...')\n }];\n const messages = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element), 'bpmn:Message');\n const filteredMessages = withoutTemplatedMessages(messages);\n sortByName(filteredMessages).forEach(message => {\n options.push({\n value: message.get('id'),\n label: message.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'messageRef',\n label: translate('Global message reference'),\n autoFocusEntry: 'messageName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction withoutTemplatedMessages(messages) {\n return messages.filter(message => !message.get('zeebe:modelerTemplate'));\n}\n\n// helper /////////////////////////\n\nfunction sortByName(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nconst LOWER_PRIORITY$1 = 300;\nconst ALWAYS_DISPLAYED_GROUPS$1 = ['general', 'documentation', 'multiInstance'];\nlet ElementTemplatesPropertiesProvider$1 = class ElementTemplatesPropertiesProvider {\n constructor(elementTemplates, propertiesPanel, injector) {\n propertiesPanel.registerProvider(LOWER_PRIORITY$1, this);\n this._elementTemplates = elementTemplates;\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n const injector = this._injector;\n updateMessageGroup(groups, element);\n if (!this._shouldShowTemplateProperties(element)) {\n return groups;\n }\n const translate = injector.get('translate');\n\n // (0) Copy provided groups\n groups = groups.slice();\n const templatesGroup = {\n element,\n id: 'ElementTemplates__Template',\n label: translate('Template'),\n component: createElementTemplatesGroup({\n getTemplateId: getTemplateId$1\n }),\n entries: TemplateProps({\n element,\n elementTemplates: this._elementTemplates\n })\n };\n\n // (1) Add templates group\n addGroupsAfter$1(ALWAYS_DISPLAYED_GROUPS$1, groups, [templatesGroup]);\n let elementTemplate = this._elementTemplates.get(element);\n if (elementTemplate) {\n elementTemplate = applyConditions(element, elementTemplate);\n const templateSpecificGroups = [].concat(CustomProperties$1({\n element,\n elementTemplate,\n injector\n }));\n\n // (2) add template-specific properties groups\n addGroupsAfter$1('ElementTemplates__Template', groups, templateSpecificGroups);\n }\n\n // (3) apply entries visible\n if (getTemplateId$1(element)) {\n groups = filterWithEntriesVisible$1(elementTemplate || {}, groups);\n }\n return groups;\n };\n }\n _shouldShowTemplateProperties(element) {\n return getTemplateId$1(element) || this._elementTemplates.getAll(element).length;\n }\n};\nElementTemplatesPropertiesProvider$1.$inject = ['elementTemplates', 'propertiesPanel', 'injector'];\n\n// helper /////////////////////\n\nfunction updateMessageGroup(groups, element) {\n const messageGroup = findGroup(groups, 'message');\n if (!messageGroup) {\n return;\n }\n messageGroup.entries = overrideGenericEntries(messageGroup.entries, MessageProps({\n element\n }));\n}\nfunction findGroup(groups, id) {\n return groups.find(g => g.id === id);\n}\nfunction overrideGenericEntries(oldEntries, newEntries) {\n return oldEntries.map(oldEntry => newEntries.find(newEntry => newEntry.id === oldEntry.id) || oldEntry);\n}\n\n/**\n *\n * @param {string|string[]} idOrIds\n * @param {Array<{ id: string }} groups\n * @param {Array<{ id: string }>} groupsToAdd\n */\nfunction addGroupsAfter$1(idOrIds, groups, groupsToAdd) {\n let ids = idOrIds;\n if (!Array.isArray(idOrIds)) {\n ids = [idOrIds];\n }\n\n // find index of last group with provided id\n const index = groups.reduce((acc, group, index) => {\n return ids.includes(group.id) ? index : acc;\n }, -1);\n if (index !== -1) {\n groups.splice(index + 1, 0, ...groupsToAdd);\n } else {\n // add in the beginning if group with provided id is missing\n groups.unshift(...groupsToAdd);\n }\n}\nfunction filterWithEntriesVisible$1(template, groups) {\n if (!template.entriesVisible) {\n return groups.filter(group => {\n return ALWAYS_DISPLAYED_GROUPS$1.includes(group.id) || group.id.startsWith('ElementTemplates__');\n });\n }\n return groups;\n}\n\nvar propertiesProviderModule$1 = {\n __depends__: [diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_19__[\"default\"]],\n __init__: ['elementTemplatesPropertiesProvider'],\n elementTemplatesPropertiesProvider: ['type', ElementTemplatesPropertiesProvider$1]\n};\n\nvar index$1 = {\n __depends__: [coreModule$1, propertiesProviderModule$1]\n};\n\n/**\n * Converts legacy scopes descriptor to newer supported array structure.\n *\n * For example, it transforms\n *\n * scopes: {\n * 'camunda:Connector':\n * { properties: []\n * }\n * }\n *\n * to\n *\n * scopes: [\n * {\n * type: 'camunda:Connector',\n * properties: []\n * }\n * ]\n *\n * @param {ScopesDescriptor} scopes\n *\n * @returns {Array}\n */\nfunction handleLegacyScopes(scopes = []) {\n const scopesAsArray = [];\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(scopes)) {\n return scopes;\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.keys)(scopes), function (scopeName) {\n scopesAsArray.push((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n type: scopeName\n }, scopes[scopeName]));\n });\n return scopesAsArray;\n}\n\n/**\n * Create an input parameter representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createInputParameter(binding, value, bpmnFactory) {\n const {\n name,\n scriptFormat\n } = binding;\n let parameterValue, parameterDefinition;\n if (scriptFormat) {\n parameterDefinition = bpmnFactory.create('camunda:Script', {\n scriptFormat,\n value\n });\n } else {\n parameterValue = value;\n }\n return bpmnFactory.create('camunda:InputParameter', {\n name,\n value: parameterValue,\n definition: parameterDefinition\n });\n}\n\n/**\n * Create an output parameter representing the given\n * binding and value.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createOutputParameter(binding, value, bpmnFactory) {\n const {\n scriptFormat,\n source\n } = binding;\n let parameterValue, parameterDefinition;\n if (scriptFormat) {\n parameterDefinition = bpmnFactory.create('camunda:Script', {\n scriptFormat,\n value: source\n });\n } else {\n parameterValue = source;\n }\n return bpmnFactory.create('camunda:OutputParameter', {\n name: value,\n value: parameterValue,\n definition: parameterDefinition\n });\n}\n\n/**\n * Create camunda property from the given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaProperty(binding, value = '', bpmnFactory) {\n const {\n name\n } = binding;\n return bpmnFactory.create('camunda:Property', {\n name,\n value\n });\n}\n\n/**\n * Create camunda:in element from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaIn(binding, value, bpmnFactory) {\n const attrs = createCamundaInOutAttrs(binding, value);\n return bpmnFactory.create('camunda:In', attrs);\n}\n\n/**\n * Create camunda:in with businessKey element from given binding.\n *\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaInWithBusinessKey(value, bpmnFactory) {\n return bpmnFactory.create('camunda:In', {\n businessKey: value\n });\n}\n\n/**\n * Create camunda:out element from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaOut(binding, value, bpmnFactory) {\n const attrs = createCamundaInOutAttrs(binding, value);\n return bpmnFactory.create('camunda:Out', attrs);\n}\n\n/**\n * Create camunda:executionListener element containing an inline script from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaExecutionListener(binding, value, bpmnFactory) {\n const {\n event,\n implementationType,\n scriptFormat\n } = binding;\n\n // To guarantee backwards compatibility scriptFormat is taken into account and has precedence before any other type\n if (implementationType === 'script' || scriptFormat) {\n return bpmnFactory.create('camunda:ExecutionListener', {\n event,\n script: bpmnFactory.create('camunda:Script', {\n scriptFormat,\n value\n })\n });\n }\n return bpmnFactory.create('camunda:ExecutionListener', {\n event,\n [implementationType]: value\n });\n}\n\n/**\n * Create camunda:field element containing string or expression from given binding.\n *\n * @param {PropertyBinding} binding\n * @param {String} value\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaFieldInjection(binding, value, bpmnFactory) {\n const DEFAULT_PROPS = {\n 'string': undefined,\n 'expression': undefined,\n 'name': undefined\n };\n const props = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, DEFAULT_PROPS);\n const {\n expression,\n name\n } = binding;\n if (!expression) {\n props.string = value;\n } else {\n props.expression = value;\n }\n props.name = name;\n return bpmnFactory.create('camunda:Field', props);\n}\n\n/**\n * Create camunda:errorEventDefinition element containing expression and errorRef\n * from given binding.\n *\n * @param {String} expression\n * @param {ModdleElement} errorRef\n * @param {ModdleElement} parent\n * @param {BpmnFactory} bpmnFactory\n *\n * @return {ModdleElement}\n */\nfunction createCamundaErrorEventDefinition(expression, errorRef, parent, bpmnFactory) {\n const errorEventDefinition = bpmnFactory.create('camunda:ErrorEventDefinition', {\n errorRef,\n expression\n });\n errorEventDefinition.$parent = parent;\n return errorEventDefinition;\n}\n\n/**\n * Create bpmn:error element containing a specific error id given by a binding.\n *\n * @param {String} bindingErrorRef\n * @param {ModdleElement} parent\n * @param {BpmnFactory} bpmnFactory\n *\n * @return { ModdleElement }\n */\nfunction createError(bindingErrorRef, parent, bpmnFactory) {\n const error = bpmnFactory.create('bpmn:Error', {\n // we need to later retrieve the error from a binding\n id: nextId('Error_' + bindingErrorRef + '_')\n });\n error.$parent = parent;\n return error;\n}\n\n// helpers //////////\n\n/**\n * Create properties for camunda:in and camunda:out types.\n */\nfunction createCamundaInOutAttrs(binding, value) {\n const properties = {};\n const {\n expression,\n source,\n sourceExpression,\n target,\n type,\n variables\n } = binding;\n\n // explicitly cover all conditions as specified here:\n // https://github.com/camunda/camunda-modeler/blob/develop/docs/element-templates/README.md#camundain\n if (type === 'camunda:in') {\n if (target && !expression && !variables) {\n properties.target = target;\n properties.source = value;\n } else if (target && expression === true && !variables) {\n properties.target = target;\n properties.sourceExpression = value;\n } else if (!target && !expression && variables === 'local') {\n properties.local = true;\n properties.variables = 'all';\n } else if (target && !expression && variables === 'local') {\n properties.local = true;\n properties.source = value;\n properties.target = target;\n } else if (target && expression && variables === 'local') {\n properties.local = true;\n properties.sourceExpression = value;\n properties.target = target;\n } else if (!target && !expression && variables === 'all') {\n properties.variables = 'all';\n } else {\n throw new Error('invalid configuration for camunda:in element template binding');\n }\n }\n\n // explicitly cover all conditions as specified here:\n // https://github.com/camunda/camunda-modeler/blob/develop/docs/element-templates/README.md#camundaout\n if (type === 'camunda:out') {\n if (source && !sourceExpression && !variables) {\n properties.target = value;\n properties.source = source;\n } else if (!source && sourceExpression && !variables) {\n properties.target = value;\n properties.sourceExpression = sourceExpression;\n } else if (!source && !sourceExpression && variables === 'all') {\n properties.variables = 'all';\n } else if (source && !sourceExpression && variables === 'local') {\n properties.local = true;\n properties.source = source;\n properties.target = value;\n } else if (!source && sourceExpression && variables === 'local') {\n properties.local = true;\n properties.sourceExpression = sourceExpression;\n properties.target = value;\n } else if (!source && !sourceExpression && variables === 'local') {\n properties.local = true;\n properties.variables = 'all';\n } else {\n throw new Error('invalid configuration for camunda:out element template binding');\n }\n }\n return properties;\n}\n\nconst CAMUNDA_SERVICE_TASK_LIKE = ['camunda:class', 'camunda:delegateExpression', 'camunda:expression'];\n\n/**\n * Applies an element template to an element. Sets `camunda:modelerTemplate` and\n * `camunda:modelerTemplateVersion`.\n */\nclass ChangeElementTemplateHandler {\n constructor(bpmnFactory, bpmnReplace, commandStack, modeling) {\n this._bpmnFactory = bpmnFactory;\n this._bpmnReplace = bpmnReplace;\n this._commandStack = commandStack;\n this._modeling = modeling;\n }\n\n /**\n * Change an element's template and update its properties as specified in `newTemplate`. Specify\n * `oldTemplate` to update from one template to another. If `newTemplate` isn't specified the\n * `camunda:modelerTemplate` and `camunda:modelerTemplateVersion` properties will be removed from\n * the element.\n *\n * @param {Object} context\n * @param {Object} context.element\n * @param {Object} [context.oldTemplate]\n * @param {Object} [context.newTemplate]\n */\n preExecute(context) {\n const newTemplate = context.newTemplate,\n oldTemplate = context.oldTemplate;\n let element = context.element;\n\n // update camunda:modelerTemplate attribute\n this._updateCamundaModelerTemplate(element, newTemplate);\n if (newTemplate) {\n element = context.element = this._updateTaskType(element, newTemplate);\n\n // update properties\n this._updateProperties(element, oldTemplate, newTemplate);\n\n // update camunda:ExecutionListener properties\n this._updateCamundaExecutionListenerProperties(element, newTemplate);\n\n // update camunda:Field properties\n this._updateCamundaFieldProperties(element, oldTemplate, newTemplate);\n\n // update camunda:In and camunda:Out properties\n this._updateCamundaInOutProperties(element, oldTemplate, newTemplate);\n\n // update camunda:InputParameter and camunda:OutputParameter properties\n this._updateCamundaInputOutputParameterProperties(element, oldTemplate, newTemplate);\n\n // update camunda:Property properties\n this._updateCamundaPropertyProperties(element, oldTemplate, newTemplate);\n\n // update camunda:ErrorEventDefinition properties\n this._updateCamundaErrorEventDefinitionProperties(element, oldTemplate, newTemplate);\n\n // update properties for each scope\n handleLegacyScopes(newTemplate.scopes).forEach(newScopeTemplate => {\n this._updateScopeProperties(element, oldTemplate, newScopeTemplate, newTemplate);\n });\n }\n }\n _getOrCreateExtensionElements(element) {\n const bpmnFactory = this._bpmnFactory,\n modeling = this._modeling;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n let extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = bpmnFactory.create('bpmn:ExtensionElements', {\n values: []\n });\n extensionElements.$parent = businessObject;\n modeling.updateProperties(element, {\n extensionElements: extensionElements\n });\n }\n return extensionElements;\n }\n\n /**\n * Update `camunda:ErrorEventDefinition` properties of specified business object. Event\n * definitions can only exist in `bpmn:ExtensionElements`.\n *\n * Ensures an bpmn:Error exists for the event definition.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCamundaErrorEventDefinitionProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:errorEventDefinition';\n });\n\n // (1) do not override if no updates\n if (!newProperties.length) {\n return;\n }\n const extensionElements = this._getOrCreateExtensionElements(element);\n const oldErrorEventDefinitions = findExtensions(element, ['camunda:ErrorEventDefinition']);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldEventDefinition = oldProperty && findOldBusinessObject(extensionElements, oldProperty),\n newBinding = newProperty.binding;\n\n // (2) update old event definitions\n if (oldProperty && oldEventDefinition) {\n if (!propertyChanged(oldEventDefinition, oldProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldEventDefinition,\n properties: {\n expression: newProperty.value\n }\n });\n }\n remove(oldErrorEventDefinitions, oldEventDefinition);\n }\n\n // (3) create new event definition + error\n else {\n const rootElement = getRoot((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element)),\n newError = createError(newBinding.errorRef, rootElement, bpmnFactory),\n newEventDefinition = createCamundaErrorEventDefinition(newProperty.value, newError, extensionElements, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: rootElement,\n properties: {\n rootElements: [...rootElement.get('rootElements'), newError]\n }\n });\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), newEventDefinition]\n }\n });\n }\n });\n\n // (4) remove old event definitions\n if (oldErrorEventDefinitions.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(extensionElements.get('values'), value => oldErrorEventDefinitions.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `camunda:ExecutionListener` properties of specified business object. Execution listeners\n * will always be overridden. Execution listeners can only exist in `bpmn:ExtensionElements`.\n *\n * @param {djs.model.Base} element\n * @param {Object} newTemplate\n */\n _updateCamundaExecutionListenerProperties(element, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:executionListener';\n });\n\n // (1) do not override old execution listeners if no new execution listeners specified\n if (!newProperties.length) {\n return;\n }\n const extensionElements = this._getOrCreateExtensionElements(element);\n\n // (2) remove old execution listeners\n const oldExecutionListeners = findExtensions(element, ['camunda:ExecutionListener']);\n\n // (3) add new execution listeners\n const newExecutionListeners = newProperties.map(newProperty => {\n const newBinding = newProperty.binding,\n propertyValue = newProperty.value;\n return createCamundaExecutionListener(newBinding, propertyValue, bpmnFactory);\n });\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(extensionElements.get('values'), value => oldExecutionListeners.includes(value)), ...newExecutionListeners]\n }\n });\n }\n\n /**\n * Update `camunda:Field` properties of specified business object.\n * If business object is `camunda:ExecutionListener` or `camunda:TaskListener` `fields` property\n * will be updated. Otherwise `extensionElements.values` property will be updated.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n * @param {ModdleElement} businessObject\n */\n _updateCamundaFieldProperties(element, oldTemplate, newTemplate, businessObject) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:field';\n });\n\n // (1) do not override old fields if no new fields specified\n if (!newProperties.length) {\n return;\n }\n if (!businessObject) {\n businessObject = this._getOrCreateExtensionElements(element);\n }\n const propertyName = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(businessObject, ['camunda:ExecutionListener', 'camunda:TaskListener']) ? 'fields' : 'values';\n const oldFields = findExtensions(element, ['camunda:Field']);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldField = oldProperty && findOldBusinessObject(businessObject, oldProperty),\n newBinding = newProperty.binding;\n\n // (2) update old fields\n if (oldProperty && oldField) {\n if (!propertyChanged(oldField, oldProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldField,\n properties: {\n string: newProperty.value\n }\n });\n }\n remove(oldFields, oldField);\n }\n\n // (3) add new fields\n else {\n const newCamundaFieldInjection = createCamundaFieldInjection(newBinding, newProperty.value, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [propertyName]: [...businessObject.get(propertyName), newCamundaFieldInjection]\n }\n });\n }\n });\n\n // (4) remove old fields\n if (oldFields.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [propertyName]: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(businessObject.get(propertyName), value => oldFields.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `camunda:In` and `camunda:Out` properties of specified business object. Only\n * `bpmn:CallActivity` and events with `bpmn:SignalEventDefinition` can have ins. Only\n * `camunda:CallActivity` can have outs.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCamundaInOutProperties(element, oldTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:in' || newBindingType === 'camunda:in:businessKey' || newBindingType === 'camunda:out';\n });\n\n // (1) do not override old fields if no new fields specified\n if (!newProperties.length) {\n return;\n }\n\n // get extension elements of either signal event definition or call activity\n const extensionElements = this._getOrCreateExtensionElements(getSignalEventDefinition(element) || element);\n const oldInsAndOuts = findExtensions(extensionElements, ['camunda:In', 'camunda:Out']);\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldBinding = oldProperty && oldProperty.binding,\n oldInOurOut = oldProperty && findOldBusinessObject(extensionElements, oldProperty),\n newPropertyValue = newProperty.value,\n newBinding = newProperty.binding,\n newBindingType = newBinding.type,\n properties = {};\n let newInOrOut;\n\n // (2) update old ins and outs\n if (oldProperty && oldInOurOut) {\n if (!propertyChanged(oldInOurOut, oldProperty)) {\n if (newBindingType === 'camunda:in') {\n if (newBinding.expression) {\n properties['camunda:sourceExpression'] = newPropertyValue;\n } else {\n properties['camunda:source'] = newPropertyValue;\n }\n } else if (newBindingType === 'camunda:in:businessKey') {\n properties['camunda:businessKey'] = newPropertyValue;\n } else if (newBindingType === 'camunda:out') {\n properties['camunda:target'] = newPropertyValue;\n }\n }\n\n // update camunda:local property if it changed\n if (oldBinding.local && !newBinding.local || !oldBinding.local && newBinding.local) {\n properties.local = newBinding.local;\n }\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.keys)(properties)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldInOurOut,\n properties\n });\n }\n remove(oldInsAndOuts, oldInOurOut);\n }\n\n // (3) add new ins and outs\n else {\n if (newBindingType === 'camunda:in') {\n newInOrOut = createCamundaIn(newBinding, newPropertyValue, bpmnFactory);\n } else if (newBindingType === 'camunda:out') {\n newInOrOut = createCamundaOut(newBinding, newPropertyValue, bpmnFactory);\n } else if (newBindingType === 'camunda:in:businessKey') {\n newInOrOut = createCamundaInWithBusinessKey(newPropertyValue, bpmnFactory);\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), newInOrOut]\n }\n });\n }\n });\n\n // (4) remove old ins and outs\n if (oldInsAndOuts.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(extensionElements.get('values'), value => oldInsAndOuts.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `camunda:InputParameter` and `camunda:OutputParameter` properties of specified business\n * object. Both can only exist in `camunda:InputOutput` which can exist in `bpmn:ExtensionElements`\n * or `camunda:Connector`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n */\n _updateCamundaInputOutputParameterProperties(element, oldTemplate, newTemplate, businessObject) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:inputParameter' || newBindingType === 'camunda:outputParameter';\n });\n\n // (1) do not override old inputs and outputs if no new inputs and outputs specified\n if (!newProperties.length) {\n return;\n }\n if (!businessObject) {\n businessObject = this._getOrCreateExtensionElements(element);\n }\n let inputOutput;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'camunda:Connector')) {\n inputOutput = businessObject.get('camunda:inputOutput');\n if (!inputOutput) {\n inputOutput = bpmnFactory.create('camunda:InputOutput');\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n inputOutput\n }\n });\n }\n } else {\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n if (!inputOutput) {\n inputOutput = bpmnFactory.create('camunda:InputOutput');\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), inputOutput]\n }\n });\n }\n }\n const oldInputs = inputOutput.get('camunda:inputParameters') ? inputOutput.get('camunda:inputParameters').slice() : [];\n const oldOutputs = inputOutput.get('camunda:outputParameters') ? inputOutput.get('camunda:outputParameters').slice() : [];\n let propertyName;\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldInputOrOutput = oldProperty && findOldBusinessObject(businessObject, oldProperty),\n newPropertyValue = newProperty.value,\n newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n let newInputOrOutput, properties;\n\n // (2) update old inputs and outputs\n if (oldProperty && oldInputOrOutput) {\n if (!propertyChanged(oldInputOrOutput, oldProperty)) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(oldInputOrOutput, 'camunda:InputParameter')) {\n properties = {\n value: newPropertyValue\n };\n } else {\n properties = {\n name: newPropertyValue\n };\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldInputOrOutput,\n properties\n });\n }\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(oldInputOrOutput, 'camunda:InputParameter')) {\n remove(oldInputs, oldInputOrOutput);\n } else {\n remove(oldOutputs, oldInputOrOutput);\n }\n }\n\n // (3) add new inputs and outputs\n else {\n if (newBindingType === 'camunda:inputParameter') {\n propertyName = 'inputParameters';\n newInputOrOutput = createInputParameter(newBinding, newPropertyValue, bpmnFactory);\n } else {\n propertyName = 'outputParameters';\n newInputOrOutput = createOutputParameter(newBinding, newPropertyValue, bpmnFactory);\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n [propertyName]: [...inputOutput.get(propertyName), newInputOrOutput]\n }\n });\n }\n });\n\n // (4) remove old inputs and outputs\n if (oldInputs.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(inputOutput.get('inputParameters'), inputParameter => oldInputs.includes(inputParameter))\n }\n });\n }\n if (oldOutputs.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: inputOutput,\n properties: {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(inputOutput.get('outputParameters'), outputParameter => oldOutputs.includes(outputParameter))\n }\n });\n }\n }\n _updateCamundaModelerTemplate(element, newTemplate) {\n const modeling = this._modeling;\n const newId = newTemplate && newTemplate.id;\n const newVersion = newTemplate && newTemplate.version;\n if (getTemplateId(element) !== newId || getTemplateVersion(element) !== newVersion) {\n modeling.updateProperties(element, {\n 'camunda:modelerTemplate': newId,\n 'camunda:modelerTemplateVersion': newVersion\n });\n }\n }\n\n /**\n * Update `camunda:Property` properties of specified business object. `camunda:Property` can only\n * exist in `camunda:Properties`.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newTemplate\n * @param {ModdleElement} businessObject\n */\n _updateCamundaPropertyProperties(element, oldTemplate, newTemplate, businessObject) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'camunda:property';\n });\n\n // (1) do not override old properties if no new properties specified\n if (!newProperties.length) {\n return;\n }\n if (businessObject) {\n businessObject = this._getOrCreateExtensionElements(businessObject);\n } else {\n businessObject = this._getOrCreateExtensionElements(element);\n }\n let camundaProperties = findExtension(businessObject, 'camunda:Properties');\n if (!camundaProperties) {\n camundaProperties = bpmnFactory.create('camunda:Properties');\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n values: [...businessObject.get('values'), camundaProperties]\n }\n });\n }\n const oldCamundaProperties = camundaProperties.get('camunda:values') ? camundaProperties.get('camunda:values').slice() : [];\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n oldCamundaProperty = oldProperty && findOldBusinessObject(businessObject, oldProperty),\n newPropertyValue = newProperty.value,\n newBinding = newProperty.binding;\n\n // (2) update old properties\n if (oldProperty && oldCamundaProperty) {\n if (!propertyChanged(oldCamundaProperty, oldProperty)) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: oldCamundaProperty,\n properties: {\n value: newPropertyValue\n }\n });\n }\n remove(oldCamundaProperties, oldCamundaProperty);\n }\n\n // (3) add new properties\n else {\n const newCamundaProperty = createCamundaProperty(newBinding, newPropertyValue, bpmnFactory);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: camundaProperties,\n properties: {\n values: [...camundaProperties.get('values'), newCamundaProperty]\n }\n });\n }\n });\n\n // (4) remove old properties\n if (oldCamundaProperties.length) {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: camundaProperties,\n properties: {\n values: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(camundaProperties.get('values'), value => oldCamundaProperties.includes(value))\n }\n });\n }\n }\n\n /**\n * Update `bpmn:conditionExpression` property of specified element. Since condition expression is\n * is not primitive it needs special handling.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldProperty\n * @param {Object} newProperty\n */\n _updateConditionExpression(element, oldProperty, newProperty) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack,\n modeling = this._modeling;\n const newBinding = newProperty.binding,\n newPropertyValue = newProperty.value;\n if (!oldProperty) {\n modeling.updateProperties(element, {\n conditionExpression: bpmnFactory.create('bpmn:FormalExpression', {\n body: newPropertyValue,\n language: newBinding.scriptFormat\n })\n });\n return;\n }\n const oldBinding = oldProperty.binding,\n oldPropertyValue = oldProperty.value;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n conditionExpression = businessObject.get('bpmn:conditionExpression');\n const properties = {};\n if (conditionExpression.get('body') === oldPropertyValue) {\n properties.body = newPropertyValue;\n }\n if (conditionExpression.get('language') === oldBinding.scriptFormat) {\n properties.language = newBinding.scriptFormat;\n }\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.keys)(properties).length) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: conditionExpression,\n properties\n });\n }\n _updateProperties(element, oldTemplate, newTemplate, businessObject) {\n const commandStack = this._commandStack;\n const newProperties = newTemplate.properties.filter(newProperty => {\n const newBinding = newProperty.binding,\n newBindingType = newBinding.type;\n return newBindingType === 'property';\n });\n const oldProperties = oldTemplate && oldTemplate.properties.filter(oldProperty => {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'property';\n });\n if (!newProperties.length) {\n return;\n }\n if (!businessObject) {\n businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n }\n newProperties.forEach(newProperty => {\n const oldProperty = findOldProperty(oldTemplate, newProperty),\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newPropertyValue = newProperty.value;\n let changedElement, properties;\n if (oldProperty) {\n remove(oldProperties, oldProperty);\n }\n if (newBindingName === 'conditionExpression') {\n this._updateConditionExpression(element, oldProperty, newProperty);\n } else {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'bpmn:Error')) {\n changedElement = businessObject;\n } else {\n changedElement = element;\n }\n if (oldProperty && propertyChanged(changedElement, oldProperty)) {\n return;\n }\n properties = {};\n properties[newBindingName] = newPropertyValue;\n\n // only one of `camunda:class`, `camunda:delegateExpression` and `camunda:expression` can be set\n // TODO(philippfromme): ensuring only one of these properties is set at a time should be\n // implemented in a behavior and not in this handler and properties panel UI\n if (CAMUNDA_SERVICE_TASK_LIKE.indexOf(newBindingName) !== -1) {\n CAMUNDA_SERVICE_TASK_LIKE.forEach(camundaServiceTaskLikeProperty => {\n if (camundaServiceTaskLikeProperty !== newBindingName) {\n properties[camundaServiceTaskLikeProperty] = undefined;\n }\n });\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties\n });\n }\n });\n\n // remove old properties not present in new template\n oldProperties && oldProperties.forEach(oldProperty => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n [oldProperty.binding.name]: null\n }\n });\n });\n }\n\n /**\n * Update properties for a specified scope.\n *\n * @param {djs.model.Base} element\n * @param {Object} oldTemplate\n * @param {Object} newScopeTemplate\n * @param {Object} newTemplate\n */\n _updateScopeProperties(element, oldTemplate, newScopeTemplate, newTemplate) {\n const bpmnFactory = this._bpmnFactory,\n commandStack = this._commandStack;\n const scopeName = newScopeTemplate.type;\n let scopeElement;\n scopeElement = findOldScopeElement(element, newScopeTemplate, newTemplate);\n if (!scopeElement) {\n scopeElement = bpmnFactory.create(scopeName);\n }\n const oldScopeTemplate = findOldScopeTemplate(newScopeTemplate, oldTemplate);\n\n // update properties\n this._updateProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // update camunda:ExecutionListener properties\n this._updateCamundaExecutionListenerProperties(element, newScopeTemplate);\n\n // update camunda:In and camunda:Out properties\n this._updateCamundaInOutProperties(element, oldScopeTemplate, newScopeTemplate);\n\n // update camunda:InputParameter and camunda:OutputParameter properties\n this._updateCamundaInputOutputParameterProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // update camunda:Field properties\n this._updateCamundaFieldProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // update camunda:Property properties\n this._updateCamundaPropertyProperties(element, oldScopeTemplate, newScopeTemplate, scopeElement);\n\n // assume that root elements were already created in root by referenced event definition binding\n if (isRootElementScope(scopeName)) {\n return;\n }\n const extensionElements = this._getOrCreateExtensionElements(element);\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), scopeElement]\n }\n });\n }\n\n /**\n * Replaces the element with the specified elementType\n *\n * @param {djs.model.Base} element\n * @param {Object} newTemplate\n */\n _updateTaskType(element, newTemplate) {\n // determine new task type\n const newType = newTemplate.elementType;\n if (!newType) {\n return element;\n }\n\n // don't replace Task that is already the correct type\n if (element.$type === newType.value) {\n return element;\n }\n return this._bpmnReplace.replaceElement(element, {\n type: newType.value\n });\n }\n}\nChangeElementTemplateHandler.$inject = ['bpmnFactory', 'bpmnReplace', 'commandStack', 'modeling'];\n\n// helpers //////////\n\n/**\n * Find old business object matching specified old property.\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} oldProperty\n *\n * @returns {ModdleElement}\n */\nfunction findOldBusinessObject(element, oldProperty) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n propertyName;\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType === 'camunda:field') {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.isAny)(businessObject, ['camunda:ExecutionListener', 'camunda:TaskListener'])) {\n propertyName = 'camunda:fields';\n } else {\n propertyName = 'bpmn:values';\n }\n if (!businessObject || !businessObject.get(propertyName) || !businessObject.get(propertyName).length) {\n return;\n }\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get(propertyName), function (oldBusinessObject) {\n return oldBusinessObject.get('camunda:name') === oldBinding.name;\n });\n }\n if (oldBindingType === 'camunda:in') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return oldBusinessObject.get('target') === oldBinding.target;\n });\n }\n if (oldBindingType === 'camunda:in:businessKey') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(oldBusinessObject.get('businessKey'));\n });\n }\n if (oldBindingType === 'camunda:out') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return oldBusinessObject.get('source') === oldBinding.source || oldBusinessObject.get('sourceExpression') || oldBinding.sourceExpression;\n });\n }\n if (oldBindingType === 'camunda:inputParameter' || oldBindingType === 'camunda:outputParameter') {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(businessObject, 'camunda:Connector')) {\n businessObject = businessObject.get('camunda:inputOutput');\n if (!businessObject) {\n return;\n }\n } else {\n businessObject = findExtension(businessObject, 'camunda:InputOutput');\n if (!businessObject) {\n return;\n }\n }\n if (oldBindingType === 'camunda:inputParameter') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('camunda:inputParameters'), function (oldBusinessObject) {\n return oldBusinessObject.get('camunda:name') === oldBinding.name;\n });\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('camunda:outputParameters'), function (oldBusinessObject) {\n if (oldBinding.scriptFormat) {\n const definition = oldBusinessObject.get('camunda:definition');\n return definition && definition.get('camunda:value') === oldBinding.source;\n } else {\n return oldBusinessObject.get('camunda:value') === oldBinding.source;\n }\n });\n }\n }\n if (oldBindingType === 'camunda:property') {\n if (!businessObject || !businessObject.get('values') || !businessObject.get('values').length) {\n return;\n }\n businessObject = findExtension(businessObject, 'camunda:Properties');\n if (!businessObject) {\n return;\n }\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(businessObject.get('values'), function (oldBusinessObject) {\n return oldBusinessObject.get('camunda:name') === oldBinding.name;\n });\n }\n if (oldBindingType === 'camunda:errorEventDefinition') {\n return findCamundaErrorEventDefinition(element, oldBinding.errorRef);\n }\n}\n\n/**\n * Find old property matching specified new property.\n *\n * @param {Object} oldTemplate\n * @param {Object} newProperty\n *\n * @returns {Object}\n */\nfunction findOldProperty(oldTemplate, newProperty) {\n if (!oldTemplate) {\n return;\n }\n const oldProperties = oldTemplate.properties,\n newBinding = newProperty.binding,\n newBindingName = newBinding.name,\n newBindingType = newBinding.type;\n if (newBindingType === 'property') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'property' && oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'camunda:field') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:field' && oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'camunda:in') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'camunda:in') {\n return;\n }\n\n // always override if change from source to source expression or vice versa\n if (oldBinding.expression && !newBinding.expression || !oldBinding.expression && newBinding.expression) {\n return;\n }\n return oldBinding.target === newBinding.target;\n });\n }\n if (newBindingType === 'camunda:in:businessKey') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:in:businessKey';\n });\n }\n if (newBindingType === 'camunda:out') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:out' && (oldBinding.source === newBinding.source || oldBinding.sourceExpression === newBinding.sourceExpression);\n });\n }\n if (newBindingType === 'camunda:inputParameter') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'camunda:inputParameter') {\n return;\n }\n return oldBindingName === newBindingName && oldBinding.scriptFormat === newBinding.scriptFormat;\n });\n }\n if (newBindingType === 'camunda:outputParameter') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingType = oldBinding.type;\n if (oldBindingType !== 'camunda:outputParameter') {\n return;\n }\n return oldBinding.source === newBinding.source && oldBinding.scriptFormat === newBinding.scriptFormat;\n });\n }\n if (newBindingType === 'camunda:property') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:property' && oldBindingName === newBindingName;\n });\n }\n if (newBindingType === 'camunda:errorEventDefinition') {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(oldProperties, function (oldProperty) {\n const newBindingRef = newBinding.errorRef,\n oldBinding = oldProperty.binding,\n oldBindingRef = oldBinding.errorRef,\n oldBindingType = oldBinding.type;\n return oldBindingType === 'camunda:errorEventDefinition' && oldBindingRef === newBindingRef;\n });\n }\n}\nfunction findOldScopeElement(element, scopeTemplate, template) {\n const scopeName = scopeTemplate.type,\n id = scopeTemplate.id;\n if (scopeName === 'camunda:Connector') {\n return findExtension(element, 'camunda:Connector');\n }\n if (scopeName === 'bpmn:Error') {\n // (1) find by error event definition binding\n const errorEventDefinitionBinding = findErrorEventDefinitionBinding(template, id);\n if (!errorEventDefinitionBinding) {\n return;\n }\n\n // (2) find error event definition\n const errorEventDefinition = findOldBusinessObject(element, errorEventDefinitionBinding);\n if (!errorEventDefinition) {\n return;\n }\n\n // (3) retrieve referenced error\n return errorEventDefinition.errorRef;\n }\n}\nfunction isRootElementScope(scopeName) {\n return ['bpmn:Error'].includes(scopeName);\n}\nfunction findOldScopeTemplate(scopeTemplate, oldTemplate) {\n const scopeName = scopeTemplate.type,\n scopeId = scopeTemplate.id,\n scopes = oldTemplate && handleLegacyScopes(oldTemplate.scopes);\n return scopes && (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(scopes, function (scope) {\n if (isRootElementScope(scopeName)) {\n return scope.id === scopeId;\n }\n return scope.type === scopeName;\n });\n}\nfunction findErrorEventDefinitionBinding(template, templateErrorId) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(template.properties, function (property) {\n return property.binding.errorRef === templateErrorId;\n });\n}\n\n/**\n * Check whether property was changed after being set by template.\n *\n * @param {djs.model.Base|ModdleElement} element\n * @param {Object} oldProperty\n *\n * @returns {boolean}\n */\nfunction propertyChanged(element, oldProperty) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const oldBinding = oldProperty.binding,\n oldBindingName = oldBinding.name,\n oldBindingType = oldBinding.type,\n oldPropertyValue = oldProperty.value;\n let conditionExpression, definition;\n if (oldBindingType === 'property') {\n if (oldBindingName === 'conditionExpression') {\n conditionExpression = businessObject.get('bpmn:conditionExpression');\n return conditionExpression.get('bpmn:body') !== oldPropertyValue;\n }\n return businessObject.get(oldBindingName) !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:field') {\n return businessObject.get('camunda:string') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:in') {\n if (oldBinding.expression) {\n return businessObject.get('sourceExpression') !== oldPropertyValue;\n } else {\n return businessObject.get('camunda:source') !== oldPropertyValue;\n }\n }\n if (oldBindingType === 'camunda:in:businessKey') {\n return businessObject.get('camunda:businessKey') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:out') {\n return businessObject.get('camunda:target') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:inputParameter') {\n if (oldBinding.scriptFormat) {\n definition = businessObject.get('camunda:definition');\n return definition && definition.get('camunda:value') !== oldPropertyValue;\n } else {\n return businessObject.get('camunda:value') !== oldPropertyValue;\n }\n }\n if (oldBindingType === 'camunda:outputParameter') {\n return businessObject.get('camunda:name') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:property') {\n return businessObject.get('camunda:value') !== oldPropertyValue;\n }\n if (oldBindingType === 'camunda:errorEventDefinition') {\n return businessObject.get('expression') !== oldPropertyValue;\n }\n}\nfunction remove(array, item) {\n const index = array.indexOf(item);\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(index)) {\n return array;\n }\n array.splice(index, 1);\n return array;\n}\n\nclass ElementTemplatesCommands {\n constructor(commandStack, elementTemplates, eventBus) {\n commandStack.registerHandler('element-templates.multi-command-executor', MultiCommandHandler);\n commandStack.registerHandler('propertiesPanel.camunda.changeTemplate', ChangeElementTemplateHandler);\n commandStack.registerHandler('propertiesPanel.removeTemplate', RemoveElementTemplateHandler);\n\n // apply default element templates on shape creation\n eventBus.on(['commandStack.shape.create.postExecuted'], function (event) {\n const {\n context: {\n hints = {},\n shape\n }\n } = event;\n if (hints.createElementsBehavior !== false) {\n applyDefaultTemplate(shape, elementTemplates, commandStack);\n }\n });\n\n // apply default element templates on connection creation\n eventBus.on(['commandStack.connection.create.postExecuted'], function (event) {\n const {\n context: {\n hints = {},\n connection\n }\n } = event;\n if (hints.createElementsBehavior !== false) {\n applyDefaultTemplate(connection, elementTemplates, commandStack);\n }\n });\n }\n}\nElementTemplatesCommands.$inject = ['commandStack', 'elementTemplates', 'eventBus'];\nfunction applyDefaultTemplate(element, elementTemplates, commandStack) {\n if (!elementTemplates.get(element) && elementTemplates.getDefault(element)) {\n const command = 'propertiesPanel.camunda.changeTemplate';\n const commandContext = {\n element: element,\n newTemplate: elementTemplates.getDefault(element)\n };\n commandStack.execute(command, commandContext);\n }\n}\n\nvar commandsModule = {\n __init__: ['elementTemplateCommands'],\n elementTemplateCommands: ['type', ElementTemplatesCommands]\n};\n\n/**\n * This Behavior checks if the new element's type is in\n * the list of elements the template applies to and unlinks\n * it if not.\n */\nclass ReplaceBehavior extends diagram_js_lib_command_CommandInterceptor__WEBPACK_IMPORTED_MODULE_17__[\"default\"] {\n constructor(elementTemplates, injector) {\n super(injector.get('eventBus'));\n this.postExecuted('shape.replace', function (e) {\n var context = e.context,\n oldShape = context.oldShape,\n oldBo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(oldShape),\n newShape = context.newShape,\n newBo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(newShape);\n if (!oldBo.modelerTemplate) {\n return;\n }\n const template = newBo.modelerTemplate;\n const version = newBo.modelerTemplateVersion;\n const elementTemplate = elementTemplates.get(template, version);\n if (!elementTemplate) {\n elementTemplates.unlinkTemplate(newShape, injector);\n return;\n }\n const {\n appliesTo,\n elementType\n } = elementTemplate;\n if (elementType) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newShape, elementType.value)) {\n elementTemplates.unlinkTemplate(newShape, injector);\n }\n return;\n }\n const allowed = appliesTo.reduce((allowed, type) => {\n return allowed || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(newBo, type);\n }, false);\n if (!allowed) {\n elementTemplates.unlinkTemplate(newShape, injector);\n }\n });\n }\n}\nReplaceBehavior.$inject = ['elementTemplates', 'injector'];\n\nvar behaviorModule = {\n __init__: ['elementTemplatesReplaceBehavior'],\n elementTemplatesReplaceBehavior: ['type', ReplaceBehavior]\n};\n\nvar coreModule = {\n __depends__: [commandsModule, behaviorModule],\n __init__: ['elementTemplatesLoader'],\n elementTemplates: ['type', ElementTemplates$1],\n elementTemplatesLoader: ['type', ElementTemplatesLoader$1]\n};\n\nconst CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1 = 'camunda:errorEventDefinition';\nconst CAMUNDA_EXECUTION_LISTENER_TYPE = 'camunda:executionListener';\nconst CAMUNDA_FIELD_TYPE = 'camunda:field';\nconst CAMUNDA_IN_BUSINESS_KEY_TYPE = 'camunda:in:businessKey';\nconst CAMUNDA_IN_TYPE = 'camunda:in';\nconst CAMUNDA_INPUT_PARAMETER_TYPE$1 = 'camunda:inputParameter';\nconst CAMUNDA_OUT_TYPE = 'camunda:out';\nconst CAMUNDA_OUTPUT_PARAMETER_TYPE$1 = 'camunda:outputParameter';\nconst CAMUNDA_PROPERTY_TYPE = 'camunda:property';\nconst PROPERTY_TYPE = 'property';\nconst EXTENSION_BINDING_TYPES = [CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1, CAMUNDA_FIELD_TYPE, CAMUNDA_IN_TYPE, CAMUNDA_IN_BUSINESS_KEY_TYPE, CAMUNDA_INPUT_PARAMETER_TYPE$1, CAMUNDA_OUT_TYPE, CAMUNDA_OUTPUT_PARAMETER_TYPE$1, CAMUNDA_PROPERTY_TYPE];\nconst IO_BINDING_TYPES = [CAMUNDA_INPUT_PARAMETER_TYPE$1, CAMUNDA_OUTPUT_PARAMETER_TYPE$1];\nconst IN_OUT_BINDING_TYPES = [CAMUNDA_IN_BUSINESS_KEY_TYPE, CAMUNDA_IN_TYPE, CAMUNDA_OUT_TYPE];\n\nconst PRIMITIVE_MODDLE_TYPES = ['Boolean', 'Integer', 'String'];\nfunction CustomProperties(props) {\n const {\n element,\n elementTemplate,\n injector\n } = props;\n const translate = injector.get('translate');\n const groups = [];\n const {\n id,\n properties,\n groups: propertyGroups,\n scopes\n } = elementTemplate;\n\n // (1) group properties by group id\n const groupedProperties = groupByGroupId(properties);\n const defaultProps = [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(groupedProperties, (properties, groupId) => {\n const group = findCustomGroup(propertyGroups, groupId);\n if (!group) {\n return defaultProps.push(...properties);\n }\n addCustomGroup(groups, {\n element,\n id: `ElementTemplates__CustomProperties-${groupId}`,\n label: translate(group.label),\n properties: properties,\n templateId: `${id}-${groupId}`\n });\n });\n\n // (2) add default custom props\n if (defaultProps.length) {\n addCustomGroup(groups, {\n id: 'ElementTemplates__CustomProperties',\n label: translate('Custom properties'),\n element,\n properties: defaultProps,\n templateId: id\n });\n }\n\n // (3) add custom scopes props\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isArray)(scopes)) {\n scopes.forEach(scope => {\n const {\n properties,\n type\n } = scope;\n const id = type.replace(/:/g, '-');\n addCustomGroup(groups, {\n element,\n id: `ElementTemplates__CustomGroup-${id}`,\n label: translate(`Custom properties for scope <${type}>`),\n properties,\n templateId: id,\n scope\n });\n });\n }\n return groups;\n}\nfunction addCustomGroup(groups, props) {\n const {\n element,\n id,\n label,\n properties,\n scope,\n templateId\n } = props;\n const customPropertiesGroup = {\n id,\n label,\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.Group,\n entries: [],\n shouldOpen: true\n };\n properties.forEach((property, index) => {\n const entry = createCustomEntry(`custom-entry-${templateId}-${index}`, element, property, scope);\n if (entry) {\n customPropertiesGroup.entries.push(entry);\n }\n });\n if (customPropertiesGroup.entries.length) {\n groups.push(customPropertiesGroup);\n }\n}\nfunction createCustomEntry(id, element, property, scope) {\n let {\n type\n } = property;\n if (!type) {\n type = getDefaultType(property);\n }\n if (type === 'Boolean') {\n return {\n id,\n component: BooleanProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isCheckboxEntryEdited,\n property,\n scope\n };\n }\n if (type === 'Dropdown') {\n return {\n id,\n component: DropdownProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isSelectEntryEdited,\n property,\n scope\n };\n }\n if (type === 'String') {\n return {\n id,\n component: StringProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextFieldEntryEdited,\n property,\n scope\n };\n }\n if (type === 'Text') {\n return {\n id,\n component: TextAreaProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.isTextAreaEntryEdited,\n property,\n scope\n };\n }\n}\nfunction getDefaultType(property) {\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n if ([PROPERTY_TYPE, CAMUNDA_PROPERTY_TYPE, CAMUNDA_IN_TYPE, CAMUNDA_IN_BUSINESS_KEY_TYPE, CAMUNDA_OUT_TYPE, CAMUNDA_FIELD_TYPE].includes(type)) {\n return 'String';\n }\n if (type === CAMUNDA_EXECUTION_LISTENER_TYPE) {\n return 'Hidden';\n }\n}\nfunction BooleanProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.CheckboxEntry)({\n element,\n getValue: propertyGetter(element, property, scope),\n id,\n label: label ? translate(label) : label,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n disabled: editable === false\n });\n}\nfunction DropdownProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getOptions = () => {\n const {\n choices\n } = property;\n return choices.map(({\n name,\n value\n }) => {\n return {\n label: translate(name),\n value\n };\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.SelectEntry)({\n element,\n id,\n label: label ? translate(label) : label,\n getOptions,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter(element, property, scope),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n disabled: editable === false,\n validate: propertyValidator(translate, property)\n });\n}\nfunction StringProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label,\n placeholder\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n debounce,\n element,\n getValue: propertyGetter(element, property, scope),\n id,\n placeholder,\n label: label ? translate(label) : label,\n description: PropertyDescription({\n description\n }),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n validate: propertyValidator(translate, property),\n disabled: editable === false\n });\n}\nfunction TextAreaProperty(props) {\n const {\n element,\n id,\n property,\n scope\n } = props;\n const {\n description,\n editable,\n label,\n placeholder\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextAreaEntry)({\n debounce,\n element,\n id,\n placeholder,\n label: label ? translate(label) : label,\n description: PropertyDescription({\n description\n }),\n getValue: propertyGetter(element, property, scope),\n setValue: propertySetter(bpmnFactory, commandStack, element, property, scope),\n disabled: editable === false,\n validate: propertyValidator(translate, property)\n });\n}\nfunction propertyGetter(element, property, scope) {\n return function getValue() {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const {\n binding,\n value: defaultValue = ''\n } = property;\n const {\n name,\n type\n } = binding;\n if (scope) {\n businessObject = getScopeBusinessObject(businessObject, scope);\n if (!businessObject) {\n return defaultValue;\n }\n }\n\n // property\n if (type === 'property') {\n const value = businessObject.get(name);\n if (name === 'conditionExpression') {\n if (value) {\n return value.get('body');\n }\n return defaultValue;\n } else {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(value)) {\n return value;\n }\n return defaultValue;\n }\n }\n\n // camunda:ErrorEventDefinition\n if (type === CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1) {\n const {\n errorRef\n } = binding;\n const errorEventDefinition = findCamundaErrorEventDefinition(businessObject, errorRef);\n if (errorEventDefinition) {\n return errorEventDefinition.get('camunda:expression');\n } else {\n return '';\n }\n }\n\n // camunda:Field\n if (type === CAMUNDA_FIELD_TYPE) {\n const camundaFields = findExtensions(businessObject, ['camunda:Field']);\n const camundaField = camundaFields.find(camundaField => {\n return camundaField.get('camunda:name') === name;\n });\n if (camundaField) {\n return camundaField.get('camunda:string') || camundaField.get('camunda:expression');\n } else {\n return '';\n }\n }\n\n // camunda:Property\n if (type === CAMUNDA_PROPERTY_TYPE) {\n let camundaProperties;\n if (scope) {\n // TODO(philippfromme): as only bpmn:Error and camunda:Connector are supported this code is practically dead\n camundaProperties = businessObject.get('properties');\n } else {\n camundaProperties = findExtension(businessObject, 'camunda:Properties');\n }\n if (camundaProperties) {\n const camundaProperty = findCamundaProperty(camundaProperties, binding);\n if (camundaProperty) {\n return camundaProperty.get('camunda:value');\n }\n }\n return defaultValue;\n }\n if (IO_BINDING_TYPES.includes(type)) {\n let inputOutput;\n if (scope) {\n inputOutput = businessObject.get('inputOutput');\n } else {\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n }\n if (!inputOutput) {\n return defaultValue;\n }\n\n // camunda:InputParameter\n if (type === CAMUNDA_INPUT_PARAMETER_TYPE$1) {\n const inputParameter = findInputParameter(inputOutput, binding);\n if (inputParameter) {\n const {\n scriptFormat\n } = binding;\n if (scriptFormat) {\n const definition = inputParameter.get('camunda:definition');\n if (definition) {\n return definition.get('camunda:value');\n }\n } else {\n return inputParameter.get('value') || '';\n }\n }\n return defaultValue;\n }\n\n // camunda:OutputParameter\n if (type === CAMUNDA_OUTPUT_PARAMETER_TYPE$1) {\n const outputParameter = findOutputParameter(inputOutput, binding);\n if (outputParameter) {\n return outputParameter.get('camunda:name');\n }\n return defaultValue;\n }\n }\n\n // camunda:In and camunda:Out\n if (IN_OUT_BINDING_TYPES.includes(type)) {\n const camundaInOut = findCamundaInOut(businessObject, binding);\n if (camundaInOut) {\n if (type === CAMUNDA_IN_BUSINESS_KEY_TYPE) {\n return camundaInOut.get('camunda:businessKey');\n } else if (type === CAMUNDA_OUT_TYPE) {\n return camundaInOut.get('camunda:target');\n } else if (type === CAMUNDA_IN_TYPE) {\n const {\n expression\n } = binding;\n if (expression) {\n return camundaInOut.get('camunda:sourceExpression');\n } else {\n return camundaInOut.get('camunda:source');\n }\n }\n }\n return defaultValue;\n }\n\n // should never throw as templates are validated beforehand\n throw unknownBindingError(element, property);\n };\n}\nfunction propertySetter(bpmnFactory, commandStack, element, property, scope) {\n return function setValue(value) {\n let businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const {\n binding\n } = property;\n const {\n name,\n type\n } = binding;\n const rootElement = getRoot(businessObject);\n let extensionElements;\n let propertyValue;\n const commands = [];\n if (EXTENSION_BINDING_TYPES.includes(type)) {\n extensionElements = businessObject.get('extensionElements');\n if (!extensionElements) {\n extensionElements = createElement('bpmn:ExtensionElements', null, businessObject, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n extensionElements\n }\n }\n });\n }\n }\n if (scope) {\n businessObject = getScopeBusinessObject(businessObject, scope);\n if (!businessObject) {\n // bpmn:Error\n if (scope.type === 'bpmn:Error') {\n businessObject = createError(scope.id, rootElement, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: rootElement,\n properties: {\n rootElements: [...rootElement.get('rootElements'), businessObject]\n }\n }\n });\n } else {\n businessObject = createElement(scope.type, null, element, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), businessObject]\n }\n }\n });\n }\n }\n }\n\n // property\n if (type === 'property') {\n if (name === 'conditionExpression') {\n const {\n scriptFormat\n } = binding;\n propertyValue = createElement('bpmn:FormalExpression', {\n body: value,\n language: scriptFormat\n }, businessObject, bpmnFactory);\n } else {\n const propertyDescriptor = businessObject.$descriptor.propertiesByName[name];\n const {\n type: propertyType\n } = propertyDescriptor;\n\n // do not override non-primitive types\n if (!PRIMITIVE_MODDLE_TYPES.includes(propertyType)) {\n throw new Error(`cannot set property of type <${propertyType}>`);\n }\n if (propertyType === 'Boolean') {\n propertyValue = !!value;\n } else if (propertyType === 'Integer') {\n propertyValue = parseInt(value, 10);\n if (isNaN(propertyValue)) {\n // do not set NaN value\n propertyValue = undefined;\n }\n } else {\n // make sure we don't remove the property\n propertyValue = value || '';\n }\n }\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isUndefined)(propertyValue)) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n [name]: propertyValue\n }\n }\n });\n }\n }\n\n // camunda:ErrorEventDefinition\n if (type === CAMUNDA_ERROR_EVENT_DEFINITION_TYPE$1) {\n const {\n errorRef\n } = binding;\n const oldCamundaErrorEventDefinition = findCamundaErrorEventDefinition(businessObject, errorRef);\n if (oldCamundaErrorEventDefinition) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: oldCamundaErrorEventDefinition,\n properties: {\n 'camunda:expression': value\n }\n }\n });\n } else {\n const newError = createError(binding.errorRef, rootElement, bpmnFactory),\n newCamundaErrorEventDefinition = createCamundaErrorEventDefinition(value, newError, extensionElements, bpmnFactory);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: rootElement,\n properties: {\n rootElements: [...rootElement.get('rootElements'), newError]\n }\n }\n });\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), newCamundaErrorEventDefinition]\n }\n }\n });\n }\n }\n\n // camunda:Field\n if (type === CAMUNDA_FIELD_TYPE) {\n const oldCamundaFields = findExtensions(businessObject, ['camunda:Field']);\n const newCamundaFields = [];\n if (oldCamundaFields.length) {\n oldCamundaFields.forEach(camundaField => {\n if (camundaField.name === name) {\n newCamundaFields.push(createCamundaFieldInjection(binding, value, bpmnFactory));\n } else {\n newCamundaFields.push(camundaField);\n }\n });\n } else {\n newCamundaFields.push(createCamundaFieldInjection(binding, value, bpmnFactory));\n }\n const values = extensionElements.get('values').filter(value => !oldCamundaFields.includes(value));\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...values, ...newCamundaFields]\n }\n }\n });\n }\n\n // camunda:Property\n if (type === CAMUNDA_PROPERTY_TYPE) {\n let camundaProperties;\n if (scope) {\n camundaProperties = businessObject.get('properties');\n } else {\n camundaProperties = findExtension(extensionElements, 'camunda:Properties');\n }\n if (!camundaProperties) {\n camundaProperties = createElement('camunda:Properties', null, businessObject, bpmnFactory);\n if (scope) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n properties: camundaProperties\n }\n }\n });\n } else {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), camundaProperties]\n }\n }\n });\n }\n }\n const oldCamundaProperty = findCamundaProperty(camundaProperties, binding);\n const newCamundaProperty = createCamundaProperty(binding, value, bpmnFactory);\n const values = camundaProperties.get('values').filter(value => value !== oldCamundaProperty);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: camundaProperties,\n properties: {\n values: [...values, newCamundaProperty]\n }\n }\n });\n }\n if (IO_BINDING_TYPES.includes(type)) {\n let inputOutput;\n if (scope) {\n inputOutput = businessObject.get('inputOutput');\n } else {\n inputOutput = findExtension(extensionElements, 'camunda:InputOutput');\n }\n if (!inputOutput) {\n inputOutput = createElement('camunda:InputOutput', null, businessObject, bpmnFactory);\n if (scope) {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: businessObject,\n properties: {\n inputOutput\n }\n }\n });\n } else {\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...extensionElements.get('values'), inputOutput]\n }\n }\n });\n }\n }\n\n // camunda:InputParameter\n if (type === CAMUNDA_INPUT_PARAMETER_TYPE$1) {\n const oldCamundaInputParameter = findInputParameter(inputOutput, binding);\n const newCamundaInputParameter = createInputParameter(binding, value, bpmnFactory);\n const values = inputOutput.get('camunda:inputParameters').filter(value => value !== oldCamundaInputParameter);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: inputOutput,\n properties: {\n 'camunda:inputParameters': [...values, newCamundaInputParameter]\n }\n }\n });\n }\n\n // camunda:OutputParameter\n if (type === CAMUNDA_OUTPUT_PARAMETER_TYPE$1) {\n const oldCamundaOutputParameter = findOutputParameter(inputOutput, binding);\n const newCamundaOutputParameter = createOutputParameter(binding, value, bpmnFactory);\n const values = inputOutput.get('camunda:outputParameters').filter(value => value !== oldCamundaOutputParameter);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: inputOutput,\n properties: {\n 'camunda:outputParameters': [...values, newCamundaOutputParameter]\n }\n }\n });\n }\n }\n\n // camunda:In and camunda:Out\n if (IN_OUT_BINDING_TYPES.includes(type)) {\n const oldCamundaInOut = findCamundaInOut(businessObject, binding);\n let newCamundaInOut;\n if (type === CAMUNDA_IN_TYPE) {\n newCamundaInOut = createCamundaIn(binding, value, bpmnFactory);\n } else if (type === CAMUNDA_OUT_TYPE) {\n newCamundaInOut = createCamundaOut(binding, value, bpmnFactory);\n } else {\n newCamundaInOut = createCamundaInWithBusinessKey(value, bpmnFactory);\n }\n const values = extensionElements.get('values').filter(value => value !== oldCamundaInOut);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: extensionElements,\n properties: {\n values: [...values, newCamundaInOut]\n }\n }\n });\n }\n if (commands.length) {\n commandStack.execute('element-templates.multi-command-executor', commands);\n return;\n }\n\n // should never throw as templates are validated beforehand\n throw unknownBindingError(element, property);\n };\n}\nfunction propertyValidator(translate, property) {\n return function validate(value) {\n const {\n constraints = {}\n } = property;\n const {\n maxLength,\n minLength,\n notEmpty\n } = constraints;\n if (notEmpty && isEmptyString(value)) {\n return translate('Must not be empty.');\n }\n if (maxLength && value.length > maxLength) {\n return translate('Must have max length {maxLength}.', {\n maxLength\n });\n }\n if (minLength && value.length < minLength) {\n return translate('Must have min length {minLength}.', {\n minLength\n });\n }\n let {\n pattern\n } = constraints;\n if (pattern) {\n let message;\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(pattern)) {\n message = pattern.message;\n pattern = pattern.value;\n }\n if (!matchesPattern(value, pattern)) {\n return message || translate('Must match pattern {pattern}.', {\n pattern\n });\n }\n }\n };\n}\nfunction getScopeBusinessObject(businessObject, scope) {\n const {\n id,\n type\n } = scope;\n if (type === 'bpmn:Error') {\n // retrieve error through referenced error event definition\n const errorEventDefinition = findCamundaErrorEventDefinition(businessObject, id);\n if (errorEventDefinition) {\n return errorEventDefinition.get('errorRef');\n }\n }\n return findExtension(businessObject, type);\n}\nfunction unknownBindingError(element, property) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const id = businessObject.get('id');\n const {\n binding\n } = property;\n const {\n type\n } = binding;\n return new Error(`unknown binding <${type}> for element <${id}>, this should never happen`);\n}\nfunction isEmptyString(string) {\n return !string || !string.trim().length;\n}\nfunction matchesPattern(string, pattern) {\n return new RegExp(pattern).test(string);\n}\nfunction groupByGroupId(properties) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.groupBy)(properties, 'group');\n}\nfunction findCustomGroup(groups, id) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(groups, g => g.id === id);\n}\n\nfunction ErrorProperties(props) {\n const {\n element,\n index,\n property,\n groups\n } = props;\n const {\n binding,\n label\n } = property;\n const {\n errorRef\n } = binding;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n errorEventDefinitions = findExtensions(businessObject, ['camunda:ErrorEventDefinition']);\n if (!errorEventDefinitions.length) {\n return;\n }\n const errorEventDefinition = findCamundaErrorEventDefinition(element, errorRef);\n const id = `${element.id}-error-${index}`;\n let entries = [];\n const errorGroup = groups.find(({\n id\n }) => id === 'CamundaPlatform__Errors');\n const originalItem = errorGroup.items.find(({\n entries\n }) => entries[0].errorEventDefinition === errorEventDefinition);\n entries = originalItem.entries;\n\n // (1) remove global error referenced entry\n // entries.shift();\n entries = removeEntry$1(entries, '-errorRef');\n\n // (2) remove throw expression input\n // entries.pop();\n entries = removeEntry$1(entries, '-expression');\n\n // (3) add disabled throw expression input\n entries.push({\n id: `${id}-expression`,\n component: Expression,\n errorEventDefinition,\n property\n });\n const item = {\n id,\n label: label || getErrorLabel(errorEventDefinition),\n entries\n };\n return item;\n}\nfunction Expression(props) {\n const {\n errorEventDefinition,\n id\n } = props;\n const translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput');\n const setValue = () => {};\n const getValue = () => {\n return errorEventDefinition.get('camunda:expression');\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n element: errorEventDefinition,\n id,\n label: translate('Throw expression'),\n getValue,\n setValue,\n debounce,\n disabled: true\n });\n}\nfunction removeEntry$1(entries, suffix) {\n const entry = entries.find(({\n id\n }) => id.endsWith(suffix));\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(entries, entry);\n}\nfunction getErrorLabel(errorEventDefinition) {\n const error = errorEventDefinition.get('errorRef');\n if (!error) {\n return '';\n }\n const errorCode = error.get('errorCode'),\n name = error.get('name') || '';\n if (errorCode) {\n return `${name} (code = ${errorCode})`;\n }\n return name;\n}\n\nfunction InputProperties(props) {\n const {\n element,\n index,\n property,\n groups\n } = props;\n const {\n binding,\n description,\n label\n } = property;\n const {\n name\n } = binding;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n const inputParameter = inputOutput && findInputParameter(inputOutput, binding);\n const id = `${element.id}-inputParameter-${index}`;\n let entries = [];\n if (inputParameter) {\n const inputGroup = groups.find(({\n id\n }) => id === 'CamundaPlatform__Input');\n const item = inputGroup.items.find(({\n entries\n }) => entries[0].parameter === inputParameter);\n entries = item.entries;\n\n // (1) remove name entry\n entries = removeEntry(entries, '-name');\n }\n\n // (2) add local variable assignment entry\n entries.unshift({\n id: `${id}-local-variable-assignment`,\n component: LocalVariableAssignment,\n inputParameter,\n property\n });\n\n // (3) add description entry\n if (description) {\n entries.unshift({\n id: `${id}-description`,\n component: Description$1,\n text: description\n });\n }\n\n // @barmac: binding#name is required so there is no third option\n const item = {\n id,\n label: label || name,\n entries\n };\n return item;\n}\n\n// TODO(philippfromme): add text entry to properties-panel\nfunction Description$1(props) {\n const {\n id,\n text\n } = props;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-entry\",\n \"data-entry-id\": id,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-description\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(PropertyDescription, {\n description: text\n })\n })\n });\n}\nfunction LocalVariableAssignment(props) {\n const {\n element,\n id,\n property,\n inputParameter\n } = props;\n const {\n binding\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n modeling = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('modeling'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getValue = () => {\n return inputParameter;\n };\n const setValue = value => {\n if (value) {\n addInputParameter(element, property, bpmnFactory, modeling);\n } else {\n removeInputParameter(element, binding, modeling);\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ToggleSwitchEntry)({\n id,\n label: translate('Local variable assignment'),\n switcherLabel: inputParameter ? translate('On') : translate('Off'),\n description: inputParameter ? '' : translate('Parameter won\\'t be created as local variable.'),\n getValue,\n setValue\n });\n}\nfunction addInputParameter(element, property, bpmnFactory, modeling) {\n const {\n binding,\n value\n } = property;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const extensionElements = businessObject.get('extensionElements');\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n let updatedBusinessObject, update;\n if (!extensionElements) {\n updatedBusinessObject = businessObject;\n const extensionElements = createExtensionElements$1(businessObject, bpmnFactory),\n inputOutput = createInputOutput$1(binding, value, bpmnFactory, extensionElements);\n extensionElements.values.push(inputOutput);\n update = {\n extensionElements\n };\n } else if (!inputOutput) {\n updatedBusinessObject = extensionElements;\n const inputOutput = createInputOutput$1(binding, value, bpmnFactory, extensionElements);\n update = {\n values: extensionElements.get('values').concat(inputOutput)\n };\n } else {\n updatedBusinessObject = inputOutput;\n const inputParameter = createInputParameter(binding, value, bpmnFactory);\n inputParameter.$parent = inputOutput;\n update = {\n inputParameters: inputOutput.get('camunda:inputParameters').concat(inputParameter)\n };\n }\n modeling.updateModdleProperties(element, updatedBusinessObject, update);\n}\nfunction removeInputParameter(element, binding, modeling) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput'),\n inputParameters = inputOutput.get('camunda:inputParameters');\n const inputParameter = findInputParameter(inputOutput, binding);\n modeling.updateModdleProperties(element, inputOutput, {\n inputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(inputParameters, inputParameter)\n });\n}\nfunction removeEntry(entries, suffix) {\n const entry = entries.find(({\n id\n }) => id.endsWith(suffix));\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(entries, entry);\n}\nfunction createExtensionElements$1(businessObject, bpmnFactory) {\n return createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n}\nfunction createInputOutput$1(binding, value, bpmnFactory, extensionElements) {\n const inputParameter = createInputParameter(binding, value, bpmnFactory);\n const inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [inputParameter],\n outputParameters: []\n }, extensionElements, bpmnFactory);\n inputParameter.$parent = inputOutput;\n return inputOutput;\n}\n\nconst SPACE_REGEX = /\\s/;\nfunction containsSpace(value) {\n return SPACE_REGEX.test(value);\n}\n\nfunction OutputProperties(props) {\n const {\n element,\n index,\n injector,\n property\n } = props;\n const {\n binding,\n description,\n label\n } = property;\n const {\n name\n } = binding;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element),\n inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n const translate = injector.get('translate');\n const outputParameter = inputOutput && findOutputParameter(inputOutput, binding);\n const id = `${element.id}-outputParameter-${index}`;\n let entries = [];\n\n // (1) add description entry\n if (description) {\n entries.push({\n id: `${id}-description`,\n component: Description,\n text: description\n });\n }\n\n // (2) add local variable assignment entry\n entries.push({\n id: `${id}-local-variable-assignment`,\n component: ProcessVariableAssignment,\n outputParameter,\n property\n });\n if (outputParameter) {\n // (3) add assign to process variable entry\n entries.push({\n id: `${id}-assign-to-process-variable`,\n component: AssignToProcessVariable,\n property\n });\n }\n const item = {\n id,\n label: label || name || translate(''),\n entries\n };\n return item;\n}\n\n// TODO(philippfromme): add text entry to properties-panel\nfunction Description(props) {\n const {\n id,\n text\n } = props;\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-entry\",\n \"data-entry-id\": id,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n class: \"bio-properties-panel-description\",\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(PropertyDescription, {\n description: text\n })\n })\n });\n}\nfunction ProcessVariableAssignment(props) {\n const {\n element,\n id,\n property,\n outputParameter\n } = props;\n const {\n binding\n } = property;\n const bpmnFactory = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('bpmnFactory'),\n modeling = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('modeling'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const getValue = () => {\n return outputParameter;\n };\n const setValue = value => {\n if (value) {\n addOutputParameter(element, property, bpmnFactory, modeling);\n } else {\n removeOutputParameter(element, binding, modeling);\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ToggleSwitchEntry)({\n id,\n label: translate('Process variable assignment'),\n switcherLabel: outputParameter ? translate('On') : translate('Off'),\n description: outputParameter ? '' : translate('Parameter won\\'t be available in process scope.'),\n getValue,\n setValue\n });\n}\nfunction AssignToProcessVariable(props) {\n const {\n element,\n id,\n property\n } = props;\n const {\n binding\n } = property;\n const inputOutput = findExtension(element, 'camunda:InputOutput'),\n outputParameter = findOutputParameter(inputOutput, binding);\n const commandStack = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('commandStack'),\n debounce = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('debounceInput'),\n translate = (0,bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.useService)('translate');\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: outputParameter,\n properties: {\n name: value\n }\n });\n };\n const getValue = () => {\n return outputParameter.get('camunda:name');\n };\n const validate = value => {\n if (!value) {\n return translate('Process variable name must not be empty.');\n } else if (containsSpace(value)) {\n return translate('Process variable name must not contain spaces.');\n }\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.TextFieldEntry)({\n debounce,\n element: outputParameter,\n id,\n label: translate('Assign to process variable'),\n getValue,\n setValue,\n validate\n });\n}\nfunction addOutputParameter(element, property, bpmnFactory, modeling) {\n const {\n binding,\n value\n } = property;\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const extensionElements = businessObject.get('extensionElements');\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput');\n let updatedBusinessObject, update;\n if (!extensionElements) {\n updatedBusinessObject = businessObject;\n const extensionElements = createExtensionElements(businessObject, bpmnFactory),\n inputOutput = createInputOutput(binding, value, bpmnFactory, extensionElements);\n extensionElements.values.push(inputOutput);\n update = {\n extensionElements\n };\n } else if (!inputOutput) {\n updatedBusinessObject = extensionElements;\n const inputOutput = createInputOutput(binding, value, bpmnFactory, extensionElements);\n update = {\n values: extensionElements.get('values').concat(inputOutput)\n };\n } else {\n updatedBusinessObject = inputOutput;\n const outputParameter = createOutputParameter(binding, value, bpmnFactory);\n outputParameter.$parent = inputOutput;\n update = {\n outputParameters: inputOutput.get('camunda:outputParameters').concat(outputParameter)\n };\n }\n modeling.updateModdleProperties(element, updatedBusinessObject, update);\n}\nfunction removeOutputParameter(element, binding, modeling) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.getBusinessObject)(element);\n const inputOutput = findExtension(businessObject, 'camunda:InputOutput'),\n outputParameters = inputOutput.get('camunda:outputParameters');\n const outputParameter = findOutputParameter(inputOutput, binding);\n modeling.updateModdleProperties(element, inputOutput, {\n outputParameters: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.without)(outputParameters, outputParameter)\n });\n}\nfunction createExtensionElements(businessObject, bpmnFactory) {\n return createElement('bpmn:ExtensionElements', {\n values: []\n }, businessObject, bpmnFactory);\n}\nfunction createInputOutput(binding, value, bpmnFactory, extensionElements) {\n const outputParameter = createOutputParameter(binding, value, bpmnFactory);\n const inputOutput = createElement('camunda:InputOutput', {\n inputParameters: [],\n outputParameters: [outputParameter]\n }, extensionElements, bpmnFactory);\n outputParameter.$parent = inputOutput;\n return inputOutput;\n}\n\nconst CAMUNDA_ERROR_EVENT_DEFINITION_TYPE = 'camunda:errorEventDefinition',\n CAMUNDA_INPUT_PARAMETER_TYPE = 'camunda:inputParameter',\n CAMUNDA_OUTPUT_PARAMETER_TYPE = 'camunda:outputParameter';\nconst LOWER_PRIORITY = 300;\nconst ALWAYS_DISPLAYED_GROUPS = ['general', 'documentation', 'multiInstance'];\nclass ElementTemplatesPropertiesProvider {\n constructor(elementTemplates, propertiesPanel, injector) {\n propertiesPanel.registerProvider(LOWER_PRIORITY, this);\n this._elementTemplates = elementTemplates;\n this._injector = injector;\n }\n getGroups(element) {\n return groups => {\n const injector = this._injector;\n if (!this._shouldShowTemplateProperties(element)) {\n return groups;\n }\n const translate = injector.get('translate');\n\n // (0) Copy provided groups\n groups = groups.slice();\n const templatesGroup = {\n element,\n id: 'ElementTemplates__Template',\n label: translate('Template'),\n component: createElementTemplatesGroup(),\n entries: TemplateProps({\n element,\n elementTemplates: this._elementTemplates\n })\n };\n\n // (1) Add templates group\n addGroupsAfter(ALWAYS_DISPLAYED_GROUPS, groups, [templatesGroup]);\n const elementTemplate = this._elementTemplates.get(element);\n if (elementTemplate) {\n const templateSpecificGroups = [].concat(createInputGroup(element, elementTemplate, injector, groups) || [], createOutputGroup(element, elementTemplate, injector) || [], createErrorGroup(element, elementTemplate, injector, groups) || [], CustomProperties({\n element,\n elementTemplate,\n injector\n }));\n\n // (2) add template-specific properties groups\n addGroupsAfter('ElementTemplates__Template', groups, templateSpecificGroups);\n }\n\n // (3) apply entries visible\n if (getTemplateId(element)) {\n groups = filterWithEntriesVisible(elementTemplate || {}, groups);\n }\n return groups;\n };\n }\n _shouldShowTemplateProperties(element) {\n return getTemplateId(element) || this._elementTemplates.getAll(element).length;\n }\n}\nElementTemplatesPropertiesProvider.$inject = ['elementTemplates', 'propertiesPanel', 'injector'];\n\n// helper /////////////////////\n\nfunction createInputGroup(element, elementTemplate, injector, groups) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Inputs'),\n id: 'ElementTemplates__Input',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ListGroup,\n items: []\n };\n const properties = elementTemplate.properties.filter(({\n binding,\n type\n }) => {\n return !type && binding.type === CAMUNDA_INPUT_PARAMETER_TYPE;\n });\n properties.forEach((property, index) => {\n const item = InputProperties({\n element,\n index,\n property,\n groups\n });\n if (item) {\n group.items.push(item);\n }\n });\n\n // remove if empty\n if (!group.items.length) {\n return null;\n }\n return group;\n}\nfunction createOutputGroup(element, elementTemplate, injector, groups) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Outputs'),\n id: 'ElementTemplates__Output',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ListGroup,\n items: []\n };\n const properties = elementTemplate.properties.filter(({\n binding,\n type\n }) => {\n return !type && binding.type === CAMUNDA_OUTPUT_PARAMETER_TYPE;\n });\n properties.forEach((property, index) => {\n const item = OutputProperties({\n element,\n index,\n property,\n injector\n });\n if (item) {\n group.items.push(item);\n }\n });\n\n // remove if empty\n if (!group.items.length) {\n return null;\n }\n return group;\n}\nfunction createErrorGroup(element, elementTemplate, injector, groups) {\n const translate = injector.get('translate');\n const group = {\n label: translate('Errors'),\n id: 'ElementTemplates__Error',\n component: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_3__.ListGroup,\n items: []\n };\n const properties = elementTemplate.properties.filter(({\n binding,\n type\n }) => {\n return !type && binding.type === CAMUNDA_ERROR_EVENT_DEFINITION_TYPE;\n });\n properties.forEach((property, index) => {\n const item = ErrorProperties({\n element,\n index,\n property,\n groups\n });\n if (item) {\n group.items.push(item);\n }\n });\n\n // remove if empty\n if (!group.items.length) {\n return null;\n }\n return group;\n}\n\n/**\n *\n * @param {string|string[]} idOrIds\n * @param {Array<{ id: string }} groups\n * @param {Array<{ id: string }>} groupsToAdd\n */\nfunction addGroupsAfter(idOrIds, groups, groupsToAdd) {\n let ids = idOrIds;\n if (!Array.isArray(idOrIds)) {\n ids = [idOrIds];\n }\n\n // find index of last group with provided id\n const index = groups.reduce((acc, group, index) => {\n return ids.includes(group.id) ? index : acc;\n }, -1);\n if (index !== -1) {\n groups.splice(index + 1, 0, ...groupsToAdd);\n } else {\n // add in the beginning if group with provided id is missing\n groups.unshift(...groupsToAdd);\n }\n}\nfunction filterWithEntriesVisible(template, groups) {\n if (!template.entriesVisible) {\n return groups.filter(group => {\n return ALWAYS_DISPLAYED_GROUPS.includes(group.id) || group.id.startsWith('ElementTemplates__');\n });\n }\n return groups;\n}\n\nvar propertiesProviderModule = {\n __depends__: [diagram_js_lib_i18n_translate__WEBPACK_IMPORTED_MODULE_19__[\"default\"], bpmn_js_properties_panel__WEBPACK_IMPORTED_MODULE_5__.CamundaPlatformPropertiesProviderModule],\n __init__: ['elementTemplatesPropertiesProvider'],\n elementTemplatesPropertiesProvider: ['type', ElementTemplatesPropertiesProvider]\n};\n\nvar index = {\n __depends__: [coreModule, propertiesProviderModule]\n};\n\n/**\n * Moddle base element.\n */\nfunction Base() {}\nBase.prototype.get = function (name) {\n return this.$model.properties.get(this, name);\n};\nBase.prototype.set = function (name, value) {\n this.$model.properties.set(this, name, value);\n};\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nfunction Factory(model, properties) {\n this.model = model;\n this.properties = properties;\n}\nFactory.prototype.createType = function (descriptor) {\n var model = this.model;\n var props = this.properties,\n prototype = Object.create(Base.prototype);\n\n // initialize default values\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(descriptor.properties, function (p) {\n if (!p.isMany && p.default !== undefined) {\n prototype[p.name] = p.default;\n }\n });\n props.defineModel(prototype, model);\n props.defineDescriptor(prototype, descriptor);\n var name = descriptor.ns.name;\n\n /**\n * The new type constructor\n */\n function ModdleElement(attrs) {\n props.define(this, '$type', {\n value: name,\n enumerable: true\n });\n props.define(this, '$attrs', {\n value: {}\n });\n props.define(this, '$parent', {\n writable: true\n });\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attrs, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (val, key) {\n this.set(key, val);\n }, this));\n }\n ModdleElement.prototype = prototype;\n ModdleElement.hasType = prototype.$instanceOf = this.model.hasType;\n\n // static links\n props.defineModel(ModdleElement, model);\n props.defineDescriptor(ModdleElement, descriptor);\n return ModdleElement;\n};\n\n/**\n * Built-in moddle types\n */\nvar BUILTINS = {\n String: true,\n Boolean: true,\n Integer: true,\n Real: true,\n Element: true\n};\n\n/**\n * Converters for built in types from string representations\n */\nvar TYPE_CONVERTERS = {\n String: function (s) {\n return s;\n },\n Boolean: function (s) {\n return s === 'true';\n },\n Integer: function (s) {\n return parseInt(s, 10);\n },\n Real: function (s) {\n return parseFloat(s);\n }\n};\n\n/**\n * Convert a type to its real representation\n */\nfunction coerceType(type, value) {\n var converter = TYPE_CONVERTERS[type];\n if (converter) {\n return converter(value);\n } else {\n return value;\n }\n}\n\n/**\n * Return whether the given type is built-in\n */\nfunction isBuiltIn(type) {\n return !!BUILTINS[type];\n}\n\n/**\n * Return whether the given type is simple\n */\nfunction isSimple(type) {\n return !!TYPE_CONVERTERS[type];\n}\n\n/**\n * Parses a namespaced attribute name of the form (ns:)localName to an object,\n * given a default prefix to assume in case no explicit namespace is given.\n *\n * @param {String} name\n * @param {String} [defaultPrefix] the default prefix to take, if none is present.\n *\n * @return {Object} the parsed name\n */\nfunction parseName(name, defaultPrefix) {\n var parts = name.split(/:/),\n localName,\n prefix;\n\n // no prefix (i.e. only local name)\n if (parts.length === 1) {\n localName = name;\n prefix = defaultPrefix;\n }\n\n // prefix + local name\n else if (parts.length === 2) {\n localName = parts[1];\n prefix = parts[0];\n } else {\n throw new Error('expected or , got ' + name);\n }\n name = (prefix ? prefix + ':' : '') + localName;\n return {\n name: name,\n prefix: prefix,\n localName: localName\n };\n}\n\n/**\n * A utility to build element descriptors.\n */\nfunction DescriptorBuilder(nameNs) {\n this.ns = nameNs;\n this.name = nameNs.name;\n this.allTypes = [];\n this.allTypesByName = {};\n this.properties = [];\n this.propertiesByName = {};\n}\nDescriptorBuilder.prototype.build = function () {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.pick)(this, ['ns', 'name', 'allTypes', 'allTypesByName', 'properties', 'propertiesByName', 'bodyProperty', 'idProperty']);\n};\n\n/**\n * Add property at given index.\n *\n * @param {Object} p\n * @param {Number} [idx]\n * @param {Boolean} [validate=true]\n */\nDescriptorBuilder.prototype.addProperty = function (p, idx, validate) {\n if (typeof idx === 'boolean') {\n validate = idx;\n idx = undefined;\n }\n this.addNamedProperty(p, validate !== false);\n var properties = this.properties;\n if (idx !== undefined) {\n properties.splice(idx, 0, p);\n } else {\n properties.push(p);\n }\n};\nDescriptorBuilder.prototype.replaceProperty = function (oldProperty, newProperty, replace) {\n var oldNameNs = oldProperty.ns;\n var props = this.properties,\n propertiesByName = this.propertiesByName,\n rename = oldProperty.name !== newProperty.name;\n if (oldProperty.isId) {\n if (!newProperty.isId) {\n throw new Error('property <' + newProperty.ns.name + '> must be id property ' + 'to refine <' + oldProperty.ns.name + '>');\n }\n this.setIdProperty(newProperty, false);\n }\n if (oldProperty.isBody) {\n if (!newProperty.isBody) {\n throw new Error('property <' + newProperty.ns.name + '> must be body property ' + 'to refine <' + oldProperty.ns.name + '>');\n }\n\n // TODO: Check compatibility\n this.setBodyProperty(newProperty, false);\n }\n\n // validate existence and get location of old property\n var idx = props.indexOf(oldProperty);\n if (idx === -1) {\n throw new Error('property <' + oldNameNs.name + '> not found in property list');\n }\n\n // remove old property\n props.splice(idx, 1);\n\n // replacing the named property is intentional\n //\n // * validate only if this is a \"rename\" operation\n // * add at specific index unless we \"replace\"\n //\n this.addProperty(newProperty, replace ? undefined : idx, rename);\n\n // make new property available under old name\n propertiesByName[oldNameNs.name] = propertiesByName[oldNameNs.localName] = newProperty;\n};\nDescriptorBuilder.prototype.redefineProperty = function (p, targetPropertyName, replace) {\n var nsPrefix = p.ns.prefix;\n var parts = targetPropertyName.split('#');\n var name = parseName(parts[0], nsPrefix);\n var attrName = parseName(parts[1], name.prefix).name;\n var redefinedProperty = this.propertiesByName[attrName];\n if (!redefinedProperty) {\n throw new Error('refined property <' + attrName + '> not found');\n } else {\n this.replaceProperty(redefinedProperty, p, replace);\n }\n delete p.redefines;\n};\nDescriptorBuilder.prototype.addNamedProperty = function (p, validate) {\n var ns = p.ns,\n propsByName = this.propertiesByName;\n if (validate) {\n this.assertNotDefined(p, ns.name);\n this.assertNotDefined(p, ns.localName);\n }\n propsByName[ns.name] = propsByName[ns.localName] = p;\n};\nDescriptorBuilder.prototype.removeNamedProperty = function (p) {\n var ns = p.ns,\n propsByName = this.propertiesByName;\n delete propsByName[ns.name];\n delete propsByName[ns.localName];\n};\nDescriptorBuilder.prototype.setBodyProperty = function (p, validate) {\n if (validate && this.bodyProperty) {\n throw new Error('body property defined multiple times ' + '(<' + this.bodyProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n this.bodyProperty = p;\n};\nDescriptorBuilder.prototype.setIdProperty = function (p, validate) {\n if (validate && this.idProperty) {\n throw new Error('id property defined multiple times ' + '(<' + this.idProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n this.idProperty = p;\n};\nDescriptorBuilder.prototype.assertNotTrait = function (typeDescriptor) {\n const _extends = typeDescriptor.extends || [];\n if (_extends.length) {\n throw new Error(`cannot create <${typeDescriptor.name}> extending <${typeDescriptor.extends}>`);\n }\n};\nDescriptorBuilder.prototype.assertNotDefined = function (p, name) {\n var propertyName = p.name,\n definedProperty = this.propertiesByName[propertyName];\n if (definedProperty) {\n throw new Error('property <' + propertyName + '> already defined; ' + 'override of <' + definedProperty.definedBy.ns.name + '#' + definedProperty.ns.name + '> by ' + '<' + p.definedBy.ns.name + '#' + p.ns.name + '> not allowed without redefines');\n }\n};\nDescriptorBuilder.prototype.hasProperty = function (name) {\n return this.propertiesByName[name];\n};\nDescriptorBuilder.prototype.addTrait = function (t, inherited) {\n if (inherited) {\n this.assertNotTrait(t);\n }\n var typesByName = this.allTypesByName,\n types = this.allTypes;\n var typeName = t.name;\n if (typeName in typesByName) {\n return;\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(t.properties, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (p) {\n // clone property to allow extensions\n p = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, p, {\n name: p.ns.localName,\n inherited: inherited\n });\n Object.defineProperty(p, 'definedBy', {\n value: t\n });\n var replaces = p.replaces,\n redefines = p.redefines;\n\n // add replace/redefine support\n if (replaces || redefines) {\n this.redefineProperty(p, replaces || redefines, replaces);\n } else {\n if (p.isBody) {\n this.setBodyProperty(p);\n }\n if (p.isId) {\n this.setIdProperty(p);\n }\n this.addProperty(p);\n }\n }, this));\n types.push(t);\n typesByName[typeName] = t;\n};\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array} packages\n * @param {Properties} properties\n */\nfunction Registry(packages, properties) {\n this.packageMap = {};\n this.typeMap = {};\n this.packages = [];\n this.properties = properties;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(packages, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(this.registerPackage, this));\n}\nRegistry.prototype.getPackage = function (uriOrPrefix) {\n return this.packageMap[uriOrPrefix];\n};\nRegistry.prototype.getPackages = function () {\n return this.packages;\n};\nRegistry.prototype.registerPackage = function (pkg) {\n // copy package\n pkg = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, pkg);\n var pkgMap = this.packageMap;\n ensureAvailable(pkgMap, pkg, 'prefix');\n ensureAvailable(pkgMap, pkg, 'uri');\n\n // register types\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(pkg.types, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (descriptor) {\n this.registerType(descriptor, pkg);\n }, this));\n pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;\n this.packages.push(pkg);\n};\n\n/**\n * Register a type from a specific package with us\n */\nRegistry.prototype.registerType = function (type, pkg) {\n type = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, type, {\n superClass: (type.superClass || []).slice(),\n extends: (type.extends || []).slice(),\n properties: (type.properties || []).slice(),\n meta: (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(type.meta || {})\n });\n var ns = parseName(type.name, pkg.prefix),\n name = ns.name,\n propertiesByName = {};\n\n // parse properties\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.properties, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (p) {\n // namespace property names\n var propertyNs = parseName(p.name, ns.prefix),\n propertyName = propertyNs.name;\n\n // namespace property types\n if (!isBuiltIn(p.type)) {\n p.type = parseName(p.type, propertyNs.prefix).name;\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(p, {\n ns: propertyNs,\n name: propertyName\n });\n propertiesByName[propertyName] = p;\n }, this));\n\n // update ns + name\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(type, {\n ns: ns,\n name: name,\n propertiesByName: propertiesByName\n });\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.extends, (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.bind)(function (extendsName) {\n var extendsNameNs = parseName(extendsName, ns.prefix);\n var extended = this.typeMap[extendsNameNs.name];\n extended.traits = extended.traits || [];\n extended.traits.push(name);\n }, this));\n\n // link to package\n this.definePackage(type, pkg);\n\n // register\n this.typeMap[name] = type;\n};\n\n/**\n * Traverse the type hierarchy from bottom to top,\n * calling iterator with (type, inherited) for all elements in\n * the inheritance chain.\n *\n * @param {Object} nsName\n * @param {Function} iterator\n * @param {Boolean} [trait=false]\n */\nRegistry.prototype.mapTypes = function (nsName, iterator, trait) {\n var type = isBuiltIn(nsName.name) ? {\n name: nsName.name\n } : this.typeMap[nsName.name];\n var self = this;\n\n /**\n * Traverse the selected super type or trait\n *\n * @param {String} cls\n * @param {Boolean} [trait=false]\n */\n function traverse(cls, trait) {\n var parentNs = parseName(cls, isBuiltIn(cls) ? '' : nsName.prefix);\n self.mapTypes(parentNs, iterator, trait);\n }\n\n /**\n * Traverse the selected trait.\n *\n * @param {String} cls\n */\n function traverseTrait(cls) {\n return traverse(cls, true);\n }\n\n /**\n * Traverse the selected super type\n *\n * @param {String} cls\n */\n function traverseSuper(cls) {\n return traverse(cls, false);\n }\n if (!type) {\n throw new Error('unknown type <' + nsName.name + '>');\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.superClass, trait ? traverseTrait : traverseSuper);\n\n // call iterator with (type, inherited=!trait)\n iterator(type, !trait);\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(type.traits, traverseTrait);\n};\n\n/**\n * Returns the effective descriptor for a type.\n *\n * @param {String} type the namespaced name (ns:localName) of the type\n *\n * @return {Descriptor} the resulting effective descriptor\n */\nRegistry.prototype.getEffectiveDescriptor = function (name) {\n var nsName = parseName(name);\n var builder = new DescriptorBuilder(nsName);\n this.mapTypes(nsName, function (type, inherited) {\n builder.addTrait(type, inherited);\n });\n var descriptor = builder.build();\n\n // define package link\n this.definePackage(descriptor, descriptor.allTypes[descriptor.allTypes.length - 1].$pkg);\n return descriptor;\n};\nRegistry.prototype.definePackage = function (target, pkg) {\n this.properties.define(target, '$pkg', {\n value: pkg\n });\n};\n\n// helpers ////////////////////////////\n\nfunction ensureAvailable(packageMap, pkg, identifierKey) {\n var value = pkg[identifierKey];\n if (value in packageMap) {\n throw new Error('package with ' + identifierKey + ' <' + value + '> already defined');\n }\n}\n\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Model} model\n */\nfunction Properties(model) {\n this.model = model;\n}\n\n/**\n * Sets a named property on the target element.\n * If the value is undefined, the property gets deleted.\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} value\n */\nProperties.prototype.set = function (target, name, value) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(name) || !name.length) {\n throw new TypeError('property name must be a non-empty string');\n }\n var property = this.getProperty(target, name);\n var propertyName = property && property.name;\n if (isUndefined(value)) {\n // unset the property, if the specified value is undefined;\n // delete from $attrs (for extensions) or the target itself\n if (property) {\n delete target[propertyName];\n } else {\n delete target.$attrs[stripGlobal(name)];\n }\n } else {\n // set the property, defining well defined properties on the fly\n // or simply updating them in target.$attrs (for extensions)\n if (property) {\n if (propertyName in target) {\n target[propertyName] = value;\n } else {\n defineProperty(target, property, value);\n }\n } else {\n target.$attrs[stripGlobal(name)] = value;\n }\n }\n};\n\n/**\n * Returns the named property of the given element\n *\n * @param {Object} target\n * @param {String} name\n *\n * @return {Object}\n */\nProperties.prototype.get = function (target, name) {\n var property = this.getProperty(target, name);\n if (!property) {\n return target.$attrs[stripGlobal(name)];\n }\n var propertyName = property.name;\n\n // check if access to collection property and lazily initialize it\n if (!target[propertyName] && property.isMany) {\n defineProperty(target, property, []);\n }\n return target[propertyName];\n};\n\n/**\n * Define a property on the target element\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} options\n */\nProperties.prototype.define = function (target, name, options) {\n if (!options.writable) {\n var value = options.value;\n\n // use getters for read-only variables to support ES6 proxies\n // cf. https://github.com/bpmn-io/internal-docs/issues/386\n options = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, options, {\n get: function () {\n return value;\n }\n });\n delete options.value;\n }\n Object.defineProperty(target, name, options);\n};\n\n/**\n * Define the descriptor for an element\n */\nProperties.prototype.defineDescriptor = function (target, descriptor) {\n this.define(target, '$descriptor', {\n value: descriptor\n });\n};\n\n/**\n * Define the model for an element\n */\nProperties.prototype.defineModel = function (target, model) {\n this.define(target, '$model', {\n value: model\n });\n};\n\n/**\n * Return property with the given name on the element.\n *\n * @param {any} target\n * @param {string} name\n *\n * @return {object | null} property\n */\nProperties.prototype.getProperty = function (target, name) {\n var model = this.model;\n var property = model.getPropertyDescriptor(target, name);\n if (property) {\n return property;\n }\n if (name.includes(':')) {\n return null;\n }\n const strict = model.config.strict;\n if (typeof strict !== 'undefined') {\n const error = new TypeError(`unknown property <${name}> on <${target.$type}>`);\n if (strict) {\n throw error;\n } else {\n // eslint-disable-next-line no-undef\n typeof console !== 'undefined' && console.warn(error);\n }\n }\n return null;\n};\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\nfunction defineProperty(target, property, value) {\n Object.defineProperty(target, property.name, {\n enumerable: !property.isReference,\n writable: true,\n value: value,\n configurable: true\n });\n}\nfunction stripGlobal(name) {\n return name.replace(/^:/, '');\n}\n\n// Moddle implementation /////////////////////////////////////////////////\n\n/**\n * @class Moddle\n *\n * A model that can be used to create elements of a specific type.\n *\n * @example\n *\n * var Moddle = require('moddle');\n *\n * var pkg = {\n * name: 'mypackage',\n * prefix: 'my',\n * types: [\n * { name: 'Root' }\n * ]\n * };\n *\n * var moddle = new Moddle([pkg]);\n *\n * @param {Array} packages the packages to contain\n *\n * @param { { strict?: boolean } } [config] moddle configuration\n */\nfunction Moddle(packages, config = {}) {\n this.properties = new Properties(this);\n this.factory = new Factory(this, this.properties);\n this.registry = new Registry(packages, this.properties);\n this.typeCache = {};\n this.config = config;\n}\n\n/**\n * Create an instance of the specified type.\n *\n * @method Moddle#create\n *\n * @example\n *\n * var foo = moddle.create('my:Foo');\n * var bar = moddle.create('my:Bar', { id: 'BAR_1' });\n *\n * @param {String|Object} descriptor the type descriptor or name know to the model\n * @param {Object} attrs a number of attributes to initialize the model instance with\n * @return {Object} model instance\n */\nModdle.prototype.create = function (descriptor, attrs) {\n var Type = this.getType(descriptor);\n if (!Type) {\n throw new Error('unknown type <' + descriptor + '>');\n }\n return new Type(attrs);\n};\n\n/**\n * Returns the type representing a given descriptor\n *\n * @method Moddle#getType\n *\n * @example\n *\n * var Foo = moddle.getType('my:Foo');\n * var foo = new Foo({ 'id' : 'FOO_1' });\n *\n * @param {String|Object} descriptor the type descriptor or name know to the model\n * @return {Object} the type representing the descriptor\n */\nModdle.prototype.getType = function (descriptor) {\n var cache = this.typeCache;\n var name = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(descriptor) ? descriptor : descriptor.ns.name;\n var type = cache[name];\n if (!type) {\n descriptor = this.registry.getEffectiveDescriptor(name);\n type = cache[name] = this.factory.createType(descriptor);\n }\n return type;\n};\n\n/**\n * Creates an any-element type to be used within model instances.\n *\n * This can be used to create custom elements that lie outside the meta-model.\n * The created element contains all the meta-data required to serialize it\n * as part of meta-model elements.\n *\n * @method Moddle#createAny\n *\n * @example\n *\n * var foo = moddle.createAny('vendor:Foo', 'http://vendor', {\n * value: 'bar'\n * });\n *\n * var container = moddle.create('my:Container', 'http://my', {\n * any: [ foo ]\n * });\n *\n * // go ahead and serialize the stuff\n *\n *\n * @param {String} name the name of the element\n * @param {String} nsUri the namespace uri of the element\n * @param {Object} [properties] a map of properties to initialize the instance with\n * @return {Object} the any type instance\n */\nModdle.prototype.createAny = function (name, nsUri, properties) {\n var nameNs = parseName(name);\n var element = {\n $type: name,\n $instanceOf: function (type) {\n return type === this.$type;\n },\n get: function (key) {\n return this[key];\n },\n set: function (key, value) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.set)(this, [key], value);\n }\n };\n var descriptor = {\n name: name,\n isGeneric: true,\n ns: {\n prefix: nameNs.prefix,\n localName: nameNs.localName,\n uri: nsUri\n }\n };\n this.properties.defineDescriptor(element, descriptor);\n this.properties.defineModel(element, this);\n this.properties.define(element, 'get', {\n enumerable: false,\n writable: true\n });\n this.properties.define(element, 'set', {\n enumerable: false,\n writable: true\n });\n this.properties.define(element, '$parent', {\n enumerable: false,\n writable: true\n });\n this.properties.define(element, '$instanceOf', {\n enumerable: false,\n writable: true\n });\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(properties, function (a, key) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isObject)(a) && a.value !== undefined) {\n element[a.name] = a.value;\n } else {\n element[key] = a;\n }\n });\n return element;\n};\n\n/**\n * Returns a registered package by uri or prefix\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackage = function (uriOrPrefix) {\n return this.registry.getPackage(uriOrPrefix);\n};\n\n/**\n * Returns a snapshot of all known packages\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackages = function () {\n return this.registry.getPackages();\n};\n\n/**\n * Returns the descriptor for an element\n */\nModdle.prototype.getElementDescriptor = function (element) {\n return element.$descriptor;\n};\n\n/**\n * Returns true if the given descriptor or instance\n * represents the given type.\n *\n * May be applied to this, if element is omitted.\n */\nModdle.prototype.hasType = function (element, type) {\n if (type === undefined) {\n type = element;\n element = this;\n }\n var descriptor = element.$model.getElementDescriptor(element);\n return type in descriptor.allTypesByName;\n};\n\n/**\n * Returns the descriptor of an elements named property\n */\nModdle.prototype.getPropertyDescriptor = function (element, property) {\n return this.getElementDescriptor(element).propertiesByName[property];\n};\n\n/**\n * Returns a mapped type's descriptor\n */\nModdle.prototype.getTypeDescriptor = function (type) {\n return this.registry.typeMap[type];\n};\n\nvar fromCharCode = String.fromCharCode;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar ENTITY_PATTERN = /(\\d+);|([0-9a-f]+);|&(\\w+);/ig;\nvar ENTITY_MAPPING = {\n 'amp': '&',\n 'apos': '\\'',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"'\n};\n\n// map UPPERCASE variants of supported special chars\nObject.keys(ENTITY_MAPPING).forEach(function (k) {\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\n});\nfunction replaceEntities(_, d, x, z) {\n // reserved names, i.e. \n if (z) {\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\n return ENTITY_MAPPING[z];\n } else {\n // fall back to original value\n return '&' + z + ';';\n }\n }\n\n // decimal encoded char\n if (d) {\n return fromCharCode(d);\n }\n\n // hex encoded char\n return fromCharCode(parseInt(x, 16));\n}\n\n/**\n * A basic entity decoder that can decode a minimal\n * sub-set of reserved names (&) as well as\n * hex (ય) and decimal (ӏ) encoded characters.\n *\n * @param {string} s\n *\n * @return {string} decoded string\n */\nfunction decodeEntities(s) {\n if (s.length > 3 && s.indexOf('&') !== -1) {\n return s.replace(ENTITY_PATTERN, replaceEntities);\n }\n return s;\n}\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\nfunction error$1(msg) {\n return new Error(msg);\n}\nfunction missingNamespaceForPrefix(prefix) {\n return 'missing namespace for prefix <' + prefix + '>';\n}\nfunction getter(getFn) {\n return {\n 'get': getFn,\n 'enumerable': true\n };\n}\nfunction cloneNsMatrix(nsMatrix) {\n var clone = {},\n key;\n for (key in nsMatrix) {\n clone[key] = nsMatrix[key];\n }\n return clone;\n}\nfunction uriPrefix(prefix) {\n return prefix + '$uri';\n}\nfunction buildNsMatrix(nsUriToPrefix) {\n var nsMatrix = {},\n uri,\n prefix;\n for (uri in nsUriToPrefix) {\n prefix = nsUriToPrefix[uri];\n nsMatrix[prefix] = prefix;\n nsMatrix[uriPrefix(prefix)] = uri;\n }\n return nsMatrix;\n}\nfunction noopGetContext() {\n return {\n line: 0,\n column: 0\n };\n}\nfunction throwFunc(err) {\n throw err;\n}\n\n/**\n * Creates a new parser with the given options.\n *\n * @constructor\n *\n * @param {!Object=} options\n */\nfunction Parser(options) {\n if (!this) {\n return new Parser(options);\n }\n var proxy = options && options['proxy'];\n var onText,\n onOpenTag,\n onCloseTag,\n onCDATA,\n onError = throwFunc,\n onWarning,\n onComment,\n onQuestion,\n onAttention;\n var getContext = noopGetContext;\n\n /**\n * Do we need to parse the current elements attributes for namespaces?\n *\n * @type {boolean}\n */\n var maybeNS = false;\n\n /**\n * Do we process namespaces at all?\n *\n * @type {boolean}\n */\n var isNamespace = false;\n\n /**\n * The caught error returned on parse end\n *\n * @type {Error}\n */\n var returnError = null;\n\n /**\n * Should we stop parsing?\n *\n * @type {boolean}\n */\n var parseStop = false;\n\n /**\n * A map of { uri: prefix } used by the parser.\n *\n * This map will ensure we can normalize prefixes during processing;\n * for each uri, only one prefix will be exposed to the handlers.\n *\n * @type {!Object}}\n */\n var nsUriToPrefix;\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleError(err) {\n if (!(err instanceof Error)) {\n err = error$1(err);\n }\n returnError = err;\n onError(err, getContext);\n }\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleWarning(err) {\n if (!onWarning) {\n return;\n }\n if (!(err instanceof Error)) {\n err = error$1(err);\n }\n onWarning(err, getContext);\n }\n\n /**\n * Register parse listener.\n *\n * @param {string} name\n * @param {Function} cb\n *\n * @return {Parser}\n */\n this['on'] = function (name, cb) {\n if (typeof cb !== 'function') {\n throw error$1('required args ');\n }\n switch (name) {\n case 'openTag':\n onOpenTag = cb;\n break;\n case 'text':\n onText = cb;\n break;\n case 'closeTag':\n onCloseTag = cb;\n break;\n case 'error':\n onError = cb;\n break;\n case 'warn':\n onWarning = cb;\n break;\n case 'cdata':\n onCDATA = cb;\n break;\n case 'attention':\n onAttention = cb;\n break;\n // \n case 'question':\n onQuestion = cb;\n break;\n // .... ?>\n case 'comment':\n onComment = cb;\n break;\n default:\n throw error$1('unsupported event: ' + name);\n }\n return this;\n };\n\n /**\n * Set the namespace to prefix mapping.\n *\n * @example\n *\n * parser.ns({\n * 'http://foo': 'foo',\n * 'http://bar': 'bar'\n * });\n *\n * @param {!Object} nsMap\n *\n * @return {Parser}\n */\n this['ns'] = function (nsMap) {\n if (typeof nsMap === 'undefined') {\n nsMap = {};\n }\n if (typeof nsMap !== 'object') {\n throw error$1('required args ');\n }\n var _nsUriToPrefix = {},\n k;\n for (k in nsMap) {\n _nsUriToPrefix[k] = nsMap[k];\n }\n isNamespace = true;\n nsUriToPrefix = _nsUriToPrefix;\n return this;\n };\n\n /**\n * Parse xml string.\n *\n * @param {string} xml\n *\n * @return {Error} returnError, if not thrown\n */\n this['parse'] = function (xml) {\n if (typeof xml !== 'string') {\n throw error$1('required args ');\n }\n returnError = null;\n parse(xml);\n getContext = noopGetContext;\n parseStop = false;\n return returnError;\n };\n\n /**\n * Stop parsing.\n */\n this['stop'] = function () {\n parseStop = true;\n };\n\n /**\n * Parse string, invoking configured listeners on element.\n *\n * @param {string} xml\n */\n function parse(xml) {\n var nsMatrixStack = isNamespace ? [] : null,\n nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null,\n _nsMatrix,\n nodeStack = [],\n anonymousNsCount = 0,\n tagStart = false,\n tagEnd = false,\n i = 0,\n j = 0,\n x,\n y,\n q,\n w,\n v,\n xmlns,\n elementName,\n _elementName,\n elementProxy;\n var attrsString = '',\n attrsStart = 0,\n cachedAttrs // false = parsed with errors, null = needs parsing\n ;\n\n /**\n * Parse attributes on demand and returns the parsed attributes.\n *\n * Return semantics: (1) `false` on attribute parse error,\n * (2) object hash on extracted attrs.\n *\n * @return {boolean|Object}\n */\n function getAttrs() {\n if (cachedAttrs !== null) {\n return cachedAttrs;\n }\n var nsUri,\n nsUriPrefix,\n nsName,\n defaultAlias = isNamespace && nsMatrix['xmlns'],\n attrList = isNamespace && maybeNS ? [] : null,\n i = attrsStart,\n s = attrsString,\n l = s.length,\n hasNewMatrix,\n newalias,\n value,\n alias,\n name,\n attrs = {},\n seenAttrs = {},\n skipAttr,\n w,\n j;\n parseAttr: for (; i < l; i++) {\n skipAttr = false;\n w = s.charCodeAt(i);\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE={ \\f\\n\\r\\t\\v}\n continue;\n }\n\n // wait for non whitespace character\n if (w < 65 || w > 122 || w > 90 && w < 97) {\n if (w !== 95 && w !== 58) {\n // char 95\"_\" 58\":\"\n handleWarning('illegal first char attribute name');\n skipAttr = true;\n }\n }\n\n // parse attribute name\n for (j = i + 1; j < l; j++) {\n w = s.charCodeAt(j);\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 46 ||\n // '.'\n w === 45 ||\n // '-'\n w === 95 // '_'\n ) {\n continue;\n }\n\n // unexpected whitespace\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n handleWarning('missing attribute value');\n i = j;\n continue parseAttr;\n }\n\n // expected \"=\"\n if (w === 61) {\n // \"=\" == 61\n break;\n }\n handleWarning('illegal attribute name char');\n skipAttr = true;\n }\n name = s.substring(i, j);\n if (name === 'xmlns:xmlns') {\n handleWarning('illegal declaration of xmlns');\n skipAttr = true;\n }\n w = s.charCodeAt(j + 1);\n if (w === 34) {\n // '\"'\n j = s.indexOf('\"', i = j + 2);\n if (j === -1) {\n j = s.indexOf('\\'', i);\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n } else if (w === 39) {\n // \"'\"\n j = s.indexOf('\\'', i = j + 2);\n if (j === -1) {\n j = s.indexOf('\"', i);\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n } else {\n handleWarning('missing attribute value quotes');\n skipAttr = true;\n\n // skip to next space\n for (j = j + 1; j < l; j++) {\n w = s.charCodeAt(j + 1);\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n break;\n }\n }\n }\n if (j === -1) {\n handleWarning('missing closing quotes');\n j = l;\n skipAttr = true;\n }\n if (!skipAttr) {\n value = s.substring(i, j);\n }\n i = j;\n\n // ensure SPACE follows attribute\n // skip illegal content otherwise\n // example a=\"b\"c\n for (; j + 1 < l; j++) {\n w = s.charCodeAt(j + 1);\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n break;\n }\n\n // FIRST ILLEGAL CHAR\n if (i === j) {\n handleWarning('illegal character after attribute end');\n skipAttr = true;\n }\n }\n\n // advance cursor to next attribute\n i = j + 1;\n if (skipAttr) {\n continue parseAttr;\n }\n\n // check attribute re-declaration\n if (name in seenAttrs) {\n handleWarning('attribute <' + name + '> already defined');\n continue;\n }\n seenAttrs[name] = true;\n if (!isNamespace) {\n attrs[name] = value;\n continue;\n }\n\n // try to extract namespace information\n if (maybeNS) {\n newalias = name === 'xmlns' ? 'xmlns' : name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:' ? name.substr(6) : null;\n\n // handle xmlns(:alias) assignment\n if (newalias !== null) {\n nsUri = decodeEntities(value);\n nsUriPrefix = uriPrefix(newalias);\n alias = nsUriToPrefix[nsUri];\n if (!alias) {\n // no prefix defined or prefix collision\n if (newalias === 'xmlns' || nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri) {\n // alocate free ns prefix\n do {\n alias = 'ns' + anonymousNsCount++;\n } while (typeof nsMatrix[alias] !== 'undefined');\n } else {\n alias = newalias;\n }\n nsUriToPrefix[nsUri] = alias;\n }\n if (nsMatrix[newalias] !== alias) {\n if (!hasNewMatrix) {\n nsMatrix = cloneNsMatrix(nsMatrix);\n hasNewMatrix = true;\n }\n nsMatrix[newalias] = alias;\n if (newalias === 'xmlns') {\n nsMatrix[uriPrefix(alias)] = nsUri;\n defaultAlias = alias;\n }\n nsMatrix[nsUriPrefix] = nsUri;\n }\n\n // expose xmlns(:asd)=\"...\" in attributes\n attrs[name] = value;\n continue;\n }\n\n // collect attributes until all namespace\n // declarations are processed\n attrList.push(name, value);\n continue;\n } /** end if (maybeNs) */\n\n // handle attributes on element without\n // namespace declarations\n w = name.indexOf(':');\n if (w === -1) {\n attrs[name] = value;\n continue;\n }\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n name = defaultAlias === nsName ? name.substr(w + 1) : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n\n attrs[name] = value;\n }\n\n // handle deferred, possibly namespaced attributes\n if (maybeNS) {\n // normalize captured attributes\n for (i = 0, l = attrList.length; i < l; i++) {\n name = attrList[i++];\n value = attrList[i];\n w = name.indexOf(':');\n if (w !== -1) {\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n name = defaultAlias === nsName ? name.substr(w + 1) : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n }\n attrs[name] = value;\n }\n\n // end: normalize captured attributes\n }\n return cachedAttrs = attrs;\n }\n\n /**\n * Extract the parse context { line, column, part }\n * from the current parser position.\n *\n * @return {Object} parse context\n */\n function getParseContext() {\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\n var line = 0;\n var column = 0;\n var startOfLine = 0;\n var endOfLine = j;\n var match;\n var data;\n while (i >= startOfLine) {\n match = splitsRe.exec(xml);\n if (!match) {\n break;\n }\n\n // end of line = (break idx + break chars)\n endOfLine = match[0].length + match.index;\n if (endOfLine > i) {\n break;\n }\n\n // advance to next line\n line += 1;\n startOfLine = endOfLine;\n }\n\n // EOF errors\n if (i == -1) {\n column = endOfLine;\n data = xml.substring(j);\n } else\n // start errors\n if (j === 0) {\n data = xml.substring(j, i);\n }\n\n // other errors\n else {\n column = i - startOfLine;\n data = j == -1 ? xml.substring(i) : xml.substring(i, j + 1);\n }\n return {\n 'data': data,\n 'line': line,\n 'column': column\n };\n }\n getContext = getParseContext;\n if (proxy) {\n elementProxy = Object.create({}, {\n 'name': getter(function () {\n return elementName;\n }),\n 'originalName': getter(function () {\n return _elementName;\n }),\n 'attrs': getter(getAttrs),\n 'ns': getter(function () {\n return nsMatrix;\n })\n });\n }\n\n // actual parse logic\n while (j !== -1) {\n if (xml.charCodeAt(j) === 60) {\n // \"<\"\n i = j;\n } else {\n i = xml.indexOf('<', j);\n }\n\n // parse end\n if (i === -1) {\n if (nodeStack.length) {\n return handleError('unexpected end of file');\n }\n if (j === 0) {\n return handleError('missing start tag');\n }\n if (j < xml.length) {\n if (xml.substring(j).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n }\n }\n return;\n }\n\n // parse text\n if (j !== i) {\n if (nodeStack.length) {\n if (onText) {\n onText(xml.substring(j, i), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n } else {\n if (xml.substring(j, i).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n if (parseStop) {\n return;\n }\n }\n }\n }\n w = xml.charCodeAt(i + 1);\n\n // parse comments + CDATA\n if (w === 33) {\n // \"!\"\n q = xml.charCodeAt(i + 2);\n\n // CDATA section\n if (q === 91 && xml.substr(i + 3, 6) === 'CDATA[') {\n // 91 == \"[\"\n j = xml.indexOf(']]>', i);\n if (j === -1) {\n return handleError('unclosed cdata');\n }\n if (onCDATA) {\n onCDATA(xml.substring(i + 9, j), getContext);\n if (parseStop) {\n return;\n }\n }\n j += 3;\n continue;\n }\n\n // comment\n if (q === 45 && xml.charCodeAt(i + 3) === 45) {\n // 45 == \"-\"\n j = xml.indexOf('-->', i);\n if (j === -1) {\n return handleError('unclosed comment');\n }\n if (onComment) {\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n j += 3;\n continue;\n }\n }\n\n // parse question ... ?>\n if (w === 63) {\n // \"?\"\n j = xml.indexOf('?>', i);\n if (j === -1) {\n return handleError('unclosed question');\n }\n if (onQuestion) {\n onQuestion(xml.substring(i, j + 2), getContext);\n if (parseStop) {\n return;\n }\n }\n j += 2;\n continue;\n }\n\n // find matching closing tag for attention or standard tags\n // for that we must skip through attribute values\n // (enclosed in single or double quotes)\n for (x = i + 1;; x++) {\n v = xml.charCodeAt(x);\n if (isNaN(v)) {\n j = -1;\n return handleError('unclosed tag');\n }\n\n // [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n // skips the quoted string\n // (double quotes) does not appear in a literal enclosed by (double quotes)\n // (single quote) does not appear in a literal enclosed by (single quote)\n if (v === 34) {\n // '\"'\n q = xml.indexOf('\"', x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 39) {\n // \"'\"\n q = xml.indexOf(\"'\", x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 62) {\n // '>'\n j = x;\n break;\n }\n }\n\n // parse attention \n // previously comment and CDATA have already been parsed\n if (w === 33) {\n // \"!\"\n\n if (onAttention) {\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n j += 1;\n continue;\n }\n\n // don't process attributes;\n // there are none\n cachedAttrs = {};\n\n // if (xml.charCodeAt(i+1) === 47) { // close tag match\n x = elementName = nodeStack.pop();\n q = i + 2 + x.length;\n if (xml.substring(i + 2, q) !== x) {\n return handleError('closing tag mismatch');\n }\n\n // verify chars in close tag\n for (; q < j; q++) {\n w = xml.charCodeAt(q);\n if (w === 32 || w > 8 && w < 14) {\n // \\f\\n\\r\\t\\v space\n continue;\n }\n return handleError('close tag');\n }\n } else {\n if (xml.charCodeAt(j - 1) === 47) {\n // .../>\n x = elementName = xml.substring(i + 1, j - 1);\n tagStart = true;\n tagEnd = true;\n } else {\n x = elementName = xml.substring(i + 1, j);\n tagStart = true;\n tagEnd = false;\n }\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) {\n // char 95\"_\" 58\":\"\n return handleError('illegal first char nodeName');\n }\n for (q = 1, y = x.length; q < y; q++) {\n w = x.charCodeAt(q);\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w == 46) {\n continue;\n }\n if (w === 32 || w < 14 && w > 8) {\n // \\f\\n\\r\\t\\v space\n elementName = x.substring(0, q);\n\n // maybe there are attributes\n cachedAttrs = null;\n break;\n }\n return handleError('invalid nodeName');\n }\n if (!tagEnd) {\n nodeStack.push(elementName);\n }\n }\n if (isNamespace) {\n _nsMatrix = nsMatrix;\n if (tagStart) {\n // remember old namespace\n // unless we're self-closing\n if (!tagEnd) {\n nsMatrixStack.push(_nsMatrix);\n }\n if (cachedAttrs === null) {\n // quick check, whether there may be namespace\n // declarations on the node; if that is the case\n // we need to eagerly parse the node attributes\n if (maybeNS = x.indexOf('xmlns', q) !== -1) {\n attrsStart = q;\n attrsString = x;\n getAttrs();\n maybeNS = false;\n }\n }\n }\n _elementName = elementName;\n w = elementName.indexOf(':');\n if (w !== -1) {\n xmlns = nsMatrix[elementName.substring(0, w)];\n\n // prefix given; namespace must exist\n if (!xmlns) {\n return handleError('missing namespace on <' + _elementName + '>');\n }\n elementName = elementName.substr(w + 1);\n } else {\n xmlns = nsMatrix['xmlns'];\n\n // if no default namespace is defined,\n // we'll import the element as anonymous.\n //\n // it is up to users to correct that to the document defined\n // targetNamespace, or whatever their undersanding of the\n // XML spec mandates.\n }\n\n // adjust namespace prefixs as configured\n if (xmlns) {\n elementName = xmlns + ':' + elementName;\n }\n }\n if (tagStart) {\n attrsStart = q;\n attrsString = x;\n if (onOpenTag) {\n if (proxy) {\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\n } else {\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\n }\n if (parseStop) {\n return;\n }\n }\n }\n if (tagEnd) {\n if (onCloseTag) {\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\n if (parseStop) {\n return;\n }\n }\n\n // restore old namespace\n if (isNamespace) {\n if (!tagStart) {\n nsMatrix = nsMatrixStack.pop();\n } else {\n nsMatrix = _nsMatrix;\n }\n }\n }\n j += 1;\n }\n } /** end parse */\n}\n\nfunction hasLowerCaseAlias(pkg) {\n return pkg.xml && pkg.xml.tagAlias === 'lowerCase';\n}\nvar DEFAULT_NS_MAP = {\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xml': 'http://www.w3.org/XML/1998/namespace'\n};\nvar SERIALIZE_PROPERTY = 'property';\nfunction getSerialization(element) {\n return element.xml && element.xml.serialize;\n}\nfunction getSerializationType(element) {\n const type = getSerialization(element);\n return type !== SERIALIZE_PROPERTY && (type || null);\n}\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nfunction aliasToName(aliasNs, pkg) {\n if (!hasLowerCaseAlias(pkg)) {\n return aliasNs.name;\n }\n return aliasNs.prefix + ':' + capitalize(aliasNs.localName);\n}\n\n/**\n * Un-prefix a potentially prefixed type name.\n *\n * @param {NsName} nameNs\n * @param {Object} [pkg]\n *\n * @return {string}\n */\nfunction prefixedToName(nameNs, pkg) {\n var name = nameNs.name,\n localName = nameNs.localName;\n var typePrefix = pkg && pkg.xml && pkg.xml.typePrefix;\n if (typePrefix && localName.indexOf(typePrefix) === 0) {\n return nameNs.prefix + ':' + localName.slice(typePrefix.length);\n } else {\n return name;\n }\n}\nfunction normalizeTypeName(name, nsMap, model) {\n // normalize against actual NS\n const nameNs = parseName(name, nsMap.xmlns);\n const normalizedName = `${nsMap[nameNs.prefix] || nameNs.prefix}:${nameNs.localName}`;\n const normalizedNameNs = parseName(normalizedName);\n\n // determine actual type name, based on package-defined prefix\n var pkg = model.getPackage(normalizedNameNs.prefix);\n return prefixedToName(normalizedNameNs, pkg);\n}\nfunction error(message) {\n return new Error(message);\n}\n\n/**\n * Get the moddle descriptor for a given instance or type.\n *\n * @param {ModdleElement|Function} element\n *\n * @return {Object} the moddle descriptor\n */\nfunction getModdleDescriptor(element) {\n return element.$descriptor;\n}\n\n/**\n * A parse context.\n *\n * @class\n *\n * @param {Object} options\n * @param {ElementHandler} options.rootHandler the root handler for parsing a document\n * @param {boolean} [options.lax=false] whether or not to ignore invalid elements\n */\nfunction Context(options) {\n /**\n * @property {ElementHandler} rootHandler\n */\n\n /**\n * @property {Boolean} lax\n */\n\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(this, options);\n this.elementsById = {};\n this.references = [];\n this.warnings = [];\n\n /**\n * Add an unresolved reference.\n *\n * @param {Object} reference\n */\n this.addReference = function (reference) {\n this.references.push(reference);\n };\n\n /**\n * Add a processed element.\n *\n * @param {ModdleElement} element\n */\n this.addElement = function (element) {\n if (!element) {\n throw error('expected element');\n }\n var elementsById = this.elementsById;\n var descriptor = getModdleDescriptor(element);\n var idProperty = descriptor.idProperty,\n id;\n if (idProperty) {\n id = element.get(idProperty.name);\n if (id) {\n // for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar\n if (!/^([a-z][\\w-.]*:)?[a-z_][\\w-.]*$/i.test(id)) {\n throw new Error('illegal ID <' + id + '>');\n }\n if (elementsById[id]) {\n throw error('duplicate ID <' + id + '>');\n }\n elementsById[id] = element;\n }\n }\n };\n\n /**\n * Add an import warning.\n *\n * @param {Object} warning\n * @param {String} warning.message\n * @param {Error} [warning.error]\n */\n this.addWarning = function (warning) {\n this.warnings.push(warning);\n };\n}\nfunction BaseHandler() {}\nBaseHandler.prototype.handleEnd = function () {};\nBaseHandler.prototype.handleText = function () {};\nBaseHandler.prototype.handleNode = function () {};\n\n/**\n * A simple pass through handler that does nothing except for\n * ignoring all input it receives.\n *\n * This is used to ignore unknown elements and\n * attributes.\n */\nfunction NoopHandler() {}\nNoopHandler.prototype = Object.create(BaseHandler.prototype);\nNoopHandler.prototype.handleNode = function () {\n return this;\n};\nfunction BodyHandler() {}\nBodyHandler.prototype = Object.create(BaseHandler.prototype);\nBodyHandler.prototype.handleText = function (text) {\n this.body = (this.body || '') + text;\n};\nfunction ReferenceHandler(property, context) {\n this.property = property;\n this.context = context;\n}\nReferenceHandler.prototype = Object.create(BodyHandler.prototype);\nReferenceHandler.prototype.handleNode = function (node) {\n if (this.element) {\n throw error('expected no sub nodes');\n } else {\n this.element = this.createReference(node);\n }\n return this;\n};\nReferenceHandler.prototype.handleEnd = function () {\n this.element.id = this.body;\n};\nReferenceHandler.prototype.createReference = function (node) {\n return {\n property: this.property.ns.name,\n id: ''\n };\n};\nfunction ValueHandler(propertyDesc, element) {\n this.element = element;\n this.propertyDesc = propertyDesc;\n}\nValueHandler.prototype = Object.create(BodyHandler.prototype);\nValueHandler.prototype.handleEnd = function () {\n var value = this.body || '',\n element = this.element,\n propertyDesc = this.propertyDesc;\n value = coerceType(propertyDesc.type, value);\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(value);\n } else {\n element.set(propertyDesc.name, value);\n }\n};\nfunction BaseElementHandler() {}\nBaseElementHandler.prototype = Object.create(BodyHandler.prototype);\nBaseElementHandler.prototype.handleNode = function (node) {\n var parser = this,\n element = this.element;\n if (!element) {\n element = this.element = this.createElement(node);\n this.context.addElement(element);\n } else {\n parser = this.handleChild(node);\n }\n return parser;\n};\n\n/**\n * @class Reader.ElementHandler\n *\n */\nfunction ElementHandler(model, typeName, context) {\n this.model = model;\n this.type = model.getType(typeName);\n this.context = context;\n}\nElementHandler.prototype = Object.create(BaseElementHandler.prototype);\nElementHandler.prototype.addReference = function (reference) {\n this.context.addReference(reference);\n};\nElementHandler.prototype.handleText = function (text) {\n var element = this.element,\n descriptor = getModdleDescriptor(element),\n bodyProperty = descriptor.bodyProperty;\n if (!bodyProperty) {\n throw error('unexpected body text <' + text + '>');\n }\n BodyHandler.prototype.handleText.call(this, text);\n};\nElementHandler.prototype.handleEnd = function () {\n var value = this.body,\n element = this.element,\n descriptor = getModdleDescriptor(element),\n bodyProperty = descriptor.bodyProperty;\n if (bodyProperty && value !== undefined) {\n value = coerceType(bodyProperty.type, value);\n element.set(bodyProperty.name, value);\n }\n};\n\n/**\n * Create an instance of the model from the given node.\n *\n * @param {Element} node the xml node\n */\nElementHandler.prototype.createElement = function (node) {\n var attributes = node.attributes,\n Type = this.type,\n descriptor = getModdleDescriptor(Type),\n context = this.context,\n instance = new Type({}),\n model = this.model,\n propNameNs;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attributes, function (value, name) {\n var prop = descriptor.propertiesByName[name],\n values;\n if (prop && prop.isReference) {\n if (!prop.isMany) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: value\n });\n } else {\n // IDREFS: parse references as whitespace-separated list\n values = value.split(' ');\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(values, function (v) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: v\n });\n });\n }\n } else {\n if (prop) {\n value = coerceType(prop.type, value);\n } else if (name === 'xmlns') {\n name = ':' + name;\n } else {\n propNameNs = parseName(name, descriptor.ns.prefix);\n\n // check whether attribute is defined in a well-known namespace\n // if that is the case we emit a warning to indicate potential misuse\n if (model.getPackage(propNameNs.prefix)) {\n context.addWarning({\n message: 'unknown attribute <' + name + '>',\n element: instance,\n property: name,\n value: value\n });\n }\n }\n instance.set(name, value);\n }\n });\n return instance;\n};\nElementHandler.prototype.getPropertyForNode = function (node) {\n var name = node.name;\n var nameNs = parseName(name);\n var type = this.type,\n model = this.model,\n descriptor = getModdleDescriptor(type);\n var propertyName = nameNs.name,\n property = descriptor.propertiesByName[propertyName];\n\n // search for properties by name first\n\n if (property && !property.isAttr) {\n const serializationType = getSerializationType(property);\n if (serializationType) {\n const elementTypeName = node.attributes[serializationType];\n\n // type is optional, if it does not exists the\n // default type is assumed\n if (elementTypeName) {\n // convert the prefix used to the mapped form, but also\n // take possible type prefixes from XML\n // into account, i.e.: xsi:type=\"t{ActualType}\",\n const normalizedTypeName = normalizeTypeName(elementTypeName, node.ns, model);\n const elementType = model.getType(normalizedTypeName);\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, property, {\n effectiveType: getModdleDescriptor(elementType).name\n });\n }\n }\n\n // search for properties by name first\n return property;\n }\n var pkg = model.getPackage(nameNs.prefix);\n if (pkg) {\n const elementTypeName = aliasToName(nameNs, pkg);\n const elementType = model.getType(elementTypeName);\n\n // search for collection members later\n property = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(descriptor.properties, function (p) {\n return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.hasType(p.type);\n });\n if (property) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, property, {\n effectiveType: getModdleDescriptor(elementType).name\n });\n }\n } else {\n // parse unknown element (maybe extension)\n property = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.find)(descriptor.properties, function (p) {\n return !p.isReference && !p.isAttribute && p.type === 'Element';\n });\n if (property) {\n return property;\n }\n }\n throw error('unrecognized element <' + nameNs.name + '>');\n};\nElementHandler.prototype.toString = function () {\n return 'ElementDescriptor[' + getModdleDescriptor(this.type).name + ']';\n};\nElementHandler.prototype.valueHandler = function (propertyDesc, element) {\n return new ValueHandler(propertyDesc, element);\n};\nElementHandler.prototype.referenceHandler = function (propertyDesc) {\n return new ReferenceHandler(propertyDesc, this.context);\n};\nElementHandler.prototype.handler = function (type) {\n if (type === 'Element') {\n return new GenericElementHandler(this.model, type, this.context);\n } else {\n return new ElementHandler(this.model, type, this.context);\n }\n};\n\n/**\n * Handle the child element parsing\n *\n * @param {Element} node the xml node\n */\nElementHandler.prototype.handleChild = function (node) {\n var propertyDesc, type, element, childHandler;\n propertyDesc = this.getPropertyForNode(node);\n element = this.element;\n type = propertyDesc.effectiveType || propertyDesc.type;\n if (isSimple(type)) {\n return this.valueHandler(propertyDesc, element);\n }\n if (propertyDesc.isReference) {\n childHandler = this.referenceHandler(propertyDesc).handleNode(node);\n } else {\n childHandler = this.handler(type).handleNode(node);\n }\n var newElement = childHandler.element;\n\n // child handles may decide to skip elements\n // by not returning anything\n if (newElement !== undefined) {\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(newElement);\n } else {\n element.set(propertyDesc.name, newElement);\n }\n if (propertyDesc.isReference) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(newElement, {\n element: element\n });\n this.context.addReference(newElement);\n } else {\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n }\n return childHandler;\n};\n\n/**\n * An element handler that performs special validation\n * to ensure the node it gets initialized with matches\n * the handlers type (namespace wise).\n *\n * @param {Moddle} model\n * @param {String} typeName\n * @param {Context} context\n */\nfunction RootElementHandler(model, typeName, context) {\n ElementHandler.call(this, model, typeName, context);\n}\nRootElementHandler.prototype = Object.create(ElementHandler.prototype);\nRootElementHandler.prototype.createElement = function (node) {\n var name = node.name,\n nameNs = parseName(name),\n model = this.model,\n type = this.type,\n pkg = model.getPackage(nameNs.prefix),\n typeName = pkg && aliasToName(nameNs, pkg) || name;\n\n // verify the correct namespace if we parse\n // the first element in the handler tree\n //\n // this ensures we don't mistakenly import wrong namespace elements\n if (!type.hasType(typeName)) {\n throw error('unexpected element <' + node.originalName + '>');\n }\n return ElementHandler.prototype.createElement.call(this, node);\n};\nfunction GenericElementHandler(model, typeName, context) {\n this.model = model;\n this.context = context;\n}\nGenericElementHandler.prototype = Object.create(BaseElementHandler.prototype);\nGenericElementHandler.prototype.createElement = function (node) {\n var name = node.name,\n ns = parseName(name),\n prefix = ns.prefix,\n uri = node.ns[prefix + '$uri'],\n attributes = node.attributes;\n return this.model.createAny(name, uri, attributes);\n};\nGenericElementHandler.prototype.handleChild = function (node) {\n var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node),\n element = this.element;\n var newElement = handler.element,\n children;\n if (newElement !== undefined) {\n children = element.$children = element.$children || [];\n children.push(newElement);\n\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n return handler;\n};\nGenericElementHandler.prototype.handleEnd = function () {\n if (this.body) {\n this.element.$body = this.body;\n }\n};\n\n/**\n * A reader for a meta-model\n *\n * @param {Object} options\n * @param {Model} options.model used to read xml files\n * @param {Boolean} options.lax whether to make parse errors warnings\n */\nfunction Reader(options) {\n if (options instanceof Moddle) {\n options = {\n model: options\n };\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)(this, {\n lax: false\n }, options);\n}\n\n/**\n * The fromXML result.\n *\n * @typedef {Object} ParseResult\n *\n * @property {ModdleElement} rootElement\n * @property {Array} references\n * @property {Array} warnings\n * @property {Object} elementsById - a mapping containing each ID -> ModdleElement\n */\n\n/**\n * The fromXML result.\n *\n * @typedef {Error} ParseError\n *\n * @property {Array} warnings\n */\n\n/**\n * Parse the given XML into a moddle document tree.\n *\n * @param {String} xml\n * @param {ElementHandler|Object} options or rootHandler\n *\n * @returns {Promise}\n */\nReader.prototype.fromXML = function (xml, options, done) {\n var rootHandler = options.rootHandler;\n if (options instanceof ElementHandler) {\n // root handler passed via (xml, { rootHandler: ElementHandler }, ...)\n rootHandler = options;\n options = {};\n } else {\n if (typeof options === 'string') {\n // rootHandler passed via (xml, 'someString', ...)\n rootHandler = this.handler(options);\n options = {};\n } else if (typeof rootHandler === 'string') {\n // rootHandler passed via (xml, { rootHandler: 'someString' }, ...)\n rootHandler = this.handler(rootHandler);\n }\n }\n var model = this.model,\n lax = this.lax;\n var context = new Context((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, options, {\n rootHandler: rootHandler\n })),\n parser = new Parser({\n proxy: true\n }),\n stack = createStack();\n rootHandler.context = context;\n\n // push root handler\n stack.push(rootHandler);\n\n /**\n * Handle error.\n *\n * @param {Error} err\n * @param {Function} getContext\n * @param {boolean} lax\n *\n * @return {boolean} true if handled\n */\n function handleError(err, getContext, lax) {\n var ctx = getContext();\n var line = ctx.line,\n column = ctx.column,\n data = ctx.data;\n\n // we receive the full context data here,\n // for elements trim down the information\n // to the tag name, only\n if (data.charAt(0) === '<' && data.indexOf(' ') !== -1) {\n data = data.slice(0, data.indexOf(' ')) + '>';\n }\n var message = 'unparsable content ' + (data ? data + ' ' : '') + 'detected\\n\\t' + 'line: ' + line + '\\n\\t' + 'column: ' + column + '\\n\\t' + 'nested error: ' + err.message;\n if (lax) {\n context.addWarning({\n message: message,\n error: err\n });\n return true;\n } else {\n throw error(message);\n }\n }\n function handleWarning(err, getContext) {\n // just like handling errors in mode\n return handleError(err, getContext, true);\n }\n\n /**\n * Resolve collected references on parse end.\n */\n function resolveReferences() {\n var elementsById = context.elementsById;\n var references = context.references;\n var i, r;\n for (i = 0; r = references[i]; i++) {\n var element = r.element;\n var reference = elementsById[r.id];\n var property = getModdleDescriptor(element).propertiesByName[r.property];\n if (!reference) {\n context.addWarning({\n message: 'unresolved reference <' + r.id + '>',\n element: r.element,\n property: r.property,\n value: r.id\n });\n }\n if (property.isMany) {\n var collection = element.get(property.name),\n idx = collection.indexOf(r);\n\n // we replace an existing place holder (idx != -1) or\n // append to the collection instead\n if (idx === -1) {\n idx = collection.length;\n }\n if (!reference) {\n // remove unresolvable reference\n collection.splice(idx, 1);\n } else {\n // add or update reference in collection\n collection[idx] = reference;\n }\n } else {\n element.set(property.name, reference);\n }\n }\n }\n function handleClose() {\n stack.pop().handleEnd();\n }\n var PREAMBLE_START_PATTERN = /^<\\?xml /i;\n var ENCODING_PATTERN = / encoding=\"([^\"]+)\"/i;\n var UTF_8_PATTERN = /^utf-8$/i;\n function handleQuestion(question) {\n if (!PREAMBLE_START_PATTERN.test(question)) {\n return;\n }\n var match = ENCODING_PATTERN.exec(question);\n var encoding = match && match[1];\n if (!encoding || UTF_8_PATTERN.test(encoding)) {\n return;\n }\n context.addWarning({\n message: 'unsupported document encoding <' + encoding + '>, ' + 'falling back to UTF-8'\n });\n }\n function handleOpen(node, getContext) {\n var handler = stack.peek();\n try {\n stack.push(handler.handleNode(node));\n } catch (err) {\n if (handleError(err, getContext, lax)) {\n stack.push(new NoopHandler());\n }\n }\n }\n function handleCData(text, getContext) {\n try {\n stack.peek().handleText(text);\n } catch (err) {\n handleWarning(err, getContext);\n }\n }\n function handleText(text, getContext) {\n // strip whitespace only nodes, i.e. before\n // sections and in between tags\n\n if (!text.trim()) {\n return;\n }\n handleCData(text, getContext);\n }\n var uriMap = model.getPackages().reduce(function (uriMap, p) {\n uriMap[p.uri] = p.prefix;\n return uriMap;\n }, Object.entries(DEFAULT_NS_MAP).reduce(function (map, [prefix, url]) {\n map[url] = prefix;\n return map;\n }, model.config && model.config.nsMap || {}));\n parser.ns(uriMap).on('openTag', function (obj, decodeStr, selfClosing, getContext) {\n // gracefully handle unparsable attributes (attrs=false)\n var attrs = obj.attrs || {};\n var decodedAttrs = Object.keys(attrs).reduce(function (d, key) {\n var value = decodeStr(attrs[key]);\n d[key] = value;\n return d;\n }, {});\n var node = {\n name: obj.name,\n originalName: obj.originalName,\n attributes: decodedAttrs,\n ns: obj.ns\n };\n handleOpen(node, getContext);\n }).on('question', handleQuestion).on('closeTag', handleClose).on('cdata', handleCData).on('text', function (text, decodeEntities, getContext) {\n handleText(decodeEntities(text), getContext);\n }).on('error', handleError).on('warn', handleWarning);\n\n // async XML parsing to make sure the execution environment\n // (node or brower) is kept responsive and that certain optimization\n // strategies can kick in.\n return new Promise(function (resolve, reject) {\n var err;\n try {\n parser.parse(xml);\n resolveReferences();\n } catch (e) {\n err = e;\n }\n var rootElement = rootHandler.element;\n if (!err && !rootElement) {\n err = error('failed to parse document as <' + rootHandler.type.$descriptor.name + '>');\n }\n var warnings = context.warnings;\n var references = context.references;\n var elementsById = context.elementsById;\n if (err) {\n err.warnings = warnings;\n return reject(err);\n } else {\n return resolve({\n rootElement: rootElement,\n elementsById: elementsById,\n references: references,\n warnings: warnings\n });\n }\n });\n};\nReader.prototype.handler = function (name) {\n return new RootElementHandler(this.model, name);\n};\n\n// helpers //////////////////////////\n\nfunction createStack() {\n var stack = [];\n Object.defineProperty(stack, 'peek', {\n value: function () {\n return this[this.length - 1];\n }\n });\n return stack;\n}\nvar XML_PREAMBLE = '\\n';\nvar ESCAPE_ATTR_CHARS = /<|>|'|\"|&|\\n\\r|\\n/g;\nvar ESCAPE_CHARS = /<|>|&/g;\nfunction Namespaces(parent) {\n this.prefixMap = {};\n this.uriMap = {};\n this.used = {};\n this.wellknown = [];\n this.custom = [];\n this.parent = parent;\n this.defaultPrefixMap = parent && parent.defaultPrefixMap || {};\n}\nNamespaces.prototype.mapDefaultPrefixes = function (defaultPrefixMap) {\n this.defaultPrefixMap = defaultPrefixMap;\n};\nNamespaces.prototype.defaultUriByPrefix = function (prefix) {\n return this.defaultPrefixMap[prefix];\n};\nNamespaces.prototype.byUri = function (uri) {\n return this.uriMap[uri] || this.parent && this.parent.byUri(uri);\n};\nNamespaces.prototype.add = function (ns, isWellknown) {\n this.uriMap[ns.uri] = ns;\n if (isWellknown) {\n this.wellknown.push(ns);\n } else {\n this.custom.push(ns);\n }\n this.mapPrefix(ns.prefix, ns.uri);\n};\nNamespaces.prototype.uriByPrefix = function (prefix) {\n return this.prefixMap[prefix || 'xmlns'] || this.parent && this.parent.uriByPrefix(prefix);\n};\nNamespaces.prototype.mapPrefix = function (prefix, uri) {\n this.prefixMap[prefix || 'xmlns'] = uri;\n};\nNamespaces.prototype.getNSKey = function (ns) {\n return ns.prefix !== undefined ? ns.uri + '|' + ns.prefix : ns.uri;\n};\nNamespaces.prototype.logUsed = function (ns) {\n var uri = ns.uri;\n var nsKey = this.getNSKey(ns);\n this.used[nsKey] = this.byUri(uri);\n\n // Inform parent recursively about the usage of this NS\n if (this.parent) {\n this.parent.logUsed(ns);\n }\n};\nNamespaces.prototype.getUsed = function (ns) {\n var allNs = [].concat(this.wellknown, this.custom);\n return allNs.filter(ns => {\n var nsKey = this.getNSKey(ns);\n return this.used[nsKey];\n });\n};\nfunction lower(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\nfunction nameToAlias(name, pkg) {\n if (hasLowerCaseAlias(pkg)) {\n return lower(name);\n } else {\n return name;\n }\n}\nfunction inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\nfunction nsName(ns) {\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(ns)) {\n return ns;\n } else {\n return (ns.prefix ? ns.prefix + ':' : '') + ns.localName;\n }\n}\nfunction getNsAttrs(namespaces) {\n return namespaces.getUsed().filter(function (ns) {\n // do not serialize built in namespace\n return ns.prefix !== 'xml';\n }).map(function (ns) {\n var name = 'xmlns' + (ns.prefix ? ':' + ns.prefix : '');\n return {\n name: name,\n value: ns.uri\n };\n });\n}\nfunction getElementNs(ns, descriptor) {\n if (descriptor.isGeneric) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: descriptor.ns.localName\n }, ns);\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: nameToAlias(descriptor.ns.localName, descriptor.$pkg)\n }, ns);\n }\n}\nfunction getPropertyNs(ns, descriptor) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: descriptor.ns.localName\n }, ns);\n}\nfunction getSerializableProperties(element) {\n var descriptor = element.$descriptor;\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(descriptor.properties, function (p) {\n var name = p.name;\n if (p.isVirtual) {\n return false;\n }\n\n // do not serialize defaults\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.has)(element, name)) {\n return false;\n }\n var value = element[name];\n\n // do not serialize default equals\n if (value === p.default) {\n return false;\n }\n\n // do not serialize null properties\n if (value === null) {\n return false;\n }\n return p.isMany ? value.length : true;\n });\n}\nvar ESCAPE_ATTR_MAP = {\n '\\n': '#10',\n '\\n\\r': '#10',\n '\"': '#34',\n '\\'': '#39',\n '<': '#60',\n '>': '#62',\n '&': '#38'\n};\nvar ESCAPE_MAP = {\n '<': 'lt',\n '>': 'gt',\n '&': 'amp'\n};\nfunction escape(str, charPattern, replaceMap) {\n // ensure we are handling strings here\n str = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(str) ? str : '' + str;\n return str.replace(charPattern, function (s) {\n return '&' + replaceMap[s] + ';';\n });\n}\n\n/**\n * Escape a string attribute to not contain any bad values (line breaks, '\"', ...)\n *\n * @param {String} str the string to escape\n * @return {String} the escaped string\n */\nfunction escapeAttr(str) {\n return escape(str, ESCAPE_ATTR_CHARS, ESCAPE_ATTR_MAP);\n}\nfunction escapeBody(str) {\n return escape(str, ESCAPE_CHARS, ESCAPE_MAP);\n}\nfunction filterAttributes(props) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(props, function (p) {\n return p.isAttr;\n });\n}\nfunction filterContained(props) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.filter)(props, function (p) {\n return !p.isAttr;\n });\n}\nfunction ReferenceSerializer(tagName) {\n this.tagName = tagName;\n}\nReferenceSerializer.prototype.build = function (element) {\n this.element = element;\n return this;\n};\nReferenceSerializer.prototype.serializeTo = function (writer) {\n writer.appendIndent().append('<' + this.tagName + '>' + this.element.id + '' + this.tagName + '>').appendNewLine();\n};\nfunction BodySerializer() {}\nBodySerializer.prototype.serializeValue = BodySerializer.prototype.serializeTo = function (writer) {\n writer.append(this.escape ? escapeBody(this.value) : this.value);\n};\nBodySerializer.prototype.build = function (prop, value) {\n this.value = value;\n if (prop.type === 'String' && value.search(ESCAPE_CHARS) !== -1) {\n this.escape = true;\n }\n return this;\n};\nfunction ValueSerializer(tagName) {\n this.tagName = tagName;\n}\ninherits(ValueSerializer, BodySerializer);\nValueSerializer.prototype.serializeTo = function (writer) {\n writer.appendIndent().append('<' + this.tagName + '>');\n this.serializeValue(writer);\n writer.append('' + this.tagName + '>').appendNewLine();\n};\nfunction ElementSerializer(parent, propertyDescriptor) {\n this.body = [];\n this.attrs = [];\n this.parent = parent;\n this.propertyDescriptor = propertyDescriptor;\n}\nElementSerializer.prototype.build = function (element) {\n this.element = element;\n var elementDescriptor = element.$descriptor,\n propertyDescriptor = this.propertyDescriptor;\n var otherAttrs, properties;\n var isGeneric = elementDescriptor.isGeneric;\n if (isGeneric) {\n otherAttrs = this.parseGenericNsAttributes(element);\n } else {\n otherAttrs = this.parseNsAttributes(element);\n }\n if (propertyDescriptor) {\n this.ns = this.nsPropertyTagName(propertyDescriptor);\n } else {\n this.ns = this.nsTagName(elementDescriptor);\n }\n\n // compute tag name\n this.tagName = this.addTagName(this.ns);\n if (isGeneric) {\n this.parseGenericContainments(element);\n } else {\n properties = getSerializableProperties(element);\n this.parseAttributes(filterAttributes(properties));\n this.parseContainments(filterContained(properties));\n }\n this.parseGenericAttributes(element, otherAttrs);\n return this;\n};\nElementSerializer.prototype.nsTagName = function (descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getElementNs(effectiveNs, descriptor);\n};\nElementSerializer.prototype.nsPropertyTagName = function (descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getPropertyNs(effectiveNs, descriptor);\n};\nElementSerializer.prototype.isLocalNs = function (ns) {\n return ns.uri === this.ns.uri;\n};\n\n/**\n * Get the actual ns attribute name for the given element.\n *\n * @param {Object} element\n * @param {Boolean} [element.inherited=false]\n *\n * @return {Object} nsName\n */\nElementSerializer.prototype.nsAttributeName = function (element) {\n var ns;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(element)) {\n ns = parseName(element);\n } else {\n ns = element.ns;\n }\n\n // return just local name for inherited attributes\n if (element.inherited) {\n return {\n localName: ns.localName\n };\n }\n\n // parse + log effective ns\n var effectiveNs = this.logNamespaceUsed(ns);\n\n // LOG ACTUAL namespace use\n this.getNamespaces().logUsed(effectiveNs);\n\n // strip prefix if same namespace like parent\n if (this.isLocalNs(effectiveNs)) {\n return {\n localName: ns.localName\n };\n } else {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n localName: ns.localName\n }, effectiveNs);\n }\n};\nElementSerializer.prototype.parseGenericNsAttributes = function (element) {\n return Object.entries(element).filter(([key, value]) => !key.startsWith('$') && this.parseNsAttribute(element, key, value)).map(([key, value]) => ({\n name: key,\n value: value\n }));\n};\nElementSerializer.prototype.parseGenericContainments = function (element) {\n var body = element.$body;\n if (body) {\n this.body.push(new BodySerializer().build({\n type: 'String'\n }, body));\n }\n var children = element.$children;\n if (children) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(children, child => {\n this.body.push(new ElementSerializer(this).build(child));\n });\n }\n};\nElementSerializer.prototype.parseNsAttribute = function (element, name, value) {\n var model = element.$model;\n var nameNs = parseName(name);\n var ns;\n\n // parse xmlns:foo=\"http://foo.bar\"\n if (nameNs.prefix === 'xmlns') {\n ns = {\n prefix: nameNs.localName,\n uri: value\n };\n }\n\n // parse xmlns=\"http://foo.bar\"\n if (!nameNs.prefix && nameNs.localName === 'xmlns') {\n ns = {\n uri: value\n };\n }\n if (!ns) {\n return {\n name: name,\n value: value\n };\n }\n if (model && model.getPackage(value)) {\n // register well known namespace\n this.logNamespace(ns, true, true);\n } else {\n // log custom namespace directly as used\n var actualNs = this.logNamespaceUsed(ns, true);\n this.getNamespaces().logUsed(actualNs);\n }\n};\n\n/**\n * Parse namespaces and return a list of left over generic attributes\n *\n * @param {Object} element\n * @return {Array}\n */\nElementSerializer.prototype.parseNsAttributes = function (element) {\n var self = this;\n var genericAttrs = element.$attrs;\n var attributes = [];\n\n // parse namespace attributes first\n // and log them. push non namespace attributes to a list\n // and process them later\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(genericAttrs, function (value, name) {\n var nonNsAttr = self.parseNsAttribute(element, name, value);\n if (nonNsAttr) {\n attributes.push(nonNsAttr);\n }\n });\n return attributes;\n};\nElementSerializer.prototype.parseGenericAttributes = function (element, attributes) {\n var self = this;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attributes, function (attr) {\n try {\n self.addAttribute(self.nsAttributeName(attr.name), attr.value);\n } catch (e) {\n // eslint-disable-next-line no-undef\n typeof console !== 'undefined' && console.warn(`missing namespace information for <${attr.name}=${attr.value}> on`, element, e);\n }\n });\n};\nElementSerializer.prototype.parseContainments = function (properties) {\n var self = this,\n body = this.body,\n element = this.element;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(properties, function (p) {\n var value = element.get(p.name),\n isReference = p.isReference,\n isMany = p.isMany;\n if (!isMany) {\n value = [value];\n }\n if (p.isBody) {\n body.push(new BodySerializer().build(p, value[0]));\n } else if (isSimple(p.type)) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n body.push(new ValueSerializer(self.addTagName(self.nsPropertyTagName(p))).build(p, v));\n });\n } else if (isReference) {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n body.push(new ReferenceSerializer(self.addTagName(self.nsPropertyTagName(p))).build(v));\n });\n } else {\n // allow serialization via type\n // rather than element name\n var serialization = getSerialization(p);\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n var serializer;\n if (serialization) {\n if (serialization === SERIALIZE_PROPERTY) {\n serializer = new ElementSerializer(self, p);\n } else {\n serializer = new TypeSerializer(self, p, serialization);\n }\n } else {\n serializer = new ElementSerializer(self);\n }\n body.push(serializer.build(v));\n });\n }\n });\n};\nElementSerializer.prototype.getNamespaces = function (local) {\n var namespaces = this.namespaces,\n parent = this.parent,\n parentNamespaces;\n if (!namespaces) {\n parentNamespaces = parent && parent.getNamespaces();\n if (local || !parentNamespaces) {\n this.namespaces = namespaces = new Namespaces(parentNamespaces);\n } else {\n namespaces = parentNamespaces;\n }\n }\n return namespaces;\n};\nElementSerializer.prototype.logNamespace = function (ns, wellknown, local) {\n var namespaces = this.getNamespaces(local);\n var nsUri = ns.uri,\n nsPrefix = ns.prefix;\n var existing = namespaces.byUri(nsUri);\n if (!existing || local) {\n namespaces.add(ns, wellknown);\n }\n namespaces.mapPrefix(nsPrefix, nsUri);\n return ns;\n};\nElementSerializer.prototype.logNamespaceUsed = function (ns, local) {\n var namespaces = this.getNamespaces(local);\n\n // ns may be\n //\n // * prefix only\n // * prefix:uri\n // * localName only\n\n var prefix = ns.prefix,\n uri = ns.uri,\n newPrefix,\n idx,\n wellknownUri;\n\n // handle anonymous namespaces (elementForm=unqualified), cf. #23\n if (!prefix && !uri) {\n return {\n localName: ns.localName\n };\n }\n wellknownUri = namespaces.defaultUriByPrefix(prefix);\n uri = uri || wellknownUri || namespaces.uriByPrefix(prefix);\n if (!uri) {\n throw new Error('no namespace uri given for prefix <' + prefix + '>');\n }\n ns = namespaces.byUri(uri);\n\n // register new default prefix in local scope\n if (!ns && !prefix) {\n ns = this.logNamespace({\n uri\n }, wellknownUri === uri, true);\n }\n if (!ns) {\n newPrefix = prefix;\n idx = 1;\n\n // find a prefix that is not mapped yet\n while (namespaces.uriByPrefix(newPrefix)) {\n newPrefix = prefix + '_' + idx++;\n }\n ns = this.logNamespace({\n prefix: newPrefix,\n uri: uri\n }, wellknownUri === uri);\n }\n if (prefix) {\n namespaces.mapPrefix(prefix, uri);\n }\n return ns;\n};\nElementSerializer.prototype.parseAttributes = function (properties) {\n var self = this,\n element = this.element;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(properties, function (p) {\n var value = element.get(p.name);\n if (p.isReference) {\n if (!p.isMany) {\n value = value.id;\n } else {\n var values = [];\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(value, function (v) {\n values.push(v.id);\n });\n\n // IDREFS is a whitespace-separated list of references.\n value = values.join(' ');\n }\n }\n self.addAttribute(self.nsAttributeName(p), value);\n });\n};\nElementSerializer.prototype.addTagName = function (nsTagName) {\n var actualNs = this.logNamespaceUsed(nsTagName);\n this.getNamespaces().logUsed(actualNs);\n return nsName(nsTagName);\n};\nElementSerializer.prototype.addAttribute = function (name, value) {\n var attrs = this.attrs;\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(value)) {\n value = escapeAttr(value);\n }\n\n // de-duplicate attributes\n // https://github.com/bpmn-io/moddle-xml/issues/66\n var idx = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.findIndex)(attrs, function (element) {\n return element.name.localName === name.localName && element.name.uri === name.uri && element.name.prefix === name.prefix;\n });\n var attr = {\n name: name,\n value: value\n };\n if (idx !== -1) {\n attrs.splice(idx, 1, attr);\n } else {\n attrs.push(attr);\n }\n};\nElementSerializer.prototype.serializeAttributes = function (writer) {\n var attrs = this.attrs,\n namespaces = this.namespaces;\n if (namespaces) {\n attrs = getNsAttrs(namespaces).concat(attrs);\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(attrs, function (a) {\n writer.append(' ').append(nsName(a.name)).append('=\"').append(a.value).append('\"');\n });\n};\nElementSerializer.prototype.serializeTo = function (writer) {\n var firstBody = this.body[0],\n indent = firstBody && firstBody.constructor !== BodySerializer;\n writer.appendIndent().append('<' + this.tagName);\n this.serializeAttributes(writer);\n writer.append(firstBody ? '>' : ' />');\n if (firstBody) {\n if (indent) {\n writer.appendNewLine().indent();\n }\n (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.forEach)(this.body, function (b) {\n b.serializeTo(writer);\n });\n if (indent) {\n writer.unindent().appendIndent();\n }\n writer.append('' + this.tagName + '>');\n }\n writer.appendNewLine();\n};\n\n/**\n * A serializer for types that handles serialization of data types\n */\nfunction TypeSerializer(parent, propertyDescriptor, serialization) {\n ElementSerializer.call(this, parent, propertyDescriptor);\n this.serialization = serialization;\n}\ninherits(TypeSerializer, ElementSerializer);\nTypeSerializer.prototype.parseNsAttributes = function (element) {\n // extracted attributes with serialization attribute\n // stripped; it may be later\n var attributes = ElementSerializer.prototype.parseNsAttributes.call(this, element).filter(attr => attr.name !== this.serialization);\n var descriptor = element.$descriptor;\n\n // only serialize if necessary\n if (descriptor.name === this.propertyDescriptor.type) {\n return attributes;\n }\n var typeNs = this.typeNs = this.nsTagName(descriptor);\n this.getNamespaces().logUsed(this.typeNs);\n\n // add xsi:type attribute to represent the elements\n // actual type\n\n var pkg = element.$model.getPackage(typeNs.uri),\n typePrefix = pkg.xml && pkg.xml.typePrefix || '';\n this.addAttribute(this.nsAttributeName(this.serialization), (typeNs.prefix ? typeNs.prefix + ':' : '') + typePrefix + descriptor.ns.localName);\n return attributes;\n};\nTypeSerializer.prototype.isLocalNs = function (ns) {\n return ns.uri === (this.typeNs || this.ns).uri;\n};\nfunction SavingWriter() {\n this.value = '';\n this.write = function (str) {\n this.value += str;\n };\n}\nfunction FormatingWriter(out, format) {\n var indent = [''];\n this.append = function (str) {\n out.write(str);\n return this;\n };\n this.appendNewLine = function () {\n if (format) {\n out.write('\\n');\n }\n return this;\n };\n this.appendIndent = function () {\n if (format) {\n out.write(indent.join(' '));\n }\n return this;\n };\n this.indent = function () {\n indent.push('');\n return this;\n };\n this.unindent = function () {\n indent.pop();\n return this;\n };\n}\n\n/**\n * A writer for meta-model backed document trees\n *\n * @param {Object} options output options to pass into the writer\n */\nfunction Writer(options) {\n options = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n format: false,\n preamble: true\n }, options || {});\n function toXML(tree, writer) {\n var internalWriter = writer || new SavingWriter();\n var formatingWriter = new FormatingWriter(internalWriter, options.format);\n if (options.preamble) {\n formatingWriter.append(XML_PREAMBLE);\n }\n var serializer = new ElementSerializer();\n var model = tree.$model;\n serializer.getNamespaces().mapDefaultPrefixes(getDefaultPrefixMappings(model));\n serializer.build(tree).serializeTo(formatingWriter);\n if (!writer) {\n return internalWriter.value;\n }\n }\n return {\n toXML: toXML\n };\n}\n\n// helpers ///////////\n\n/**\n * @param {Moddle} model\n *\n * @return { Record } map from prefix to URI\n */\nfunction getDefaultPrefixMappings(model) {\n const nsMap = model.config && model.config.nsMap || {};\n const prefixMap = {};\n\n // { prefix -> uri }\n for (const prefix in DEFAULT_NS_MAP) {\n prefixMap[prefix] = DEFAULT_NS_MAP[prefix];\n }\n\n // { uri -> prefix }\n for (const uri in nsMap) {\n const prefix = nsMap[uri];\n prefixMap[prefix] = uri;\n }\n for (const pkg of model.getPackages()) {\n prefixMap[pkg.prefix] = pkg.uri;\n }\n return prefixMap;\n}\n\n/**\n * A sub class of {@link Moddle} with support for import and export of BPMN 2.0 xml files.\n *\n * @class BpmnModdle\n * @extends Moddle\n *\n * @param {Object|Array} packages to use for instantiating the model\n * @param {Object} [options] additional options to pass over\n */\nfunction BpmnModdle(packages, options) {\n Moddle.call(this, packages, options);\n}\nBpmnModdle.prototype = Object.create(Moddle.prototype);\n\n/**\n * The fromXML result.\n *\n * @typedef {Object} ParseResult\n *\n * @property {ModdleElement} rootElement\n * @property {Array} references\n * @property {Array} warnings\n * @property {Object} elementsById - a mapping containing each ID -> ModdleElement\n */\n\n/**\n * The fromXML error.\n *\n * @typedef {Error} ParseError\n *\n * @property {Array} warnings\n */\n\n/**\n * Instantiates a BPMN model tree from a given xml string.\n *\n * @param {String} xmlStr\n * @param {String} [typeName='bpmn:Definitions'] name of the root element\n * @param {Object} [options] options to pass to the underlying reader\n *\n * @returns {Promise}\n */\nBpmnModdle.prototype.fromXML = function (xmlStr, typeName, options) {\n if (!(0,min_dash__WEBPACK_IMPORTED_MODULE_13__.isString)(typeName)) {\n options = typeName;\n typeName = 'bpmn:Definitions';\n }\n var reader = new Reader((0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({\n model: this,\n lax: true\n }, options));\n var rootHandler = reader.handler(typeName);\n return reader.fromXML(xmlStr, rootHandler);\n};\n\n/**\n * The toXML result.\n *\n * @typedef {Object} SerializationResult\n *\n * @property {String} xml\n */\n\n/**\n * Serializes a BPMN 2.0 object tree to XML.\n *\n * @param {String} element the root element, typically an instance of `bpmn:Definitions`\n * @param {Object} [options] to pass to the underlying writer\n *\n * @returns {Promise}\n */\nBpmnModdle.prototype.toXML = function (element, options) {\n var writer = new Writer(options);\n return new Promise(function (resolve, reject) {\n try {\n var result = writer.toXML(element);\n return resolve({\n xml: result\n });\n } catch (err) {\n return reject(err);\n }\n });\n};\nvar name$5 = \"BPMN20\";\nvar uri$5 = \"http://www.omg.org/spec/BPMN/20100524/MODEL\";\nvar prefix$5 = \"bpmn\";\nvar associations$5 = [];\nvar types$5 = [{\n name: \"Interface\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"operations\",\n type: \"Operation\",\n isMany: true\n }, {\n name: \"implementationRef\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Operation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"inMessageRef\",\n type: \"Message\",\n isReference: true\n }, {\n name: \"outMessageRef\",\n type: \"Message\",\n isReference: true\n }, {\n name: \"errorRef\",\n type: \"Error\",\n isMany: true,\n isReference: true\n }, {\n name: \"implementationRef\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"EndPoint\",\n superClass: [\"RootElement\"]\n}, {\n name: \"Auditing\",\n superClass: [\"BaseElement\"]\n}, {\n name: \"GlobalTask\",\n superClass: [\"CallableElement\"],\n properties: [{\n name: \"resources\",\n type: \"ResourceRole\",\n isMany: true\n }]\n}, {\n name: \"Monitoring\",\n superClass: [\"BaseElement\"]\n}, {\n name: \"Performer\",\n superClass: [\"ResourceRole\"]\n}, {\n name: \"Process\",\n superClass: [\"FlowElementsContainer\", \"CallableElement\"],\n properties: [{\n name: \"processType\",\n type: \"ProcessType\",\n isAttr: true\n }, {\n name: \"isClosed\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"auditing\",\n type: \"Auditing\"\n }, {\n name: \"monitoring\",\n type: \"Monitoring\"\n }, {\n name: \"properties\",\n type: \"Property\",\n isMany: true\n }, {\n name: \"laneSets\",\n isMany: true,\n replaces: \"FlowElementsContainer#laneSets\",\n type: \"LaneSet\"\n }, {\n name: \"flowElements\",\n isMany: true,\n replaces: \"FlowElementsContainer#flowElements\",\n type: \"FlowElement\"\n }, {\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }, {\n name: \"resources\",\n type: \"ResourceRole\",\n isMany: true\n }, {\n name: \"correlationSubscriptions\",\n type: \"CorrelationSubscription\",\n isMany: true\n }, {\n name: \"supports\",\n type: \"Process\",\n isMany: true,\n isReference: true\n }, {\n name: \"definitionalCollaborationRef\",\n type: \"Collaboration\",\n isAttr: true,\n isReference: true\n }, {\n name: \"isExecutable\",\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"LaneSet\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"lanes\",\n type: \"Lane\",\n isMany: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Lane\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"partitionElementRef\",\n type: \"BaseElement\",\n isAttr: true,\n isReference: true\n }, {\n name: \"partitionElement\",\n type: \"BaseElement\"\n }, {\n name: \"flowNodeRef\",\n type: \"FlowNode\",\n isMany: true,\n isReference: true\n }, {\n name: \"childLaneSet\",\n type: \"LaneSet\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"GlobalManualTask\",\n superClass: [\"GlobalTask\"]\n}, {\n name: \"ManualTask\",\n superClass: [\"Task\"]\n}, {\n name: \"UserTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"renderings\",\n type: \"Rendering\",\n isMany: true\n }, {\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Rendering\",\n superClass: [\"BaseElement\"]\n}, {\n name: \"HumanPerformer\",\n superClass: [\"Performer\"]\n}, {\n name: \"PotentialOwner\",\n superClass: [\"HumanPerformer\"]\n}, {\n name: \"GlobalUserTask\",\n superClass: [\"GlobalTask\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"renderings\",\n type: \"Rendering\",\n isMany: true\n }]\n}, {\n name: \"Gateway\",\n isAbstract: true,\n superClass: [\"FlowNode\"],\n properties: [{\n name: \"gatewayDirection\",\n type: \"GatewayDirection\",\n \"default\": \"Unspecified\",\n isAttr: true\n }]\n}, {\n name: \"EventBasedGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"instantiate\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"eventGatewayType\",\n type: \"EventBasedGatewayType\",\n isAttr: true,\n \"default\": \"Exclusive\"\n }]\n}, {\n name: \"ComplexGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"activationCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ExclusiveGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"InclusiveGateway\",\n superClass: [\"Gateway\"],\n properties: [{\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ParallelGateway\",\n superClass: [\"Gateway\"]\n}, {\n name: \"RootElement\",\n isAbstract: true,\n superClass: [\"BaseElement\"]\n}, {\n name: \"Relationship\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"type\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"direction\",\n type: \"RelationshipDirection\",\n isAttr: true\n }, {\n name: \"source\",\n isMany: true,\n isReference: true,\n type: \"Element\"\n }, {\n name: \"target\",\n isMany: true,\n isReference: true,\n type: \"Element\"\n }]\n}, {\n name: \"BaseElement\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n type: \"String\",\n isId: true\n }, {\n name: \"documentation\",\n type: \"Documentation\",\n isMany: true\n }, {\n name: \"extensionDefinitions\",\n type: \"ExtensionDefinition\",\n isMany: true,\n isReference: true\n }, {\n name: \"extensionElements\",\n type: \"ExtensionElements\"\n }]\n}, {\n name: \"Extension\",\n properties: [{\n name: \"mustUnderstand\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"definition\",\n type: \"ExtensionDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ExtensionDefinition\",\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"extensionAttributeDefinitions\",\n type: \"ExtensionAttributeDefinition\",\n isMany: true\n }]\n}, {\n name: \"ExtensionAttributeDefinition\",\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"type\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isReference\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"extensionDefinition\",\n type: \"ExtensionDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ExtensionElements\",\n properties: [{\n name: \"valueRef\",\n isAttr: true,\n isReference: true,\n type: \"Element\"\n }, {\n name: \"values\",\n type: \"Element\",\n isMany: true\n }, {\n name: \"extensionAttributeDefinition\",\n type: \"ExtensionAttributeDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Documentation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"text\",\n type: \"String\",\n isBody: true\n }, {\n name: \"textFormat\",\n \"default\": \"text/plain\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Event\",\n isAbstract: true,\n superClass: [\"FlowNode\", \"InteractionNode\"],\n properties: [{\n name: \"properties\",\n type: \"Property\",\n isMany: true\n }]\n}, {\n name: \"IntermediateCatchEvent\",\n superClass: [\"CatchEvent\"]\n}, {\n name: \"IntermediateThrowEvent\",\n superClass: [\"ThrowEvent\"]\n}, {\n name: \"EndEvent\",\n superClass: [\"ThrowEvent\"]\n}, {\n name: \"StartEvent\",\n superClass: [\"CatchEvent\"],\n properties: [{\n name: \"isInterrupting\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"ThrowEvent\",\n isAbstract: true,\n superClass: [\"Event\"],\n properties: [{\n name: \"dataInputs\",\n type: \"DataInput\",\n isMany: true\n }, {\n name: \"dataInputAssociations\",\n type: \"DataInputAssociation\",\n isMany: true\n }, {\n name: \"inputSet\",\n type: \"InputSet\"\n }, {\n name: \"eventDefinitions\",\n type: \"EventDefinition\",\n isMany: true\n }, {\n name: \"eventDefinitionRef\",\n type: \"EventDefinition\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"CatchEvent\",\n isAbstract: true,\n superClass: [\"Event\"],\n properties: [{\n name: \"parallelMultiple\",\n isAttr: true,\n type: \"Boolean\",\n \"default\": false\n }, {\n name: \"dataOutputs\",\n type: \"DataOutput\",\n isMany: true\n }, {\n name: \"dataOutputAssociations\",\n type: \"DataOutputAssociation\",\n isMany: true\n }, {\n name: \"outputSet\",\n type: \"OutputSet\"\n }, {\n name: \"eventDefinitions\",\n type: \"EventDefinition\",\n isMany: true\n }, {\n name: \"eventDefinitionRef\",\n type: \"EventDefinition\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"BoundaryEvent\",\n superClass: [\"CatchEvent\"],\n properties: [{\n name: \"cancelActivity\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"attachedToRef\",\n type: \"Activity\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"EventDefinition\",\n isAbstract: true,\n superClass: [\"RootElement\"]\n}, {\n name: \"CancelEventDefinition\",\n superClass: [\"EventDefinition\"]\n}, {\n name: \"ErrorEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"errorRef\",\n type: \"Error\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"TerminateEventDefinition\",\n superClass: [\"EventDefinition\"]\n}, {\n name: \"EscalationEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"escalationRef\",\n type: \"Escalation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Escalation\",\n properties: [{\n name: \"structureRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"escalationCode\",\n isAttr: true,\n type: \"String\"\n }],\n superClass: [\"RootElement\"]\n}, {\n name: \"CompensateEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"waitForCompletion\",\n isAttr: true,\n type: \"Boolean\",\n \"default\": true\n }, {\n name: \"activityRef\",\n type: \"Activity\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"TimerEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"timeDate\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"timeCycle\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"timeDuration\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"LinkEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"target\",\n type: \"LinkEventDefinition\",\n isReference: true\n }, {\n name: \"source\",\n type: \"LinkEventDefinition\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"MessageEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ConditionalEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"condition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"SignalEventDefinition\",\n superClass: [\"EventDefinition\"],\n properties: [{\n name: \"signalRef\",\n type: \"Signal\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Signal\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"structureRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ImplicitThrowEvent\",\n superClass: [\"ThrowEvent\"]\n}, {\n name: \"DataState\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ItemAwareElement\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"itemSubjectRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"dataState\",\n type: \"DataState\"\n }]\n}, {\n name: \"DataAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"sourceRef\",\n type: \"ItemAwareElement\",\n isMany: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"ItemAwareElement\",\n isReference: true\n }, {\n name: \"transformation\",\n type: \"FormalExpression\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"assignment\",\n type: \"Assignment\",\n isMany: true\n }]\n}, {\n name: \"DataInput\",\n superClass: [\"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"inputSetRef\",\n type: \"InputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"inputSetWithOptional\",\n type: \"InputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"inputSetWithWhileExecuting\",\n type: \"InputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"DataOutput\",\n superClass: [\"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"outputSetRef\",\n type: \"OutputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"outputSetWithOptional\",\n type: \"OutputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"outputSetWithWhileExecuting\",\n type: \"OutputSet\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"InputSet\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"dataInputRefs\",\n type: \"DataInput\",\n isMany: true,\n isReference: true\n }, {\n name: \"optionalInputRefs\",\n type: \"DataInput\",\n isMany: true,\n isReference: true\n }, {\n name: \"whileExecutingInputRefs\",\n type: \"DataInput\",\n isMany: true,\n isReference: true\n }, {\n name: \"outputSetRefs\",\n type: \"OutputSet\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"OutputSet\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"dataOutputRefs\",\n type: \"DataOutput\",\n isMany: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"inputSetRefs\",\n type: \"InputSet\",\n isMany: true,\n isReference: true\n }, {\n name: \"optionalOutputRefs\",\n type: \"DataOutput\",\n isMany: true,\n isReference: true\n }, {\n name: \"whileExecutingOutputRefs\",\n type: \"DataOutput\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"Property\",\n superClass: [\"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"DataInputAssociation\",\n superClass: [\"DataAssociation\"]\n}, {\n name: \"DataOutputAssociation\",\n superClass: [\"DataAssociation\"]\n}, {\n name: \"InputOutputSpecification\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"dataInputs\",\n type: \"DataInput\",\n isMany: true\n }, {\n name: \"dataOutputs\",\n type: \"DataOutput\",\n isMany: true\n }, {\n name: \"inputSets\",\n type: \"InputSet\",\n isMany: true\n }, {\n name: \"outputSets\",\n type: \"OutputSet\",\n isMany: true\n }]\n}, {\n name: \"DataObject\",\n superClass: [\"FlowElement\", \"ItemAwareElement\"],\n properties: [{\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"InputOutputBinding\",\n properties: [{\n name: \"inputDataRef\",\n type: \"InputSet\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outputDataRef\",\n type: \"OutputSet\",\n isAttr: true,\n isReference: true\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Assignment\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"from\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"to\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"DataStore\",\n superClass: [\"RootElement\", \"ItemAwareElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"capacity\",\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"isUnlimited\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"DataStoreReference\",\n superClass: [\"ItemAwareElement\", \"FlowElement\"],\n properties: [{\n name: \"dataStoreRef\",\n type: \"DataStore\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"DataObjectReference\",\n superClass: [\"ItemAwareElement\", \"FlowElement\"],\n properties: [{\n name: \"dataObjectRef\",\n type: \"DataObject\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ConversationLink\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"sourceRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ConversationAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"innerConversationNodeRef\",\n type: \"ConversationNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outerConversationNodeRef\",\n type: \"ConversationNode\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"CallConversation\",\n superClass: [\"ConversationNode\"],\n properties: [{\n name: \"calledCollaborationRef\",\n type: \"Collaboration\",\n isAttr: true,\n isReference: true\n }, {\n name: \"participantAssociations\",\n type: \"ParticipantAssociation\",\n isMany: true\n }]\n}, {\n name: \"Conversation\",\n superClass: [\"ConversationNode\"]\n}, {\n name: \"SubConversation\",\n superClass: [\"ConversationNode\"],\n properties: [{\n name: \"conversationNodes\",\n type: \"ConversationNode\",\n isMany: true\n }]\n}, {\n name: \"ConversationNode\",\n isAbstract: true,\n superClass: [\"InteractionNode\", \"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }, {\n name: \"messageFlowRefs\",\n type: \"MessageFlow\",\n isMany: true,\n isReference: true\n }, {\n name: \"correlationKeys\",\n type: \"CorrelationKey\",\n isMany: true\n }]\n}, {\n name: \"GlobalConversation\",\n superClass: [\"Collaboration\"]\n}, {\n name: \"PartnerEntity\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"PartnerRole\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationProperty\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"correlationPropertyRetrievalExpression\",\n type: \"CorrelationPropertyRetrievalExpression\",\n isMany: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"type\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Error\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"structureRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"errorCode\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"CorrelationKey\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"correlationPropertyRef\",\n type: \"CorrelationProperty\",\n isMany: true,\n isReference: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Expression\",\n superClass: [\"BaseElement\"],\n isAbstract: false,\n properties: [{\n name: \"body\",\n isBody: true,\n type: \"String\"\n }]\n}, {\n name: \"FormalExpression\",\n superClass: [\"Expression\"],\n properties: [{\n name: \"language\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"evaluatesToTypeRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Message\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"itemRef\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ItemDefinition\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"itemKind\",\n type: \"ItemKind\",\n isAttr: true\n }, {\n name: \"structureRef\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isCollection\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"import\",\n type: \"Import\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"FlowElement\",\n isAbstract: true,\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"auditing\",\n type: \"Auditing\"\n }, {\n name: \"monitoring\",\n type: \"Monitoring\"\n }, {\n name: \"categoryValueRef\",\n type: \"CategoryValue\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"SequenceFlow\",\n superClass: [\"FlowElement\"],\n properties: [{\n name: \"isImmediate\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"conditionExpression\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"sourceRef\",\n type: \"FlowNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"FlowNode\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"FlowElementsContainer\",\n isAbstract: true,\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"laneSets\",\n type: \"LaneSet\",\n isMany: true\n }, {\n name: \"flowElements\",\n type: \"FlowElement\",\n isMany: true\n }]\n}, {\n name: \"CallableElement\",\n isAbstract: true,\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"ioSpecification\",\n type: \"InputOutputSpecification\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"supportedInterfaceRef\",\n type: \"Interface\",\n isMany: true,\n isReference: true\n }, {\n name: \"ioBinding\",\n type: \"InputOutputBinding\",\n isMany: true,\n xml: {\n serialize: \"property\"\n }\n }]\n}, {\n name: \"FlowNode\",\n isAbstract: true,\n superClass: [\"FlowElement\"],\n properties: [{\n name: \"incoming\",\n type: \"SequenceFlow\",\n isMany: true,\n isReference: true\n }, {\n name: \"outgoing\",\n type: \"SequenceFlow\",\n isMany: true,\n isReference: true\n }, {\n name: \"lanes\",\n type: \"Lane\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationPropertyRetrievalExpression\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"messagePath\",\n type: \"FormalExpression\"\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationPropertyBinding\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"dataPath\",\n type: \"FormalExpression\"\n }, {\n name: \"correlationPropertyRef\",\n type: \"CorrelationProperty\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Resource\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"resourceParameters\",\n type: \"ResourceParameter\",\n isMany: true\n }]\n}, {\n name: \"ResourceParameter\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isRequired\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"type\",\n type: \"ItemDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"CorrelationSubscription\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"correlationKeyRef\",\n type: \"CorrelationKey\",\n isAttr: true,\n isReference: true\n }, {\n name: \"correlationPropertyBinding\",\n type: \"CorrelationPropertyBinding\",\n isMany: true\n }]\n}, {\n name: \"MessageFlow\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"sourceRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"InteractionNode\",\n isAttr: true,\n isReference: true\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"MessageFlowAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"innerMessageFlowRef\",\n type: \"MessageFlow\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outerMessageFlowRef\",\n type: \"MessageFlow\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"InteractionNode\",\n isAbstract: true,\n properties: [{\n name: \"incomingConversationLinks\",\n type: \"ConversationLink\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"outgoingConversationLinks\",\n type: \"ConversationLink\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }]\n}, {\n name: \"Participant\",\n superClass: [\"InteractionNode\", \"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"interfaceRef\",\n type: \"Interface\",\n isMany: true,\n isReference: true\n }, {\n name: \"participantMultiplicity\",\n type: \"ParticipantMultiplicity\"\n }, {\n name: \"endPointRefs\",\n type: \"EndPoint\",\n isMany: true,\n isReference: true\n }, {\n name: \"processRef\",\n type: \"Process\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ParticipantAssociation\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"innerParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }, {\n name: \"outerParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ParticipantMultiplicity\",\n properties: [{\n name: \"minimum\",\n \"default\": 0,\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"maximum\",\n \"default\": 1,\n isAttr: true,\n type: \"Integer\"\n }],\n superClass: [\"BaseElement\"]\n}, {\n name: \"Collaboration\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"isClosed\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"participants\",\n type: \"Participant\",\n isMany: true\n }, {\n name: \"messageFlows\",\n type: \"MessageFlow\",\n isMany: true\n }, {\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }, {\n name: \"conversations\",\n type: \"ConversationNode\",\n isMany: true\n }, {\n name: \"conversationAssociations\",\n type: \"ConversationAssociation\"\n }, {\n name: \"participantAssociations\",\n type: \"ParticipantAssociation\",\n isMany: true\n }, {\n name: \"messageFlowAssociations\",\n type: \"MessageFlowAssociation\",\n isMany: true\n }, {\n name: \"correlationKeys\",\n type: \"CorrelationKey\",\n isMany: true\n }, {\n name: \"choreographyRef\",\n type: \"Choreography\",\n isMany: true,\n isReference: true\n }, {\n name: \"conversationLinks\",\n type: \"ConversationLink\",\n isMany: true\n }]\n}, {\n name: \"ChoreographyActivity\",\n isAbstract: true,\n superClass: [\"FlowNode\"],\n properties: [{\n name: \"participantRef\",\n type: \"Participant\",\n isMany: true,\n isReference: true\n }, {\n name: \"initiatingParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }, {\n name: \"correlationKeys\",\n type: \"CorrelationKey\",\n isMany: true\n }, {\n name: \"loopType\",\n type: \"ChoreographyLoopType\",\n \"default\": \"None\",\n isAttr: true\n }]\n}, {\n name: \"CallChoreography\",\n superClass: [\"ChoreographyActivity\"],\n properties: [{\n name: \"calledChoreographyRef\",\n type: \"Choreography\",\n isAttr: true,\n isReference: true\n }, {\n name: \"participantAssociations\",\n type: \"ParticipantAssociation\",\n isMany: true\n }]\n}, {\n name: \"SubChoreography\",\n superClass: [\"ChoreographyActivity\", \"FlowElementsContainer\"],\n properties: [{\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }]\n}, {\n name: \"ChoreographyTask\",\n superClass: [\"ChoreographyActivity\"],\n properties: [{\n name: \"messageFlowRef\",\n type: \"MessageFlow\",\n isMany: true,\n isReference: true\n }]\n}, {\n name: \"Choreography\",\n superClass: [\"Collaboration\", \"FlowElementsContainer\"]\n}, {\n name: \"GlobalChoreographyTask\",\n superClass: [\"Choreography\"],\n properties: [{\n name: \"initiatingParticipantRef\",\n type: \"Participant\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"TextAnnotation\",\n superClass: [\"Artifact\"],\n properties: [{\n name: \"text\",\n type: \"String\"\n }, {\n name: \"textFormat\",\n \"default\": \"text/plain\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Group\",\n superClass: [\"Artifact\"],\n properties: [{\n name: \"categoryValueRef\",\n type: \"CategoryValue\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Association\",\n superClass: [\"Artifact\"],\n properties: [{\n name: \"associationDirection\",\n type: \"AssociationDirection\",\n isAttr: true\n }, {\n name: \"sourceRef\",\n type: \"BaseElement\",\n isAttr: true,\n isReference: true\n }, {\n name: \"targetRef\",\n type: \"BaseElement\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"Category\",\n superClass: [\"RootElement\"],\n properties: [{\n name: \"categoryValue\",\n type: \"CategoryValue\",\n isMany: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Artifact\",\n isAbstract: true,\n superClass: [\"BaseElement\"]\n}, {\n name: \"CategoryValue\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"categorizedFlowElements\",\n type: \"FlowElement\",\n isMany: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"value\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Activity\",\n isAbstract: true,\n superClass: [\"FlowNode\"],\n properties: [{\n name: \"isForCompensation\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"default\",\n type: \"SequenceFlow\",\n isAttr: true,\n isReference: true\n }, {\n name: \"ioSpecification\",\n type: \"InputOutputSpecification\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"boundaryEventRefs\",\n type: \"BoundaryEvent\",\n isMany: true,\n isReference: true\n }, {\n name: \"properties\",\n type: \"Property\",\n isMany: true\n }, {\n name: \"dataInputAssociations\",\n type: \"DataInputAssociation\",\n isMany: true\n }, {\n name: \"dataOutputAssociations\",\n type: \"DataOutputAssociation\",\n isMany: true\n }, {\n name: \"startQuantity\",\n \"default\": 1,\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"resources\",\n type: \"ResourceRole\",\n isMany: true\n }, {\n name: \"completionQuantity\",\n \"default\": 1,\n isAttr: true,\n type: \"Integer\"\n }, {\n name: \"loopCharacteristics\",\n type: \"LoopCharacteristics\"\n }]\n}, {\n name: \"ServiceTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"SubProcess\",\n superClass: [\"Activity\", \"FlowElementsContainer\", \"InteractionNode\"],\n properties: [{\n name: \"triggeredByEvent\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"artifacts\",\n type: \"Artifact\",\n isMany: true\n }]\n}, {\n name: \"LoopCharacteristics\",\n isAbstract: true,\n superClass: [\"BaseElement\"]\n}, {\n name: \"MultiInstanceLoopCharacteristics\",\n superClass: [\"LoopCharacteristics\"],\n properties: [{\n name: \"isSequential\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"behavior\",\n type: \"MultiInstanceBehavior\",\n \"default\": \"All\",\n isAttr: true\n }, {\n name: \"loopCardinality\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"loopDataInputRef\",\n type: \"ItemAwareElement\",\n isReference: true\n }, {\n name: \"loopDataOutputRef\",\n type: \"ItemAwareElement\",\n isReference: true\n }, {\n name: \"inputDataItem\",\n type: \"DataInput\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"outputDataItem\",\n type: \"DataOutput\",\n xml: {\n serialize: \"property\"\n }\n }, {\n name: \"complexBehaviorDefinition\",\n type: \"ComplexBehaviorDefinition\",\n isMany: true\n }, {\n name: \"completionCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"oneBehaviorEventRef\",\n type: \"EventDefinition\",\n isAttr: true,\n isReference: true\n }, {\n name: \"noneBehaviorEventRef\",\n type: \"EventDefinition\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"StandardLoopCharacteristics\",\n superClass: [\"LoopCharacteristics\"],\n properties: [{\n name: \"testBefore\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"loopCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"loopMaximum\",\n type: \"Integer\",\n isAttr: true\n }]\n}, {\n name: \"CallActivity\",\n superClass: [\"Activity\", \"InteractionNode\"],\n properties: [{\n name: \"calledElement\",\n type: \"String\",\n isAttr: true\n }]\n}, {\n name: \"Task\",\n superClass: [\"Activity\", \"InteractionNode\"]\n}, {\n name: \"SendTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ReceiveTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"instantiate\",\n \"default\": false,\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"operationRef\",\n type: \"Operation\",\n isAttr: true,\n isReference: true\n }, {\n name: \"messageRef\",\n type: \"Message\",\n isAttr: true,\n isReference: true\n }]\n}, {\n name: \"ScriptTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"scriptFormat\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"script\",\n type: \"String\"\n }]\n}, {\n name: \"BusinessRuleTask\",\n superClass: [\"Task\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"AdHocSubProcess\",\n superClass: [\"SubProcess\"],\n properties: [{\n name: \"completionCondition\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"ordering\",\n type: \"AdHocOrdering\",\n isAttr: true\n }, {\n name: \"cancelRemainingInstances\",\n \"default\": true,\n isAttr: true,\n type: \"Boolean\"\n }]\n}, {\n name: \"Transaction\",\n superClass: [\"SubProcess\"],\n properties: [{\n name: \"protocol\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"method\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"GlobalScriptTask\",\n superClass: [\"GlobalTask\"],\n properties: [{\n name: \"scriptLanguage\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"script\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"GlobalBusinessRuleTask\",\n superClass: [\"GlobalTask\"],\n properties: [{\n name: \"implementation\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ComplexBehaviorDefinition\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"condition\",\n type: \"FormalExpression\"\n }, {\n name: \"event\",\n type: \"ImplicitThrowEvent\"\n }]\n}, {\n name: \"ResourceRole\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"resourceRef\",\n type: \"Resource\",\n isReference: true\n }, {\n name: \"resourceParameterBindings\",\n type: \"ResourceParameterBinding\",\n isMany: true\n }, {\n name: \"resourceAssignmentExpression\",\n type: \"ResourceAssignmentExpression\"\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ResourceParameterBinding\",\n properties: [{\n name: \"expression\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }, {\n name: \"parameterRef\",\n type: \"ResourceParameter\",\n isAttr: true,\n isReference: true\n }],\n superClass: [\"BaseElement\"]\n}, {\n name: \"ResourceAssignmentExpression\",\n properties: [{\n name: \"expression\",\n type: \"Expression\",\n xml: {\n serialize: \"xsi:type\"\n }\n }],\n superClass: [\"BaseElement\"]\n}, {\n name: \"Import\",\n properties: [{\n name: \"importType\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"location\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"namespace\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"Definitions\",\n superClass: [\"BaseElement\"],\n properties: [{\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"targetNamespace\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"expressionLanguage\",\n \"default\": \"http://www.w3.org/1999/XPath\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"typeLanguage\",\n \"default\": \"http://www.w3.org/2001/XMLSchema\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"imports\",\n type: \"Import\",\n isMany: true\n }, {\n name: \"extensions\",\n type: \"Extension\",\n isMany: true\n }, {\n name: \"rootElements\",\n type: \"RootElement\",\n isMany: true\n }, {\n name: \"diagrams\",\n isMany: true,\n type: \"bpmndi:BPMNDiagram\"\n }, {\n name: \"exporter\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"relationships\",\n type: \"Relationship\",\n isMany: true\n }, {\n name: \"exporterVersion\",\n isAttr: true,\n type: \"String\"\n }]\n}];\nvar enumerations$3 = [{\n name: \"ProcessType\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"Public\"\n }, {\n name: \"Private\"\n }]\n}, {\n name: \"GatewayDirection\",\n literalValues: [{\n name: \"Unspecified\"\n }, {\n name: \"Converging\"\n }, {\n name: \"Diverging\"\n }, {\n name: \"Mixed\"\n }]\n}, {\n name: \"EventBasedGatewayType\",\n literalValues: [{\n name: \"Parallel\"\n }, {\n name: \"Exclusive\"\n }]\n}, {\n name: \"RelationshipDirection\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"Forward\"\n }, {\n name: \"Backward\"\n }, {\n name: \"Both\"\n }]\n}, {\n name: \"ItemKind\",\n literalValues: [{\n name: \"Physical\"\n }, {\n name: \"Information\"\n }]\n}, {\n name: \"ChoreographyLoopType\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"Standard\"\n }, {\n name: \"MultiInstanceSequential\"\n }, {\n name: \"MultiInstanceParallel\"\n }]\n}, {\n name: \"AssociationDirection\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"One\"\n }, {\n name: \"Both\"\n }]\n}, {\n name: \"MultiInstanceBehavior\",\n literalValues: [{\n name: \"None\"\n }, {\n name: \"One\"\n }, {\n name: \"All\"\n }, {\n name: \"Complex\"\n }]\n}, {\n name: \"AdHocOrdering\",\n literalValues: [{\n name: \"Parallel\"\n }, {\n name: \"Sequential\"\n }]\n}];\nvar xml$1 = {\n tagAlias: \"lowerCase\",\n typePrefix: \"t\"\n};\nvar BpmnPackage = {\n name: name$5,\n uri: uri$5,\n prefix: prefix$5,\n associations: associations$5,\n types: types$5,\n enumerations: enumerations$3,\n xml: xml$1\n};\nvar name$4 = \"BPMNDI\";\nvar uri$4 = \"http://www.omg.org/spec/BPMN/20100524/DI\";\nvar prefix$4 = \"bpmndi\";\nvar types$4 = [{\n name: \"BPMNDiagram\",\n properties: [{\n name: \"plane\",\n type: \"BPMNPlane\",\n redefines: \"di:Diagram#rootElement\"\n }, {\n name: \"labelStyle\",\n type: \"BPMNLabelStyle\",\n isMany: true\n }],\n superClass: [\"di:Diagram\"]\n}, {\n name: \"BPMNPlane\",\n properties: [{\n name: \"bpmnElement\",\n isAttr: true,\n isReference: true,\n type: \"bpmn:BaseElement\",\n redefines: \"di:DiagramElement#modelElement\"\n }],\n superClass: [\"di:Plane\"]\n}, {\n name: \"BPMNShape\",\n properties: [{\n name: \"bpmnElement\",\n isAttr: true,\n isReference: true,\n type: \"bpmn:BaseElement\",\n redefines: \"di:DiagramElement#modelElement\"\n }, {\n name: \"isHorizontal\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"isExpanded\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"isMarkerVisible\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"label\",\n type: \"BPMNLabel\"\n }, {\n name: \"isMessageVisible\",\n isAttr: true,\n type: \"Boolean\"\n }, {\n name: \"participantBandKind\",\n type: \"ParticipantBandKind\",\n isAttr: true\n }, {\n name: \"choreographyActivityShape\",\n type: \"BPMNShape\",\n isAttr: true,\n isReference: true\n }],\n superClass: [\"di:LabeledShape\"]\n}, {\n name: \"BPMNEdge\",\n properties: [{\n name: \"label\",\n type: \"BPMNLabel\"\n }, {\n name: \"bpmnElement\",\n isAttr: true,\n isReference: true,\n type: \"bpmn:BaseElement\",\n redefines: \"di:DiagramElement#modelElement\"\n }, {\n name: \"sourceElement\",\n isAttr: true,\n isReference: true,\n type: \"di:DiagramElement\",\n redefines: \"di:Edge#source\"\n }, {\n name: \"targetElement\",\n isAttr: true,\n isReference: true,\n type: \"di:DiagramElement\",\n redefines: \"di:Edge#target\"\n }, {\n name: \"messageVisibleKind\",\n type: \"MessageVisibleKind\",\n isAttr: true,\n \"default\": \"initiating\"\n }],\n superClass: [\"di:LabeledEdge\"]\n}, {\n name: \"BPMNLabel\",\n properties: [{\n name: \"labelStyle\",\n type: \"BPMNLabelStyle\",\n isAttr: true,\n isReference: true,\n redefines: \"di:DiagramElement#style\"\n }],\n superClass: [\"di:Label\"]\n}, {\n name: \"BPMNLabelStyle\",\n properties: [{\n name: \"font\",\n type: \"dc:Font\"\n }],\n superClass: [\"di:Style\"]\n}];\nvar enumerations$2 = [{\n name: \"ParticipantBandKind\",\n literalValues: [{\n name: \"top_initiating\"\n }, {\n name: \"middle_initiating\"\n }, {\n name: \"bottom_initiating\"\n }, {\n name: \"top_non_initiating\"\n }, {\n name: \"middle_non_initiating\"\n }, {\n name: \"bottom_non_initiating\"\n }]\n}, {\n name: \"MessageVisibleKind\",\n literalValues: [{\n name: \"initiating\"\n }, {\n name: \"non_initiating\"\n }]\n}];\nvar associations$4 = [];\nvar BpmnDiPackage = {\n name: name$4,\n uri: uri$4,\n prefix: prefix$4,\n types: types$4,\n enumerations: enumerations$2,\n associations: associations$4\n};\nvar name$3 = \"DC\";\nvar uri$3 = \"http://www.omg.org/spec/DD/20100524/DC\";\nvar prefix$3 = \"dc\";\nvar types$3 = [{\n name: \"Boolean\"\n}, {\n name: \"Integer\"\n}, {\n name: \"Real\"\n}, {\n name: \"String\"\n}, {\n name: \"Font\",\n properties: [{\n name: \"name\",\n type: \"String\",\n isAttr: true\n }, {\n name: \"size\",\n type: \"Real\",\n isAttr: true\n }, {\n name: \"isBold\",\n type: \"Boolean\",\n isAttr: true\n }, {\n name: \"isItalic\",\n type: \"Boolean\",\n isAttr: true\n }, {\n name: \"isUnderline\",\n type: \"Boolean\",\n isAttr: true\n }, {\n name: \"isStrikeThrough\",\n type: \"Boolean\",\n isAttr: true\n }]\n}, {\n name: \"Point\",\n properties: [{\n name: \"x\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }, {\n name: \"y\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }]\n}, {\n name: \"Bounds\",\n properties: [{\n name: \"x\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }, {\n name: \"y\",\n type: \"Real\",\n \"default\": \"0\",\n isAttr: true\n }, {\n name: \"width\",\n type: \"Real\",\n isAttr: true\n }, {\n name: \"height\",\n type: \"Real\",\n isAttr: true\n }]\n}];\nvar associations$3 = [];\nvar DcPackage = {\n name: name$3,\n uri: uri$3,\n prefix: prefix$3,\n types: types$3,\n associations: associations$3\n};\nvar name$2 = \"DI\";\nvar uri$2 = \"http://www.omg.org/spec/DD/20100524/DI\";\nvar prefix$2 = \"di\";\nvar types$2 = [{\n name: \"DiagramElement\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n isId: true,\n type: \"String\"\n }, {\n name: \"extension\",\n type: \"Extension\"\n }, {\n name: \"owningDiagram\",\n type: \"Diagram\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"owningElement\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"modelElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true,\n type: \"Element\"\n }, {\n name: \"style\",\n type: \"Style\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"ownedElement\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"Node\",\n isAbstract: true,\n superClass: [\"DiagramElement\"]\n}, {\n name: \"Edge\",\n isAbstract: true,\n superClass: [\"DiagramElement\"],\n properties: [{\n name: \"source\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"target\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true,\n isReference: true\n }, {\n name: \"waypoint\",\n isUnique: false,\n isMany: true,\n type: \"dc:Point\",\n xml: {\n serialize: \"xsi:type\"\n }\n }]\n}, {\n name: \"Diagram\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n isId: true,\n type: \"String\"\n }, {\n name: \"rootElement\",\n type: \"DiagramElement\",\n isReadOnly: true,\n isVirtual: true\n }, {\n name: \"name\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"documentation\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"resolution\",\n isAttr: true,\n type: \"Real\"\n }, {\n name: \"ownedStyle\",\n type: \"Style\",\n isReadOnly: true,\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"Shape\",\n isAbstract: true,\n superClass: [\"Node\"],\n properties: [{\n name: \"bounds\",\n type: \"dc:Bounds\"\n }]\n}, {\n name: \"Plane\",\n isAbstract: true,\n superClass: [\"Node\"],\n properties: [{\n name: \"planeElement\",\n type: \"DiagramElement\",\n subsettedProperty: \"DiagramElement-ownedElement\",\n isMany: true\n }]\n}, {\n name: \"LabeledEdge\",\n isAbstract: true,\n superClass: [\"Edge\"],\n properties: [{\n name: \"ownedLabel\",\n type: \"Label\",\n isReadOnly: true,\n subsettedProperty: \"DiagramElement-ownedElement\",\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"LabeledShape\",\n isAbstract: true,\n superClass: [\"Shape\"],\n properties: [{\n name: \"ownedLabel\",\n type: \"Label\",\n isReadOnly: true,\n subsettedProperty: \"DiagramElement-ownedElement\",\n isMany: true,\n isVirtual: true\n }]\n}, {\n name: \"Label\",\n isAbstract: true,\n superClass: [\"Node\"],\n properties: [{\n name: \"bounds\",\n type: \"dc:Bounds\"\n }]\n}, {\n name: \"Style\",\n isAbstract: true,\n properties: [{\n name: \"id\",\n isAttr: true,\n isId: true,\n type: \"String\"\n }]\n}, {\n name: \"Extension\",\n properties: [{\n name: \"values\",\n isMany: true,\n type: \"Element\"\n }]\n}];\nvar associations$2 = [];\nvar xml$2 = {\n tagAlias: \"lowerCase\"\n};\nvar DiPackage = {\n name: name$2,\n uri: uri$2,\n prefix: prefix$2,\n types: types$2,\n associations: associations$2,\n xml: xml$2\n};\nvar name$1 = \"bpmn.io colors for BPMN\";\nvar uri$1 = \"http://bpmn.io/schema/bpmn/biocolor/1.0\";\nvar prefix$1 = \"bioc\";\nvar types$1 = [{\n name: \"ColoredShape\",\n \"extends\": [\"bpmndi:BPMNShape\"],\n properties: [{\n name: \"stroke\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"fill\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ColoredEdge\",\n \"extends\": [\"bpmndi:BPMNEdge\"],\n properties: [{\n name: \"stroke\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"fill\",\n isAttr: true,\n type: \"String\"\n }]\n}];\nvar enumerations$1 = [];\nvar associations$1 = [];\nvar BiocPackage = {\n name: name$1,\n uri: uri$1,\n prefix: prefix$1,\n types: types$1,\n enumerations: enumerations$1,\n associations: associations$1\n};\nvar name$6 = \"BPMN in Color\";\nvar uri$6 = \"http://www.omg.org/spec/BPMN/non-normative/color/1.0\";\nvar prefix$6 = \"color\";\nvar types$6 = [{\n name: \"ColoredLabel\",\n \"extends\": [\"bpmndi:BPMNLabel\"],\n properties: [{\n name: \"color\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ColoredShape\",\n \"extends\": [\"bpmndi:BPMNShape\"],\n properties: [{\n name: \"background-color\",\n isAttr: true,\n type: \"String\"\n }, {\n name: \"border-color\",\n isAttr: true,\n type: \"String\"\n }]\n}, {\n name: \"ColoredEdge\",\n \"extends\": [\"bpmndi:BPMNEdge\"],\n properties: [{\n name: \"border-color\",\n isAttr: true,\n type: \"String\"\n }]\n}];\nvar enumerations = [];\nvar associations$6 = [];\nvar BpmnInColorPackage = {\n name: name$6,\n uri: uri$6,\n prefix: prefix$6,\n types: types$6,\n enumerations: enumerations,\n associations: associations$6\n};\nconst packages = {\n bpmn: BpmnPackage,\n bpmndi: BpmnDiPackage,\n dc: DcPackage,\n di: DiPackage,\n bioc: BiocPackage,\n color: BpmnInColorPackage\n};\nfunction SimpleBpmnModdle(additionalPackages, options) {\n const pks = (0,min_dash__WEBPACK_IMPORTED_MODULE_13__.assign)({}, packages, additionalPackages);\n return new BpmnModdle(pks, options);\n}\n\nvar name = \"zeebe\";\nvar prefix = \"zeebe\";\nvar uri = \"http://camunda.org/schema/zeebe/1.0\";\nvar xml = {\n\ttagAlias: \"lowerCase\"\n};\nvar associations = [\n];\nvar types = [\n\t{\n\t\tname: \"ZeebeServiceTask\",\n\t\t\"extends\": [\n\t\t\t\"bpmn:ServiceTask\",\n\t\t\t\"bpmn:BusinessRuleTask\",\n\t\t\t\"bpmn:ScriptTask\",\n\t\t\t\"bpmn:SendTask\",\n\t\t\t\"bpmn:EndEvent\",\n\t\t\t\"bpmn:IntermediateThrowEvent\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"retryCounter\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"IoMapping\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"ioMapping\",\n\t\t\t\ttype: \"IoMapping\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputParameters\",\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"Input\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputParameters\",\n\t\t\t\tisMany: true,\n\t\t\t\ttype: \"Output\"\n\t\t\t}\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\",\n\t\t\t\t\"bpmn:Event\",\n\t\t\t\t\"bpmn:ReceiveTask\",\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:SubProcess\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tname: \"InputOutputParameter\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"target\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Subscription\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"correlationKey\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Input\",\n\t\tsuperClass: [\n\t\t\t\"InputOutputParameter\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\",\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:SubProcess\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tname: \"Output\",\n\t\tsuperClass: [\n\t\t\t\"InputOutputParameter\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\",\n\t\t\t\t\"bpmn:Event\",\n\t\t\t\t\"bpmn:ReceiveTask\",\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:SubProcess\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t}\n\t},\n\t{\n\t\tname: \"TaskHeaders\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"values\",\n\t\t\t\ttype: \"Header\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Header\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"value\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TaskDefinition\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"zeebe:ZeebeServiceTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"type\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"retries\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"LoopCharacteristics\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"zeebe:ZeebeServiceTask\",\n\t\t\t\t\"bpmn:ReceiveTask\",\n\t\t\t\t\"bpmn:SubProcess\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"inputCollection\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputElement\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputCollection\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputElement\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CalledElement\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:CallActivity\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"processId\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"processIdExpression\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"propagateAllChildVariables\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"propagateAllParentVariables\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\t\"default\": true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"UserTaskForm\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:Process\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"id\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"body\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisBody: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"FormDefinition\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"formKey\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"formId\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"CalledDecision\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:BusinessRuleTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"decisionId\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resultVariable\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"AssignmentDefinition\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"assignee\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"candidateGroups\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"candidateUsers\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TaskSchedule\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:UserTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"dueDate\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"followUpDate\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Properties\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"properties\",\n\t\t\t\ttype: \"Property\",\n\t\t\t\tisMany: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Property\",\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"value\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TemplateSupported\",\n\t\tisAbstract: true,\n\t\t\"extends\": [\n\t\t\t\"bpmn:Collaboration\",\n\t\t\t\"bpmn:Process\",\n\t\t\t\"bpmn:FlowElement\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"modelerTemplate\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"modelerTemplateVersion\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"Integer\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"modelerTemplateIcon\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"TemplatedRootElement\",\n\t\tisAbstract: true,\n\t\t\"extends\": [\n\t\t\t\"bpmn:Error\",\n\t\t\t\"bpmn:Escalation\",\n\t\t\t\"bpmn:Message\",\n\t\t\t\"bpmn:Signal\"\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"modelerTemplate\",\n\t\t\t\tisAttr: true,\n\t\t\t\ttype: \"String\"\n\t\t\t}\n\t\t]\n\t},\n\t{\n\t\tname: \"Script\",\n\t\tsuperClass: [\n\t\t\t\"Element\"\n\t\t],\n\t\tmeta: {\n\t\t\tallowedIn: [\n\t\t\t\t\"bpmn:ScriptTask\"\n\t\t\t]\n\t\t},\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tname: \"expression\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"resultVariable\",\n\t\t\t\ttype: \"String\",\n\t\t\t\tisAttr: true\n\t\t\t}\n\t\t]\n\t}\n];\nvar zeebeModdle = {\n\tname: name,\n\tprefix: prefix,\n\turi: uri,\n\txml: xml,\n\tassociations: associations,\n\ttypes: types\n};\n\n/**\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information regarding copyright\n * ownership.\n *\n * Camunda licenses this file to you under the MIT; you may not use this file\n * except in compliance with the MIT License.\n */\n\nconst elementTemplateLintRule = ({\n templates = []\n}) => {\n const moddle = new SimpleBpmnModdle({\n zeebe: zeebeModdle\n });\n const validator = new Validator(moddle).addAll(templates);\n const validTemplates = validator.getValidTemplates();\n\n // We use the ElementTemplates Module without the required bpmn-js modules\n // As we only use it to facilitate template ID and version lookup,\n // access to commandstack etc. is not required\n const elementTemplates = new ElementTemplates();\n elementTemplates.set(validTemplates);\n function check(node, reporter) {\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_11__.is)(node, 'bpmn:FlowElement')) {\n return;\n }\n let template = elementTemplates.get(node);\n const templateId = elementTemplates._getTemplateId(node);\n\n // Handle missing template\n if (templateId && !template) {\n reporter.report(node.id, 'Linked element template not found', {\n name: node.name\n });\n return;\n }\n if (!template) {\n return;\n }\n template = applyConditions(node, template);\n\n // Check attributes\n template.properties.forEach(property => {\n const value = getPropertyValue(node, property);\n const error = validateProperty(value, property);\n if (!error) {\n return;\n }\n reporter.report(node.id, error, {\n propertiesPanel: {\n entryIds: [getEntryId(property, template)]\n },\n name: node.name\n });\n });\n }\n return {\n check\n };\n};\nconst ElementTemplateLinterPlugin = function (templates) {\n return {\n config: {\n rules: {\n 'element-templates/validate': ['error', {\n templates\n }]\n }\n },\n resolver: new (bpmnlint_lib_resolver_static_resolver__WEBPACK_IMPORTED_MODULE_10___default())({\n 'rule:bpmnlint-plugin-element-templates/validate': elementTemplateLintRule\n })\n };\n};\n\n// helpers //////////////////////\n\nfunction getEntryId(property, template) {\n const index = template.properties.filter(p => p.group === property.group).indexOf(property);\n const path = ['custom-entry', template.id];\n if (property.group) {\n path.push(property.group);\n }\n path.push(index);\n return path.join('-');\n}\n\n\n//# sourceMappingURL=index.esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1lbGVtZW50LXRlbXBsYXRlcy9kaXN0L2luZGV4LmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEwRTtBQUNoRDtBQUN5TTtBQUN4TDtBQUMwSDtBQUMvSTtBQUM0RDtBQUNKO0FBQ2xCO0FBQ2U7QUFDZjtBQUNtYTtBQUMzYjtBQUMyRDtBQUNaO0FBQ2U7QUFDQztBQUNqQjtBQUNsRDtBQUNtQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDhCQUE4QjtBQUN6QyxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLGVBQWU7QUFDM0I7QUFDQTtBQUNBLHlCQUF5Qiw4RUFBaUI7QUFDMUM7QUFDQSxNQUFNLCtEQUFFO0FBQ1I7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrREFBRTtBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQSx3REFBd0QsYUFBYTtBQUNyRTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsc0RBQWE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVB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QTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywrQ0FBSTtBQUNiO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGtGQUFrQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbURBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSTtBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNB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QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVMsaURBQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxpQkFBaUI7QUFDNUIsV0FBVyxRQUFRLGNBQWM7QUFDakMsV0FBVyxRQUFRLFlBQVksR0FBRztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0Isc0VBQWU7QUFDL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtB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QUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLCtDQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFdBQVcsK0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsV0FBVywrQ0FBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDhFQUFpQjtBQUMxQztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0EsMERBQTBELGFBQWE7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNEQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRywwQ0FBMEM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsa0RBQU87QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVEsa0RBQU87QUFDZjtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtREFBUTtBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksb0RBQVM7QUFDckI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsa0RBQU87QUFDVDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrREFBTztBQUNYO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9C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SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsaURBQU0sR0FBRztBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0RBQUU7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLCtFQUFjO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVpVTtBQUNqVSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1uLWpzLWVsZW1lbnQtdGVtcGxhdGVzL2Rpc3QvaW5kZXguZXNtLmpzP2YxOWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QnVzaW5lc3NPYmplY3QsIGlzLCBpc0FueSB9IGZyb20gJ2JwbW4tanMvbGliL3V0aWwvTW9kZWxVdGlsJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCBhcyBpc1VuZGVmaW5lZCQxLCBpc1N0cmluZywgZmluZCwgaXNOaWwsIGZsYXR0ZW4sIHZhbHVlcywgaXNPYmplY3QsIGZpbHRlciwgaXNBcnJheSwgaXNGdW5jdGlvbiwgd2l0aG91dCwgZm9yRWFjaCwgZ3JvdXBCeSwgaXNOdW1iZXIsIHNvcnRCeSwga2V5cywgYXNzaWduLCBiaW5kLCBzZXQsIHBpY2ssIGZpbmRJbmRleCwgaGFzIH0gZnJvbSAnbWluLWRhc2gnO1xuaW1wb3J0IHNlbXZlckNvbXBhcmUgZnJvbSAnc2VtdmVyLWNvbXBhcmUnO1xuaW1wb3J0IHsgZ2V0U2NoZW1hVmVyc2lvbiBhcyBnZXRTY2hlbWFWZXJzaW9uJDEsIHZhbGlkYXRlLCBnZXRaZWViZVNjaGVtYVZlcnNpb24sIGdldFplZWJlU2NoZW1hUGFja2FnZSwgdmFsaWRhdGVaZWViZSB9IGZyb20gJ0BicG1uLWlvL2VsZW1lbnQtdGVtcGxhdGVzLXZhbGlkYXRvcic7XG5pbXBvcnQgSWRzIGZyb20gJ2lkcyc7XG5pbXBvcnQgeyBnZXRMYWJlbCwgc2V0TGFiZWwgfSBmcm9tICdicG1uLWpzL2xpYi9mZWF0dXJlcy9sYWJlbC1lZGl0aW5nL0xhYmVsVXRpbCc7XG5pbXBvcnQgeyBpc1BsYW5lLCBnZXRTaGFwZUlkRnJvbVBsYW5lIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9EcmlsbGRvd25VdGlsJztcbmltcG9ydCB7IGlzRXZlbnRTdWJQcm9jZXNzIH0gZnJvbSAnYnBtbi1qcy9saWIvdXRpbC9EaVV0aWwnO1xuaW1wb3J0IENvbW1hbmRJbnRlcmNlcHRvciBmcm9tICdkaWFncmFtLWpzL2xpYi9jb21tYW5kL0NvbW1hbmRJbnRlcmNlcHRvcic7XG5pbXBvcnQgdHJhbnNsYXRlTW9kdWxlIGZyb20gJ2RpYWdyYW0tanMvbGliL2kxOG4vdHJhbnNsYXRlJztcbmltcG9ydCB7IHVzZUxheW91dFN0YXRlLCBIZWFkZXJCdXR0b24sIEFycm93SWNvbiwgQ3JlYXRlSWNvbiwgRHJvcGRvd25CdXR0b24sIFRleHRBcmVhRW50cnksIFRleHRGaWVsZEVudHJ5LCBGZWVsRW50cnkgYXMgRmVlbEVudHJ5JDEsIEZlZWxUZXh0QXJlYUVudHJ5IGFzIEZlZWxUZXh0QXJlYUVudHJ5JDEsIFNlbGVjdEVudHJ5LCBGZWVsQ2hlY2tib3hFbnRyeSwgQ2hlY2tib3hFbnRyeSwgRmVlbE51bWJlckVudHJ5LCBOdW1iZXJGaWVsZEVudHJ5LCBHcm91cCwgaXNGZWVsRW50cnlFZGl0ZWQsIGlzTnVtYmVyRmllbGRFbnRyeUVkaXRlZCwgaXNDaGVja2JveEVudHJ5RWRpdGVkLCBpc1NlbGVjdEVudHJ5RWRpdGVkLCBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLCBpc1RleHRBcmVhRW50cnlFZGl0ZWQsIHVzZVByZXZpb3VzLCBUb2dnbGVTd2l0Y2hFbnRyeSwgTGlzdEdyb3VwIH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZVNlcnZpY2UsIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlck1vZHVsZSB9IGZyb20gJ2JwbW4tanMtcHJvcGVydGllcy1wYW5lbCc7XG5pbXBvcnQgeyBqc3hzLCBqc3gsIEZyYWdtZW50IH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCBhcyBjcmVhdGVFbGVtZW50JDEsIGgsIENvbXBvbmVudCB9IGZyb20gJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwvcHJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAnQGJwbW4taW8vcHJvcGVydGllcy1wYW5lbC9wcmVhY3QvaG9va3MnO1xuaW1wb3J0IHsgZ2V0VmFyaWFibGVzRm9yRWxlbWVudCB9IGZyb20gJ0BicG1uLWlvL2V4dHJhY3QtcHJvY2Vzcy12YXJpYWJsZXMvemVlYmUnO1xuaW1wb3J0IHsgcXVlcnkgfSBmcm9tICdtaW4tZG9tJztcbmltcG9ydCBTdGF0aWNSZXNvbHZlciBmcm9tICdicG1ubGludC9saWIvcmVzb2x2ZXIvc3RhdGljLXJlc29sdmVyJztcblxuLyoqXG4gKiBUaGUgQlBNTiAyLjAgZXh0ZW5zaW9uIGF0dHJpYnV0ZSBuYW1lIHVuZGVyXG4gKiB3aGljaCB0aGUgZWxlbWVudCB0ZW1wbGF0ZSBJRCBpcyBzdG9yZWQuXG4gKlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgVEVNUExBVEVfSURfQVRUUiQxID0gJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc7XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgdmVyc2lvbiBpcyBzdG9yZWQuXG4gKlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgVEVNUExBVEVfVkVSU0lPTl9BVFRSJDEgPSAnemVlYmU6bW9kZWxlclRlbXBsYXRlVmVyc2lvbic7XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgaWNvbiBpcyBzdG9yZWQuXG4gKlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgVEVNUExBVEVfSUNPTl9BVFRSID0gJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZUljb24nO1xuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBpZCBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJZCQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9JRF9BVFRSJDEpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRlbXBsYXRlIHZlcnNpb24gZm9yIGEgZ2l2ZW4gZGlhZ3JhbSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlVmVyc2lvbiQxKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9WRVJTSU9OX0FUVFIkMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGVtcGxhdGUgaWNvbiBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJY29uKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9JQ09OX0FUVFIpO1xuICB9XG59XG5cbi8qKlxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXG4gKiBCUE1OIGVsZW1lbnQsIGRpYWdyYW0gZWxlbWVudCBvciBFeHRlbnNpb25FbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRFeHRlbnNpb24kMShlbGVtZW50LCB0eXBlKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGxldCBleHRlbnNpb25FbGVtZW50cztcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdDtcbiAgfSBlbHNlIHtcbiAgICBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgfVxuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbmQodmFsdWUgPT4ge1xuICAgIHJldHVybiBpcyh2YWx1ZSwgdHlwZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZFplZWJlUHJvcGVydHkoemVlYmVQcm9wZXJ0aWVzLCBiaW5kaW5nKSB7XG4gIHJldHVybiB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykuZmluZCh2YWx1ZSA9PiB7XG4gICAgcmV0dXJuIHZhbHVlLm5hbWUgPT09IGJpbmRpbmcubmFtZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaW5kSW5wdXRQYXJhbWV0ZXIkMShpb01hcHBpbmcsIGJpbmRpbmcpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpO1xuICByZXR1cm4gcGFyYW1ldGVycy5maW5kKHBhcmFtZXRlciA9PiB7XG4gICAgcmV0dXJuIHBhcmFtZXRlci50YXJnZXQgPT09IGJpbmRpbmcubmFtZTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaW5kT3V0cHV0UGFyYW1ldGVyJDEoaW9NYXBwaW5nLCBiaW5kaW5nKSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBpb01hcHBpbmcuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyk7XG4gIHJldHVybiBwYXJhbWV0ZXJzLmZpbmQocGFyYW1ldGVyID0+IHtcbiAgICByZXR1cm4gcGFyYW1ldGVyLnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZFRhc2tIZWFkZXIodGFza0hlYWRlcnMsIGJpbmRpbmcpIHtcbiAgY29uc3QgaGVhZGVycyA9IHRhc2tIZWFkZXJzLmdldCgndmFsdWVzJyk7XG4gIHJldHVybiBoZWFkZXJzLmZpbmQoaGVhZGVyID0+IHtcbiAgICByZXR1cm4gaGVhZGVyLmtleSA9PT0gYmluZGluZy5rZXk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZE1lc3NhZ2UoYnVzaW5lc3NPYmplY3QpIHtcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgY29uc3QgZXZlbnREZWZpbml0aW9ucyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpO1xuICAgIGlmICghZXZlbnREZWZpbml0aW9ucyB8fCAhZXZlbnREZWZpbml0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYnVzaW5lc3NPYmplY3QgPSBldmVudERlZmluaXRpb25zWzBdO1xuICB9XG4gIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KSB7XG4gIGlmIChwcm9wZXJ0eS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5LnZhbHVlO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5nZW5lcmF0ZWRWYWx1ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGVcbiAgICB9ID0gcHJvcGVydHkuZ2VuZXJhdGVkVmFsdWU7XG4gICAgaWYgKHR5cGUgPT09ICd1dWlkJykge1xuICAgICAgcmV0dXJuIHY0KCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIEJQTU4gMi4wIGV4dGVuc2lvbiBhdHRyaWJ1dGUgbmFtZSB1bmRlclxuICogd2hpY2ggdGhlIGVsZW1lbnQgdGVtcGxhdGUgSUQgaXMgc3RvcmVkLlxuICpcbiAqIEB0eXBlIHtTdHJpbmd9XG4gKi9cbmNvbnN0IFRFTVBMQVRFX0lEX0FUVFIgPSAnY2FtdW5kYTptb2RlbGVyVGVtcGxhdGUnO1xuXG4vKipcbiAqIFRoZSBCUE1OIDIuMCBleHRlbnNpb24gYXR0cmlidXRlIG5hbWUgdW5kZXJcbiAqIHdoaWNoIHRoZSBlbGVtZW50IHRlbXBsYXRlIHZlcnNpb24gaXMgc3RvcmVkLlxuICpcbiAqIEB0eXBlIHtTdHJpbmd9XG4gKi9cbmNvbnN0IFRFTVBMQVRFX1ZFUlNJT05fQVRUUiA9ICdjYW11bmRhOm1vZGVsZXJUZW1wbGF0ZVZlcnNpb24nO1xuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBpZCBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJZChlbGVtZW50KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChidXNpbmVzc09iamVjdCkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoVEVNUExBVEVfSURfQVRUUik7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGVtcGxhdGUgdmVyc2lvbiBmb3IgYSBnaXZlbiBkaWFncmFtIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGVWZXJzaW9uKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChURU1QTEFURV9WRVJTSU9OX0FUVFIpO1xuICB9XG59XG5cbi8qKlxuICogRmluZCBleHRlbnNpb24gd2l0aCBnaXZlbiB0eXBlIGluXG4gKiBCUE1OIGVsZW1lbnQsIGRpYWdyYW0gZWxlbWVudCBvciBFeHRlbnNpb25FbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fSB0aGUgZXh0ZW5zaW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRFeHRlbnNpb24oZWxlbWVudCwgdHlwZSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBsZXQgZXh0ZW5zaW9uRWxlbWVudHM7XG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnKSkge1xuICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3Q7XG4gIH0gZWxzZSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIH1cbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbmQodmFsdWUgPT4ge1xuICAgIHJldHVybiBpcyh2YWx1ZSwgdHlwZSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgdHlwZXMpIHtcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBnZXRFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maWx0ZXIodmFsdWUgPT4ge1xuICAgIHJldHVybiBpc0FueSh2YWx1ZSwgdHlwZXMpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRDYW11bmRhSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBsZXQgbWF0Y2hlcjtcbiAgaWYgKHR5cGUgPT09ICdjYW11bmRhOmluJykge1xuICAgIG1hdGNoZXIgPSBlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiBpcyhlbGVtZW50LCAnY2FtdW5kYTpJbicpICYmIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZyk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY2FtdW5kYTpvdXQnKSB7XG4gICAgbWF0Y2hlciA9IGVsZW1lbnQgPT4ge1xuICAgICAgcmV0dXJuIGlzKGVsZW1lbnQsICdjYW11bmRhOk91dCcpICYmIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZyk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleScpIHtcbiAgICBtYXRjaGVyID0gZWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gaXMoZWxlbWVudCwgJ2NhbXVuZGE6SW4nKSAmJiAnYnVzaW5lc3NLZXknIGluIGVsZW1lbnQ7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5maW5kKG1hdGNoZXIpO1xufVxuZnVuY3Rpb24gZmluZENhbXVuZGFQcm9wZXJ0eShjYW11bmRhUHJvcGVydGllcywgYmluZGluZykge1xuICByZXR1cm4gY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKS5maW5kKHZhbHVlID0+IHtcbiAgICByZXR1cm4gdmFsdWUubmFtZSA9PT0gYmluZGluZy5uYW1lO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZykge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gaW5wdXRPdXRwdXQuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKTtcbiAgcmV0dXJuIHBhcmFtZXRlcnMuZmluZChwYXJhbWV0ZXIgPT4ge1xuICAgIHJldHVybiBwYXJhbWV0ZXIubmFtZSA9PT0gYmluZGluZy5uYW1lO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IGlucHV0T3V0cHV0LmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xuICByZXR1cm4gcGFyYW1ldGVycy5maW5kKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZVxuICAgIH0gPSBwYXJhbWV0ZXI7XG4gICAgaWYgKCFiaW5kaW5nLnNjcmlwdEZvcm1hdCkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSBiaW5kaW5nLnNvdXJjZTtcbiAgICB9XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHBhcmFtZXRlci5nZXQoJ2NhbXVuZGE6ZGVmaW5pdGlvbicpO1xuICAgIGlmICghZGVmaW5pdGlvbiB8fCBiaW5kaW5nLnNjcmlwdEZvcm1hdCAhPT0gZGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6c2NyaXB0Rm9ybWF0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb24uZ2V0KCdjYW11bmRhOnZhbHVlJykgPT09IGJpbmRpbmcuc291cmNlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXJyb3JSZWYpIHtcbiAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb25zID0gZmluZEV4dGVuc2lvbnMoZWxlbWVudCwgWydjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uJ10pO1xuICBsZXQgZXJyb3I7XG5cbiAgLy8gZXJyb3IgSUQgaGFzIHRvIHN0YXJ0IHdpdGggPEVycm9yXyR7IGVycm9yUmVmIH1fPlxuICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb25zLmZpbmQoZGVmaW5pdGlvbiA9PiB7XG4gICAgZXJyb3IgPSBkZWZpbml0aW9uLmdldCgnYnBtbjplcnJvclJlZicpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yLmdldCgnYnBtbjppZCcpLnN0YXJ0c1dpdGgoYEVycm9yXyR7ZXJyb3JSZWZ9YCk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW5PdXQoZWxlbWVudCwgYmluZGluZykge1xuICBpZiAoYmluZGluZy50eXBlID09PSAnY2FtdW5kYTppbicpIHtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHRhcmdldCBhdHRyaWJ1dGVcbiAgICBpZiAoYmluZGluZy50YXJnZXQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnRhcmdldCA9PT0gYmluZGluZy50YXJnZXQ7XG4gICAgfVxuICB9XG4gIGlmIChiaW5kaW5nLnR5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHNvdXJjZSAvIHNvdXJjZUV4cHJlc3Npb25cbiAgICBpZiAoYmluZGluZy5zb3VyY2UpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZSA9PT0gYmluZGluZy5zb3VyY2U7XG4gICAgfVxuICAgIGlmIChiaW5kaW5nLnNvdXJjZUV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNvdXJjZUV4cHJlc3Npb24gPT09IGJpbmRpbmcuc291cmNlRXhwcmVzc2lvbjtcbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGJhc2VkIHZhcmlhYmxlcyAvIGxvY2FsIGNvbWJpbmF0aW9uXG4gIGlmIChiaW5kaW5nLnZhcmlhYmxlcykge1xuICAgIHJldHVybiBlbGVtZW50LnZhcmlhYmxlcyA9PT0gJ2FsbCcgJiYgKGJpbmRpbmcudmFyaWFibGVzICE9PSAnbG9jYWwnIHx8IGVsZW1lbnQubG9jYWwpO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0cnkgZm9yIGVsZW1lbnQgdGVtcGxhdGVzLlxuICovXG5sZXQgRWxlbWVudFRlbXBsYXRlcyQxID0gY2xhc3MgRWxlbWVudFRlbXBsYXRlcyB7XG4gIGNvbnN0cnVjdG9yKGNvbW1hbmRTdGFjaywgZXZlbnRCdXMsIG1vZGVsaW5nLCBpbmplY3Rvcikge1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGVtcGxhdGUgd2l0aCBnaXZlbiBJRCBhbmQgb3B0aW9uYWwgdmVyc2lvbiBvciBmb3IgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IGlkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmVyc2lvbl1cbiAgICpcbiAgICogQHJldHVybiB7RWxlbWVudFRlbXBsYXRlfVxuICAgKi9cbiAgZ2V0KGlkLCB2ZXJzaW9uKSB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5fdGVtcGxhdGVzO1xuICAgIGxldCBlbGVtZW50O1xuICAgIGlmIChpc1VuZGVmaW5lZCQxKGlkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhpZCkpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZCQxKHZlcnNpb24pKSB7XG4gICAgICAgIHZlcnNpb24gPSAnXyc7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVzW2lkXSAmJiB0ZW1wbGF0ZXNbaWRdW3ZlcnNpb25dKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXNbaWRdW3ZlcnNpb25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSBpZDtcbiAgICAgIHJldHVybiB0aGlzLmdldCh0aGlzLl9nZXRUZW1wbGF0ZUlkKGVsZW1lbnQpLCB0aGlzLl9nZXRUZW1wbGF0ZVZlcnNpb24oZWxlbWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCB0ZW1wbGF0ZSBmb3IgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtFbGVtZW50VGVtcGxhdGV9XG4gICAqL1xuICBnZXREZWZhdWx0KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmluZCh0aGlzLmdldEFsbChlbGVtZW50KSwgZnVuY3Rpb24gKHRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuaXNEZWZhdWx0O1xuICAgIH0pIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0ZW1wbGF0ZXMgKHdpdGggZ2l2ZW4gSUQgb3IgYXBwbGljYWJsZSB0byBlbGVtZW50KS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtpZF1cbiAgICogQHJldHVybiB7QXJyYXk8RWxlbWVudFRlbXBsYXRlPn1cbiAgICovXG4gIGdldEFsbChpZCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUZW1wbGF0ZVZlcmlvbnMoaWQsIHtcbiAgICAgIGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0ZW1wbGF0ZXMgKHdpdGggZ2l2ZW4gSUQgb3IgYXBwbGljYWJsZSB0byBlbGVtZW50KSB3aXRoIHRoZSBsYXRlc3RcbiAgICogdmVyc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8ZGpzLm1vZGVsLkJhc2V9IFtpZF1cbiAgICogQHBhcmFtIHt7IGRlcHJlY2F0ZWQ/OiBib29sZWFuIH19IFtvcHRpb25zXVxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheTxFbGVtZW50VGVtcGxhdGU+fVxuICAgKi9cbiAgZ2V0TGF0ZXN0KGlkLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VGVtcGxhdGVWZXJpb25zKGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGF0ZXN0OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxFbGVtZW50VGVtcGxhdGU+fSB0ZW1wbGF0ZXNcbiAgICovXG4gIHNldCh0ZW1wbGF0ZXMpIHtcbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSB7fTtcbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRlbXBsYXRlLmlkLFxuICAgICAgICB2ZXJzaW9uID0gaXNVbmRlZmluZWQkMSh0ZW1wbGF0ZS52ZXJzaW9uKSA/ICdfJyA6IHRlbXBsYXRlLnZlcnNpb247XG4gICAgICBpZiAoIXRoaXMuX3RlbXBsYXRlc1tpZF0pIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVzW2lkXSA9IHtcbiAgICAgICAgICBsYXRlc3Q6IHRlbXBsYXRlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLl90ZW1wbGF0ZXNbaWRdW3ZlcnNpb25dID0gdGVtcGxhdGU7XG4gICAgICBjb25zdCBsYXRlc3RWZXJpb25zID0gdGhpcy5fdGVtcGxhdGVzW2lkXS5sYXRlc3QudmVyc2lvbjtcbiAgICAgIGlmIChpc1VuZGVmaW5lZCQxKGxhdGVzdFZlcmlvbnMpIHx8IHRlbXBsYXRlLnZlcnNpb24gPiBsYXRlc3RWZXJpb25zKSB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlc1tpZF0ubGF0ZXN0ID0gdGVtcGxhdGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfG51bGx9IGlkXG4gICAqIEBwYXJhbSB7IHsgbGF0ZXN0PzogYm9vbGVhbiwgZGVwcmVjYXRlZD86IGJvb2xlYW4gfSBbb3B0aW9uc11cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXk8RWxlbWVudFRlbXBsYXRlPn1cbiAgICovXG4gIF9nZXRUZW1wbGF0ZVZlcmlvbnMoaWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGxhdGVzdDogbGF0ZXN0T25seSxcbiAgICAgIGRlcHJlY2F0ZWQ6IGluY2x1ZGVEZXByZWNhdGVkXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5fdGVtcGxhdGVzO1xuICAgIGNvbnN0IGdldFZlcnNpb25zID0gdGVtcGxhdGUgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXRlc3QsXG4gICAgICAgIC4uLnZlcnNpb25zXG4gICAgICB9ID0gdGVtcGxhdGU7XG4gICAgICByZXR1cm4gbGF0ZXN0T25seSA/ICFpbmNsdWRlRGVwcmVjYXRlZCAmJiBsYXRlc3QuZGVwcmVjYXRlZCA/IFtdIDogW2xhdGVzdF0gOiB2YWx1ZXModmVyc2lvbnMpO1xuICAgIH07XG4gICAgaWYgKGlzTmlsKGlkKSkge1xuICAgICAgcmV0dXJuIGZsYXR0ZW4odmFsdWVzKHRlbXBsYXRlcykubWFwKGdldFZlcnNpb25zKSk7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChpZCkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBpZDtcbiAgICAgIHJldHVybiBmaWx0ZXIodGhpcy5fZ2V0VGVtcGxhdGVWZXJpb25zKG51bGwsIG9wdGlvbnMpLCBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIGlzQW55KGVsZW1lbnQsIHRlbXBsYXRlLmFwcGxpZXNUbyk7XG4gICAgICB9KSB8fCBbXTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKGlkKSkge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlc1tpZF0gJiYgZ2V0VmVyc2lvbnModGVtcGxhdGVzW2lkXSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHtzdHJpbmd8ZGpzLm1vZGVsLkJhc2V8dW5kZWZpbmVkfScpO1xuICB9XG4gIF9nZXRUZW1wbGF0ZUlkKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVJZChlbGVtZW50KTtcbiAgfVxuICBfZ2V0VGVtcGxhdGVWZXJzaW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVWZXJzaW9uKGVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGVsZW1lbnQgdGVtcGxhdGUgdG8gYSBnaXZlbiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlfSBuZXdUZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICAgKi9cbiAgYXBwbHlUZW1wbGF0ZShlbGVtZW50LCBuZXdUZW1wbGF0ZSkge1xuICAgIGxldCBhY3Rpb24gPSAnYXBwbHknO1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG5ld1RlbXBsYXRlXG4gICAgfTtcbiAgICBjb25zdCBvbGRUZW1wbGF0ZSA9IHRoaXMuZ2V0KGVsZW1lbnQpO1xuICAgIGlmIChvbGRUZW1wbGF0ZSAmJiAhbmV3VGVtcGxhdGUpIHtcbiAgICAgIGFjdGlvbiA9ICd1bmxpbmsnO1xuICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgZWxlbWVudFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG5ld1RlbXBsYXRlICYmIG9sZFRlbXBsYXRlICYmIG5ld1RlbXBsYXRlLmlkID09PSBvbGRUZW1wbGF0ZS5pZCkge1xuICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGUsXG4gICAgICBvbGRUZW1wbGF0ZVxuICAgIH07XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ3Byb3BlcnRpZXNQYW5lbC5jYW11bmRhLmNoYW5nZVRlbXBsYXRlJywgY29udGV4dCk7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZShgZWxlbWVudFRlbXBsYXRlcy4ke2FjdGlvbn1gLCBwYXlsb2FkKTtcbiAgICByZXR1cm4gY29udGV4dC5lbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0ZW1wbGF0ZSBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICAgKi9cbiAgcmVtb3ZlVGVtcGxhdGUoZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50QnVzID0gdGhpcy5faW5qZWN0b3IuZ2V0KCdldmVudEJ1cycpO1xuICAgIGV2ZW50QnVzLmZpcmUoJ2VsZW1lbnRUZW1wbGF0ZXMucmVtb3ZlJywge1xuICAgICAgZWxlbWVudFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBlbGVtZW50XG4gICAgfTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllc1BhbmVsLnJlbW92ZVRlbXBsYXRlJywgY29udGV4dCk7XG4gICAgcmV0dXJuIGNvbnRleHQubmV3RWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmxpbmsgdGVtcGxhdGUgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybiB7ZGpzLm1vZGVsLkJhc2V9IHRoZSB1cGRhdGVkIGVsZW1lbnRcbiAgICovXG4gIHVubGlua1RlbXBsYXRlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBseVRlbXBsYXRlKGVsZW1lbnQsIG51bGwpO1xuICB9XG59O1xuRWxlbWVudFRlbXBsYXRlcyQxLiRpbmplY3QgPSBbJ2NvbW1hbmRTdGFjaycsICdldmVudEJ1cycsICdtb2RlbGluZycsICdpbmplY3RvciddO1xuXG4vKipcbiAqIFJlZ2lzdHJ5IGZvciBlbGVtZW50IHRlbXBsYXRlcy5cbiAqL1xuY2xhc3MgRWxlbWVudFRlbXBsYXRlcyBleHRlbmRzIEVsZW1lbnRUZW1wbGF0ZXMkMSB7XG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlRWxlbWVudEZhY3RvcnksIGNvbW1hbmRTdGFjaywgZXZlbnRCdXMsIG1vZGVsaW5nLCBpbmplY3Rvcikge1xuICAgIHN1cGVyKGNvbW1hbmRTdGFjaywgZXZlbnRCdXMsIG1vZGVsaW5nLCBpbmplY3Rvcik7XG4gICAgdGhpcy5fdGVtcGxhdGVFbGVtZW50RmFjdG9yeSA9IHRlbXBsYXRlRWxlbWVudEZhY3Rvcnk7XG4gIH1cbiAgX2dldFRlbXBsYXRlSWQoZWxlbWVudCkge1xuICAgIHJldHVybiBnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudCk7XG4gIH1cbiAgX2dldFRlbXBsYXRlVmVyc2lvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldFRlbXBsYXRlVmVyc2lvbiQxKGVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlbGVtZW50IGJhc2VkIG9uIGFuIGVsZW1lbnQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlfSB0ZW1wbGF0ZVxuICAgKiBAcmV0dXJucyB7ZGpzLm1vZGVsLkJhc2V9XG4gICAqL1xuICBjcmVhdGVFbGVtZW50KHRlbXBsYXRlKSB7XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0ZW1wbGF0ZSBpcyBtaXNzaW5nJyk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl90ZW1wbGF0ZUVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh0ZW1wbGF0ZSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgZWxlbWVudCB0ZW1wbGF0ZSB0byBhIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtFbGVtZW50VGVtcGxhdGV9IG5ld1RlbXBsYXRlXG4gICAqXG4gICAqIEByZXR1cm4ge2Rqcy5tb2RlbC5CYXNlfSB0aGUgdXBkYXRlZCBlbGVtZW50XG4gICAqL1xuICBhcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgbGV0IGFjdGlvbiA9ICdhcHBseSc7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGVcbiAgICB9O1xuICAgIGNvbnN0IG9sZFRlbXBsYXRlID0gdGhpcy5nZXQoZWxlbWVudCk7XG4gICAgaWYgKG9sZFRlbXBsYXRlICYmICFuZXdUZW1wbGF0ZSkge1xuICAgICAgYWN0aW9uID0gJ3VubGluayc7XG4gICAgICBwYXlsb2FkID0ge1xuICAgICAgICBlbGVtZW50XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobmV3VGVtcGxhdGUgJiYgb2xkVGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWQgPT09IG9sZFRlbXBsYXRlLmlkKSB7XG4gICAgICBhY3Rpb24gPSAndXBkYXRlJztcbiAgICB9XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBuZXdUZW1wbGF0ZSxcbiAgICAgIG9sZFRlbXBsYXRlXG4gICAgfTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllc1BhbmVsLnplZWJlLmNoYW5nZVRlbXBsYXRlJywgY29udGV4dCk7XG4gICAgdGhpcy5fZXZlbnRCdXMuZmlyZShgZWxlbWVudFRlbXBsYXRlcy4ke2FjdGlvbn1gLCBwYXlsb2FkKTtcbiAgICByZXR1cm4gY29udGV4dC5lbGVtZW50O1xuICB9XG59XG5FbGVtZW50VGVtcGxhdGVzLiRpbmplY3QgPSBbJ3RlbXBsYXRlRWxlbWVudEZhY3RvcnknLCAnY29tbWFuZFN0YWNrJywgJ2V2ZW50QnVzJywgJ21vZGVsaW5nJywgJ2luamVjdG9yJ107XG5cbmNvbnN0IFNVUFBPUlRFRF9TQ0hFTUFfVkVSU0lPTiQxID0gZ2V0U2NoZW1hVmVyc2lvbiQxKCk7XG5jb25zdCBNT1JQSEFCTEVfVFlQRVMgPSBbJ2JwbW46QWN0aXZpdHknLCAnYnBtbjpFdmVudCcsICdicG1uOkdhdGV3YXknXTtcblxuLyoqXG4gKiBBIGVsZW1lbnQgdGVtcGxhdGUgdmFsaWRhdG9yLlxuICovXG5sZXQgVmFsaWRhdG9yJDEgPSBjbGFzcyBWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3Rvcihtb2RkbGUpIHtcbiAgICB0aGlzLl90ZW1wbGF0ZXNCeUlkID0ge307XG4gICAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMgPSBbXTtcbiAgICB0aGlzLl9lcnJvcnMgPSBbXTtcbiAgICB0aGlzLl9tb2RkbGUgPSBtb2RkbGU7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj59IHRlbXBsYXRlc1xuICAgKlxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9XG4gICAqL1xuICBhZGRBbGwodGVtcGxhdGVzKSB7XG4gICAgaWYgKCFpc0FycmF5KHRlbXBsYXRlcykpIHtcbiAgICAgIHRoaXMuX2xvZ0Vycm9yKCd0ZW1wbGF0ZXMgbXVzdCBiZSBbXScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0aGlzLmFkZCwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZ2l2ZW4gZWxlbWVudCB0ZW1wbGF0ZSwgaWYgaXQgaXMgdmFsaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3J9XG4gICAqL1xuICBhZGQodGVtcGxhdGUpIHtcbiAgICBjb25zdCBlcnIgPSB0aGlzLl92YWxpZGF0ZVRlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICBsZXQgaWQsIHZlcnNpb247XG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGlkID0gdGVtcGxhdGUuaWQ7XG4gICAgICB2ZXJzaW9uID0gdGVtcGxhdGUudmVyc2lvbiB8fCAnXyc7XG4gICAgICBpZiAoIXRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdKSB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLl90ZW1wbGF0ZXNCeUlkW2lkXVt2ZXJzaW9uXSA9IHRlbXBsYXRlO1xuICAgICAgdGhpcy5fdmFsaWRUZW1wbGF0ZXMucHVzaCh0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gdmFsaWRhdGlvbiBlcnJvciwgaWYgYW55XG4gICAqL1xuICBfdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuICAgIGxldCBlcnI7XG4gICAgY29uc3QgaWQgPSB0ZW1wbGF0ZS5pZCxcbiAgICAgIHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uIHx8ICdfJyxcbiAgICAgIHNjaGVtYVZlcnNpb24gPSB0ZW1wbGF0ZS4kc2NoZW1hICYmIGdldFNjaGVtYVZlcnNpb24odGVtcGxhdGUuJHNjaGVtYSk7XG5cbiAgICAvLyAoMSkgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzY2hlbWFWZXJzaW9uICYmIHNlbXZlckNvbXBhcmUoU1VQUE9SVEVEX1NDSEVNQV9WRVJTSU9OJDEsIHNjaGVtYVZlcnNpb24pIDwgMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB1bnN1cHBvcnRlZCBlbGVtZW50IHRlbXBsYXRlIHNjaGVtYSB2ZXJzaW9uIDwke3NjaGVtYVZlcnNpb259Pi4gWW91ciBpbnN0YWxsYXRpb24gb25seSBzdXBwb3J0cyB1cCB0byB2ZXJzaW9uIDwke1NVUFBPUlRFRF9TQ0hFTUFfVkVSU0lPTiQxfT4uIFBsZWFzZSB1cGRhdGUgeW91ciBpbnN0YWxsYXRpb25gLCB0ZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gKDIpIHZlcnNpb25pbmdcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVzQnlJZFtpZF0gJiYgdGhpcy5fdGVtcGxhdGVzQnlJZFtpZF1bdmVyc2lvbl0pIHtcbiAgICAgIGlmICh2ZXJzaW9uID09PSAnXycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB0ZW1wbGF0ZSBpZCA8JHtpZH0+IGFscmVhZHkgdXNlZGAsIHRlbXBsYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcihgdGVtcGxhdGUgaWQgPCR7aWR9PiBhbmQgdmVyc2lvbiA8JHt2ZXJzaW9ufT4gYWxyZWFkeSB1c2VkYCwgdGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vICgzKSBlbGVtZW50VHlwZSB2YWxpZGF0aW9uXG4gICAgY29uc3QgZWxlbWVudFR5cGVFcnJvciA9IHRoaXMuX3ZhbGlkYXRlRWxlbWVudFR5cGUodGVtcGxhdGUpO1xuICAgIGlmIChlbGVtZW50VHlwZUVycm9yKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFR5cGVFcnJvcjtcbiAgICB9XG5cbiAgICAvLyAoNCkgSlNPTiBzY2hlbWEgY29tcGxpYW5jZVxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZSh0ZW1wbGF0ZSk7XG4gICAgY29uc3Qge1xuICAgICAgZXJyb3JzLFxuICAgICAgdmFsaWRcbiAgICB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgdGVtcGxhdGUnKTtcbiAgICAgIGZpbHRlcmVkU2NoZW1hRXJyb3JzKGVycm9ycykuZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ0Vycm9yKGVycm9yLm1lc3NhZ2UsIHRlbXBsYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGVsZW1lbnRUeXBlIGZvciBnaXZlbiB0ZW1wbGF0ZSBhbmQgcmV0dXJuIGVycm9yIChpZiBhbnkpLlxuICAgKlxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IHZhbGlkYXRpb24gZXJyb3IsIGlmIGFueVxuICAgKi9cbiAgX3ZhbGlkYXRlRWxlbWVudFR5cGUodGVtcGxhdGUpIHtcbiAgICBpZiAodGVtcGxhdGUuZWxlbWVudFR5cGUgJiYgdGVtcGxhdGUuYXBwbGllc1RvKSB7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRlbXBsYXRlLmVsZW1lbnRUeXBlLnZhbHVlLFxuICAgICAgICBhcHBsaWVzVG8gPSB0ZW1wbGF0ZS5hcHBsaWVzVG87XG5cbiAgICAgIC8vICgzLjEpIHRlbXBsYXRlIGNhbiBiZSBhcHBsaWVkIHRvIGVsZW1lbnRUeXBlXG4gICAgICAvLyBwcmV2ZW50cyBjYXNlcyB3aGVyZSB0aGUgZWxlbWVudFR5cGUgaXMgbm90IHBhcnQgb2YgYXBwbGllc1RvXG4gICAgICBpZiAoIWFwcGxpZXNUby5maW5kKHR5cGUgPT4gdGhpcy5faXNUeXBlKGVsZW1lbnRUeXBlLCB0eXBlKSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB0ZW1wbGF0ZSBkb2VzIG5vdCBhcHBseSB0byByZXF1ZXN0ZWQgZWxlbWVudCB0eXBlIDwke2VsZW1lbnRUeXBlfT5gLCB0ZW1wbGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzLjIpIHRlbXBsYXRlIG9ubHkgYXBwbGllcyB0byBzYW1lIHR5cGUgb2YgZWxlbWVudFxuICAgICAgLy8gcHJldmVudCBlbGVtZW50VGVtcGxhdGVzIHRvIG1vcnBoIGludG8gaW5jb21wYXRpYmxlIHR5cGVzLCBlLmcuIFRhc2sgLT4gU2VxdWVuY2VGbG93XG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZVR5cGUgb2YgYXBwbGllc1RvKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FuTW9ycGgoc291cmNlVHlwZSwgZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGBjYW4gbm90IG1vcnBoIDwke3NvdXJjZVR5cGV9PiBpbnRvIDwke2VsZW1lbnRUeXBlfT5gLCB0ZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZ2l2ZW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgZ2l2ZW4gYmFzZSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZVR5cGVcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuICBfaXNUeXBlKHR5cGUsIGJhc2VUeXBlKSB7XG4gICAgY29uc3QgbW9kZGxlVHlwZSA9IHRoaXMuX21vZGRsZS5nZXRUeXBlKHR5cGUpO1xuICAgIHJldHVybiBtb2RkbGVUeXBlICYmIGJhc2VUeXBlIGluIHRoaXMuX21vZGRsZS5nZXRFbGVtZW50RGVzY3JpcHRvcihtb2RkbGVUeXBlKS5hbGxUeXBlc0J5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiB0eXBlIGNhbiBiZSBtb3JwaGVkIGludG8gYW5vdGhlciB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlVHlwZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdGFyZ2V0VHlwZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIF9jYW5Nb3JwaChzb3VyY2VUeXBlLCB0YXJnZXRUeXBlKSB7XG4gICAgaWYgKHNvdXJjZVR5cGUgPT09IHRhcmdldFR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBiYXNlVHlwZSA9IE1PUlBIQUJMRV9UWVBFUy5maW5kKHR5cGUgPT4gdGhpcy5faXNUeXBlKHNvdXJjZVR5cGUsIHR5cGUpKTtcbiAgICBpZiAoIWJhc2VUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pc1R5cGUodGFyZ2V0VHlwZSwgYmFzZVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZyBhbiBlcnJvciBmb3IgdGhlIGdpdmVuIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7KFN0cmluZ3xFcnJvcil9IGVyclxuICAgKiBAcGFyYW0ge1RlbXBsYXRlRGVzY3JpcHRvcn0gdGVtcGxhdGVcbiAgICpcbiAgICogQHJldHVybiB7RXJyb3J9IGxvZ2dlZCB2YWxpZGF0aW9uIGVycm9yc1xuICAgKi9cbiAgX2xvZ0Vycm9yKGVyciwgdGVtcGxhdGUpIHtcbiAgICBpZiAoaXNTdHJpbmcoZXJyKSkge1xuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH0gPSB0ZW1wbGF0ZTtcbiAgICAgICAgZXJyID0gYHRlbXBsYXRlKGlkOiA8JHtpZH0+LCBuYW1lOiA8JHtuYW1lfT4pOiAke2Vycn1gO1xuICAgICAgfVxuICAgICAgZXJyID0gbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIHRoaXMuX2Vycm9ycy5wdXNoKGVycik7XG4gICAgcmV0dXJuIGVycjtcbiAgfVxuICBnZXRFcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcbiAgfVxuICBnZXRWYWxpZFRlbXBsYXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRUZW1wbGF0ZXM7XG4gIH1cbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vL1xuXG4vKipcbiAqIEV4dHJhY3Qgc2NoZW1hIHZlcnNpb24gZnJvbSBzY2hlbWEgVVJJXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNjaGVtYVVyaSAtIGZvciBleGFtcGxlIGh0dHBzOi8vdW5wa2cuY29tL0BjYW11bmRhL2VsZW1lbnQtdGVtcGxhdGVzLWpzb24tc2NoZW1hQDk5Ljk5Ljk5L3Jlc291cmNlcy9zY2hlbWEuanNvblxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gZm9yIGV4YW1wbGUgJzk5Ljk5Ljk5J1xuICovXG5mdW5jdGlvbiBnZXRTY2hlbWFWZXJzaW9uKHNjaGVtYVVyaSkge1xuICBjb25zdCByZSA9IC9cXGQrXFwuXFxkK1xcLlxcZCsvZztcbiAgY29uc3QgbWF0Y2ggPSBzY2hlbWFVcmkubWF0Y2gocmUpO1xuICByZXR1cm4gbWF0Y2ggPT09IG51bGwgPyB1bmRlZmluZWQgOiBtYXRjaFswXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IG9ubHkgcmVsZXZhbnQgZXJyb3JzIG9mIHRoZSB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqXG4gKiBUaGUgSlNPTiBTY2hlbWEgd2UgdXNlIHVuZGVyIHRoZSBob29kIHByb2R1Y2VzIG1vcmUgZXJyb3JzIHRoYW4gd2UgbmVlZCBmb3IgYVxuICogZGV0ZWN0ZWQgc2NoZW1hIHZpb2xhdGlvbiAoZm9yIGV4YW1wbGUsIHVubWF0Y2hlZCBzdWItc2NoZW1hcywgaWYtdGhlbi1ydWxlcyxcbiAqIGBvbmVPZmAtZGVmaW5pdGlvbnMgLi4uKS5cbiAqXG4gKiBXZSBjYWxsIHRoZXNlIGVycm9ycyBcInJlbGV2YW50XCIgdGhhdCBoYXZlIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgZGVmaW5lZCBieSB1cyBPUlxuICogYXJlIGJhc2ljIGRhdGEgdHlwZSBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc2NoZW1hRXJyb3JzXG4gKlxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGZpbHRlcmVkU2NoZW1hRXJyb3JzKHNjaGVtYUVycm9ycykge1xuICByZXR1cm4gZmlsdGVyKHNjaGVtYUVycm9ycywgZXJyID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBpbnN0YW5jZVBhdGgsXG4gICAgICBrZXl3b3JkXG4gICAgfSA9IGVycjtcblxuICAgIC8vICgxKSByZWd1bGFyIGVycm9ycyBhcmUgY3VzdG9taXplZCBmcm9tIHRoZSBzY2hlbWFcbiAgICBpZiAoa2V5d29yZCA9PT0gJ2Vycm9yTWVzc2FnZScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vICgyKSBkYXRhIHR5cGUgZXJyb3JzXG4gICAgLy8gaWdub3JlIHR5cGUgZXJyb3JzIG5lc3RlZCBpbiBzY29wZXNcbiAgICBpZiAoa2V5d29yZCA9PT0gJ3R5cGUnICYmIGluc3RhbmNlUGF0aCAmJiAhaW5zdGFuY2VQYXRoLnN0YXJ0c1dpdGgoJy9zY29wZXMvJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5jb25zdCBTVVBQT1JURURfU0NIRU1BX1ZFUlNJT04gPSBnZXRaZWViZVNjaGVtYVZlcnNpb24oKTtcbmNvbnN0IFNVUFBPUlRFRF9TQ0hFTUFfUEFDS0FHRSA9IGdldFplZWJlU2NoZW1hUGFja2FnZSgpO1xuXG4vKipcbiAqIEEgQ2FtdW5kYSBDbG91ZCBlbGVtZW50IHRlbXBsYXRlIHZhbGlkYXRvci5cbiAqL1xuY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yJDEge1xuICBjb25zdHJ1Y3Rvcihtb2RkbGUpIHtcbiAgICBzdXBlcihtb2RkbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGdpdmVuIHRlbXBsYXRlIGFuZCByZXR1cm4gZXJyb3IgKGlmIGFueSkuXG4gICAqXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVEZXNjcmlwdG9yfSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gdmFsaWRhdGlvbiBlcnJvciwgaWYgYW55XG4gICAqL1xuICBfdmFsaWRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuICAgIGxldCBlcnI7XG4gICAgY29uc3QgaWQgPSB0ZW1wbGF0ZS5pZCxcbiAgICAgIHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uIHx8ICdfJyxcbiAgICAgIHNjaGVtYSA9IHRlbXBsYXRlLiRzY2hlbWEsXG4gICAgICBzY2hlbWFWZXJzaW9uID0gc2NoZW1hICYmIGdldFNjaGVtYVZlcnNpb24oc2NoZW1hKTtcblxuICAgIC8vICgxKSAkc2NoZW1hIGF0dHJpYnV0ZSBkZWZpbmVkXG4gICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcignbWlzc2luZyAkc2NoZW1hIGF0dHJpYnV0ZS4nLCB0ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1NjaGVtYVZhbGlkKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcihgdW5zdXBwb3J0ZWQgJHNjaGVtYSBhdHRyaWJ1dGUgPCR7c2NoZW1hfT4uYCwgdGVtcGxhdGUpO1xuICAgIH1cblxuICAgIC8vICgyKSBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHNjaGVtYVZlcnNpb24gJiYgc2VtdmVyQ29tcGFyZShTVVBQT1JURURfU0NIRU1BX1ZFUlNJT04sIHNjaGVtYVZlcnNpb24pIDwgMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvZ0Vycm9yKGB1bnN1cHBvcnRlZCBlbGVtZW50IHRlbXBsYXRlIHNjaGVtYSB2ZXJzaW9uIDwke3NjaGVtYVZlcnNpb259Pi4gWW91ciBpbnN0YWxsYXRpb24gb25seSBzdXBwb3J0cyB1cCB0byB2ZXJzaW9uIDwke1NVUFBPUlRFRF9TQ0hFTUFfVkVSU0lPTn0+LiBQbGVhc2UgdXBkYXRlIHlvdXIgaW5zdGFsbGF0aW9uYCwgdGVtcGxhdGUpO1xuICAgIH1cblxuICAgIC8vICgzKSB2ZXJzaW9uaW5nXG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdICYmIHRoaXMuX3RlbXBsYXRlc0J5SWRbaWRdW3ZlcnNpb25dKSB7XG4gICAgICBpZiAodmVyc2lvbiA9PT0gJ18nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2dFcnJvcihgdGVtcGxhdGUgaWQgPCR7aWR9PiBhbHJlYWR5IHVzZWRgLCB0ZW1wbGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9nRXJyb3IoYHRlbXBsYXRlIGlkIDwke2lkfT4gYW5kIHZlcnNpb24gPCR7dmVyc2lvbn0+IGFscmVhZHkgdXNlZGAsIHRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAoNCkgZWxlbWVudFR5cGUgdmFsaWRhdGlvblxuICAgIGNvbnN0IGVsZW1lbnRUeXBlRXJyb3IgPSB0aGlzLl92YWxpZGF0ZUVsZW1lbnRUeXBlKHRlbXBsYXRlKTtcbiAgICBpZiAoZWxlbWVudFR5cGVFcnJvcikge1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlRXJyb3I7XG4gICAgfVxuXG4gICAgLy8gKDUpIEpTT04gc2NoZW1hIGNvbXBsaWFuY2VcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVaZWViZSh0ZW1wbGF0ZSk7XG4gICAgY29uc3Qge1xuICAgICAgZXJyb3JzLFxuICAgICAgdmFsaWRcbiAgICB9ID0gdmFsaWRhdGlvblJlc3VsdDtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgdGVtcGxhdGUnKTtcbiAgICAgIGZpbHRlcmVkU2NoZW1hRXJyb3JzKGVycm9ycykuZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ0Vycm9yKGVycm9yLm1lc3NhZ2UsIHRlbXBsYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXJyO1xuICB9XG4gIGlzU2NoZW1hVmFsaWQoc2NoZW1hKSB7XG4gICAgcmV0dXJuIHNjaGVtYSAmJiBzY2hlbWEuaW5jbHVkZXMoU1VQUE9SVEVEX1NDSEVNQV9QQUNLQUdFKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBndXkgcmVzcG9uc2libGUgZm9yIHRlbXBsYXRlIGxvYWRpbmcuXG4gKlxuICogUHJvdmlkZSB0aGUgYWN0dWFsIHRlbXBsYXRlcyB2aWEgdGhlIGBjb25maWcuZWxlbWVudFRlbXBsYXRlc2AuXG4gKlxuICogVGhhdCBjb25maWd1cmF0aW9uIGNhbiBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgdGVtcGxhdGVcbiAqIGRlc2NyaXB0b3JzIG9yIGEgbm9kZSBzdHlsZSBjYWxsYmFjayB0byByZXRyaWV2ZVxuICogdGhlIHRlbXBsYXRlcyBhc3luY2hyb25vdXNseS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRlbXBsYXRlRGVzY3JpcHRvcj58RnVuY3Rpb259IGxvYWRUZW1wbGF0ZXNcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKiBAcGFyYW0ge0VsZW1lbnRUZW1wbGF0ZXN9IGVsZW1lbnRUZW1wbGF0ZXNcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RkbGVcbiAqL1xubGV0IEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIkMSA9IGNsYXNzIEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihsb2FkVGVtcGxhdGVzLCBldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcywgbW9kZGxlKSB7XG4gICAgdGhpcy5fbG9hZFRlbXBsYXRlcyA9IGxvYWRUZW1wbGF0ZXM7XG4gICAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLl9tb2RkbGUgPSBtb2RkbGU7XG4gICAgZXZlbnRCdXMub24oJ2RpYWdyYW0uaW5pdCcsICgpID0+IHtcbiAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfSk7XG4gIH1cbiAgcmVsb2FkKCkge1xuICAgIGNvbnN0IGxvYWRUZW1wbGF0ZXMgPSB0aGlzLl9sb2FkVGVtcGxhdGVzO1xuXG4gICAgLy8gbm8gdGVtcGxhdGVzIHNwZWNpZmllZFxuICAgIGlmIChpc1VuZGVmaW5lZCQxKGxvYWRUZW1wbGF0ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGVtcGxhdGUgbG9hZGVyIGZ1bmN0aW9uIHNwZWNpZmllZFxuICAgIGlmIChpc0Z1bmN0aW9uKGxvYWRUZW1wbGF0ZXMpKSB7XG4gICAgICByZXR1cm4gbG9hZFRlbXBsYXRlcygoZXJyLCB0ZW1wbGF0ZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlRXJyb3JzKFtlcnJdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFRlbXBsYXRlcyh0ZW1wbGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGVtcGxhdGVzIGFycmF5IHNwZWNpZmllZFxuICAgIGlmIChsb2FkVGVtcGxhdGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0VGVtcGxhdGVzKGxvYWRUZW1wbGF0ZXMpO1xuICAgIH1cbiAgfVxuICBzZXRUZW1wbGF0ZXModGVtcGxhdGVzKSB7XG4gICAgY29uc3QgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMsXG4gICAgICBtb2RkbGUgPSB0aGlzLl9tb2RkbGU7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvciQxKG1vZGRsZSkuYWRkQWxsKHRlbXBsYXRlcyk7XG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdG9yLmdldEVycm9ycygpLFxuICAgICAgdmFsaWRUZW1wbGF0ZXMgPSB2YWxpZGF0b3IuZ2V0VmFsaWRUZW1wbGF0ZXMoKTtcbiAgICBlbGVtZW50VGVtcGxhdGVzLnNldCh2YWxpZFRlbXBsYXRlcyk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVFcnJvcnMoZXJyb3JzKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wbGF0ZXNDaGFuZ2VkKCk7XG4gIH1cbiAgdGVtcGxhdGVzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmNoYW5nZWQnKTtcbiAgfVxuICB0ZW1wbGF0ZUVycm9ycyhlcnJvcnMpIHtcbiAgICB0aGlzLl9ldmVudEJ1cy5maXJlKCdlbGVtZW50VGVtcGxhdGVzLmVycm9ycycsIHtcbiAgICAgIGVycm9yczogZXJyb3JzXG4gICAgfSk7XG4gIH1cbn07XG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyJDEuJGluamVjdCA9IFsnY29uZmlnLmVsZW1lbnRUZW1wbGF0ZXMnLCAnZXZlbnRCdXMnLCAnZWxlbWVudFRlbXBsYXRlcycsICdtb2RkbGUnXTtcblxuY2xhc3MgRWxlbWVudFRlbXBsYXRlc0xvYWRlciBleHRlbmRzIEVsZW1lbnRUZW1wbGF0ZXNMb2FkZXIkMSB7XG4gIGNvbnN0cnVjdG9yKGxvYWRUZW1wbGF0ZXMsIGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzLCBtb2RkbGUpIHtcbiAgICBzdXBlcihsb2FkVGVtcGxhdGVzLCBldmVudEJ1cywgZWxlbWVudFRlbXBsYXRlcywgbW9kZGxlKTtcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgfVxuICBzZXRUZW1wbGF0ZXModGVtcGxhdGVzKSB7XG4gICAgY29uc3QgZWxlbWVudFRlbXBsYXRlcyA9IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMsXG4gICAgICBtb2RkbGUgPSB0aGlzLl9tb2RkbGU7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcihtb2RkbGUpLmFkZEFsbCh0ZW1wbGF0ZXMpO1xuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRvci5nZXRFcnJvcnMoKSxcbiAgICAgIHZhbGlkVGVtcGxhdGVzID0gdmFsaWRhdG9yLmdldFZhbGlkVGVtcGxhdGVzKCk7XG4gICAgZWxlbWVudFRlbXBsYXRlcy5zZXQodmFsaWRUZW1wbGF0ZXMpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRlbXBsYXRlRXJyb3JzKGVycm9ycyk7XG4gICAgfVxuICAgIHRoaXMudGVtcGxhdGVzQ2hhbmdlZCgpO1xuICB9XG59XG5FbGVtZW50VGVtcGxhdGVzTG9hZGVyLiRpbmplY3QgPSBbJ2NvbmZpZy5lbGVtZW50VGVtcGxhdGVzJywgJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnLCAnbW9kZGxlJ107XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgYW5kIHNldCBpdHMgcGFyZW50LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBlbGVtZW50VHlwZSBvZiB0aGUgbmV3IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIG9mIHRoZSBuZXcgZWxlbWVudCBpbiBrZXktdmFsdWUgcGFpcnNcbiAqIEBwYXJhbSB7bW9kZGxlLm9iamVjdH0gcGFyZW50IG9mIHRoZSBuZXcgZWxlbWVudFxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gZmFjdG9yeSB3aGljaCBjcmVhdGVzIHRoZSBuZXcgZWxlbWVudFxuICpcbiAqIEByZXR1cm5zIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudCB3aGljaCBpcyBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGUsIHByb3BlcnRpZXMsIHBhcmVudCwgZmFjdG9yeSkge1xuICBjb25zdCBlbGVtZW50ID0gZmFjdG9yeS5jcmVhdGUoZWxlbWVudFR5cGUsIHByb3BlcnRpZXMpO1xuICBpZiAocGFyZW50KSB7XG4gICAgZWxlbWVudC4kcGFyZW50ID0gcGFyZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIGdlbmVyYXRlIGEgc2VtYW50aWMgaWQgd2l0aCBnaXZlbiBwcmVmaXhcbiAqL1xuZnVuY3Rpb24gbmV4dElkKHByZWZpeCkge1xuICBjb25zdCBpZHMgPSBuZXcgSWRzKFszMiwgMzIsIDFdKTtcbiAgcmV0dXJuIGlkcy5uZXh0UHJlZml4ZWQocHJlZml4KTtcbn1cbmZ1bmN0aW9uIGdldFJvb3QoYnVzaW5lc3NPYmplY3QpIHtcbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICB3aGlsZSAocGFyZW50LiRwYXJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuZnVuY3Rpb24gZmlsdGVyRWxlbWVudHNCeVR5cGUob2JqZWN0TGlzdCwgdHlwZSkge1xuICBjb25zdCBsaXN0ID0gb2JqZWN0TGlzdCB8fCBbXTtcbiAgcmV0dXJuIGxpc3QuZmlsdGVyKGVsZW1lbnQgPT4gaXMoZWxlbWVudCwgdHlwZSkpO1xufVxuZnVuY3Rpb24gZmluZFJvb3RFbGVtZW50c0J5VHlwZShidXNpbmVzc09iamVjdCwgcmVmZXJlbmNlZFR5cGUpIHtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoYnVzaW5lc3NPYmplY3QpO1xuICByZXR1cm4gZmlsdGVyRWxlbWVudHNCeVR5cGUocm9vdC5nZXQoJ3Jvb3RFbGVtZW50cycpLCByZWZlcmVuY2VkVHlwZSk7XG59XG5mdW5jdGlvbiBmaW5kUm9vdEVsZW1lbnRCeUlkKGJ1c2luZXNzT2JqZWN0LCB0eXBlLCBpZCkge1xuICBjb25zdCBlbGVtZW50cyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoYnVzaW5lc3NPYmplY3QsIHR5cGUpO1xuICByZXR1cm4gZWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGlkKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5wdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cbiAqIGJpbmRpbmcgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQYXJhbWV0ZXIkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3Qge1xuICAgIG5hbWVcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOklucHV0Jywge1xuICAgIHNvdXJjZTogdmFsdWUsXG4gICAgdGFyZ2V0OiBuYW1lXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBvdXRwdXQgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW5cbiAqIGJpbmRpbmcgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3V0cHV0UGFyYW1ldGVyJDEoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IHtcbiAgICBzb3VyY2VcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOk91dHB1dCcsIHtcbiAgICBzb3VyY2UsXG4gICAgdGFyZ2V0OiB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB0YXNrIGhlYWRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRhc2tIZWFkZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IHtcbiAgICBrZXlcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOkhlYWRlcicsIHtcbiAgICBrZXksXG4gICAgdmFsdWVcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGFzayBkZWZpbml0aW9uIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHJzXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRhc2tEZWZpbml0aW9uKGF0dHJzID0ge30sIGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOlRhc2tEZWZpbml0aW9uJywgYXR0cnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB6ZWViZTpQcm9wZXJ0eSBmcm9tIHRoZSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlWmVlYmVQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSA9ICcnLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCB7XG4gICAgbmFtZVxuICB9ID0gYmluZGluZztcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnemVlYmU6UHJvcGVydHknLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWxsZWQgZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhdHRyc1xuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWxsZWRFbGVtZW50KGF0dHJzID0ge30sIGJwbW5GYWN0b3J5KSB7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCBhdHRycyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHdoZXRoZXIgYW4gZWxlbWVudCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqXG4gKiBUaGF0IG1hdGNoZXMgb25jZVxuICogYSkgdGhlIHByb3BlcnR5IHZhbHVlIGlzIG5vdCBlbXB0eSwgb3JcbiAqIGIpIHRoZSBwcm9wZXJ0eSBpcyBub3Qgb3B0aW9uYWxcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZSh2YWx1ZSwgcHJvcGVydHkpIHtcbiAgY29uc3Qge1xuICAgIG9wdGlvbmFsXG4gIH0gPSBwcm9wZXJ0eTtcbiAgcmV0dXJuIHZhbHVlIHx8ICFvcHRpb25hbDtcbn1cblxuLyoqXG4gKiBHZXRzIG9yLCBpbiBjYXNlIG5vdCBleGlzdGVudCwgY3JlYXRlcyBleHRlbnNpb24gZWxlbWVudCBmb3IgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqIEByZXR1cm5zIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgdHlwZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgbGV0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywge30sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgYnVzaW5lc3NPYmplY3Quc2V0KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgfVxuICBsZXQgZXh0ZW5zaW9uID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCB0eXBlKTtcbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICBleHRlbnNpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUodHlwZSk7XG4gICAgZXh0ZW5zaW9uLiRwYXJlbnQgPSBleHRlbnNpb25FbGVtZW50cztcbiAgICBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLnB1c2goZXh0ZW5zaW9uKTtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9uO1xufVxuXG5jb25zdCBQUk9QRVJUWV9UWVBFJDEgPSAncHJvcGVydHknO1xuY29uc3QgWkVCQkVfUFJPUEVSVFlfVFlQRSA9ICd6ZWViZTpwcm9wZXJ0eSc7XG5jb25zdCBaRUJCRV9JTlBVVF9UWVBFID0gJ3plZWJlOmlucHV0JztcbmNvbnN0IFpFRUJFX09VVFBVVF9UWVBFID0gJ3plZWJlOm91dHB1dCc7XG5jb25zdCBaRUVCRV9QUk9QRVJUWV9UWVBFID0gJ3plZWJlOnByb3BlcnR5JztcbmNvbnN0IFpFRUJFX1RBU0tfREVGSU5JVElPTl9UWVBFX1RZUEUgPSAnemVlYmU6dGFza0RlZmluaXRpb246dHlwZSc7XG5jb25zdCBaRUVCRV9UQVNLX0RFRklOSVRJT04gPSAnemVlYmU6dGFza0RlZmluaXRpb24nO1xuY29uc3QgWkVFQkVfVEFTS19IRUFERVJfVFlQRSA9ICd6ZWViZTp0YXNrSGVhZGVyJztcbmNvbnN0IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSA9ICdicG1uOk1lc3NhZ2UjcHJvcGVydHknO1xuY29uc3QgTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRSA9ICdicG1uOk1lc3NhZ2UjemVlYmU6c3Vic2NyaXB0aW9uI3Byb3BlcnR5JztcbmNvbnN0IFpFRUJFX0NBTExFRF9FTEVNRU5UID0gJ3plZWJlOmNhbGxlZEVsZW1lbnQnO1xuY29uc3QgRVhURU5TSU9OX0JJTkRJTkdfVFlQRVMkMSA9IFtNRVNTQUdFX1pFRUJFX1NVQlNDUklQVElPTl9QUk9QRVJUWV9UWVBFLCBaRUJCRV9JTlBVVF9UWVBFLCBaRUVCRV9PVVRQVVRfVFlQRSwgWkVFQkVfUFJPUEVSVFlfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OLCBaRUVCRV9UQVNLX0hFQURFUl9UWVBFLCBaRUVCRV9DQUxMRURfRUxFTUVOVF07XG5jb25zdCBUQVNLX0RFRklOSVRJT05fVFlQRVMgPSBbWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OXTtcbmNvbnN0IElPX0JJTkRJTkdfVFlQRVMkMSA9IFtaRUJCRV9JTlBVVF9UWVBFLCBaRUVCRV9PVVRQVVRfVFlQRV07XG5jb25zdCBNRVNTQUdFX0JJTkRJTkdfVFlQRVMgPSBbTUVTU0FHRV9QUk9QRVJUWV9UWVBFLCBNRVNTQUdFX1pFRUJFX1NVQlNDUklQVElPTl9QUk9QRVJUWV9UWVBFXTtcbmNvbnN0IFBST1BFUlRZX0JJTkRJTkdfVFlQRVMgPSBbUFJPUEVSVFlfVFlQRSQxLCBNRVNTQUdFX1BST1BFUlRZX1RZUEVdO1xuXG5mdW5jdGlvbiBnZXRUYXNrRGVmaW5pdGlvblByb3BlcnR5TmFtZShiaW5kaW5nKSB7XG4gIHJldHVybiBiaW5kaW5nLnR5cGUgPT09IFpFRUJFX1RBU0tfREVGSU5JVElPTl9UWVBFX1RZUEUgPyAndHlwZScgOiBiaW5kaW5nLnByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiByZW1vdmVSb290RWxlbWVudChyb290RWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJyksXG4gICAgY2FudmFzID0gaW5qZWN0b3IuZ2V0KCdjYW52YXMnKSxcbiAgICBicG1uanMgPSBpbmplY3Rvci5nZXQoJ2JwbW5qcycpO1xuICBjb25zdCBlbGVtZW50ID0gY2FudmFzLmdldFJvb3RFbGVtZW50KCksXG4gICAgZGVmaW5pdGlvbnMgPSBicG1uanMuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICByb290RWxlbWVudHMgPSBkZWZpbml0aW9ucy5nZXQoJ3Jvb3RFbGVtZW50cycpO1xuICBjb25zdCBuZXdSb290RWxlbWVudHMgPSByb290RWxlbWVudHMuZmlsdGVyKGUgPT4gZSAhPT0gcm9vdEVsZW1lbnQpO1xuXG4gIC8vIHNob3J0LWNpcmN1aXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB1cGRhdGVzXG4gIGlmIChuZXdSb290RWxlbWVudHMubGVuZ3RoID09PSByb290RWxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgZGVmaW5pdGlvbnMsIHtcbiAgICByb290RWxlbWVudHM6IG5ld1Jvb3RFbGVtZW50c1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgbWVzc2FnZSBmcm9tIGVsZW1lbnQgYW5kIHRoZSBkaWFncmFtLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCdicG1uLWpzL2xpYi9tb2RlbC9UeXBlcycpLkVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCdkaWRpJykuSW5qZWN0b3J9IGluamVjdG9yXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2UoZWxlbWVudCwgaW5qZWN0b3IpIHtcbiAgY29uc3QgbW9kZWxpbmcgPSBpbmplY3Rvci5nZXQoJ21vZGVsaW5nJyk7XG4gIGNvbnN0IGJvID0gZ2V0UmVmZXJyaW5nRWxlbWVudChlbGVtZW50KTtcblxuICAvLyBFdmVudCBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50IGRlZmluaXRpb25cbiAgaWYgKCFibykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtZXNzYWdlID0gZmluZE1lc3NhZ2UoYm8pO1xuICBpZiAoIW1lc3NhZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBibywge1xuICAgIG1lc3NhZ2VSZWY6IHVuZGVmaW5lZFxuICB9KTtcbiAgcmVtb3ZlUm9vdEVsZW1lbnQobWVzc2FnZSwgaW5qZWN0b3IpO1xufVxuZnVuY3Rpb24gZ2V0UmVmZXJyaW5nRWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGlmIChpcyhibywgJ2JwbW46RXZlbnQnKSkge1xuICAgIHJldHVybiBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgfVxuICByZXR1cm4gYm87XG59XG5cbi8qKlxuICogQXBwbGllcyBhbiBlbGVtZW50IHRlbXBsYXRlIHRvIGFuIGVsZW1lbnQuIFNldHMgYHplZWJlOm1vZGVsZXJUZW1wbGF0ZWAgYW5kXG4gKiBgemVlYmU6bW9kZWxlclRlbXBsYXRlVmVyc2lvbmAuXG4gKi9cbmxldCBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyJDEgPSBjbGFzcyBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoYnBtbkZhY3RvcnksIGJwbW5SZXBsYWNlLCBjb21tYW5kU3RhY2ssIG1vZGVsaW5nLCBpbmplY3Rvcikge1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5fYnBtblJlcGxhY2UgPSBicG1uUmVwbGFjZTtcbiAgICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjayA9IGNvbW1hbmRTdGFjaztcbiAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBhbiBlbGVtZW50J3MgdGVtcGxhdGUgYW5kIHVwZGF0ZSBpdHMgcHJvcGVydGllcyBhcyBzcGVjaWZpZWQgaW4gYG5ld1RlbXBsYXRlYC4gU3BlY2lmeVxuICAgKiBgb2xkVGVtcGxhdGVgIHRvIHVwZGF0ZSBmcm9tIG9uZSB0ZW1wbGF0ZSB0byBhbm90aGVyLiBJZiBgbmV3VGVtcGxhdGVgIGlzbid0IHNwZWNpZmllZCB0aGVcbiAgICogYHplZWJlOm1vZGVsZXJUZW1wbGF0ZWAgYW5kIGB6ZWViZTptb2RlbGVyVGVtcGxhdGVWZXJzaW9uYCBwcm9wZXJ0aWVzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tXG4gICAqIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5vbGRUZW1wbGF0ZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0Lm5ld1RlbXBsYXRlXVxuICAgKi9cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgbGV0IG5ld1RlbXBsYXRlID0gY29udGV4dC5uZXdUZW1wbGF0ZSxcbiAgICAgIG9sZFRlbXBsYXRlID0gY29udGV4dC5vbGRUZW1wbGF0ZTtcbiAgICBsZXQgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcblxuICAgIC8vIHVwZGF0ZSB6ZWViZTptb2RlbGVyVGVtcGxhdGUgYXR0cmlidXRlXG4gICAgdGhpcy5fdXBkYXRlWmVlYmVNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuXG4gICAgLy8gdXBkYXRlIHplZWJlOm1vZGVsZXJUZW1wbGF0ZUljb25cbiAgICB0aGlzLl91cGRhdGVaZWViZU1vZGVsZXJUZW1wbGF0ZUljb24oZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuICAgIGlmIChuZXdUZW1wbGF0ZSkge1xuICAgICAgLy8gdXBkYXRlIGVsZW1lbnQgdHlwZVxuICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCA9IHRoaXMuX3VwZGF0ZUVsZW1lbnRUeXBlKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl91cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSB6ZWViZTpUYXNrRGVmaW5pdGlvblxuICAgICAgdGhpcy5fdXBkYXRlWmVlYmVUYXNrRGVmaW5pdGlvbihlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgemVlYmU6SW5wdXQgYW5kIHplZWJlOk91dHB1dCBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl91cGRhdGVaZWViZUlucHV0T3V0cHV0UGFyYW1ldGVyUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgemVlYmU6SGVhZGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZVplZWJlVGFza0hlYWRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIHplZWJlOlByb3BlcnR5IHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZVplZWJlUHJvcGVydHlQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgICB0aGlzLl91cGRhdGVNZXNzYWdlKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgICB0aGlzLl91cGRhdGVDYWxsZWRFbGVtZW50KGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgfVxuICB9XG4gIF9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCkpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0pO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBidXNpbmVzc09iamVjdCwge1xuICAgICAgICBleHRlbnNpb25FbGVtZW50czogZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW5zaW9uRWxlbWVudHM7XG4gIH1cbiAgX3VwZGF0ZVplZWJlTW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBjb25zdCBuZXdJZCA9IG5ld1RlbXBsYXRlICYmIG5ld1RlbXBsYXRlLmlkO1xuICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBuZXdUZW1wbGF0ZSAmJiBuZXdUZW1wbGF0ZS52ZXJzaW9uO1xuICAgIGlmIChnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudCkgIT09IG5ld0lkIHx8IGdldFRlbXBsYXRlVmVyc2lvbiQxKGVsZW1lbnQpICE9PSBuZXdWZXJzaW9uKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc6IG5ld0lkLFxuICAgICAgICAnemVlYmU6bW9kZWxlclRlbXBsYXRlVmVyc2lvbic6IG5ld1ZlcnNpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlWmVlYmVNb2RlbGVyVGVtcGxhdGVJY29uKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBjb25zdCBuZXdJY29uID0gbmV3VGVtcGxhdGUgJiYgbmV3VGVtcGxhdGUuaWNvbjtcbiAgICBjb25zdCBuZXdJY29uQ29udGVudHMgPSBuZXdJY29uICYmIG5ld0ljb24uY29udGVudHM7XG4gICAgaWYgKGdldFRlbXBsYXRlSWNvbihlbGVtZW50KSAhPT0gbmV3SWNvbkNvbnRlbnRzKSB7XG4gICAgICBtb2RlbGluZy51cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHtcbiAgICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZUljb24nOiBuZXdJY29uQ29udGVudHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gbmV3VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG5ld0JpbmRpbmdUeXBlID09PSAncHJvcGVydHknO1xuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIG9sZCBQcm9wZXJ0aWVzIGlmIG5vIG5ldyBQcm9wZXJ0aWVzIHNwZWNpZmllZFxuICAgIGNvbnN0IHByb3BlcnRpZXNUb1JlbW92ZSA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5JyAmJiAhbmV3UHJvcGVydGllcy5maW5kKG5ld1Byb3BlcnR5ID0+IG5ld1Byb3BlcnR5LmJpbmRpbmcubmFtZSA9PT0gb2xkUHJvcGVydHkuYmluZGluZy5uYW1lKTtcbiAgICB9KSB8fCBbXTtcbiAgICBpZiAocHJvcGVydGllc1RvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHByb3BlcnRpZXNUb1JlbW92ZS5yZWR1Y2UoKHByb3BlcnRpZXMsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXNbcHJvcGVydHkuYmluZGluZy5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczogcGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmV3UHJvcGVydGllcy5mb3JFYWNoKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BlcnR5ID0gZmluZE9sZFByb3BlcnR5JDEob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdOYW1lID0gbmV3QmluZGluZy5uYW1lLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKG5ld1Byb3BlcnR5KSxcbiAgICAgICAgY2hhbmdlZEVsZW1lbnQgPSBidXNpbmVzc09iamVjdDtcbiAgICAgIGxldCBwcm9wZXJ0aWVzID0ge307XG4gICAgICBpZiAoc2hvdWxkS2VlcFZhbHVlKGNoYW5nZWRFbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByb3BlcnRpZXNbbmV3QmluZGluZ05hbWVdID0gbmV3UHJvcGVydHlWYWx1ZTtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYHplZWJlOlRhc2tEZWZpbml0aW9uYCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzcyBvYmplY3QuIFRoaXNcbiAgICogY2FuIG9ubHkgZXhpc3QgaW4gYGJwbW46RXh0ZW5zaW9uRWxlbWVudHNgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVaZWViZVRhc2tEZWZpbml0aW9uKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBUQVNLX0RFRklOSVRJT05fVFlQRVMuaW5jbHVkZXMobmV3QmluZGluZ1R5cGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBsZXQgdGFza0RlZmluaXRpb24gPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpO1xuXG4gICAgLy8gKDEpIHJlbW92ZSBvbGQgdGFzayBkZWZpbml0aW9uIGlmIG5vIG5ldyBwcm9wZXJ0aWVzIHNwZWNpZmllZFxuXG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSwgdGFza0RlZmluaXRpb24pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IGdldFRhc2tEZWZpbml0aW9uUHJvcGVydHlOYW1lKG5ld0JpbmRpbmcpO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCB0YXNrIGRlZmluaXRpb25cbiAgICAgIGlmICh0YXNrRGVmaW5pdGlvbikge1xuICAgICAgICBpZiAoIXNob3VsZEtlZXBWYWx1ZSh0YXNrRGVmaW5pdGlvbiwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBbcHJvcGVydHlOYW1lXTogbmV3UHJvcGVydHlWYWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAoMykgYWRkIG5ldyB0YXNrIGRlZmluaXRpb25cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIFtwcm9wZXJ0eU5hbWVdOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRhc2tEZWZpbml0aW9uID0gY3JlYXRlVGFza0RlZmluaXRpb24ocHJvcGVydGllcywgYnBtbkZhY3RvcnkpO1xuICAgICAgICB0YXNrRGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCB0YXNrRGVmaW5pdGlvbl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBwcm9wZXJ0aWVzIG5vIGxvbmdlciB0ZW1wbGF0ZWRcbiAgICBjb25zdCBvbGRQcm9wZXJ0aWVzID0gb2xkVGVtcGxhdGUgJiYgb2xkVGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdUeXBlID0gb2xkQmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIFRBU0tfREVGSU5JVElPTl9UWVBFUy5pbmNsdWRlcyhvbGRCaW5kaW5nVHlwZSkgJiYgIW5ld1Byb3BlcnRpZXMuZmluZChuZXdQcm9wZXJ0eSA9PiBuZXdQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5ID09PSBvbGRQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5KTtcbiAgICB9KSB8fCBbXTtcbiAgICBvbGRQcm9wZXJ0aWVzLmZvckVhY2gob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgW29sZFByb3BlcnR5LmJpbmRpbmcucHJvcGVydHldOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrRGVmaW5pdGlvbixcbiAgICAgICAgcHJvcGVydGllc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGB6ZWViZTpJbnB1dGAgYW5kIGB6ZWViZTpPdXRwdXRgIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzXG4gICAqIG9iamVjdC4gQm90aCBjYW4gb25seSBleGlzdCBpbiBgemVlYmU6aW9NYXBwaW5nYCB3aGljaCBjYW4gZXhpc3QgaW4gYGJwbW46RXh0ZW5zaW9uRWxlbWVudHNgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVaZWViZUlucHV0T3V0cHV0UGFyYW1ldGVyUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTppbnB1dCcgfHwgbmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTpvdXRwdXQnO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBsZXQgaW9NYXBwaW5nID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6SW9NYXBwaW5nJyk7XG5cbiAgICAvLyAoMSkgcmVtb3ZlIG9sZCBtYXBwaW5ncyBpZiBubyBuZXcgc3BlY2lmaWVkXG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgaWYgKCFpb01hcHBpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSwgaW9NYXBwaW5nKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpb01hcHBpbmcpIHtcbiAgICAgIGlvTWFwcGluZyA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnemVlYmU6SW9NYXBwaW5nJyk7XG4gICAgICBpb01hcHBpbmcuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBpb01hcHBpbmddXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbGRJbnB1dHMgPSBpb01hcHBpbmcuZ2V0KCd6ZWViZTppbnB1dFBhcmFtZXRlcnMnKSA/IGlvTWFwcGluZy5nZXQoJ3plZWJlOmlucHV0UGFyYW1ldGVycycpLnNsaWNlKCkgOiBbXTtcbiAgICBjb25zdCBvbGRPdXRwdXRzID0gaW9NYXBwaW5nLmdldCgnemVlYmU6b3V0cHV0UGFyYW1ldGVycycpID8gaW9NYXBwaW5nLmdldCgnemVlYmU6b3V0cHV0UGFyYW1ldGVycycpLnNsaWNlKCkgOiBbXTtcbiAgICBsZXQgcHJvcGVydHlOYW1lO1xuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eSQxKG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIGlucHV0T3JPdXRwdXQgPSBmaW5kQnVzaW5lc3NPYmplY3QoYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIGxldCBuZXdJbnB1dE9yT3V0cHV0LCBwcm9wZXJ0aWVzO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICAgIGlmIChpbnB1dE9yT3V0cHV0KSB7XG4gICAgICAgIC8vICgyYSkgZXhjbHVkZSBvbGQgaW5wdXRzIGFuZCBvdXRwdXRzIGZyb20gY2xlYW51cCwgdW5sZXNzXG4gICAgICAgIC8vIGEpIG9wdGlvbmFsIGFuZCBoYXMgZW1wdHkgdmFsdWUsIGFuZFxuICAgICAgICAvLyBiKSBub3QgY2hhbmdlZFxuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlKG5ld1Byb3BlcnR5VmFsdWUsIG5ld1Byb3BlcnR5KSB8fCBzaG91bGRLZWVwVmFsdWUoaW5wdXRPck91dHB1dCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGlmIChpcyhpbnB1dE9yT3V0cHV0LCAnemVlYmU6SW5wdXQnKSkge1xuICAgICAgICAgICAgcmVtb3ZlJDEob2xkSW5wdXRzLCBpbnB1dE9yT3V0cHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlJDEob2xkT3V0cHV0cywgaW5wdXRPck91dHB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gKDJhKSBkbyB1cGRhdGVzICh1bmxlc3MgY2hhbmdlZClcbiAgICAgICAgaWYgKCFzaG91bGRLZWVwVmFsdWUoaW5wdXRPck91dHB1dCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGlmIChpcyhpbnB1dE9yT3V0cHV0LCAnemVlYmU6SW5wdXQnKSkge1xuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgc291cmNlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICB0YXJnZXQ6IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPck91dHB1dCxcbiAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAoMykgYWRkIG5ldyBpbnB1dHMgYW5kIG91dHB1dHMgKHVubGVzcyBvcHRpb25hbClcbiAgICAgIGVsc2UgaWYgKHNob3VsZFVwZGF0ZShuZXdQcm9wZXJ0eVZhbHVlLCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6aW5wdXQnKSB7XG4gICAgICAgICAgcHJvcGVydHlOYW1lID0gJ2lucHV0UGFyYW1ldGVycyc7XG4gICAgICAgICAgbmV3SW5wdXRPck91dHB1dCA9IGNyZWF0ZUlucHV0UGFyYW1ldGVyJDEobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICdvdXRwdXRQYXJhbWV0ZXJzJztcbiAgICAgICAgICBuZXdJbnB1dE9yT3V0cHV0ID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyJDEobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0lucHV0T3JPdXRwdXQuJHBhcmVudCA9IGlvTWFwcGluZztcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBbcHJvcGVydHlOYW1lXTogWy4uLmlvTWFwcGluZy5nZXQocHJvcGVydHlOYW1lKSwgbmV3SW5wdXRPck91dHB1dF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgaWYgKG9sZElucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGlucHV0UGFyYW1ldGVyczogd2l0aG91dChpb01hcHBpbmcuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKSwgaW5wdXRQYXJhbWV0ZXIgPT4gb2xkSW5wdXRzLmluY2x1ZGVzKGlucHV0UGFyYW1ldGVyKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbGRPdXRwdXRzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogaW9NYXBwaW5nLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogd2l0aG91dChpb01hcHBpbmcuZ2V0KCdvdXRwdXRQYXJhbWV0ZXJzJyksIG91dHB1dFBhcmFtZXRlciA9PiBvbGRPdXRwdXRzLmluY2x1ZGVzKG91dHB1dFBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYHplZWJlOkhlYWRlcmAgcHJvcGVydGllcyBvZiBzcGVjaWZpZWQgYnVzaW5lc3NcbiAgICogb2JqZWN0LiBUaG9zZSBjYW4gb25seSBleGlzdCBpbiBgemVlYmU6dGFza0hlYWRlcnNgIHdoaWNoIGNhbiBleGlzdCBpbiBgYnBtbjpFeHRlbnNpb25FbGVtZW50c2AuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZVplZWJlVGFza0hlYWRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gbmV3VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6dGFza0hlYWRlcic7XG4gICAgfSk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIGxldCB0YXNrSGVhZGVycyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOlRhc2tIZWFkZXJzJyk7XG5cbiAgICAvLyAoMSkgcmVtb3ZlIG9sZCBoZWFkZXJzIGlmIG5vIG5ldyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRhc2tIZWFkZXJzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIHRhc2tIZWFkZXJzKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0YXNrSGVhZGVycykge1xuICAgICAgdGFza0hlYWRlcnMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ3plZWJlOlRhc2tIZWFkZXJzJyk7XG4gICAgICB0YXNrSGVhZGVycy4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogWy4uLmJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIHRhc2tIZWFkZXJzXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgb2xkSGVhZGVycyA9IHRhc2tIZWFkZXJzLmdldCgnemVlYmU6dmFsdWVzJykgPyB0YXNrSGVhZGVycy5nZXQoJ3plZWJlOnZhbHVlcycpLnNsaWNlKCkgOiBbXTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBvbGRIZWFkZXIgPSBmaW5kQnVzaW5lc3NPYmplY3QoYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBoZWFkZXJzXG4gICAgICBpZiAob2xkSGVhZGVyKSB7XG4gICAgICAgIGlmICghc2hvdWxkS2VlcFZhbHVlKG9sZEhlYWRlciwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3UHJvcGVydHlWYWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBvbGRIZWFkZXIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlJDEob2xkSGVhZGVycywgb2xkSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgKG5vbi1lbXB0eSkgaGVhZGVyc1xuICAgICAgZWxzZSBpZiAobmV3UHJvcGVydHlWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdIZWFkZXIgPSBjcmVhdGVUYXNrSGVhZGVyKG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5VmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgbmV3SGVhZGVyLiRwYXJlbnQgPSB0YXNrSGVhZGVycztcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHRhc2tIZWFkZXJzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnRhc2tIZWFkZXJzLmdldCgndmFsdWVzJyksIG5ld0hlYWRlcl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgaGVhZGVyc1xuICAgIGlmIChvbGRIZWFkZXJzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza0hlYWRlcnMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQodGFza0hlYWRlcnMuZ2V0KCd2YWx1ZXMnKSwgaGVhZGVyID0+IG9sZEhlYWRlcnMuaW5jbHVkZXMoaGVhZGVyKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB6ZWViZTpQcm9wZXJ0eSBwcm9wZXJ0aWVzIG9mIHplZWJlOlByb3BlcnRpZXMgZXh0ZW5zaW9uIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZVplZWJlUHJvcGVydHlQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ3plZWJlOnByb3BlcnR5JztcbiAgICB9KTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IHRoaXMuX2dldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCk7XG4gICAgbGV0IHplZWJlUHJvcGVydGllcyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOlByb3BlcnRpZXMnKTtcblxuICAgIC8vICgxKSByZW1vdmUgb2xkIHplZWJlOlByb3BlcnRpZXMgaWYgbm8gbmV3IHplZWJlOlByb3BlcnR5IHByb3BlcnRpZXNcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXplZWJlUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogd2l0aG91dChidXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCB6ZWViZVByb3BlcnRpZXMpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXplZWJlUHJvcGVydGllcykge1xuICAgICAgemVlYmVQcm9wZXJ0aWVzID0gYnBtbkZhY3RvcnkuY3JlYXRlKCd6ZWViZTpQcm9wZXJ0aWVzJyk7XG4gICAgICB6ZWViZVByb3BlcnRpZXMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCB6ZWViZVByb3BlcnRpZXNdXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbGRaZWViZVByb3BlcnRpZXMgPSB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykgPyB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykuc2xpY2UoKSA6IFtdO1xuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eSQxKG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG9sZFplZWJlUHJvcGVydHkgPSBmaW5kQnVzaW5lc3NPYmplY3QoYnVzaW5lc3NPYmplY3QsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCB6ZWViZTpQcm9wZXJ0eVxuICAgICAgaWYgKG9sZFplZWJlUHJvcGVydHkpIHtcbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZShuZXdQcm9wZXJ0eVZhbHVlLCBuZXdQcm9wZXJ0eSkgfHwgc2hvdWxkS2VlcFZhbHVlKG9sZFplZWJlUHJvcGVydHksIG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICByZW1vdmUkMShvbGRaZWViZVByb3BlcnRpZXMsIG9sZFplZWJlUHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2hvdWxkS2VlcFZhbHVlKG9sZFplZWJlUHJvcGVydHksIG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZFplZWJlUHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgemVlYmU6UHJvcGVydHlcbiAgICAgIGVsc2UgaWYgKHNob3VsZFVwZGF0ZShuZXdQcm9wZXJ0eVZhbHVlLCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgY29uc3QgbmV3UHJvcGVydHkgPSBjcmVhdGVaZWViZVByb3BlcnR5KG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5VmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgbmV3UHJvcGVydHkuJHBhcmVudCA9IHplZWJlUHJvcGVydGllcztcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHplZWJlUHJvcGVydGllcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBbLi4uemVlYmVQcm9wZXJ0aWVzLmdldCgncHJvcGVydGllcycpLCBuZXdQcm9wZXJ0eV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgemVlYmU6UHJvcGVydHlcbiAgICBpZiAob2xkWmVlYmVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogemVlYmVQcm9wZXJ0aWVzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgcHJvcGVydGllczogd2l0aG91dCh6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJyksIHplZWJlUHJvcGVydHkgPT4gb2xkWmVlYmVQcm9wZXJ0aWVzLmluY2x1ZGVzKHplZWJlUHJvcGVydHkpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgX3VwZGF0ZU1lc3NhZ2UoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKSB7XG4gICAgLy8gdXBkYXRlIGJwbW46TWVzc2FnZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5fdXBkYXRlTWVzc2FnZVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgIC8vIHVwZGF0ZSBicG1uOk1lc3NhZ2UgemVlYmU6c3Vic2NyaXB0aW9uIHByb3BlcnRpZXNcbiAgICB0aGlzLl91cGRhdGVNZXNzYWdlWmVlYmVTdWJzY3JpcHRpb25Qcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgdGhpcy5fdXBkYXRlWmVlYmVNb2RlbGVyVGVtcGxhdGVPblJlZmVyZW5jZWRFbGVtZW50KGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG4gICAgaWYgKCFoYXNNZXNzYWdlUHJvcGVydGllcyhuZXdUZW1wbGF0ZSkpIHtcbiAgICAgIHJlbW92ZU1lc3NhZ2UoZWxlbWVudCwgdGhpcy5faW5qZWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYnBtbjpNZXNzYWdlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZU1lc3NhZ2VQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRTtcbiAgICB9KTtcbiAgICBjb25zdCByZW1vdmVkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gTUVTU0FHRV9QUk9QRVJUWV9UWVBFICYmICFuZXdQcm9wZXJ0aWVzLmZpbmQobmV3UHJvcGVydHkgPT4gbmV3UHJvcGVydHkuYmluZGluZy5uYW1lID09PSBvbGRQcm9wZXJ0eS5iaW5kaW5nLm5hbWUpO1xuICAgIH0pIHx8IFtdO1xuICAgIGxldCBtZXNzYWdlID0gdGhpcy5fZ2V0TWVzc2FnZShlbGVtZW50KTtcbiAgICBtZXNzYWdlICYmIHJlbW92ZWRQcm9wZXJ0aWVzLmZvckVhY2gocmVtb3ZlZFByb3BlcnR5ID0+IHtcbiAgICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgbWVzc2FnZSwge1xuICAgICAgICBbcmVtb3ZlZFByb3BlcnR5LmJpbmRpbmcubmFtZV06IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtZXNzYWdlID0gdGhpcy5fZ2V0T3JDcmVhdGVNZXNzYWdlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ05hbWUgPSBuZXdCaW5kaW5nLm5hbWUsXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBnZXREZWZhdWx0VmFsdWUobmV3UHJvcGVydHkpLFxuICAgICAgICBjaGFuZ2VkRWxlbWVudCA9IG1lc3NhZ2U7XG4gICAgICBsZXQgcHJvcGVydGllcyA9IHt9O1xuICAgICAgaWYgKHNob3VsZEtlZXBWYWx1ZShjaGFuZ2VkRWxlbWVudCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwcm9wZXJ0aWVzW25ld0JpbmRpbmdOYW1lXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICB0aGlzLl9tb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGNoYW5nZWRFbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYnBtbjpNZXNzYWdlI3plZWJlOnN1YnNjcmlwdGlvbiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVNZXNzYWdlWmVlYmVTdWJzY3JpcHRpb25Qcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEU7XG4gICAgfSk7XG4gICAgY29uc3QgcmVtb3ZlZFByb3BlcnRpZXMgPSBvbGRUZW1wbGF0ZSAmJiBvbGRUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEUgJiYgIW5ld1Byb3BlcnRpZXMuZmluZChuZXdQcm9wZXJ0eSA9PiBuZXdQcm9wZXJ0eS5iaW5kaW5nLm5hbWUgPT09IG9sZFByb3BlcnR5LmJpbmRpbmcubmFtZSk7XG4gICAgfSkgfHwgW107XG4gICAgaWYgKCFuZXdQcm9wZXJ0aWVzLmxlbmd0aCAmJiAhcmVtb3ZlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9nZXRPckNyZWF0ZU1lc3NhZ2UoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuICAgIGNvbnN0IG1lc3NhZ2VFeHRlbnNpb25FbGVtZW50cyA9IHRoaXMuX2dldE9yQ3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCwgbWVzc2FnZSk7XG4gICAgY29uc3QgemVlYmVTdWJzY3JpcHRpb24gPSB0aGlzLl9nZXRTdWJzY3JpcHRpb24oZWxlbWVudCwgbWVzc2FnZSk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvU2V0ID0gbmV3UHJvcGVydGllcy5yZWR1Y2UoKHByb3BlcnRpZXMsIG5ld1Byb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eSQxKG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nTmFtZSA9IG5ld0JpbmRpbmcubmFtZSxcbiAgICAgICAgbmV3UHJvcGVydHlWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShuZXdQcm9wZXJ0eSksXG4gICAgICAgIGNoYW5nZWRFbGVtZW50ID0gemVlYmVTdWJzY3JpcHRpb247XG4gICAgICBpZiAoc2hvdWxkS2VlcFZhbHVlKGNoYW5nZWRFbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgfVxuICAgICAgcHJvcGVydGllc1tuZXdCaW5kaW5nTmFtZV0gPSBuZXdQcm9wZXJ0eVZhbHVlO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSwge30pO1xuXG4gICAgLy8gVXBkYXRlIHplZWJlIFN1YnNjcmlwdGlvblxuICAgIGlmICh6ZWViZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCB6ZWViZVN1YnNjcmlwdGlvbiwgcHJvcGVydGllc1RvU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY3JlYXRlIG5ldyBTdWJzY3JpcHRpb25cbiAgICAgIGNvbnN0IG5ld1N1YnNjcmlwdGlvbiA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlN1YnNjcmlwdGlvbicsIHByb3BlcnRpZXNUb1NldCwgbWVzc2FnZSwgdGhpcy5fYnBtbkZhY3RvcnkpO1xuICAgICAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBtZXNzYWdlRXh0ZW5zaW9uRWxlbWVudHMsIHtcbiAgICAgICAgdmFsdWVzOiBbLi4ubWVzc2FnZUV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIG5ld1N1YnNjcmlwdGlvbl1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBvbGQgcHJvcGVydGllc1xuICAgIGlmICghb2xkVGVtcGxhdGUgfHwgIXplZWJlU3Vic2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb3BlcnRpZXNUb1JlbW92ZSA9IHJlbW92ZWRQcm9wZXJ0aWVzLnJlZHVjZSgocHJvcGVydGllcywgcmVtb3ZlZFByb3BlcnR5KSA9PiB7XG4gICAgICBwcm9wZXJ0aWVzW3JlbW92ZWRQcm9wZXJ0eS5iaW5kaW5nLm5hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSwge30pO1xuICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgemVlYmVTdWJzY3JpcHRpb24sIHByb3BlcnRpZXNUb1JlbW92ZSk7XG4gIH1cbiAgX3VwZGF0ZVplZWJlTW9kZWxlclRlbXBsYXRlT25SZWZlcmVuY2VkRWxlbWVudChlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChnZXRUZW1wbGF0ZUlkJDEobWVzc2FnZSkgPT09IG5ld1RlbXBsYXRlLmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgbWVzc2FnZSwge1xuICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc6IG5ld1RlbXBsYXRlLmlkXG4gICAgfSk7XG4gIH1cbiAgX2dldFN1YnNjcmlwdGlvbihlbGVtZW50LCBibykge1xuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50LCBibyk7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcbiAgICB9XG4gIH1cbiAgX2dldE9yQ3JlYXRlTWVzc2FnZShlbGVtZW50LCB0ZW1wbGF0ZSkge1xuICAgIHJldHVybiB0aGlzLl9nZXRNZXNzYWdlKGVsZW1lbnQpIHx8IHRoaXMuX2NyZWF0ZU1lc3NhZ2UoZWxlbWVudCwgdGVtcGxhdGUpO1xuICB9XG4gIF9jcmVhdGVNZXNzYWdlKGVsZW1lbnQsIHRlbXBsYXRlKSB7XG4gICAgbGV0IGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgaWYgKGlzKGJvLCAnYnBtbjpFdmVudCcpKSB7XG4gICAgICBibyA9IGJvLmdldCgnZXZlbnREZWZpbml0aW9ucycpWzBdO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAnemVlYmU6bW9kZWxlclRlbXBsYXRlJzogdGVtcGxhdGUuaWRcbiAgICB9KTtcbiAgICBtZXNzYWdlLiRwYXJlbnQgPSBnZXRSb290KGJvKTtcbiAgICB0aGlzLl9tb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGJvLCB7XG4gICAgICBtZXNzYWdlUmVmOiBtZXNzYWdlXG4gICAgfSk7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cbiAgX2dldE1lc3NhZ2UoZWxlbWVudCkge1xuICAgIGxldCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGlmIChpcyhibywgJ2JwbW46RXZlbnQnKSkge1xuICAgICAgYm8gPSBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIGJvICYmIGJvLmdldCgnbWVzc2FnZVJlZicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBgemVlYmU6Q2FsbGVkRWxlbWVudGAgcHJvcGVydGllcyBvZiBzcGVjaWZpZWQgYnVzaW5lc3Mgb2JqZWN0LiBUaGlzXG4gICAqIGNhbiBvbmx5IGV4aXN0IGluIGBicG1uOkV4dGVuc2lvbkVsZW1lbnRzYC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FsbGVkRWxlbWVudChlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09IFpFRUJFX0NBTExFRF9FTEVNRU5UO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBsZXQgY2FsbGVkRWxlbWVudCA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOkNhbGxlZEVsZW1lbnQnKTtcblxuICAgIC8vICgxKSByZW1vdmUgb2xkIGNhbGxlZCBlbGVtZW50IGlmIG5vIG5ldyBwcm9wZXJ0aWVzIHNwZWNpZmllZFxuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGNhbGxlZEVsZW1lbnQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKG5ld1Byb3BlcnR5KSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gbmV3UHJvcGVydHkuYmluZGluZy5wcm9wZXJ0eTtcblxuICAgICAgLy8gKDIpIHVwZGF0ZSBvbGQgY2FsbGVkIGVsZW1lbnRcbiAgICAgIGlmIChjYWxsZWRFbGVtZW50KSB7XG4gICAgICAgIGlmICghc2hvdWxkS2VlcFZhbHVlKGNhbGxlZEVsZW1lbnQsIG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgW3Byb3BlcnR5TmFtZV06IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogY2FsbGVkRWxlbWVudCxcbiAgICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAoMykgYWRkIG5ldyBjYWxsZWQgZWxlbWVudFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgW3Byb3BlcnR5TmFtZV06IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgY2FsbGVkRWxlbWVudCA9IGNyZWF0ZUNhbGxlZEVsZW1lbnQocHJvcGVydGllcywgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjYWxsZWRFbGVtZW50LiRwYXJlbnQgPSBidXNpbmVzc09iamVjdDtcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGNhbGxlZEVsZW1lbnRdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSByZW1vdmUgcHJvcGVydGllcyBubyBsb25nZXIgdGVtcGxhdGVkXG4gICAgY29uc3Qgb2xkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gWkVFQkVfQ0FMTEVEX0VMRU1FTlQgJiYgIW5ld1Byb3BlcnRpZXMuZmluZChuZXdQcm9wZXJ0eSA9PiBuZXdQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5ID09PSBvbGRQcm9wZXJ0eS5iaW5kaW5nLnByb3BlcnR5KTtcbiAgICB9KSB8fCBbXTtcbiAgICBvbGRQcm9wZXJ0aWVzLmZvckVhY2gob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgW29sZFByb3BlcnR5LmJpbmRpbmcucHJvcGVydHldOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBjYWxsZWRFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgZWxlbWVudFR5cGUuXG4gICAqIFRha2VzIGludG8gYWNjb3VudCB0aGUgZXZlbnREZWZpbml0aW9uIGZvciBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlRWxlbWVudFR5cGUoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5ldyB0YXNrIHR5cGVcbiAgICBjb25zdCBuZXdUeXBlID0gbmV3VGVtcGxhdGUuZWxlbWVudFR5cGU7XG4gICAgaWYgKCFuZXdUeXBlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBUT0RPKG5yZSk6IGhhbmRsZSBvbGQgZXZlbnQgZGVmaW5pdGlvblxuICAgIGNvbnN0IG9sZFR5cGUgPSBvbGRUZW1wbGF0ZSAmJiBvbGRUZW1wbGF0ZS5lbGVtZW50VHlwZSB8fCB7XG4gICAgICB2YWx1ZTogZWxlbWVudC50eXBlXG4gICAgfTtcblxuICAgIC8vIERvIG5vdCByZXBsYWNlIGlmIHRoZSBlbGVtZW50IHR5cGUgZGlkIG5vdCBjaGFuZ2VcbiAgICBpZiAob2xkVHlwZSAmJiBvbGRUeXBlLnZhbHVlID09PSBuZXdUeXBlLnZhbHVlICYmIG9sZFR5cGUuZXZlbnREZWZpbml0aW9uID09PSBuZXdUeXBlLmV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0ge1xuICAgICAgdHlwZTogbmV3VHlwZS52YWx1ZVxuICAgIH07XG4gICAgaWYgKG5ld1R5cGUuZXZlbnREZWZpbml0aW9uKSB7XG4gICAgICByZXBsYWNlbWVudC5ldmVudERlZmluaXRpb25UeXBlID0gbmV3VHlwZS5ldmVudERlZmluaXRpb247XG4gICAgfVxuICAgIGNvbnN0IHJlcGxhY2VkRWxlbWVudCA9IHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHJlcGxhY2VtZW50KTtcbiAgICByZXR1cm4gcmVwbGFjZWRFbGVtZW50O1xuICB9XG59O1xuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlciQxLiRpbmplY3QgPSBbJ2JwbW5GYWN0b3J5JywgJ2JwbW5SZXBsYWNlJywgJ2NvbW1hbmRTdGFjaycsICdtb2RlbGluZycsICdpbmplY3RvciddO1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy9cblxuLyoqXG4gKiBGaW5kIGJ1c2luZXNzIG9iamVjdCBtYXRjaGluZyBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZmluZEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxuICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKGJpbmRpbmdUeXBlKSkge1xuICAgIHJldHVybiBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOmlucHV0JyB8fCBiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOm91dHB1dCcpIHtcbiAgICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOklvTWFwcGluZycpO1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSAnemVlYmU6aW5wdXQnKSB7XG4gICAgICByZXR1cm4gZmluZChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3plZWJlOmlucHV0UGFyYW1ldGVycycpLCBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmdldCgnemVlYmU6dGFyZ2V0JykgPT09IGJpbmRpbmcubmFtZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmluZChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3plZWJlOm91dHB1dFBhcmFtZXRlcnMnKSwgZnVuY3Rpb24gKG91dHB1dCkge1xuICAgICAgICByZXR1cm4gb3V0cHV0LmdldCgnemVlYmU6c291cmNlJykgPT09IGJpbmRpbmcuc291cmNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOnRhc2tIZWFkZXInKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrSGVhZGVycycpO1xuICAgIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd6ZWViZTp2YWx1ZXMnKSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZ2V0KCd6ZWViZTprZXknKSA9PT0gYmluZGluZy5rZXk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGJpbmRpbmdUeXBlID09PSAnemVlYmU6cHJvcGVydHknKSB7XG4gICAgY29uc3QgemVlYmVQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6UHJvcGVydGllcycpO1xuICAgIGlmICghemVlYmVQcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykuZmluZCh2YWx1ZSA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUuZ2V0KCduYW1lJykgPT09IGJpbmRpbmcubmFtZTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgb2xkIHByb3BlcnR5IG1hdGNoaW5nIHNwZWNpZmllZCBuZXcgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbmV3UHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaW5kT2xkUHJvcGVydHkkMShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpIHtcbiAgaWYgKCFvbGRUZW1wbGF0ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvbGRQcm9wZXJ0aWVzID0gb2xkVGVtcGxhdGUucHJvcGVydGllcyxcbiAgICBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICBuZXdCaW5kaW5nTmFtZSA9IG5ld0JpbmRpbmcubmFtZSxcbiAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAncHJvcGVydHknKSB7XG4gICAgcmV0dXJuIGZpbmQob2xkUHJvcGVydGllcywgZnVuY3Rpb24gKG9sZFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ05hbWUgPSBvbGRCaW5kaW5nLm5hbWUsXG4gICAgICAgIG9sZEJpbmRpbmdUeXBlID0gb2xkQmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG9sZEJpbmRpbmdUeXBlID09PSAncHJvcGVydHknICYmIG9sZEJpbmRpbmdOYW1lID09PSBuZXdCaW5kaW5nTmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKG5ld0JpbmRpbmdUeXBlKSkge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZFByb3BlcnR5TmFtZSA9IGdldFRhc2tEZWZpbml0aW9uUHJvcGVydHlOYW1lKG9sZEJpbmRpbmcpLFxuICAgICAgICBuZXdQcm9wZXJ0eU5hbWUgPSBnZXRUYXNrRGVmaW5pdGlvblByb3BlcnR5TmFtZShuZXdCaW5kaW5nKTtcbiAgICAgIHJldHVybiBvbGRQcm9wZXJ0eU5hbWUgPT09IG5ld1Byb3BlcnR5TmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTppbnB1dCcpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nTmFtZSA9IG9sZEJpbmRpbmcubmFtZSxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICd6ZWViZTppbnB1dCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmdOYW1lID09PSBuZXdCaW5kaW5nTmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICd6ZWViZTpvdXRwdXQnKSB7XG4gICAgcmV0dXJuIGZpbmQob2xkUHJvcGVydGllcywgZnVuY3Rpb24gKG9sZFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICd6ZWViZTpvdXRwdXQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRCaW5kaW5nLnNvdXJjZSA9PT0gbmV3QmluZGluZy5zb3VyY2U7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6dGFza0hlYWRlcicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIGlmIChvbGRCaW5kaW5nVHlwZSAhPT0gJ3plZWJlOnRhc2tIZWFkZXInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvbGRCaW5kaW5nLmtleSA9PT0gbmV3QmluZGluZy5rZXk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnemVlYmU6cHJvcGVydHknKSB7XG4gICAgcmV0dXJuIG9sZFByb3BlcnRpZXMuZmluZChvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICd6ZWViZTpwcm9wZXJ0eScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmcubmFtZSA9PT0gbmV3QmluZGluZy5uYW1lO1xuICAgIH0pO1xuICB9XG4gIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gTUVTU0FHRV9QUk9QRVJUWV9UWVBFKSB7XG4gICAgcmV0dXJuIG9sZFByb3BlcnRpZXMuZmluZChvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQmluZGluZy5uYW1lID09PSBuZXdCaW5kaW5nLm5hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSBNRVNTQUdFX1pFRUJFX1NVQlNDUklQVElPTl9QUk9QRVJUWV9UWVBFKSB7XG4gICAgcmV0dXJuIG9sZFByb3BlcnRpZXMuZmluZChvbGRQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmcubmFtZSA9PT0gbmV3QmluZGluZy5uYW1lO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZXhpc3RpbmcgcHJvcGVydHkgc2hvdWxkIGJlIGtlZXB0LiBUaGlzIGlzIHRoZSBjYXNlIGlmXG4gKiAgLSBhbiBvbGQgdGVtcGxhdGUgd2FzIHNldCBhbmQgdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdFxuICogIC0gbm8gdGVtcGxhdGUgd2FzIHNldCBidXQgdGhlIHByb3BlcnR5IHdhcyBzZXQgbWFudWFsbHlcbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG5ld1Byb3BlcnR5XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNob3VsZEtlZXBWYWx1ZShlbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpIHtcbiAgLy8gXCJIaWRkZW5cIiB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgYSBjb25zdGFudFxuICBpZiAobmV3UHJvcGVydHkudHlwZSA9PT0gJ0hpZGRlbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBEcm9wZG93bnMgc2hvdWxkIGtlZXAgZXhpc3RpbmcgY29uZmlndXJhdGlvblxuICAvLyBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vYnBtbi1qcy1wcm9wZXJ0aWVzLXBhbmVsL2lzc3Vlcy83NjdcbiAgaWYgKG5ld1Byb3BlcnR5LnR5cGUgPT09ICdEcm9wZG93bicpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlJDEoZWxlbWVudCwgbmV3UHJvcGVydHkpO1xuXG4gICAgLy8gb25seSBrZWVwIHZhbHVlIGlmIG9sZCB2YWx1ZSBpcyBhIHZhbGlkIG9wdGlvblxuICAgIHJldHVybiBuZXdQcm9wZXJ0eS5jaG9pY2VzICYmIG5ld1Byb3BlcnR5LmNob2ljZXMuc29tZShjaG9pY2UgPT4gY2hvaWNlLnZhbHVlID09PSBjdXJyZW50VmFsdWUpO1xuICB9XG5cbiAgLy8ga2VlcCBleGlzdGluZyBvbGQgcHJvcGVydHkgaWZcbiAgLy8gdXNlciBjaGFuZ2VkIGl0IGZyb20gdGhlIG9yaWdpbmFsXG4gIGlmIChvbGRQcm9wZXJ0eSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUNoYW5nZWQkMShlbGVtZW50LCBvbGRQcm9wZXJ0eSk7XG4gIH1cblxuICAvLyBrZWVwIGV4aXN0aW5nIHByb3BlcnR5IHZhbHVlXG4gIHJldHVybiAhIWdldFByb3BlcnR5VmFsdWUkMShlbGVtZW50LCBuZXdQcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBwcm9wZXJ0eSB3YXMgY2hhbmdlZCBhZnRlciBiZWluZyBzZXQgYnkgdGVtcGxhdGUuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcHJvcGVydHlDaGFuZ2VkJDEoZWxlbWVudCwgb2xkUHJvcGVydHkpIHtcbiAgY29uc3Qgb2xkUHJvcGVydHlWYWx1ZSA9IG9sZFByb3BlcnR5LnZhbHVlO1xuICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZSQxKGVsZW1lbnQsIG9sZFByb3BlcnR5KSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUkMShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBpZiAoIWJ1c2luZXNzT2JqZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGJpbmRpbmcgPSBwcm9wZXJ0eS5iaW5kaW5nLFxuICAgIGJpbmRpbmdOYW1lID0gYmluZGluZy5uYW1lLFxuICAgIGJpbmRpbmdUeXBlID0gYmluZGluZy50eXBlO1xuICBpZiAoYmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eScpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KGJpbmRpbmdOYW1lKTtcbiAgfVxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKGJpbmRpbmdUeXBlKSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoZ2V0VGFza0RlZmluaXRpb25Qcm9wZXJ0eU5hbWUoYmluZGluZykpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOmlucHV0Jykge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3plZWJlOnNvdXJjZScpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gJ3plZWJlOm91dHB1dCcpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCd6ZWViZTp0YXJnZXQnKTtcbiAgfVxuICBpZiAoYmluZGluZ1R5cGUgPT09ICd6ZWViZTp0YXNrSGVhZGVyJykge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ3plZWJlOnZhbHVlJyk7XG4gIH1cbiAgaWYgKGJpbmRpbmdUeXBlID09PSAnemVlYmU6cHJvcGVydHknKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnemVlYmU6dmFsdWUnKTtcbiAgfVxuICBpZiAoYmluZGluZ1R5cGUgPT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoYmluZGluZ05hbWUpO1xuICB9XG4gIGlmIChiaW5kaW5nVHlwZSA9PT0gTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRSkge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoYmluZGluZ05hbWUpO1xuICB9XG59XG5mdW5jdGlvbiByZW1vdmUkMShhcnJheSwgaXRlbSkge1xuICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XG4gIGlmIChpc1VuZGVmaW5lZCQxKGluZGV4KSkge1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICByZXR1cm4gYXJyYXk7XG59XG5mdW5jdGlvbiBoYXNNZXNzYWdlUHJvcGVydGllcyh0ZW1wbGF0ZSkge1xuICByZXR1cm4gdGVtcGxhdGUucHJvcGVydGllcy5zb21lKHAgPT4gTUVTU0FHRV9CSU5ESU5HX1RZUEVTLmluY2x1ZGVzKHAuYmluZGluZy50eXBlKSk7XG59XG5cbmNsYXNzIFJlbW92ZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihtb2RlbGluZywgZWxlbWVudEZhY3RvcnksIGVsZW1lbnRSZWdpc3RyeSwgY2FudmFzLCBicG1uRmFjdG9yeSwgcmVwbGFjZSwgY29tbWFuZFN0YWNrKSB7XG4gICAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgICB0aGlzLl9lbGVtZW50RmFjdG9yeSA9IGVsZW1lbnRGYWN0b3J5O1xuICAgIHRoaXMuX2VsZW1lbnRSZWdpc3RyeSA9IGVsZW1lbnRSZWdpc3RyeTtcbiAgICB0aGlzLl9jYW52YXMgPSBjYW52YXM7XG4gICAgdGhpcy5fYnBtbkZhY3RvcnkgPSBicG1uRmFjdG9yeTtcbiAgICB0aGlzLl9yZXBsYWNlID0gcmVwbGFjZTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2sgPSBjb21tYW5kU3RhY2s7XG4gIH1cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudFxuICAgIH0gPSBjb250ZXh0O1xuICAgIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgICAgY29udGV4dC5uZXdFbGVtZW50ID0gdGhpcy5fcmVtb3ZlVGVtcGxhdGUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQubmV3RWxlbWVudCA9IHRoaXMuX3JlbW92ZVJvb3RUZW1wbGF0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgX3JlbW92ZVRlbXBsYXRlKGVsZW1lbnQpIHtcbiAgICBjb25zdCByZXBsYWNlID0gdGhpcy5fcmVwbGFjZTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IHR5cGUgPSBidXNpbmVzc09iamVjdC4kdHlwZSxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGUgPSB0aGlzLl9nZXRFdmVudERlZmluaXRpb25UeXBlKGJ1c2luZXNzT2JqZWN0KTtcbiAgICBjb25zdCBuZXdCdXNpbmVzc09iamVjdCA9IHRoaXMuX2NyZWF0ZUJsYW5rQnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlcGxhY2UucmVwbGFjZUVsZW1lbnQoZWxlbWVudCwge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBuZXdCdXNpbmVzc09iamVjdCxcbiAgICAgIGV2ZW50RGVmaW5pdGlvblR5cGU6IGV2ZW50RGVmaW5pdGlvblR5cGVcbiAgICB9LCB7XG4gICAgICBjcmVhdGVFbGVtZW50c0JlaGF2aW9yOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0ZW1wbGF0ZSBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJuIHtkanMubW9kZWwuQmFzZX0gdGhlIHVwZGF0ZWQgZWxlbWVudFxuICAgKi9cbiAgX3JlbW92ZVJvb3RUZW1wbGF0ZShlbGVtZW50KSB7XG4gICAgdmFyIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmcsXG4gICAgICBlbGVtZW50RmFjdG9yeSA9IHRoaXMuX2VsZW1lbnRGYWN0b3J5LFxuICAgICAgZWxlbWVudFJlZ2lzdHJ5ID0gdGhpcy5fZWxlbWVudFJlZ2lzdHJ5LFxuICAgICAgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gICAgLy8gV2UgYXJlIGluc2lkZSBhIGNvbGxhcHNlZCBzdWJwcm9jZXNzLCBtb3ZlIHVwIHRvIHRoZSBwYXJlbnQgYmVmb3JlIHJlcGxhY2luZyB0aGUgY29sbGFwc2VkIG9iamVjdFxuICAgIGlmIChpc1BsYW5lKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBzaGFwZUlkID0gZ2V0U2hhcGVJZEZyb21QbGFuZShlbGVtZW50KTtcbiAgICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudFJlZ2lzdHJ5LmdldChzaGFwZUlkKTtcbiAgICAgIGlmIChzaGFwZSAmJiBzaGFwZSAhPT0gZWxlbWVudCkge1xuICAgICAgICBjYW52YXMuc2V0Um9vdEVsZW1lbnQoY2FudmFzLmZpbmRSb290KHNoYXBlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVUZW1wbGF0ZShzaGFwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgY29uc3QgdHlwZSA9IGJ1c2luZXNzT2JqZWN0LiR0eXBlO1xuICAgIGNvbnN0IG5ld0J1c2luZXNzT2JqZWN0ID0gdGhpcy5fY3JlYXRlQmxhbmtCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBuZXdSb290ID0gZWxlbWVudEZhY3RvcnkuY3JlYXRlKCdyb290Jywge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGJ1c2luZXNzT2JqZWN0OiBuZXdCdXNpbmVzc09iamVjdFxuICAgIH0pO1xuICAgIHRoaXMuX2NvbW1hbmRTdGFjay5leGVjdXRlKCdjYW52YXMudXBkYXRlUm9vdCcsIHtcbiAgICAgIG5ld1Jvb3Q6IG5ld1Jvb3QsXG4gICAgICBvbGRSb290OiBlbGVtZW50XG4gICAgfSk7XG4gICAgbW9kZWxpbmcubW92ZUVsZW1lbnRzKGVsZW1lbnQuY2hpbGRyZW4sIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSwgbmV3Um9vdCk7XG4gICAgcmV0dXJuIG5ld1Jvb3Q7XG4gIH1cbiAgX2dldEV2ZW50RGVmaW5pdGlvblR5cGUoYnVzaW5lc3NPYmplY3QpIHtcbiAgICBpZiAoIWJ1c2luZXNzT2JqZWN0LmV2ZW50RGVmaW5pdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBldmVudERlZmluaXRpb24gPSBidXNpbmVzc09iamVjdC5ldmVudERlZmluaXRpb25zWzBdO1xuICAgIGlmICghZXZlbnREZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50RGVmaW5pdGlvbi4kdHlwZTtcbiAgfVxuICBfY3JlYXRlQmxhbmtCdXNpbmVzc09iamVjdChlbGVtZW50KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeTtcbiAgICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgICAgbmV3Qm8gPSBicG1uRmFjdG9yeS5jcmVhdGUoYm8uJHR5cGUpLFxuICAgICAgbGFiZWwgPSBnZXRMYWJlbChlbGVtZW50KTtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICByZXR1cm4gbmV3Qm87XG4gICAgfVxuICAgIGlmIChpcyhlbGVtZW50LCAnYnBtbjpHcm91cCcpKSB7XG4gICAgICBuZXdCby5jYXRlZ29yeVZhbHVlUmVmID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkNhdGVnb3J5VmFsdWUnKTtcbiAgICB9XG4gICAgc2V0TGFiZWwoe1xuICAgICAgYnVzaW5lc3NPYmplY3Q6IG5ld0JvXG4gICAgfSwgbGFiZWwpO1xuICAgIHJldHVybiBuZXdCbztcbiAgfVxufVxuUmVtb3ZlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWydtb2RlbGluZycsICdlbGVtZW50RmFjdG9yeScsICdlbGVtZW50UmVnaXN0cnknLCAnY2FudmFzJywgJ2JwbW5GYWN0b3J5JywgJ3JlcGxhY2UnLCAnY29tbWFuZFN0YWNrJ107XG5cbi8qKlxuICogQSBoYW5kbGVyIHRoYXQgY29tYmluZXMgYW5kIGV4ZWN1dGVzIG11bHRpcGxlIGNvbW1hbmRzLlxuICpcbiAqIEFsbCB1cGRhdGVzIGFyZSBidW5kbGVkIG9uIHRoZSBjb21tYW5kIHN0YWNrIGFuZCBleGVjdXRlZCBpbiBvbmUgc3RlcC5cbiAqIFRoaXMgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXZlcnQgdGhlIGNoYW5nZXMgaW4gb25lIHN0ZXAuXG4gKlxuICogRXhhbXBsZSB1c2UgY2FzZTogcmVtb3ZlIHRoZSBjYW11bmRhOmZvcm1LZXkgYXR0cmlidXRlIGFuZCBpbiBhZGRpdGlvblxuICogYWRkIGFsbCBmb3JtIGZpZWxkcyBuZWVkZWQgZm9yIHRoZSBjYW11bmRhOmZvcm1EYXRhIHByb3BlcnR5LlxuICovXG5jbGFzcyBNdWx0aUNvbW1hbmRIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoY29tbWFuZFN0YWNrKSB7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICB9XG4gIHByZUV4ZWN1dGUoY29udGV4dCkge1xuICAgIGNvbnN0IGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcbiAgICBmb3JFYWNoKGNvbnRleHQsIGZ1bmN0aW9uIChjb21tYW5kKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZShjb21tYW5kLmNtZCwgY29tbWFuZC5jb250ZXh0KTtcbiAgICB9KTtcbiAgfVxufVxuTXVsdGlDb21tYW5kSGFuZGxlci4kaW5qZWN0ID0gWydjb21tYW5kU3RhY2snXTtcblxubGV0IEVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kcyQxID0gY2xhc3MgRWxlbWVudFRlbXBsYXRlc0NvbW1hbmRzIHtcbiAgY29uc3RydWN0b3IoY29tbWFuZFN0YWNrLCBlbGVtZW50VGVtcGxhdGVzLCBldmVudEJ1cykge1xuICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoJ2VsZW1lbnQtdGVtcGxhdGVzLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBNdWx0aUNvbW1hbmRIYW5kbGVyKTtcbiAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdwcm9wZXJ0aWVzUGFuZWwuemVlYmUuY2hhbmdlVGVtcGxhdGUnLCBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyJDEpO1xuICAgIGNvbW1hbmRTdGFjay5yZWdpc3RlckhhbmRsZXIoJ3Byb3BlcnRpZXNQYW5lbC5yZW1vdmVUZW1wbGF0ZScsIFJlbW92ZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIpO1xuXG4gICAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBzaGFwZSBjcmVhdGlvblxuICAgIGV2ZW50QnVzLm9uKFsnY29tbWFuZFN0YWNrLnNoYXBlLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnXSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBoaW50cyA9IHt9LFxuICAgICAgICAgIHNoYXBlXG4gICAgICAgIH1cbiAgICAgIH0gPSBldmVudDtcbiAgICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgICBhcHBseURlZmF1bHRUZW1wbGF0ZSQxKHNoYXBlLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gYXBwbHkgZGVmYXVsdCBlbGVtZW50IHRlbXBsYXRlcyBvbiBjb25uZWN0aW9uIGNyZWF0aW9uXG4gICAgZXZlbnRCdXMub24oWydjb21tYW5kU3RhY2suY29ubmVjdGlvbi5jcmVhdGUucG9zdEV4ZWN1dGVkJ10sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgaGludHMgPSB7fSxcbiAgICAgICAgICBjb25uZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0gPSBldmVudDtcbiAgICAgIGlmIChoaW50cy5jcmVhdGVFbGVtZW50c0JlaGF2aW9yICE9PSBmYWxzZSkge1xuICAgICAgICBhcHBseURlZmF1bHRUZW1wbGF0ZSQxKGNvbm5lY3Rpb24sIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5FbGVtZW50VGVtcGxhdGVzQ29tbWFuZHMkMS4kaW5qZWN0ID0gWydjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cyddO1xuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUkMShlbGVtZW50LCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2spIHtcbiAgaWYgKCFlbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KSAmJiBlbGVtZW50VGVtcGxhdGVzLmdldERlZmF1bHQoZWxlbWVudCkpIHtcbiAgICBjb25zdCBjb21tYW5kID0gJ3Byb3BlcnRpZXNQYW5lbC56ZWViZS5jaGFuZ2VUZW1wbGF0ZSc7XG4gICAgY29uc3QgY29tbWFuZENvbnRleHQgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGU6IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0RGVmYXVsdChlbGVtZW50KVxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZCwgY29tbWFuZENvbnRleHQpO1xuICB9XG59XG5cbnZhciBjb21tYW5kc01vZHVsZSQxID0ge1xuICBfX2luaXRfXzogWydlbGVtZW50VGVtcGxhdGVDb21tYW5kcyddLFxuICBlbGVtZW50VGVtcGxhdGVDb21tYW5kczogWyd0eXBlJywgRWxlbWVudFRlbXBsYXRlc0NvbW1hbmRzJDFdXG59O1xuXG5jbGFzcyBQcm9wZXJ0eUJpbmRpbmdQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgYnVzaW5lc3NPYmplY3RbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5jbGFzcyBUYXNrRGVmaW5pdGlvblR5cGVCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFRhc2tEZWZpbml0aW9uUHJvcGVydHlOYW1lKHByb3BlcnR5LmJpbmRpbmcpO1xuICAgIGNvbnN0IHRhc2tEZWZpbml0aW9uID0gZW5zdXJlRXh0ZW5zaW9uKGVsZW1lbnQsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicsIGJwbW5GYWN0b3J5KTtcbiAgICB0YXNrRGVmaW5pdGlvbi5zZXQocHJvcGVydHlOYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuY2xhc3MgSW5wdXRCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgY29uc3QgaW9NYXBwaW5nID0gZW5zdXJlRXh0ZW5zaW9uKGVsZW1lbnQsICd6ZWViZTpJb01hcHBpbmcnLCBicG1uRmFjdG9yeSk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZUlucHV0UGFyYW1ldGVyJDEoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICBpbnB1dC4kcGFyZW50ID0gaW9NYXBwaW5nO1xuICAgIGlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpLnB1c2goaW5wdXQpO1xuICB9XG59XG5cbmNsYXNzIE91dHB1dEJpbmRpbmdQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5LFxuICAgICAgYnBtbkZhY3RvcnlcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KTtcbiAgICBjb25zdCBpb01hcHBpbmcgPSBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgJ3plZWJlOklvTWFwcGluZycsIGJwbW5GYWN0b3J5KTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSh2YWx1ZSwgcHJvcGVydHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IGNyZWF0ZU91dHB1dFBhcmFtZXRlciQxKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgb3V0cHV0LiRwYXJlbnQgPSBpb01hcHBpbmc7XG4gICAgaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpLnB1c2gob3V0cHV0KTtcbiAgfVxufVxuXG5jbGFzcyBUYXNrSGVhZGVyQmluZGluZ1Byb3ZpZGVyIHtcbiAgc3RhdGljIGNyZWF0ZShlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgcHJvcGVydHksXG4gICAgICBicG1uRmFjdG9yeVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpbmRpbmdcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IHRhc2tIZWFkZXJzID0gZW5zdXJlRXh0ZW5zaW9uKGVsZW1lbnQsICd6ZWViZTpUYXNrSGVhZGVycycsIGJwbW5GYWN0b3J5KTtcbiAgICBjb25zdCBoZWFkZXIgPSBjcmVhdGVUYXNrSGVhZGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgaGVhZGVyLiRwYXJlbnQgPSB0YXNrSGVhZGVycztcbiAgICB0YXNrSGVhZGVycy5nZXQoJ3ZhbHVlcycpLnB1c2goaGVhZGVyKTtcbiAgfVxufVxuXG5jbGFzcyBaZWViZVByb3BlcnRpZXNQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5LFxuICAgICAgYnBtbkZhY3RvcnlcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KTtcbiAgICBjb25zdCB6ZWViZVByb3BlcnRpZXMgPSBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgJ3plZWJlOlByb3BlcnRpZXMnLCBicG1uRmFjdG9yeSk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB6ZWViZVByb3BlcnR5ID0gY3JlYXRlWmVlYmVQcm9wZXJ0eShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIHplZWJlUHJvcGVydHkuJHBhcmVudCA9IHplZWJlUHJvcGVydGllcztcbiAgICB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJykucHVzaCh6ZWViZVByb3BlcnR5KTtcbiAgfVxufVxuXG5jbGFzcyBNZXNzYWdlUHJvcGVydHlCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBicG1uRmFjdG9yeSxcbiAgICAgIHByb3BlcnR5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnQnKSkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgICB9XG4gICAgbGV0IG1lc3NhZ2UgPSBidXNpbmVzc09iamVjdC5nZXQoJ21lc3NhZ2VSZWYnKTtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46TWVzc2FnZScsIHtcbiAgICAgICAgJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZSc6IGdldFRlbXBsYXRlSWQkMShlbGVtZW50KVxuICAgICAgfSk7XG4gICAgICBidXNpbmVzc09iamVjdC5zZXQoJ21lc3NhZ2VSZWYnLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgbWVzc2FnZS5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIE1lc3NhZ2VaZWViZVN1YnNjcmlwdGlvbkJpbmRpbmdQcm92aWRlciB7XG4gIHN0YXRpYyBjcmVhdGUoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIGJwbW5GYWN0b3J5LFxuICAgICAgcHJvcGVydHlcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWVcbiAgICB9ID0gYmluZGluZztcbiAgICBjb25zdCB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgbGV0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFdmVudCcpKSB7XG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXZlbnREZWZpbml0aW9ucycpWzBdO1xuICAgIH1cbiAgICBsZXQgbWVzc2FnZSA9IGJ1c2luZXNzT2JqZWN0LmdldCgnbWVzc2FnZVJlZicpO1xuICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpNZXNzYWdlJywge1xuICAgICAgICAnemVlYmU6bW9kZWxlclRlbXBsYXRlJzogZ2V0VGVtcGxhdGVJZCQxKGVsZW1lbnQpXG4gICAgICB9KTtcbiAgICAgIGJ1c2luZXNzT2JqZWN0LnNldCgnbWVzc2FnZVJlZicsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBlbnN1cmVFeHRlbnNpb24obWVzc2FnZSwgJ3plZWJlOlN1YnNjcmlwdGlvbicsIGJwbW5GYWN0b3J5KTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSh2YWx1ZSwgcHJvcGVydHkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1YnNjcmlwdGlvbi5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIENhbGxlZEVsZW1lbnRCaW5kaW5nUHJvdmlkZXIge1xuICBzdGF0aWMgY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0eTogcHJvcGVydHlOYW1lXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3QgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUocHJvcGVydHkpO1xuICAgIGNvbnN0IGNhbGxlZEVsZW1lbnQgPSBlbnN1cmVFeHRlbnNpb24oZWxlbWVudCwgJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCBicG1uRmFjdG9yeSk7XG5cbiAgICAvLyBUT0RPKEBiYXJtYWMpOiByZW1vdmUgaWYgd2UgZGVjaWRlIHRvIHN1cHBvcnQgcHJvcGFnYXRpb24gaW4gdGVtcGxhdGVzXG4gICAgZW5zdXJlTm9Qcm9wYWdhdGlvbihjYWxsZWRFbGVtZW50KTtcbiAgICBjYWxsZWRFbGVtZW50LnNldChwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZW5zdXJlTm9Qcm9wYWdhdGlvbihjYWxsZWRFbGVtZW50KSB7XG4gIGNhbGxlZEVsZW1lbnQuc2V0KCdwcm9wYWdhdGVBbGxDaGlsZFZhcmlhYmxlcycsIGZhbHNlKTtcbiAgY2FsbGVkRWxlbWVudC5zZXQoJ3Byb3BhZ2F0ZUFsbFBhcmVudFZhcmlhYmxlcycsIGZhbHNlKTtcbn1cblxuY29uc3QgUFJJTUlUSVZFX01PRERMRV9UWVBFUyQxID0gWydCb29sZWFuJywgJ0ludGVnZXInLCAnU3RyaW5nJ107XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSkge1xuICBjb25zdCByYXdWYWx1ZSA9IGdldFJhd1Byb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpO1xuICBjb25zdCB7XG4gICAgdHlwZVxuICB9ID0gcHJvcGVydHk7XG4gIGlmICh0eXBlID09PSAnQm9vbGVhbicpIHtcbiAgICByZXR1cm4gZ2V0Qm9vbGVhblByb3BlcnR5VmFsdWUocmF3VmFsdWUpO1xuICB9XG4gIHJldHVybiByYXdWYWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFJhd1Byb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHksIHNjb3BlKSB7XG4gIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSAnJztcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBwcm9wZXJ0eTogYmluZGluZ1Byb3BlcnR5LFxuICAgIHR5cGVcbiAgfSA9IGJpbmRpbmc7XG5cbiAgLy8gcHJvcGVydHlcbiAgaWYgKHR5cGUgPT09ICdwcm9wZXJ0eScpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJ1c2luZXNzT2JqZWN0LmdldChuYW1lKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkJDEodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvLyB6ZWViZTp0YXNrRGVmaW5pdGlvblxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgY29uc3QgdGFza0RlZmluaXRpb24gPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpO1xuICAgIGlmICh0YXNrRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHR5cGUgPT09IFpFRUJFX1RBU0tfREVGSU5JVElPTl9UWVBFX1RZUEUpIHtcbiAgICAgICAgcmV0dXJuIHRhc2tEZWZpbml0aW9uLmdldCgndHlwZScpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBaRUVCRV9UQVNLX0RFRklOSVRJT04pIHtcbiAgICAgICAgcmV0dXJuIHRhc2tEZWZpbml0aW9uLmdldChiaW5kaW5nUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmIChJT19CSU5ESU5HX1RZUEVTJDEuaW5jbHVkZXModHlwZSkpIHtcbiAgICBjb25zdCBpb01hcHBpbmcgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpJb01hcHBpbmcnKTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyB6ZWViZTpJbnB1dFxuICAgIGlmICh0eXBlID09PSBaRUJCRV9JTlBVVF9UWVBFKSB7XG4gICAgICBjb25zdCBpbnB1dFBhcmFtZXRlciA9IGZpbmRJbnB1dFBhcmFtZXRlciQxKGlvTWFwcGluZywgYmluZGluZyk7XG4gICAgICBpZiAoaW5wdXRQYXJhbWV0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0UGFyYW1ldGVyLmdldCgnc291cmNlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIC8vIHplZWJlOk91dHB1dFxuICAgIGlmICh0eXBlID09PSBaRUVCRV9PVVRQVVRfVFlQRSkge1xuICAgICAgY29uc3Qgb3V0cHV0UGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlciQxKGlvTWFwcGluZywgYmluZGluZyk7XG4gICAgICBpZiAob3V0cHV0UGFyYW1ldGVyKSB7XG4gICAgICAgIHJldHVybiBvdXRwdXRQYXJhbWV0ZXIuZ2V0KCd0YXJnZXQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gemVlYmU6dGFza0hlYWRlcnNcbiAgaWYgKHR5cGUgPT09IFpFRUJFX1RBU0tfSEVBREVSX1RZUEUpIHtcbiAgICBjb25zdCB0YXNrSGVhZGVycyA9IGZpbmRFeHRlbnNpb24kMShidXNpbmVzc09iamVjdCwgJ3plZWJlOlRhc2tIZWFkZXJzJyk7XG4gICAgaWYgKCF0YXNrSGVhZGVycykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyID0gZmluZFRhc2tIZWFkZXIodGFza0hlYWRlcnMsIGJpbmRpbmcpO1xuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuZ2V0KCd2YWx1ZScpO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgLy8gemVlYmU6UHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IFpFRUJFX1BST1BFUlRZX1RZUEUpIHtcbiAgICBjb25zdCB6ZWViZVByb3BlcnRpZXMgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpQcm9wZXJ0aWVzJyk7XG4gICAgaWYgKHplZWJlUHJvcGVydGllcykge1xuICAgICAgY29uc3QgemVlYmVQcm9wZXJ0eSA9IGZpbmRaZWViZVByb3BlcnR5KHplZWJlUHJvcGVydGllcywgYmluZGluZyk7XG4gICAgICBpZiAoemVlYmVQcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gemVlYmVQcm9wZXJ0eS5nZXQoJ3ZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvLyBicG1uOk1lc3NhZ2UjcHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IE1FU1NBR0VfUFJPUEVSVFlfVFlQRSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgY29uc3QgdmFsdWUgPSBtZXNzYWdlID8gbWVzc2FnZS5nZXQobmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFpc1VuZGVmaW5lZCQxKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgLy8gYnBtbjpNZXNzYWdlI3plZWJlOnN1YnNjcmlwdGlvbiNwcm9wZXJ0eVxuICBpZiAodHlwZSA9PT0gTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGZpbmRFeHRlbnNpb24kMShtZXNzYWdlLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHN1YnNjcmlwdGlvbiA/IHN1YnNjcmlwdGlvbi5nZXQobmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkJDEodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uZ2V0KG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgLy8gemVlYmU6Y2FsbGVkRWxlbWVudFxuICBpZiAodHlwZSA9PT0gWkVFQkVfQ0FMTEVEX0VMRU1FTlQpIHtcbiAgICBjb25zdCBjYWxsZWRFbGVtZW50ID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6Q2FsbGVkRWxlbWVudCcpO1xuICAgIHJldHVybiBjYWxsZWRFbGVtZW50ID8gY2FsbGVkRWxlbWVudC5nZXQoYmluZGluZ1Byb3BlcnR5KSA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8vIHNob3VsZCBuZXZlciB0aHJvdyBhcyB0ZW1wbGF0ZXMgYXJlIHZhbGlkYXRlZCBiZWZvcmVoYW5kXG4gIHRocm93IHVua25vd25CaW5kaW5nRXJyb3IkMShlbGVtZW50LCBwcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogQ2FzdCBhIHN0cmluZyB2YWx1ZSB0byBhIGJvb2xlYW4gaWYgcG9zc2libGUuIE90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlLlxuICogQ2Fubm90IGFsd2F5cyBjYXN0IGR1ZSB0byBGRUVMIGV4cHJlc3Npb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGdldEJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlICd0cnVlJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ2ZhbHNlJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5jb25zdCBOT19PUCA9IG51bGw7XG5mdW5jdGlvbiBzZXRQcm9wZXJ0eVZhbHVlKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBsZXQgZXh0ZW5zaW9uRWxlbWVudHM7XG4gIGxldCBwcm9wZXJ0eVZhbHVlO1xuICBjb25zdCBjb21tYW5kcyA9IFtdO1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGVsZW1lbnQsXG4gICAgcHJvcGVydHlcbiAgfTtcblxuICAvLyBlbnN1cmUgbWVzc2FnZSBleGlzdHNcbiAgaWYgKE1FU1NBR0VfQklORElOR19UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46RXZlbnQnKSkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKVswXTtcbiAgICB9XG4gICAgbGV0IG1lc3NhZ2UgPSBmaW5kTWVzc2FnZShidXNpbmVzc09iamVjdCk7XG4gICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAgICd6ZWViZTptb2RlbGVyVGVtcGxhdGUnOiBnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudClcbiAgICAgIH0pO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1lc3NhZ2VSZWY6IG1lc3NhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBidXNpbmVzc09iamVjdCA9IG1lc3NhZ2U7XG4gIH1cblxuICAvLyBlbnN1cmUgZXh0ZW5zaW9uIGVsZW1lbnRzXG4gIGlmIChFWFRFTlNJT05fQklORElOR19UWVBFUyQxLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBjcmVhdGVFbGVtZW50KCdicG1uOkV4dGVuc2lvbkVsZW1lbnRzJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBleHRlbnNpb25FbGVtZW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goTk9fT1ApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb3BlcnR5XG4gIGlmIChQUk9QRVJUWV9CSU5ESU5HX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgY29uc3QgcHJvcGVydHlEZXNjcmlwdG9yID0gYnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcblxuICAgIC8vIGlmIHByb3BlcnR5IG5vdCBjcmVhdGVkIHlldFxuICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgd2UgY3JlYXRlIHRoZSBwcm9wZXJ0eVxuICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHR5cGU6IHByb3BlcnR5VHlwZVxuICAgICAgfSA9IHByb3BlcnR5RGVzY3JpcHRvcjtcblxuICAgICAgLy8gZG8gbm90IG92ZXJyaWRlIG5vbi1wcmltaXRpdmUgdHlwZXNcbiAgICAgIGlmICghUFJJTUlUSVZFX01PRERMRV9UWVBFUyQxLmluY2x1ZGVzKHByb3BlcnR5VHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3Qgc2V0IHByb3BlcnR5IG9mIHR5cGUgPCR7cHJvcGVydHlUeXBlfT5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdCb29sZWFuJykge1xuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gISF2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlUeXBlID09PSAnSW50ZWdlcicpIHtcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIGlmIChpc05hTihwcm9wZXJ0eVZhbHVlKSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBzZXQgTmFOIHZhbHVlXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzVW5kZWZpbmVkJDEocHJvcGVydHlWYWx1ZSkpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBbbmFtZV06IHByb3BlcnR5VmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tYW5kcy5wdXNoKE5PX09QKTtcbiAgICB9XG4gIH1cblxuICAvLyB6ZWViZTp0YXNrRGVmaW5pdGlvblxuICBpZiAoVEFTS19ERUZJTklUSU9OX1RZUEVTLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgY29uc3Qgb2xkVGFza0RlZmluaXRpb24gPSBmaW5kRXh0ZW5zaW9uJDEoZXh0ZW5zaW9uRWxlbWVudHMsICd6ZWViZTpUYXNrRGVmaW5pdGlvbicpLFxuICAgICAgcHJvcGVydHlOYW1lID0gZ2V0VGFza0RlZmluaXRpb25Qcm9wZXJ0eU5hbWUoYmluZGluZyksXG4gICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICBbcHJvcGVydHlOYW1lXTogdmFsdWUgfHwgJydcbiAgICAgIH07XG4gICAgaWYgKG9sZFRhc2tEZWZpbml0aW9uKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBvbGRUYXNrRGVmaW5pdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3VGFza0RlZmluaXRpb24gPSBjcmVhdGVUYXNrRGVmaW5pdGlvbihwcm9wZXJ0aWVzLCBicG1uRmFjdG9yeSk7XG4gICAgICBuZXdUYXNrRGVmaW5pdGlvbi4kcGFyZW50ID0gYnVzaW5lc3NPYmplY3Q7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnZhbHVlcywgbmV3VGFza0RlZmluaXRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKElPX0JJTkRJTkdfVFlQRVMkMS5pbmNsdWRlcyh0eXBlKSkge1xuICAgIGxldCBpb01hcHBpbmcgPSBmaW5kRXh0ZW5zaW9uJDEoZXh0ZW5zaW9uRWxlbWVudHMsICd6ZWViZTpJb01hcHBpbmcnKTtcbiAgICBpZiAoIWlvTWFwcGluZykge1xuICAgICAgaW9NYXBwaW5nID0gY3JlYXRlRWxlbWVudCgnemVlYmU6SW9NYXBwaW5nJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBpb01hcHBpbmddXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB6ZWViZTpJbnB1dFxuICAgIGlmICh0eXBlID09PSBaRUJCRV9JTlBVVF9UWVBFKSB7XG4gICAgICBjb25zdCBvbGRaZWViZUlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyJDEoaW9NYXBwaW5nLCBiaW5kaW5nKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGlvTWFwcGluZy5nZXQoJ2lucHV0UGFyYW1ldGVycycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkWmVlYmVJbnB1dFBhcmFtZXRlcik7XG5cbiAgICAgIC8vIGRvIG5vdCBwZXJzaXN0IGVtcHR5IHBhcmFtZXRlcnMgd2hlbiBjb25maWd1cmVkIGFzIDxvcHRpb25hbD5cbiAgICAgIGlmIChzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgICBjb25zdCBuZXdaZWViZUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB2YWx1ZXMucHVzaChuZXdaZWViZUlucHV0UGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBpb01hcHBpbmcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBbLi4udmFsdWVzXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gemVlYmU6T3V0cHV0XG4gICAgaWYgKHR5cGUgPT09IFpFRUJFX09VVFBVVF9UWVBFKSB7XG4gICAgICBjb25zdCBvbGRaZWViZU91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIkMShpb01hcHBpbmcsIGJpbmRpbmcpO1xuICAgICAgY29uc3QgdmFsdWVzID0gaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkWmVlYmVPdXRwdXRQYXJhbWV0ZXIpO1xuXG4gICAgICAvLyBkbyBub3QgcGVyc2lzdCBlbXB0eSBwYXJhbWV0ZXJzIHdoZW4gY29uZmlndXJlZCBhcyA8b3B0aW9uYWw+XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlKHZhbHVlLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgY29uc3QgbmV3WmVlYmVPdXRwdXRQYXJhbWV0ZXIgPSBjcmVhdGVPdXRwdXRQYXJhbWV0ZXIkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB2YWx1ZXMucHVzaChuZXdaZWViZU91dHB1dFBhcmFtZXRlcik7XG4gICAgICB9XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogaW9NYXBwaW5nLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICdvdXRwdXRQYXJhbWV0ZXJzJzogWy4uLnZhbHVlc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHplZWJlOnRhc2tIZWFkZXJzXG4gIGlmICh0eXBlID09PSBaRUVCRV9UQVNLX0hFQURFUl9UWVBFKSB7XG4gICAgbGV0IHRhc2tIZWFkZXJzID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6VGFza0hlYWRlcnMnKTtcbiAgICBpZiAoIXRhc2tIZWFkZXJzKSB7XG4gICAgICB0YXNrSGVhZGVycyA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOlRhc2tIZWFkZXJzJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB0YXNrSGVhZGVyc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBvbGRUYXNrSGVhZGVyID0gZmluZFRhc2tIZWFkZXIodGFza0hlYWRlcnMsIGJpbmRpbmcpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRhc2tIZWFkZXJzLmdldCgndmFsdWVzJykuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBvbGRUYXNrSGVhZGVyKTtcblxuICAgIC8vIGRvIG5vdCBwZXJzaXN0IHRhc2sgaGVhZGVycyB3aXRoIGVtcHR5IHZhbHVlXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHRhc2tIZWFkZXJzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1Rhc2tIZWFkZXIgPSBjcmVhdGVUYXNrSGVhZGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogdGFza0hlYWRlcnMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4udmFsdWVzLCBuZXdUYXNrSGVhZGVyXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gemVlYmU6UHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IFpFRUJFX1BST1BFUlRZX1RZUEUpIHtcbiAgICBsZXQgemVlYmVQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6UHJvcGVydGllcycpO1xuICAgIGlmICghemVlYmVQcm9wZXJ0aWVzKSB7XG4gICAgICB6ZWViZVByb3BlcnRpZXMgPSBjcmVhdGVFbGVtZW50KCd6ZWViZTpQcm9wZXJ0aWVzJywgbnVsbCwgYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB6ZWViZVByb3BlcnRpZXNdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgb2xkWmVlYmVQcm9wZXJ0eSA9IGZpbmRaZWViZVByb3BlcnR5KHplZWJlUHJvcGVydGllcywgYmluZGluZyk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHplZWJlUHJvcGVydGllcy5nZXQoJ3Byb3BlcnRpZXMnKS5maWx0ZXIocHJvcGVydHkgPT4gcHJvcGVydHkgIT09IG9sZFplZWJlUHJvcGVydHkpO1xuICAgIGlmIChzaG91bGRVcGRhdGUodmFsdWUsIHByb3BlcnR5KSkge1xuICAgICAgY29uc3QgbmV3WmVlYmVQcm9wZXJ0eSA9IGNyZWF0ZVplZWJlUHJvcGVydHkoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgIHByb3BlcnRpZXMucHVzaChuZXdaZWViZVByb3BlcnR5KTtcbiAgICB9XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiB6ZWViZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGJwbW46TWVzc2FnZSN6ZWViZTpzdWJzY3JpcHRpb24jcHJvcGVydHlcbiAgaWYgKHR5cGUgPT09IE1FU1NBR0VfWkVFQkVfU1VCU0NSSVBUSU9OX1BST1BFUlRZX1RZUEUpIHtcbiAgICBsZXQgc3Vic2NyaXB0aW9uID0gZmluZEV4dGVuc2lvbiQxKGV4dGVuc2lvbkVsZW1lbnRzLCAnemVlYmU6U3Vic2NyaXB0aW9uJyk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIFtuYW1lXTogdmFsdWUgfHwgJydcbiAgICB9O1xuICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHN1YnNjcmlwdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic2NyaXB0aW9uID0gY3JlYXRlRWxlbWVudCgnemVlYmU6U3Vic2NyaXB0aW9uJywgcHJvcGVydGllcywgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBzdWJzY3JpcHRpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyB6ZWViZTpjYWxsZWRFbGVtZW50XG4gIGlmICh0eXBlID09PSBaRUVCRV9DQUxMRURfRUxFTUVOVCkge1xuICAgIGxldCBjYWxsZWRFbGVtZW50ID0gZmluZEV4dGVuc2lvbiQxKGVsZW1lbnQsICd6ZWViZTpDYWxsZWRFbGVtZW50Jyk7XG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gYmluZGluZy5wcm9wZXJ0eTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgW3Byb3BlcnR5TmFtZV06IHZhbHVlIHx8ICcnXG4gICAgfTtcbiAgICBpZiAoY2FsbGVkRWxlbWVudCkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogY2FsbGVkRWxlbWVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGVkRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoJ3plZWJlOkNhbGxlZEVsZW1lbnQnLCBwcm9wZXJ0aWVzLCBleHRlbnNpb25FbGVtZW50cywgYnBtbkZhY3RvcnkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGNhbGxlZEVsZW1lbnRdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbW1hbmRzVG9FeGVjdXRlID0gY29tbWFuZHMuZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZCAhPT0gTk9fT1ApO1xuICAgIGNvbW1hbmRzVG9FeGVjdXRlLmxlbmd0aCAmJiBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC10ZW1wbGF0ZXMubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzVG9FeGVjdXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzaG91bGQgbmV2ZXIgdGhyb3cgYXMgdGVtcGxhdGVzIGFyZSB2YWxpZGF0ZWQgYmVmb3JlaGFuZFxuICB0aHJvdyB1bmtub3duQmluZGluZ0Vycm9yJDEoZWxlbWVudCwgcHJvcGVydHkpO1xufVxuXG4vLyBUT0RPKEBiYXJtYWMpOiBmaXggdHJhbnNsYXRlIHVzYWdlIChodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9icG1uLWpzLWVsZW1lbnQtdGVtcGxhdGVzL3B1bGwvNTMjaXNzdWVjb21tZW50LTE5MDYyMDMyNzApXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHZhbHVlLCBwcm9wZXJ0eSwgdHJhbnNsYXRlID0gZGVmYXVsdFRyYW5zbGF0ZSkge1xuICBjb25zdCB7XG4gICAgY29uc3RyYWludHMgPSB7fSxcbiAgICBsYWJlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICBtYXhMZW5ndGgsXG4gICAgbWluTGVuZ3RoLFxuICAgIG5vdEVtcHR5XG4gIH0gPSBjb25zdHJhaW50cztcbiAgaWYgKG5vdEVtcHR5ICYmIGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBub3QgYmUgZW1wdHkuJyl9YDtcbiAgfVxuICBpZiAobWF4TGVuZ3RoICYmICh2YWx1ZSB8fCAnJykubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBoYXZlIG1heCBsZW5ndGgge21heExlbmd0aH0uJywge1xuICAgICAgbWF4TGVuZ3RoXG4gICAgfSl9YDtcbiAgfVxuICBpZiAobWluTGVuZ3RoICYmICh2YWx1ZSB8fCAnJykubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBoYXZlIG1pbiBsZW5ndGgge21pbkxlbmd0aH0uJywge1xuICAgICAgbWluTGVuZ3RoXG4gICAgfSl9YDtcbiAgfVxuICBsZXQge1xuICAgIHBhdHRlcm5cbiAgfSA9IGNvbnN0cmFpbnRzO1xuICBpZiAocGF0dGVybikge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGlmICghaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICAgIG1lc3NhZ2UgPSBwYXR0ZXJuLm1lc3NhZ2U7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi52YWx1ZTtcbiAgICB9XG4gICAgaWYgKCFtYXRjaGVzUGF0dGVybiQxKHZhbHVlLCBwYXR0ZXJuKSkge1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZShtZXNzYWdlKX1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2xhYmVsfSAke3RyYW5zbGF0ZSgnbXVzdCBtYXRjaCBwYXR0ZXJuIHtwYXR0ZXJufS4nLCB7XG4gICAgICAgIHBhdHRlcm5cbiAgICAgIH0pfWA7XG4gICAgfVxuICB9XG59XG5cbi8vIGhlbHBlcnNcbmZ1bmN0aW9uIHVua25vd25CaW5kaW5nRXJyb3IkMShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBpZCA9IGJ1c2luZXNzT2JqZWN0LmdldCgnaWQnKTtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgdHlwZVxuICB9ID0gYmluZGluZztcbiAgcmV0dXJuIG5ldyBFcnJvcihgdW5rbm93biBiaW5kaW5nIDwke3R5cGV9PiBmb3IgZWxlbWVudCA8JHtpZH0+LCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5gKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gIXZhbHVlLnRyaW0oKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBtYXRjaGVzUGF0dGVybiQxKHN0cmluZywgcGF0dGVybikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuKS50ZXN0KHN0cmluZyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNsYXRlKHRlbXBsYXRlLCByZXBsYWNlbWVudHMpIHtcbiAgcmVwbGFjZW1lbnRzID0gcmVwbGFjZW1lbnRzIHx8IHt9O1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgveyhbXn1dKyl9L2csIGZ1bmN0aW9uIChfLCBrZXkpIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2tleV0gfHwgJ3snICsga2V5ICsgJ30nO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBjb25kaXRpb25zLCByZW1vdmUgcHJvcGVydGllcyBmcm9tIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZnVuY3Rpb24gYXBwbHlDb25kaXRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSkge1xuICBjb25zdCB7XG4gICAgcHJvcGVydGllc1xuICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuICBjb25zdCBmaWx0ZXJlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmZpbHRlcihwcm9wZXJ0eSA9PiB7XG4gICAgcmV0dXJuIGlzUHJvcGVydHlBbGxvd2VkKGVsZW1lbnQsIHByb3BlcnR5KSAmJiBpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmVsZW1lbnRUZW1wbGF0ZSxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJlZFByb3BlcnRpZXNcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIHByb3BlcnRpZXMsIHByb3BlcnR5KSB7XG4gIGNvbnN0IHtcbiAgICBjb25kaXRpb25cbiAgfSA9IHByb3BlcnR5O1xuXG4gIC8vIElmIG5vIGNvbmRpdGlvbiBpcyBkZWZpbmVkLCByZXR1cm4gdHJ1ZS5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIG11bHRpcGxlIChcImFuZFwiKSBjb25kaXRpb25zXG4gIGlmIChjb25kaXRpb24uYWxsTWF0Y2gpIHtcbiAgICBjb25zdCBjb25kaXRpb25zID0gY29uZGl0aW9uLmFsbE1hdGNoO1xuICAgIHJldHVybiBjb25kaXRpb25zLmV2ZXJ5KGNvbmRpdGlvbiA9PiBpc1NpbXBsZUNvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCBjb25kaXRpb24pKTtcbiAgfVxuXG4gIC8vIHNpbmdsZSBjb25kaXRpb25cbiAgcmV0dXJuIGlzU2ltcGxlQ29uZGl0aW9uTWV0KGVsZW1lbnQsIHByb3BlcnRpZXMsIGNvbmRpdGlvbik7XG59XG5mdW5jdGlvbiBpc1NpbXBsZUNvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCBjb25kaXRpb24pIHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIGVxdWFscyxcbiAgICBvbmVPZixcbiAgICBpc0FjdGl2ZVxuICB9ID0gY29uZGl0aW9uO1xuICBpZiAodHlwZW9mIGlzQWN0aXZlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJlbGF0ZWRDb25kaXRpb24gPSBwcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmlkID09PSBwcm9wZXJ0eSk7XG4gICAgaWYgKCFyZWxhdGVkQ29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gIWlzQWN0aXZlO1xuICAgIH1cbiAgICByZXR1cm4gaXNBY3RpdmUgPyBpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCByZWxhdGVkQ29uZGl0aW9uKSA6ICFpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBwcm9wZXJ0aWVzLCByZWxhdGVkQ29uZGl0aW9uKTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0VmFsdWUoZWxlbWVudCwgcHJvcGVydGllcywgcHJvcGVydHkpO1xuICBpZiAoaGFzUHJvcGVydHkoY29uZGl0aW9uLCAnZXF1YWxzJykpIHtcbiAgICByZXR1cm4gcHJvcGVydHlWYWx1ZSA9PT0gZXF1YWxzO1xuICB9XG4gIGlmIChvbmVPZikge1xuICAgIHJldHVybiBvbmVPZi5pbmNsdWRlcyhwcm9wZXJ0eVZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZShlbGVtZW50LCBwcm9wZXJ0aWVzLCBwcm9wZXJ0eUlkKSB7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllcy5maW5kKHAgPT4gcC5pZCA9PT0gcHJvcGVydHlJZCk7XG4gIGlmICghcHJvcGVydHkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpO1xufVxuZnVuY3Rpb24gaXNQcm9wZXJ0eUFsbG93ZWQoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCB7XG4gICAgdHlwZVxuICB9ID0gYmluZGluZztcbiAgaWYgKHR5cGUgPT09ICdicG1uOk1lc3NhZ2UjemVlYmU6c3Vic2NyaXB0aW9uI3Byb3BlcnR5JyAmJiBiaW5kaW5nLm5hbWUgPT09ICdjb3JyZWxhdGlvbktleScgJiYgaXMoZWxlbWVudCwgJ2JwbW46U3RhcnRFdmVudCcpICYmICFpc0V2ZW50U3ViUHJvY2VzcyhlbGVtZW50LnBhcmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIGtleSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cblxuY2xhc3MgVGVtcGxhdGVFbGVtZW50RmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKGJwbW5GYWN0b3J5LCBlbGVtZW50RmFjdG9yeSkge1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5fZWxlbWVudEZhY3RvcnkgPSBlbGVtZW50RmFjdG9yeTtcbiAgICB0aGlzLl9wcm92aWRlcnMgPSB7XG4gICAgICBbUFJPUEVSVFlfVFlQRSQxXTogUHJvcGVydHlCaW5kaW5nUHJvdmlkZXIsXG4gICAgICBbWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRV06IFRhc2tEZWZpbml0aW9uVHlwZUJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9UQVNLX0RFRklOSVRJT05dOiBUYXNrRGVmaW5pdGlvblR5cGVCaW5kaW5nUHJvdmlkZXIsXG4gICAgICBbWkVCQkVfUFJPUEVSVFlfVFlQRV06IFplZWJlUHJvcGVydGllc1Byb3ZpZGVyLFxuICAgICAgW1pFQkJFX0lOUFVUX1RZUEVdOiBJbnB1dEJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9PVVRQVVRfVFlQRV06IE91dHB1dEJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9UQVNLX0hFQURFUl9UWVBFXTogVGFza0hlYWRlckJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtNRVNTQUdFX1BST1BFUlRZX1RZUEVdOiBNZXNzYWdlUHJvcGVydHlCaW5kaW5nUHJvdmlkZXIsXG4gICAgICBbTUVTU0FHRV9aRUVCRV9TVUJTQ1JJUFRJT05fUFJPUEVSVFlfVFlQRV06IE1lc3NhZ2VaZWViZVN1YnNjcmlwdGlvbkJpbmRpbmdQcm92aWRlcixcbiAgICAgIFtaRUVCRV9DQUxMRURfRUxFTUVOVF06IENhbGxlZEVsZW1lbnRCaW5kaW5nUHJvdmlkZXJcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlbGVtZW50IGJhc2VkIG9uIGFuIGVsZW1lbnQgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudFRlbXBsYXRlfSB0ZW1wbGF0ZVxuICAgKiBAcmV0dXJucyB7ZGpzLm1vZGVsLkJhc2V9XG4gICAqL1xuICBjcmVhdGUodGVtcGxhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSA9IHRlbXBsYXRlO1xuXG4gICAgLy8gKDEpIGJhc2Ugc2hhcGVcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY3JlYXRlU2hhcGUodGVtcGxhdGUpO1xuXG4gICAgLy8gKDIpIGFwcGx5IHRlbXBsYXRlXG4gICAgdGhpcy5fc2V0TW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlKTtcblxuICAgIC8vICgzKSBhcHBseSBpY29uXG4gICAgaWYgKGhhc0ljb24odGVtcGxhdGUpKSB7XG4gICAgICB0aGlzLl9zZXRNb2RlbGVyVGVtcGxhdGVJY29uKGVsZW1lbnQsIHRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICAvLyAoNCkgYXBwbHkgcHJvcGVydGllc1xuICAgIHRoaXMuX2FwcGx5UHJvcGVydGllcyhlbGVtZW50LCBwcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBfY3JlYXRlU2hhcGUodGVtcGxhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcHBsaWVzVG8sXG4gICAgICBlbGVtZW50VHlwZSA9IHt9XG4gICAgfSA9IHRlbXBsYXRlO1xuICAgIGNvbnN0IGVsZW1lbnRGYWN0b3J5ID0gdGhpcy5fZWxlbWVudEZhY3Rvcnk7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICB0eXBlOiBlbGVtZW50VHlwZS52YWx1ZSB8fCBhcHBsaWVzVG9bMF1cbiAgICB9O1xuXG4gICAgLy8gYXBwbHkgZXZlbnREZWZpbml0aW9uXG4gICAgaWYgKGVsZW1lbnRUeXBlLmV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgYXR0cnMuZXZlbnREZWZpbml0aW9uVHlwZSA9IGVsZW1lbnRUeXBlLmV2ZW50RGVmaW5pdGlvbjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRGYWN0b3J5LmNyZWF0ZVNoYXBlKGF0dHJzKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBfZW5zdXJlRXh0ZW5zaW9uRWxlbWVudHMoZWxlbWVudCkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3Rvcnk7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0pO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgYnVzaW5lc3NPYmplY3Quc2V0KCdleHRlbnNpb25FbGVtZW50cycsIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnRzO1xuICB9XG4gIF9zZXRNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCxcbiAgICAgIHZlcnNpb25cbiAgICB9ID0gdGVtcGxhdGU7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZScsIGlkKTtcbiAgICBidXNpbmVzc09iamVjdC5zZXQoJ3plZWJlOm1vZGVsZXJUZW1wbGF0ZVZlcnNpb24nLCB2ZXJzaW9uKTtcbiAgfVxuICBfc2V0TW9kZWxlclRlbXBsYXRlSWNvbihlbGVtZW50LCB0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGljb25cbiAgICB9ID0gdGVtcGxhdGU7XG4gICAgY29uc3Qge1xuICAgICAgY29udGVudHNcbiAgICB9ID0gaWNvbjtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGJ1c2luZXNzT2JqZWN0LnNldCgnemVlYmU6bW9kZWxlclRlbXBsYXRlSWNvbicsIGNvbnRlbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBwcm9wZXJ0aWVzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IHByb3BlcnRpZXNcbiAgICovXG4gIF9hcHBseVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHByb2Nlc3NlZFByb3BlcnRpZXMgPSBbXTtcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4gdGhpcy5fYXBwbHlQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgcHJvcGVydGllcywgcHJvY2Vzc2VkUHJvcGVydGllcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgcHJvcGVydHkgYW5kIGl0cyBwYXJlbnQgcHJvcGVydGllcyB0byBhbiBlbGVtZW50IGJhc2VkIG9uIGNvbmRpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IHByb2Nlc3NlZFByb3BlcnRpZXNcbiAgICovXG4gIF9hcHBseVByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5LCBwcm9wZXJ0aWVzLCBwcm9jZXNzZWRQcm9wZXJ0aWVzKSB7XG4gICAgLy8gc2tpcCBpZiBhbHJlYWR5IHByb2Nlc3NlZFxuICAgIGlmIChwcm9jZXNzZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IGRlcGVuZGFudCBwcm9wZXJ0eSBmaXJzdCBpZiBub3QgYWxyZWFkeSBhcHBsaWVkXG4gICAgY29uc3QgZGVwZW5kZW50UHJvcGVydGllcyA9IGZpbmREZXBlbmRlbnRQcm9wZXJ0aWVzKHByb3BlcnR5LCBwcm9wZXJ0aWVzKTtcbiAgICBkZXBlbmRlbnRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4gdGhpcy5fYXBwbHlQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSwgcHJvcGVydGllcywgcHJvY2Vzc2VkUHJvcGVydGllcykpO1xuXG4gICAgLy8gY2hlY2sgY29uZGl0aW9uIGFuZCBhcHBseSBwcm9wZXJ0eSBpZiBjb25kaXRpb24gaXMgbWV0XG4gICAgaWYgKGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIHByb3BlcnRpZXMsIHByb3BlcnR5KSkge1xuICAgICAgdGhpcy5fYmluZFByb3BlcnR5KHByb3BlcnR5LCBlbGVtZW50KTtcbiAgICB9XG4gICAgcHJvY2Vzc2VkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHByb3BlcnR5IHRvIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge2Rqcy5Nb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqL1xuICBfYmluZFByb3BlcnR5KHByb3BlcnR5LCBlbGVtZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgYmluZGluZ1xuICAgIH0gPSBwcm9wZXJ0eTtcbiAgICBjb25zdCB7XG4gICAgICB0eXBlOiBiaW5kaW5nVHlwZVxuICAgIH0gPSBiaW5kaW5nO1xuICAgIGNvbnN0IGJpbmRpbmdQcm92aWRlciA9IHRoaXMuX3Byb3ZpZGVyc1tiaW5kaW5nVHlwZV07XG4gICAgYmluZGluZ1Byb3ZpZGVyLmNyZWF0ZShlbGVtZW50LCB7XG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGJwbW5GYWN0b3J5OiB0aGlzLl9icG1uRmFjdG9yeVxuICAgIH0pO1xuICB9XG59XG5UZW1wbGF0ZUVsZW1lbnRGYWN0b3J5LiRpbmplY3QgPSBbJ2JwbW5GYWN0b3J5JywgJ2VsZW1lbnRGYWN0b3J5J107XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGhhc0ljb24odGVtcGxhdGUpIHtcbiAgY29uc3Qge1xuICAgIGljb25cbiAgfSA9IHRlbXBsYXRlO1xuICByZXR1cm4gISEoaWNvbiAmJiBpY29uLmNvbnRlbnRzKTtcbn1cbmZ1bmN0aW9uIGZpbmREZXBlbmRlbnRQcm9wZXJ0aWVzKHByb3BlcnR5LCBwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHtcbiAgICBjb25kaXRpb25cbiAgfSA9IHByb3BlcnR5O1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBkZXBlbmRlbnRQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ5QnlJZChwcm9wZXJ0aWVzLCBjb25kaXRpb24ucHJvcGVydHkpO1xuICBpZiAoZGVwZW5kZW50UHJvcGVydHkpIHtcbiAgICByZXR1cm4gW2RlcGVuZGVudFByb3BlcnR5XTtcbiAgfVxuICByZXR1cm4gW107XG59XG5mdW5jdGlvbiBmaW5kUHJvcGVyeUJ5SWQocHJvcGVydGllcywgaWQpIHtcbiAgcmV0dXJuIGZpbmQocHJvcGVydGllcywgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5LmlkID09PSBpZDtcbiAgfSk7XG59XG5cbnZhciBjcmVhdGVNb2R1bGUgPSB7XG4gIF9faW5pdF9fOiBbJ3RlbXBsYXRlRWxlbWVudEZhY3RvcnknXSxcbiAgdGVtcGxhdGVFbGVtZW50RmFjdG9yeTogWyd0eXBlJywgVGVtcGxhdGVFbGVtZW50RmFjdG9yeV1cbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBjb25kaXRpb25zIG9mIGFuIGVsZW1lbnQgdGVtcGxhdGUgYW5kIHNldHMvcmVzZXRzIHRoZVxuICogY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzIG9uIHRoZSBlbGVtZW50LlxuICovXG5jbGFzcyBDb25kaXRpb25hbEJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjaywgYnBtbkZhY3RvcnksIGluamVjdG9yKSB7XG4gICAgc3VwZXIoZXZlbnRCdXMpO1xuICAgIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gICAgdGhpcy5fZWxlbWVudFRlbXBsYXRlcyA9IGVsZW1lbnRUZW1wbGF0ZXM7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcblxuICAgIC8vICgxKSBzYXZlIHByZS1jb25kaXRpb25hbCBzdGF0ZSBiZWZvcmUgdXBkYXRpbmcgYSBwcm9wZXJ0eVxuICAgIHRoaXMucHJlRXhlY3V0ZShbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCAnZWxlbWVudC5tb3ZlJ10sIHRoaXMuX3NhdmVDb25kaXRpb25hbFN0YXRlLCB0cnVlLCB0aGlzKTtcblxuICAgIC8vICgyKSBjaGVjayBpZiB3ZSBuZWVkIHRvIGFwcGx5IHBvc3QtY29uZGl0aW9uYWwgdXBkYXRlc1xuICAgIC8vXG4gICAgLy8gICBpZiBbYWRkaXRpb25hbCBiaW5kaW5ncyBhY3RpdmF0ZV0gdGhlblxuICAgIC8vICAgICAocmUtKXRyaWdnZXIgc2V0dGluZyB0aGUgdGVtcGxhdGVcbiAgICAvLyAgIGVsc2VcbiAgICAvLyAgICAgZWxzZSB3ZSdyZSBkb25lXG4gICAgLy9cbiAgICB0aGlzLnBvc3RFeGVjdXRlKFsnZWxlbWVudC51cGRhdGVQcm9wZXJ0aWVzJywgJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsICdwcm9wZXJ0aWVzUGFuZWwuemVlYmUuY2hhbmdlVGVtcGxhdGUnLCAnZWxlbWVudC5tb3ZlJ10sIHRoaXMuX2FwcGx5Q29uZGl0aW9ucywgdHJ1ZSwgdGhpcyk7XG5cbiAgICAvLyAoMykgc2V0IGNvbmRpdGlvbnMgYmVmb3JlIGNoYW5naW5nIHRoZSB0ZW1wbGF0ZVxuICAgIHRoaXMucHJlRXhlY3V0ZShbJ3Byb3BlcnRpZXNQYW5lbC56ZWViZS5jaGFuZ2VUZW1wbGF0ZSddLCB0aGlzLl9lbnN1cmVDb25kaXRpb25hbCwgdHJ1ZSwgdGhpcyk7XG4gIH1cbiAgX3NhdmVDb25kaXRpb25hbFN0YXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50XG4gICAgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRleHQub2xkVGVtcGxhdGVXaXRoQ29uZGl0aW9ucyA9IGFwcGx5Q29uZGl0aW9ucyhlbGVtZW50LCB0ZW1wbGF0ZSk7XG4gIH1cbiAgX2FwcGx5Q29uZGl0aW9ucyhjb250ZXh0KSB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG5ld1RlbXBsYXRlLFxuICAgICAgb2xkVGVtcGxhdGVXaXRoQ29uZGl0aW9uc1xuICAgIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG5cbiAgICAvLyBuZXcgVGVtcGxhdGUgaXMgcGVyc2lzdGVkIGJlZm9yZSBhcHBseWluZyBkZWZhdWx0IHZhbHVlcyxcbiAgICAvLyBuZXcgY29uZGl0aW9ucyBtaWdodCBhcHBseSBhZnRlciB0aGUgZGVmYXVsdHMgYXJlIHByZXNlbnQuXG4gICAgY29uc3Qgb2xkVGVtcGxhdGUgPSBvbGRUZW1wbGF0ZVdpdGhDb25kaXRpb25zIHx8IG5ld1RlbXBsYXRlO1xuICAgIGlmICghdGVtcGxhdGUgfHwgIW9sZFRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1RlbXBsYXRlV2l0aENvbmRpdGlvbnMgPSBhcHBseUNvbmRpdGlvbnMoZWxlbWVudCwgdGVtcGxhdGUpO1xuXG4gICAgLy8gdmVyaWZ5IHRoYXQgbmV3IGJpbmRpbmdzIHdlcmUgYWN0aXZhdGVkXG4gICAgaWYgKCFoYXNEaWZmZXJlbnRQcm9wZXJ0eUJpbmRpbmdzKG5ld1RlbXBsYXRlV2l0aENvbmRpdGlvbnMsIG9sZFRlbXBsYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvIGFub3RoZXIgcGFzcyB0byBhcHBseSBmdXJ0aGVyIGNvbmRpdGlvbmFsIGJpbmRpbmdzXG4gICAgLy8gbmV3VGVtcGxhdGUgd2lsbCBhbHdheXMgYmUgdGhlIG9yaWdpbmFsIHRlbXBsYXRlOyBpdCBpcyBmaWx0ZXJlZFxuICAgIC8vIGF0IGEgbGF0ZXIgc3RlcCAoMylcbiAgICBjb25zdCBjaGFuZ2VDb250ZXh0ID0ge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG5ld1RlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICAgIG9sZFRlbXBsYXRlXG4gICAgfTtcbiAgICB0aGlzLl9jb21tYW5kU3RhY2suZXhlY3V0ZSgncHJvcGVydGllc1BhbmVsLnplZWJlLmNoYW5nZVRlbXBsYXRlJywgY2hhbmdlQ29udGV4dCk7XG4gIH1cbiAgX2Vuc3VyZUNvbmRpdGlvbmFsKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGVcbiAgICB9ID0gY29udGV4dDtcbiAgICBpZiAoIW5ld1RlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGNvbmRpdGlvbnMgYXJlIGFwcGxpZWQgYmVmb3JlIGNoYW5naW5nIHRoZSB0ZW1wbGF0ZS5cbiAgICAvLyBgbmV3VGVtcGxhdGVgIHdpbGwgYWx3YXlzIGJlIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS5cbiAgICBjb250ZXh0Lm5ld1RlbXBsYXRlID0gYXBwbHlDb25kaXRpb25zKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcbiAgfVxufVxuQ29uZGl0aW9uYWxCZWhhdmlvci4kaW5qZWN0ID0gWydldmVudEJ1cycsICdlbGVtZW50VGVtcGxhdGVzJywgJ2NvbW1hbmRTdGFjaycsICdicG1uRmFjdG9yeScsICdpbmplY3RvciddO1xuXG4vLyBoZWxwZXJzXG5cbmZ1bmN0aW9uIGhhc0RpZmZlcmVudFByb3BlcnR5QmluZGluZ3Moc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKSB7XG4gIHJldHVybiBoYXNOZXdQcm9wZXJ0aWVzKHNvdXJjZVRlbXBsYXRlLCB0YXJnZXRUZW1wbGF0ZSkgfHwgaGFzUmVtb3ZlZFByb3BlcnRpZXMoc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKTtcbn1cbmZ1bmN0aW9uIGhhc05ld1Byb3BlcnRpZXMoc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKSB7XG4gIGxldCBwcm9wZXJ0aWVzID0gdGFyZ2V0VGVtcGxhdGUucHJvcGVydGllcztcbiAgcmV0dXJuIHByb3BlcnRpZXMuc29tZSh0YXJnZXRQcm9wID0+ICFzb3VyY2VUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbmQoc291cmNlUHJvcCA9PiBjb21wYXJlUHJvcHMoc291cmNlUHJvcCwgdGFyZ2V0UHJvcCkpKTtcbn1cbmZ1bmN0aW9uIGhhc1JlbW92ZWRQcm9wZXJ0aWVzKG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICBjb25zdCBvbGRQcm9wZXJ0aWVzID0gZ2V0TWlzc2luZ1Byb3BlcnRpZXMobmV3VGVtcGxhdGUsIG9sZFRlbXBsYXRlKTtcblxuICAvLyBlbnN1cmUgWE1MIHByb3BlcnRpZXMgYXJlIG1hbnRhaW5lZCBmb3IgcHJvcGVydGllcyB3aXRoXG4gIC8vIGRpZmZlcmVudCBjb25kaXRpb25zIGJ1dCBzYW1lIGJpbmRpbmdzXG4gIHJldHVybiBvbGRQcm9wZXJ0aWVzLnNvbWUocHJvcGVydHkgPT4gIWZpbmRQcm9wZXJ0eVdpdGhCaW5kaW5nKG5ld1RlbXBsYXRlLCBwcm9wZXJ0eSkpO1xufVxuZnVuY3Rpb24gZ2V0TWlzc2luZ1Byb3BlcnRpZXMoc291cmNlVGVtcGxhdGUsIHRhcmdldFRlbXBsYXRlKSB7XG4gIGxldCBwcm9wZXJ0aWVzID0gdGFyZ2V0VGVtcGxhdGUucHJvcGVydGllcztcbiAgcmV0dXJuIHByb3BlcnRpZXMuZmlsdGVyKHRhcmdldFByb3AgPT4gIXNvdXJjZVRlbXBsYXRlLnByb3BlcnRpZXMuZmluZChzb3VyY2VQcm9wID0+IGNvbXBhcmVQcm9wcyhzb3VyY2VQcm9wLCB0YXJnZXRQcm9wKSkpO1xufVxuZnVuY3Rpb24gY29tcGFyZVByb3BzKHNvdXJjZVByb3AsIHRhcmdldFByb3ApIHtcbiAgcmV0dXJuIGFyZUJpbmRpbmdzRXF1YWwoc291cmNlUHJvcC5iaW5kaW5nLCB0YXJnZXRQcm9wLmJpbmRpbmcpICYmIGVxdWFscyhzb3VyY2VQcm9wLmNvbmRpdGlvbiwgdGFyZ2V0UHJvcC5jb25kaXRpb24pO1xufVxuZnVuY3Rpb24gZmluZFByb3BlcnR5V2l0aEJpbmRpbmcodGVtcGxhdGUsIHByb3AxKSB7XG4gIHJldHVybiB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLnNvbWUocHJvcDIgPT4gYXJlQmluZGluZ3NFcXVhbChwcm9wMS5iaW5kaW5nLCBwcm9wMi5iaW5kaW5nKSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVSZXBsYWNlciQxKGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGFyZUJpbmRpbmdzRXF1YWwoYmluZGluZzEsIGJpbmRpbmcyKSB7XG4gIGJpbmRpbmcxID0gbm9ybWFsaXplQmluZGluZyhiaW5kaW5nMSk7XG4gIGJpbmRpbmcyID0gbm9ybWFsaXplQmluZGluZyhiaW5kaW5nMik7XG4gIHJldHVybiBlcXVhbHMoYmluZGluZzEsIGJpbmRpbmcyKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGRlcHJlY2F0ZWQgYmluZGluZyB0eXBlIHRvIG5ldyB0eXBlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVCaW5kaW5nKGJpbmRpbmcpIHtcbiAgaWYgKGJpbmRpbmcudHlwZSA9PT0gWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5iaW5kaW5nLFxuICAgICAgdHlwZTogWkVFQkVfVEFTS19ERUZJTklUSU9OLFxuICAgICAgcHJvcGVydHk6ICd0eXBlJ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJpbmRpbmc7XG59XG5mdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSwgbm9ybWFsaXplUmVwbGFjZXIkMSkgPT09IEpTT04uc3RyaW5naWZ5KGIsIG5vcm1hbGl6ZVJlcGxhY2VyJDEpO1xufVxuXG4vKipcbiAqIFRoaXMgQmVoYXZpb3IgY2hlY2tzIGlmIHRoZSBuZXcgZWxlbWVudCdzIHR5cGUgaXMgaW5cbiAqIHRoZSBsaXN0IG9mIGVsZW1lbnRzIHRoZSB0ZW1wbGF0ZSBhcHBsaWVzIHRvIGFuZCB1bmxpbmtzXG4gKiBpdCBpZiBub3QuXG4gKi9cbmxldCBSZXBsYWNlQmVoYXZpb3IkMSA9IGNsYXNzIFJlcGxhY2VCZWhhdmlvciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRUZW1wbGF0ZXMsIGluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IuZ2V0KCdldmVudEJ1cycpKTtcbiAgICB0aGlzLnBvc3RFeGVjdXRlZCgnc2hhcGUucmVwbGFjZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGUuY29udGV4dCxcbiAgICAgICAgb2xkU2hhcGUgPSBjb250ZXh0Lm9sZFNoYXBlLFxuICAgICAgICBvbGRCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG9sZFNoYXBlKSxcbiAgICAgICAgbmV3U2hhcGUgPSBjb250ZXh0Lm5ld1NoYXBlLFxuICAgICAgICBuZXdCbyA9IGdldEJ1c2luZXNzT2JqZWN0KG5ld1NoYXBlKTtcbiAgICAgIGlmICghb2xkQm8ubW9kZWxlclRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3Qm8ubW9kZWxlclRlbXBsYXRlO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IG5ld0JvLm1vZGVsZXJUZW1wbGF0ZVZlcnNpb247XG4gICAgICBjb25zdCBlbGVtZW50VGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldCh0ZW1wbGF0ZSwgdmVyc2lvbik7XG4gICAgICBpZiAoIWVsZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICBlbGVtZW50VGVtcGxhdGVzLnVubGlua1RlbXBsYXRlKG5ld1NoYXBlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBsaWVzVG8sXG4gICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGlmICghaXMobmV3U2hhcGUsIGVsZW1lbnRUeXBlLnZhbHVlKSB8fCBzaG91bGRVbmxpbmtFdmVudChuZXdTaGFwZSwgZWxlbWVudFR5cGUpKSB7XG4gICAgICAgICAgZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShuZXdTaGFwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxsb3dlZCA9IGFwcGxpZXNUby5yZWR1Y2UoKGFsbG93ZWQsIHR5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIGFsbG93ZWQgfHwgaXMobmV3Qm8sIHR5cGUpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgICAgaWYgKCFhbGxvd2VkKSB7XG4gICAgICAgIGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUobmV3U2hhcGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuUmVwbGFjZUJlaGF2aW9yJDEuJGluamVjdCA9IFsnZWxlbWVudFRlbXBsYXRlcycsICdpbmplY3RvciddO1xuZnVuY3Rpb24gc2hvdWxkVW5saW5rRXZlbnQobmV3U2hhcGUsIGVsZW1lbnRUeXBlKSB7XG4gIGlmICghaXMobmV3U2hhcGUsICdicG1uOkV2ZW50JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qge1xuICAgICAgZXZlbnREZWZpbml0aW9uXG4gICAgfSA9IGVsZW1lbnRUeXBlLFxuICAgIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QobmV3U2hhcGUpLFxuICAgIGV2ZW50RGVmaW5pdGlvbnMgPSBiby5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKTtcbiAgaWYgKCFldmVudERlZmluaXRpb24pIHtcbiAgICByZXR1cm4gZXZlbnREZWZpbml0aW9ucy5sZW5ndGggIT09IDA7XG4gIH1cbiAgcmV0dXJuICFpcyhldmVudERlZmluaXRpb25zWzBdLCBldmVudERlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFJlc3RvcmVzIHRoZSBvcmlnaW5hbCBvcmRlciBvZiB0aGUgdGVtcGxhdGUgcHJvcGVydGllc1xuICogb24gdGhlIG1vZGRsZSBlbGVtZW50LlxuICovXG5jbGFzcyBVcGRhdGVUZW1wbGF0ZVByb3BlcnRpZXNPcmRlciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzLCBjb21tYW5kU3RhY2ssIGJwbW5GYWN0b3J5KSB7XG4gICAgc3VwZXIoZXZlbnRCdXMpO1xuICAgIHRoaXMuX2V2ZW50QnVzID0gZXZlbnRCdXM7XG4gICAgdGhpcy5fZWxlbWVudFRlbXBsYXRlcyA9IGVsZW1lbnRUZW1wbGF0ZXM7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICAgIHRoaXMuX2JwbW5GYWN0b3J5ID0gYnBtbkZhY3Rvcnk7XG4gICAgdGhpcy5wb3N0RXhlY3V0ZShbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnXSwgdGhpcy5fdXBkYXRlUHJvcGVydGllc09yZGVyLCB0cnVlLCB0aGlzKTtcbiAgfVxuICBfdXBkYXRlUHJvcGVydGllc09yZGVyKGNvbnRleHQpIHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50XG4gICAgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICBjb25zdCBidXNpbmVzc09iamVjdCA9IGVsZW1lbnQuYnVzaW5lc3NPYmplY3Q7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRlbXBsYXRlUHJvcGVydGllcyA9IGFwcGx5Q29uZGl0aW9ucyhlbGVtZW50LCB0ZW1wbGF0ZSkucHJvcGVydGllcztcblxuICAgIC8vIHplZWJlOlByb3BlcnR5XG4gICAgY29uc3QgemVlYmVQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6UHJvcGVydGllcycpO1xuICAgIGlmICh6ZWViZVByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVplZWJlUHJvcGVydGllc09yZGVyKHplZWJlUHJvcGVydGllcywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gemVlYmU6SW9NYXBwaW5nXG4gICAgY29uc3QgaW9NYXBwaW5nID0gZmluZEV4dGVuc2lvbiQxKGJ1c2luZXNzT2JqZWN0LCAnemVlYmU6SW9NYXBwaW5nJyk7XG4gICAgaWYgKGlvTWFwcGluZykge1xuICAgICAgLy8gemVlYmU6SW5wdXRcbiAgICAgIHRoaXMuX3VwZGF0ZUlucHV0T3JkZXIoaW9NYXBwaW5nLCB0ZW1wbGF0ZVByb3BlcnRpZXMsIGNvbW1hbmRzLCBjb250ZXh0KTtcblxuICAgICAgLy8gemVlYmU6T3V0cHV0XG4gICAgICB0aGlzLl91cGRhdGVPdXRwdXRPcmRlcihpb01hcHBpbmcsIHRlbXBsYXRlUHJvcGVydGllcywgY29tbWFuZHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIHplZWJlOlRhc2tIZWFkZXJzXG4gICAgY29uc3QgdGFza0hlYWRlcnMgPSBmaW5kRXh0ZW5zaW9uJDEoYnVzaW5lc3NPYmplY3QsICd6ZWViZTpUYXNrSGVhZGVycycpO1xuICAgIGlmICh0YXNrSGVhZGVycykge1xuICAgICAgdGhpcy5fdXBkYXRlVGFza0hlYWRlcnNPcmRlcih0YXNrSGVhZGVycywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRzVG9FeGVjdXRlID0gY29tbWFuZHMuZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZCAhPT0gbnVsbCk7XG4gICAgICBjb21tYW5kc1RvRXhlY3V0ZS5sZW5ndGggJiYgdGhpcy5fY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQtdGVtcGxhdGVzLm11bHRpLWNvbW1hbmQtZXhlY3V0b3InLCBjb21tYW5kc1RvRXhlY3V0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIF91cGRhdGVaZWViZVByb3BlcnRpZXNPcmRlcih6ZWViZVByb3BlcnRpZXMsIHRlbXBsYXRlUHJvcGVydGllcywgY29tbWFuZHMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBmaW5kSW5kZXggPSAocHJvcGVydGllcywgcHJvcGVydHlUb0ZpbmQpID0+IHByb3BlcnRpZXMuZmluZEluZGV4KHByb3AgPT4gcHJvcC5iaW5kaW5nLnR5cGUgPT0gJ3plZWJlOnByb3BlcnR5JyAmJiBwcm9wLmJpbmRpbmcubmFtZSA9PT0gcHJvcGVydHlUb0ZpbmQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB6ZWViZVByb3BlcnRpZXMuZ2V0KCdwcm9wZXJ0aWVzJyk7XG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgIGxldCBuZXdQcm9wZXJ0aWVzT3JkZXIgPSBbLi4ucHJvcGVydGllc107XG4gICAgc29ydFByb3BlcnRpZXMobmV3UHJvcGVydGllc09yZGVyLCBmaW5kSW5kZXgsIHRlbXBsYXRlUHJvcGVydGllcyk7XG4gICAgaWYgKCFhcnJheUVxdWFscyhuZXdQcm9wZXJ0aWVzT3JkZXIsIHByb3BlcnRpZXMpKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogemVlYmVQcm9wZXJ0aWVzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IG5ld1Byb3BlcnRpZXNPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVJbnB1dE9yZGVyKGlvTWFwcGluZywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCkge1xuICAgIGNvbnN0IGZpbmRJbmRleCA9IChwcm9wZXJ0aWVzLCBwcm9wZXJ0eVRvRmluZCkgPT4gcHJvcGVydGllcy5maW5kSW5kZXgocHJvcCA9PiBwcm9wLmJpbmRpbmcudHlwZSA9PSAnemVlYmU6aW5wdXQnICYmIHByb3AuYmluZGluZy5uYW1lID09PSBwcm9wZXJ0eVRvRmluZC5nZXQoJ3RhcmdldCcpKTtcbiAgICBjb25zdCBpbnB1dFBhcmFtZXRlcnMgPSBpb01hcHBpbmcuZ2V0KCdpbnB1dFBhcmFtZXRlcnMnKTtcbiAgICBpZiAoaW5wdXRQYXJhbWV0ZXJzLmxlbmd0aCA8IDEpIHJldHVybjtcbiAgICBsZXQgbmV3SW5wdXRPcmRlciA9IFsuLi5pbnB1dFBhcmFtZXRlcnNdO1xuICAgIHNvcnRQcm9wZXJ0aWVzKG5ld0lucHV0T3JkZXIsIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKTtcbiAgICBpZiAoIWFycmF5RXF1YWxzKG5ld0lucHV0T3JkZXIsIGlucHV0UGFyYW1ldGVycykpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBpb01hcHBpbmcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiBuZXdJbnB1dE9yZGVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgX3VwZGF0ZU91dHB1dE9yZGVyKGlvTWFwcGluZywgdGVtcGxhdGVQcm9wZXJ0aWVzLCBjb21tYW5kcywgY29udGV4dCkge1xuICAgIGNvbnN0IGZpbmRJbmRleCA9IChwcm9wZXJ0aWVzLCBwcm9wZXJ0eVRvRmluZCkgPT4gcHJvcGVydGllcy5maW5kSW5kZXgocHJvcCA9PiBwcm9wLmJpbmRpbmcudHlwZSA9PSAnemVlYmU6b3V0cHV0JyAmJiBwcm9wLmJpbmRpbmcuc291cmNlID09PSBwcm9wZXJ0eVRvRmluZC5nZXQoJ3NvdXJjZScpKTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXJzID0gaW9NYXBwaW5nLmdldCgnb3V0cHV0UGFyYW1ldGVycycpO1xuICAgIGlmIChvdXRwdXRQYXJhbWV0ZXJzLmxlbmd0aCA8IDEpIHJldHVybjtcbiAgICBsZXQgbmV3T3V0cHV0T3JkZXIgPSBbLi4ub3V0cHV0UGFyYW1ldGVyc107XG4gICAgc29ydFByb3BlcnRpZXMobmV3T3V0cHV0T3JkZXIsIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKTtcbiAgICBpZiAoIWFycmF5RXF1YWxzKG5ld091dHB1dE9yZGVyLCBvdXRwdXRQYXJhbWV0ZXJzKSkge1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlvTWFwcGluZyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBvdXRwdXRQYXJhbWV0ZXJzOiBuZXdPdXRwdXRPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVUYXNrSGVhZGVyc09yZGVyKHRhc2tIZWFkZXJzLCB0ZW1wbGF0ZVByb3BlcnRpZXMsIGNvbW1hbmRzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZmluZEluZGV4ID0gKHByb3BlcnRpZXMsIHByb3BlcnR5VG9GaW5kKSA9PiBwcm9wZXJ0aWVzLmZpbmRJbmRleChwcm9wID0+IHByb3AuYmluZGluZy50eXBlID09ICd6ZWViZTp0YXNrSGVhZGVyJyAmJiBwcm9wLmJpbmRpbmcua2V5ID09PSBwcm9wZXJ0eVRvRmluZC5nZXQoJ2tleScpKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGFza0hlYWRlcnMuZ2V0KCd6ZWViZTp2YWx1ZXMnKTtcbiAgICBpZiAoaGVhZGVycy5sZW5ndGggPCAxKSByZXR1cm47XG4gICAgbGV0IG5ld0hlYWRlcnNPcmRlciA9IFsuLi5oZWFkZXJzXTtcbiAgICBzb3J0UHJvcGVydGllcyhuZXdIZWFkZXJzT3JkZXIsIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKTtcbiAgICBpZiAoIWFycmF5RXF1YWxzKG5ld0hlYWRlcnNPcmRlciwgaGVhZGVycykpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiB0YXNrSGVhZGVycyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IG5ld0hlYWRlcnNPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5VcGRhdGVUZW1wbGF0ZVByb3BlcnRpZXNPcmRlci4kaW5qZWN0ID0gWydldmVudEJ1cycsICdlbGVtZW50VGVtcGxhdGVzJywgJ2NvbW1hbmRTdGFjaycsICdicG1uRmFjdG9yeSddO1xuXG4vLyBoZWxwZXJzXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSwge30pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIG9iamVjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShhLCBub3JtYWxpemVSZXBsYWNlcikgPT09IEpTT04uc3RyaW5naWZ5KGIsIG5vcm1hbGl6ZVJlcGxhY2VyKTtcbn1cbmZ1bmN0aW9uIGFycmF5RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGEuZXZlcnkoKGVsZW1lbnQsIGlkeCkgPT4gb2JqZWN0RXF1YWxzKGVsZW1lbnQsIGJbaWR4XSkpO1xufVxuZnVuY3Rpb24gc29ydFByb3BlcnRpZXMoYXJyYXksIGZpbmRJbmRleCwgdGVtcGxhdGVQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYUluZGV4ID0gZmluZEluZGV4KHRlbXBsYXRlUHJvcGVydGllcywgYSk7XG4gICAgY29uc3QgYkluZGV4ID0gZmluZEluZGV4KHRlbXBsYXRlUHJvcGVydGllcywgYik7XG4gICAgcmV0dXJuIGFJbmRleCAtIGJJbmRleDtcbiAgfSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWZlcmVuY2VkIGVsZW1lbnRzLlxuICovXG5jbGFzcyBSZWZlcmVuY2VkRWxlbWVudEJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoZXZlbnRCdXMsIGVsZW1lbnRUZW1wbGF0ZXMsIG1vZGVsaW5nLCBpbmplY3RvciwgbW9kZGxlQ29weSwgYnBtbkZhY3RvcnkpIHtcbiAgICBzdXBlcihldmVudEJ1cyk7XG4gICAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1cztcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLl9tb2RlbGluZyA9IG1vZGVsaW5nO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgdGhpcy5wb3N0RXhlY3V0ZWQoWydlbGVtZW50LnVwZGF0ZVByb3BlcnRpZXMnLCAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJ10sIHRoaXMuX2hhbmRsZVByb3BlcnRpZXNVcGRhdGUsIHRydWUsIHRoaXMpO1xuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5yZXBsYWNlJywgdGhpcy5faGFuZGxlUmVwbGFjZW1lbnQsIHRydWUsIHRoaXMpO1xuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5kZWxldGUnLCB0aGlzLl9oYW5kbGVSZW1vdmFsLCB0cnVlLCB0aGlzKTtcblxuICAgIC8vIGNvcHkgdGVtcGxhdGVkIHJvb3QgZWxlbWVudCB3aGVuIHBhc3RpbmdcbiAgICBldmVudEJ1cy5vbignY29weVBhc3RlLnBhc3RlRWxlbWVudCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlZmVyZW5jZWRSb290RWxlbWVudFxuICAgICAgfSA9IGNvbnRleHQuZGVzY3JpcHRvcjtcbiAgICAgIGlmICghcmVmZXJlbmNlZFJvb3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghZ2V0VGVtcGxhdGVJZCQxKHJlZmVyZW5jZWRSb290RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29udGV4dC5kZXNjcmlwdG9yLnJlZmVyZW5jZWRSb290RWxlbWVudCA9IG1vZGRsZUNvcHkuY29weUVsZW1lbnQocmVmZXJlbmNlZFJvb3RFbGVtZW50LCBicG1uRmFjdG9yeS5jcmVhdGUocmVmZXJlbmNlZFJvb3RFbGVtZW50LiR0eXBlKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5saW5rIHJlZmVyZW5jZWQgZWxlbWVudCB3aGVuIHRlbXBsYXRlIGlzIHVubGlua2VkLlxuICAgKi9cbiAgX2hhbmRsZVByb3BlcnRpZXNVcGRhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgfSA9IGNvbnRleHQ7XG4gICAgaWYgKCFjYW5IYXZlUmVmZXJlbmNlZEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCEoVEVNUExBVEVfSURfQVRUUiQxIGluIHByb3BlcnRpZXMpIHx8IGlzU3RyaW5nKHByb3BlcnRpZXNbVEVNUExBVEVfSURfQVRUUiQxXSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCBtZXNzYWdlID0gZmluZE1lc3NhZ2UoYm8pO1xuICAgIGlmIChtZXNzYWdlICYmIGdldFRlbXBsYXRlSWQkMShtZXNzYWdlKSkge1xuICAgICAgdGhpcy5fbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBtZXNzYWdlLCB7XG4gICAgICAgIFtURU1QTEFURV9JRF9BVFRSJDFdOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHJlZmVyZW5jZWQgZWxlbWVudCB3aGVuIHRlbXBsYXRlIGlzIHJlbW92ZWQuXG4gICAqIEtlZXAgcmVmZXJlbmNlZCBlbGVtZW50IHdoZW4gdGVtcGxhdGUgaXMgcmVwbGFjZWQuXG4gICAqL1xuICBfaGFuZGxlUmVwbGFjZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9sZFNoYXBlLFxuICAgICAgbmV3U2hhcGVcbiAgICB9ID0gY29udGV4dDtcbiAgICBjb25zdCBvbGRUZW1wbGF0ZSA9IGdldFRlbXBsYXRlSWQkMShvbGRTaGFwZSksXG4gICAgICBuZXdUZW1wbGF0ZSA9IGdldFRlbXBsYXRlSWQkMShuZXdTaGFwZSk7XG4gICAgaWYgKCFjYW5IYXZlUmVmZXJlbmNlZEVsZW1lbnQob2xkU2hhcGUpIHx8ICFvbGRUZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KG9sZFNoYXBlKTtcbiAgICBjb25zdCBtZXNzYWdlID0gZmluZE1lc3NhZ2UoYm8pO1xuICAgIGlmICghbWVzc2FnZSB8fCAhZ2V0VGVtcGxhdGVJZCQxKG1lc3NhZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2FuSGF2ZVJlZmVyZW5jZWRFbGVtZW50KG5ld1NoYXBlKSB8fCAhbmV3VGVtcGxhdGUpIHtcbiAgICAgIHJlbW92ZVJvb3RFbGVtZW50KG1lc3NhZ2UsIHRoaXMuX2luamVjdG9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWRkTWVzc2FnZShuZXdTaGFwZSwgbWVzc2FnZSk7XG4gIH1cbiAgX2hhbmRsZVJlbW92YWwoY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNoYXBlXG4gICAgfSA9IGNvbnRleHQ7XG4gICAgaWYgKGlzTGFiZWwoc2hhcGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2FuSGF2ZVJlZmVyZW5jZWRFbGVtZW50KHNoYXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWdldFRlbXBsYXRlSWQkMShzaGFwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYm8gPSBnZXRCdXNpbmVzc09iamVjdChzaGFwZSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGZpbmRNZXNzYWdlKGJvKTtcbiAgICBpZiAobWVzc2FnZSAmJiBnZXRUZW1wbGF0ZUlkJDEobWVzc2FnZSkpIHtcbiAgICAgIHJlbW92ZVJvb3RFbGVtZW50KG1lc3NhZ2UsIHRoaXMuX2luamVjdG9yKTtcbiAgICB9XG4gIH1cbiAgX2FkZE1lc3NhZ2UoZWxlbWVudCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGJvID0gZ2V0UmVmZXJyaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICB0aGlzLl9tb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIGJvLCB7XG4gICAgICAnbWVzc2FnZVJlZic6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxufVxuUmVmZXJlbmNlZEVsZW1lbnRCZWhhdmlvci4kaW5qZWN0ID0gWydldmVudEJ1cycsICdlbGVtZW50VGVtcGxhdGVzJywgJ21vZGVsaW5nJywgJ2luamVjdG9yJywgJ21vZGRsZUNvcHknLCAnYnBtbkZhY3RvcnknXTtcbmZ1bmN0aW9uIGNhbkhhdmVSZWZlcmVuY2VkRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBpc0FueShlbGVtZW50LCBbJ2JwbW46UmVjZWl2ZVRhc2snLCAnYnBtbjpTZW5kVGFzaycsICdicG1uOkV2ZW50J10pO1xufVxuZnVuY3Rpb24gaXNMYWJlbChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdsYWJlbCc7XG59XG5cbi8qKlxuICogSGFuZGxlcyBnZW5lcmF0ZWQgdmFsdWUgcHJvcGVydGllcy5cbiAqL1xuY2xhc3MgR2VuZXJhdGVkVmFsdWVCZWhhdmlvciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKGV2ZW50QnVzLCBlbGVtZW50VGVtcGxhdGVzLCBtb2RlbGluZywgY29tbWFuZFN0YWNrLCBicG1uRmFjdG9yeSkge1xuICAgIHN1cGVyKGV2ZW50QnVzKTtcbiAgICB0aGlzLl9ldmVudEJ1cyA9IGV2ZW50QnVzO1xuICAgIHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMgPSBlbGVtZW50VGVtcGxhdGVzO1xuICAgIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gICAgdGhpcy5wcmVFeGVjdXRlKCdzaGFwZS5jcmVhdGUnLCBjb250ZXh0ID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250ZXh0LnNoYXBlO1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2VuZXJhdGVkUHJvcHMgPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAuZ2VuZXJhdGVkVmFsdWUpO1xuICAgICAgZ2VuZXJhdGVkUHJvcHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgaWYgKCFnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHApO1xuICAgICAgICBzZXRQcm9wZXJ0eVZhbHVlKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHAsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRydWUpO1xuICB9XG59XG5HZW5lcmF0ZWRWYWx1ZUJlaGF2aW9yLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ2VsZW1lbnRUZW1wbGF0ZXMnLCAnbW9kZWxpbmcnLCAnY29tbWFuZFN0YWNrJywgJ2JwbW5GYWN0b3J5J107XG5cbi8qKlxuICogRW5mb3JjZXMgbm8gdmFyaWFibGUgcHJvcGFnYXRpb24gZm9yIHRlbXBsYXRlZCBjYWxsIGFjdGl2aXRpZXMuXG4gKi9cbmNsYXNzIENhbGxlZEVsZW1lbnRCZWhhdmlvciBleHRlbmRzIENvbW1hbmRJbnRlcmNlcHRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IGV2ZW50QnVzXG4gICAqIEBwYXJhbSB7Kn0gbW9kZWxpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL0VsZW1lbnRUZW1wbGF0ZXMnKS5kZWZhdWx0fSBlbGVtZW50VGVtcGxhdGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihldmVudEJ1cywgbW9kZWxpbmcsIGVsZW1lbnRUZW1wbGF0ZXMpIHtcbiAgICBzdXBlcihldmVudEJ1cyk7XG4gICAgdGhpcy5fbW9kZWxpbmcgPSBtb2RlbGluZztcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLnBvc3RFeGVjdXRlZChbJ2VsZW1lbnQudXBkYXRlUHJvcGVydGllcycsICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnXSwgdGhpcy5fZW5zdXJlTm9Qcm9wYWdhdGlvbiwgdHJ1ZSwgdGhpcyk7XG4gIH1cbiAgX2Vuc3VyZU5vUHJvcGFnYXRpb24oY29udGV4dCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnRcbiAgICB9ID0gY29udGV4dDtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMuZ2V0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXMoZWxlbWVudCwgJ2JwbW46Q2FsbEFjdGl2aXR5JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FsbGVkRWxlbWVudCA9IGZpbmRFeHRlbnNpb24kMShlbGVtZW50LCAnemVlYmU6Q2FsbGVkRWxlbWVudCcpO1xuICAgIGlmICghY2FsbGVkRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIFsncHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXMnLCAncHJvcGFnYXRlQWxsUGFyZW50VmFyaWFibGVzJ10pIHtcbiAgICAgIGlmIChjYWxsZWRFbGVtZW50LmdldChwcm9wZXJ0eSkgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX21vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgY2FsbGVkRWxlbWVudCwge1xuICAgICAgICAgIFtwcm9wZXJ0eV06IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuQ2FsbGVkRWxlbWVudEJlaGF2aW9yLiRpbmplY3QgPSBbJ2V2ZW50QnVzJywgJ21vZGVsaW5nJywgJ2VsZW1lbnRUZW1wbGF0ZXMnXTtcblxudmFyIGJlaGF2aW9yTW9kdWxlJDEgPSB7XG4gIF9faW5pdF9fOiBbJ2VsZW1lbnRUZW1wbGF0ZXNSZXBsYWNlQmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc0NvbmRpdGlvbmFsQmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc0dlbmVyYXRlZFZhbHVlQmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc1JlZmVyZW5jZWRFbGVtZW50QmVoYXZpb3InLCAnZWxlbWVudFRlbXBsYXRlc1VwZGF0ZVByb3BlcnRpZXNPcmRlckJlaGF2aW9yJywgJ2VsZW1lbnRUZW1wbGF0ZXNDYWxsZWRFbGVtZW50QmVoYXZpb3InXSxcbiAgZWxlbWVudFRlbXBsYXRlc1JlcGxhY2VCZWhhdmlvcjogWyd0eXBlJywgUmVwbGFjZUJlaGF2aW9yJDFdLFxuICBlbGVtZW50VGVtcGxhdGVzQ29uZGl0aW9uYWxCZWhhdmlvcjogWyd0eXBlJywgQ29uZGl0aW9uYWxCZWhhdmlvcl0sXG4gIGVsZW1lbnRUZW1wbGF0ZXNHZW5lcmF0ZWRWYWx1ZUJlaGF2aW9yOiBbJ3R5cGUnLCBHZW5lcmF0ZWRWYWx1ZUJlaGF2aW9yXSxcbiAgZWxlbWVudFRlbXBsYXRlc1JlZmVyZW5jZWRFbGVtZW50QmVoYXZpb3I6IFsndHlwZScsIFJlZmVyZW5jZWRFbGVtZW50QmVoYXZpb3JdLFxuICBlbGVtZW50VGVtcGxhdGVzVXBkYXRlUHJvcGVydGllc09yZGVyQmVoYXZpb3I6IFsndHlwZScsIFVwZGF0ZVRlbXBsYXRlUHJvcGVydGllc09yZGVyXSxcbiAgZWxlbWVudFRlbXBsYXRlc0NhbGxlZEVsZW1lbnRCZWhhdmlvcjogWyd0eXBlJywgQ2FsbGVkRWxlbWVudEJlaGF2aW9yXVxufTtcblxudmFyIGNvcmVNb2R1bGUkMSA9IHtcbiAgX19kZXBlbmRzX186IFtjb21tYW5kc01vZHVsZSQxLCBiZWhhdmlvck1vZHVsZSQxLCBjcmVhdGVNb2R1bGVdLFxuICBfX2luaXRfXzogWydlbGVtZW50VGVtcGxhdGVzTG9hZGVyJ10sXG4gIGVsZW1lbnRUZW1wbGF0ZXM6IFsndHlwZScsIEVsZW1lbnRUZW1wbGF0ZXNdLFxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzTG9hZGVyXVxufTtcblxuZnVuY3Rpb24gZ2V0VmVyc2lvbk9yRGF0ZUZyb21UZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuICBjb25zdCBtZXRhZGF0YSA9IHRlbXBsYXRlLm1ldGFkYXRhLFxuICAgIHZlcnNpb24gPSB0ZW1wbGF0ZS52ZXJzaW9uO1xuICBpZiAobWV0YWRhdGEpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkJDEobWV0YWRhdGEuY3JlYXRlZCkpIHtcbiAgICAgIHJldHVybiB0b0RhdGVTdHJpbmcobWV0YWRhdGEuY3JlYXRlZCk7XG4gICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQkMShtZXRhZGF0YS51cGRhdGVkKSkge1xuICAgICAgcmV0dXJuIHRvRGF0ZVN0cmluZyhtZXRhZGF0YS51cGRhdGVkKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkJDEodmVyc2lvbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdmVyc2lvbjtcbn1cblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vXG5cbi8qKlxuICogRXhhbXBsZTogMDEuMDEuMTkwMCAwMTowMVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lc3RhbXBcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRvRGF0ZVN0cmluZyh0aW1lc3RhbXApIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gd2l0aExlYWRpbmdaZXJvcyhTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkpO1xuICBjb25zdCBkYXkgPSB3aXRoTGVhZGluZ1plcm9zKFN0cmluZyhkYXRlLmdldERhdGUoKSkpO1xuICBjb25zdCBob3VycyA9IHdpdGhMZWFkaW5nWmVyb3MoU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkpO1xuICBjb25zdCBtaW51dGVzID0gd2l0aExlYWRpbmdaZXJvcyhTdHJpbmcoZGF0ZS5nZXRNaW51dGVzKCkpKTtcbiAgcmV0dXJuIGRheSArICcuJyArIG1vbnRoICsgJy4nICsgeWVhciArICcgJyArIGhvdXJzICsgJzonICsgbWludXRlcztcbn1cbmZ1bmN0aW9uIHdpdGhMZWFkaW5nWmVyb3Moc3RyaW5nKSB7XG4gIHJldHVybiBsZWZ0UGFkKHN0cmluZywgMiwgJzAnKTtcbn1cbmZ1bmN0aW9uIGxlZnRQYWQoc3RyaW5nLCBsZW5ndGgsIGNoYXJhY3Rlcikge1xuICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIHN0cmluZyA9IGNoYXJhY3RlciArIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50VGVtcGxhdGVzR3JvdXAocHJvcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZ2V0VGVtcGxhdGVJZDogZ2V0VGVtcGxhdGVJZCQxID0gZ2V0VGVtcGxhdGVJZFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBmdW5jdGlvbiBFbGVtZW50VGVtcGxhdGVzR3JvdXAocHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGVudHJpZXMgPSBbXVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VMYXlvdXRTdGF0ZShbJ2dyb3VwcycsIGlkLCAnb3BlbiddLCBmYWxzZSk7XG4gICAgY29uc3QgZW1wdHkgPSAhZW50cmllcy5sZW5ndGg7XG4gICAgY29uc3QgdG9nZ2xlT3BlbiA9ICgpID0+ICFlbXB0eSAmJiBzZXRPcGVuKCFvcGVuKTtcbiAgICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cCBiaW8tcHJvcGVydGllcy1wYW5lbC10ZW1wbGF0ZXMtZ3JvdXBcIixcbiAgICAgIFwiZGF0YS1ncm91cC1pZFwiOiAnZ3JvdXAtJyArIGlkLFxuICAgICAgY2hpbGRyZW46IFtqc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3M6IGNsYXNzbmFtZXMoJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWdyb3VwLWhlYWRlcicsIHtcbiAgICAgICAgICBlbXB0eSxcbiAgICAgICAgICBvcGVuOiBvcGVuICYmICFlbXB0eVxuICAgICAgICB9KSxcbiAgICAgICAgb25DbGljazogdG9nZ2xlT3BlbixcbiAgICAgICAgY2hpbGRyZW46IFtqc3goXCJkaXZcIiwge1xuICAgICAgICAgIHRpdGxlOiBsYWJlbCxcbiAgICAgICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1oZWFkZXItdGl0bGVcIixcbiAgICAgICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICAgICAgfSksIGpzeHMoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWdyb3VwLWhlYWRlci1idXR0b25zXCIsXG4gICAgICAgICAgY2hpbGRyZW46IFtqc3goVGVtcGxhdGVHcm91cEJ1dHRvbnMsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICBnZXRUZW1wbGF0ZUlkOiBnZXRUZW1wbGF0ZUlkJDFcbiAgICAgICAgICB9KSwgIWVtcHR5ICYmIGpzeChTZWN0aW9uVG9nZ2xlLCB7XG4gICAgICAgICAgICBvcGVuOiBvcGVuXG4gICAgICAgICAgfSldXG4gICAgICAgIH0pXVxuICAgICAgfSksIGpzeChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBjbGFzc25hbWVzKCdiaW8tcHJvcGVydGllcy1wYW5lbC1ncm91cC1lbnRyaWVzJywge1xuICAgICAgICAgIG9wZW46IG9wZW4gJiYgIWVtcHR5XG4gICAgICAgIH0pLFxuICAgICAgICBjaGlsZHJlbjogZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgICAgICAgICAgaWRcbiAgICAgICAgICB9ID0gZW50cnk7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShDb21wb25lbnQsIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAga2V5OiBpZCxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIH0pXVxuICAgIH0pO1xuICB9O1xufVxuZnVuY3Rpb24gU2VjdGlvblRvZ2dsZSh7XG4gIG9wZW5cbn0pIHtcbiAgcmV0dXJuIGpzeChIZWFkZXJCdXR0b24sIHtcbiAgICB0aXRsZTogXCJUb2dnbGUgc2VjdGlvblwiLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93XCIsXG4gICAgY2hpbGRyZW46IGpzeChBcnJvd0ljb24sIHtcbiAgICAgIGNsYXNzOiBvcGVuID8gJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd24nIDogJ2Jpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LXJpZ2h0J1xuICAgIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5lbGVtZW50XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9wcy5nZXRUZW1wbGF0ZUlkXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9wcy51bmxpbmtUZW1wbGF0ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcHJvcHMudXBkYXRlVGVtcGxhdGVcbiAqL1xuZnVuY3Rpb24gVGVtcGxhdGVHcm91cEJ1dHRvbnMoe1xuICBlbGVtZW50LFxuICBnZXRUZW1wbGF0ZUlkXG59KSB7XG4gIGNvbnN0IGVsZW1lbnRUZW1wbGF0ZXMgPSB1c2VTZXJ2aWNlKCdlbGVtZW50VGVtcGxhdGVzJyk7XG4gIGNvbnN0IHRlbXBsYXRlU3RhdGUgPSBnZXRUZW1wbGF0ZVN0YXRlKGVsZW1lbnRUZW1wbGF0ZXMsIGVsZW1lbnQsIGdldFRlbXBsYXRlSWQpO1xuICBpZiAodGVtcGxhdGVTdGF0ZS50eXBlID09PSAnTk9fVEVNUExBVEUnKSB7XG4gICAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeVRlbXBsYXRlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVTdGF0ZS50eXBlID09PSAnS05PV05fVEVNUExBVEUnKSB7XG4gICAgcmV0dXJuIGpzeChBcHBsaWVkVGVtcGxhdGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVN0YXRlLnR5cGUgPT09ICdVTktOT1dOX1RFTVBMQVRFJykge1xuICAgIHJldHVybiBqc3goVW5rbm93blRlbXBsYXRlLCB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodGVtcGxhdGVTdGF0ZS50eXBlID09PSAnREVQUkVDQVRFRF9URU1QTEFURScpIHtcbiAgICByZXR1cm4ganN4KERlcHJlY2F0ZWRUZW1wbGF0ZSwge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHRlbXBsYXRlU3RhdGU6IHRlbXBsYXRlU3RhdGVcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0ZW1wbGF0ZVN0YXRlLnR5cGUgPT09ICdPVVREQVRFRF9URU1QTEFURScpIHtcbiAgICByZXR1cm4ganN4KE91dGRhdGVkVGVtcGxhdGUsIHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICB0ZW1wbGF0ZVN0YXRlOiB0ZW1wbGF0ZVN0YXRlXG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIFNlbGVjdEVudHJ5VGVtcGxhdGUoe1xuICBlbGVtZW50XG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBldmVudEJ1cyA9IHVzZVNlcnZpY2UoJ2V2ZW50QnVzJyk7XG4gIGNvbnN0IHNlbGVjdFRlbXBsYXRlID0gKCkgPT4gZXZlbnRCdXMuZmlyZSgnZWxlbWVudFRlbXBsYXRlcy5zZWxlY3QnLCB7XG4gICAgZWxlbWVudFxuICB9KTtcbiAgcmV0dXJuIGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgdGl0bGU6IFwiU2VsZWN0IGEgdGVtcGxhdGVcIixcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1zZWxlY3QtdGVtcGxhdGUtYnV0dG9uXCIsXG4gICAgb25DbGljazogc2VsZWN0VGVtcGxhdGUsXG4gICAgY2hpbGRyZW46IFtqc3goQ3JlYXRlSWNvbiwge30pLCBqc3goXCJzcGFuXCIsIHtcbiAgICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1NlbGVjdCcpXG4gICAgfSldXG4gIH0pO1xufVxuZnVuY3Rpb24gQXBwbGllZFRlbXBsYXRlKHtcbiAgZWxlbWVudFxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBlbGVtZW50VGVtcGxhdGVzID0gdXNlU2VydmljZSgnZWxlbWVudFRlbXBsYXRlcycpO1xuICBjb25zdCBtZW51SXRlbXMgPSBbe1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VubGluaycpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShlbGVtZW50KVxuICB9LCB7XG4gICAgZW50cnk6IGpzeChSZW1vdmVUZW1wbGF0ZSwge30pLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5yZW1vdmVUZW1wbGF0ZShlbGVtZW50KVxuICB9XTtcbiAgcmV0dXJuIGpzeChEcm9wZG93bkJ1dHRvbiwge1xuICAgIG1lbnVJdGVtczogbWVudUl0ZW1zLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFwcGxpZWQtdGVtcGxhdGUtYnV0dG9uXCIsXG4gICAgY2hpbGRyZW46IGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdBcHBsaWVkJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBSZW1vdmVUZW1wbGF0ZSgpIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIHJldHVybiBqc3goXCJzcGFuXCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1yZW1vdmUtdGVtcGxhdGVcIixcbiAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdSZW1vdmUnKVxuICB9KTtcbn1cbmZ1bmN0aW9uIFVua25vd25UZW1wbGF0ZSh7XG4gIGVsZW1lbnRcbn0pIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyksXG4gICAgZWxlbWVudFRlbXBsYXRlcyA9IHVzZVNlcnZpY2UoJ2VsZW1lbnRUZW1wbGF0ZXMnKTtcbiAgY29uc3QgbWVudUl0ZW1zID0gW3tcbiAgICBlbnRyeToganN4KE5vdEZvdW5kVGV4dCwge30pXG4gIH0sIHtcbiAgICBzZXBhcmF0b3I6IHRydWVcbiAgfSwge1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VubGluaycpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShlbGVtZW50KVxuICB9LCB7XG4gICAgZW50cnk6IGpzeChSZW1vdmVUZW1wbGF0ZSwge30pLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5yZW1vdmVUZW1wbGF0ZShlbGVtZW50KVxuICB9XTtcbiAgcmV0dXJuIGpzeChEcm9wZG93bkJ1dHRvbiwge1xuICAgIG1lbnVJdGVtczogbWVudUl0ZW1zLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRlbXBsYXRlLW5vdC1mb3VuZFwiLFxuICAgIGNoaWxkcmVuOiBqc3hzKEhlYWRlckJ1dHRvbiwge1xuICAgICAgY2hpbGRyZW46IFtqc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IHRyYW5zbGF0ZSgnTm90IGZvdW5kJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBOb3RGb3VuZFRleHQoKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4ganN4KFwiZGl2XCIsIHtcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10ZW1wbGF0ZS1ub3QtZm91bmQtdGV4dFwiLFxuICAgIGNoaWxkcmVuOiB0cmFuc2xhdGUoJ1RoZSB0ZW1wbGF0ZSBhcHBsaWVkIHdhcyBub3QgZm91bmQuIFRoZXJlZm9yZSwgaXRzIHByb3BlcnRpZXMgY2Fubm90IGJlIHNob3duLiBVbmxpbmsgdG8gYWNjZXNzIHRoZSBkYXRhLicpXG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge1Vua25vd25UZW1wbGF0ZX0gdGVtcGxhdGVTdGF0ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gdW5saW5rVGVtcGxhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHVwZGF0ZVRlbXBsYXRlXG4gKi9cbmZ1bmN0aW9uIE91dGRhdGVkVGVtcGxhdGUoe1xuICBlbGVtZW50LFxuICB0ZW1wbGF0ZVN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBuZXdlclRlbXBsYXRlXG4gIH0gPSB0ZW1wbGF0ZVN0YXRlO1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKSxcbiAgICBlbGVtZW50VGVtcGxhdGVzID0gdXNlU2VydmljZSgnZWxlbWVudFRlbXBsYXRlcycpO1xuICBjb25zdCBtZW51SXRlbXMgPSBbe1xuICAgIGVudHJ5OiBqc3goVXBkYXRlQXZhaWxhYmxlVGV4dCwge1xuICAgICAgbmV3ZXJUZW1wbGF0ZTogbmV3ZXJUZW1wbGF0ZVxuICAgIH0pXG4gIH0sIHtcbiAgICBzZXBhcmF0b3I6IHRydWVcbiAgfSwge1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VwZGF0ZScpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5hcHBseVRlbXBsYXRlKGVsZW1lbnQsIG5ld2VyVGVtcGxhdGUpXG4gIH0sIHtcbiAgICBlbnRyeTogdHJhbnNsYXRlKCdVbmxpbmsnKSxcbiAgICBhY3Rpb246ICgpID0+IGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUoZWxlbWVudClcbiAgfSwge1xuICAgIGVudHJ5OiBqc3goUmVtb3ZlVGVtcGxhdGUsIHt9KSxcbiAgICBhY3Rpb246ICgpID0+IGVsZW1lbnRUZW1wbGF0ZXMucmVtb3ZlVGVtcGxhdGUoZWxlbWVudClcbiAgfV07XG4gIHJldHVybiBqc3goRHJvcGRvd25CdXR0b24sIHtcbiAgICBtZW51SXRlbXM6IG1lbnVJdGVtcyxcbiAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC10ZW1wbGF0ZS11cGRhdGUtYXZhaWxhYmxlXCIsXG4gICAgY2hpbGRyZW46IGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdVcGRhdGUgYXZhaWxhYmxlJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBVcGRhdGVBdmFpbGFibGVUZXh0KHtcbiAgbmV3ZXJUZW1wbGF0ZVxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgdGV4dCA9IHRyYW5zbGF0ZSgnQSBuZXcgdmVyc2lvbiBvZiB0aGUgdGVtcGxhdGUgaXMgYXZhaWxhYmxlOiB7dGVtcGxhdGVWZXJzaW9ufScsIHtcbiAgICB0ZW1wbGF0ZVZlcnNpb246IGdldFZlcnNpb25PckRhdGVGcm9tVGVtcGxhdGUobmV3ZXJUZW1wbGF0ZSlcbiAgfSk7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLXRlbXBsYXRlLXVwZGF0ZS1hdmFpbGFibGUtdGV4dFwiLFxuICAgIGNoaWxkcmVuOiB0ZXh0XG4gIH0pO1xufVxuZnVuY3Rpb24gRGVwcmVjYXRlZFRlbXBsYXRlKHtcbiAgZWxlbWVudCxcbiAgdGVtcGxhdGVTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgdGVtcGxhdGVcbiAgfSA9IHRlbXBsYXRlU3RhdGU7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpLFxuICAgIGVsZW1lbnRUZW1wbGF0ZXMgPSB1c2VTZXJ2aWNlKCdlbGVtZW50VGVtcGxhdGVzJyk7XG4gIGNvbnN0IG1lbnVJdGVtcyA9IFt7XG4gICAgZW50cnk6IGpzeChEZXByZWNhdGlvbldhcm5pbmcsIHtcbiAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZVxuICAgIH0pXG4gIH0sIHtcbiAgICBzZXBhcmF0b3I6IHRydWVcbiAgfSwge1xuICAgIGVudHJ5OiB0cmFuc2xhdGUoJ1VubGluaycpLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShlbGVtZW50KVxuICB9LCB7XG4gICAgZW50cnk6IGpzeChSZW1vdmVUZW1wbGF0ZSwge30pLFxuICAgIGFjdGlvbjogKCkgPT4gZWxlbWVudFRlbXBsYXRlcy5yZW1vdmVUZW1wbGF0ZShlbGVtZW50KVxuICB9XTtcbiAgcmV0dXJuIGpzeChEcm9wZG93bkJ1dHRvbiwge1xuICAgIG1lbnVJdGVtczogbWVudUl0ZW1zLFxuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWRlcHJlY2F0ZWQtdGVtcGxhdGUtYnV0dG9uXCIsXG4gICAgY2hpbGRyZW46IGpzeHMoSGVhZGVyQnV0dG9uLCB7XG4gICAgICBjaGlsZHJlbjogW2pzeChcInNwYW5cIiwge1xuICAgICAgICBjaGlsZHJlbjogdHJhbnNsYXRlKCdEZXByZWNhdGVkJylcbiAgICAgIH0pLCBqc3goQXJyb3dJY29uLCB7XG4gICAgICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWFycm93LWRvd25cIlxuICAgICAgfSldXG4gICAgfSlcbiAgfSk7XG59XG5mdW5jdGlvbiBEZXByZWNhdGlvbldhcm5pbmcoe1xuICB0ZW1wbGF0ZVxufSkge1xuICBjb25zdCB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2UgPSB0cmFuc2xhdGUoJ1RoaXMgdGVtcGxhdGUgaXMgZGVwcmVjYXRlZC4nKSxcbiAgICBkb2N1bWVudGF0aW9uUmVmXG4gIH0gPSB0ZW1wbGF0ZS5kZXByZWNhdGVkO1xuICByZXR1cm4ganN4cyhcImRpdlwiLCB7XG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVwcmVjYXRlZC10ZW1wbGF0ZS10ZXh0XCIsXG4gICAgY2hpbGRyZW46IFttZXNzYWdlLCBkb2N1bWVudGF0aW9uUmVmICYmIGpzeHMoRnJhZ21lbnQsIHtcbiAgICAgIGNoaWxkcmVuOiBbXCJcXHhBMFwiLCBqc3goXCJhXCIsIHtcbiAgICAgICAgaHJlZjogZG9jdW1lbnRhdGlvblJlZixcbiAgICAgICAgY2hpbGRyZW46IGpzeChEb2N1bWVudGF0aW9uSWNvbiwge30pXG4gICAgICB9KV1cbiAgICB9KV1cbiAgfSk7XG59XG5mdW5jdGlvbiBEb2N1bWVudGF0aW9uSWNvbigpIHtcbiAgcmV0dXJuIGpzeChcInN2Z1wiLCB7XG4gICAgd2lkdGg6IFwiMTJcIixcbiAgICBoZWlnaHQ6IFwiMTJcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgY2hpbGRyZW46IGpzeChcInBhdGhcIiwge1xuICAgICAgXCJmaWxsLXJ1bGVcIjogXCJldmVub2RkXCIsXG4gICAgICBcImNsaXAtcnVsZVwiOiBcImV2ZW5vZGRcIixcbiAgICAgIGQ6IFwiTTEwLjYzNjggMTAuNjM3NVY1LjkxNzYxSDExLjk5OTVWMTAuNjM4MkMxMS45OTk1IDEwLjk5NzMgMTEuODYyMyAxMS4zMTQxIDExLjU4NzggMTEuNTg4NUMxMS4zMTM0IDExLjg2MyAxMC45OTY2IDEyLjAwMDIgMTAuNjM3NSAxMi4wMDAySDEuMzYyNjZDMC45ODIzNDUgMTIuMDAwMiAwLjY2MDE1OSAxMS44NjgxIDAuMzk2MTAyIDExLjYwNDFDMC4xMzIwNDQgMTEuMzQgMS41MjU4OGUtMDUgMTEuMDE3OCAxLjUyNTg4ZS0wNSAxMC42Mzc1VjEuMzYyNjdDMS41MjU4OGUtMDUgMC45ODIzNiAwLjEzMjA0NCAwLjY2MDE3MyAwLjM5NjEwMiAwLjM5NjExNkMwLjY2MDE1OSAwLjEzMjA1OCAwLjk4MjM0NSAyLjk1NjM5ZS0wNSAxLjM2MjY2IDIuOTU2MzllLTA1SDUuOTE2MjRWMS4zNjI2N0gxLjM2MjY2VjEwLjYzNzVIMTAuNjM2OFpNMTIgMEg3LjI3OTRMNy4yNzg3MyAxLjM2MTk3SDkuNjg3MDFMMy4wNjUwNyA3Ljk4MzkxTDQuMDE1NDEgOC45MzQyNUwxMC42MzczIDIuMzEyMzFWNC43MjA1OUgxMlYwWlwiLFxuICAgICAgZmlsbDogXCIjODE4Nzk4XCJcbiAgICB9KVxuICB9KTtcbn1cblxuLy8gaGVscGVyIC8vLy8vL1xuXG4vKipcbiAqIERldGVybWluZSB0ZW1wbGF0ZSBzdGF0ZSBpbiB0aGUgY3VycmVudCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50VGVtcGxhdGVzXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0VGVtcGxhdGVJZFxuICogQHJldHVybnMge1RlbXBsYXRlU3RhdGV9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlU3RhdGUoZWxlbWVudFRlbXBsYXRlcywgZWxlbWVudCwgZ2V0VGVtcGxhdGVJZCkge1xuICBjb25zdCB0ZW1wbGF0ZUlkID0gZ2V0VGVtcGxhdGVJZChlbGVtZW50KSxcbiAgICB0ZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0KGVsZW1lbnQpO1xuICBpZiAoIXRlbXBsYXRlSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ05PX1RFTVBMQVRFJ1xuICAgIH07XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVU5LTk9XTl9URU1QTEFURScsXG4gICAgICB0ZW1wbGF0ZUlkXG4gICAgfTtcbiAgfVxuICBpZiAodGVtcGxhdGUuZGVwcmVjYXRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnREVQUkVDQVRFRF9URU1QTEFURScsXG4gICAgICB0ZW1wbGF0ZVxuICAgIH07XG4gIH1cbiAgY29uc3QgbmV3ZXJUZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0TGF0ZXN0KHRlbXBsYXRlSWQsIHtcbiAgICBkZXByZWNhdGVkOiB0cnVlXG4gIH0pWzBdO1xuICBpZiAobmV3ZXJUZW1wbGF0ZSAhPT0gdGVtcGxhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ09VVERBVEVEX1RFTVBMQVRFJyxcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgbmV3ZXJUZW1wbGF0ZVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnS05PV05fVEVNUExBVEUnLFxuICAgIHRlbXBsYXRlXG4gIH07XG59XG5cbmZ1bmN0aW9uIFRlbXBsYXRlUHJvcHMoe1xuICBlbGVtZW50LFxuICBlbGVtZW50VGVtcGxhdGVzXG59KSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG4gIGlmICghdGVtcGxhdGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgaWQ6ICd0ZW1wbGF0ZS1uYW1lJyxcbiAgICBjb21wb25lbnQ6IFRlbXBsYXRlTmFtZSxcbiAgICB0ZW1wbGF0ZVxuICB9LCB7XG4gICAgaWQ6ICd0ZW1wbGF0ZS12ZXJzaW9uJyxcbiAgICBjb21wb25lbnQ6IFRlbXBsYXRlVmVyc2lvbixcbiAgICB0ZW1wbGF0ZVxuICB9LCB7XG4gICAgaWQ6ICd0ZW1wbGF0ZS1kZXNjcmlwdGlvbicsXG4gICAgY29tcG9uZW50OiBUZW1wbGF0ZURlc2NyaXB0aW9uLFxuICAgIHRlbXBsYXRlXG4gIH1dLmZpbHRlcihlbnRyeSA9PiAhIWVudHJ5LmNvbXBvbmVudCk7XG59XG5mdW5jdGlvbiBUZW1wbGF0ZU5hbWUoe1xuICBpZCxcbiAgdGVtcGxhdGVcbn0pIHtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIHJldHVybiBqc3goVGV4dEVudHJ5LCB7XG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ05hbWUnKSxcbiAgICBjb250ZW50OiB0ZW1wbGF0ZS5uYW1lXG4gIH0pO1xufVxuZnVuY3Rpb24gVGVtcGxhdGVWZXJzaW9uKHtcbiAgaWQsXG4gIHRlbXBsYXRlXG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0VmVyc2lvbk9yRGF0ZUZyb21UZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gIHJldHVybiB2ZXJzaW9uID8ganN4KFRleHRFbnRyeSwge1xuICAgIGlkOiBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdWZXJzaW9uJyksXG4gICAgY29udGVudDogdmVyc2lvblxuICB9KSA6IG51bGw7XG59XG5mdW5jdGlvbiBUZW1wbGF0ZURlc2NyaXB0aW9uKHtcbiAgaWQsXG4gIHRlbXBsYXRlXG59KSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb25cbiAgfSA9IHRlbXBsYXRlO1xuICByZXR1cm4gZGVzY3JpcHRpb24gPyBqc3goVGV4dEVudHJ5LCB7XG4gICAgaWQ6IGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Rlc2NyaXB0aW9uJyksXG4gICAgY29udGVudDogdGVtcGxhdGUuZGVzY3JpcHRpb25cbiAgfSkgOiBudWxsO1xufVxuZnVuY3Rpb24gVGV4dEVudHJ5KHtcbiAgaWQsXG4gIGxhYmVsLFxuICBjb250ZW50XG59KSB7XG4gIHJldHVybiBqc3hzKFwiZGl2XCIsIHtcbiAgICBcImRhdGEtZW50cnktaWRcIjogaWQsXG4gICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZW50cnkgYmlvLXByb3BlcnRpZXMtcGFuZWwtdGV4dC1lbnRyeVwiLFxuICAgIGNoaWxkcmVuOiBbanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzczogXCJiaW8tcHJvcGVydGllcy1wYW5lbC1sYWJlbFwiLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSksIGpzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtdGV4dC1lbnRyeV9fY29udGVudFwiLFxuICAgICAgY2hpbGRyZW46IGNvbnRlbnRcbiAgICB9KV1cbiAgfSk7XG59XG5cbnZhciBlLFxuICBvID0ge307XG5mdW5jdGlvbiBuKHIsIHQsIGUpIHtcbiAgaWYgKDMgPT09IHIubm9kZVR5cGUpIHtcbiAgICB2YXIgbyA9IFwidGV4dENvbnRlbnRcIiBpbiByID8gci50ZXh0Q29udGVudCA6IHIubm9kZVZhbHVlIHx8IFwiXCI7XG4gICAgaWYgKCExICE9PSBuLm9wdGlvbnMudHJpbSkge1xuICAgICAgdmFyIGEgPSAwID09PSB0IHx8IHQgPT09IGUubGVuZ3RoIC0gMTtcbiAgICAgIGlmICgoIShvID0gby5tYXRjaCgvXltcXHNcXG5dKyQvZykgJiYgXCJhbGxcIiAhPT0gbi5vcHRpb25zLnRyaW0gPyBcIiBcIiA6IG8ucmVwbGFjZSgvKF5bXFxzXFxuXSt8W1xcc1xcbl0rJCkvZywgXCJhbGxcIiA9PT0gbi5vcHRpb25zLnRyaW0gfHwgYSA/IFwiXCIgOiBcIiBcIikpIHx8IFwiIFwiID09PSBvKSAmJiBlLmxlbmd0aCA+IDEgJiYgYSkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBvO1xuICB9XG4gIGlmICgxICE9PSByLm5vZGVUeXBlKSByZXR1cm4gbnVsbDtcbiAgdmFyIHAgPSBTdHJpbmcoci5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFwic2NyaXB0XCIgPT09IHAgJiYgIW4ub3B0aW9ucy5hbGxvd1NjcmlwdHMpIHJldHVybiBudWxsO1xuICB2YXIgbCxcbiAgICBzLFxuICAgIHUgPSBuLmgocCwgZnVuY3Rpb24gKHIpIHtcbiAgICAgIHZhciB0ID0gciAmJiByLmxlbmd0aDtcbiAgICAgIGlmICghdCkgcmV0dXJuIG51bGw7XG4gICAgICBmb3IgKHZhciBlID0ge30sIG8gPSAwOyBvIDwgdDsgbysrKSB7XG4gICAgICAgIHZhciBhID0gcltvXSxcbiAgICAgICAgICBpID0gYS5uYW1lLFxuICAgICAgICAgIHAgPSBhLnZhbHVlO1xuICAgICAgICBcIm9uXCIgPT09IGkuc3Vic3RyaW5nKDAsIDIpICYmIG4ub3B0aW9ucy5hbGxvd0V2ZW50cyAmJiAocCA9IG5ldyBGdW5jdGlvbihwKSksIGVbaV0gPSBwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGU7XG4gICAgfShyLmF0dHJpYnV0ZXMpLCAocyA9IChsID0gci5jaGlsZE5vZGVzKSAmJiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwobCwgbikuZmlsdGVyKGkpKSAmJiBzLmxlbmd0aCA/IHMgOiBudWxsKTtcbiAgcmV0dXJuIG4udmlzaXRvciAmJiBuLnZpc2l0b3IodSksIHU7XG59XG52YXIgYSxcbiAgaSA9IGZ1bmN0aW9uIChyKSB7XG4gICAgcmV0dXJuIHI7XG4gIH0sXG4gIHAgPSB7fTtcbmZ1bmN0aW9uIGwocikge1xuICB2YXIgdCA9IChyLnR5cGUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSxcbiAgICBlID0gbC5tYXA7XG4gIGUgJiYgZS5oYXNPd25Qcm9wZXJ0eSh0KSA/IChyLnR5cGUgPSBlW3RdLCByLnByb3BzID0gT2JqZWN0LmtleXMoci5wcm9wcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgdmFyIG87XG4gICAgcmV0dXJuIHRbKG8gPSBlLCBvLnJlcGxhY2UoLy0oLikvZywgZnVuY3Rpb24gKHIsIHQpIHtcbiAgICAgIHJldHVybiB0LnRvVXBwZXJDYXNlKCk7XG4gICAgfSkpXSA9IHIucHJvcHNbZV0sIHQ7XG4gIH0sIHt9KSkgOiByLnR5cGUgPSB0LnJlcGxhY2UoL1teYS16MC05LV0vaSwgXCJcIik7XG59XG52YXIgTWFya3VwID0gKGZ1bmN0aW9uICh0KSB7XG4gIGZ1bmN0aW9uIGkoKSB7XG4gICAgdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG4gIHJldHVybiB0ICYmIChpLl9fcHJvdG9fXyA9IHQpLCAoaS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQgJiYgdC5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IGksIGkuc2V0UmV2aXZlciA9IGZ1bmN0aW9uIChyKSB7XG4gICAgYSA9IHI7XG4gIH0sIGkucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIChyKSB7XG4gICAgdmFyIHQgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiByLndyYXAgIT09IHQud3JhcCB8fCByLnR5cGUgIT09IHQudHlwZSB8fCByLm1hcmt1cCAhPT0gdC5tYXJrdXA7XG4gIH0sIGkucHJvdG90eXBlLnNldENvbXBvbmVudHMgPSBmdW5jdGlvbiAocikge1xuICAgIGlmICh0aGlzLm1hcCA9IHt9LCByKSBmb3IgKHZhciB0IGluIHIpIGlmIChyLmhhc093blByb3BlcnR5KHQpKSB7XG4gICAgICB2YXIgZSA9IHQucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16MC05XSl8KFthLXowLTldKykoW0EtWl0pL2csIFwiJDEkMy0kMiQ0XCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLm1hcFtlXSA9IHJbdF07XG4gICAgfVxuICB9LCBpLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBpID0gdC53cmFwO1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9ICEwKTtcbiAgICB2YXIgcyxcbiAgICAgIHUgPSB0LnR5cGUsXG4gICAgICBjID0gdC5tYXJrdXAsXG4gICAgICBtID0gdC5jb21wb25lbnRzLFxuICAgICAgdiA9IHQucmV2aXZlcixcbiAgICAgIGYgPSB0Lm9uRXJyb3IsXG4gICAgICBkID0gdFtcImFsbG93LXNjcmlwdHNcIl0sXG4gICAgICBoJDEgPSB0W1wiYWxsb3ctZXZlbnRzXCJdLFxuICAgICAgeSA9IHQudHJpbSxcbiAgICAgIHcgPSBmdW5jdGlvbiAociwgdCkge1xuICAgICAgICB2YXIgZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBvIGluIHIpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBvKSAmJiAtMSA9PT0gdC5pbmRleE9mKG8pICYmIChlW29dID0gcltvXSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSh0LCBbXCJ3cmFwXCIsIFwidHlwZVwiLCBcIm1hcmt1cFwiLCBcImNvbXBvbmVudHNcIiwgXCJyZXZpdmVyXCIsIFwib25FcnJvclwiLCBcImFsbG93LXNjcmlwdHNcIiwgXCJhbGxvdy1ldmVudHNcIiwgXCJ0cmltXCJdKSxcbiAgICAgIEMgPSB2IHx8IHRoaXMucmV2aXZlciB8fCB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZXZpdmVyIHx8IGEgfHwgaDtcbiAgICB0aGlzLnNldENvbXBvbmVudHMobSk7XG4gICAgdmFyIGcgPSB7XG4gICAgICBhbGxvd1NjcmlwdHM6IGQsXG4gICAgICBhbGxvd0V2ZW50czogaCQxLFxuICAgICAgdHJpbTogeVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIHMgPSBmdW5jdGlvbiAociwgdCwgYSwgaSwgcykge1xuICAgICAgICB2YXIgdSA9IGZ1bmN0aW9uIChyLCB0KSB7XG4gICAgICAgICAgdmFyIG8sXG4gICAgICAgICAgICBuLFxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwID0gXCJodG1sXCIgPT09IHQgPyBcInRleHQvaHRtbFwiIDogXCJhcHBsaWNhdGlvbi94bWxcIjtcbiAgICAgICAgICBcImh0bWxcIiA9PT0gdCA/IChpID0gXCJib2R5XCIsIGEgPSBcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPjxib2R5PlwiICsgciArIFwiPC9ib2R5PjwvaHRtbD5cIikgOiAoaSA9IFwieG1sXCIsIGEgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuPHhtbD4nICsgciArIFwiPC94bWw+XCIpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhhLCBwKTtcbiAgICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgICBuID0gcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gfHwgXCJodG1sXCIgIT09IHQgfHwgKChvID0gZSB8fCAoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5pbXBsZW1lbnRhdGlvbiAmJiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQpIHJldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJcIik7XG4gICAgICAgICAgICB2YXIgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICAgICAgICByZXR1cm4gci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6LTk5OWVtOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92ZXJmbG93OmhpZGRlbjtcIiwgci5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXNcIiksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHIuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgICB9KCkpKS5vcGVuKCksIG8ud3JpdGUoYSksIG8uY2xvc2UoKSksIG8pIHtcbiAgICAgICAgICAgIHZhciBsID0gby5nZXRFbGVtZW50c0J5VGFnTmFtZShpKVswXSxcbiAgICAgICAgICAgICAgcyA9IGwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHJldHVybiByICYmICFzICYmIChsLmVycm9yID0gXCJEb2N1bWVudCBwYXJzZSBmYWlsZWQuXCIpLCBzICYmIFwicGFyc2VyZXJyb3JcIiA9PT0gU3RyaW5nKHMubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCkgJiYgKHMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKSwgcy5yZW1vdmVDaGlsZChzLmxhc3RDaGlsZCksIGwuZXJyb3IgPSBzLnRleHRDb250ZW50IHx8IHMubm9kZVZhbHVlIHx8IG4gfHwgXCJVbmtub3duIGVycm9yXCIsIGwucmVtb3ZlQ2hpbGQocykpLCBsO1xuICAgICAgICAgIH1cbiAgICAgICAgfShyLCB0KTtcbiAgICAgICAgaWYgKHUgJiYgdS5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHUuZXJyb3IpO1xuICAgICAgICB2YXIgYyA9IHUgJiYgdS5ib2R5IHx8IHU7XG4gICAgICAgIGwubWFwID0gaSB8fCBwO1xuICAgICAgICB2YXIgbSA9IGMgJiYgZnVuY3Rpb24gKHIsIHQsIGUsIGEpIHtcbiAgICAgICAgICByZXR1cm4gbi52aXNpdG9yID0gdCwgbi5oID0gZSwgbi5vcHRpb25zID0gYSB8fCBvLCBuKHIpO1xuICAgICAgICB9KGMsIGwsIGEsIHMpO1xuICAgICAgICByZXR1cm4gbC5tYXAgPSBudWxsLCBtICYmIG0ucHJvcHMgJiYgbS5wcm9wcy5jaGlsZHJlbiB8fCBudWxsO1xuICAgICAgfShjLCB1LCBDLCB0aGlzLm1hcCwgZyk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgZiA/IGYoe1xuICAgICAgICBlcnJvcjogclxuICAgICAgfSkgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IgJiYgY29uc29sZS5lcnJvcihcInByZWFjdC1tYXJrdXA6IFwiICsgcik7XG4gICAgfVxuICAgIGlmICghMSA9PT0gaSkgcmV0dXJuIHMgfHwgbnVsbDtcbiAgICB2YXIgeCA9IHcuaGFzT3duUHJvcGVydHkoXCJjbGFzc05hbWVcIikgPyBcImNsYXNzTmFtZVwiIDogXCJjbGFzc1wiLFxuICAgICAgYiA9IHdbeF07XG4gICAgcmV0dXJuIGIgPyBiLnNwbGljZSA/IGIuc3BsaWNlKDAsIDAsIFwibWFya3VwXCIpIDogXCJzdHJpbmdcIiA9PSB0eXBlb2YgYiA/IHdbeF0gKz0gXCIgbWFya3VwXCIgOiBcIm9iamVjdFwiID09IHR5cGVvZiBiICYmIChiLm1hcmt1cCA9ICEwKSA6IHdbeF0gPSBcIm1hcmt1cFwiLCBDKFwiZGl2XCIsIHcsIHMgfHwgbnVsbCk7XG4gIH0sIGk7XG59KShDb21wb25lbnQpO1xuXG4vKipcbiAqIENvcGllZCBmcm9tIGV4aXN0aW5nIGZvcm0tanMjU2FuaXRpemVyXG4gKiBjZi4gaHR0cHM6Ly9naXRodWIuY29tL2JwbW4taW8vZm9ybS1qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy9mb3JtLWpzLXZpZXdlci9zcmMvcmVuZGVyL2NvbXBvbmVudHMvU2FuaXRpemVyLmpzXG4gKi9cblxuY29uc3QgTk9ERV9UWVBFX1RFWFQgPSAzLFxuICBOT0RFX1RZUEVfRUxFTUVOVCA9IDE7XG5jb25zdCBBTExPV0VEX05PREVTID0gWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdzcGFuJywgJ2VtJywgJ2EnLCAncCcsICdkaXYnLCAndWwnLCAnb2wnLCAnbGknLCAnaHInLCAnYmxvY2txdW90ZScsICdpbWcnLCAncHJlJywgJ2NvZGUnLCAnYnInLCAnc3Ryb25nJ107XG5jb25zdCBBTExPV0VEX0FUVFJJQlVURVMgPSBbJ2FsaWduJywgJ2FsdCcsICdjbGFzcycsICdocmVmJywgJ2lkJywgJ25hbWUnLCAncmVsJywgJ3RhcmdldCcsICdzcmMnXTtcbmNvbnN0IEFMTE9XRURfVVJJX1BBVFRFUk4gPSAvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cXC1dKyg/OlteYS16Ky5cXC06XXwkKSkvaTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgQVRUUl9XSElURVNQQUNFX1BBVFRFUk4gPSAvW1xcdTAwMDAtXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MTgwRVxcdTIwMDAtXFx1MjAyOVxcdTIwNUZcXHUzMDAwXS9nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuY29uc3QgRk9STV9FTEVNRU5UID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuXG4vKipcbiAqIFNhbml0aXplIGEgSFRNTCBzdHJpbmcgYW5kIHJldHVybiB0aGUgY2xlYW5lZCwgc2FmZSB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplSFRNTChodG1sKSB7XG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoYDwhRE9DVFlQRSBodG1sPlxcbjxodG1sPjxib2R5PjxkaXY+JHtodG1sfWAsICd0ZXh0L2h0bWwnKTtcbiAgZG9jLm5vcm1hbGl6ZSgpO1xuICBjb25zdCBlbGVtZW50ID0gZG9jLmJvZHkuZmlyc3RDaGlsZDtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBzYW5pdGl6ZU5vZGUoIC8qKiBAdHlwZSBFbGVtZW50ICovZWxlbWVudCk7XG4gICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHRoYXQgZG9jdW1lbnQgcGFyc2luZ1xuICAgIC8vIGRvZXMgbm90IHdvcmsgYXQgYWxsLCBkdWUgdG8gSFRNTCBnaWJiZXJpc2hcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzYW5pdGl6ZSBhIEhUTUwgbm9kZSwgcG90ZW50aWFsbHlcbiAqIHJlbW92aW5nIGl0LCBpdHMgY2hpbGRyZW4gb3IgYXR0cmlidXRlcy5cbiAqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3NuYXJrZG93bi9pc3N1ZXMvNzBcbiAqIGFuZCBodHRwczovL2dpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS4gU2ltcGxpZmllZFxuICogZm9yIG91ciB1c2UtY2FzZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVOb2RlKG5vZGUpIHtcbiAgLy8gYWxsb3cgdGV4dCBub2Rlc1xuICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFX1RFWFQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBkaXNhbGxvdyBhbGwgb3RoZXIgbm9kZXMgYnV0IEVsZW1lbnRcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRV9FTEVNRU5UKSB7XG4gICAgcmV0dXJuIG5vZGUucmVtb3ZlKCk7XG4gIH1cbiAgY29uc3QgbGNUYWcgPSBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvLyBkaXNhbGxvdyBub24td2hpdGVsaXN0ZWQgdGFnc1xuICBpZiAoIUFMTE9XRURfTk9ERVMuaW5jbHVkZXMobGNUYWcpKSB7XG4gICAgcmV0dXJuIG5vZGUucmVtb3ZlKCk7XG4gIH1cbiAgY29uc3QgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlcztcblxuICAvLyBjbGVhbiBhdHRyaWJ1dGVzXG4gIGZvciAobGV0IGkgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaS0tOykge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07XG4gICAgY29uc3QgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lO1xuICAgIGNvbnN0IGxjTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIG5vcm1hbGl6ZSBub2RlIHZhbHVlXG4gICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGUudmFsdWUudHJpbSgpO1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGNvbnN0IHZhbGlkID0gaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSk7XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9yY2Ugbm9vcGVuZXIgb24gdGFyZ2V0PVwiX2JsYW5rXCIgbGlua3NcbiAgaWYgKGxjVGFnID09PSAnYScgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJyAmJiBub2RlLmdldEF0dHJpYnV0ZSgncmVsJykgIT09ICdub29wZW5lcicpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGktLTspIHtcbiAgICBzYW5pdGl6ZU5vZGUoIC8qKiBAdHlwZSBFbGVtZW50ICovbm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhdHRyaWJ1dGVzIGZvciB2YWxpZGl0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGNUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBsY05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSkge1xuICAvLyBkaXNhbGxvdyBtb3N0IGF0dHJpYnV0ZXMgYmFzZWQgb24gd2hpdGVsaXN0XG4gIGlmICghQUxMT1dFRF9BVFRSSUJVVEVTLmluY2x1ZGVzKGxjTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBkaXNhbGxvdyBcIkRPTSBjbG9iYmVyaW5nXCIgLyBwb2x1dGlvbiBvZiBkb2N1bWVudCBhbmQgd3JhcHBpbmcgZm9ybSBlbGVtZW50c1xuICBpZiAoKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIEZPUk1fRUxFTUVOVCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGxjTmFtZSA9PT0gJ3RhcmdldCcgJiYgdmFsdWUgIT09ICdfYmxhbmsnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gYWxsb3cgdmFsaWQgdXJsIGxpbmtzIG9ubHlcbiAgaWYgKGxjTmFtZSA9PT0gJ2hyZWYnICYmICFBTExPV0VEX1VSSV9QQVRURVJOLnRlc3QodmFsdWUucmVwbGFjZShBVFRSX1dISVRFU1BBQ0VfUEFUVEVSTiwgJycpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlUb29sdGlwKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIHRvb2x0aXAgJiYganN4KE1hcmt1cCwge1xuICAgIG1hcmt1cDogc2FuaXRpemVIVE1MKHRvb2x0aXApLFxuICAgIHRyaW06IGZhbHNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VQcm9wZXJ0eUFjY2Vzc29ycyhicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBjb25zdCBkaXJlY3RTZXQgPSB1c2VDYWxsYmFjayhwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSwgW2JwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5XSk7XG4gIGNvbnN0IGRpcmVjdEdldCA9IHVzZUNhbGxiYWNrKHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLCBbZWxlbWVudCwgcHJvcGVydHldKTtcbiAgY29uc3QgW2lzRmVlbEVuYWJsZWQsIHNldElzRmVlbEVuYWJsZWRdID0gdXNlU3RhdGUoZmVlbEVuYWJsZWQocHJvcGVydHksIGRpcmVjdEdldCgpKSk7XG4gIGNvbnN0IGhhbmRsZUZlZWxUb2dnbGUgPSB1c2VDYWxsYmFjayh2YWx1ZSA9PiB7XG4gICAgaWYgKCFpc0ZlZWxFbmFibGVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnPScpKSB7XG4gICAgICBzZXRJc0ZlZWxFbmFibGVkKHRydWUpO1xuICAgIH1cbiAgICBpZiAoaXNGZWVsRW5hYmxlZCAmJiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhdmFsdWUuc3RhcnRzV2l0aCgnPScpKSkge1xuICAgICAgc2V0SXNGZWVsRW5hYmxlZChmYWxzZSk7XG4gICAgfVxuICB9LCBbaXNGZWVsRW5hYmxlZF0pO1xuICBjb25zdCBzZXQgPSB1c2VDYWxsYmFjaygodmFsdWUsIGVycm9yKSA9PiB7XG4gICAgaGFuZGxlRmVlbFRvZ2dsZSh2YWx1ZSk7XG4gICAgZGlyZWN0U2V0KHRvRmVlbEV4cHJlc3Npb24odmFsdWUsIHByb3BlcnR5LnR5cGUpKTtcbiAgfSwgW2RpcmVjdFNldCwgcHJvcGVydHksIGhhbmRsZUZlZWxUb2dnbGVdKTtcbiAgY29uc3QgZ2V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChpc0ZlZWxFbmFibGVkKSB7XG4gICAgICByZXR1cm4gZGlyZWN0R2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRmVlbEV4cHJlc3Npb24oZGlyZWN0R2V0KCksIHByb3BlcnR5LnR5cGUpO1xuICB9LCBbZGlyZWN0R2V0LCBwcm9wZXJ0eSwgaXNGZWVsRW5hYmxlZF0pO1xuICBpZiAoIWlzU3BlY2lhbEZlZWxQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICByZXR1cm4gW2RpcmVjdEdldCwgZGlyZWN0U2V0XTtcbiAgfVxuICByZXR1cm4gW2dldCwgc2V0XTtcbn1cbmNvbnN0IGlzU3BlY2lhbEZlZWxQcm9wZXJ0eSA9IHByb3BlcnR5ID0+IHtcbiAgcmV0dXJuIFsnb3B0aW9uYWwnLCAnc3RhdGljJ10uaW5jbHVkZXMocHJvcGVydHkuZmVlbCkgJiYgWydCb29sZWFuJywgJ051bWJlciddLmluY2x1ZGVzKHByb3BlcnR5LnR5cGUpO1xufTtcbmNvbnN0IHRvRmVlbEV4cHJlc3Npb24gPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnPScpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh0eXBlID09PSAnQm9vbGVhbicpIHtcbiAgICB2YWx1ZSA9IHZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiB2YWx1ZTtcbiAgICByZXR1cm4gJz0nICsgISF2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gJz0nICsgdmFsdWUudG9TdHJpbmcoKTtcbn07XG5jb25zdCBmcm9tRmVlbEV4cHJlc3Npb24gPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuc3RhcnRzV2l0aCgnPScpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ0Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSAnZmFsc2UnO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5jb25zdCBmZWVsRW5hYmxlZCA9IChwcm9wZXJ0eSwgdmFsdWUpID0+IHtcbiAgaWYgKCFpc1NwZWNpYWxGZWVsUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICdCb29sZWFuJykge1xuICAgIHJldHVybiAhKHZhbHVlID09PSAnPXRydWUnIHx8IHZhbHVlID09PSAnPWZhbHNlJyk7XG4gIH1cbiAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIGlzTmFOKGZyb21GZWVsRXhwcmVzc2lvbih2YWx1ZSwgcHJvcGVydHkudHlwZSkpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbmZ1bmN0aW9uIHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5U2V0dGVyJDEoYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjaywgZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHNldFByb3BlcnR5VmFsdWUoYnBtbkZhY3RvcnksIGNvbW1hbmRTdGFjaywgZWxlbWVudCwgcHJvcGVydHksIHZhbHVlKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5VmFsaWRhdG9yJDEodHJhbnNsYXRlLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gdmFsdWUgPT4gdmFsaWRhdGVQcm9wZXJ0eSh2YWx1ZSwgcHJvcGVydHksIHRyYW5zbGF0ZSk7XG59XG5mdW5jdGlvbiBncm91cEJ5R3JvdXBJZCQxKHByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIGdyb3VwQnkocHJvcGVydGllcywgJ2dyb3VwJyk7XG59XG5mdW5jdGlvbiBmaW5kQ3VzdG9tR3JvdXAkMShncm91cHMsIGlkKSB7XG4gIHJldHVybiBmaW5kKGdyb3VwcywgZyA9PiBnLmlkID09PSBpZCk7XG59XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHByb3BlcnR5IGV4ZWN1dGVkIGJ5IHRoZSBlbmdpbmU/XG4gKlxuICogQHBhcmFtIHsgeyBiaW5kaW5nOiB7IHR5cGU6IHN0cmluZyB9IH0gfSBwcm9wZXJ0eVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlcm5hbFByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBbJ3plZWJlOnByb3BlcnR5JywgJ3plZWJlOnRhc2tIZWFkZXInXS5pbmNsdWRlcyhwcm9wZXJ0eS5iaW5kaW5nLnR5cGUpO1xufVxuXG5mdW5jdGlvbiBQcm9wZXJ0eURlc2NyaXB0aW9uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4gZGVzY3JpcHRpb24gJiYganN4KE1hcmt1cCwge1xuICAgIG1hcmt1cDogc2FuaXRpemVIVE1MKHRyYW5zbGF0ZShkZXNjcmlwdGlvbikpLFxuICAgIHRyaW06IGZhbHNlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBUZXh0QXJlYVByb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWwsXG4gICAgZmVlbCxcbiAgICBsYW5ndWFnZSxcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4gVGV4dEFyZWFFbnRyeSh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBmZWVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIG1vbm9zcGFjZTogISFsYW5ndWFnZSxcbiAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IkMSh0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFN0cmluZ1Byb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWwsXG4gICAgZmVlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICB0b29sdGlwXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICByZXR1cm4gVGV4dEZpZWxkRW50cnkoe1xuICAgIGRlYm91bmNlLFxuICAgIGVsZW1lbnQsXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGZlZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgZGVzY3JpcHRpb246IFByb3BlcnR5RGVzY3JpcHRpb24oe1xuICAgICAgZGVzY3JpcHRpb25cbiAgICB9KSxcbiAgICBzZXRWYWx1ZTogcHJvcGVydHlTZXR0ZXIkMShicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSksXG4gICAgdmFsaWRhdGU6IHByb3BlcnR5VmFsaWRhdG9yJDEodHJhbnNsYXRlLCBwcm9wZXJ0eSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgdG9vbHRpcFxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VTZXJ2aWNlSWZBdmFpbGFibGUoc2VydmljZSwgZmFsbGJhY2spIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB1c2VTZXJ2aWNlKHNlcnZpY2UsIGZhbHNlKTtcbiAgaWYgKCFyZXNvbHZlZCkge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5mdW5jdGlvbiB3aXRoVmFyaWFibGVDb250ZXh0KENvbXBvbmVudCkge1xuICByZXR1cm4gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGJwbW5FbGVtZW50LFxuICAgICAgZWxlbWVudFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBibyA9IChicG1uRWxlbWVudCB8fCBlbGVtZW50KS5idXNpbmVzc09iamVjdDtcbiAgICBjb25zdCBbdmFyaWFibGVzLCBzZXRWYXJpYWJsZXNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IGV2ZW50QnVzID0gdXNlU2VydmljZSgnZXZlbnRCdXMnKTtcbiAgICBjb25zdCB2YXJpYWJsZVJlc29sdmVyID0gdXNlU2VydmljZUlmQXZhaWxhYmxlKCd2YXJpYWJsZVJlc29sdmVyJywge1xuICAgICAgZ2V0VmFyaWFibGVzRm9yRWxlbWVudFxuICAgIH0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBleHRyYWN0VmFyaWFibGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBhd2FpdCB2YXJpYWJsZVJlc29sdmVyLmdldFZhcmlhYmxlc0ZvckVsZW1lbnQoYm8pO1xuICAgICAgICBzZXRWYXJpYWJsZXModmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnZhcmlhYmxlLFxuICAgICAgICAgICAgaW5mbzogdmFyaWFibGUuaW5mbyB8fCB2YXJpYWJsZS5vcmlnaW4gJiYgJ1dyaXR0ZW4gaW4gJyArIHZhcmlhYmxlLm9yaWdpbi5tYXAob3JpZ2luID0+IG9yaWdpbi5uYW1lIHx8IG9yaWdpbi5pZCkuam9pbignLCAnKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiB1bmRlZmluZWQsIHNvIHRoZSBldmVudCBwcm9wYWdhdGlvbiBpcyBub3QgY2FuY2VsZWQuXG4gICAgICAvLyBDZi4gaHR0cHM6Ly9naXRodWIuY29tL2NhbXVuZGEvY2FtdW5kYS1tb2RlbGVyL2lzc3Vlcy8zMzkyXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgZXh0cmFjdFZhcmlhYmxlcygpO1xuICAgICAgfTtcbiAgICAgIGV2ZW50QnVzLm9uKCdjb21tYW5kU3RhY2suY2hhbmdlZCcsIGNhbGxiYWNrKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBldmVudEJ1cy5vZmYoJ2NvbW1hbmRTdGFjay5jaGFuZ2VkJywgY2FsbGJhY2spO1xuICAgICAgfTtcbiAgICB9LCBbYm9dKTtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlc1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3aXRoVG9vbHRpcENvbnRhaW5lcihDb21wb25lbnQpIHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB0b29sdGlwQ29udGFpbmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB1c2VTZXJ2aWNlKCdjb25maWcnKTtcbiAgICAgIHJldHVybiBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXNQYW5lbCAmJiBjb25maWcucHJvcGVydGllc1BhbmVsLmZlZWxUb29sdGlwQ29udGFpbmVyO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4ganN4KENvbXBvbmVudCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB0b29sdGlwQ29udGFpbmVyOiB0b29sdGlwQ29udGFpbmVyXG4gICAgfSk7XG4gIH07XG59XG5cbmNvbnN0IEZlZWxFbnRyeSA9IHdpdGhUb29sdGlwQ29udGFpbmVyKEZlZWxFbnRyeSQxKTtcbmNvbnN0IEZlZWxUZXh0QXJlYUVudHJ5ID0gd2l0aFRvb2x0aXBDb250YWluZXIoRmVlbFRleHRBcmVhRW50cnkkMSk7XG5jb25zdCBGZWVsRW50cnlXaXRoVmFyaWFibGVDb250ZXh0ID0gd2l0aFZhcmlhYmxlQ29udGV4dChGZWVsRW50cnkpO1xuY29uc3QgRmVlbFRleHRBcmVhRW50cnlXaXRoVmFyaWFibGVDb250ZXh0ID0gd2l0aFZhcmlhYmxlQ29udGV4dChGZWVsVGV4dEFyZWFFbnRyeSk7XG5cbmZ1bmN0aW9uIEZlZWxQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBmZWVsLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIHRvb2x0aXBcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgZGVib3VuY2UgPSB1c2VTZXJ2aWNlKCdkZWJvdW5jZUlucHV0JyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IFRleHRGaWVsZENvbXBvbmVudCA9ICFpc0V4dGVybmFsUHJvcGVydHkocHJvcGVydHkpID8gRmVlbEVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCA6IEZlZWxFbnRyeTtcbiAgcmV0dXJuIFRleHRGaWVsZENvbXBvbmVudCh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudCxcbiAgICBnZXRWYWx1ZTogcHJvcGVydHlHZXR0ZXIkMShlbGVtZW50LCBwcm9wZXJ0eSksXG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgZmVlbCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IkMSh0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEZlZWxUZXh0QXJlYVByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVkaXRhYmxlLFxuICAgIGxhYmVsLFxuICAgIGZlZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgVGV4dEFyZWFDb21wb25lbnQgPSAhaXNFeHRlcm5hbFByb3BlcnR5KHByb3BlcnR5KSA/IEZlZWxUZXh0QXJlYUVudHJ5V2l0aFZhcmlhYmxlQ29udGV4dCA6IEZlZWxUZXh0QXJlYUVudHJ5O1xuICByZXR1cm4gVGV4dEFyZWFDb21wb25lbnQoe1xuICAgIGRlYm91bmNlLFxuICAgIGVsZW1lbnQsXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGZlZWwsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgZGVzY3JpcHRpb246IFByb3BlcnR5RGVzY3JpcHRpb24oe1xuICAgICAgZGVzY3JpcHRpb25cbiAgICB9KSxcbiAgICBzZXRWYWx1ZTogcHJvcGVydHlTZXR0ZXIkMShicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSksXG4gICAgdmFsaWRhdGU6IHByb3BlcnR5VmFsaWRhdG9yJDEodHJhbnNsYXRlLCBwcm9wZXJ0eSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgdG9vbHRpcFxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBEcm9wZG93blByb3BlcnR5JDEocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWwsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgZ2V0T3B0aW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjaG9pY2VzLFxuICAgICAgb3B0aW9uYWxcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgbGV0IGRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgIGRyb3Bkb3duT3B0aW9ucyA9IGNob2ljZXMubWFwKCh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICBkcm9wZG93bk9wdGlvbnMgPSBbe1xuICAgICAgICBsYWJlbDogJycsXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgIH0sIC4uLmRyb3Bkb3duT3B0aW9uc107XG4gICAgfVxuICAgIHJldHVybiBkcm9wZG93bk9wdGlvbnM7XG4gIH07XG4gIHJldHVybiBTZWxlY3RFbnRyeSh7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBnZXRPcHRpb25zLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyJDEoZWxlbWVudCwgcHJvcGVydHkpLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlciQxKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IkMSh0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEJvb2xlYW5Qcm9wZXJ0eSQxKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVkaXRhYmxlLFxuICAgIGxhYmVsLFxuICAgIHRvb2x0aXAsXG4gICAgZmVlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3QgQ29tcG9uZW50ID0gZmVlbCA9PT0gJ29wdGlvbmFsJyA/IEZlZWxDaGVja2JveEVudHJ5IDogQ2hlY2tib3hFbnRyeTtcbiAgY29uc3QgW2dldFZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VQcm9wZXJ0eUFjY2Vzc29ycyhicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSk7XG4gIHJldHVybiBDb21wb25lbnQoe1xuICAgIGVsZW1lbnQsXG4gICAgZGVib3VuY2UsXG4gICAgdHJhbnNsYXRlLFxuICAgIGdldFZhbHVlLFxuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgc2V0VmFsdWUsXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgdG9vbHRpcFxuICAgIH0pXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBOdW1iZXJQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBmZWVsLFxuICAgIHRvb2x0aXBcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBDb21wb25lbnQgPSBmZWVsID09PSAnb3B0aW9uYWwnID8gRmVlbE51bWJlckVudHJ5IDogTnVtYmVyRmllbGRFbnRyeTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBbZ2V0VmFsdWUsIHNldFZhbHVlXSA9IHVzZVByb3BlcnR5QWNjZXNzb3JzKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgY29uc3QgdmFsaWRhdGUgPSB1c2VDYWxsYmFjayh2YWx1ZSA9PiB7XG4gICAgaWYgKGlzU3BlY2lhbEZlZWxQcm9wZXJ0eShwcm9wZXJ0eSkgJiYgaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ2UnKSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnU2NpZW50aWZpYyBub3RhdGlvbiBpcyBkaXNhbGxvd2VkIGluIEZFRUwuJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0b3IgPSBwcm9wZXJ0eVZhbGlkYXRvciQxKHRyYW5zbGF0ZSwgcHJvcGVydHkpO1xuICAgIHJldHVybiBkZWZhdWx0VmFsaWRhdG9yKHZhbHVlKTtcbiAgfSwgW3RyYW5zbGF0ZSwgcHJvcGVydHldKTtcbiAgcmV0dXJuIENvbXBvbmVudCh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudCxcbiAgICBnZXRWYWx1ZSxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlLFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlLFxuICAgIHRvb2x0aXA6IFByb3BlcnR5VG9vbHRpcCh7XG4gICAgICB0b29sdGlwXG4gICAgfSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEN1c3RvbVByb3BlcnRpZXMkMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlbGVtZW50VGVtcGxhdGUsXG4gICAgaW5qZWN0b3JcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHByb3BlcnRpZXMsXG4gICAgZ3JvdXBzOiBwcm9wZXJ0eUdyb3Vwc1xuICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuXG4gIC8vICgxKSBncm91cCBwcm9wZXJ0aWVzIGJ5IGdyb3VwIGlkXG4gIGNvbnN0IGdyb3VwZWRQcm9wZXJ0aWVzID0gZ3JvdXBCeUdyb3VwSWQkMShwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZGVmYXVsdFByb3BzID0gW107XG4gIGZvckVhY2goZ3JvdXBlZFByb3BlcnRpZXMsIChwcm9wZXJ0aWVzLCBncm91cElkKSA9PiB7XG4gICAgY29uc3QgZ3JvdXAgPSBmaW5kQ3VzdG9tR3JvdXAkMShwcm9wZXJ0eUdyb3VwcywgZ3JvdXBJZCk7XG4gICAgaWYgKCFncm91cCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcy5wdXNoKC4uLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBhZGRDdXN0b21Hcm91cCQxKGdyb3Vwcywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIGlkOiBgRWxlbWVudFRlbXBsYXRlc19fQ3VzdG9tUHJvcGVydGllcy0ke2dyb3VwSWR9YCxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoZ3JvdXAubGFiZWwpLFxuICAgICAgb3BlbkJ5RGVmYXVsdDogZ3JvdXAub3BlbkJ5RGVmYXVsdCxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgICB0ZW1wbGF0ZUlkOiBgJHtpZH0tJHtncm91cElkfWAsXG4gICAgICB0b29sdGlwOiBQcm9wZXJ0eVRvb2x0aXAoe1xuICAgICAgICB0b29sdGlwOiBncm91cC50b29sdGlwXG4gICAgICB9KVxuICAgIH0pO1xuICB9KTtcblxuICAvLyAoMikgYWRkIGRlZmF1bHQgY3VzdG9tIHByb3BzXG4gIGlmIChkZWZhdWx0UHJvcHMubGVuZ3RoKSB7XG4gICAgYWRkQ3VzdG9tR3JvdXAkMShncm91cHMsIHtcbiAgICAgIGlkOiAnRWxlbWVudFRlbXBsYXRlc19fQ3VzdG9tUHJvcGVydGllcycsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCdDdXN0b20gcHJvcGVydGllcycpLFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BlcnRpZXM6IGRlZmF1bHRQcm9wcyxcbiAgICAgIHRlbXBsYXRlSWQ6IGlkXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cbmZ1bmN0aW9uIGFkZEN1c3RvbUdyb3VwJDEoZ3JvdXBzLCBwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBvcGVuQnlEZWZhdWx0ID0gdHJ1ZSxcbiAgICBwcm9wZXJ0aWVzLFxuICAgIHRlbXBsYXRlSWQsXG4gICAgdG9vbHRpcFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGN1c3RvbVByb3BlcnRpZXNHcm91cCA9IHtcbiAgICBpZCxcbiAgICBsYWJlbCxcbiAgICBjb21wb25lbnQ6IEdyb3VwLFxuICAgIGVudHJpZXM6IFtdLFxuICAgIHNob3VsZE9wZW46IG9wZW5CeURlZmF1bHQsXG4gICAgdG9vbHRpcFxuICB9O1xuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gY3JlYXRlQ3VzdG9tRW50cnkkMShgY3VzdG9tLWVudHJ5LSR7dGVtcGxhdGVJZH0tJHtpbmRleH1gLCBlbGVtZW50LCBwcm9wZXJ0eSk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjdXN0b21Qcm9wZXJ0aWVzR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY3VzdG9tUHJvcGVydGllc0dyb3VwLmVudHJpZXMubGVuZ3RoKSB7XG4gICAgZ3JvdXBzLnB1c2goY3VzdG9tUHJvcGVydGllc0dyb3VwKTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRW50cnkkMShpZCwgZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgbGV0IHtcbiAgICB0eXBlLFxuICAgIGZlZWxcbiAgfSA9IHByb3BlcnR5O1xuICBpZiAoIXR5cGUpIHtcbiAgICB0eXBlID0gZ2V0RGVmYXVsdFR5cGUkMShwcm9wZXJ0eSk7XG4gIH1cbiAgaWYgKGZlZWwgPT09ICdyZXF1aXJlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IEZlZWxQcm9wZXJ0eSxcbiAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IE51bWJlclByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzTnVtYmVyRmllbGRFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ0Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgY29tcG9uZW50OiBCb29sZWFuUHJvcGVydHkkMSxcbiAgICAgIGlzRWRpdGVkOiBpc0NoZWNrYm94RW50cnlFZGl0ZWQsXG4gICAgICBwcm9wZXJ0eVxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdEcm9wZG93bicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IERyb3Bkb3duUHJvcGVydHkkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1NlbGVjdEVudHJ5RWRpdGVkLFxuICAgICAgcHJvcGVydHlcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIGlmIChmZWVsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgY29tcG9uZW50OiBGZWVsUHJvcGVydHksXG4gICAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZCxcbiAgICAgICAgcHJvcGVydHlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGNvbXBvbmVudDogU3RyaW5nUHJvcGVydHkkMSxcbiAgICAgIGlzRWRpdGVkOiBpc1RleHRGaWVsZEVudHJ5RWRpdGVkLFxuICAgICAgcHJvcGVydHlcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSAnVGV4dCcpIHtcbiAgICBpZiAoZmVlbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbXBvbmVudDogRmVlbFRleHRBcmVhUHJvcGVydHksXG4gICAgICAgIGlzRWRpdGVkOiBpc0ZlZWxFbnRyeUVkaXRlZCxcbiAgICAgICAgcHJvcGVydHlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGNvbXBvbmVudDogVGV4dEFyZWFQcm9wZXJ0eSQxLFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFR5cGUkMShwcm9wZXJ0eSkge1xuICBjb25zdCB7XG4gICAgYmluZGluZ1xuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBpZiAoW1BST1BFUlRZX1RZUEUkMSwgWkVFQkVfVEFTS19ERUZJTklUSU9OX1RZUEVfVFlQRSwgWkVFQkVfVEFTS19ERUZJTklUSU9OLCBaRUJCRV9JTlBVVF9UWVBFLCBaRUVCRV9PVVRQVVRfVFlQRSwgWkVFQkVfUFJPUEVSVFlfVFlQRSwgWkVFQkVfVEFTS19IRUFERVJfVFlQRV0uaW5jbHVkZXModHlwZSkpIHtcbiAgICByZXR1cm4gJ1N0cmluZyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVmZXJlbmNlU2VsZWN0RW50cnkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGF1dG9Gb2N1c0VudHJ5LFxuICAgIGVsZW1lbnQsXG4gICAgZ2V0T3B0aW9uc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zKGVsZW1lbnQpO1xuICBjb25zdCBwcmV2T3B0aW9ucyA9IHVzZVByZXZpb3VzKG9wdGlvbnMpO1xuXG4gIC8vIGF1dG8gZm9jdXMgc3BlY2lmYyBvdGhlciBlbnRyeSB3aGVuIG9wdGlvbnMgY2hhbmdlZFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXNFbnRyeSAmJiBwcmV2T3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IHByZXZPcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBxdWVyeShgW2RhdGEtZW50cnktaWQ9XCIke2F1dG9Gb2N1c0VudHJ5fVwiXWApO1xuICAgICAgY29uc3QgZm9jdXNhYmxlSW5wdXQgPSBxdWVyeSgnLmJpby1wcm9wZXJ0aWVzLXBhbmVsLWlucHV0JywgZW50cnkpO1xuICAgICAgaWYgKGZvY3VzYWJsZUlucHV0KSB7XG4gICAgICAgIGZvY3VzYWJsZUlucHV0LnNlbGVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW29wdGlvbnNdKTtcbiAgcmV0dXJuIGpzeChTZWxlY3RFbnRyeSwge1xuICAgIC4uLnByb3BzXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgZXZlbnRUeXBlKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGV2ZW50RGVmaW5pdGlvbnMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V2ZW50RGVmaW5pdGlvbnMnKSB8fCBbXTtcbiAgcmV0dXJuIGZpbmQoZXZlbnREZWZpbml0aW9ucywgZnVuY3Rpb24gKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4gaXMoZGVmaW5pdGlvbiwgZXZlbnRUeXBlKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpc01lc3NhZ2VTdXBwb3J0ZWQoZWxlbWVudCkge1xuICByZXR1cm4gaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSB8fCBpc0FueShlbGVtZW50LCBbJ2JwbW46U3RhcnRFdmVudCcsICdicG1uOkVuZEV2ZW50JywgJ2JwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudCcsICdicG1uOkJvdW5kYXJ5RXZlbnQnLCAnYnBtbjpJbnRlcm1lZGlhdGVDYXRjaEV2ZW50J10pICYmICEhZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VFdmVudERlZmluaXRpb24oZWxlbWVudCkge1xuICBpZiAoaXMoZWxlbWVudCwgJ2JwbW46UmVjZWl2ZVRhc2snKSkge1xuICAgIHJldHVybiBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gZ2V0RXZlbnREZWZpbml0aW9uKGVsZW1lbnQsICdicG1uOk1lc3NhZ2VFdmVudERlZmluaXRpb24nKTtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2UoZWxlbWVudCkge1xuICBjb25zdCBtZXNzYWdlRXZlbnREZWZpbml0aW9uID0gZ2V0TWVzc2FnZUV2ZW50RGVmaW5pdGlvbihlbGVtZW50KTtcbiAgcmV0dXJuIG1lc3NhZ2VFdmVudERlZmluaXRpb24gJiYgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbi5nZXQoJ21lc3NhZ2VSZWYnKTtcbn1cbmZ1bmN0aW9uIGdldFNpZ25hbEV2ZW50RGVmaW5pdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBnZXRFdmVudERlZmluaXRpb24oZWxlbWVudCwgJ2JwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uJyk7XG59XG5cbmNvbnN0IEVNUFRZX09QVElPTiA9ICcnO1xuY29uc3QgQ1JFQVRFX05FV19PUFRJT04gPSAnY3JlYXRlLW5ldyc7XG5cbi8qKlxuICogQHR5cGVkZWYgeyBpbXBvcnQoJ0BicG1uLWlvL3Byb3BlcnRpZXMtcGFuZWwnKS5FbnRyeURlZmluaXRpb24gfSBFbnRyeVxuICovXG5cbi8qKlxuICogQHJldHVybnMge0FycmF5PEVudHJ5Pn0gZW50cmllc1xuICovXG5mdW5jdGlvbiBNZXNzYWdlUHJvcHMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBpZiAoIWlzTWVzc2FnZVN1cHBvcnRlZChlbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW3tcbiAgICBpZDogJ21lc3NhZ2VSZWYnLFxuICAgIGNvbXBvbmVudDogTWVzc2FnZVJlZixcbiAgICBpc0VkaXRlZDogaXNTZWxlY3RFbnRyeUVkaXRlZFxuICB9XTtcbn1cbmZ1bmN0aW9uIE1lc3NhZ2VSZWYocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5Jyk7XG4gIGNvbnN0IG1vZGVsaW5nID0gdXNlU2VydmljZSgnbW9kZWxpbmcnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IG1lc3NhZ2VFdmVudERlZmluaXRpb24gPSBnZXRNZXNzYWdlRXZlbnREZWZpbml0aW9uKGVsZW1lbnQpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gZ2V0TWVzc2FnZShlbGVtZW50KTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UuZ2V0KCdpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFlfT1BUSU9OO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBjb25zdCByb290ID0gZ2V0Um9vdChtZXNzYWdlRXZlbnREZWZpbml0aW9uKTtcbiAgICBsZXQgbWVzc2FnZTtcblxuICAgIC8vICgxKSBjcmVhdGUgbmV3IG1lc3NhZ2VcbiAgICBpZiAodmFsdWUgPT09IENSRUFURV9ORVdfT1BUSU9OKSB7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZCgnTWVzc2FnZV8nKTtcbiAgICAgIG1lc3NhZ2UgPSBjcmVhdGVFbGVtZW50KCdicG1uOk1lc3NhZ2UnLCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lOiBpZFxuICAgICAgfSwgcm9vdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgdmFsdWUgPSBtZXNzYWdlLmdldCgnaWQnKTtcbiAgICB9XG5cbiAgICAvLyAoMikgdXBkYXRlIChvciByZW1vdmUpIG1lc3NhZ2VSZWZcbiAgICBtZXNzYWdlID0gZmluZFJvb3RFbGVtZW50QnlJZChtZXNzYWdlRXZlbnREZWZpbml0aW9uLCAnYnBtbjpNZXNzYWdlJywgdmFsdWUpIHx8IG1lc3NhZ2U7XG5cbiAgICAvLyAoMykgY29tbWl0IGFsbCB1cGRhdGVzXG4gICAgcmV0dXJuIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgbWVzc2FnZUV2ZW50RGVmaW5pdGlvbiwge1xuICAgICAgbWVzc2FnZVJlZjogbWVzc2FnZVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gW3tcbiAgICAgIHZhbHVlOiBFTVBUWV9PUFRJT04sXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKCc8bm9uZT4nKVxuICAgIH0sIHtcbiAgICAgIHZhbHVlOiBDUkVBVEVfTkVXX09QVElPTixcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0NyZWF0ZSBuZXcgLi4uJylcbiAgICB9XTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IGZpbmRSb290RWxlbWVudHNCeVR5cGUoZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksICdicG1uOk1lc3NhZ2UnKTtcbiAgICBjb25zdCBmaWx0ZXJlZE1lc3NhZ2VzID0gd2l0aG91dFRlbXBsYXRlZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcbiAgICBzb3J0QnlOYW1lKGZpbHRlcmVkTWVzc2FnZXMpLmZvckVhY2gobWVzc2FnZSA9PiB7XG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogbWVzc2FnZS5nZXQoJ2lkJyksXG4gICAgICAgIGxhYmVsOiBtZXNzYWdlLmdldCgnbmFtZScpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcbiAgcmV0dXJuIFJlZmVyZW5jZVNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkOiAnbWVzc2FnZVJlZicsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnR2xvYmFsIG1lc3NhZ2UgcmVmZXJlbmNlJyksXG4gICAgYXV0b0ZvY3VzRW50cnk6ICdtZXNzYWdlTmFtZScsXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0T3B0aW9uc1xuICB9KTtcbn1cbmZ1bmN0aW9uIHdpdGhvdXRUZW1wbGF0ZWRNZXNzYWdlcyhtZXNzYWdlcykge1xuICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKG1lc3NhZ2UgPT4gIW1lc3NhZ2UuZ2V0KCd6ZWViZTptb2RlbGVyVGVtcGxhdGUnKSk7XG59XG5cbi8vIGhlbHBlciAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHNvcnRCeU5hbWUoZWxlbWVudHMpIHtcbiAgcmV0dXJuIHNvcnRCeShlbGVtZW50cywgZSA9PiAoZS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuY29uc3QgTE9XRVJfUFJJT1JJVFkkMSA9IDMwMDtcbmNvbnN0IEFMV0FZU19ESVNQTEFZRURfR1JPVVBTJDEgPSBbJ2dlbmVyYWwnLCAnZG9jdW1lbnRhdGlvbicsICdtdWx0aUluc3RhbmNlJ107XG5sZXQgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlciQxID0gY2xhc3MgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlciB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRUZW1wbGF0ZXMsIHByb3BlcnRpZXNQYW5lbCwgaW5qZWN0b3IpIHtcbiAgICBwcm9wZXJ0aWVzUGFuZWwucmVnaXN0ZXJQcm92aWRlcihMT1dFUl9QUklPUklUWSQxLCB0aGlzKTtcbiAgICB0aGlzLl9lbGVtZW50VGVtcGxhdGVzID0gZWxlbWVudFRlbXBsYXRlcztcbiAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG4gIGdldEdyb3VwcyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdyb3VwcyA9PiB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2luamVjdG9yO1xuICAgICAgdXBkYXRlTWVzc2FnZUdyb3VwKGdyb3VwcywgZWxlbWVudCk7XG4gICAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dUZW1wbGF0ZVByb3BlcnRpZXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG5cbiAgICAgIC8vICgwKSBDb3B5IHByb3ZpZGVkIGdyb3Vwc1xuICAgICAgZ3JvdXBzID0gZ3JvdXBzLnNsaWNlKCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXNHcm91cCA9IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaWQ6ICdFbGVtZW50VGVtcGxhdGVzX19UZW1wbGF0ZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RlbXBsYXRlJyksXG4gICAgICAgIGNvbXBvbmVudDogY3JlYXRlRWxlbWVudFRlbXBsYXRlc0dyb3VwKHtcbiAgICAgICAgICBnZXRUZW1wbGF0ZUlkOiBnZXRUZW1wbGF0ZUlkJDFcbiAgICAgICAgfSksXG4gICAgICAgIGVudHJpZXM6IFRlbXBsYXRlUHJvcHMoe1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZWxlbWVudFRlbXBsYXRlczogdGhpcy5fZWxlbWVudFRlbXBsYXRlc1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgLy8gKDEpIEFkZCB0ZW1wbGF0ZXMgZ3JvdXBcbiAgICAgIGFkZEdyb3Vwc0FmdGVyJDEoQUxXQVlTX0RJU1BMQVlFRF9HUk9VUFMkMSwgZ3JvdXBzLCBbdGVtcGxhdGVzR3JvdXBdKTtcbiAgICAgIGxldCBlbGVtZW50VGVtcGxhdGUgPSB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldChlbGVtZW50KTtcbiAgICAgIGlmIChlbGVtZW50VGVtcGxhdGUpIHtcbiAgICAgICAgZWxlbWVudFRlbXBsYXRlID0gYXBwbHlDb25kaXRpb25zKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU3BlY2lmaWNHcm91cHMgPSBbXS5jb25jYXQoQ3VzdG9tUHJvcGVydGllcyQxKHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnRUZW1wbGF0ZSxcbiAgICAgICAgICBpbmplY3RvclxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gKDIpIGFkZCB0ZW1wbGF0ZS1zcGVjaWZpYyBwcm9wZXJ0aWVzIGdyb3Vwc1xuICAgICAgICBhZGRHcm91cHNBZnRlciQxKCdFbGVtZW50VGVtcGxhdGVzX19UZW1wbGF0ZScsIGdyb3VwcywgdGVtcGxhdGVTcGVjaWZpY0dyb3Vwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBhcHBseSBlbnRyaWVzIHZpc2libGVcbiAgICAgIGlmIChnZXRUZW1wbGF0ZUlkJDEoZWxlbWVudCkpIHtcbiAgICAgICAgZ3JvdXBzID0gZmlsdGVyV2l0aEVudHJpZXNWaXNpYmxlJDEoZWxlbWVudFRlbXBsYXRlIHx8IHt9LCBncm91cHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9O1xuICB9XG4gIF9zaG91bGRTaG93VGVtcGxhdGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVJZCQxKGVsZW1lbnQpIHx8IHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMuZ2V0QWxsKGVsZW1lbnQpLmxlbmd0aDtcbiAgfVxufTtcbkVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIkMS4kaW5qZWN0ID0gWydlbGVtZW50VGVtcGxhdGVzJywgJ3Byb3BlcnRpZXNQYW5lbCcsICdpbmplY3RvciddO1xuXG4vLyBoZWxwZXIgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIHVwZGF0ZU1lc3NhZ2VHcm91cChncm91cHMsIGVsZW1lbnQpIHtcbiAgY29uc3QgbWVzc2FnZUdyb3VwID0gZmluZEdyb3VwKGdyb3VwcywgJ21lc3NhZ2UnKTtcbiAgaWYgKCFtZXNzYWdlR3JvdXApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVzc2FnZUdyb3VwLmVudHJpZXMgPSBvdmVycmlkZUdlbmVyaWNFbnRyaWVzKG1lc3NhZ2VHcm91cC5lbnRyaWVzLCBNZXNzYWdlUHJvcHMoe1xuICAgIGVsZW1lbnRcbiAgfSkpO1xufVxuZnVuY3Rpb24gZmluZEdyb3VwKGdyb3VwcywgaWQpIHtcbiAgcmV0dXJuIGdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gaWQpO1xufVxuZnVuY3Rpb24gb3ZlcnJpZGVHZW5lcmljRW50cmllcyhvbGRFbnRyaWVzLCBuZXdFbnRyaWVzKSB7XG4gIHJldHVybiBvbGRFbnRyaWVzLm1hcChvbGRFbnRyeSA9PiBuZXdFbnRyaWVzLmZpbmQobmV3RW50cnkgPT4gbmV3RW50cnkuaWQgPT09IG9sZEVudHJ5LmlkKSB8fCBvbGRFbnRyeSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBpZE9ySWRzXG4gKiBAcGFyYW0ge0FycmF5PHsgaWQ6IHN0cmluZyB9fSBncm91cHNcbiAqIEBwYXJhbSB7QXJyYXk8eyBpZDogc3RyaW5nIH0+fSBncm91cHNUb0FkZFxuICovXG5mdW5jdGlvbiBhZGRHcm91cHNBZnRlciQxKGlkT3JJZHMsIGdyb3VwcywgZ3JvdXBzVG9BZGQpIHtcbiAgbGV0IGlkcyA9IGlkT3JJZHM7XG4gIGlmICghQXJyYXkuaXNBcnJheShpZE9ySWRzKSkge1xuICAgIGlkcyA9IFtpZE9ySWRzXTtcbiAgfVxuXG4gIC8vIGZpbmQgaW5kZXggb2YgbGFzdCBncm91cCB3aXRoIHByb3ZpZGVkIGlkXG4gIGNvbnN0IGluZGV4ID0gZ3JvdXBzLnJlZHVjZSgoYWNjLCBncm91cCwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaWRzLmluY2x1ZGVzKGdyb3VwLmlkKSA/IGluZGV4IDogYWNjO1xuICB9LCAtMSk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBncm91cHMuc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4uZ3JvdXBzVG9BZGQpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFkZCBpbiB0aGUgYmVnaW5uaW5nIGlmIGdyb3VwIHdpdGggcHJvdmlkZWQgaWQgaXMgbWlzc2luZ1xuICAgIGdyb3Vwcy51bnNoaWZ0KC4uLmdyb3Vwc1RvQWRkKTtcbiAgfVxufVxuZnVuY3Rpb24gZmlsdGVyV2l0aEVudHJpZXNWaXNpYmxlJDEodGVtcGxhdGUsIGdyb3Vwcykge1xuICBpZiAoIXRlbXBsYXRlLmVudHJpZXNWaXNpYmxlKSB7XG4gICAgcmV0dXJuIGdyb3Vwcy5maWx0ZXIoZ3JvdXAgPT4ge1xuICAgICAgcmV0dXJuIEFMV0FZU19ESVNQTEFZRURfR1JPVVBTJDEuaW5jbHVkZXMoZ3JvdXAuaWQpIHx8IGdyb3VwLmlkLnN0YXJ0c1dpdGgoJ0VsZW1lbnRUZW1wbGF0ZXNfXycpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59XG5cbnZhciBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGUkMSA9IHtcbiAgX19kZXBlbmRzX186IFt0cmFuc2xhdGVNb2R1bGVdLFxuICBfX2luaXRfXzogWydlbGVtZW50VGVtcGxhdGVzUHJvcGVydGllc1Byb3ZpZGVyJ10sXG4gIGVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXI6IFsndHlwZScsIEVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIkMV1cbn07XG5cbnZhciBpbmRleCQxID0ge1xuICBfX2RlcGVuZHNfXzogW2NvcmVNb2R1bGUkMSwgcHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlJDFdXG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGxlZ2FjeSBzY29wZXMgZGVzY3JpcHRvciB0byBuZXdlciBzdXBwb3J0ZWQgYXJyYXkgc3RydWN0dXJlLlxuICpcbiAqIEZvciBleGFtcGxlLCBpdCB0cmFuc2Zvcm1zXG4gKlxuICogc2NvcGVzOiB7XG4gKiAgICdjYW11bmRhOkNvbm5lY3Rvcic6XG4gKiAgICAgeyBwcm9wZXJ0aWVzOiBbXVxuICogICB9XG4gKiB9XG4gKlxuICogdG9cbiAqXG4gKiBzY29wZXM6IFtcbiAqICAge1xuICogICAgIHR5cGU6ICdjYW11bmRhOkNvbm5lY3RvcicsXG4gKiAgICAgcHJvcGVydGllczogW11cbiAqICAgfVxuICogXVxuICpcbiAqIEBwYXJhbSB7U2NvcGVzRGVzY3JpcHRvcn0gc2NvcGVzXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiBoYW5kbGVMZWdhY3lTY29wZXMoc2NvcGVzID0gW10pIHtcbiAgY29uc3Qgc2NvcGVzQXNBcnJheSA9IFtdO1xuICBpZiAoIWlzT2JqZWN0KHNjb3BlcykpIHtcbiAgICByZXR1cm4gc2NvcGVzO1xuICB9XG4gIGZvckVhY2goa2V5cyhzY29wZXMpLCBmdW5jdGlvbiAoc2NvcGVOYW1lKSB7XG4gICAgc2NvcGVzQXNBcnJheS5wdXNoKGFzc2lnbih7XG4gICAgICB0eXBlOiBzY29wZU5hbWVcbiAgICB9LCBzY29wZXNbc2NvcGVOYW1lXSkpO1xuICB9KTtcbiAgcmV0dXJuIHNjb3Blc0FzQXJyYXk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGlucHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCB7XG4gICAgbmFtZSxcbiAgICBzY3JpcHRGb3JtYXRcbiAgfSA9IGJpbmRpbmc7XG4gIGxldCBwYXJhbWV0ZXJWYWx1ZSwgcGFyYW1ldGVyRGVmaW5pdGlvbjtcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6U2NyaXB0Jywge1xuICAgICAgc2NyaXB0Rm9ybWF0LFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwYXJhbWV0ZXJWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6SW5wdXRQYXJhbWV0ZXInLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogcGFyYW1ldGVyVmFsdWUsXG4gICAgZGVmaW5pdGlvbjogcGFyYW1ldGVyRGVmaW5pdGlvblxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb3V0cHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGdpdmVuXG4gKiBiaW5kaW5nIGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU91dHB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3Qge1xuICAgIHNjcmlwdEZvcm1hdCxcbiAgICBzb3VyY2VcbiAgfSA9IGJpbmRpbmc7XG4gIGxldCBwYXJhbWV0ZXJWYWx1ZSwgcGFyYW1ldGVyRGVmaW5pdGlvbjtcbiAgaWYgKHNjcmlwdEZvcm1hdCkge1xuICAgIHBhcmFtZXRlckRlZmluaXRpb24gPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6U2NyaXB0Jywge1xuICAgICAgc2NyaXB0Rm9ybWF0LFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtZXRlclZhbHVlID0gc291cmNlO1xuICB9XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6T3V0cHV0UGFyYW1ldGVyJywge1xuICAgIG5hbWU6IHZhbHVlLFxuICAgIHZhbHVlOiBwYXJhbWV0ZXJWYWx1ZSxcbiAgICBkZWZpbml0aW9uOiBwYXJhbWV0ZXJEZWZpbml0aW9uXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBjYW11bmRhIHByb3BlcnR5IGZyb20gdGhlIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW11bmRhUHJvcGVydHkoYmluZGluZywgdmFsdWUgPSAnJywgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3Qge1xuICAgIG5hbWVcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6UHJvcGVydHknLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY2FtdW5kYTppbiBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QmluZGluZ30gYmluZGluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhbXVuZGFJbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpIHtcbiAgY29uc3QgYXR0cnMgPSBjcmVhdGVDYW11bmRhSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSk7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6SW4nLCBhdHRycyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNhbXVuZGE6aW4gd2l0aCBidXNpbmVzc0tleSBlbGVtZW50IGZyb20gZ2l2ZW4gYmluZGluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FtdW5kYUluV2l0aEJ1c2luZXNzS2V5KHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOkluJywge1xuICAgIGJ1c2luZXNzS2V5OiB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY2FtdW5kYTpvdXQgZWxlbWVudCBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eUJpbmRpbmd9IGJpbmRpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtCcG1uRmFjdG9yeX0gYnBtbkZhY3RvcnlcbiAqXG4gKiBAcmV0dXJuIHtNb2RkbGVFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW11bmRhT3V0KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBhdHRycyA9IGNyZWF0ZUNhbXVuZGFJbk91dEF0dHJzKGJpbmRpbmcsIHZhbHVlKTtcbiAgcmV0dXJuIGJwbW5GYWN0b3J5LmNyZWF0ZSgnY2FtdW5kYTpPdXQnLCBhdHRycyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNhbXVuZGE6ZXhlY3V0aW9uTGlzdGVuZXIgZWxlbWVudCBjb250YWluaW5nIGFuIGlubGluZSBzY3JpcHQgZnJvbSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FtdW5kYUV4ZWN1dGlvbkxpc3RlbmVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCB7XG4gICAgZXZlbnQsXG4gICAgaW1wbGVtZW50YXRpb25UeXBlLFxuICAgIHNjcmlwdEZvcm1hdFxuICB9ID0gYmluZGluZztcblxuICAvLyBUbyBndWFyYW50ZWUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc2NyaXB0Rm9ybWF0IGlzIHRha2VuIGludG8gYWNjb3VudCBhbmQgaGFzIHByZWNlZGVuY2UgYmVmb3JlIGFueSBvdGhlciB0eXBlXG4gIGlmIChpbXBsZW1lbnRhdGlvblR5cGUgPT09ICdzY3JpcHQnIHx8IHNjcmlwdEZvcm1hdCkge1xuICAgIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInLCB7XG4gICAgICBldmVudCxcbiAgICAgIHNjcmlwdDogYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOlNjcmlwdCcsIHtcbiAgICAgICAgc2NyaXB0Rm9ybWF0LFxuICAgICAgICB2YWx1ZVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyJywge1xuICAgIGV2ZW50LFxuICAgIFtpbXBsZW1lbnRhdGlvblR5cGVdOiB2YWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgY2FtdW5kYTpmaWVsZCBlbGVtZW50IGNvbnRhaW5pbmcgc3RyaW5nIG9yIGV4cHJlc3Npb24gZnJvbSBnaXZlbiBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7UHJvcGVydHlCaW5kaW5nfSBiaW5kaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7QnBtbkZhY3Rvcnl9IGJwbW5GYWN0b3J5XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FtdW5kYUZpZWxkSW5qZWN0aW9uKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBERUZBVUxUX1BST1BTID0ge1xuICAgICdzdHJpbmcnOiB1bmRlZmluZWQsXG4gICAgJ2V4cHJlc3Npb24nOiB1bmRlZmluZWQsXG4gICAgJ25hbWUnOiB1bmRlZmluZWRcbiAgfTtcbiAgY29uc3QgcHJvcHMgPSBhc3NpZ24oe30sIERFRkFVTFRfUFJPUFMpO1xuICBjb25zdCB7XG4gICAgZXhwcmVzc2lvbixcbiAgICBuYW1lXG4gIH0gPSBiaW5kaW5nO1xuICBpZiAoIWV4cHJlc3Npb24pIHtcbiAgICBwcm9wcy5zdHJpbmcgPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wcy5leHByZXNzaW9uID0gdmFsdWU7XG4gIH1cbiAgcHJvcHMubmFtZSA9IG5hbWU7XG4gIHJldHVybiBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6RmllbGQnLCBwcm9wcyk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGNhbXVuZGE6ZXJyb3JFdmVudERlZmluaXRpb24gZWxlbWVudCBjb250YWluaW5nIGV4cHJlc3Npb24gYW5kIGVycm9yUmVmXG4gKiBmcm9tIGdpdmVuIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZXJyb3JSZWZcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4ge01vZGRsZUVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbihleHByZXNzaW9uLCBlcnJvclJlZiwgcGFyZW50LCBicG1uRmFjdG9yeSkge1xuICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGJwbW5GYWN0b3J5LmNyZWF0ZSgnY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbicsIHtcbiAgICBlcnJvclJlZixcbiAgICBleHByZXNzaW9uXG4gIH0pO1xuICBlcnJvckV2ZW50RGVmaW5pdGlvbi4kcGFyZW50ID0gcGFyZW50O1xuICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb247XG59XG5cbi8qKlxuICogQ3JlYXRlIGJwbW46ZXJyb3IgZWxlbWVudCBjb250YWluaW5nIGEgc3BlY2lmaWMgZXJyb3IgaWQgZ2l2ZW4gYnkgYSBiaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW5kaW5nRXJyb3JSZWZcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcGFyZW50XG4gKiBAcGFyYW0ge0JwbW5GYWN0b3J5fSBicG1uRmFjdG9yeVxuICpcbiAqIEByZXR1cm4geyBNb2RkbGVFbGVtZW50IH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXJyb3IoYmluZGluZ0Vycm9yUmVmLCBwYXJlbnQsIGJwbW5GYWN0b3J5KSB7XG4gIGNvbnN0IGVycm9yID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdicG1uOkVycm9yJywge1xuICAgIC8vIHdlIG5lZWQgdG8gbGF0ZXIgcmV0cmlldmUgdGhlIGVycm9yIGZyb20gYSBiaW5kaW5nXG4gICAgaWQ6IG5leHRJZCgnRXJyb3JfJyArIGJpbmRpbmdFcnJvclJlZiArICdfJylcbiAgfSk7XG4gIGVycm9yLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbi8qKlxuICogQ3JlYXRlIHByb3BlcnRpZXMgZm9yIGNhbXVuZGE6aW4gYW5kIGNhbXVuZGE6b3V0IHR5cGVzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW11bmRhSW5PdXRBdHRycyhiaW5kaW5nLCB2YWx1ZSkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gIGNvbnN0IHtcbiAgICBleHByZXNzaW9uLFxuICAgIHNvdXJjZSxcbiAgICBzb3VyY2VFeHByZXNzaW9uLFxuICAgIHRhcmdldCxcbiAgICB0eXBlLFxuICAgIHZhcmlhYmxlc1xuICB9ID0gYmluZGluZztcblxuICAvLyBleHBsaWNpdGx5IGNvdmVyIGFsbCBjb25kaXRpb25zIGFzIHNwZWNpZmllZCBoZXJlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2FtdW5kYS9jYW11bmRhLW1vZGVsZXIvYmxvYi9kZXZlbG9wL2RvY3MvZWxlbWVudC10ZW1wbGF0ZXMvUkVBRE1FLm1kI2NhbXVuZGFpblxuICBpZiAodHlwZSA9PT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgaWYgKHRhcmdldCAmJiAhZXhwcmVzc2lvbiAmJiAhdmFyaWFibGVzKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgZXhwcmVzc2lvbiA9PT0gdHJ1ZSAmJiAhdmFyaWFibGVzKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlRXhwcmVzc2lvbiA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIXRhcmdldCAmJiAhZXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdsb2NhbCcpIHtcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xuICAgICAgcHJvcGVydGllcy52YXJpYWJsZXMgPSAnYWxsJztcbiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiAhZXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdsb2NhbCcpIHtcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xuICAgICAgcHJvcGVydGllcy5zb3VyY2UgPSB2YWx1ZTtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIGV4cHJlc3Npb24gJiYgdmFyaWFibGVzID09PSAnbG9jYWwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmxvY2FsID0gdHJ1ZTtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlRXhwcmVzc2lvbiA9IHZhbHVlO1xuICAgICAgcHJvcGVydGllcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICghdGFyZ2V0ICYmICFleHByZXNzaW9uICYmIHZhcmlhYmxlcyA9PT0gJ2FsbCcpIHtcbiAgICAgIHByb3BlcnRpZXMudmFyaWFibGVzID0gJ2FsbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjb25maWd1cmF0aW9uIGZvciBjYW11bmRhOmluIGVsZW1lbnQgdGVtcGxhdGUgYmluZGluZycpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cGxpY2l0bHkgY292ZXIgYWxsIGNvbmRpdGlvbnMgYXMgc3BlY2lmaWVkIGhlcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYW11bmRhL2NhbXVuZGEtbW9kZWxlci9ibG9iL2RldmVsb3AvZG9jcy9lbGVtZW50LXRlbXBsYXRlcy9SRUFETUUubWQjY2FtdW5kYW91dFxuICBpZiAodHlwZSA9PT0gJ2NhbXVuZGE6b3V0Jykge1xuICAgIGlmIChzb3VyY2UgJiYgIXNvdXJjZUV4cHJlc3Npb24gJiYgIXZhcmlhYmxlcykge1xuICAgICAgcHJvcGVydGllcy50YXJnZXQgPSB2YWx1ZTtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlID0gc291cmNlO1xuICAgIH0gZWxzZSBpZiAoIXNvdXJjZSAmJiBzb3VyY2VFeHByZXNzaW9uICYmICF2YXJpYWJsZXMpIHtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZUV4cHJlc3Npb24gPSBzb3VyY2VFeHByZXNzaW9uO1xuICAgIH0gZWxzZSBpZiAoIXNvdXJjZSAmJiAhc291cmNlRXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdhbGwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLnZhcmlhYmxlcyA9ICdhbGwnO1xuICAgIH0gZWxzZSBpZiAoc291cmNlICYmICFzb3VyY2VFeHByZXNzaW9uICYmIHZhcmlhYmxlcyA9PT0gJ2xvY2FsJykge1xuICAgICAgcHJvcGVydGllcy5sb2NhbCA9IHRydWU7XG4gICAgICBwcm9wZXJ0aWVzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0ID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICghc291cmNlICYmIHNvdXJjZUV4cHJlc3Npb24gJiYgdmFyaWFibGVzID09PSAnbG9jYWwnKSB7XG4gICAgICBwcm9wZXJ0aWVzLmxvY2FsID0gdHJ1ZTtcbiAgICAgIHByb3BlcnRpZXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldCA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIXNvdXJjZSAmJiAhc291cmNlRXhwcmVzc2lvbiAmJiB2YXJpYWJsZXMgPT09ICdsb2NhbCcpIHtcbiAgICAgIHByb3BlcnRpZXMubG9jYWwgPSB0cnVlO1xuICAgICAgcHJvcGVydGllcy52YXJpYWJsZXMgPSAnYWxsJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbXVuZGE6b3V0IGVsZW1lbnQgdGVtcGxhdGUgYmluZGluZycpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuY29uc3QgQ0FNVU5EQV9TRVJWSUNFX1RBU0tfTElLRSA9IFsnY2FtdW5kYTpjbGFzcycsICdjYW11bmRhOmRlbGVnYXRlRXhwcmVzc2lvbicsICdjYW11bmRhOmV4cHJlc3Npb24nXTtcblxuLyoqXG4gKiBBcHBsaWVzIGFuIGVsZW1lbnQgdGVtcGxhdGUgdG8gYW4gZWxlbWVudC4gU2V0cyBgY2FtdW5kYTptb2RlbGVyVGVtcGxhdGVgIGFuZFxuICogYGNhbXVuZGE6bW9kZWxlclRlbXBsYXRlVmVyc2lvbmAuXG4gKi9cbmNsYXNzIENoYW5nZUVsZW1lbnRUZW1wbGF0ZUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihicG1uRmFjdG9yeSwgYnBtblJlcGxhY2UsIGNvbW1hbmRTdGFjaywgbW9kZWxpbmcpIHtcbiAgICB0aGlzLl9icG1uRmFjdG9yeSA9IGJwbW5GYWN0b3J5O1xuICAgIHRoaXMuX2JwbW5SZXBsYWNlID0gYnBtblJlcGxhY2U7XG4gICAgdGhpcy5fY29tbWFuZFN0YWNrID0gY29tbWFuZFN0YWNrO1xuICAgIHRoaXMuX21vZGVsaW5nID0gbW9kZWxpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIGFuIGVsZW1lbnQncyB0ZW1wbGF0ZSBhbmQgdXBkYXRlIGl0cyBwcm9wZXJ0aWVzIGFzIHNwZWNpZmllZCBpbiBgbmV3VGVtcGxhdGVgLiBTcGVjaWZ5XG4gICAqIGBvbGRUZW1wbGF0ZWAgdG8gdXBkYXRlIGZyb20gb25lIHRlbXBsYXRlIHRvIGFub3RoZXIuIElmIGBuZXdUZW1wbGF0ZWAgaXNuJ3Qgc3BlY2lmaWVkIHRoZVxuICAgKiBgY2FtdW5kYTptb2RlbGVyVGVtcGxhdGVgIGFuZCBgY2FtdW5kYTptb2RlbGVyVGVtcGxhdGVWZXJzaW9uYCBwcm9wZXJ0aWVzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tXG4gICAqIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dC5lbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dC5vbGRUZW1wbGF0ZV1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0Lm5ld1RlbXBsYXRlXVxuICAgKi9cbiAgcHJlRXhlY3V0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgbmV3VGVtcGxhdGUgPSBjb250ZXh0Lm5ld1RlbXBsYXRlLFxuICAgICAgb2xkVGVtcGxhdGUgPSBjb250ZXh0Lm9sZFRlbXBsYXRlO1xuICAgIGxldCBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xuXG4gICAgLy8gdXBkYXRlIGNhbXVuZGE6bW9kZWxlclRlbXBsYXRlIGF0dHJpYnV0ZVxuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFNb2RlbGVyVGVtcGxhdGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpO1xuICAgIGlmIChuZXdUZW1wbGF0ZSkge1xuICAgICAgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCA9IHRoaXMuX3VwZGF0ZVRhc2tUeXBlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXIgcHJvcGVydGllc1xuICAgICAgdGhpcy5fdXBkYXRlQ2FtdW5kYUV4ZWN1dGlvbkxpc3RlbmVyUHJvcGVydGllcyhlbGVtZW50LCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBjYW11bmRhOkZpZWxkIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFGaWVsZFByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6SW4gYW5kIGNhbXVuZGE6T3V0IHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbk91dFByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6SW5wdXRQYXJhbWV0ZXIgYW5kIGNhbXVuZGE6T3V0cHV0UGFyYW1ldGVyIHByb3BlcnRpZXNcbiAgICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbnB1dE91dHB1dFBhcmFtZXRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcblxuICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6UHJvcGVydHkgcHJvcGVydGllc1xuICAgICAgdGhpcy5fdXBkYXRlQ2FtdW5kYVByb3BlcnR5UHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuXG4gICAgICAvLyB1cGRhdGUgY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbiBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLl91cGRhdGVDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb25Qcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSk7XG5cbiAgICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzIGZvciBlYWNoIHNjb3BlXG4gICAgICBoYW5kbGVMZWdhY3lTY29wZXMobmV3VGVtcGxhdGUuc2NvcGVzKS5mb3JFYWNoKG5ld1Njb3BlVGVtcGxhdGUgPT4ge1xuICAgICAgICB0aGlzLl91cGRhdGVTY29wZVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1Njb3BlVGVtcGxhdGUsIG5ld1RlbXBsYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBfZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHMgPSBidXNpbmVzc09iamVjdC5nZXQoJ2V4dGVuc2lvbkVsZW1lbnRzJyk7XG4gICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgICAgIHZhbHVlczogW11cbiAgICAgIH0pO1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHMuJHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIGV4dGVuc2lvbkVsZW1lbnRzOiBleHRlbnNpb25FbGVtZW50c1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBleHRlbnNpb25FbGVtZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGNhbXVuZGE6RXJyb3JFdmVudERlZmluaXRpb25gIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzIG9iamVjdC4gRXZlbnRcbiAgICogZGVmaW5pdGlvbnMgY2FuIG9ubHkgZXhpc3QgaW4gYGJwbW46RXh0ZW5zaW9uRWxlbWVudHNgLlxuICAgKlxuICAgKiBFbnN1cmVzIGFuIGJwbW46RXJyb3IgZXhpc3RzIGZvciB0aGUgZXZlbnQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJztcbiAgICB9KTtcblxuICAgIC8vICgxKSBkbyBub3Qgb3ZlcnJpZGUgaWYgbm8gdXBkYXRlc1xuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudHMgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIGNvbnN0IG9sZEVycm9yRXZlbnREZWZpbml0aW9ucyA9IGZpbmRFeHRlbnNpb25zKGVsZW1lbnQsIFsnY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvbiddKTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgb2xkRXZlbnREZWZpbml0aW9uID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGV4dGVuc2lvbkVsZW1lbnRzLCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBldmVudCBkZWZpbml0aW9uc1xuICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIG9sZEV2ZW50RGVmaW5pdGlvbikge1xuICAgICAgICBpZiAoIXByb3BlcnR5Q2hhbmdlZChvbGRFdmVudERlZmluaXRpb24sIG9sZFByb3BlcnR5KSkge1xuICAgICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogb2xkRXZlbnREZWZpbml0aW9uLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBleHByZXNzaW9uOiBuZXdQcm9wZXJ0eS52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShvbGRFcnJvckV2ZW50RGVmaW5pdGlvbnMsIG9sZEV2ZW50RGVmaW5pdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBjcmVhdGUgbmV3IGV2ZW50IGRlZmluaXRpb24gKyBlcnJvclxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gZ2V0Um9vdChnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSksXG4gICAgICAgICAgbmV3RXJyb3IgPSBjcmVhdGVFcnJvcihuZXdCaW5kaW5nLmVycm9yUmVmLCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpLFxuICAgICAgICAgIG5ld0V2ZW50RGVmaW5pdGlvbiA9IGNyZWF0ZUNhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbihuZXdQcm9wZXJ0eS52YWx1ZSwgbmV3RXJyb3IsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiByb290RWxlbWVudCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290RWxlbWVudC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBuZXdFcnJvcl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgbmV3RXZlbnREZWZpbml0aW9uXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgcmVtb3ZlIG9sZCBldmVudCBkZWZpbml0aW9uc1xuICAgIGlmIChvbGRFcnJvckV2ZW50RGVmaW5pdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHZhbHVlczogd2l0aG91dChleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCB2YWx1ZSA9PiBvbGRFcnJvckV2ZW50RGVmaW5pdGlvbnMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyYCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzcyBvYmplY3QuIEV4ZWN1dGlvbiBsaXN0ZW5lcnNcbiAgICogd2lsbCBhbHdheXMgYmUgb3ZlcnJpZGRlbi4gRXhlY3V0aW9uIGxpc3RlbmVycyBjYW4gb25seSBleGlzdCBpbiBgYnBtbjpFeHRlbnNpb25FbGVtZW50c2AuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FtdW5kYUV4ZWN1dGlvbkxpc3RlbmVyUHJvcGVydGllcyhlbGVtZW50LCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6ZXhlY3V0aW9uTGlzdGVuZXInO1xuICAgIH0pO1xuXG4gICAgLy8gKDEpIGRvIG5vdCBvdmVycmlkZSBvbGQgZXhlY3V0aW9uIGxpc3RlbmVycyBpZiBubyBuZXcgZXhlY3V0aW9uIGxpc3RlbmVycyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcblxuICAgIC8vICgyKSByZW1vdmUgb2xkIGV4ZWN1dGlvbiBsaXN0ZW5lcnNcbiAgICBjb25zdCBvbGRFeGVjdXRpb25MaXN0ZW5lcnMgPSBmaW5kRXh0ZW5zaW9ucyhlbGVtZW50LCBbJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInXSk7XG5cbiAgICAvLyAoMykgYWRkIG5ldyBleGVjdXRpb24gbGlzdGVuZXJzXG4gICAgY29uc3QgbmV3RXhlY3V0aW9uTGlzdGVuZXJzID0gbmV3UHJvcGVydGllcy5tYXAobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZTtcbiAgICAgIHJldHVybiBjcmVhdGVDYW11bmRhRXhlY3V0aW9uTGlzdGVuZXIobmV3QmluZGluZywgcHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIH0pO1xuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHZhbHVlczogWy4uLndpdGhvdXQoZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgdmFsdWUgPT4gb2xkRXhlY3V0aW9uTGlzdGVuZXJzLmluY2x1ZGVzKHZhbHVlKSksIC4uLm5ld0V4ZWN1dGlvbkxpc3RlbmVyc11cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGNhbXVuZGE6RmllbGRgIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzIG9iamVjdC5cbiAgICogSWYgYnVzaW5lc3Mgb2JqZWN0IGlzIGBjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyYCBvciBgY2FtdW5kYTpUYXNrTGlzdGVuZXJgIGBmaWVsZHNgIHByb3BlcnR5XG4gICAqIHdpbGwgYmUgdXBkYXRlZC4gT3RoZXJ3aXNlIGBleHRlbnNpb25FbGVtZW50cy52YWx1ZXNgIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gYnVzaW5lc3NPYmplY3RcbiAgICovXG4gIF91cGRhdGVDYW11bmRhRmllbGRQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSwgYnVzaW5lc3NPYmplY3QpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmZpZWxkJztcbiAgICB9KTtcblxuICAgIC8vICgxKSBkbyBub3Qgb3ZlcnJpZGUgb2xkIGZpZWxkcyBpZiBubyBuZXcgZmllbGRzIHNwZWNpZmllZFxuICAgIGlmICghbmV3UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBpc0FueShidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkV4ZWN1dGlvbkxpc3RlbmVyJywgJ2NhbXVuZGE6VGFza0xpc3RlbmVyJ10pID8gJ2ZpZWxkcycgOiAndmFsdWVzJztcbiAgICBjb25zdCBvbGRGaWVsZHMgPSBmaW5kRXh0ZW5zaW9ucyhlbGVtZW50LCBbJ2NhbXVuZGE6RmllbGQnXSk7XG4gICAgbmV3UHJvcGVydGllcy5mb3JFYWNoKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BlcnR5ID0gZmluZE9sZFByb3BlcnR5KG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG9sZEZpZWxkID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nO1xuXG4gICAgICAvLyAoMikgdXBkYXRlIG9sZCBmaWVsZHNcbiAgICAgIGlmIChvbGRQcm9wZXJ0eSAmJiBvbGRGaWVsZCkge1xuICAgICAgICBpZiAoIXByb3BlcnR5Q2hhbmdlZChvbGRGaWVsZCwgb2xkUHJvcGVydHkpKSB7XG4gICAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBvbGRGaWVsZCxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgc3RyaW5nOiBuZXdQcm9wZXJ0eS52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShvbGRGaWVsZHMsIG9sZEZpZWxkKTtcbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgZmllbGRzXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3Q2FtdW5kYUZpZWxkSW5qZWN0aW9uID0gY3JlYXRlQ2FtdW5kYUZpZWxkSW5qZWN0aW9uKG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5LnZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBbcHJvcGVydHlOYW1lXTogWy4uLmJ1c2luZXNzT2JqZWN0LmdldChwcm9wZXJ0eU5hbWUpLCBuZXdDYW11bmRhRmllbGRJbmplY3Rpb25dXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vICg0KSByZW1vdmUgb2xkIGZpZWxkc1xuICAgIGlmIChvbGRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIFtwcm9wZXJ0eU5hbWVdOiB3aXRob3V0KGJ1c2luZXNzT2JqZWN0LmdldChwcm9wZXJ0eU5hbWUpLCB2YWx1ZSA9PiBvbGRGaWVsZHMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBjYW11bmRhOkluYCBhbmQgYGNhbXVuZGE6T3V0YCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzcyBvYmplY3QuIE9ubHlcbiAgICogYGJwbW46Q2FsbEFjdGl2aXR5YCBhbmQgZXZlbnRzIHdpdGggYGJwbW46U2lnbmFsRXZlbnREZWZpbml0aW9uYCBjYW4gaGF2ZSBpbnMuIE9ubHlcbiAgICogYGNhbXVuZGE6Q2FsbEFjdGl2aXR5YCBjYW4gaGF2ZSBvdXRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICovXG4gIF91cGRhdGVDYW11bmRhSW5PdXRQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW4nIHx8IG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleScgfHwgbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCc7XG4gICAgfSk7XG5cbiAgICAvLyAoMSkgZG8gbm90IG92ZXJyaWRlIG9sZCBmaWVsZHMgaWYgbm8gbmV3IGZpZWxkcyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IGV4dGVuc2lvbiBlbGVtZW50cyBvZiBlaXRoZXIgc2lnbmFsIGV2ZW50IGRlZmluaXRpb24gb3IgY2FsbCBhY3Rpdml0eVxuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhnZXRTaWduYWxFdmVudERlZmluaXRpb24oZWxlbWVudCkgfHwgZWxlbWVudCk7XG4gICAgY29uc3Qgb2xkSW5zQW5kT3V0cyA9IGZpbmRFeHRlbnNpb25zKGV4dGVuc2lvbkVsZW1lbnRzLCBbJ2NhbXVuZGE6SW4nLCAnY2FtdW5kYTpPdXQnXSk7XG4gICAgbmV3UHJvcGVydGllcy5mb3JFYWNoKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZFByb3BlcnR5ID0gZmluZE9sZFByb3BlcnR5KG9sZFRlbXBsYXRlLCBuZXdQcm9wZXJ0eSksXG4gICAgICAgIG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eSAmJiBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRJbk91ck91dCA9IG9sZFByb3BlcnR5ICYmIGZpbmRPbGRCdXNpbmVzc09iamVjdChleHRlbnNpb25FbGVtZW50cywgb2xkUHJvcGVydHkpLFxuICAgICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gbmV3UHJvcGVydHkudmFsdWUsXG4gICAgICAgIG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZSxcbiAgICAgICAgcHJvcGVydGllcyA9IHt9O1xuICAgICAgbGV0IG5ld0luT3JPdXQ7XG5cbiAgICAgIC8vICgyKSB1cGRhdGUgb2xkIGlucyBhbmQgb3V0c1xuICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIG9sZEluT3VyT3V0KSB7XG4gICAgICAgIGlmICghcHJvcGVydHlDaGFuZ2VkKG9sZEluT3VyT3V0LCBvbGRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluJykge1xuICAgICAgICAgICAgaWYgKG5ld0JpbmRpbmcuZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzWydjYW11bmRhOnNvdXJjZUV4cHJlc3Npb24nXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzWydjYW11bmRhOnNvdXJjZSddID0gbmV3UHJvcGVydHlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleScpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXNbJ2NhbXVuZGE6YnVzaW5lc3NLZXknXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6b3V0Jykge1xuICAgICAgICAgICAgcHJvcGVydGllc1snY2FtdW5kYTp0YXJnZXQnXSA9IG5ld1Byb3BlcnR5VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGNhbXVuZGE6bG9jYWwgcHJvcGVydHkgaWYgaXQgY2hhbmdlZFxuICAgICAgICBpZiAob2xkQmluZGluZy5sb2NhbCAmJiAhbmV3QmluZGluZy5sb2NhbCB8fCAhb2xkQmluZGluZy5sb2NhbCAmJiBuZXdCaW5kaW5nLmxvY2FsKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5sb2NhbCA9IG5ld0JpbmRpbmcubG9jYWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZEluT3VyT3V0LFxuICAgICAgICAgICAgcHJvcGVydGllc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShvbGRJbnNBbmRPdXRzLCBvbGRJbk91ck91dCk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBhZGQgbmV3IGlucyBhbmQgb3V0c1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgICAgICAgbmV3SW5Pck91dCA9IGNyZWF0ZUNhbXVuZGFJbihuZXdCaW5kaW5nLCBuZXdQcm9wZXJ0eVZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICAgICAgICBuZXdJbk9yT3V0ID0gY3JlYXRlQ2FtdW5kYU91dChuZXdCaW5kaW5nLCBuZXdQcm9wZXJ0eVZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluOmJ1c2luZXNzS2V5Jykge1xuICAgICAgICAgIG5ld0luT3JPdXQgPSBjcmVhdGVDYW11bmRhSW5XaXRoQnVzaW5lc3NLZXkobmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBuZXdJbk9yT3V0XVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgcmVtb3ZlIG9sZCBpbnMgYW5kIG91dHNcbiAgICBpZiAob2xkSW5zQW5kT3V0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgdmFsdWVzOiB3aXRob3V0KGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIHZhbHVlID0+IG9sZEluc0FuZE91dHMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBjYW11bmRhOklucHV0UGFyYW1ldGVyYCBhbmQgYGNhbXVuZGE6T3V0cHV0UGFyYW1ldGVyYCBwcm9wZXJ0aWVzIG9mIHNwZWNpZmllZCBidXNpbmVzc1xuICAgKiBvYmplY3QuIEJvdGggY2FuIG9ubHkgZXhpc3QgaW4gYGNhbXVuZGE6SW5wdXRPdXRwdXRgIHdoaWNoIGNhbiBleGlzdCBpbiBgYnBtbjpFeHRlbnNpb25FbGVtZW50c2BcbiAgICogb3IgYGNhbXVuZGE6Q29ubmVjdG9yYC5cbiAgICpcbiAgICogQHBhcmFtIHtkanMubW9kZWwuQmFzZX0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2xkVGVtcGxhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlQ2FtdW5kYUlucHV0T3V0cHV0UGFyYW1ldGVyUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUsIGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjaztcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gbmV3VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicgfHwgbmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcic7XG4gICAgfSk7XG5cbiAgICAvLyAoMSkgZG8gbm90IG92ZXJyaWRlIG9sZCBpbnB1dHMgYW5kIG91dHB1dHMgaWYgbm8gbmV3IGlucHV0cyBhbmQgb3V0cHV0cyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICB9XG4gICAgbGV0IGlucHV0T3V0cHV0O1xuICAgIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6Q29ubmVjdG9yJykpIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmlucHV0T3V0cHV0Jyk7XG4gICAgICBpZiAoIWlucHV0T3V0cHV0KSB7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gYnBtbkZhY3RvcnkuY3JlYXRlKCdjYW11bmRhOklucHV0T3V0cHV0Jyk7XG4gICAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBpbnB1dE91dHB1dFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgICAgIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICAgICAgaW5wdXRPdXRwdXQgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLmJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGlucHV0T3V0cHV0XVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9sZElucHV0cyA9IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTppbnB1dFBhcmFtZXRlcnMnKSA/IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTppbnB1dFBhcmFtZXRlcnMnKS5zbGljZSgpIDogW107XG4gICAgY29uc3Qgb2xkT3V0cHV0cyA9IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXJzJykgPyBpbnB1dE91dHB1dC5nZXQoJ2NhbXVuZGE6b3V0cHV0UGFyYW1ldGVycycpLnNsaWNlKCkgOiBbXTtcbiAgICBsZXQgcHJvcGVydHlOYW1lO1xuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBvbGRJbnB1dE9yT3V0cHV0ID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG5ld0JpbmRpbmdUeXBlID0gbmV3QmluZGluZy50eXBlO1xuICAgICAgbGV0IG5ld0lucHV0T3JPdXRwdXQsIHByb3BlcnRpZXM7XG5cbiAgICAgIC8vICgyKSB1cGRhdGUgb2xkIGlucHV0cyBhbmQgb3V0cHV0c1xuICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIG9sZElucHV0T3JPdXRwdXQpIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eUNoYW5nZWQob2xkSW5wdXRPck91dHB1dCwgb2xkUHJvcGVydHkpKSB7XG4gICAgICAgICAgaWYgKGlzKG9sZElucHV0T3JPdXRwdXQsICdjYW11bmRhOklucHV0UGFyYW1ldGVyJykpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICBuYW1lOiBuZXdQcm9wZXJ0eVZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZElucHV0T3JPdXRwdXQsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzKG9sZElucHV0T3JPdXRwdXQsICdjYW11bmRhOklucHV0UGFyYW1ldGVyJykpIHtcbiAgICAgICAgICByZW1vdmUob2xkSW5wdXRzLCBvbGRJbnB1dE9yT3V0cHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW1vdmUob2xkT3V0cHV0cywgb2xkSW5wdXRPck91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gKDMpIGFkZCBuZXcgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicpIHtcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSAnaW5wdXRQYXJhbWV0ZXJzJztcbiAgICAgICAgICBuZXdJbnB1dE9yT3V0cHV0ID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5TmFtZSA9ICdvdXRwdXRQYXJhbWV0ZXJzJztcbiAgICAgICAgICBuZXdJbnB1dE9yT3V0cHV0ID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKG5ld0JpbmRpbmcsIG5ld1Byb3BlcnR5VmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPdXRwdXQsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgW3Byb3BlcnR5TmFtZV06IFsuLi5pbnB1dE91dHB1dC5nZXQocHJvcGVydHlOYW1lKSwgbmV3SW5wdXRPck91dHB1dF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gKDQpIHJlbW92ZSBvbGQgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgaWYgKG9sZElucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlucHV0T3V0cHV0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzOiB3aXRob3V0KGlucHV0T3V0cHV0LmdldCgnaW5wdXRQYXJhbWV0ZXJzJyksIGlucHV0UGFyYW1ldGVyID0+IG9sZElucHV0cy5pbmNsdWRlcyhpbnB1dFBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob2xkT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1vZGRsZUVsZW1lbnQ6IGlucHV0T3V0cHV0LFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3V0cHV0UGFyYW1ldGVyczogd2l0aG91dChpbnB1dE91dHB1dC5nZXQoJ291dHB1dFBhcmFtZXRlcnMnKSwgb3V0cHV0UGFyYW1ldGVyID0+IG9sZE91dHB1dHMuaW5jbHVkZXMob3V0cHV0UGFyYW1ldGVyKSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVDYW11bmRhTW9kZWxlclRlbXBsYXRlKGVsZW1lbnQsIG5ld1RlbXBsYXRlKSB7XG4gICAgY29uc3QgbW9kZWxpbmcgPSB0aGlzLl9tb2RlbGluZztcbiAgICBjb25zdCBuZXdJZCA9IG5ld1RlbXBsYXRlICYmIG5ld1RlbXBsYXRlLmlkO1xuICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBuZXdUZW1wbGF0ZSAmJiBuZXdUZW1wbGF0ZS52ZXJzaW9uO1xuICAgIGlmIChnZXRUZW1wbGF0ZUlkKGVsZW1lbnQpICE9PSBuZXdJZCB8fCBnZXRUZW1wbGF0ZVZlcnNpb24oZWxlbWVudCkgIT09IG5ld1ZlcnNpb24pIHtcbiAgICAgIG1vZGVsaW5nLnVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwge1xuICAgICAgICAnY2FtdW5kYTptb2RlbGVyVGVtcGxhdGUnOiBuZXdJZCxcbiAgICAgICAgJ2NhbXVuZGE6bW9kZWxlclRlbXBsYXRlVmVyc2lvbic6IG5ld1ZlcnNpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYGNhbXVuZGE6UHJvcGVydHlgIHByb3BlcnRpZXMgb2Ygc3BlY2lmaWVkIGJ1c2luZXNzIG9iamVjdC4gYGNhbXVuZGE6UHJvcGVydHlgIGNhbiBvbmx5XG4gICAqIGV4aXN0IGluIGBjYW11bmRhOlByb3BlcnRpZXNgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRUZW1wbGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3VGVtcGxhdGVcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBidXNpbmVzc09iamVjdFxuICAgKi9cbiAgX3VwZGF0ZUNhbXVuZGFQcm9wZXJ0eVByb3BlcnRpZXMoZWxlbWVudCwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBidXNpbmVzc09iamVjdCkge1xuICAgIGNvbnN0IGJwbW5GYWN0b3J5ID0gdGhpcy5fYnBtbkZhY3RvcnksXG4gICAgICBjb21tYW5kU3RhY2sgPSB0aGlzLl9jb21tYW5kU3RhY2s7XG4gICAgY29uc3QgbmV3UHJvcGVydGllcyA9IG5ld1RlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG5ld1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG5ld0JpbmRpbmcgPSBuZXdQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBuZXdCaW5kaW5nVHlwZSA9IG5ld0JpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBuZXdCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6cHJvcGVydHknO1xuICAgIH0pO1xuXG4gICAgLy8gKDEpIGRvIG5vdCBvdmVycmlkZSBvbGQgcHJvcGVydGllcyBpZiBubyBuZXcgcHJvcGVydGllcyBzcGVjaWZpZWRcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChidXNpbmVzc09iamVjdCkge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGJ1c2luZXNzT2JqZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVzaW5lc3NPYmplY3QgPSB0aGlzLl9nZXRPckNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIH1cbiAgICBsZXQgY2FtdW5kYVByb3BlcnRpZXMgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpQcm9wZXJ0aWVzJyk7XG4gICAgaWYgKCFjYW11bmRhUHJvcGVydGllcykge1xuICAgICAgY2FtdW5kYVByb3BlcnRpZXMgPSBicG1uRmFjdG9yeS5jcmVhdGUoJ2NhbXVuZGE6UHJvcGVydGllcycpO1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IFsuLi5idXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBjYW11bmRhUHJvcGVydGllc11cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9sZENhbXVuZGFQcm9wZXJ0aWVzID0gY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCdjYW11bmRhOnZhbHVlcycpID8gY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCdjYW11bmRhOnZhbHVlcycpLnNsaWNlKCkgOiBbXTtcbiAgICBuZXdQcm9wZXJ0aWVzLmZvckVhY2gobmV3UHJvcGVydHkgPT4ge1xuICAgICAgY29uc3Qgb2xkUHJvcGVydHkgPSBmaW5kT2xkUHJvcGVydHkob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSxcbiAgICAgICAgb2xkQ2FtdW5kYVByb3BlcnR5ID0gb2xkUHJvcGVydHkgJiYgZmluZE9sZEJ1c2luZXNzT2JqZWN0KGJ1c2luZXNzT2JqZWN0LCBvbGRQcm9wZXJ0eSksXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZSxcbiAgICAgICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmc7XG5cbiAgICAgIC8vICgyKSB1cGRhdGUgb2xkIHByb3BlcnRpZXNcbiAgICAgIGlmIChvbGRQcm9wZXJ0eSAmJiBvbGRDYW11bmRhUHJvcGVydHkpIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eUNoYW5nZWQob2xkQ2FtdW5kYVByb3BlcnR5LCBvbGRQcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IG9sZENhbXVuZGFQcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IG5ld1Byb3BlcnR5VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUob2xkQ2FtdW5kYVByb3BlcnRpZXMsIG9sZENhbXVuZGFQcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIC8vICgzKSBhZGQgbmV3IHByb3BlcnRpZXNcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdDYW11bmRhUHJvcGVydHkgPSBjcmVhdGVDYW11bmRhUHJvcGVydHkobmV3QmluZGluZywgbmV3UHJvcGVydHlWYWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbW9kZGxlRWxlbWVudDogY2FtdW5kYVByb3BlcnRpZXMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdmFsdWVzOiBbLi4uY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKSwgbmV3Q2FtdW5kYVByb3BlcnR5XVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAoNCkgcmVtb3ZlIG9sZCBwcm9wZXJ0aWVzXG4gICAgaWYgKG9sZENhbXVuZGFQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogY2FtdW5kYVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB2YWx1ZXM6IHdpdGhvdXQoY2FtdW5kYVByb3BlcnRpZXMuZ2V0KCd2YWx1ZXMnKSwgdmFsdWUgPT4gb2xkQ2FtdW5kYVByb3BlcnRpZXMuaW5jbHVkZXModmFsdWUpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGBicG1uOmNvbmRpdGlvbkV4cHJlc3Npb25gIHByb3BlcnR5IG9mIHNwZWNpZmllZCBlbGVtZW50LiBTaW5jZSBjb25kaXRpb24gZXhwcmVzc2lvbiBpc1xuICAgKiBpcyBub3QgcHJpbWl0aXZlIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFByb3BlcnR5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdQcm9wZXJ0eVxuICAgKi9cbiAgX3VwZGF0ZUNvbmRpdGlvbkV4cHJlc3Npb24oZWxlbWVudCwgb2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KSB7XG4gICAgY29uc3QgYnBtbkZhY3RvcnkgPSB0aGlzLl9icG1uRmFjdG9yeSxcbiAgICAgIGNvbW1hbmRTdGFjayA9IHRoaXMuX2NvbW1hbmRTdGFjayxcbiAgICAgIG1vZGVsaW5nID0gdGhpcy5fbW9kZWxpbmc7XG4gICAgY29uc3QgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgICBuZXdQcm9wZXJ0eVZhbHVlID0gbmV3UHJvcGVydHkudmFsdWU7XG4gICAgaWYgKCFvbGRQcm9wZXJ0eSkge1xuICAgICAgbW9kZWxpbmcudXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCB7XG4gICAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb246IGJwbW5GYWN0b3J5LmNyZWF0ZSgnYnBtbjpGb3JtYWxFeHByZXNzaW9uJywge1xuICAgICAgICAgIGJvZHk6IG5ld1Byb3BlcnR5VmFsdWUsXG4gICAgICAgICAgbGFuZ3VhZ2U6IG5ld0JpbmRpbmcuc2NyaXB0Rm9ybWF0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICBvbGRQcm9wZXJ0eVZhbHVlID0gb2xkUHJvcGVydHkudmFsdWU7XG4gICAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBidXNpbmVzc09iamVjdC5nZXQoJ2JwbW46Y29uZGl0aW9uRXhwcmVzc2lvbicpO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgICBpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5nZXQoJ2JvZHknKSA9PT0gb2xkUHJvcGVydHlWYWx1ZSkge1xuICAgICAgcHJvcGVydGllcy5ib2R5ID0gbmV3UHJvcGVydHlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdsYW5ndWFnZScpID09PSBvbGRCaW5kaW5nLnNjcmlwdEZvcm1hdCkge1xuICAgICAgcHJvcGVydGllcy5sYW5ndWFnZSA9IG5ld0JpbmRpbmcuc2NyaXB0Rm9ybWF0O1xuICAgIH1cbiAgICBpZiAoIWtleXMocHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbW1hbmRTdGFjay5leGVjdXRlKCdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgbW9kZGxlRWxlbWVudDogY29uZGl0aW9uRXhwcmVzc2lvbixcbiAgICAgIHByb3BlcnRpZXNcbiAgICB9KTtcbiAgfVxuICBfdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUsIGJ1c2luZXNzT2JqZWN0KSB7XG4gICAgY29uc3QgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBuZXdUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gbmV3QmluZGluZ1R5cGUgPT09ICdwcm9wZXJ0eSc7XG4gICAgfSk7XG4gICAgY29uc3Qgb2xkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlICYmIG9sZFRlbXBsYXRlLnByb3BlcnRpZXMuZmlsdGVyKG9sZFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5JztcbiAgICB9KTtcbiAgICBpZiAoIW5ld1Byb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gICAgfVxuICAgIG5ld1Byb3BlcnRpZXMuZm9yRWFjaChuZXdQcm9wZXJ0eSA9PiB7XG4gICAgICBjb25zdCBvbGRQcm9wZXJ0eSA9IGZpbmRPbGRQcm9wZXJ0eShvbGRUZW1wbGF0ZSwgbmV3UHJvcGVydHkpLFxuICAgICAgICBuZXdCaW5kaW5nID0gbmV3UHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgbmV3QmluZGluZ05hbWUgPSBuZXdCaW5kaW5nLm5hbWUsXG4gICAgICAgIG5ld1Byb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eS52YWx1ZTtcbiAgICAgIGxldCBjaGFuZ2VkRWxlbWVudCwgcHJvcGVydGllcztcbiAgICAgIGlmIChvbGRQcm9wZXJ0eSkge1xuICAgICAgICByZW1vdmUob2xkUHJvcGVydGllcywgb2xkUHJvcGVydHkpO1xuICAgICAgfVxuICAgICAgaWYgKG5ld0JpbmRpbmdOYW1lID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29uZGl0aW9uRXhwcmVzc2lvbihlbGVtZW50LCBvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzKGJ1c2luZXNzT2JqZWN0LCAnYnBtbjpFcnJvcicpKSB7XG4gICAgICAgICAgY2hhbmdlZEVsZW1lbnQgPSBidXNpbmVzc09iamVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VkRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZFByb3BlcnR5ICYmIHByb3BlcnR5Q2hhbmdlZChjaGFuZ2VkRWxlbWVudCwgb2xkUHJvcGVydHkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgcHJvcGVydGllc1tuZXdCaW5kaW5nTmFtZV0gPSBuZXdQcm9wZXJ0eVZhbHVlO1xuXG4gICAgICAgIC8vIG9ubHkgb25lIG9mIGBjYW11bmRhOmNsYXNzYCwgYGNhbXVuZGE6ZGVsZWdhdGVFeHByZXNzaW9uYCBhbmQgYGNhbXVuZGE6ZXhwcmVzc2lvbmAgY2FuIGJlIHNldFxuICAgICAgICAvLyBUT0RPKHBoaWxpcHBmcm9tbWUpOiBlbnN1cmluZyBvbmx5IG9uZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGlzIHNldCBhdCBhIHRpbWUgc2hvdWxkIGJlXG4gICAgICAgIC8vIGltcGxlbWVudGVkIGluIGEgYmVoYXZpb3IgYW5kIG5vdCBpbiB0aGlzIGhhbmRsZXIgYW5kIHByb3BlcnRpZXMgcGFuZWwgVUlcbiAgICAgICAgaWYgKENBTVVOREFfU0VSVklDRV9UQVNLX0xJS0UuaW5kZXhPZihuZXdCaW5kaW5nTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgQ0FNVU5EQV9TRVJWSUNFX1RBU0tfTElLRS5mb3JFYWNoKGNhbXVuZGFTZXJ2aWNlVGFza0xpa2VQcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FtdW5kYVNlcnZpY2VUYXNrTGlrZVByb3BlcnR5ICE9PSBuZXdCaW5kaW5nTmFtZSkge1xuICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2NhbXVuZGFTZXJ2aWNlVGFza0xpa2VQcm9wZXJ0eV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyByZW1vdmUgb2xkIHByb3BlcnRpZXMgbm90IHByZXNlbnQgaW4gbmV3IHRlbXBsYXRlXG4gICAgb2xkUHJvcGVydGllcyAmJiBvbGRQcm9wZXJ0aWVzLmZvckVhY2gob2xkUHJvcGVydHkgPT4ge1xuICAgICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBbb2xkUHJvcGVydHkuYmluZGluZy5uYW1lXTogbnVsbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcHJvcGVydGllcyBmb3IgYSBzcGVjaWZpZWQgc2NvcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdTY29wZVRlbXBsYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdUZW1wbGF0ZVxuICAgKi9cbiAgX3VwZGF0ZVNjb3BlUHJvcGVydGllcyhlbGVtZW50LCBvbGRUZW1wbGF0ZSwgbmV3U2NvcGVUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpIHtcbiAgICBjb25zdCBicG1uRmFjdG9yeSA9IHRoaXMuX2JwbW5GYWN0b3J5LFxuICAgICAgY29tbWFuZFN0YWNrID0gdGhpcy5fY29tbWFuZFN0YWNrO1xuICAgIGNvbnN0IHNjb3BlTmFtZSA9IG5ld1Njb3BlVGVtcGxhdGUudHlwZTtcbiAgICBsZXQgc2NvcGVFbGVtZW50O1xuICAgIHNjb3BlRWxlbWVudCA9IGZpbmRPbGRTY29wZUVsZW1lbnQoZWxlbWVudCwgbmV3U2NvcGVUZW1wbGF0ZSwgbmV3VGVtcGxhdGUpO1xuICAgIGlmICghc2NvcGVFbGVtZW50KSB7XG4gICAgICBzY29wZUVsZW1lbnQgPSBicG1uRmFjdG9yeS5jcmVhdGUoc2NvcGVOYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgb2xkU2NvcGVUZW1wbGF0ZSA9IGZpbmRPbGRTY29wZVRlbXBsYXRlKG5ld1Njb3BlVGVtcGxhdGUsIG9sZFRlbXBsYXRlKTtcblxuICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5fdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCBvbGRTY29wZVRlbXBsYXRlLCBuZXdTY29wZVRlbXBsYXRlLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gdXBkYXRlIGNhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXIgcHJvcGVydGllc1xuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFFeGVjdXRpb25MaXN0ZW5lclByb3BlcnRpZXMoZWxlbWVudCwgbmV3U2NvcGVUZW1wbGF0ZSk7XG5cbiAgICAvLyB1cGRhdGUgY2FtdW5kYTpJbiBhbmQgY2FtdW5kYTpPdXQgcHJvcGVydGllc1xuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbk91dFByb3BlcnRpZXMoZWxlbWVudCwgb2xkU2NvcGVUZW1wbGF0ZSwgbmV3U2NvcGVUZW1wbGF0ZSk7XG5cbiAgICAvLyB1cGRhdGUgY2FtdW5kYTpJbnB1dFBhcmFtZXRlciBhbmQgY2FtdW5kYTpPdXRwdXRQYXJhbWV0ZXIgcHJvcGVydGllc1xuICAgIHRoaXMuX3VwZGF0ZUNhbXVuZGFJbnB1dE91dHB1dFBhcmFtZXRlclByb3BlcnRpZXMoZWxlbWVudCwgb2xkU2NvcGVUZW1wbGF0ZSwgbmV3U2NvcGVUZW1wbGF0ZSwgc2NvcGVFbGVtZW50KTtcblxuICAgIC8vIHVwZGF0ZSBjYW11bmRhOkZpZWxkIHByb3BlcnRpZXNcbiAgICB0aGlzLl91cGRhdGVDYW11bmRhRmllbGRQcm9wZXJ0aWVzKGVsZW1lbnQsIG9sZFNjb3BlVGVtcGxhdGUsIG5ld1Njb3BlVGVtcGxhdGUsIHNjb3BlRWxlbWVudCk7XG5cbiAgICAvLyB1cGRhdGUgY2FtdW5kYTpQcm9wZXJ0eSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5fdXBkYXRlQ2FtdW5kYVByb3BlcnR5UHJvcGVydGllcyhlbGVtZW50LCBvbGRTY29wZVRlbXBsYXRlLCBuZXdTY29wZVRlbXBsYXRlLCBzY29wZUVsZW1lbnQpO1xuXG4gICAgLy8gYXNzdW1lIHRoYXQgcm9vdCBlbGVtZW50cyB3ZXJlIGFscmVhZHkgY3JlYXRlZCBpbiByb290IGJ5IHJlZmVyZW5jZWQgZXZlbnQgZGVmaW5pdGlvbiBiaW5kaW5nXG4gICAgaWYgKGlzUm9vdEVsZW1lbnRTY29wZShzY29wZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5fZ2V0T3JDcmVhdGVFeHRlbnNpb25FbGVtZW50cyhlbGVtZW50KTtcbiAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJywge1xuICAgICAgZWxlbWVudCxcbiAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBzY29wZUVsZW1lbnRdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnRUeXBlXG4gICAqXG4gICAqIEBwYXJhbSB7ZGpzLm1vZGVsLkJhc2V9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld1RlbXBsYXRlXG4gICAqL1xuICBfdXBkYXRlVGFza1R5cGUoZWxlbWVudCwgbmV3VGVtcGxhdGUpIHtcbiAgICAvLyBkZXRlcm1pbmUgbmV3IHRhc2sgdHlwZVxuICAgIGNvbnN0IG5ld1R5cGUgPSBuZXdUZW1wbGF0ZS5lbGVtZW50VHlwZTtcbiAgICBpZiAoIW5ld1R5cGUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIGRvbid0IHJlcGxhY2UgVGFzayB0aGF0IGlzIGFscmVhZHkgdGhlIGNvcnJlY3QgdHlwZVxuICAgIGlmIChlbGVtZW50LiR0eXBlID09PSBuZXdUeXBlLnZhbHVlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2JwbW5SZXBsYWNlLnJlcGxhY2VFbGVtZW50KGVsZW1lbnQsIHtcbiAgICAgIHR5cGU6IG5ld1R5cGUudmFsdWVcbiAgICB9KTtcbiAgfVxufVxuQ2hhbmdlRWxlbWVudFRlbXBsYXRlSGFuZGxlci4kaW5qZWN0ID0gWydicG1uRmFjdG9yeScsICdicG1uUmVwbGFjZScsICdjb21tYW5kU3RhY2snLCAnbW9kZWxpbmcnXTtcblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbi8qKlxuICogRmluZCBvbGQgYnVzaW5lc3Mgb2JqZWN0IG1hdGNoaW5nIHNwZWNpZmllZCBvbGQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtkanMubW9kZWwuQmFzZXxNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZmluZE9sZEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQsIG9sZFByb3BlcnR5KSB7XG4gIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIHByb3BlcnR5TmFtZTtcbiAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6ZmllbGQnKSB7XG4gICAgaWYgKGlzQW55KGJ1c2luZXNzT2JqZWN0LCBbJ2NhbXVuZGE6RXhlY3V0aW9uTGlzdGVuZXInLCAnY2FtdW5kYTpUYXNrTGlzdGVuZXInXSkpIHtcbiAgICAgIHByb3BlcnR5TmFtZSA9ICdjYW11bmRhOmZpZWxkcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BlcnR5TmFtZSA9ICdicG1uOnZhbHVlcyc7XG4gICAgfVxuICAgIGlmICghYnVzaW5lc3NPYmplY3QgfHwgIWJ1c2luZXNzT2JqZWN0LmdldChwcm9wZXJ0eU5hbWUpIHx8ICFidXNpbmVzc09iamVjdC5nZXQocHJvcGVydHlOYW1lKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmQoYnVzaW5lc3NPYmplY3QuZ2V0KHByb3BlcnR5TmFtZSksIGZ1bmN0aW9uIChvbGRCdXNpbmVzc09iamVjdCkge1xuICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpuYW1lJykgPT09IG9sZEJpbmRpbmcubmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluJykge1xuICAgIHJldHVybiBmaW5kKGJ1c2luZXNzT2JqZWN0LmdldCgndmFsdWVzJyksIGZ1bmN0aW9uIChvbGRCdXNpbmVzc09iamVjdCkge1xuICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgndGFyZ2V0JykgPT09IG9sZEJpbmRpbmcudGFyZ2V0O1xuICAgIH0pO1xuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW46YnVzaW5lc3NLZXknKSB7XG4gICAgcmV0dXJuIGZpbmQoYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSwgZnVuY3Rpb24gKG9sZEJ1c2luZXNzT2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNTdHJpbmcob2xkQnVzaW5lc3NPYmplY3QuZ2V0KCdidXNpbmVzc0tleScpKTtcbiAgICB9KTtcbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICByZXR1cm4gZmluZChidXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIHJldHVybiBvbGRCdXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZScpID09PSBvbGRCaW5kaW5nLnNvdXJjZSB8fCBvbGRCdXNpbmVzc09iamVjdC5nZXQoJ3NvdXJjZUV4cHJlc3Npb24nKSB8fCBvbGRCaW5kaW5nLnNvdXJjZUV4cHJlc3Npb247XG4gICAgfSk7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicgfHwgb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcicpIHtcbiAgICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOkNvbm5lY3RvcicpKSB7XG4gICAgICBidXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTppbnB1dE91dHB1dCcpO1xuICAgICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgICAgIGlmICghYnVzaW5lc3NPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmlucHV0UGFyYW1ldGVyJykge1xuICAgICAgcmV0dXJuIGZpbmQoYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmlucHV0UGFyYW1ldGVycycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpuYW1lJykgPT09IG9sZEJpbmRpbmcubmFtZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmluZChidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6b3V0cHV0UGFyYW1ldGVycycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgICAgaWYgKG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpkZWZpbml0aW9uJyk7XG4gICAgICAgICAgcmV0dXJuIGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6dmFsdWUnKSA9PT0gb2xkQmluZGluZy5zb3VyY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9sZEJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTp2YWx1ZScpID09PSBvbGRCaW5kaW5nLnNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6cHJvcGVydHknKSB7XG4gICAgaWYgKCFidXNpbmVzc09iamVjdCB8fCAhYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKSB8fCAhYnVzaW5lc3NPYmplY3QuZ2V0KCd2YWx1ZXMnKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYnVzaW5lc3NPYmplY3QgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpQcm9wZXJ0aWVzJyk7XG4gICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gZmluZChidXNpbmVzc09iamVjdC5nZXQoJ3ZhbHVlcycpLCBmdW5jdGlvbiAob2xkQnVzaW5lc3NPYmplY3QpIHtcbiAgICAgIHJldHVybiBvbGRCdXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6bmFtZScpID09PSBvbGRCaW5kaW5nLm5hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTplcnJvckV2ZW50RGVmaW5pdGlvbicpIHtcbiAgICByZXR1cm4gZmluZENhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbihlbGVtZW50LCBvbGRCaW5kaW5nLmVycm9yUmVmKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgb2xkIHByb3BlcnR5IG1hdGNoaW5nIHNwZWNpZmllZCBuZXcgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9sZFRlbXBsYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbmV3UHJvcGVydHlcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaW5kT2xkUHJvcGVydHkob2xkVGVtcGxhdGUsIG5ld1Byb3BlcnR5KSB7XG4gIGlmICghb2xkVGVtcGxhdGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb2xkUHJvcGVydGllcyA9IG9sZFRlbXBsYXRlLnByb3BlcnRpZXMsXG4gICAgbmV3QmluZGluZyA9IG5ld1Byb3BlcnR5LmJpbmRpbmcsXG4gICAgbmV3QmluZGluZ05hbWUgPSBuZXdCaW5kaW5nLm5hbWUsXG4gICAgbmV3QmluZGluZ1R5cGUgPSBuZXdCaW5kaW5nLnR5cGU7XG4gIGlmIChuZXdCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5Jykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdOYW1lID0gb2xkQmluZGluZy5uYW1lLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ3Byb3BlcnR5JyAmJiBvbGRCaW5kaW5nTmFtZSA9PT0gbmV3QmluZGluZ05hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpmaWVsZCcpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nTmFtZSA9IG9sZEJpbmRpbmcubmFtZSxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmZpZWxkJyAmJiBvbGRCaW5kaW5nTmFtZSA9PT0gbmV3QmluZGluZ05hbWU7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIGlmIChvbGRCaW5kaW5nVHlwZSAhPT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYWx3YXlzIG92ZXJyaWRlIGlmIGNoYW5nZSBmcm9tIHNvdXJjZSB0byBzb3VyY2UgZXhwcmVzc2lvbiBvciB2aWNlIHZlcnNhXG4gICAgICBpZiAob2xkQmluZGluZy5leHByZXNzaW9uICYmICFuZXdCaW5kaW5nLmV4cHJlc3Npb24gfHwgIW9sZEJpbmRpbmcuZXhwcmVzc2lvbiAmJiBuZXdCaW5kaW5nLmV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZEJpbmRpbmcudGFyZ2V0ID09PSBuZXdCaW5kaW5nLnRhcmdldDtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluOmJ1c2luZXNzS2V5Jykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdUeXBlID0gb2xkQmluZGluZy50eXBlO1xuICAgICAgcmV0dXJuIG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbjpidXNpbmVzc0tleSc7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpvdXQnKSB7XG4gICAgcmV0dXJuIGZpbmQob2xkUHJvcGVydGllcywgZnVuY3Rpb24gKG9sZFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBvbGRCaW5kaW5nID0gb2xkUHJvcGVydHkuYmluZGluZyxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcgJiYgKG9sZEJpbmRpbmcuc291cmNlID09PSBuZXdCaW5kaW5nLnNvdXJjZSB8fCBvbGRCaW5kaW5nLnNvdXJjZUV4cHJlc3Npb24gPT09IG5ld0JpbmRpbmcuc291cmNlRXhwcmVzc2lvbik7XG4gICAgfSk7XG4gIH1cbiAgaWYgKG5ld0JpbmRpbmdUeXBlID09PSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nTmFtZSA9IG9sZEJpbmRpbmcubmFtZSxcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICBpZiAob2xkQmluZGluZ1R5cGUgIT09ICdjYW11bmRhOmlucHV0UGFyYW1ldGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQmluZGluZ05hbWUgPT09IG5ld0JpbmRpbmdOYW1lICYmIG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0ID09PSBuZXdCaW5kaW5nLnNjcmlwdEZvcm1hdDtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcicpIHtcbiAgICByZXR1cm4gZmluZChvbGRQcm9wZXJ0aWVzLCBmdW5jdGlvbiAob2xkUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIGlmIChvbGRCaW5kaW5nVHlwZSAhPT0gJ2NhbXVuZGE6b3V0cHV0UGFyYW1ldGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkQmluZGluZy5zb3VyY2UgPT09IG5ld0JpbmRpbmcuc291cmNlICYmIG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0ID09PSBuZXdCaW5kaW5nLnNjcmlwdEZvcm1hdDtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOnByb3BlcnR5Jykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgICAgIG9sZEJpbmRpbmdOYW1lID0gb2xkQmluZGluZy5uYW1lLFxuICAgICAgICBvbGRCaW5kaW5nVHlwZSA9IG9sZEJpbmRpbmcudHlwZTtcbiAgICAgIHJldHVybiBvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6cHJvcGVydHknICYmIG9sZEJpbmRpbmdOYW1lID09PSBuZXdCaW5kaW5nTmFtZTtcbiAgICB9KTtcbiAgfVxuICBpZiAobmV3QmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJykge1xuICAgIHJldHVybiBmaW5kKG9sZFByb3BlcnRpZXMsIGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgbmV3QmluZGluZ1JlZiA9IG5ld0JpbmRpbmcuZXJyb3JSZWYsXG4gICAgICAgIG9sZEJpbmRpbmcgPSBvbGRQcm9wZXJ0eS5iaW5kaW5nLFxuICAgICAgICBvbGRCaW5kaW5nUmVmID0gb2xkQmluZGluZy5lcnJvclJlZixcbiAgICAgICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGU7XG4gICAgICByZXR1cm4gb2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJyAmJiBvbGRCaW5kaW5nUmVmID09PSBuZXdCaW5kaW5nUmVmO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kT2xkU2NvcGVFbGVtZW50KGVsZW1lbnQsIHNjb3BlVGVtcGxhdGUsIHRlbXBsYXRlKSB7XG4gIGNvbnN0IHNjb3BlTmFtZSA9IHNjb3BlVGVtcGxhdGUudHlwZSxcbiAgICBpZCA9IHNjb3BlVGVtcGxhdGUuaWQ7XG4gIGlmIChzY29wZU5hbWUgPT09ICdjYW11bmRhOkNvbm5lY3RvcicpIHtcbiAgICByZXR1cm4gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnY2FtdW5kYTpDb25uZWN0b3InKTtcbiAgfVxuICBpZiAoc2NvcGVOYW1lID09PSAnYnBtbjpFcnJvcicpIHtcbiAgICAvLyAoMSkgZmluZCBieSBlcnJvciBldmVudCBkZWZpbml0aW9uIGJpbmRpbmdcbiAgICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbkJpbmRpbmcgPSBmaW5kRXJyb3JFdmVudERlZmluaXRpb25CaW5kaW5nKHRlbXBsYXRlLCBpZCk7XG4gICAgaWYgKCFlcnJvckV2ZW50RGVmaW5pdGlvbkJpbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAoMikgZmluZCBlcnJvciBldmVudCBkZWZpbml0aW9uXG4gICAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBmaW5kT2xkQnVzaW5lc3NPYmplY3QoZWxlbWVudCwgZXJyb3JFdmVudERlZmluaXRpb25CaW5kaW5nKTtcbiAgICBpZiAoIWVycm9yRXZlbnREZWZpbml0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gKDMpIHJldHJpZXZlIHJlZmVyZW5jZWQgZXJyb3JcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZXJyb3JSZWY7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzUm9vdEVsZW1lbnRTY29wZShzY29wZU5hbWUpIHtcbiAgcmV0dXJuIFsnYnBtbjpFcnJvciddLmluY2x1ZGVzKHNjb3BlTmFtZSk7XG59XG5mdW5jdGlvbiBmaW5kT2xkU2NvcGVUZW1wbGF0ZShzY29wZVRlbXBsYXRlLCBvbGRUZW1wbGF0ZSkge1xuICBjb25zdCBzY29wZU5hbWUgPSBzY29wZVRlbXBsYXRlLnR5cGUsXG4gICAgc2NvcGVJZCA9IHNjb3BlVGVtcGxhdGUuaWQsXG4gICAgc2NvcGVzID0gb2xkVGVtcGxhdGUgJiYgaGFuZGxlTGVnYWN5U2NvcGVzKG9sZFRlbXBsYXRlLnNjb3Blcyk7XG4gIHJldHVybiBzY29wZXMgJiYgZmluZChzY29wZXMsIGZ1bmN0aW9uIChzY29wZSkge1xuICAgIGlmIChpc1Jvb3RFbGVtZW50U2NvcGUoc2NvcGVOYW1lKSkge1xuICAgICAgcmV0dXJuIHNjb3BlLmlkID09PSBzY29wZUlkO1xuICAgIH1cbiAgICByZXR1cm4gc2NvcGUudHlwZSA9PT0gc2NvcGVOYW1lO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRFcnJvckV2ZW50RGVmaW5pdGlvbkJpbmRpbmcodGVtcGxhdGUsIHRlbXBsYXRlRXJyb3JJZCkge1xuICByZXR1cm4gZmluZCh0ZW1wbGF0ZS5wcm9wZXJ0aWVzLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICByZXR1cm4gcHJvcGVydHkuYmluZGluZy5lcnJvclJlZiA9PT0gdGVtcGxhdGVFcnJvcklkO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHByb3BlcnR5IHdhcyBjaGFuZ2VkIGFmdGVyIGJlaW5nIHNldCBieSB0ZW1wbGF0ZS5cbiAqXG4gKiBAcGFyYW0ge2Rqcy5tb2RlbC5CYXNlfE1vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wZXJ0eVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eUNoYW5nZWQoZWxlbWVudCwgb2xkUHJvcGVydHkpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3Qgb2xkQmluZGluZyA9IG9sZFByb3BlcnR5LmJpbmRpbmcsXG4gICAgb2xkQmluZGluZ05hbWUgPSBvbGRCaW5kaW5nLm5hbWUsXG4gICAgb2xkQmluZGluZ1R5cGUgPSBvbGRCaW5kaW5nLnR5cGUsXG4gICAgb2xkUHJvcGVydHlWYWx1ZSA9IG9sZFByb3BlcnR5LnZhbHVlO1xuICBsZXQgY29uZGl0aW9uRXhwcmVzc2lvbiwgZGVmaW5pdGlvbjtcbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAncHJvcGVydHknKSB7XG4gICAgaWYgKG9sZEJpbmRpbmdOYW1lID09PSAnY29uZGl0aW9uRXhwcmVzc2lvbicpIHtcbiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb24gPSBidXNpbmVzc09iamVjdC5nZXQoJ2JwbW46Y29uZGl0aW9uRXhwcmVzc2lvbicpO1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbkV4cHJlc3Npb24uZ2V0KCdicG1uOmJvZHknKSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldChvbGRCaW5kaW5nTmFtZSkgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpmaWVsZCcpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnN0cmluZycpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW4nKSB7XG4gICAgaWYgKG9sZEJpbmRpbmcuZXhwcmVzc2lvbikge1xuICAgICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnc291cmNlRXhwcmVzc2lvbicpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnNvdXJjZScpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICAgIH1cbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOmluOmJ1c2luZXNzS2V5Jykge1xuICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6YnVzaW5lc3NLZXknKSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbiAgfVxuICBpZiAob2xkQmluZGluZ1R5cGUgPT09ICdjYW11bmRhOm91dCcpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnRhcmdldCcpICE9PSBvbGRQcm9wZXJ0eVZhbHVlO1xuICB9XG4gIGlmIChvbGRCaW5kaW5nVHlwZSA9PT0gJ2NhbXVuZGE6aW5wdXRQYXJhbWV0ZXInKSB7XG4gICAgaWYgKG9sZEJpbmRpbmcuc2NyaXB0Rm9ybWF0KSB7XG4gICAgICBkZWZpbml0aW9uID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOmRlZmluaXRpb24nKTtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uICYmIGRlZmluaXRpb24uZ2V0KCdjYW11bmRhOnZhbHVlJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidXNpbmVzc09iamVjdC5nZXQoJ2NhbXVuZGE6dmFsdWUnKSAhPT0gb2xkUHJvcGVydHlWYWx1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXInKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0LmdldCgnY2FtdW5kYTpuYW1lJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTpwcm9wZXJ0eScpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdjYW11bmRhOnZhbHVlJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbiAgaWYgKG9sZEJpbmRpbmdUeXBlID09PSAnY2FtdW5kYTplcnJvckV2ZW50RGVmaW5pdGlvbicpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHByZXNzaW9uJykgIT09IG9sZFByb3BlcnR5VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZShhcnJheSwgaXRlbSkge1xuICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XG4gIGlmIChpc1VuZGVmaW5lZCQxKGluZGV4KSkge1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmNsYXNzIEVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kcyB7XG4gIGNvbnN0cnVjdG9yKGNvbW1hbmRTdGFjaywgZWxlbWVudFRlbXBsYXRlcywgZXZlbnRCdXMpIHtcbiAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdlbGVtZW50LXRlbXBsYXRlcy5tdWx0aS1jb21tYW5kLWV4ZWN1dG9yJywgTXVsdGlDb21tYW5kSGFuZGxlcik7XG4gICAgY29tbWFuZFN0YWNrLnJlZ2lzdGVySGFuZGxlcigncHJvcGVydGllc1BhbmVsLmNhbXVuZGEuY2hhbmdlVGVtcGxhdGUnLCBDaGFuZ2VFbGVtZW50VGVtcGxhdGVIYW5kbGVyKTtcbiAgICBjb21tYW5kU3RhY2sucmVnaXN0ZXJIYW5kbGVyKCdwcm9wZXJ0aWVzUGFuZWwucmVtb3ZlVGVtcGxhdGUnLCBSZW1vdmVFbGVtZW50VGVtcGxhdGVIYW5kbGVyKTtcblxuICAgIC8vIGFwcGx5IGRlZmF1bHQgZWxlbWVudCB0ZW1wbGF0ZXMgb24gc2hhcGUgY3JlYXRpb25cbiAgICBldmVudEJ1cy5vbihbJ2NvbW1hbmRTdGFjay5zaGFwZS5jcmVhdGUucG9zdEV4ZWN1dGVkJ10sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgaGludHMgPSB7fSxcbiAgICAgICAgICBzaGFwZVxuICAgICAgICB9XG4gICAgICB9ID0gZXZlbnQ7XG4gICAgICBpZiAoaGludHMuY3JlYXRlRWxlbWVudHNCZWhhdmlvciAhPT0gZmFsc2UpIHtcbiAgICAgICAgYXBwbHlEZWZhdWx0VGVtcGxhdGUoc2hhcGUsIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBhcHBseSBkZWZhdWx0IGVsZW1lbnQgdGVtcGxhdGVzIG9uIGNvbm5lY3Rpb24gY3JlYXRpb25cbiAgICBldmVudEJ1cy5vbihbJ2NvbW1hbmRTdGFjay5jb25uZWN0aW9uLmNyZWF0ZS5wb3N0RXhlY3V0ZWQnXSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBoaW50cyA9IHt9LFxuICAgICAgICAgIGNvbm5lY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSA9IGV2ZW50O1xuICAgICAgaWYgKGhpbnRzLmNyZWF0ZUVsZW1lbnRzQmVoYXZpb3IgIT09IGZhbHNlKSB7XG4gICAgICAgIGFwcGx5RGVmYXVsdFRlbXBsYXRlKGNvbm5lY3Rpb24sIGVsZW1lbnRUZW1wbGF0ZXMsIGNvbW1hbmRTdGFjayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbkVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kcy4kaW5qZWN0ID0gWydjb21tYW5kU3RhY2snLCAnZWxlbWVudFRlbXBsYXRlcycsICdldmVudEJ1cyddO1xuZnVuY3Rpb24gYXBwbHlEZWZhdWx0VGVtcGxhdGUoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlcywgY29tbWFuZFN0YWNrKSB7XG4gIGlmICghZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCkgJiYgZWxlbWVudFRlbXBsYXRlcy5nZXREZWZhdWx0KGVsZW1lbnQpKSB7XG4gICAgY29uc3QgY29tbWFuZCA9ICdwcm9wZXJ0aWVzUGFuZWwuY2FtdW5kYS5jaGFuZ2VUZW1wbGF0ZSc7XG4gICAgY29uc3QgY29tbWFuZENvbnRleHQgPSB7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgbmV3VGVtcGxhdGU6IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0RGVmYXVsdChlbGVtZW50KVxuICAgIH07XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoY29tbWFuZCwgY29tbWFuZENvbnRleHQpO1xuICB9XG59XG5cbnZhciBjb21tYW5kc01vZHVsZSA9IHtcbiAgX19pbml0X186IFsnZWxlbWVudFRlbXBsYXRlQ29tbWFuZHMnXSxcbiAgZWxlbWVudFRlbXBsYXRlQ29tbWFuZHM6IFsndHlwZScsIEVsZW1lbnRUZW1wbGF0ZXNDb21tYW5kc11cbn07XG5cbi8qKlxuICogVGhpcyBCZWhhdmlvciBjaGVja3MgaWYgdGhlIG5ldyBlbGVtZW50J3MgdHlwZSBpcyBpblxuICogdGhlIGxpc3Qgb2YgZWxlbWVudHMgdGhlIHRlbXBsYXRlIGFwcGxpZXMgdG8gYW5kIHVubGlua3NcbiAqIGl0IGlmIG5vdC5cbiAqL1xuY2xhc3MgUmVwbGFjZUJlaGF2aW9yIGV4dGVuZHMgQ29tbWFuZEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudFRlbXBsYXRlcywgaW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvci5nZXQoJ2V2ZW50QnVzJykpO1xuICAgIHRoaXMucG9zdEV4ZWN1dGVkKCdzaGFwZS5yZXBsYWNlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gZS5jb250ZXh0LFxuICAgICAgICBvbGRTaGFwZSA9IGNvbnRleHQub2xkU2hhcGUsXG4gICAgICAgIG9sZEJvID0gZ2V0QnVzaW5lc3NPYmplY3Qob2xkU2hhcGUpLFxuICAgICAgICBuZXdTaGFwZSA9IGNvbnRleHQubmV3U2hhcGUsXG4gICAgICAgIG5ld0JvID0gZ2V0QnVzaW5lc3NPYmplY3QobmV3U2hhcGUpO1xuICAgICAgaWYgKCFvbGRCby5tb2RlbGVyVGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXdCby5tb2RlbGVyVGVtcGxhdGU7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gbmV3Qm8ubW9kZWxlclRlbXBsYXRlVmVyc2lvbjtcbiAgICAgIGNvbnN0IGVsZW1lbnRUZW1wbGF0ZSA9IGVsZW1lbnRUZW1wbGF0ZXMuZ2V0KHRlbXBsYXRlLCB2ZXJzaW9uKTtcbiAgICAgIGlmICghZWxlbWVudFRlbXBsYXRlKSB7XG4gICAgICAgIGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUobmV3U2hhcGUsIGluamVjdG9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBsaWVzVG8sXG4gICAgICAgIGVsZW1lbnRUeXBlXG4gICAgICB9ID0gZWxlbWVudFRlbXBsYXRlO1xuICAgICAgaWYgKGVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGlmICghaXMobmV3U2hhcGUsIGVsZW1lbnRUeXBlLnZhbHVlKSkge1xuICAgICAgICAgIGVsZW1lbnRUZW1wbGF0ZXMudW5saW5rVGVtcGxhdGUobmV3U2hhcGUsIGluamVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxvd2VkID0gYXBwbGllc1RvLnJlZHVjZSgoYWxsb3dlZCwgdHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gYWxsb3dlZCB8fCBpcyhuZXdCbywgdHlwZSk7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgZWxlbWVudFRlbXBsYXRlcy51bmxpbmtUZW1wbGF0ZShuZXdTaGFwZSwgaW5qZWN0b3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5SZXBsYWNlQmVoYXZpb3IuJGluamVjdCA9IFsnZWxlbWVudFRlbXBsYXRlcycsICdpbmplY3RvciddO1xuXG52YXIgYmVoYXZpb3JNb2R1bGUgPSB7XG4gIF9faW5pdF9fOiBbJ2VsZW1lbnRUZW1wbGF0ZXNSZXBsYWNlQmVoYXZpb3InXSxcbiAgZWxlbWVudFRlbXBsYXRlc1JlcGxhY2VCZWhhdmlvcjogWyd0eXBlJywgUmVwbGFjZUJlaGF2aW9yXVxufTtcblxudmFyIGNvcmVNb2R1bGUgPSB7XG4gIF9fZGVwZW5kc19fOiBbY29tbWFuZHNNb2R1bGUsIGJlaGF2aW9yTW9kdWxlXSxcbiAgX19pbml0X186IFsnZWxlbWVudFRlbXBsYXRlc0xvYWRlciddLFxuICBlbGVtZW50VGVtcGxhdGVzOiBbJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzJDFdLFxuICBlbGVtZW50VGVtcGxhdGVzTG9hZGVyOiBbJ3R5cGUnLCBFbGVtZW50VGVtcGxhdGVzTG9hZGVyJDFdXG59O1xuXG5jb25zdCBDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSQxID0gJ2NhbXVuZGE6ZXJyb3JFdmVudERlZmluaXRpb24nO1xuY29uc3QgQ0FNVU5EQV9FWEVDVVRJT05fTElTVEVORVJfVFlQRSA9ICdjYW11bmRhOmV4ZWN1dGlvbkxpc3RlbmVyJztcbmNvbnN0IENBTVVOREFfRklFTERfVFlQRSA9ICdjYW11bmRhOmZpZWxkJztcbmNvbnN0IENBTVVOREFfSU5fQlVTSU5FU1NfS0VZX1RZUEUgPSAnY2FtdW5kYTppbjpidXNpbmVzc0tleSc7XG5jb25zdCBDQU1VTkRBX0lOX1RZUEUgPSAnY2FtdW5kYTppbic7XG5jb25zdCBDQU1VTkRBX0lOUFVUX1BBUkFNRVRFUl9UWVBFJDEgPSAnY2FtdW5kYTppbnB1dFBhcmFtZXRlcic7XG5jb25zdCBDQU1VTkRBX09VVF9UWVBFID0gJ2NhbXVuZGE6b3V0JztcbmNvbnN0IENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFJDEgPSAnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXInO1xuY29uc3QgQ0FNVU5EQV9QUk9QRVJUWV9UWVBFID0gJ2NhbXVuZGE6cHJvcGVydHknO1xuY29uc3QgUFJPUEVSVFlfVFlQRSA9ICdwcm9wZXJ0eSc7XG5jb25zdCBFWFRFTlNJT05fQklORElOR19UWVBFUyA9IFtDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSQxLCBDQU1VTkRBX0ZJRUxEX1RZUEUsIENBTVVOREFfSU5fVFlQRSwgQ0FNVU5EQV9JTl9CVVNJTkVTU19LRVlfVFlQRSwgQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRSQxLCBDQU1VTkRBX09VVF9UWVBFLCBDQU1VTkRBX09VVFBVVF9QQVJBTUVURVJfVFlQRSQxLCBDQU1VTkRBX1BST1BFUlRZX1RZUEVdO1xuY29uc3QgSU9fQklORElOR19UWVBFUyA9IFtDQU1VTkRBX0lOUFVUX1BBUkFNRVRFUl9UWVBFJDEsIENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFJDFdO1xuY29uc3QgSU5fT1VUX0JJTkRJTkdfVFlQRVMgPSBbQ0FNVU5EQV9JTl9CVVNJTkVTU19LRVlfVFlQRSwgQ0FNVU5EQV9JTl9UWVBFLCBDQU1VTkRBX09VVF9UWVBFXTtcblxuY29uc3QgUFJJTUlUSVZFX01PRERMRV9UWVBFUyA9IFsnQm9vbGVhbicsICdJbnRlZ2VyJywgJ1N0cmluZyddO1xuZnVuY3Rpb24gQ3VzdG9tUHJvcGVydGllcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBlbGVtZW50VGVtcGxhdGUsXG4gICAgaW5qZWN0b3JcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHByb3BlcnRpZXMsXG4gICAgZ3JvdXBzOiBwcm9wZXJ0eUdyb3VwcyxcbiAgICBzY29wZXNcbiAgfSA9IGVsZW1lbnRUZW1wbGF0ZTtcblxuICAvLyAoMSkgZ3JvdXAgcHJvcGVydGllcyBieSBncm91cCBpZFxuICBjb25zdCBncm91cGVkUHJvcGVydGllcyA9IGdyb3VwQnlHcm91cElkKHByb3BlcnRpZXMpO1xuICBjb25zdCBkZWZhdWx0UHJvcHMgPSBbXTtcbiAgZm9yRWFjaChncm91cGVkUHJvcGVydGllcywgKHByb3BlcnRpZXMsIGdyb3VwSWQpID0+IHtcbiAgICBjb25zdCBncm91cCA9IGZpbmRDdXN0b21Hcm91cChwcm9wZXJ0eUdyb3VwcywgZ3JvdXBJZCk7XG4gICAgaWYgKCFncm91cCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcy5wdXNoKC4uLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBhZGRDdXN0b21Hcm91cChncm91cHMsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBpZDogYEVsZW1lbnRUZW1wbGF0ZXNfX0N1c3RvbVByb3BlcnRpZXMtJHtncm91cElkfWAsXG4gICAgICBsYWJlbDogdHJhbnNsYXRlKGdyb3VwLmxhYmVsKSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgICB0ZW1wbGF0ZUlkOiBgJHtpZH0tJHtncm91cElkfWBcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gKDIpIGFkZCBkZWZhdWx0IGN1c3RvbSBwcm9wc1xuICBpZiAoZGVmYXVsdFByb3BzLmxlbmd0aCkge1xuICAgIGFkZEN1c3RvbUdyb3VwKGdyb3Vwcywge1xuICAgICAgaWQ6ICdFbGVtZW50VGVtcGxhdGVzX19DdXN0b21Qcm9wZXJ0aWVzJyxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0N1c3RvbSBwcm9wZXJ0aWVzJyksXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcGVydGllczogZGVmYXVsdFByb3BzLFxuICAgICAgdGVtcGxhdGVJZDogaWRcbiAgICB9KTtcbiAgfVxuXG4gIC8vICgzKSBhZGQgY3VzdG9tIHNjb3BlcyBwcm9wc1xuICBpZiAoaXNBcnJheShzY29wZXMpKSB7XG4gICAgc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICB0eXBlXG4gICAgICB9ID0gc2NvcGU7XG4gICAgICBjb25zdCBpZCA9IHR5cGUucmVwbGFjZSgvOi9nLCAnLScpO1xuICAgICAgYWRkQ3VzdG9tR3JvdXAoZ3JvdXBzLCB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlkOiBgRWxlbWVudFRlbXBsYXRlc19fQ3VzdG9tR3JvdXAtJHtpZH1gLFxuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKGBDdXN0b20gcHJvcGVydGllcyBmb3Igc2NvcGUgPCR7dHlwZX0+YCksXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIHRlbXBsYXRlSWQ6IGlkLFxuICAgICAgICBzY29wZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cbmZ1bmN0aW9uIGFkZEN1c3RvbUdyb3VwKGdyb3VwcywgcHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgbGFiZWwsXG4gICAgcHJvcGVydGllcyxcbiAgICBzY29wZSxcbiAgICB0ZW1wbGF0ZUlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY3VzdG9tUHJvcGVydGllc0dyb3VwID0ge1xuICAgIGlkLFxuICAgIGxhYmVsLFxuICAgIGNvbXBvbmVudDogR3JvdXAsXG4gICAgZW50cmllczogW10sXG4gICAgc2hvdWxkT3BlbjogdHJ1ZVxuICB9O1xuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gY3JlYXRlQ3VzdG9tRW50cnkoYGN1c3RvbS1lbnRyeS0ke3RlbXBsYXRlSWR9LSR7aW5kZXh9YCwgZWxlbWVudCwgcHJvcGVydHksIHNjb3BlKTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGN1c3RvbVByb3BlcnRpZXNHcm91cC5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjdXN0b21Qcm9wZXJ0aWVzR3JvdXAuZW50cmllcy5sZW5ndGgpIHtcbiAgICBncm91cHMucHVzaChjdXN0b21Qcm9wZXJ0aWVzR3JvdXApO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVDdXN0b21FbnRyeShpZCwgZWxlbWVudCwgcHJvcGVydHksIHNjb3BlKSB7XG4gIGxldCB7XG4gICAgdHlwZVxuICB9ID0gcHJvcGVydHk7XG4gIGlmICghdHlwZSkge1xuICAgIHR5cGUgPSBnZXREZWZhdWx0VHlwZShwcm9wZXJ0eSk7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdCb29sZWFuJykge1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGNvbXBvbmVudDogQm9vbGVhblByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzQ2hlY2tib3hFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgc2NvcGVcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSAnRHJvcGRvd24nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgY29tcG9uZW50OiBEcm9wZG93blByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzU2VsZWN0RW50cnlFZGl0ZWQsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHNjb3BlXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBjb21wb25lbnQ6IFN0cmluZ1Byb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEZpZWxkRW50cnlFZGl0ZWQsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHNjb3BlXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ1RleHQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgY29tcG9uZW50OiBUZXh0QXJlYVByb3BlcnR5LFxuICAgICAgaXNFZGl0ZWQ6IGlzVGV4dEFyZWFFbnRyeUVkaXRlZCxcbiAgICAgIHByb3BlcnR5LFxuICAgICAgc2NvcGVcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0VHlwZShwcm9wZXJ0eSkge1xuICBjb25zdCB7XG4gICAgYmluZGluZ1xuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICB0eXBlXG4gIH0gPSBiaW5kaW5nO1xuICBpZiAoW1BST1BFUlRZX1RZUEUsIENBTVVOREFfUFJPUEVSVFlfVFlQRSwgQ0FNVU5EQV9JTl9UWVBFLCBDQU1VTkRBX0lOX0JVU0lORVNTX0tFWV9UWVBFLCBDQU1VTkRBX09VVF9UWVBFLCBDQU1VTkRBX0ZJRUxEX1RZUEVdLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgcmV0dXJuICdTdHJpbmcnO1xuICB9XG4gIGlmICh0eXBlID09PSBDQU1VTkRBX0VYRUNVVElPTl9MSVNURU5FUl9UWVBFKSB7XG4gICAgcmV0dXJuICdIaWRkZW4nO1xuICB9XG59XG5mdW5jdGlvbiBCb29sZWFuUHJvcGVydHkocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHksXG4gICAgc2NvcGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZWRpdGFibGUsXG4gICAgbGFiZWxcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgY29tbWFuZFN0YWNrID0gdXNlU2VydmljZSgnY29tbWFuZFN0YWNrJyksXG4gICAgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIHJldHVybiBDaGVja2JveEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGdldFZhbHVlOiBwcm9wZXJ0eUdldHRlcihlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIGlkLFxuICAgIGxhYmVsOiBsYWJlbCA/IHRyYW5zbGF0ZShsYWJlbCkgOiBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlcihicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIGRpc2FibGVkOiBlZGl0YWJsZSA9PT0gZmFsc2VcbiAgfSk7XG59XG5mdW5jdGlvbiBEcm9wZG93blByb3BlcnR5KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5LFxuICAgIHNjb3BlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGVkaXRhYmxlLFxuICAgIGxhYmVsXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3QgYnBtbkZhY3RvcnkgPSB1c2VTZXJ2aWNlKCdicG1uRmFjdG9yeScpLFxuICAgIGNvbW1hbmRTdGFjayA9IHVzZVNlcnZpY2UoJ2NvbW1hbmRTdGFjaycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRPcHRpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNob2ljZXNcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgcmV0dXJuIGNob2ljZXMubWFwKCh7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdHJhbnNsYXRlKG5hbWUpLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIFNlbGVjdEVudHJ5KHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIGxhYmVsOiBsYWJlbCA/IHRyYW5zbGF0ZShsYWJlbCkgOiBsYWJlbCxcbiAgICBnZXRPcHRpb25zLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyKGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgc2V0VmFsdWU6IHByb3BlcnR5U2V0dGVyKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IodHJhbnNsYXRlLCBwcm9wZXJ0eSlcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHJpbmdQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eSxcbiAgICBzY29wZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBkZWJvdW5jZSxcbiAgICBlbGVtZW50LFxuICAgIGdldFZhbHVlOiBwcm9wZXJ0eUdldHRlcihlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIGlkLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGxhYmVsOiBsYWJlbCA/IHRyYW5zbGF0ZShsYWJlbCkgOiBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbjogUHJvcGVydHlEZXNjcmlwdGlvbih7XG4gICAgICBkZXNjcmlwdGlvblxuICAgIH0pLFxuICAgIHNldFZhbHVlOiBwcm9wZXJ0eVNldHRlcihicG1uRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpLFxuICAgIHZhbGlkYXRlOiBwcm9wZXJ0eVZhbGlkYXRvcih0cmFuc2xhdGUsIHByb3BlcnR5KSxcbiAgICBkaXNhYmxlZDogZWRpdGFibGUgPT09IGZhbHNlXG4gIH0pO1xufVxuZnVuY3Rpb24gVGV4dEFyZWFQcm9wZXJ0eShwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpZCxcbiAgICBwcm9wZXJ0eSxcbiAgICBzY29wZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBlZGl0YWJsZSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlclxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJwbW5GYWN0b3J5ID0gdXNlU2VydmljZSgnYnBtbkZhY3RvcnknKSxcbiAgICBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgcmV0dXJuIFRleHRBcmVhRW50cnkoe1xuICAgIGRlYm91bmNlLFxuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgbGFiZWw6IGxhYmVsID8gdHJhbnNsYXRlKGxhYmVsKSA6IGxhYmVsLFxuICAgIGRlc2NyaXB0aW9uOiBQcm9wZXJ0eURlc2NyaXB0aW9uKHtcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfSksXG4gICAgZ2V0VmFsdWU6IHByb3BlcnR5R2V0dGVyKGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgc2V0VmFsdWU6IHByb3BlcnR5U2V0dGVyKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSksXG4gICAgZGlzYWJsZWQ6IGVkaXRhYmxlID09PSBmYWxzZSxcbiAgICB2YWxpZGF0ZTogcHJvcGVydHlWYWxpZGF0b3IodHJhbnNsYXRlLCBwcm9wZXJ0eSlcbiAgfSk7XG59XG5mdW5jdGlvbiBwcm9wZXJ0eUdldHRlcihlbGVtZW50LCBwcm9wZXJ0eSwgc2NvcGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFZhbHVlKCkge1xuICAgIGxldCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpbmRpbmcsXG4gICAgICB2YWx1ZTogZGVmYXVsdFZhbHVlID0gJydcbiAgICB9ID0gcHJvcGVydHk7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGVcbiAgICB9ID0gYmluZGluZztcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2NvcGVCdXNpbmVzc09iamVjdChidXNpbmVzc09iamVjdCwgc2NvcGUpO1xuICAgICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHByb3BlcnR5XG4gICAgaWYgKHR5cGUgPT09ICdwcm9wZXJ0eScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYnVzaW5lc3NPYmplY3QuZ2V0KG5hbWUpO1xuICAgICAgaWYgKG5hbWUgPT09ICdjb25kaXRpb25FeHByZXNzaW9uJykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCdib2R5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQkMSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uXG4gICAgaWYgKHR5cGUgPT09IENBTVVOREFfRVJST1JfRVZFTlRfREVGSU5JVElPTl9UWVBFJDEpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZXJyb3JSZWZcbiAgICAgIH0gPSBiaW5kaW5nO1xuICAgICAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBmaW5kQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uKGJ1c2luZXNzT2JqZWN0LCBlcnJvclJlZik7XG4gICAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGVycm9yRXZlbnREZWZpbml0aW9uLmdldCgnY2FtdW5kYTpleHByZXNzaW9uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpGaWVsZFxuICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0ZJRUxEX1RZUEUpIHtcbiAgICAgIGNvbnN0IGNhbXVuZGFGaWVsZHMgPSBmaW5kRXh0ZW5zaW9ucyhidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkZpZWxkJ10pO1xuICAgICAgY29uc3QgY2FtdW5kYUZpZWxkID0gY2FtdW5kYUZpZWxkcy5maW5kKGNhbXVuZGFGaWVsZCA9PiB7XG4gICAgICAgIHJldHVybiBjYW11bmRhRmllbGQuZ2V0KCdjYW11bmRhOm5hbWUnKSA9PT0gbmFtZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGNhbXVuZGFGaWVsZCkge1xuICAgICAgICByZXR1cm4gY2FtdW5kYUZpZWxkLmdldCgnY2FtdW5kYTpzdHJpbmcnKSB8fCBjYW11bmRhRmllbGQuZ2V0KCdjYW11bmRhOmV4cHJlc3Npb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjYW11bmRhOlByb3BlcnR5XG4gICAgaWYgKHR5cGUgPT09IENBTVVOREFfUFJPUEVSVFlfVFlQRSkge1xuICAgICAgbGV0IGNhbXVuZGFQcm9wZXJ0aWVzO1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIC8vIFRPRE8ocGhpbGlwcGZyb21tZSk6IGFzIG9ubHkgYnBtbjpFcnJvciBhbmQgY2FtdW5kYTpDb25uZWN0b3IgYXJlIHN1cHBvcnRlZCB0aGlzIGNvZGUgaXMgcHJhY3RpY2FsbHkgZGVhZFxuICAgICAgICBjYW11bmRhUHJvcGVydGllcyA9IGJ1c2luZXNzT2JqZWN0LmdldCgncHJvcGVydGllcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtdW5kYVByb3BlcnRpZXMgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpQcm9wZXJ0aWVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoY2FtdW5kYVByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgY2FtdW5kYVByb3BlcnR5ID0gZmluZENhbXVuZGFQcm9wZXJ0eShjYW11bmRhUHJvcGVydGllcywgYmluZGluZyk7XG4gICAgICAgIGlmIChjYW11bmRhUHJvcGVydHkpIHtcbiAgICAgICAgICByZXR1cm4gY2FtdW5kYVByb3BlcnR5LmdldCgnY2FtdW5kYTp2YWx1ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBpZiAoSU9fQklORElOR19UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbGV0IGlucHV0T3V0cHV0O1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdpbnB1dE91dHB1dCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBjYW11bmRhOklucHV0UGFyYW1ldGVyXG4gICAgICBpZiAodHlwZSA9PT0gQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRSQxKSB7XG4gICAgICAgIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcbiAgICAgICAgaWYgKGlucHV0UGFyYW1ldGVyKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc2NyaXB0Rm9ybWF0XG4gICAgICAgICAgfSA9IGJpbmRpbmc7XG4gICAgICAgICAgaWYgKHNjcmlwdEZvcm1hdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGlucHV0UGFyYW1ldGVyLmdldCgnY2FtdW5kYTpkZWZpbml0aW9uJyk7XG4gICAgICAgICAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbi5nZXQoJ2NhbXVuZGE6dmFsdWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0UGFyYW1ldGVyLmdldCgndmFsdWUnKSB8fCAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gY2FtdW5kYTpPdXRwdXRQYXJhbWV0ZXJcbiAgICAgIGlmICh0eXBlID09PSBDQU1VTkRBX09VVFBVVF9QQVJBTUVURVJfVFlQRSQxKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xuICAgICAgICBpZiAob3V0cHV0UGFyYW1ldGVyKSB7XG4gICAgICAgICAgcmV0dXJuIG91dHB1dFBhcmFtZXRlci5nZXQoJ2NhbXVuZGE6bmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpJbiBhbmQgY2FtdW5kYTpPdXRcbiAgICBpZiAoSU5fT1VUX0JJTkRJTkdfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGNvbnN0IGNhbXVuZGFJbk91dCA9IGZpbmRDYW11bmRhSW5PdXQoYnVzaW5lc3NPYmplY3QsIGJpbmRpbmcpO1xuICAgICAgaWYgKGNhbXVuZGFJbk91dCkge1xuICAgICAgICBpZiAodHlwZSA9PT0gQ0FNVU5EQV9JTl9CVVNJTkVTU19LRVlfVFlQRSkge1xuICAgICAgICAgIHJldHVybiBjYW11bmRhSW5PdXQuZ2V0KCdjYW11bmRhOmJ1c2luZXNzS2V5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gQ0FNVU5EQV9PVVRfVFlQRSkge1xuICAgICAgICAgIHJldHVybiBjYW11bmRhSW5PdXQuZ2V0KCdjYW11bmRhOnRhcmdldCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IENBTVVOREFfSU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25cbiAgICAgICAgICB9ID0gYmluZGluZztcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbXVuZGFJbk91dC5nZXQoJ2NhbXVuZGE6c291cmNlRXhwcmVzc2lvbicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2FtdW5kYUluT3V0LmdldCgnY2FtdW5kYTpzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIG5ldmVyIHRocm93IGFzIHRlbXBsYXRlcyBhcmUgdmFsaWRhdGVkIGJlZm9yZWhhbmRcbiAgICB0aHJvdyB1bmtub3duQmluZGluZ0Vycm9yKGVsZW1lbnQsIHByb3BlcnR5KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIHByb3BlcnR5U2V0dGVyKGJwbW5GYWN0b3J5LCBjb21tYW5kU3RhY2ssIGVsZW1lbnQsIHByb3BlcnR5LCBzY29wZSkge1xuICByZXR1cm4gZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUpIHtcbiAgICBsZXQgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgICBjb25zdCB7XG4gICAgICBiaW5kaW5nXG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlXG4gICAgfSA9IGJpbmRpbmc7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnQgPSBnZXRSb290KGJ1c2luZXNzT2JqZWN0KTtcbiAgICBsZXQgZXh0ZW5zaW9uRWxlbWVudHM7XG4gICAgbGV0IHByb3BlcnR5VmFsdWU7XG4gICAgY29uc3QgY29tbWFuZHMgPSBbXTtcbiAgICBpZiAoRVhURU5TSU9OX0JJTkRJTkdfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICAgICAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgICAgICBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCBudWxsLCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBidXNpbmVzc09iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGJ1c2luZXNzT2JqZWN0ID0gZ2V0U2NvcGVCdXNpbmVzc09iamVjdChidXNpbmVzc09iamVjdCwgc2NvcGUpO1xuICAgICAgaWYgKCFidXNpbmVzc09iamVjdCkge1xuICAgICAgICAvLyBicG1uOkVycm9yXG4gICAgICAgIGlmIChzY29wZS50eXBlID09PSAnYnBtbjpFcnJvcicpIHtcbiAgICAgICAgICBidXNpbmVzc09iamVjdCA9IGNyZWF0ZUVycm9yKHNjb3BlLmlkLCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpO1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogcm9vdEVsZW1lbnQsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290RWxlbWVudC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBidXNpbmVzc09iamVjdF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1c2luZXNzT2JqZWN0ID0gY3JlYXRlRWxlbWVudChzY29wZS50eXBlLCBudWxsLCBlbGVtZW50LCBicG1uRmFjdG9yeSk7XG4gICAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGJ1c2luZXNzT2JqZWN0XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwcm9wZXJ0eVxuICAgIGlmICh0eXBlID09PSAncHJvcGVydHknKSB7XG4gICAgICBpZiAobmFtZSA9PT0gJ2NvbmRpdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY3JpcHRGb3JtYXRcbiAgICAgICAgfSA9IGJpbmRpbmc7XG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBjcmVhdGVFbGVtZW50KCdicG1uOkZvcm1hbEV4cHJlc3Npb24nLCB7XG4gICAgICAgICAgYm9keTogdmFsdWUsXG4gICAgICAgICAgbGFuZ3VhZ2U6IHNjcmlwdEZvcm1hdFxuICAgICAgICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlEZXNjcmlwdG9yID0gYnVzaW5lc3NPYmplY3QuJGRlc2NyaXB0b3IucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHR5cGU6IHByb3BlcnR5VHlwZVxuICAgICAgICB9ID0gcHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gICAgICAgIC8vIGRvIG5vdCBvdmVycmlkZSBub24tcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIGlmICghUFJJTUlUSVZFX01PRERMRV9UWVBFUy5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3Qgc2V0IHByb3BlcnR5IG9mIHR5cGUgPCR7cHJvcGVydHlUeXBlfT5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlUeXBlID09PSAnQm9vbGVhbicpIHtcbiAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gISF2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVR5cGUgPT09ICdJbnRlZ2VyJykge1xuICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICAgIGlmIChpc05hTihwcm9wZXJ0eVZhbHVlKSkge1xuICAgICAgICAgICAgLy8gZG8gbm90IHNldCBOYU4gdmFsdWVcbiAgICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCByZW1vdmUgdGhlIHByb3BlcnR5XG4gICAgICAgICAgcHJvcGVydHlWYWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzVW5kZWZpbmVkJDEocHJvcGVydHlWYWx1ZSkpIHtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIFtuYW1lXTogcHJvcGVydHlWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpFcnJvckV2ZW50RGVmaW5pdGlvblxuICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSQxKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGVycm9yUmVmXG4gICAgICB9ID0gYmluZGluZztcbiAgICAgIGNvbnN0IG9sZENhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbiA9IGZpbmRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24oYnVzaW5lc3NPYmplY3QsIGVycm9yUmVmKTtcbiAgICAgIGlmIChvbGRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogb2xkQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAnY2FtdW5kYTpleHByZXNzaW9uJzogdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3RXJyb3IgPSBjcmVhdGVFcnJvcihiaW5kaW5nLmVycm9yUmVmLCByb290RWxlbWVudCwgYnBtbkZhY3RvcnkpLFxuICAgICAgICAgIG5ld0NhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbiA9IGNyZWF0ZUNhbXVuZGFFcnJvckV2ZW50RGVmaW5pdGlvbih2YWx1ZSwgbmV3RXJyb3IsIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IHJvb3RFbGVtZW50LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICByb290RWxlbWVudHM6IFsuLi5yb290RWxlbWVudC5nZXQoJ3Jvb3RFbGVtZW50cycpLCBuZXdFcnJvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdmFsdWVzOiBbLi4uZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKSwgbmV3Q2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpGaWVsZFxuICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0ZJRUxEX1RZUEUpIHtcbiAgICAgIGNvbnN0IG9sZENhbXVuZGFGaWVsZHMgPSBmaW5kRXh0ZW5zaW9ucyhidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkZpZWxkJ10pO1xuICAgICAgY29uc3QgbmV3Q2FtdW5kYUZpZWxkcyA9IFtdO1xuICAgICAgaWYgKG9sZENhbXVuZGFGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIG9sZENhbXVuZGFGaWVsZHMuZm9yRWFjaChjYW11bmRhRmllbGQgPT4ge1xuICAgICAgICAgIGlmIChjYW11bmRhRmllbGQubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgbmV3Q2FtdW5kYUZpZWxkcy5wdXNoKGNyZWF0ZUNhbXVuZGFGaWVsZEluamVjdGlvbihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q2FtdW5kYUZpZWxkcy5wdXNoKGNhbXVuZGFGaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0NhbXVuZGFGaWVsZHMucHVzaChjcmVhdGVDYW11bmRhRmllbGRJbmplY3Rpb24oYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbHRlcih2YWx1ZSA9PiAhb2xkQ2FtdW5kYUZpZWxkcy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGV4dGVuc2lvbkVsZW1lbnRzLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczogWy4uLnZhbHVlcywgLi4ubmV3Q2FtdW5kYUZpZWxkc11cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGNhbXVuZGE6UHJvcGVydHlcbiAgICBpZiAodHlwZSA9PT0gQ0FNVU5EQV9QUk9QRVJUWV9UWVBFKSB7XG4gICAgICBsZXQgY2FtdW5kYVByb3BlcnRpZXM7XG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgY2FtdW5kYVByb3BlcnRpZXMgPSBidXNpbmVzc09iamVjdC5nZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbXVuZGFQcm9wZXJ0aWVzID0gZmluZEV4dGVuc2lvbihleHRlbnNpb25FbGVtZW50cywgJ2NhbXVuZGE6UHJvcGVydGllcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYW11bmRhUHJvcGVydGllcykge1xuICAgICAgICBjYW11bmRhUHJvcGVydGllcyA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6UHJvcGVydGllcycsIG51bGwsIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogYnVzaW5lc3NPYmplY3QsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBjYW11bmRhUHJvcGVydGllc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHZhbHVlczogWy4uLmV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyksIGNhbXVuZGFQcm9wZXJ0aWVzXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG9sZENhbXVuZGFQcm9wZXJ0eSA9IGZpbmRDYW11bmRhUHJvcGVydHkoY2FtdW5kYVByb3BlcnRpZXMsIGJpbmRpbmcpO1xuICAgICAgY29uc3QgbmV3Q2FtdW5kYVByb3BlcnR5ID0gY3JlYXRlQ2FtdW5kYVByb3BlcnR5KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjYW11bmRhUHJvcGVydGllcy5nZXQoJ3ZhbHVlcycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkQ2FtdW5kYVByb3BlcnR5KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBjYW11bmRhUHJvcGVydGllcyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi52YWx1ZXMsIG5ld0NhbXVuZGFQcm9wZXJ0eV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoSU9fQklORElOR19UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgbGV0IGlucHV0T3V0cHV0O1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGlucHV0T3V0cHV0ID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdpbnB1dE91dHB1dCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGV4dGVuc2lvbkVsZW1lbnRzLCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgICAgICBpbnB1dE91dHB1dCA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnLCBudWxsLCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xuICAgICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgICBjb21tYW5kcy5wdXNoKHtcbiAgICAgICAgICAgIGNtZDogJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsXG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgIG1vZGRsZUVsZW1lbnQ6IGJ1c2luZXNzT2JqZWN0LFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgaW5wdXRPdXRwdXRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogZXh0ZW5zaW9uRWxlbWVudHMsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IFsuLi5leHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLCBpbnB1dE91dHB1dF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNhbXVuZGE6SW5wdXRQYXJhbWV0ZXJcbiAgICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0lOUFVUX1BBUkFNRVRFUl9UWVBFJDEpIHtcbiAgICAgICAgY29uc3Qgb2xkQ2FtdW5kYUlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcbiAgICAgICAgY29uc3QgbmV3Q2FtdW5kYUlucHV0UGFyYW1ldGVyID0gY3JlYXRlSW5wdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gaW5wdXRPdXRwdXQuZ2V0KCdjYW11bmRhOmlucHV0UGFyYW1ldGVycycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkQ2FtdW5kYUlucHV0UGFyYW1ldGVyKTtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPdXRwdXQsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICdjYW11bmRhOmlucHV0UGFyYW1ldGVycyc6IFsuLi52YWx1ZXMsIG5ld0NhbXVuZGFJbnB1dFBhcmFtZXRlcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBjYW11bmRhOk91dHB1dFBhcmFtZXRlclxuICAgICAgaWYgKHR5cGUgPT09IENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFJDEpIHtcbiAgICAgICAgY29uc3Qgb2xkQ2FtdW5kYU91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xuICAgICAgICBjb25zdCBuZXdDYW11bmRhT3V0cHV0UGFyYW1ldGVyID0gY3JlYXRlT3V0cHV0UGFyYW1ldGVyKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXJzJykuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBvbGRDYW11bmRhT3V0cHV0UGFyYW1ldGVyKTtcbiAgICAgICAgY29tbWFuZHMucHVzaCh7XG4gICAgICAgICAgY21kOiAnZWxlbWVudC51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbW9kZGxlRWxlbWVudDogaW5wdXRPdXRwdXQsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICdjYW11bmRhOm91dHB1dFBhcmFtZXRlcnMnOiBbLi4udmFsdWVzLCBuZXdDYW11bmRhT3V0cHV0UGFyYW1ldGVyXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FtdW5kYTpJbiBhbmQgY2FtdW5kYTpPdXRcbiAgICBpZiAoSU5fT1VUX0JJTkRJTkdfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGNvbnN0IG9sZENhbXVuZGFJbk91dCA9IGZpbmRDYW11bmRhSW5PdXQoYnVzaW5lc3NPYmplY3QsIGJpbmRpbmcpO1xuICAgICAgbGV0IG5ld0NhbXVuZGFJbk91dDtcbiAgICAgIGlmICh0eXBlID09PSBDQU1VTkRBX0lOX1RZUEUpIHtcbiAgICAgICAgbmV3Q2FtdW5kYUluT3V0ID0gY3JlYXRlQ2FtdW5kYUluKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IENBTVVOREFfT1VUX1RZUEUpIHtcbiAgICAgICAgbmV3Q2FtdW5kYUluT3V0ID0gY3JlYXRlQ2FtdW5kYU91dChiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q2FtdW5kYUluT3V0ID0gY3JlYXRlQ2FtdW5kYUluV2l0aEJ1c2luZXNzS2V5KHZhbHVlLCBicG1uRmFjdG9yeSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZXMgPSBleHRlbnNpb25FbGVtZW50cy5nZXQoJ3ZhbHVlcycpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gb2xkQ2FtdW5kYUluT3V0KTtcbiAgICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdlbGVtZW50LnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBtb2RkbGVFbGVtZW50OiBleHRlbnNpb25FbGVtZW50cyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IFsuLi52YWx1ZXMsIG5ld0NhbXVuZGFJbk91dF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBjb21tYW5kU3RhY2suZXhlY3V0ZSgnZWxlbWVudC10ZW1wbGF0ZXMubXVsdGktY29tbWFuZC1leGVjdXRvcicsIGNvbW1hbmRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzaG91bGQgbmV2ZXIgdGhyb3cgYXMgdGVtcGxhdGVzIGFyZSB2YWxpZGF0ZWQgYmVmb3JlaGFuZFxuICAgIHRocm93IHVua25vd25CaW5kaW5nRXJyb3IoZWxlbWVudCwgcHJvcGVydHkpO1xuICB9O1xufVxuZnVuY3Rpb24gcHJvcGVydHlWYWxpZGF0b3IodHJhbnNsYXRlLCBwcm9wZXJ0eSkge1xuICByZXR1cm4gZnVuY3Rpb24gdmFsaWRhdGUodmFsdWUpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb25zdHJhaW50cyA9IHt9XG4gICAgfSA9IHByb3BlcnR5O1xuICAgIGNvbnN0IHtcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG1pbkxlbmd0aCxcbiAgICAgIG5vdEVtcHR5XG4gICAgfSA9IGNvbnN0cmFpbnRzO1xuICAgIGlmIChub3RFbXB0eSAmJiBpc0VtcHR5U3RyaW5nKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnTXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChtYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWF4IGxlbmd0aCB7bWF4TGVuZ3RofS4nLCB7XG4gICAgICAgIG1heExlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChtaW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKCdNdXN0IGhhdmUgbWluIGxlbmd0aCB7bWluTGVuZ3RofS4nLCB7XG4gICAgICAgIG1pbkxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCB7XG4gICAgICBwYXR0ZXJuXG4gICAgfSA9IGNvbnN0cmFpbnRzO1xuICAgIGlmIChwYXR0ZXJuKSB7XG4gICAgICBsZXQgbWVzc2FnZTtcbiAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICAgICAgbWVzc2FnZSA9IHBhdHRlcm4ubWVzc2FnZTtcbiAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4udmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoIW1hdGNoZXNQYXR0ZXJuKHZhbHVlLCBwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZSB8fCB0cmFuc2xhdGUoJ011c3QgbWF0Y2ggcGF0dGVybiB7cGF0dGVybn0uJywge1xuICAgICAgICAgIHBhdHRlcm5cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0U2NvcGVCdXNpbmVzc09iamVjdChidXNpbmVzc09iamVjdCwgc2NvcGUpIHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHR5cGVcbiAgfSA9IHNjb3BlO1xuICBpZiAodHlwZSA9PT0gJ2JwbW46RXJyb3InKSB7XG4gICAgLy8gcmV0cmlldmUgZXJyb3IgdGhyb3VnaCByZWZlcmVuY2VkIGVycm9yIGV2ZW50IGRlZmluaXRpb25cbiAgICBjb25zdCBlcnJvckV2ZW50RGVmaW5pdGlvbiA9IGZpbmRDYW11bmRhRXJyb3JFdmVudERlZmluaXRpb24oYnVzaW5lc3NPYmplY3QsIGlkKTtcbiAgICBpZiAoZXJyb3JFdmVudERlZmluaXRpb24pIHtcbiAgICAgIHJldHVybiBlcnJvckV2ZW50RGVmaW5pdGlvbi5nZXQoJ2Vycm9yUmVmJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCB0eXBlKTtcbn1cbmZ1bmN0aW9uIHVua25vd25CaW5kaW5nRXJyb3IoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcbiAgY29uc3QgaWQgPSBidXNpbmVzc09iamVjdC5nZXQoJ2lkJyk7XG4gIGNvbnN0IHtcbiAgICBiaW5kaW5nXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3Qge1xuICAgIHR5cGVcbiAgfSA9IGJpbmRpbmc7XG4gIHJldHVybiBuZXcgRXJyb3IoYHVua25vd24gYmluZGluZyA8JHt0eXBlfT4gZm9yIGVsZW1lbnQgPCR7aWR9PiwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuYCk7XG59XG5mdW5jdGlvbiBpc0VtcHR5U3RyaW5nKHN0cmluZykge1xuICByZXR1cm4gIXN0cmluZyB8fCAhc3RyaW5nLnRyaW0oKS5sZW5ndGg7XG59XG5mdW5jdGlvbiBtYXRjaGVzUGF0dGVybihzdHJpbmcsIHBhdHRlcm4pIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybikudGVzdChzdHJpbmcpO1xufVxuZnVuY3Rpb24gZ3JvdXBCeUdyb3VwSWQocHJvcGVydGllcykge1xuICByZXR1cm4gZ3JvdXBCeShwcm9wZXJ0aWVzLCAnZ3JvdXAnKTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXN0b21Hcm91cChncm91cHMsIGlkKSB7XG4gIHJldHVybiBmaW5kKGdyb3VwcywgZyA9PiBnLmlkID09PSBpZCk7XG59XG5cbmZ1bmN0aW9uIEVycm9yUHJvcGVydGllcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWxlbWVudCxcbiAgICBpbmRleCxcbiAgICBwcm9wZXJ0eSxcbiAgICBncm91cHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYmluZGluZyxcbiAgICBsYWJlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICBlcnJvclJlZlxuICB9ID0gYmluZGluZztcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KSxcbiAgICBlcnJvckV2ZW50RGVmaW5pdGlvbnMgPSBmaW5kRXh0ZW5zaW9ucyhidXNpbmVzc09iamVjdCwgWydjYW11bmRhOkVycm9yRXZlbnREZWZpbml0aW9uJ10pO1xuICBpZiAoIWVycm9yRXZlbnREZWZpbml0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXJyb3JFdmVudERlZmluaXRpb24gPSBmaW5kQ2FtdW5kYUVycm9yRXZlbnREZWZpbml0aW9uKGVsZW1lbnQsIGVycm9yUmVmKTtcbiAgY29uc3QgaWQgPSBgJHtlbGVtZW50LmlkfS1lcnJvci0ke2luZGV4fWA7XG4gIGxldCBlbnRyaWVzID0gW107XG4gIGNvbnN0IGVycm9yR3JvdXAgPSBncm91cHMuZmluZCgoe1xuICAgIGlkXG4gIH0pID0+IGlkID09PSAnQ2FtdW5kYVBsYXRmb3JtX19FcnJvcnMnKTtcbiAgY29uc3Qgb3JpZ2luYWxJdGVtID0gZXJyb3JHcm91cC5pdGVtcy5maW5kKCh7XG4gICAgZW50cmllc1xuICB9KSA9PiBlbnRyaWVzWzBdLmVycm9yRXZlbnREZWZpbml0aW9uID09PSBlcnJvckV2ZW50RGVmaW5pdGlvbik7XG4gIGVudHJpZXMgPSBvcmlnaW5hbEl0ZW0uZW50cmllcztcblxuICAvLyAoMSkgcmVtb3ZlIGdsb2JhbCBlcnJvciByZWZlcmVuY2VkIGVudHJ5XG4gIC8vIGVudHJpZXMuc2hpZnQoKTtcbiAgZW50cmllcyA9IHJlbW92ZUVudHJ5JDEoZW50cmllcywgJy1lcnJvclJlZicpO1xuXG4gIC8vICgyKSByZW1vdmUgdGhyb3cgZXhwcmVzc2lvbiBpbnB1dFxuICAvLyBlbnRyaWVzLnBvcCgpO1xuICBlbnRyaWVzID0gcmVtb3ZlRW50cnkkMShlbnRyaWVzLCAnLWV4cHJlc3Npb24nKTtcblxuICAvLyAoMykgYWRkIGRpc2FibGVkIHRocm93IGV4cHJlc3Npb24gaW5wdXRcbiAgZW50cmllcy5wdXNoKHtcbiAgICBpZDogYCR7aWR9LWV4cHJlc3Npb25gLFxuICAgIGNvbXBvbmVudDogRXhwcmVzc2lvbixcbiAgICBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBwcm9wZXJ0eVxuICB9KTtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICBpZCxcbiAgICBsYWJlbDogbGFiZWwgfHwgZ2V0RXJyb3JMYWJlbChlcnJvckV2ZW50RGVmaW5pdGlvbiksXG4gICAgZW50cmllc1xuICB9O1xuICByZXR1cm4gaXRlbTtcbn1cbmZ1bmN0aW9uIEV4cHJlc3Npb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVycm9yRXZlbnREZWZpbml0aW9uLFxuICAgIGlkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdHJhbnNsYXRlID0gdXNlU2VydmljZSgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGRlYm91bmNlID0gdXNlU2VydmljZSgnZGVib3VuY2VJbnB1dCcpO1xuICBjb25zdCBzZXRWYWx1ZSA9ICgpID0+IHt9O1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdjYW11bmRhOmV4cHJlc3Npb24nKTtcbiAgfTtcbiAgcmV0dXJuIFRleHRGaWVsZEVudHJ5KHtcbiAgICBlbGVtZW50OiBlcnJvckV2ZW50RGVmaW5pdGlvbixcbiAgICBpZCxcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdUaHJvdyBleHByZXNzaW9uJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgZGVib3VuY2UsXG4gICAgZGlzYWJsZWQ6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiByZW1vdmVFbnRyeSQxKGVudHJpZXMsIHN1ZmZpeCkge1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoe1xuICAgIGlkXG4gIH0pID0+IGlkLmVuZHNXaXRoKHN1ZmZpeCkpO1xuICByZXR1cm4gd2l0aG91dChlbnRyaWVzLCBlbnRyeSk7XG59XG5mdW5jdGlvbiBnZXRFcnJvckxhYmVsKGVycm9yRXZlbnREZWZpbml0aW9uKSB7XG4gIGNvbnN0IGVycm9yID0gZXJyb3JFdmVudERlZmluaXRpb24uZ2V0KCdlcnJvclJlZicpO1xuICBpZiAoIWVycm9yKSB7XG4gICAgcmV0dXJuICc8bm8gcmVmZXJlbmNlPic7XG4gIH1cbiAgY29uc3QgZXJyb3JDb2RlID0gZXJyb3IuZ2V0KCdlcnJvckNvZGUnKSxcbiAgICBuYW1lID0gZXJyb3IuZ2V0KCduYW1lJykgfHwgJzx1bm5hbWVkPic7XG4gIGlmIChlcnJvckNvZGUpIHtcbiAgICByZXR1cm4gYCR7bmFtZX0gKGNvZGUgPSAke2Vycm9yQ29kZX0pYDtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn1cblxuZnVuY3Rpb24gSW5wdXRQcm9wZXJ0aWVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGluZGV4LFxuICAgIHByb3BlcnR5LFxuICAgIGdyb3Vwc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBiaW5kaW5nLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGxhYmVsXG4gIH0gPSBwcm9wZXJ0eTtcbiAgY29uc3Qge1xuICAgIG5hbWVcbiAgfSA9IGJpbmRpbmc7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCksXG4gICAgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICBjb25zdCBpbnB1dFBhcmFtZXRlciA9IGlucHV0T3V0cHV0ICYmIGZpbmRJbnB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG4gIGNvbnN0IGlkID0gYCR7ZWxlbWVudC5pZH0taW5wdXRQYXJhbWV0ZXItJHtpbmRleH1gO1xuICBsZXQgZW50cmllcyA9IFtdO1xuICBpZiAoaW5wdXRQYXJhbWV0ZXIpIHtcbiAgICBjb25zdCBpbnB1dEdyb3VwID0gZ3JvdXBzLmZpbmQoKHtcbiAgICAgIGlkXG4gICAgfSkgPT4gaWQgPT09ICdDYW11bmRhUGxhdGZvcm1fX0lucHV0Jyk7XG4gICAgY29uc3QgaXRlbSA9IGlucHV0R3JvdXAuaXRlbXMuZmluZCgoe1xuICAgICAgZW50cmllc1xuICAgIH0pID0+IGVudHJpZXNbMF0ucGFyYW1ldGVyID09PSBpbnB1dFBhcmFtZXRlcik7XG4gICAgZW50cmllcyA9IGl0ZW0uZW50cmllcztcblxuICAgIC8vICgxKSByZW1vdmUgbmFtZSBlbnRyeVxuICAgIGVudHJpZXMgPSByZW1vdmVFbnRyeShlbnRyaWVzLCAnLW5hbWUnKTtcbiAgfVxuXG4gIC8vICgyKSBhZGQgbG9jYWwgdmFyaWFibGUgYXNzaWdubWVudCBlbnRyeVxuICBlbnRyaWVzLnVuc2hpZnQoe1xuICAgIGlkOiBgJHtpZH0tbG9jYWwtdmFyaWFibGUtYXNzaWdubWVudGAsXG4gICAgY29tcG9uZW50OiBMb2NhbFZhcmlhYmxlQXNzaWdubWVudCxcbiAgICBpbnB1dFBhcmFtZXRlcixcbiAgICBwcm9wZXJ0eVxuICB9KTtcblxuICAvLyAoMykgYWRkIGRlc2NyaXB0aW9uIGVudHJ5XG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIGVudHJpZXMudW5zaGlmdCh7XG4gICAgICBpZDogYCR7aWR9LWRlc2NyaXB0aW9uYCxcbiAgICAgIGNvbXBvbmVudDogRGVzY3JpcHRpb24kMSxcbiAgICAgIHRleHQ6IGRlc2NyaXB0aW9uXG4gICAgfSk7XG4gIH1cblxuICAvLyBAYmFybWFjOiBiaW5kaW5nI25hbWUgaXMgcmVxdWlyZWQgc28gdGhlcmUgaXMgbm8gdGhpcmQgb3B0aW9uXG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaWQsXG4gICAgbGFiZWw6IGxhYmVsIHx8IG5hbWUsXG4gICAgZW50cmllc1xuICB9O1xuICByZXR1cm4gaXRlbTtcbn1cblxuLy8gVE9ETyhwaGlsaXBwZnJvbW1lKTogYWRkIHRleHQgZW50cnkgdG8gcHJvcGVydGllcy1wYW5lbFxuZnVuY3Rpb24gRGVzY3JpcHRpb24kMShwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdGV4dFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5XCIsXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVzY3JpcHRpb25cIixcbiAgICAgIGNoaWxkcmVuOiBqc3goUHJvcGVydHlEZXNjcmlwdGlvbiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogdGV4dFxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cbmZ1bmN0aW9uIExvY2FsVmFyaWFibGVBc3NpZ25tZW50KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50LFxuICAgIGlkLFxuICAgIHByb3BlcnR5LFxuICAgIGlucHV0UGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gaW5wdXRQYXJhbWV0ZXI7XG4gIH07XG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYWRkSW5wdXRQYXJhbWV0ZXIoZWxlbWVudCwgcHJvcGVydHksIGJwbW5GYWN0b3J5LCBtb2RlbGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZUlucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUb2dnbGVTd2l0Y2hFbnRyeSh7XG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnTG9jYWwgdmFyaWFibGUgYXNzaWdubWVudCcpLFxuICAgIHN3aXRjaGVyTGFiZWw6IGlucHV0UGFyYW1ldGVyID8gdHJhbnNsYXRlKCdPbicpIDogdHJhbnNsYXRlKCdPZmYnKSxcbiAgICBkZXNjcmlwdGlvbjogaW5wdXRQYXJhbWV0ZXIgPyAnJyA6IHRyYW5zbGF0ZSgnUGFyYW1ldGVyIHdvblxcJ3QgYmUgY3JlYXRlZCBhcyBsb2NhbCB2YXJpYWJsZS4nKSxcbiAgICBnZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIGFkZElucHV0UGFyYW1ldGVyKGVsZW1lbnQsIHByb3BlcnR5LCBicG1uRmFjdG9yeSwgbW9kZWxpbmcpIHtcbiAgY29uc3Qge1xuICAgIGJpbmRpbmcsXG4gICAgdmFsdWVcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGJ1c2luZXNzT2JqZWN0LmdldCgnZXh0ZW5zaW9uRWxlbWVudHMnKTtcbiAgY29uc3QgaW5wdXRPdXRwdXQgPSBmaW5kRXh0ZW5zaW9uKGJ1c2luZXNzT2JqZWN0LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpO1xuICBsZXQgdXBkYXRlZEJ1c2luZXNzT2JqZWN0LCB1cGRhdGU7XG4gIGlmICghZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgICB1cGRhdGVkQnVzaW5lc3NPYmplY3QgPSBidXNpbmVzc09iamVjdDtcbiAgICBjb25zdCBleHRlbnNpb25FbGVtZW50cyA9IGNyZWF0ZUV4dGVuc2lvbkVsZW1lbnRzJDEoYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KSxcbiAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnksIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICBleHRlbnNpb25FbGVtZW50cy52YWx1ZXMucHVzaChpbnB1dE91dHB1dCk7XG4gICAgdXBkYXRlID0ge1xuICAgICAgZXh0ZW5zaW9uRWxlbWVudHNcbiAgICB9O1xuICB9IGVsc2UgaWYgKCFpbnB1dE91dHB1dCkge1xuICAgIHVwZGF0ZWRCdXNpbmVzc09iamVjdCA9IGV4dGVuc2lvbkVsZW1lbnRzO1xuICAgIGNvbnN0IGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQkMShiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnksIGV4dGVuc2lvbkVsZW1lbnRzKTtcbiAgICB1cGRhdGUgPSB7XG4gICAgICB2YWx1ZXM6IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJykuY29uY2F0KGlucHV0T3V0cHV0KVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlZEJ1c2luZXNzT2JqZWN0ID0gaW5wdXRPdXRwdXQ7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXIgPSBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICAgIGlucHV0UGFyYW1ldGVyLiRwYXJlbnQgPSBpbnB1dE91dHB1dDtcbiAgICB1cGRhdGUgPSB7XG4gICAgICBpbnB1dFBhcmFtZXRlcnM6IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTppbnB1dFBhcmFtZXRlcnMnKS5jb25jYXQoaW5wdXRQYXJhbWV0ZXIpXG4gICAgfTtcbiAgfVxuICBtb2RlbGluZy51cGRhdGVNb2RkbGVQcm9wZXJ0aWVzKGVsZW1lbnQsIHVwZGF0ZWRCdXNpbmVzc09iamVjdCwgdXBkYXRlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUlucHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKSxcbiAgICBpbnB1dFBhcmFtZXRlcnMgPSBpbnB1dE91dHB1dC5nZXQoJ2NhbXVuZGE6aW5wdXRQYXJhbWV0ZXJzJyk7XG4gIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gZmluZElucHV0UGFyYW1ldGVyKGlucHV0T3V0cHV0LCBiaW5kaW5nKTtcbiAgbW9kZWxpbmcudXBkYXRlTW9kZGxlUHJvcGVydGllcyhlbGVtZW50LCBpbnB1dE91dHB1dCwge1xuICAgIGlucHV0UGFyYW1ldGVyczogd2l0aG91dChpbnB1dFBhcmFtZXRlcnMsIGlucHV0UGFyYW1ldGVyKVxuICB9KTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUVudHJ5KGVudHJpZXMsIHN1ZmZpeCkge1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoe1xuICAgIGlkXG4gIH0pID0+IGlkLmVuZHNXaXRoKHN1ZmZpeCkpO1xuICByZXR1cm4gd2l0aG91dChlbnRyaWVzLCBlbnRyeSk7XG59XG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyQxKGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSkge1xuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsIHtcbiAgICB2YWx1ZXM6IFtdXG4gIH0sIGJ1c2luZXNzT2JqZWN0LCBicG1uRmFjdG9yeSk7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnB1dE91dHB1dCQxKGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSwgZXh0ZW5zaW9uRWxlbWVudHMpIHtcbiAgY29uc3QgaW5wdXRQYXJhbWV0ZXIgPSBjcmVhdGVJbnB1dFBhcmFtZXRlcihiaW5kaW5nLCB2YWx1ZSwgYnBtbkZhY3RvcnkpO1xuICBjb25zdCBpbnB1dE91dHB1dCA9IGNyZWF0ZUVsZW1lbnQoJ2NhbXVuZGE6SW5wdXRPdXRwdXQnLCB7XG4gICAgaW5wdXRQYXJhbWV0ZXJzOiBbaW5wdXRQYXJhbWV0ZXJdLFxuICAgIG91dHB1dFBhcmFtZXRlcnM6IFtdXG4gIH0sIGV4dGVuc2lvbkVsZW1lbnRzLCBicG1uRmFjdG9yeSk7XG4gIGlucHV0UGFyYW1ldGVyLiRwYXJlbnQgPSBpbnB1dE91dHB1dDtcbiAgcmV0dXJuIGlucHV0T3V0cHV0O1xufVxuXG5jb25zdCBTUEFDRV9SRUdFWCA9IC9cXHMvO1xuZnVuY3Rpb24gY29udGFpbnNTcGFjZSh2YWx1ZSkge1xuICByZXR1cm4gU1BBQ0VfUkVHRVgudGVzdCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIE91dHB1dFByb3BlcnRpZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaW5kZXgsXG4gICAgaW5qZWN0b3IsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYmluZGluZyxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBsYWJlbFxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICBuYW1lXG4gIH0gPSBiaW5kaW5nO1xuICBjb25zdCBidXNpbmVzc09iamVjdCA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpLFxuICAgIGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKTtcbiAgY29uc3QgdHJhbnNsYXRlID0gaW5qZWN0b3IuZ2V0KCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVyID0gaW5wdXRPdXRwdXQgJiYgZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG4gIGNvbnN0IGlkID0gYCR7ZWxlbWVudC5pZH0tb3V0cHV0UGFyYW1ldGVyLSR7aW5kZXh9YDtcbiAgbGV0IGVudHJpZXMgPSBbXTtcblxuICAvLyAoMSkgYWRkIGRlc2NyaXB0aW9uIGVudHJ5XG4gIGlmIChkZXNjcmlwdGlvbikge1xuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogYCR7aWR9LWRlc2NyaXB0aW9uYCxcbiAgICAgIGNvbXBvbmVudDogRGVzY3JpcHRpb24sXG4gICAgICB0ZXh0OiBkZXNjcmlwdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLy8gKDIpIGFkZCBsb2NhbCB2YXJpYWJsZSBhc3NpZ25tZW50IGVudHJ5XG4gIGVudHJpZXMucHVzaCh7XG4gICAgaWQ6IGAke2lkfS1sb2NhbC12YXJpYWJsZS1hc3NpZ25tZW50YCxcbiAgICBjb21wb25lbnQ6IFByb2Nlc3NWYXJpYWJsZUFzc2lnbm1lbnQsXG4gICAgb3V0cHV0UGFyYW1ldGVyLFxuICAgIHByb3BlcnR5XG4gIH0pO1xuICBpZiAob3V0cHV0UGFyYW1ldGVyKSB7XG4gICAgLy8gKDMpIGFkZCBhc3NpZ24gdG8gcHJvY2VzcyB2YXJpYWJsZSBlbnRyeVxuICAgIGVudHJpZXMucHVzaCh7XG4gICAgICBpZDogYCR7aWR9LWFzc2lnbi10by1wcm9jZXNzLXZhcmlhYmxlYCxcbiAgICAgIGNvbXBvbmVudDogQXNzaWduVG9Qcm9jZXNzVmFyaWFibGUsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgaWQsXG4gICAgbGFiZWw6IGxhYmVsIHx8IG5hbWUgfHwgdHJhbnNsYXRlKCc8dW5uYW1lZD4nKSxcbiAgICBlbnRyaWVzXG4gIH07XG4gIHJldHVybiBpdGVtO1xufVxuXG4vLyBUT0RPKHBoaWxpcHBmcm9tbWUpOiBhZGQgdGV4dCBlbnRyeSB0byBwcm9wZXJ0aWVzLXBhbmVsXG5mdW5jdGlvbiBEZXNjcmlwdGlvbihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdGV4dFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBqc3goXCJkaXZcIiwge1xuICAgIGNsYXNzOiBcImJpby1wcm9wZXJ0aWVzLXBhbmVsLWVudHJ5XCIsXG4gICAgXCJkYXRhLWVudHJ5LWlkXCI6IGlkLFxuICAgIGNoaWxkcmVuOiBqc3goXCJkaXZcIiwge1xuICAgICAgY2xhc3M6IFwiYmlvLXByb3BlcnRpZXMtcGFuZWwtZGVzY3JpcHRpb25cIixcbiAgICAgIGNoaWxkcmVuOiBqc3goUHJvcGVydHlEZXNjcmlwdGlvbiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogdGV4dFxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn1cbmZ1bmN0aW9uIFByb2Nlc3NWYXJpYWJsZUFzc2lnbm1lbnQocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHksXG4gICAgb3V0cHV0UGFyYW1ldGVyXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIGJpbmRpbmdcbiAgfSA9IHByb3BlcnR5O1xuICBjb25zdCBicG1uRmFjdG9yeSA9IHVzZVNlcnZpY2UoJ2JwbW5GYWN0b3J5JyksXG4gICAgbW9kZWxpbmcgPSB1c2VTZXJ2aWNlKCdtb2RlbGluZycpLFxuICAgIHRyYW5zbGF0ZSA9IHVzZVNlcnZpY2UoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBnZXRWYWx1ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gb3V0cHV0UGFyYW1ldGVyO1xuICB9O1xuICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGFkZE91dHB1dFBhcmFtZXRlcihlbGVtZW50LCBwcm9wZXJ0eSwgYnBtbkZhY3RvcnksIG1vZGVsaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlT3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUb2dnbGVTd2l0Y2hFbnRyeSh7XG4gICAgaWQsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZSgnUHJvY2VzcyB2YXJpYWJsZSBhc3NpZ25tZW50JyksXG4gICAgc3dpdGNoZXJMYWJlbDogb3V0cHV0UGFyYW1ldGVyID8gdHJhbnNsYXRlKCdPbicpIDogdHJhbnNsYXRlKCdPZmYnKSxcbiAgICBkZXNjcmlwdGlvbjogb3V0cHV0UGFyYW1ldGVyID8gJycgOiB0cmFuc2xhdGUoJ1BhcmFtZXRlciB3b25cXCd0IGJlIGF2YWlsYWJsZSBpbiBwcm9jZXNzIHNjb3BlLicpLFxuICAgIGdldFZhbHVlLFxuICAgIHNldFZhbHVlXG4gIH0pO1xufVxuZnVuY3Rpb24gQXNzaWduVG9Qcm9jZXNzVmFyaWFibGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGVsZW1lbnQsXG4gICAgaWQsXG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYmluZGluZ1xuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihlbGVtZW50LCAnY2FtdW5kYTpJbnB1dE91dHB1dCcpLFxuICAgIG91dHB1dFBhcmFtZXRlciA9IGZpbmRPdXRwdXRQYXJhbWV0ZXIoaW5wdXRPdXRwdXQsIGJpbmRpbmcpO1xuICBjb25zdCBjb21tYW5kU3RhY2sgPSB1c2VTZXJ2aWNlKCdjb21tYW5kU3RhY2snKSxcbiAgICBkZWJvdW5jZSA9IHVzZVNlcnZpY2UoJ2RlYm91bmNlSW5wdXQnKSxcbiAgICB0cmFuc2xhdGUgPSB1c2VTZXJ2aWNlKCd0cmFuc2xhdGUnKTtcbiAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgY29tbWFuZFN0YWNrLmV4ZWN1dGUoJ2VsZW1lbnQudXBkYXRlTW9kZGxlUHJvcGVydGllcycsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBtb2RkbGVFbGVtZW50OiBvdXRwdXRQYXJhbWV0ZXIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIG5hbWU6IHZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldFZhbHVlID0gKCkgPT4ge1xuICAgIHJldHVybiBvdXRwdXRQYXJhbWV0ZXIuZ2V0KCdjYW11bmRhOm5hbWUnKTtcbiAgfTtcbiAgY29uc3QgdmFsaWRhdGUgPSB2YWx1ZSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnUHJvY2VzcyB2YXJpYWJsZSBuYW1lIG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH0gZWxzZSBpZiAoY29udGFpbnNTcGFjZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoJ1Byb2Nlc3MgdmFyaWFibGUgbmFtZSBtdXN0IG5vdCBjb250YWluIHNwYWNlcy4nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUZXh0RmllbGRFbnRyeSh7XG4gICAgZGVib3VuY2UsXG4gICAgZWxlbWVudDogb3V0cHV0UGFyYW1ldGVyLFxuICAgIGlkLFxuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ0Fzc2lnbiB0byBwcm9jZXNzIHZhcmlhYmxlJyksXG4gICAgZ2V0VmFsdWUsXG4gICAgc2V0VmFsdWUsXG4gICAgdmFsaWRhdGVcbiAgfSk7XG59XG5mdW5jdGlvbiBhZGRPdXRwdXRQYXJhbWV0ZXIoZWxlbWVudCwgcHJvcGVydHksIGJwbW5GYWN0b3J5LCBtb2RlbGluZykge1xuICBjb25zdCB7XG4gICAgYmluZGluZyxcbiAgICB2YWx1ZVxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gYnVzaW5lc3NPYmplY3QuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuICBjb25zdCBpbnB1dE91dHB1dCA9IGZpbmRFeHRlbnNpb24oYnVzaW5lc3NPYmplY3QsICdjYW11bmRhOklucHV0T3V0cHV0Jyk7XG4gIGxldCB1cGRhdGVkQnVzaW5lc3NPYmplY3QsIHVwZGF0ZTtcbiAgaWYgKCFleHRlbnNpb25FbGVtZW50cykge1xuICAgIHVwZGF0ZWRCdXNpbmVzc09iamVjdCA9IGJ1c2luZXNzT2JqZWN0O1xuICAgIGNvbnN0IGV4dGVuc2lvbkVsZW1lbnRzID0gY3JlYXRlRXh0ZW5zaW9uRWxlbWVudHMoYnVzaW5lc3NPYmplY3QsIGJwbW5GYWN0b3J5KSxcbiAgICAgIGlucHV0T3V0cHV0ID0gY3JlYXRlSW5wdXRPdXRwdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5LCBleHRlbnNpb25FbGVtZW50cyk7XG4gICAgZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzLnB1c2goaW5wdXRPdXRwdXQpO1xuICAgIHVwZGF0ZSA9IHtcbiAgICAgIGV4dGVuc2lvbkVsZW1lbnRzXG4gICAgfTtcbiAgfSBlbHNlIGlmICghaW5wdXRPdXRwdXQpIHtcbiAgICB1cGRhdGVkQnVzaW5lc3NPYmplY3QgPSBleHRlbnNpb25FbGVtZW50cztcbiAgICBjb25zdCBpbnB1dE91dHB1dCA9IGNyZWF0ZUlucHV0T3V0cHV0KGJpbmRpbmcsIHZhbHVlLCBicG1uRmFjdG9yeSwgZXh0ZW5zaW9uRWxlbWVudHMpO1xuICAgIHVwZGF0ZSA9IHtcbiAgICAgIHZhbHVlczogZXh0ZW5zaW9uRWxlbWVudHMuZ2V0KCd2YWx1ZXMnKS5jb25jYXQoaW5wdXRPdXRwdXQpXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGVkQnVzaW5lc3NPYmplY3QgPSBpbnB1dE91dHB1dDtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBjcmVhdGVPdXRwdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgICBvdXRwdXRQYXJhbWV0ZXIuJHBhcmVudCA9IGlucHV0T3V0cHV0O1xuICAgIHVwZGF0ZSA9IHtcbiAgICAgIG91dHB1dFBhcmFtZXRlcnM6IGlucHV0T3V0cHV0LmdldCgnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXJzJykuY29uY2F0KG91dHB1dFBhcmFtZXRlcilcbiAgICB9O1xuICB9XG4gIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgdXBkYXRlZEJ1c2luZXNzT2JqZWN0LCB1cGRhdGUpO1xufVxuZnVuY3Rpb24gcmVtb3ZlT3V0cHV0UGFyYW1ldGVyKGVsZW1lbnQsIGJpbmRpbmcsIG1vZGVsaW5nKSB7XG4gIGNvbnN0IGJ1c2luZXNzT2JqZWN0ID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG4gIGNvbnN0IGlucHV0T3V0cHV0ID0gZmluZEV4dGVuc2lvbihidXNpbmVzc09iamVjdCwgJ2NhbXVuZGE6SW5wdXRPdXRwdXQnKSxcbiAgICBvdXRwdXRQYXJhbWV0ZXJzID0gaW5wdXRPdXRwdXQuZ2V0KCdjYW11bmRhOm91dHB1dFBhcmFtZXRlcnMnKTtcbiAgY29uc3Qgb3V0cHV0UGFyYW1ldGVyID0gZmluZE91dHB1dFBhcmFtZXRlcihpbnB1dE91dHB1dCwgYmluZGluZyk7XG4gIG1vZGVsaW5nLnVwZGF0ZU1vZGRsZVByb3BlcnRpZXMoZWxlbWVudCwgaW5wdXRPdXRwdXQsIHtcbiAgICBvdXRwdXRQYXJhbWV0ZXJzOiB3aXRob3V0KG91dHB1dFBhcmFtZXRlcnMsIG91dHB1dFBhcmFtZXRlcilcbiAgfSk7XG59XG5mdW5jdGlvbiBjcmVhdGVFeHRlbnNpb25FbGVtZW50cyhidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2JwbW46RXh0ZW5zaW9uRWxlbWVudHMnLCB7XG4gICAgdmFsdWVzOiBbXVxuICB9LCBidXNpbmVzc09iamVjdCwgYnBtbkZhY3RvcnkpO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5wdXRPdXRwdXQoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5LCBleHRlbnNpb25FbGVtZW50cykge1xuICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBjcmVhdGVPdXRwdXRQYXJhbWV0ZXIoYmluZGluZywgdmFsdWUsIGJwbW5GYWN0b3J5KTtcbiAgY29uc3QgaW5wdXRPdXRwdXQgPSBjcmVhdGVFbGVtZW50KCdjYW11bmRhOklucHV0T3V0cHV0Jywge1xuICAgIGlucHV0UGFyYW1ldGVyczogW10sXG4gICAgb3V0cHV0UGFyYW1ldGVyczogW291dHB1dFBhcmFtZXRlcl1cbiAgfSwgZXh0ZW5zaW9uRWxlbWVudHMsIGJwbW5GYWN0b3J5KTtcbiAgb3V0cHV0UGFyYW1ldGVyLiRwYXJlbnQgPSBpbnB1dE91dHB1dDtcbiAgcmV0dXJuIGlucHV0T3V0cHV0O1xufVxuXG5jb25zdCBDQU1VTkRBX0VSUk9SX0VWRU5UX0RFRklOSVRJT05fVFlQRSA9ICdjYW11bmRhOmVycm9yRXZlbnREZWZpbml0aW9uJyxcbiAgQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRSA9ICdjYW11bmRhOmlucHV0UGFyYW1ldGVyJyxcbiAgQ0FNVU5EQV9PVVRQVVRfUEFSQU1FVEVSX1RZUEUgPSAnY2FtdW5kYTpvdXRwdXRQYXJhbWV0ZXInO1xuY29uc3QgTE9XRVJfUFJJT1JJVFkgPSAzMDA7XG5jb25zdCBBTFdBWVNfRElTUExBWUVEX0dST1VQUyA9IFsnZ2VuZXJhbCcsICdkb2N1bWVudGF0aW9uJywgJ211bHRpSW5zdGFuY2UnXTtcbmNsYXNzIEVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50VGVtcGxhdGVzLCBwcm9wZXJ0aWVzUGFuZWwsIGluamVjdG9yKSB7XG4gICAgcHJvcGVydGllc1BhbmVsLnJlZ2lzdGVyUHJvdmlkZXIoTE9XRVJfUFJJT1JJVFksIHRoaXMpO1xuICAgIHRoaXMuX2VsZW1lbnRUZW1wbGF0ZXMgPSBlbGVtZW50VGVtcGxhdGVzO1xuICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gIH1cbiAgZ2V0R3JvdXBzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ3JvdXBzID0+IHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5faW5qZWN0b3I7XG4gICAgICBpZiAoIXRoaXMuX3Nob3VsZFNob3dUZW1wbGF0ZVByb3BlcnRpZXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG5cbiAgICAgIC8vICgwKSBDb3B5IHByb3ZpZGVkIGdyb3Vwc1xuICAgICAgZ3JvdXBzID0gZ3JvdXBzLnNsaWNlKCk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXNHcm91cCA9IHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaWQ6ICdFbGVtZW50VGVtcGxhdGVzX19UZW1wbGF0ZScsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGUoJ1RlbXBsYXRlJyksXG4gICAgICAgIGNvbXBvbmVudDogY3JlYXRlRWxlbWVudFRlbXBsYXRlc0dyb3VwKCksXG4gICAgICAgIGVudHJpZXM6IFRlbXBsYXRlUHJvcHMoe1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZWxlbWVudFRlbXBsYXRlczogdGhpcy5fZWxlbWVudFRlbXBsYXRlc1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgLy8gKDEpIEFkZCB0ZW1wbGF0ZXMgZ3JvdXBcbiAgICAgIGFkZEdyb3Vwc0FmdGVyKEFMV0FZU19ESVNQTEFZRURfR1JPVVBTLCBncm91cHMsIFt0ZW1wbGF0ZXNHcm91cF0pO1xuICAgICAgY29uc3QgZWxlbWVudFRlbXBsYXRlID0gdGhpcy5fZWxlbWVudFRlbXBsYXRlcy5nZXQoZWxlbWVudCk7XG4gICAgICBpZiAoZWxlbWVudFRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU3BlY2lmaWNHcm91cHMgPSBbXS5jb25jYXQoY3JlYXRlSW5wdXRHcm91cChlbGVtZW50LCBlbGVtZW50VGVtcGxhdGUsIGluamVjdG9yLCBncm91cHMpIHx8IFtdLCBjcmVhdGVPdXRwdXRHcm91cChlbGVtZW50LCBlbGVtZW50VGVtcGxhdGUsIGluamVjdG9yKSB8fCBbXSwgY3JlYXRlRXJyb3JHcm91cChlbGVtZW50LCBlbGVtZW50VGVtcGxhdGUsIGluamVjdG9yLCBncm91cHMpIHx8IFtdLCBDdXN0b21Qcm9wZXJ0aWVzKHtcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnRUZW1wbGF0ZSxcbiAgICAgICAgICBpbmplY3RvclxuICAgICAgICB9KSk7XG5cbiAgICAgICAgLy8gKDIpIGFkZCB0ZW1wbGF0ZS1zcGVjaWZpYyBwcm9wZXJ0aWVzIGdyb3Vwc1xuICAgICAgICBhZGRHcm91cHNBZnRlcignRWxlbWVudFRlbXBsYXRlc19fVGVtcGxhdGUnLCBncm91cHMsIHRlbXBsYXRlU3BlY2lmaWNHcm91cHMpO1xuICAgICAgfVxuXG4gICAgICAvLyAoMykgYXBwbHkgZW50cmllcyB2aXNpYmxlXG4gICAgICBpZiAoZ2V0VGVtcGxhdGVJZChlbGVtZW50KSkge1xuICAgICAgICBncm91cHMgPSBmaWx0ZXJXaXRoRW50cmllc1Zpc2libGUoZWxlbWVudFRlbXBsYXRlIHx8IHt9LCBncm91cHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9O1xuICB9XG4gIF9zaG91bGRTaG93VGVtcGxhdGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VGVtcGxhdGVJZChlbGVtZW50KSB8fCB0aGlzLl9lbGVtZW50VGVtcGxhdGVzLmdldEFsbChlbGVtZW50KS5sZW5ndGg7XG4gIH1cbn1cbkVsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXIuJGluamVjdCA9IFsnZWxlbWVudFRlbXBsYXRlcycsICdwcm9wZXJ0aWVzUGFuZWwnLCAnaW5qZWN0b3InXTtcblxuLy8gaGVscGVyIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEdyb3VwKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSwgaW5qZWN0b3IsIGdyb3Vwcykge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdJbnB1dHMnKSxcbiAgICBpZDogJ0VsZW1lbnRUZW1wbGF0ZXNfX0lucHV0JyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICBpdGVtczogW11cbiAgfTtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnRUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcigoe1xuICAgIGJpbmRpbmcsXG4gICAgdHlwZVxuICB9KSA9PiB7XG4gICAgcmV0dXJuICF0eXBlICYmIGJpbmRpbmcudHlwZSA9PT0gQ0FNVU5EQV9JTlBVVF9QQVJBTUVURVJfVFlQRTtcbiAgfSk7XG4gIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHksIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaXRlbSA9IElucHV0UHJvcGVydGllcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5kZXgsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGdyb3Vwc1xuICAgIH0pO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBncm91cC5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcmVtb3ZlIGlmIGVtcHR5XG4gIGlmICghZ3JvdXAuaXRlbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuZnVuY3Rpb24gY3JlYXRlT3V0cHV0R3JvdXAoZWxlbWVudCwgZWxlbWVudFRlbXBsYXRlLCBpbmplY3RvciwgZ3JvdXBzKSB7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGluamVjdG9yLmdldCgndHJhbnNsYXRlJyk7XG4gIGNvbnN0IGdyb3VwID0ge1xuICAgIGxhYmVsOiB0cmFuc2xhdGUoJ091dHB1dHMnKSxcbiAgICBpZDogJ0VsZW1lbnRUZW1wbGF0ZXNfX091dHB1dCcsXG4gICAgY29tcG9uZW50OiBMaXN0R3JvdXAsXG4gICAgaXRlbXM6IFtdXG4gIH07XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBlbGVtZW50VGVtcGxhdGUucHJvcGVydGllcy5maWx0ZXIoKHtcbiAgICBiaW5kaW5nLFxuICAgIHR5cGVcbiAgfSkgPT4ge1xuICAgIHJldHVybiAhdHlwZSAmJiBiaW5kaW5nLnR5cGUgPT09IENBTVVOREFfT1VUUFVUX1BBUkFNRVRFUl9UWVBFO1xuICB9KTtcbiAgcHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpdGVtID0gT3V0cHV0UHJvcGVydGllcyh7XG4gICAgICBlbGVtZW50LFxuICAgICAgaW5kZXgsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIGluamVjdG9yXG4gICAgfSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGdyb3VwLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgfVxuICB9KTtcblxuICAvLyByZW1vdmUgaWYgZW1wdHlcbiAgaWYgKCFncm91cC5pdGVtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5mdW5jdGlvbiBjcmVhdGVFcnJvckdyb3VwKGVsZW1lbnQsIGVsZW1lbnRUZW1wbGF0ZSwgaW5qZWN0b3IsIGdyb3Vwcykge1xuICBjb25zdCB0cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoJ3RyYW5zbGF0ZScpO1xuICBjb25zdCBncm91cCA9IHtcbiAgICBsYWJlbDogdHJhbnNsYXRlKCdFcnJvcnMnKSxcbiAgICBpZDogJ0VsZW1lbnRUZW1wbGF0ZXNfX0Vycm9yJyxcbiAgICBjb21wb25lbnQ6IExpc3RHcm91cCxcbiAgICBpdGVtczogW11cbiAgfTtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnRUZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcigoe1xuICAgIGJpbmRpbmcsXG4gICAgdHlwZVxuICB9KSA9PiB7XG4gICAgcmV0dXJuICF0eXBlICYmIGJpbmRpbmcudHlwZSA9PT0gQ0FNVU5EQV9FUlJPUl9FVkVOVF9ERUZJTklUSU9OX1RZUEU7XG4gIH0pO1xuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBFcnJvclByb3BlcnRpZXMoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIGluZGV4LFxuICAgICAgcHJvcGVydHksXG4gICAgICBncm91cHNcbiAgICB9KTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgZ3JvdXAuaXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHJlbW92ZSBpZiBlbXB0eVxuICBpZiAoIWdyb3VwLml0ZW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGlkT3JJZHNcbiAqIEBwYXJhbSB7QXJyYXk8eyBpZDogc3RyaW5nIH19IGdyb3Vwc1xuICogQHBhcmFtIHtBcnJheTx7IGlkOiBzdHJpbmcgfT59IGdyb3Vwc1RvQWRkXG4gKi9cbmZ1bmN0aW9uIGFkZEdyb3Vwc0FmdGVyKGlkT3JJZHMsIGdyb3VwcywgZ3JvdXBzVG9BZGQpIHtcbiAgbGV0IGlkcyA9IGlkT3JJZHM7XG4gIGlmICghQXJyYXkuaXNBcnJheShpZE9ySWRzKSkge1xuICAgIGlkcyA9IFtpZE9ySWRzXTtcbiAgfVxuXG4gIC8vIGZpbmQgaW5kZXggb2YgbGFzdCBncm91cCB3aXRoIHByb3ZpZGVkIGlkXG4gIGNvbnN0IGluZGV4ID0gZ3JvdXBzLnJlZHVjZSgoYWNjLCBncm91cCwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gaWRzLmluY2x1ZGVzKGdyb3VwLmlkKSA/IGluZGV4IDogYWNjO1xuICB9LCAtMSk7XG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBncm91cHMuc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4uZ3JvdXBzVG9BZGQpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFkZCBpbiB0aGUgYmVnaW5uaW5nIGlmIGdyb3VwIHdpdGggcHJvdmlkZWQgaWQgaXMgbWlzc2luZ1xuICAgIGdyb3Vwcy51bnNoaWZ0KC4uLmdyb3Vwc1RvQWRkKTtcbiAgfVxufVxuZnVuY3Rpb24gZmlsdGVyV2l0aEVudHJpZXNWaXNpYmxlKHRlbXBsYXRlLCBncm91cHMpIHtcbiAgaWYgKCF0ZW1wbGF0ZS5lbnRyaWVzVmlzaWJsZSkge1xuICAgIHJldHVybiBncm91cHMuZmlsdGVyKGdyb3VwID0+IHtcbiAgICAgIHJldHVybiBBTFdBWVNfRElTUExBWUVEX0dST1VQUy5pbmNsdWRlcyhncm91cC5pZCkgfHwgZ3JvdXAuaWQuc3RhcnRzV2l0aCgnRWxlbWVudFRlbXBsYXRlc19fJyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cblxudmFyIHByb3BlcnRpZXNQcm92aWRlck1vZHVsZSA9IHtcbiAgX19kZXBlbmRzX186IFt0cmFuc2xhdGVNb2R1bGUsIENhbXVuZGFQbGF0Zm9ybVByb3BlcnRpZXNQcm92aWRlck1vZHVsZV0sXG4gIF9faW5pdF9fOiBbJ2VsZW1lbnRUZW1wbGF0ZXNQcm9wZXJ0aWVzUHJvdmlkZXInXSxcbiAgZWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlcjogWyd0eXBlJywgRWxlbWVudFRlbXBsYXRlc1Byb3BlcnRpZXNQcm92aWRlcl1cbn07XG5cbnZhciBpbmRleCA9IHtcbiAgX19kZXBlbmRzX186IFtjb3JlTW9kdWxlLCBwcm9wZXJ0aWVzUHJvdmlkZXJNb2R1bGVdXG59O1xuXG4vKipcbiAqIE1vZGRsZSBiYXNlIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIEJhc2UoKSB7fVxuQmFzZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuJG1vZGVsLnByb3BlcnRpZXMuZ2V0KHRoaXMsIG5hbWUpO1xufTtcbkJhc2UucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLiRtb2RlbC5wcm9wZXJ0aWVzLnNldCh0aGlzLCBuYW1lLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEEgbW9kZWwgZWxlbWVudCBmYWN0b3J5LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RlbFxuICogQHBhcmFtIHtQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIEZhY3RvcnkobW9kZWwsIHByb3BlcnRpZXMpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xufVxuRmFjdG9yeS5wcm90b3R5cGUuY3JlYXRlVHlwZSA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2UucHJvdG90eXBlKTtcblxuICAvLyBpbml0aWFsaXplIGRlZmF1bHQgdmFsdWVzXG4gIGZvckVhY2goZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbiAocCkge1xuICAgIGlmICghcC5pc01hbnkgJiYgcC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3RvdHlwZVtwLm5hbWVdID0gcC5kZWZhdWx0O1xuICAgIH1cbiAgfSk7XG4gIHByb3BzLmRlZmluZU1vZGVsKHByb3RvdHlwZSwgbW9kZWwpO1xuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKHByb3RvdHlwZSwgZGVzY3JpcHRvcik7XG4gIHZhciBuYW1lID0gZGVzY3JpcHRvci5ucy5uYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHR5cGUgY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIE1vZGRsZUVsZW1lbnQoYXR0cnMpIHtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyR0eXBlJywge1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcHJvcHMuZGVmaW5lKHRoaXMsICckYXR0cnMnLCB7XG4gICAgICB2YWx1ZToge31cbiAgICB9KTtcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRwYXJlbnQnLCB7XG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZvckVhY2goYXR0cnMsIGJpbmQoZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICB0aGlzLnNldChrZXksIHZhbCk7XG4gICAgfSwgdGhpcykpO1xuICB9XG4gIE1vZGRsZUVsZW1lbnQucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBNb2RkbGVFbGVtZW50Lmhhc1R5cGUgPSBwcm90b3R5cGUuJGluc3RhbmNlT2YgPSB0aGlzLm1vZGVsLmhhc1R5cGU7XG5cbiAgLy8gc3RhdGljIGxpbmtzXG4gIHByb3BzLmRlZmluZU1vZGVsKE1vZGRsZUVsZW1lbnQsIG1vZGVsKTtcbiAgcHJvcHMuZGVmaW5lRGVzY3JpcHRvcihNb2RkbGVFbGVtZW50LCBkZXNjcmlwdG9yKTtcbiAgcmV0dXJuIE1vZGRsZUVsZW1lbnQ7XG59O1xuXG4vKipcbiAqIEJ1aWx0LWluIG1vZGRsZSB0eXBlc1xuICovXG52YXIgQlVJTFRJTlMgPSB7XG4gIFN0cmluZzogdHJ1ZSxcbiAgQm9vbGVhbjogdHJ1ZSxcbiAgSW50ZWdlcjogdHJ1ZSxcbiAgUmVhbDogdHJ1ZSxcbiAgRWxlbWVudDogdHJ1ZVxufTtcblxuLyoqXG4gKiBDb252ZXJ0ZXJzIGZvciBidWlsdCBpbiB0eXBlcyBmcm9tIHN0cmluZyByZXByZXNlbnRhdGlvbnNcbiAqL1xudmFyIFRZUEVfQ09OVkVSVEVSUyA9IHtcbiAgU3RyaW5nOiBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzO1xuICB9LFxuICBCb29sZWFuOiBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzID09PSAndHJ1ZSc7XG4gIH0sXG4gIEludGVnZXI6IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHMsIDEwKTtcbiAgfSxcbiAgUmVhbDogZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdHlwZSB0byBpdHMgcmVhbCByZXByZXNlbnRhdGlvblxuICovXG5mdW5jdGlvbiBjb2VyY2VUeXBlKHR5cGUsIHZhbHVlKSB7XG4gIHZhciBjb252ZXJ0ZXIgPSBUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG4gIGlmIChjb252ZXJ0ZXIpIHtcbiAgICByZXR1cm4gY29udmVydGVyKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBidWlsdC1pblxuICovXG5mdW5jdGlvbiBpc0J1aWx0SW4odHlwZSkge1xuICByZXR1cm4gISFCVUlMVElOU1t0eXBlXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBzaW1wbGVcbiAqL1xuZnVuY3Rpb24gaXNTaW1wbGUodHlwZSkge1xuICByZXR1cm4gISFUWVBFX0NPTlZFUlRFUlNbdHlwZV07XG59XG5cbi8qKlxuICogUGFyc2VzIGEgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZm9ybSAobnM6KWxvY2FsTmFtZSB0byBhbiBvYmplY3QsXG4gKiBnaXZlbiBhIGRlZmF1bHQgcHJlZml4IHRvIGFzc3VtZSBpbiBjYXNlIG5vIGV4cGxpY2l0IG5hbWVzcGFjZSBpcyBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IFtkZWZhdWx0UHJlZml4XSB0aGUgZGVmYXVsdCBwcmVmaXggdG8gdGFrZSwgaWYgbm9uZSBpcyBwcmVzZW50LlxuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhcnNlZCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTmFtZShuYW1lLCBkZWZhdWx0UHJlZml4KSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLzovKSxcbiAgICBsb2NhbE5hbWUsXG4gICAgcHJlZml4O1xuXG4gIC8vIG5vIHByZWZpeCAoaS5lLiBvbmx5IGxvY2FsIG5hbWUpXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBsb2NhbE5hbWUgPSBuYW1lO1xuICAgIHByZWZpeCA9IGRlZmF1bHRQcmVmaXg7XG4gIH1cblxuICAvLyBwcmVmaXggKyBsb2NhbCBuYW1lXG4gIGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGxvY2FsTmFtZSA9IHBhcnRzWzFdO1xuICAgIHByZWZpeCA9IHBhcnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgPHByZWZpeDpsb2NhbE5hbWU+IG9yIDxsb2NhbE5hbWU+LCBnb3QgJyArIG5hbWUpO1xuICB9XG4gIG5hbWUgPSAocHJlZml4ID8gcHJlZml4ICsgJzonIDogJycpICsgbG9jYWxOYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgcHJlZml4OiBwcmVmaXgsXG4gICAgbG9jYWxOYW1lOiBsb2NhbE5hbWVcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHV0aWxpdHkgdG8gYnVpbGQgZWxlbWVudCBkZXNjcmlwdG9ycy5cbiAqL1xuZnVuY3Rpb24gRGVzY3JpcHRvckJ1aWxkZXIobmFtZU5zKSB7XG4gIHRoaXMubnMgPSBuYW1lTnM7XG4gIHRoaXMubmFtZSA9IG5hbWVOcy5uYW1lO1xuICB0aGlzLmFsbFR5cGVzID0gW107XG4gIHRoaXMuYWxsVHlwZXNCeU5hbWUgPSB7fTtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gW107XG4gIHRoaXMucHJvcGVydGllc0J5TmFtZSA9IHt9O1xufVxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGljayh0aGlzLCBbJ25zJywgJ25hbWUnLCAnYWxsVHlwZXMnLCAnYWxsVHlwZXNCeU5hbWUnLCAncHJvcGVydGllcycsICdwcm9wZXJ0aWVzQnlOYW1lJywgJ2JvZHlQcm9wZXJ0eScsICdpZFByb3BlcnR5J10pO1xufTtcblxuLyoqXG4gKiBBZGQgcHJvcGVydHkgYXQgZ2l2ZW4gaW5kZXguXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBcbiAqIEBwYXJhbSB7TnVtYmVyfSBbaWR4XVxuICogQHBhcmFtIHtCb29sZWFufSBbdmFsaWRhdGU9dHJ1ZV1cbiAqL1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFByb3BlcnR5ID0gZnVuY3Rpb24gKHAsIGlkeCwgdmFsaWRhdGUpIHtcbiAgaWYgKHR5cGVvZiBpZHggPT09ICdib29sZWFuJykge1xuICAgIHZhbGlkYXRlID0gaWR4O1xuICAgIGlkeCA9IHVuZGVmaW5lZDtcbiAgfVxuICB0aGlzLmFkZE5hbWVkUHJvcGVydHkocCwgdmFsaWRhdGUgIT09IGZhbHNlKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gIGlmIChpZHggIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnRpZXMuc3BsaWNlKGlkeCwgMCwgcCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy5wdXNoKHApO1xuICB9XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlcGxhY2VQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHksIHJlcGxhY2UpIHtcbiAgdmFyIG9sZE5hbWVOcyA9IG9sZFByb3BlcnR5Lm5zO1xuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgcHJvcGVydGllc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZSxcbiAgICByZW5hbWUgPSBvbGRQcm9wZXJ0eS5uYW1lICE9PSBuZXdQcm9wZXJ0eS5uYW1lO1xuICBpZiAob2xkUHJvcGVydHkuaXNJZCkge1xuICAgIGlmICghbmV3UHJvcGVydHkuaXNJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGlkIHByb3BlcnR5ICcgKyAndG8gcmVmaW5lIDwnICsgb2xkUHJvcGVydHkubnMubmFtZSArICc+Jyk7XG4gICAgfVxuICAgIHRoaXMuc2V0SWRQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgZmFsc2UpO1xuICB9XG4gIGlmIChvbGRQcm9wZXJ0eS5pc0JvZHkpIHtcbiAgICBpZiAoIW5ld1Byb3BlcnR5LmlzQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIG5ld1Byb3BlcnR5Lm5zLm5hbWUgKyAnPiBtdXN0IGJlIGJvZHkgcHJvcGVydHkgJyArICd0byByZWZpbmUgPCcgKyBvbGRQcm9wZXJ0eS5ucy5uYW1lICsgJz4nKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5zZXRCb2R5UHJvcGVydHkobmV3UHJvcGVydHksIGZhbHNlKTtcbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGV4aXN0ZW5jZSBhbmQgZ2V0IGxvY2F0aW9uIG9mIG9sZCBwcm9wZXJ0eVxuICB2YXIgaWR4ID0gcHJvcHMuaW5kZXhPZihvbGRQcm9wZXJ0eSk7XG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIG9sZE5hbWVOcy5uYW1lICsgJz4gbm90IGZvdW5kIGluIHByb3BlcnR5IGxpc3QnKTtcbiAgfVxuXG4gIC8vIHJlbW92ZSBvbGQgcHJvcGVydHlcbiAgcHJvcHMuc3BsaWNlKGlkeCwgMSk7XG5cbiAgLy8gcmVwbGFjaW5nIHRoZSBuYW1lZCBwcm9wZXJ0eSBpcyBpbnRlbnRpb25hbFxuICAvL1xuICAvLyAgKiB2YWxpZGF0ZSBvbmx5IGlmIHRoaXMgaXMgYSBcInJlbmFtZVwiIG9wZXJhdGlvblxuICAvLyAgKiBhZGQgYXQgc3BlY2lmaWMgaW5kZXggdW5sZXNzIHdlIFwicmVwbGFjZVwiXG4gIC8vXG4gIHRoaXMuYWRkUHJvcGVydHkobmV3UHJvcGVydHksIHJlcGxhY2UgPyB1bmRlZmluZWQgOiBpZHgsIHJlbmFtZSk7XG5cbiAgLy8gbWFrZSBuZXcgcHJvcGVydHkgYXZhaWxhYmxlIHVuZGVyIG9sZCBuYW1lXG4gIHByb3BlcnRpZXNCeU5hbWVbb2xkTmFtZU5zLm5hbWVdID0gcHJvcGVydGllc0J5TmFtZVtvbGROYW1lTnMubG9jYWxOYW1lXSA9IG5ld1Byb3BlcnR5O1xufTtcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZWRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKHAsIHRhcmdldFByb3BlcnR5TmFtZSwgcmVwbGFjZSkge1xuICB2YXIgbnNQcmVmaXggPSBwLm5zLnByZWZpeDtcbiAgdmFyIHBhcnRzID0gdGFyZ2V0UHJvcGVydHlOYW1lLnNwbGl0KCcjJyk7XG4gIHZhciBuYW1lID0gcGFyc2VOYW1lKHBhcnRzWzBdLCBuc1ByZWZpeCk7XG4gIHZhciBhdHRyTmFtZSA9IHBhcnNlTmFtZShwYXJ0c1sxXSwgbmFtZS5wcmVmaXgpLm5hbWU7XG4gIHZhciByZWRlZmluZWRQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc0J5TmFtZVthdHRyTmFtZV07XG4gIGlmICghcmVkZWZpbmVkUHJvcGVydHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZmluZWQgcHJvcGVydHkgPCcgKyBhdHRyTmFtZSArICc+IG5vdCBmb3VuZCcpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVwbGFjZVByb3BlcnR5KHJlZGVmaW5lZFByb3BlcnR5LCBwLCByZXBsYWNlKTtcbiAgfVxuICBkZWxldGUgcC5yZWRlZmluZXM7XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZE5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbiAocCwgdmFsaWRhdGUpIHtcbiAgdmFyIG5zID0gcC5ucyxcbiAgICBwcm9wc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgdGhpcy5hc3NlcnROb3REZWZpbmVkKHAsIG5zLm5hbWUpO1xuICAgIHRoaXMuYXNzZXJ0Tm90RGVmaW5lZChwLCBucy5sb2NhbE5hbWUpO1xuICB9XG4gIHByb3BzQnlOYW1lW25zLm5hbWVdID0gcHJvcHNCeU5hbWVbbnMubG9jYWxOYW1lXSA9IHA7XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZU5hbWVkUHJvcGVydHkgPSBmdW5jdGlvbiAocCkge1xuICB2YXIgbnMgPSBwLm5zLFxuICAgIHByb3BzQnlOYW1lID0gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lO1xuICBkZWxldGUgcHJvcHNCeU5hbWVbbnMubmFtZV07XG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdO1xufTtcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5zZXRCb2R5UHJvcGVydHkgPSBmdW5jdGlvbiAocCwgdmFsaWRhdGUpIHtcbiAgaWYgKHZhbGlkYXRlICYmIHRoaXMuYm9keVByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdib2R5IHByb3BlcnR5IGRlZmluZWQgbXVsdGlwbGUgdGltZXMgJyArICcoPCcgKyB0aGlzLmJvZHlQcm9wZXJ0eS5ucy5uYW1lICsgJz4sIDwnICsgcC5ucy5uYW1lICsgJz4pJyk7XG4gIH1cbiAgdGhpcy5ib2R5UHJvcGVydHkgPSBwO1xufTtcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5zZXRJZFByb3BlcnR5ID0gZnVuY3Rpb24gKHAsIHZhbGlkYXRlKSB7XG4gIGlmICh2YWxpZGF0ZSAmJiB0aGlzLmlkUHJvcGVydHkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIHByb3BlcnR5IGRlZmluZWQgbXVsdGlwbGUgdGltZXMgJyArICcoPCcgKyB0aGlzLmlkUHJvcGVydHkubnMubmFtZSArICc+LCA8JyArIHAubnMubmFtZSArICc+KScpO1xuICB9XG4gIHRoaXMuaWRQcm9wZXJ0eSA9IHA7XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdFRyYWl0ID0gZnVuY3Rpb24gKHR5cGVEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IF9leHRlbmRzID0gdHlwZURlc2NyaXB0b3IuZXh0ZW5kcyB8fCBbXTtcbiAgaWYgKF9leHRlbmRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGNyZWF0ZSA8JHt0eXBlRGVzY3JpcHRvci5uYW1lfT4gZXh0ZW5kaW5nIDwke3R5cGVEZXNjcmlwdG9yLmV4dGVuZHN9PmApO1xuICB9XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFzc2VydE5vdERlZmluZWQgPSBmdW5jdGlvbiAocCwgbmFtZSkge1xuICB2YXIgcHJvcGVydHlOYW1lID0gcC5uYW1lLFxuICAgIGRlZmluZWRQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdO1xuICBpZiAoZGVmaW5lZFByb3BlcnR5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0eSA8JyArIHByb3BlcnR5TmFtZSArICc+IGFscmVhZHkgZGVmaW5lZDsgJyArICdvdmVycmlkZSBvZiA8JyArIGRlZmluZWRQcm9wZXJ0eS5kZWZpbmVkQnkubnMubmFtZSArICcjJyArIGRlZmluZWRQcm9wZXJ0eS5ucy5uYW1lICsgJz4gYnkgJyArICc8JyArIHAuZGVmaW5lZEJ5Lm5zLm5hbWUgKyAnIycgKyBwLm5zLm5hbWUgKyAnPiBub3QgYWxsb3dlZCB3aXRob3V0IHJlZGVmaW5lcycpO1xuICB9XG59O1xuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmhhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMucHJvcGVydGllc0J5TmFtZVtuYW1lXTtcbn07XG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkVHJhaXQgPSBmdW5jdGlvbiAodCwgaW5oZXJpdGVkKSB7XG4gIGlmIChpbmhlcml0ZWQpIHtcbiAgICB0aGlzLmFzc2VydE5vdFRyYWl0KHQpO1xuICB9XG4gIHZhciB0eXBlc0J5TmFtZSA9IHRoaXMuYWxsVHlwZXNCeU5hbWUsXG4gICAgdHlwZXMgPSB0aGlzLmFsbFR5cGVzO1xuICB2YXIgdHlwZU5hbWUgPSB0Lm5hbWU7XG4gIGlmICh0eXBlTmFtZSBpbiB0eXBlc0J5TmFtZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3JFYWNoKHQucHJvcGVydGllcywgYmluZChmdW5jdGlvbiAocCkge1xuICAgIC8vIGNsb25lIHByb3BlcnR5IHRvIGFsbG93IGV4dGVuc2lvbnNcbiAgICBwID0gYXNzaWduKHt9LCBwLCB7XG4gICAgICBuYW1lOiBwLm5zLmxvY2FsTmFtZSxcbiAgICAgIGluaGVyaXRlZDogaW5oZXJpdGVkXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsICdkZWZpbmVkQnknLCB7XG4gICAgICB2YWx1ZTogdFxuICAgIH0pO1xuICAgIHZhciByZXBsYWNlcyA9IHAucmVwbGFjZXMsXG4gICAgICByZWRlZmluZXMgPSBwLnJlZGVmaW5lcztcblxuICAgIC8vIGFkZCByZXBsYWNlL3JlZGVmaW5lIHN1cHBvcnRcbiAgICBpZiAocmVwbGFjZXMgfHwgcmVkZWZpbmVzKSB7XG4gICAgICB0aGlzLnJlZGVmaW5lUHJvcGVydHkocCwgcmVwbGFjZXMgfHwgcmVkZWZpbmVzLCByZXBsYWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwLmlzQm9keSkge1xuICAgICAgICB0aGlzLnNldEJvZHlQcm9wZXJ0eShwKTtcbiAgICAgIH1cbiAgICAgIGlmIChwLmlzSWQpIHtcbiAgICAgICAgdGhpcy5zZXRJZFByb3BlcnR5KHApO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRQcm9wZXJ0eShwKTtcbiAgICB9XG4gIH0sIHRoaXMpKTtcbiAgdHlwZXMucHVzaCh0KTtcbiAgdHlwZXNCeU5hbWVbdHlwZU5hbWVdID0gdDtcbn07XG5cbi8qKlxuICogQSByZWdpc3RyeSBvZiBNb2RkbGUgcGFja2FnZXMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxQYWNrYWdlPn0gcGFja2FnZXNcbiAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBSZWdpc3RyeShwYWNrYWdlcywgcHJvcGVydGllcykge1xuICB0aGlzLnBhY2thZ2VNYXAgPSB7fTtcbiAgdGhpcy50eXBlTWFwID0ge307XG4gIHRoaXMucGFja2FnZXMgPSBbXTtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgZm9yRWFjaChwYWNrYWdlcywgYmluZCh0aGlzLnJlZ2lzdGVyUGFja2FnZSwgdGhpcykpO1xufVxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2UgPSBmdW5jdGlvbiAodXJpT3JQcmVmaXgpIHtcbiAgcmV0dXJuIHRoaXMucGFja2FnZU1hcFt1cmlPclByZWZpeF07XG59O1xuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wYWNrYWdlcztcbn07XG5SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJQYWNrYWdlID0gZnVuY3Rpb24gKHBrZykge1xuICAvLyBjb3B5IHBhY2thZ2VcbiAgcGtnID0gYXNzaWduKHt9LCBwa2cpO1xuICB2YXIgcGtnTWFwID0gdGhpcy5wYWNrYWdlTWFwO1xuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICdwcmVmaXgnKTtcbiAgZW5zdXJlQXZhaWxhYmxlKHBrZ01hcCwgcGtnLCAndXJpJyk7XG5cbiAgLy8gcmVnaXN0ZXIgdHlwZXNcbiAgZm9yRWFjaChwa2cudHlwZXMsIGJpbmQoZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgICB0aGlzLnJlZ2lzdGVyVHlwZShkZXNjcmlwdG9yLCBwa2cpO1xuICB9LCB0aGlzKSk7XG4gIHBrZ01hcFtwa2cudXJpXSA9IHBrZ01hcFtwa2cucHJlZml4XSA9IHBrZztcbiAgdGhpcy5wYWNrYWdlcy5wdXNoKHBrZyk7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgdHlwZSBmcm9tIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoIHVzXG4gKi9cblJlZ2lzdHJ5LnByb3RvdHlwZS5yZWdpc3RlclR5cGUgPSBmdW5jdGlvbiAodHlwZSwgcGtnKSB7XG4gIHR5cGUgPSBhc3NpZ24oe30sIHR5cGUsIHtcbiAgICBzdXBlckNsYXNzOiAodHlwZS5zdXBlckNsYXNzIHx8IFtdKS5zbGljZSgpLFxuICAgIGV4dGVuZHM6ICh0eXBlLmV4dGVuZHMgfHwgW10pLnNsaWNlKCksXG4gICAgcHJvcGVydGllczogKHR5cGUucHJvcGVydGllcyB8fCBbXSkuc2xpY2UoKSxcbiAgICBtZXRhOiBhc3NpZ24odHlwZS5tZXRhIHx8IHt9KVxuICB9KTtcbiAgdmFyIG5zID0gcGFyc2VOYW1lKHR5cGUubmFtZSwgcGtnLnByZWZpeCksXG4gICAgbmFtZSA9IG5zLm5hbWUsXG4gICAgcHJvcGVydGllc0J5TmFtZSA9IHt9O1xuXG4gIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgZm9yRWFjaCh0eXBlLnByb3BlcnRpZXMsIGJpbmQoZnVuY3Rpb24gKHApIHtcbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgbmFtZXNcbiAgICB2YXIgcHJvcGVydHlOcyA9IHBhcnNlTmFtZShwLm5hbWUsIG5zLnByZWZpeCksXG4gICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5zLm5hbWU7XG5cbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgdHlwZXNcbiAgICBpZiAoIWlzQnVpbHRJbihwLnR5cGUpKSB7XG4gICAgICBwLnR5cGUgPSBwYXJzZU5hbWUocC50eXBlLCBwcm9wZXJ0eU5zLnByZWZpeCkubmFtZTtcbiAgICB9XG4gICAgYXNzaWduKHAsIHtcbiAgICAgIG5zOiBwcm9wZXJ0eU5zLFxuICAgICAgbmFtZTogcHJvcGVydHlOYW1lXG4gICAgfSk7XG4gICAgcHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdID0gcDtcbiAgfSwgdGhpcykpO1xuXG4gIC8vIHVwZGF0ZSBucyArIG5hbWVcbiAgYXNzaWduKHR5cGUsIHtcbiAgICBuczogbnMsXG4gICAgbmFtZTogbmFtZSxcbiAgICBwcm9wZXJ0aWVzQnlOYW1lOiBwcm9wZXJ0aWVzQnlOYW1lXG4gIH0pO1xuICBmb3JFYWNoKHR5cGUuZXh0ZW5kcywgYmluZChmdW5jdGlvbiAoZXh0ZW5kc05hbWUpIHtcbiAgICB2YXIgZXh0ZW5kc05hbWVOcyA9IHBhcnNlTmFtZShleHRlbmRzTmFtZSwgbnMucHJlZml4KTtcbiAgICB2YXIgZXh0ZW5kZWQgPSB0aGlzLnR5cGVNYXBbZXh0ZW5kc05hbWVOcy5uYW1lXTtcbiAgICBleHRlbmRlZC50cmFpdHMgPSBleHRlbmRlZC50cmFpdHMgfHwgW107XG4gICAgZXh0ZW5kZWQudHJhaXRzLnB1c2gobmFtZSk7XG4gIH0sIHRoaXMpKTtcblxuICAvLyBsaW5rIHRvIHBhY2thZ2VcbiAgdGhpcy5kZWZpbmVQYWNrYWdlKHR5cGUsIHBrZyk7XG5cbiAgLy8gcmVnaXN0ZXJcbiAgdGhpcy50eXBlTWFwW25hbWVdID0gdHlwZTtcbn07XG5cbi8qKlxuICogVHJhdmVyc2UgdGhlIHR5cGUgaGllcmFyY2h5IGZyb20gYm90dG9tIHRvIHRvcCxcbiAqIGNhbGxpbmcgaXRlcmF0b3Igd2l0aCAodHlwZSwgaW5oZXJpdGVkKSBmb3IgYWxsIGVsZW1lbnRzIGluXG4gKiB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG5zTmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3RyYWl0PWZhbHNlXVxuICovXG5SZWdpc3RyeS5wcm90b3R5cGUubWFwVHlwZXMgPSBmdW5jdGlvbiAobnNOYW1lLCBpdGVyYXRvciwgdHJhaXQpIHtcbiAgdmFyIHR5cGUgPSBpc0J1aWx0SW4obnNOYW1lLm5hbWUpID8ge1xuICAgIG5hbWU6IG5zTmFtZS5uYW1lXG4gIH0gOiB0aGlzLnR5cGVNYXBbbnNOYW1lLm5hbWVdO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBzZWxlY3RlZCBzdXBlciB0eXBlIG9yIHRyYWl0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjbHNcbiAgICogQHBhcmFtIHtCb29sZWFufSBbdHJhaXQ9ZmFsc2VdXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZShjbHMsIHRyYWl0KSB7XG4gICAgdmFyIHBhcmVudE5zID0gcGFyc2VOYW1lKGNscywgaXNCdWlsdEluKGNscykgPyAnJyA6IG5zTmFtZS5wcmVmaXgpO1xuICAgIHNlbGYubWFwVHlwZXMocGFyZW50TnMsIGl0ZXJhdG9yLCB0cmFpdCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHRyYWl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2xzXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZVRyYWl0KGNscykge1xuICAgIHJldHVybiB0cmF2ZXJzZShjbHMsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBzZWxlY3RlZCBzdXBlciB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjbHNcbiAgICovXG4gIGZ1bmN0aW9uIHRyYXZlcnNlU3VwZXIoY2xzKSB7XG4gICAgcmV0dXJuIHRyYXZlcnNlKGNscywgZmFsc2UpO1xuICB9XG4gIGlmICghdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgbnNOYW1lLm5hbWUgKyAnPicpO1xuICB9XG4gIGZvckVhY2godHlwZS5zdXBlckNsYXNzLCB0cmFpdCA/IHRyYXZlcnNlVHJhaXQgOiB0cmF2ZXJzZVN1cGVyKTtcblxuICAvLyBjYWxsIGl0ZXJhdG9yIHdpdGggKHR5cGUsIGluaGVyaXRlZD0hdHJhaXQpXG4gIGl0ZXJhdG9yKHR5cGUsICF0cmFpdCk7XG4gIGZvckVhY2godHlwZS50cmFpdHMsIHRyYXZlcnNlVHJhaXQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgZGVzY3JpcHRvciBmb3IgYSB0eXBlLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gdHlwZSB0aGUgbmFtZXNwYWNlZCBuYW1lIChuczpsb2NhbE5hbWUpIG9mIHRoZSB0eXBlXG4gKlxuICogQHJldHVybiB7RGVzY3JpcHRvcn0gdGhlIHJlc3VsdGluZyBlZmZlY3RpdmUgZGVzY3JpcHRvclxuICovXG5SZWdpc3RyeS5wcm90b3R5cGUuZ2V0RWZmZWN0aXZlRGVzY3JpcHRvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBuc05hbWUgPSBwYXJzZU5hbWUobmFtZSk7XG4gIHZhciBidWlsZGVyID0gbmV3IERlc2NyaXB0b3JCdWlsZGVyKG5zTmFtZSk7XG4gIHRoaXMubWFwVHlwZXMobnNOYW1lLCBmdW5jdGlvbiAodHlwZSwgaW5oZXJpdGVkKSB7XG4gICAgYnVpbGRlci5hZGRUcmFpdCh0eXBlLCBpbmhlcml0ZWQpO1xuICB9KTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgLy8gZGVmaW5lIHBhY2thZ2UgbGlua1xuICB0aGlzLmRlZmluZVBhY2thZ2UoZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hbGxUeXBlc1tkZXNjcmlwdG9yLmFsbFR5cGVzLmxlbmd0aCAtIDFdLiRwa2cpO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5SZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lUGFja2FnZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHBrZykge1xuICB0aGlzLnByb3BlcnRpZXMuZGVmaW5lKHRhcmdldCwgJyRwa2cnLCB7XG4gICAgdmFsdWU6IHBrZ1xuICB9KTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBlbnN1cmVBdmFpbGFibGUocGFja2FnZU1hcCwgcGtnLCBpZGVudGlmaWVyS2V5KSB7XG4gIHZhciB2YWx1ZSA9IHBrZ1tpZGVudGlmaWVyS2V5XTtcbiAgaWYgKHZhbHVlIGluIHBhY2thZ2VNYXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhY2thZ2Ugd2l0aCAnICsgaWRlbnRpZmllcktleSArICcgPCcgKyB2YWx1ZSArICc+IGFscmVhZHkgZGVmaW5lZCcpO1xuICB9XG59XG5cbi8qKlxuICogQSB1dGlsaXR5IHRoYXQgZ2V0cyBhbmQgc2V0cyBwcm9wZXJ0aWVzIG9mIG1vZGVsIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXG4gKi9cbmZ1bmN0aW9uIFByb3BlcnRpZXMobW9kZWwpIHtcbiAgdGhpcy5tb2RlbCA9IG1vZGVsO1xufVxuXG4vKipcbiAqIFNldHMgYSBuYW1lZCBwcm9wZXJ0eSBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGUgcHJvcGVydHkgZ2V0cyBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKCFpc1N0cmluZyhuYW1lKSB8fCAhbmFtZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwcm9wZXJ0eSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpO1xuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkgJiYgcHJvcGVydHkubmFtZTtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIC8vIHVuc2V0IHRoZSBwcm9wZXJ0eSwgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyB1bmRlZmluZWQ7XG4gICAgLy8gZGVsZXRlIGZyb20gJGF0dHJzIChmb3IgZXh0ZW5zaW9ucykgb3IgdGhlIHRhcmdldCBpdHNlbGZcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRhcmdldC4kYXR0cnNbc3RyaXBHbG9iYWwobmFtZSldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBzZXQgdGhlIHByb3BlcnR5LCBkZWZpbmluZyB3ZWxsIGRlZmluZWQgcHJvcGVydGllcyBvbiB0aGUgZmx5XG4gICAgLy8gb3Igc2ltcGx5IHVwZGF0aW5nIHRoZW0gaW4gdGFyZ2V0LiRhdHRycyAoZm9yIGV4dGVuc2lvbnMpXG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXRbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQuJGF0dHJzW3N0cmlwR2xvYmFsKG5hbWUpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYW1lZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblByb3BlcnRpZXMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUpIHtcbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eSh0YXJnZXQsIG5hbWUpO1xuICBpZiAoIXByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHRhcmdldC4kYXR0cnNbc3RyaXBHbG9iYWwobmFtZSldO1xuICB9XG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lO1xuXG4gIC8vIGNoZWNrIGlmIGFjY2VzcyB0byBjb2xsZWN0aW9uIHByb3BlcnR5IGFuZCBsYXppbHkgaW5pdGlhbGl6ZSBpdFxuICBpZiAoIXRhcmdldFtwcm9wZXJ0eU5hbWVdICYmIHByb3BlcnR5LmlzTWFueSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIFtdKTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5TmFtZV07XG59O1xuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5IG9uIHRoZSB0YXJnZXQgZWxlbWVudFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucy53cml0YWJsZSkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cbiAgICAvLyB1c2UgZ2V0dGVycyBmb3IgcmVhZC1vbmx5IHZhcmlhYmxlcyB0byBzdXBwb3J0IEVTNiBwcm94aWVzXG4gICAgLy8gY2YuIGh0dHBzOi8vZ2l0aHViLmNvbS9icG1uLWlvL2ludGVybmFsLWRvY3MvaXNzdWVzLzM4NlxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVsZXRlIG9wdGlvbnMudmFsdWU7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIERlZmluZSB0aGUgZGVzY3JpcHRvciBmb3IgYW4gZWxlbWVudFxuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmVEZXNjcmlwdG9yID0gZnVuY3Rpb24gKHRhcmdldCwgZGVzY3JpcHRvcikge1xuICB0aGlzLmRlZmluZSh0YXJnZXQsICckZGVzY3JpcHRvcicsIHtcbiAgICB2YWx1ZTogZGVzY3JpcHRvclxuICB9KTtcbn07XG5cbi8qKlxuICogRGVmaW5lIHRoZSBtb2RlbCBmb3IgYW4gZWxlbWVudFxuICovXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5kZWZpbmVNb2RlbCA9IGZ1bmN0aW9uICh0YXJnZXQsIG1vZGVsKSB7XG4gIHRoaXMuZGVmaW5lKHRhcmdldCwgJyRtb2RlbCcsIHtcbiAgICB2YWx1ZTogbW9kZWxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybiBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7YW55fSB0YXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKlxuICogQHJldHVybiB7b2JqZWN0IHwgbnVsbH0gcHJvcGVydHlcbiAqL1xuUHJvcGVydGllcy5wcm90b3R5cGUuZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lKSB7XG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7XG4gIHZhciBwcm9wZXJ0eSA9IG1vZGVsLmdldFByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIG5hbWUpO1xuICBpZiAocHJvcGVydHkpIHtcbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cbiAgaWYgKG5hbWUuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHN0cmljdCA9IG1vZGVsLmNvbmZpZy5zdHJpY3Q7XG4gIGlmICh0eXBlb2Ygc3RyaWN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihgdW5rbm93biBwcm9wZXJ0eSA8JHtuYW1lfT4gb24gPCR7dGFyZ2V0LiR0eXBlfT5gKTtcbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5Lm5hbWUsIHtcbiAgICBlbnVtZXJhYmxlOiAhcHJvcGVydHkuaXNSZWZlcmVuY2UsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbmZ1bmN0aW9uIHN0cmlwR2xvYmFsKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXjovLCAnJyk7XG59XG5cbi8vIE1vZGRsZSBpbXBsZW1lbnRhdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogQGNsYXNzIE1vZGRsZVxuICpcbiAqIEEgbW9kZWwgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgZWxlbWVudHMgb2YgYSBzcGVjaWZpYyB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIE1vZGRsZSA9IHJlcXVpcmUoJ21vZGRsZScpO1xuICpcbiAqIHZhciBwa2cgPSB7XG4gKiAgIG5hbWU6ICdteXBhY2thZ2UnLFxuICogICBwcmVmaXg6ICdteScsXG4gKiAgIHR5cGVzOiBbXG4gKiAgICAgeyBuYW1lOiAnUm9vdCcgfVxuICogICBdXG4gKiB9O1xuICpcbiAqIHZhciBtb2RkbGUgPSBuZXcgTW9kZGxlKFtwa2ddKTtcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBhY2thZ2U+fSBwYWNrYWdlcyB0aGUgcGFja2FnZXMgdG8gY29udGFpblxuICpcbiAqIEBwYXJhbSB7IHsgc3RyaWN0PzogYm9vbGVhbiB9IH0gW2NvbmZpZ10gbW9kZGxlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZnVuY3Rpb24gTW9kZGxlKHBhY2thZ2VzLCBjb25maWcgPSB7fSkge1xuICB0aGlzLnByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcyh0aGlzKTtcbiAgdGhpcy5mYWN0b3J5ID0gbmV3IEZhY3RvcnkodGhpcywgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgdGhpcy5yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeShwYWNrYWdlcywgdGhpcy5wcm9wZXJ0aWVzKTtcbiAgdGhpcy50eXBlQ2FjaGUgPSB7fTtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAqXG4gKiBAbWV0aG9kIE1vZGRsZSNjcmVhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmb28gPSBtb2RkbGUuY3JlYXRlKCdteTpGb28nKTtcbiAqIHZhciBiYXIgPSBtb2RkbGUuY3JlYXRlKCdteTpCYXInLCB7IGlkOiAnQkFSXzEnIH0pO1xuICpcbiAqIEBwYXJhbSAge1N0cmluZ3xPYmplY3R9IGRlc2NyaXB0b3IgdGhlIHR5cGUgZGVzY3JpcHRvciBvciBuYW1lIGtub3cgdG8gdGhlIG1vZGVsXG4gKiBAcGFyYW0gIHtPYmplY3R9IGF0dHJzICAgYSBudW1iZXIgb2YgYXR0cmlidXRlcyB0byBpbml0aWFsaXplIHRoZSBtb2RlbCBpbnN0YW5jZSB3aXRoXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgbW9kZWwgaW5zdGFuY2VcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzY3JpcHRvciwgYXR0cnMpIHtcbiAgdmFyIFR5cGUgPSB0aGlzLmdldFR5cGUoZGVzY3JpcHRvcik7XG4gIGlmICghVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgZGVzY3JpcHRvciArICc+Jyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBUeXBlKGF0dHJzKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHlwZSByZXByZXNlbnRpbmcgYSBnaXZlbiBkZXNjcmlwdG9yXG4gKlxuICogQG1ldGhvZCBNb2RkbGUjZ2V0VHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIEZvbyA9IG1vZGRsZS5nZXRUeXBlKCdteTpGb28nKTtcbiAqIHZhciBmb28gPSBuZXcgRm9vKHsgJ2lkJyA6ICdGT09fMScgfSk7XG4gKlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICB0aGUgdHlwZSByZXByZXNlbnRpbmcgdGhlIGRlc2NyaXB0b3JcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRUeXBlID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgdmFyIGNhY2hlID0gdGhpcy50eXBlQ2FjaGU7XG4gIHZhciBuYW1lID0gaXNTdHJpbmcoZGVzY3JpcHRvcikgPyBkZXNjcmlwdG9yIDogZGVzY3JpcHRvci5ucy5uYW1lO1xuICB2YXIgdHlwZSA9IGNhY2hlW25hbWVdO1xuICBpZiAoIXR5cGUpIHtcbiAgICBkZXNjcmlwdG9yID0gdGhpcy5yZWdpc3RyeS5nZXRFZmZlY3RpdmVEZXNjcmlwdG9yKG5hbWUpO1xuICAgIHR5cGUgPSBjYWNoZVtuYW1lXSA9IHRoaXMuZmFjdG9yeS5jcmVhdGVUeXBlKGRlc2NyaXB0b3IpO1xuICB9XG4gIHJldHVybiB0eXBlO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFueS1lbGVtZW50IHR5cGUgdG8gYmUgdXNlZCB3aXRoaW4gbW9kZWwgaW5zdGFuY2VzLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGN1c3RvbSBlbGVtZW50cyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBtZXRhLW1vZGVsLlxuICogVGhlIGNyZWF0ZWQgZWxlbWVudCBjb250YWlucyBhbGwgdGhlIG1ldGEtZGF0YSByZXF1aXJlZCB0byBzZXJpYWxpemUgaXRcbiAqIGFzIHBhcnQgb2YgbWV0YS1tb2RlbCBlbGVtZW50cy5cbiAqXG4gKiBAbWV0aG9kIE1vZGRsZSNjcmVhdGVBbnlcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmb28gPSBtb2RkbGUuY3JlYXRlQW55KCd2ZW5kb3I6Rm9vJywgJ2h0dHA6Ly92ZW5kb3InLCB7XG4gKiAgIHZhbHVlOiAnYmFyJ1xuICogfSk7XG4gKlxuICogdmFyIGNvbnRhaW5lciA9IG1vZGRsZS5jcmVhdGUoJ215OkNvbnRhaW5lcicsICdodHRwOi8vbXknLCB7XG4gKiAgIGFueTogWyBmb28gXVxuICogfSk7XG4gKlxuICogLy8gZ28gYWhlYWQgYW5kIHNlcmlhbGl6ZSB0aGUgc3R1ZmZcbiAqXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7U3RyaW5nfSBuc1VyaSB0aGUgbmFtZXNwYWNlIHVyaSBvZiB0aGUgZWxlbWVudFxuICogQHBhcmFtICB7T2JqZWN0fSBbcHJvcGVydGllc10gYSBtYXAgb2YgcHJvcGVydGllcyB0byBpbml0aWFsaXplIHRoZSBpbnN0YW5jZSB3aXRoXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBhbnkgdHlwZSBpbnN0YW5jZVxuICovXG5Nb2RkbGUucHJvdG90eXBlLmNyZWF0ZUFueSA9IGZ1bmN0aW9uIChuYW1lLCBuc1VyaSwgcHJvcGVydGllcykge1xuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAkdHlwZTogbmFtZSxcbiAgICAkaW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSB0aGlzLiR0eXBlO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIFtrZXldLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xuICB2YXIgZGVzY3JpcHRvciA9IHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIGlzR2VuZXJpYzogdHJ1ZSxcbiAgICBuczoge1xuICAgICAgcHJlZml4OiBuYW1lTnMucHJlZml4LFxuICAgICAgbG9jYWxOYW1lOiBuYW1lTnMubG9jYWxOYW1lLFxuICAgICAgdXJpOiBuc1VyaVxuICAgIH1cbiAgfTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZURlc2NyaXB0b3IoZWxlbWVudCwgZGVzY3JpcHRvcik7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmVNb2RlbChlbGVtZW50LCB0aGlzKTtcbiAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZShlbGVtZW50LCAnZ2V0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuICB0aGlzLnByb3BlcnRpZXMuZGVmaW5lKGVsZW1lbnQsICdzZXQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUoZWxlbWVudCwgJyRwYXJlbnQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUoZWxlbWVudCwgJyRpbnN0YW5jZU9mJywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChhLCBrZXkpIHtcbiAgICBpZiAoaXNPYmplY3QoYSkgJiYgYS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbGVtZW50W2EubmFtZV0gPSBhLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50W2tleV0gPSBhO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcmVnaXN0ZXJlZCBwYWNrYWdlIGJ5IHVyaSBvciBwcmVmaXhcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYWNrYWdlXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UGFja2FnZSA9IGZ1bmN0aW9uICh1cmlPclByZWZpeCkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXRQYWNrYWdlKHVyaU9yUHJlZml4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHNuYXBzaG90IG9mIGFsbCBrbm93biBwYWNrYWdlc1xuICpcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhY2thZ2VcbiAqL1xuTW9kZGxlLnByb3RvdHlwZS5nZXRQYWNrYWdlcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVnaXN0cnkuZ2V0UGFja2FnZXMoKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgYW4gZWxlbWVudFxuICovXG5Nb2RkbGUucHJvdG90eXBlLmdldEVsZW1lbnREZXNjcmlwdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBvciBpbnN0YW5jZVxuICogcmVwcmVzZW50cyB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBNYXkgYmUgYXBwbGllZCB0byB0aGlzLCBpZiBlbGVtZW50IGlzIG9taXR0ZWQuXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuaGFzVHlwZSA9IGZ1bmN0aW9uIChlbGVtZW50LCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICB0eXBlID0gZWxlbWVudDtcbiAgICBlbGVtZW50ID0gdGhpcztcbiAgfVxuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJG1vZGVsLmdldEVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpO1xuICByZXR1cm4gdHlwZSBpbiBkZXNjcmlwdG9yLmFsbFR5cGVzQnlOYW1lO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIG9mIGFuIGVsZW1lbnRzIG5hbWVkIHByb3BlcnR5XG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0UHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIHJldHVybiB0aGlzLmdldEVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHldO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbWFwcGVkIHR5cGUncyBkZXNjcmlwdG9yXG4gKi9cbk1vZGRsZS5wcm90b3R5cGUuZ2V0VHlwZURlc2NyaXB0b3IgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gdGhpcy5yZWdpc3RyeS50eXBlTWFwW3R5cGVdO1xufTtcblxudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIEVOVElUWV9QQVRURVJOID0gLyYjKFxcZCspO3wmI3goWzAtOWEtZl0rKTt8JihcXHcrKTsvaWc7XG52YXIgRU5USVRZX01BUFBJTkcgPSB7XG4gICdhbXAnOiAnJicsXG4gICdhcG9zJzogJ1xcJycsXG4gICdndCc6ICc+JyxcbiAgJ2x0JzogJzwnLFxuICAncXVvdCc6ICdcIidcbn07XG5cbi8vIG1hcCBVUFBFUkNBU0UgdmFyaWFudHMgb2Ygc3VwcG9ydGVkIHNwZWNpYWwgY2hhcnNcbk9iamVjdC5rZXlzKEVOVElUWV9NQVBQSU5HKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gIEVOVElUWV9NQVBQSU5HW2sudG9VcHBlckNhc2UoKV0gPSBFTlRJVFlfTUFQUElOR1trXTtcbn0pO1xuZnVuY3Rpb24gcmVwbGFjZUVudGl0aWVzKF8sIGQsIHgsIHopIHtcbiAgLy8gcmVzZXJ2ZWQgbmFtZXMsIGkuZS4gJm5ic3A7XG4gIGlmICh6KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoRU5USVRZX01BUFBJTkcsIHopKSB7XG4gICAgICByZXR1cm4gRU5USVRZX01BUFBJTkdbel07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbGwgYmFjayB0byBvcmlnaW5hbCB2YWx1ZVxuICAgICAgcmV0dXJuICcmJyArIHogKyAnOyc7XG4gICAgfVxuICB9XG5cbiAgLy8gZGVjaW1hbCBlbmNvZGVkIGNoYXJcbiAgaWYgKGQpIHtcbiAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGQpO1xuICB9XG5cbiAgLy8gaGV4IGVuY29kZWQgY2hhclxuICByZXR1cm4gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHgsIDE2KSk7XG59XG5cbi8qKlxuICogQSBiYXNpYyBlbnRpdHkgZGVjb2RlciB0aGF0IGNhbiBkZWNvZGUgYSBtaW5pbWFsXG4gKiBzdWItc2V0IG9mIHJlc2VydmVkIG5hbWVzICgmYW1wOykgYXMgd2VsbCBhc1xuICogaGV4ICgmI3hhYWY7KSBhbmQgZGVjaW1hbCAoJiMxMjMxOykgZW5jb2RlZCBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBkZWNvZGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGVFbnRpdGllcyhzKSB7XG4gIGlmIChzLmxlbmd0aCA+IDMgJiYgcy5pbmRleE9mKCcmJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShFTlRJVFlfUEFUVEVSTiwgcmVwbGFjZUVudGl0aWVzKTtcbiAgfVxuICByZXR1cm4gcztcbn1cbnZhciBOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSA9ICdub24td2hpdGVzcGFjZSBvdXRzaWRlIG9mIHJvb3Qgbm9kZSc7XG5mdW5jdGlvbiBlcnJvciQxKG1zZykge1xuICByZXR1cm4gbmV3IEVycm9yKG1zZyk7XG59XG5mdW5jdGlvbiBtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCkge1xuICByZXR1cm4gJ21pc3NpbmcgbmFtZXNwYWNlIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPic7XG59XG5mdW5jdGlvbiBnZXR0ZXIoZ2V0Rm4pIHtcbiAgcmV0dXJuIHtcbiAgICAnZ2V0JzogZ2V0Rm4sXG4gICAgJ2VudW1lcmFibGUnOiB0cnVlXG4gIH07XG59XG5mdW5jdGlvbiBjbG9uZU5zTWF0cml4KG5zTWF0cml4KSB7XG4gIHZhciBjbG9uZSA9IHt9LFxuICAgIGtleTtcbiAgZm9yIChrZXkgaW4gbnNNYXRyaXgpIHtcbiAgICBjbG9uZVtrZXldID0gbnNNYXRyaXhba2V5XTtcbiAgfVxuICByZXR1cm4gY2xvbmU7XG59XG5mdW5jdGlvbiB1cmlQcmVmaXgocHJlZml4KSB7XG4gIHJldHVybiBwcmVmaXggKyAnJHVyaSc7XG59XG5mdW5jdGlvbiBidWlsZE5zTWF0cml4KG5zVXJpVG9QcmVmaXgpIHtcbiAgdmFyIG5zTWF0cml4ID0ge30sXG4gICAgdXJpLFxuICAgIHByZWZpeDtcbiAgZm9yICh1cmkgaW4gbnNVcmlUb1ByZWZpeCkge1xuICAgIHByZWZpeCA9IG5zVXJpVG9QcmVmaXhbdXJpXTtcbiAgICBuc01hdHJpeFtwcmVmaXhdID0gcHJlZml4O1xuICAgIG5zTWF0cml4W3VyaVByZWZpeChwcmVmaXgpXSA9IHVyaTtcbiAgfVxuICByZXR1cm4gbnNNYXRyaXg7XG59XG5mdW5jdGlvbiBub29wR2V0Q29udGV4dCgpIHtcbiAgcmV0dXJuIHtcbiAgICBsaW5lOiAwLFxuICAgIGNvbHVtbjogMFxuICB9O1xufVxuZnVuY3Rpb24gdGhyb3dGdW5jKGVycikge1xuICB0aHJvdyBlcnI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBwYXJzZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0gIHshT2JqZWN0PHN0cmluZywgPz49fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIFBhcnNlcihvcHRpb25zKSB7XG4gIGlmICghdGhpcykge1xuICAgIHJldHVybiBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICB9XG4gIHZhciBwcm94eSA9IG9wdGlvbnMgJiYgb3B0aW9uc1sncHJveHknXTtcbiAgdmFyIG9uVGV4dCxcbiAgICBvbk9wZW5UYWcsXG4gICAgb25DbG9zZVRhZyxcbiAgICBvbkNEQVRBLFxuICAgIG9uRXJyb3IgPSB0aHJvd0Z1bmMsXG4gICAgb25XYXJuaW5nLFxuICAgIG9uQ29tbWVudCxcbiAgICBvblF1ZXN0aW9uLFxuICAgIG9uQXR0ZW50aW9uO1xuICB2YXIgZ2V0Q29udGV4dCA9IG5vb3BHZXRDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBEbyB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBjdXJyZW50IGVsZW1lbnRzIGF0dHJpYnV0ZXMgZm9yIG5hbWVzcGFjZXM/XG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgdmFyIG1heWJlTlMgPSBmYWxzZTtcblxuICAvKipcbiAgICogRG8gd2UgcHJvY2VzcyBuYW1lc3BhY2VzIGF0IGFsbD9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgaXNOYW1lc3BhY2UgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGNhdWdodCBlcnJvciByZXR1cm5lZCBvbiBwYXJzZSBlbmRcbiAgICpcbiAgICogQHR5cGUge0Vycm9yfVxuICAgKi9cbiAgdmFyIHJldHVybkVycm9yID0gbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHdlIHN0b3AgcGFyc2luZz9cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICB2YXIgcGFyc2VTdG9wID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIHsgdXJpOiBwcmVmaXggfSB1c2VkIGJ5IHRoZSBwYXJzZXIuXG4gICAqXG4gICAqIFRoaXMgbWFwIHdpbGwgZW5zdXJlIHdlIGNhbiBub3JtYWxpemUgcHJlZml4ZXMgZHVyaW5nIHByb2Nlc3Npbmc7XG4gICAqIGZvciBlYWNoIHVyaSwgb25seSBvbmUgcHJlZml4IHdpbGwgYmUgZXhwb3NlZCB0byB0aGUgaGFuZGxlcnMuXG4gICAqXG4gICAqIEB0eXBlIHshT2JqZWN0PHN0cmluZywgc3RyaW5nPn19XG4gICAqL1xuICB2YXIgbnNVcmlUb1ByZWZpeDtcblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd8RXJyb3J9IGVyclxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyKSB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBlcnJvciQxKGVycik7XG4gICAgfVxuICAgIHJldHVybkVycm9yID0gZXJyO1xuICAgIG9uRXJyb3IoZXJyLCBnZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcGFyc2UgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZ3xFcnJvcn0gZXJyXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVXYXJuaW5nKGVycikge1xuICAgIGlmICghb25XYXJuaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgZXJyID0gZXJyb3IkMShlcnIpO1xuICAgIH1cbiAgICBvbldhcm5pbmcoZXJyLCBnZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBwYXJzZSBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIG5hbWVcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNiXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ29uJ10gPSBmdW5jdGlvbiAobmFtZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJvciQxKCdyZXF1aXJlZCBhcmdzIDxuYW1lLCBjYj4nKTtcbiAgICB9XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlICdvcGVuVGFnJzpcbiAgICAgICAgb25PcGVuVGFnID0gY2I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIG9uVGV4dCA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlVGFnJzpcbiAgICAgICAgb25DbG9zZVRhZyA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgb25FcnJvciA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgICBvbldhcm5pbmcgPSBjYjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZGF0YSc6XG4gICAgICAgIG9uQ0RBVEEgPSBjYjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhdHRlbnRpb24nOlxuICAgICAgICBvbkF0dGVudGlvbiA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIDwhWFhYWFggenp6ej1cImVlZWVcIj5cbiAgICAgIGNhc2UgJ3F1ZXN0aW9uJzpcbiAgICAgICAgb25RdWVzdGlvbiA9IGNiO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIDw/IC4uLi4gID8+XG4gICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgb25Db21tZW50ID0gY2I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgZXJyb3IkMSgndW5zdXBwb3J0ZWQgZXZlbnQ6ICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZXNwYWNlIHRvIHByZWZpeCBtYXBwaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBwYXJzZXIubnMoe1xuICAgKiAgICdodHRwOi8vZm9vJzogJ2ZvbycsXG4gICAqICAgJ2h0dHA6Ly9iYXInOiAnYmFyJ1xuICAgKiB9KTtcbiAgICpcbiAgICogQHBhcmFtICB7IU9iamVjdDxzdHJpbmcsIHN0cmluZz59IG5zTWFwXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cbiAgICovXG4gIHRoaXNbJ25zJ10gPSBmdW5jdGlvbiAobnNNYXApIHtcbiAgICBpZiAodHlwZW9mIG5zTWFwID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbnNNYXAgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBuc01hcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IGVycm9yJDEoJ3JlcXVpcmVkIGFyZ3MgPG5zTWFwPXt9PicpO1xuICAgIH1cbiAgICB2YXIgX25zVXJpVG9QcmVmaXggPSB7fSxcbiAgICAgIGs7XG4gICAgZm9yIChrIGluIG5zTWFwKSB7XG4gICAgICBfbnNVcmlUb1ByZWZpeFtrXSA9IG5zTWFwW2tdO1xuICAgIH1cbiAgICBpc05hbWVzcGFjZSA9IHRydWU7XG4gICAgbnNVcmlUb1ByZWZpeCA9IF9uc1VyaVRvUHJlZml4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSB4bWwgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHhtbFxuICAgKlxuICAgKiBAcmV0dXJuIHtFcnJvcn0gcmV0dXJuRXJyb3IsIGlmIG5vdCB0aHJvd25cbiAgICovXG4gIHRoaXNbJ3BhcnNlJ10gPSBmdW5jdGlvbiAoeG1sKSB7XG4gICAgaWYgKHR5cGVvZiB4bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBlcnJvciQxKCdyZXF1aXJlZCBhcmdzIDx4bWw9c3RyaW5nPicpO1xuICAgIH1cbiAgICByZXR1cm5FcnJvciA9IG51bGw7XG4gICAgcGFyc2UoeG1sKTtcbiAgICBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHQ7XG4gICAgcGFyc2VTdG9wID0gZmFsc2U7XG4gICAgcmV0dXJuIHJldHVybkVycm9yO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdG9wIHBhcnNpbmcuXG4gICAqL1xuICB0aGlzWydzdG9wJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgcGFyc2VTdG9wID0gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2Ugc3RyaW5nLCBpbnZva2luZyBjb25maWd1cmVkIGxpc3RlbmVycyBvbiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHhtbFxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2UoeG1sKSB7XG4gICAgdmFyIG5zTWF0cml4U3RhY2sgPSBpc05hbWVzcGFjZSA/IFtdIDogbnVsbCxcbiAgICAgIG5zTWF0cml4ID0gaXNOYW1lc3BhY2UgPyBidWlsZE5zTWF0cml4KG5zVXJpVG9QcmVmaXgpIDogbnVsbCxcbiAgICAgIF9uc01hdHJpeCxcbiAgICAgIG5vZGVTdGFjayA9IFtdLFxuICAgICAgYW5vbnltb3VzTnNDb3VudCA9IDAsXG4gICAgICB0YWdTdGFydCA9IGZhbHNlLFxuICAgICAgdGFnRW5kID0gZmFsc2UsXG4gICAgICBpID0gMCxcbiAgICAgIGogPSAwLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBxLFxuICAgICAgdyxcbiAgICAgIHYsXG4gICAgICB4bWxucyxcbiAgICAgIGVsZW1lbnROYW1lLFxuICAgICAgX2VsZW1lbnROYW1lLFxuICAgICAgZWxlbWVudFByb3h5O1xuICAgIHZhciBhdHRyc1N0cmluZyA9ICcnLFxuICAgICAgYXR0cnNTdGFydCA9IDAsXG4gICAgICBjYWNoZWRBdHRycyAvLyBmYWxzZSA9IHBhcnNlZCB3aXRoIGVycm9ycywgbnVsbCA9IG5lZWRzIHBhcnNpbmdcbiAgICA7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhdHRyaWJ1dGVzIG9uIGRlbWFuZCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIGF0dHJpYnV0ZXMuXG4gICAgICpcbiAgICAgKiBSZXR1cm4gc2VtYW50aWNzOiAoMSkgYGZhbHNlYCBvbiBhdHRyaWJ1dGUgcGFyc2UgZXJyb3IsXG4gICAgICogKDIpIG9iamVjdCBoYXNoIG9uIGV4dHJhY3RlZCBhdHRycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW58T2JqZWN0fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEF0dHJzKCkge1xuICAgICAgaWYgKGNhY2hlZEF0dHJzICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRBdHRycztcbiAgICAgIH1cbiAgICAgIHZhciBuc1VyaSxcbiAgICAgICAgbnNVcmlQcmVmaXgsXG4gICAgICAgIG5zTmFtZSxcbiAgICAgICAgZGVmYXVsdEFsaWFzID0gaXNOYW1lc3BhY2UgJiYgbnNNYXRyaXhbJ3htbG5zJ10sXG4gICAgICAgIGF0dHJMaXN0ID0gaXNOYW1lc3BhY2UgJiYgbWF5YmVOUyA/IFtdIDogbnVsbCxcbiAgICAgICAgaSA9IGF0dHJzU3RhcnQsXG4gICAgICAgIHMgPSBhdHRyc1N0cmluZyxcbiAgICAgICAgbCA9IHMubGVuZ3RoLFxuICAgICAgICBoYXNOZXdNYXRyaXgsXG4gICAgICAgIG5ld2FsaWFzLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYWxpYXMsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGF0dHJzID0ge30sXG4gICAgICAgIHNlZW5BdHRycyA9IHt9LFxuICAgICAgICBza2lwQXR0cixcbiAgICAgICAgdyxcbiAgICAgICAgajtcbiAgICAgIHBhcnNlQXR0cjogZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgc2tpcEF0dHIgPSBmYWxzZTtcbiAgICAgICAgdyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKHcgPT09IDMyIHx8IHcgPCAxNCAmJiB3ID4gOCkge1xuICAgICAgICAgIC8vIFdISVRFU1BBQ0U9eyBcXGZcXG5cXHJcXHRcXHZ9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3YWl0IGZvciBub24gd2hpdGVzcGFjZSBjaGFyYWN0ZXJcbiAgICAgICAgaWYgKHcgPCA2NSB8fCB3ID4gMTIyIHx8IHcgPiA5MCAmJiB3IDwgOTcpIHtcbiAgICAgICAgICBpZiAodyAhPT0gOTUgJiYgdyAhPT0gNTgpIHtcbiAgICAgICAgICAgIC8vIGNoYXIgOTVcIl9cIiA1OFwiOlwiXG4gICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGZpcnN0IGNoYXIgYXR0cmlidXRlIG5hbWUnKTtcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYXJzZSBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICBmb3IgKGogPSBpICsgMTsgaiA8IGw7IGorKykge1xuICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaik7XG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NiB8fFxuICAgICAgICAgIC8vICcuJ1xuICAgICAgICAgIHcgPT09IDQ1IHx8XG4gICAgICAgICAgLy8gJy0nXG4gICAgICAgICAgdyA9PT0gOTUgLy8gJ18nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHdoaXRlc3BhY2VcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgdyA8IDE0ICYmIHcgPiA4KSB7XG4gICAgICAgICAgICAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZScpO1xuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICBjb250aW51ZSBwYXJzZUF0dHI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZXhwZWN0ZWQgXCI9XCJcbiAgICAgICAgICBpZiAodyA9PT0gNjEpIHtcbiAgICAgICAgICAgIC8vIFwiPVwiID09IDYxXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBhdHRyaWJ1dGUgbmFtZSBjaGFyJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBzLnN1YnN0cmluZyhpLCBqKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd4bWxuczp4bWxucycpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdpbGxlZ2FsIGRlY2xhcmF0aW9uIG9mIHhtbG5zJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpO1xuICAgICAgICBpZiAodyA9PT0gMzQpIHtcbiAgICAgICAgICAvLyAnXCInXG4gICAgICAgICAgaiA9IHMuaW5kZXhPZignXCInLCBpID0gaiArIDIpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXFwnJywgaSk7XG4gICAgICAgICAgICBpZiAoaiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaGFuZGxlV2FybmluZygnYXR0cmlidXRlIHZhbHVlIHF1b3RlIG1pc3NtYXRjaCcpO1xuICAgICAgICAgICAgICBza2lwQXR0ciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHcgPT09IDM5KSB7XG4gICAgICAgICAgLy8gXCInXCJcbiAgICAgICAgICBqID0gcy5pbmRleE9mKCdcXCcnLCBpID0gaiArIDIpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZignXCInLCBpKTtcbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJyk7XG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUgcXVvdGVzJyk7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gc2tpcCB0byBuZXh0IHNwYWNlXG4gICAgICAgICAgZm9yIChqID0gaiArIDE7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpO1xuICAgICAgICAgICAgaWYgKHcgPT09IDMyIHx8IHcgPCAxNCAmJiB3ID4gOCkge1xuICAgICAgICAgICAgICAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGNsb3NpbmcgcXVvdGVzJyk7XG4gICAgICAgICAgaiA9IGw7XG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2tpcEF0dHIpIHtcbiAgICAgICAgICB2YWx1ZSA9IHMuc3Vic3RyaW5nKGksIGopO1xuICAgICAgICB9XG4gICAgICAgIGkgPSBqO1xuXG4gICAgICAgIC8vIGVuc3VyZSBTUEFDRSBmb2xsb3dzIGF0dHJpYnV0ZVxuICAgICAgICAvLyBza2lwIGlsbGVnYWwgY29udGVudCBvdGhlcndpc2VcbiAgICAgICAgLy8gZXhhbXBsZSBhPVwiYlwiY1xuICAgICAgICBmb3IgKDsgaiArIDEgPCBsOyBqKyspIHtcbiAgICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGogKyAxKTtcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgdyA8IDE0ICYmIHcgPiA4KSB7XG4gICAgICAgICAgICAvLyBXSElURVNQQUNFXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGSVJTVCBJTExFR0FMIENIQVJcbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgYXR0cmlidXRlIGVuZCcpO1xuICAgICAgICAgICAgc2tpcEF0dHIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkdmFuY2UgY3Vyc29yIHRvIG5leHQgYXR0cmlidXRlXG4gICAgICAgIGkgPSBqICsgMTtcbiAgICAgICAgaWYgKHNraXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWUgcGFyc2VBdHRyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlIHJlLWRlY2xhcmF0aW9uXG4gICAgICAgIGlmIChuYW1lIGluIHNlZW5BdHRycykge1xuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2F0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPiBhbHJlYWR5IGRlZmluZWQnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuQXR0cnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICBpZiAoIWlzTmFtZXNwYWNlKSB7XG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRyeSB0byBleHRyYWN0IG5hbWVzcGFjZSBpbmZvcm1hdGlvblxuICAgICAgICBpZiAobWF5YmVOUykge1xuICAgICAgICAgIG5ld2FsaWFzID0gbmFtZSA9PT0gJ3htbG5zJyA/ICd4bWxucycgOiBuYW1lLmNoYXJDb2RlQXQoMCkgPT09IDEyMCAmJiBuYW1lLnN1YnN0cigwLCA2KSA9PT0gJ3htbG5zOicgPyBuYW1lLnN1YnN0cig2KSA6IG51bGw7XG5cbiAgICAgICAgICAvLyBoYW5kbGUgeG1sbnMoOmFsaWFzKSBhc3NpZ25tZW50XG4gICAgICAgICAgaWYgKG5ld2FsaWFzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuc1VyaSA9IGRlY29kZUVudGl0aWVzKHZhbHVlKTtcbiAgICAgICAgICAgIG5zVXJpUHJlZml4ID0gdXJpUHJlZml4KG5ld2FsaWFzKTtcbiAgICAgICAgICAgIGFsaWFzID0gbnNVcmlUb1ByZWZpeFtuc1VyaV07XG4gICAgICAgICAgICBpZiAoIWFsaWFzKSB7XG4gICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBkZWZpbmVkIG9yIHByZWZpeCBjb2xsaXNpb25cbiAgICAgICAgICAgICAgaWYgKG5ld2FsaWFzID09PSAneG1sbnMnIHx8IG5zVXJpUHJlZml4IGluIG5zTWF0cml4ICYmIG5zTWF0cml4W25zVXJpUHJlZml4XSAhPT0gbnNVcmkpIHtcbiAgICAgICAgICAgICAgICAvLyBhbG9jYXRlIGZyZWUgbnMgcHJlZml4XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgYWxpYXMgPSAnbnMnICsgYW5vbnltb3VzTnNDb3VudCsrO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHR5cGVvZiBuc01hdHJpeFthbGlhc10gIT09ICd1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IG5ld2FsaWFzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5zVXJpVG9QcmVmaXhbbnNVcmldID0gYWxpYXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnNNYXRyaXhbbmV3YWxpYXNdICE9PSBhbGlhcykge1xuICAgICAgICAgICAgICBpZiAoIWhhc05ld01hdHJpeCkge1xuICAgICAgICAgICAgICAgIG5zTWF0cml4ID0gY2xvbmVOc01hdHJpeChuc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgaGFzTmV3TWF0cml4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuc01hdHJpeFtuZXdhbGlhc10gPSBhbGlhcztcbiAgICAgICAgICAgICAgaWYgKG5ld2FsaWFzID09PSAneG1sbnMnKSB7XG4gICAgICAgICAgICAgICAgbnNNYXRyaXhbdXJpUHJlZml4KGFsaWFzKV0gPSBuc1VyaTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0QWxpYXMgPSBhbGlhcztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuc01hdHJpeFtuc1VyaVByZWZpeF0gPSBuc1VyaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXhwb3NlIHhtbG5zKDphc2QpPVwiLi4uXCIgaW4gYXR0cmlidXRlc1xuICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbGxlY3QgYXR0cmlidXRlcyB1bnRpbCBhbGwgbmFtZXNwYWNlXG4gICAgICAgICAgLy8gZGVjbGFyYXRpb25zIGFyZSBwcm9jZXNzZWRcbiAgICAgICAgICBhdHRyTGlzdC5wdXNoKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvKiogZW5kIGlmIChtYXliZU5zKSAqL1xuXG4gICAgICAgIC8vIGhhbmRsZSBhdHRyaWJ1dGVzIG9uIGVsZW1lbnQgd2l0aG91dFxuICAgICAgICAvLyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zXG4gICAgICAgIHcgPSBuYW1lLmluZGV4T2YoJzonKTtcbiAgICAgICAgaWYgKHcgPT09IC0xKSB7XG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgaGFuZGxlV2FybmluZyhtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KG5hbWUuc3Vic3RyaW5nKDAsIHcpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lID8gbmFtZS5zdWJzdHIodyArIDEpIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodyk7XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgbnMgYXR0cmlidXRlIG5hbWVcblxuICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgZGVmZXJyZWQsIHBvc3NpYmx5IG5hbWVzcGFjZWQgYXR0cmlidXRlc1xuICAgICAgaWYgKG1heWJlTlMpIHtcbiAgICAgICAgLy8gbm9ybWFsaXplIGNhcHR1cmVkIGF0dHJpYnV0ZXNcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGF0dHJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIG5hbWUgPSBhdHRyTGlzdFtpKytdO1xuICAgICAgICAgIHZhbHVlID0gYXR0ckxpc3RbaV07XG4gICAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXG4gICAgICAgICAgICBpZiAoIShuc05hbWUgPSBuc01hdHJpeFtuYW1lLnN1YnN0cmluZygwLCB3KV0pKSB7XG4gICAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcobWlzc2luZ05hbWVzcGFjZUZvclByZWZpeChuYW1lLnN1YnN0cmluZygwLCB3KSkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0QWxpYXMgPT09IG5zTmFtZSA/IG5hbWUuc3Vic3RyKHcgKyAxKSA6IG5zTmFtZSArIG5hbWUuc3Vic3RyKHcpO1xuXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgY2FwdHVyZWQgYXR0cmlidXRlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhY2hlZEF0dHJzID0gYXR0cnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdCB0aGUgcGFyc2UgY29udGV4dCB7IGxpbmUsIGNvbHVtbiwgcGFydCB9XG4gICAgICogZnJvbSB0aGUgY3VycmVudCBwYXJzZXIgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHBhcnNlIGNvbnRleHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJzZUNvbnRleHQoKSB7XG4gICAgICB2YXIgc3BsaXRzUmUgPSAvKFxcclxcbnxcXHJ8XFxuKS9nO1xuICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgdmFyIGNvbHVtbiA9IDA7XG4gICAgICB2YXIgc3RhcnRPZkxpbmUgPSAwO1xuICAgICAgdmFyIGVuZE9mTGluZSA9IGo7XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgZGF0YTtcbiAgICAgIHdoaWxlIChpID49IHN0YXJ0T2ZMaW5lKSB7XG4gICAgICAgIG1hdGNoID0gc3BsaXRzUmUuZXhlYyh4bWwpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbmQgb2YgbGluZSA9IChicmVhayBpZHggKyBicmVhayBjaGFycylcbiAgICAgICAgZW5kT2ZMaW5lID0gbWF0Y2hbMF0ubGVuZ3RoICsgbWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChlbmRPZkxpbmUgPiBpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZHZhbmNlIHRvIG5leHQgbGluZVxuICAgICAgICBsaW5lICs9IDE7XG4gICAgICAgIHN0YXJ0T2ZMaW5lID0gZW5kT2ZMaW5lO1xuICAgICAgfVxuXG4gICAgICAvLyBFT0YgZXJyb3JzXG4gICAgICBpZiAoaSA9PSAtMSkge1xuICAgICAgICBjb2x1bW4gPSBlbmRPZkxpbmU7XG4gICAgICAgIGRhdGEgPSB4bWwuc3Vic3RyaW5nKGopO1xuICAgICAgfSBlbHNlXG4gICAgICAgIC8vIHN0YXJ0IGVycm9yc1xuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIGRhdGEgPSB4bWwuc3Vic3RyaW5nKGosIGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3RoZXIgZXJyb3JzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbHVtbiA9IGkgLSBzdGFydE9mTGluZTtcbiAgICAgICAgICBkYXRhID0gaiA9PSAtMSA/IHhtbC5zdWJzdHJpbmcoaSkgOiB4bWwuc3Vic3RyaW5nKGksIGogKyAxKTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RhdGEnOiBkYXRhLFxuICAgICAgICAnbGluZSc6IGxpbmUsXG4gICAgICAgICdjb2x1bW4nOiBjb2x1bW5cbiAgICAgIH07XG4gICAgfVxuICAgIGdldENvbnRleHQgPSBnZXRQYXJzZUNvbnRleHQ7XG4gICAgaWYgKHByb3h5KSB7XG4gICAgICBlbGVtZW50UHJveHkgPSBPYmplY3QuY3JlYXRlKHt9LCB7XG4gICAgICAgICduYW1lJzogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudE5hbWU7XG4gICAgICAgIH0pLFxuICAgICAgICAnb3JpZ2luYWxOYW1lJzogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX2VsZW1lbnROYW1lO1xuICAgICAgICB9KSxcbiAgICAgICAgJ2F0dHJzJzogZ2V0dGVyKGdldEF0dHJzKSxcbiAgICAgICAgJ25zJzogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbnNNYXRyaXg7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhY3R1YWwgcGFyc2UgbG9naWNcbiAgICB3aGlsZSAoaiAhPT0gLTEpIHtcbiAgICAgIGlmICh4bWwuY2hhckNvZGVBdChqKSA9PT0gNjApIHtcbiAgICAgICAgLy8gXCI8XCJcbiAgICAgICAgaSA9IGo7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpID0geG1sLmluZGV4T2YoJzwnLCBqKTtcbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgZW5kXG4gICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgaWYgKG5vZGVTdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBzdGFydCB0YWcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA8IHhtbC5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqKS50cmltKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHBhcnNlIHRleHRcbiAgICAgIGlmIChqICE9PSBpKSB7XG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9uVGV4dCkge1xuICAgICAgICAgICAgb25UZXh0KHhtbC5zdWJzdHJpbmcoaiwgaSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqLCBpKS50cmltKCkpIHtcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3ID0geG1sLmNoYXJDb2RlQXQoaSArIDEpO1xuXG4gICAgICAvLyBwYXJzZSBjb21tZW50cyArIENEQVRBXG4gICAgICBpZiAodyA9PT0gMzMpIHtcbiAgICAgICAgLy8gXCIhXCJcbiAgICAgICAgcSA9IHhtbC5jaGFyQ29kZUF0KGkgKyAyKTtcblxuICAgICAgICAvLyBDREFUQSBzZWN0aW9uXG4gICAgICAgIGlmIChxID09PSA5MSAmJiB4bWwuc3Vic3RyKGkgKyAzLCA2KSA9PT0gJ0NEQVRBWycpIHtcbiAgICAgICAgICAvLyA5MSA9PSBcIltcIlxuICAgICAgICAgIGogPSB4bWwuaW5kZXhPZignXV0+JywgaSk7XG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIGNkYXRhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbkNEQVRBKSB7XG4gICAgICAgICAgICBvbkNEQVRBKHhtbC5zdWJzdHJpbmcoaSArIDksIGopLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBqICs9IDM7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21tZW50XG4gICAgICAgIGlmIChxID09PSA0NSAmJiB4bWwuY2hhckNvZGVBdChpICsgMykgPT09IDQ1KSB7XG4gICAgICAgICAgLy8gNDUgPT0gXCItXCJcbiAgICAgICAgICBqID0geG1sLmluZGV4T2YoJy0tPicsIGkpO1xuICAgICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCBjb21tZW50Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbkNvbW1lbnQpIHtcbiAgICAgICAgICAgIG9uQ29tbWVudCh4bWwuc3Vic3RyaW5nKGkgKyA0LCBqKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBxdWVzdGlvbiA8PyAuLi4gPz5cbiAgICAgIGlmICh3ID09PSA2Mykge1xuICAgICAgICAvLyBcIj9cIlxuICAgICAgICBqID0geG1sLmluZGV4T2YoJz8+JywgaSk7XG4gICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgcXVlc3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25RdWVzdGlvbikge1xuICAgICAgICAgIG9uUXVlc3Rpb24oeG1sLnN1YnN0cmluZyhpLCBqICsgMiksIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCBtYXRjaGluZyBjbG9zaW5nIHRhZyBmb3IgYXR0ZW50aW9uIG9yIHN0YW5kYXJkIHRhZ3NcbiAgICAgIC8vIGZvciB0aGF0IHdlIG11c3Qgc2tpcCB0aHJvdWdoIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgIC8vIChlbmNsb3NlZCBpbiBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcylcbiAgICAgIGZvciAoeCA9IGkgKyAxOzsgeCsrKSB7XG4gICAgICAgIHYgPSB4bWwuY2hhckNvZGVBdCh4KTtcbiAgICAgICAgaWYgKGlzTmFOKHYpKSB7XG4gICAgICAgICAgaiA9IC0xO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgdGFnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBbMTBdIEF0dFZhbHVlIDo6PSAnXCInIChbXjwmXCJdIHwgUmVmZXJlbmNlKSogJ1wiJyB8IFwiJ1wiIChbXjwmJ10gfCBSZWZlcmVuY2UpKiBcIidcIlxuICAgICAgICAvLyBza2lwcyB0aGUgcXVvdGVkIHN0cmluZ1xuICAgICAgICAvLyAoZG91YmxlIHF1b3RlcykgZG9lcyBub3QgYXBwZWFyIGluIGEgbGl0ZXJhbCBlbmNsb3NlZCBieSAoZG91YmxlIHF1b3RlcylcbiAgICAgICAgLy8gKHNpbmdsZSBxdW90ZSkgZG9lcyBub3QgYXBwZWFyIGluIGEgbGl0ZXJhbCBlbmNsb3NlZCBieSAoc2luZ2xlIHF1b3RlKVxuICAgICAgICBpZiAodiA9PT0gMzQpIHtcbiAgICAgICAgICAvLyAgJ1wiJ1xuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZignXCInLCB4ICsgMSk7XG4gICAgICAgICAgeCA9IHEgIT09IC0xID8gcSA6IHg7XG4gICAgICAgIH0gZWxzZSBpZiAodiA9PT0gMzkpIHtcbiAgICAgICAgICAvLyBcIidcIlxuICAgICAgICAgIHEgPSB4bWwuaW5kZXhPZihcIidcIiwgeCArIDEpO1xuICAgICAgICAgIHggPSBxICE9PSAtMSA/IHEgOiB4O1xuICAgICAgICB9IGVsc2UgaWYgKHYgPT09IDYyKSB7XG4gICAgICAgICAgLy8gJz4nXG4gICAgICAgICAgaiA9IHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgYXR0ZW50aW9uIDwhIC4uLj5cbiAgICAgIC8vIHByZXZpb3VzbHkgY29tbWVudCBhbmQgQ0RBVEEgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkXG4gICAgICBpZiAodyA9PT0gMzMpIHtcbiAgICAgICAgLy8gXCIhXCJcblxuICAgICAgICBpZiAob25BdHRlbnRpb24pIHtcbiAgICAgICAgICBvbkF0dGVudGlvbih4bWwuc3Vic3RyaW5nKGksIGogKyAxKSwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpO1xuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaiArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZG9uJ3QgcHJvY2VzcyBhdHRyaWJ1dGVzO1xuICAgICAgLy8gdGhlcmUgYXJlIG5vbmVcbiAgICAgIGNhY2hlZEF0dHJzID0ge307XG5cbiAgICAgIC8vIGlmICh4bWwuY2hhckNvZGVBdChpKzEpID09PSA0NykgeyAvLyA8Ly4uLlxuICAgICAgaWYgKHcgPT09IDQ3KSB7XG4gICAgICAgIC8vIDwvLi4uXG4gICAgICAgIHRhZ1N0YXJ0ID0gZmFsc2U7XG4gICAgICAgIHRhZ0VuZCA9IHRydWU7XG4gICAgICAgIGlmICghbm9kZVN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignbWlzc2luZyBvcGVuIHRhZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmVyaWZ5IG9wZW4gPC0+IGNsb3NlIHRhZyBtYXRjaFxuICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSBub2RlU3RhY2sucG9wKCk7XG4gICAgICAgIHEgPSBpICsgMiArIHgubGVuZ3RoO1xuICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhpICsgMiwgcSkgIT09IHgpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2Nsb3NpbmcgdGFnIG1pc21hdGNoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB2ZXJpZnkgY2hhcnMgaW4gY2xvc2UgdGFnXG4gICAgICAgIGZvciAoOyBxIDwgajsgcSsrKSB7XG4gICAgICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KHEpO1xuICAgICAgICAgIGlmICh3ID09PSAzMiB8fCB3ID4gOCAmJiB3IDwgMTQpIHtcbiAgICAgICAgICAgIC8vIFxcZlxcblxcclxcdFxcdiBzcGFjZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignY2xvc2UgdGFnJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh4bWwuY2hhckNvZGVBdChqIC0gMSkgPT09IDQ3KSB7XG4gICAgICAgICAgLy8gLi4uLz5cbiAgICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSB4bWwuc3Vic3RyaW5nKGkgKyAxLCBqIC0gMSk7XG4gICAgICAgICAgdGFnU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHRhZ0VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IGVsZW1lbnROYW1lID0geG1sLnN1YnN0cmluZyhpICsgMSwgaik7XG4gICAgICAgICAgdGFnU3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHRhZ0VuZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA9PT0gOTUgfHwgdyA9PT0gNTgpKSB7XG4gICAgICAgICAgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2lsbGVnYWwgZmlyc3QgY2hhciBub2RlTmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAocSA9IDEsIHkgPSB4Lmxlbmd0aDsgcSA8IHk7IHErKykge1xuICAgICAgICAgIHcgPSB4LmNoYXJDb2RlQXQocSk7XG4gICAgICAgICAgaWYgKHcgPiA5NiAmJiB3IDwgMTIzIHx8IHcgPiA2NCAmJiB3IDwgOTEgfHwgdyA+IDQ3ICYmIHcgPCA1OSB8fCB3ID09PSA0NSB8fCB3ID09PSA5NSB8fCB3ID09IDQ2KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8IHcgPCAxNCAmJiB3ID4gOCkge1xuICAgICAgICAgICAgLy8gXFxmXFxuXFxyXFx0XFx2IHNwYWNlXG4gICAgICAgICAgICBlbGVtZW50TmFtZSA9IHguc3Vic3RyaW5nKDAsIHEpO1xuXG4gICAgICAgICAgICAvLyBtYXliZSB0aGVyZSBhcmUgYXR0cmlidXRlc1xuICAgICAgICAgICAgY2FjaGVkQXR0cnMgPSBudWxsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignaW52YWxpZCBub2RlTmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFnRW5kKSB7XG4gICAgICAgICAgbm9kZVN0YWNrLnB1c2goZWxlbWVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgX25zTWF0cml4ID0gbnNNYXRyaXg7XG4gICAgICAgIGlmICh0YWdTdGFydCkge1xuICAgICAgICAgIC8vIHJlbWVtYmVyIG9sZCBuYW1lc3BhY2VcbiAgICAgICAgICAvLyB1bmxlc3Mgd2UncmUgc2VsZi1jbG9zaW5nXG4gICAgICAgICAgaWYgKCF0YWdFbmQpIHtcbiAgICAgICAgICAgIG5zTWF0cml4U3RhY2sucHVzaChfbnNNYXRyaXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2FjaGVkQXR0cnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHF1aWNrIGNoZWNrLCB3aGV0aGVyIHRoZXJlIG1heSBiZSBuYW1lc3BhY2VcbiAgICAgICAgICAgIC8vIGRlY2xhcmF0aW9ucyBvbiB0aGUgbm9kZTsgaWYgdGhhdCBpcyB0aGUgY2FzZVxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBlYWdlcmx5IHBhcnNlIHRoZSBub2RlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIGlmIChtYXliZU5TID0geC5pbmRleE9mKCd4bWxucycsIHEpICE9PSAtMSkge1xuICAgICAgICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuICAgICAgICAgICAgICBnZXRBdHRycygpO1xuICAgICAgICAgICAgICBtYXliZU5TID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lO1xuICAgICAgICB3ID0gZWxlbWVudE5hbWUuaW5kZXhPZignOicpO1xuICAgICAgICBpZiAodyAhPT0gLTEpIHtcbiAgICAgICAgICB4bWxucyA9IG5zTWF0cml4W2VsZW1lbnROYW1lLnN1YnN0cmluZygwLCB3KV07XG5cbiAgICAgICAgICAvLyBwcmVmaXggZ2l2ZW47IG5hbWVzcGFjZSBtdXN0IGV4aXN0XG4gICAgICAgICAgaWYgKCF4bWxucykge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdtaXNzaW5nIG5hbWVzcGFjZSBvbiA8JyArIF9lbGVtZW50TmFtZSArICc+Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnROYW1lID0gZWxlbWVudE5hbWUuc3Vic3RyKHcgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4bWxucyA9IG5zTWF0cml4Wyd4bWxucyddO1xuXG4gICAgICAgICAgLy8gaWYgbm8gZGVmYXVsdCBuYW1lc3BhY2UgaXMgZGVmaW5lZCxcbiAgICAgICAgICAvLyB3ZSdsbCBpbXBvcnQgdGhlIGVsZW1lbnQgYXMgYW5vbnltb3VzLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gaXQgaXMgdXAgdG8gdXNlcnMgdG8gY29ycmVjdCB0aGF0IHRvIHRoZSBkb2N1bWVudCBkZWZpbmVkXG4gICAgICAgICAgLy8gdGFyZ2V0TmFtZXNwYWNlLCBvciB3aGF0ZXZlciB0aGVpciB1bmRlcnNhbmRpbmcgb2YgdGhlXG4gICAgICAgICAgLy8gWE1MIHNwZWMgbWFuZGF0ZXMuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGp1c3QgbmFtZXNwYWNlIHByZWZpeHMgYXMgY29uZmlndXJlZFxuICAgICAgICBpZiAoeG1sbnMpIHtcbiAgICAgICAgICBlbGVtZW50TmFtZSA9IHhtbG5zICsgJzonICsgZWxlbWVudE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YWdTdGFydCkge1xuICAgICAgICBhdHRyc1N0YXJ0ID0gcTtcbiAgICAgICAgYXR0cnNTdHJpbmcgPSB4O1xuICAgICAgICBpZiAob25PcGVuVGFnKSB7XG4gICAgICAgICAgaWYgKHByb3h5KSB7XG4gICAgICAgICAgICBvbk9wZW5UYWcoZWxlbWVudFByb3h5LCBkZWNvZGVFbnRpdGllcywgdGFnRW5kLCBnZXRDb250ZXh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25PcGVuVGFnKGVsZW1lbnROYW1lLCBnZXRBdHRycywgZGVjb2RlRW50aXRpZXMsIHRhZ0VuZCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YWdFbmQpIHtcbiAgICAgICAgaWYgKG9uQ2xvc2VUYWcpIHtcbiAgICAgICAgICBvbkNsb3NlVGFnKHByb3h5ID8gZWxlbWVudFByb3h5IDogZWxlbWVudE5hbWUsIGRlY29kZUVudGl0aWVzLCB0YWdTdGFydCwgZ2V0Q29udGV4dCk7XG4gICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc3RvcmUgb2xkIG5hbWVzcGFjZVxuICAgICAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgICAgICBpZiAoIXRhZ1N0YXJ0KSB7XG4gICAgICAgICAgICBuc01hdHJpeCA9IG5zTWF0cml4U3RhY2sucG9wKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5zTWF0cml4ID0gX25zTWF0cml4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaiArPSAxO1xuICAgIH1cbiAgfSAvKiogZW5kIHBhcnNlICovXG59XG5cbmZ1bmN0aW9uIGhhc0xvd2VyQ2FzZUFsaWFzKHBrZykge1xuICByZXR1cm4gcGtnLnhtbCAmJiBwa2cueG1sLnRhZ0FsaWFzID09PSAnbG93ZXJDYXNlJztcbn1cbnZhciBERUZBVUxUX05TX01BUCA9IHtcbiAgJ3hzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG4gICd4bWwnOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xufTtcbnZhciBTRVJJQUxJWkVfUFJPUEVSVFkgPSAncHJvcGVydHknO1xuZnVuY3Rpb24gZ2V0U2VyaWFsaXphdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnhtbCAmJiBlbGVtZW50LnhtbC5zZXJpYWxpemU7XG59XG5mdW5jdGlvbiBnZXRTZXJpYWxpemF0aW9uVHlwZShlbGVtZW50KSB7XG4gIGNvbnN0IHR5cGUgPSBnZXRTZXJpYWxpemF0aW9uKGVsZW1lbnQpO1xuICByZXR1cm4gdHlwZSAhPT0gU0VSSUFMSVpFX1BST1BFUlRZICYmICh0eXBlIHx8IG51bGwpO1xufVxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cbmZ1bmN0aW9uIGFsaWFzVG9OYW1lKGFsaWFzTnMsIHBrZykge1xuICBpZiAoIWhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcbiAgICByZXR1cm4gYWxpYXNOcy5uYW1lO1xuICB9XG4gIHJldHVybiBhbGlhc05zLnByZWZpeCArICc6JyArIGNhcGl0YWxpemUoYWxpYXNOcy5sb2NhbE5hbWUpO1xufVxuXG4vKipcbiAqIFVuLXByZWZpeCBhIHBvdGVudGlhbGx5IHByZWZpeGVkIHR5cGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge05zTmFtZX0gbmFtZU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BrZ11cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKSB7XG4gIHZhciBuYW1lID0gbmFtZU5zLm5hbWUsXG4gICAgbG9jYWxOYW1lID0gbmFtZU5zLmxvY2FsTmFtZTtcbiAgdmFyIHR5cGVQcmVmaXggPSBwa2cgJiYgcGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXg7XG4gIGlmICh0eXBlUHJlZml4ICYmIGxvY2FsTmFtZS5pbmRleE9mKHR5cGVQcmVmaXgpID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWVOcy5wcmVmaXggKyAnOicgKyBsb2NhbE5hbWUuc2xpY2UodHlwZVByZWZpeC5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVUeXBlTmFtZShuYW1lLCBuc01hcCwgbW9kZWwpIHtcbiAgLy8gbm9ybWFsaXplIGFnYWluc3QgYWN0dWFsIE5TXG4gIGNvbnN0IG5hbWVOcyA9IHBhcnNlTmFtZShuYW1lLCBuc01hcC54bWxucyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gYCR7bnNNYXBbbmFtZU5zLnByZWZpeF0gfHwgbmFtZU5zLnByZWZpeH06JHtuYW1lTnMubG9jYWxOYW1lfWA7XG4gIGNvbnN0IG5vcm1hbGl6ZWROYW1lTnMgPSBwYXJzZU5hbWUobm9ybWFsaXplZE5hbWUpO1xuXG4gIC8vIGRldGVybWluZSBhY3R1YWwgdHlwZSBuYW1lLCBiYXNlZCBvbiBwYWNrYWdlLWRlZmluZWQgcHJlZml4XG4gIHZhciBwa2cgPSBtb2RlbC5nZXRQYWNrYWdlKG5vcm1hbGl6ZWROYW1lTnMucHJlZml4KTtcbiAgcmV0dXJuIHByZWZpeGVkVG9OYW1lKG5vcm1hbGl6ZWROYW1lTnMsIHBrZyk7XG59XG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2RkbGUgZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBpbnN0YW5jZSBvciB0eXBlLlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR8RnVuY3Rpb259IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBtb2RkbGUgZGVzY3JpcHRvclxuICovXG5mdW5jdGlvbiBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQSBwYXJzZSBjb250ZXh0LlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfSBvcHRpb25zLnJvb3RIYW5kbGVyIHRoZSByb290IGhhbmRsZXIgZm9yIHBhcnNpbmcgYSBkb2N1bWVudFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sYXg9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBpbnZhbGlkIGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIENvbnRleHQob3B0aW9ucykge1xuICAvKipcbiAgICogQHByb3BlcnR5IHtFbGVtZW50SGFuZGxlcn0gcm9vdEhhbmRsZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbGF4XG4gICAqL1xuXG4gIGFzc2lnbih0aGlzLCBvcHRpb25zKTtcbiAgdGhpcy5lbGVtZW50c0J5SWQgPSB7fTtcbiAgdGhpcy5yZWZlcmVuY2VzID0gW107XG4gIHRoaXMud2FybmluZ3MgPSBbXTtcblxuICAvKipcbiAgICogQWRkIGFuIHVucmVzb2x2ZWQgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlXG4gICAqL1xuICB0aGlzLmFkZFJlZmVyZW5jZSA9IGZ1bmN0aW9uIChyZWZlcmVuY2UpIHtcbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9jZXNzZWQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICB0aGlzLmFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgdGhyb3cgZXJyb3IoJ2V4cGVjdGVkIGVsZW1lbnQnKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IHRoaXMuZWxlbWVudHNCeUlkO1xuICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50KTtcbiAgICB2YXIgaWRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IuaWRQcm9wZXJ0eSxcbiAgICAgIGlkO1xuICAgIGlmIChpZFByb3BlcnR5KSB7XG4gICAgICBpZCA9IGVsZW1lbnQuZ2V0KGlkUHJvcGVydHkubmFtZSk7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgLy8gZm9yIFFOYW1lIHZhbGlkYXRpb24gYXMgcGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVDaGFyXG4gICAgICAgIGlmICghL14oW2Etel1bXFx3LS5dKjopP1thLXpfXVtcXHctLl0qJC9pLnRlc3QoaWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIElEIDwnICsgaWQgKyAnPicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50c0J5SWRbaWRdKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3IoJ2R1cGxpY2F0ZSBJRCA8JyArIGlkICsgJz4nKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c0J5SWRbaWRdID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbXBvcnQgd2FybmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHdhcm5pbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHdhcm5pbmcubWVzc2FnZVxuICAgKiBAcGFyYW0ge0Vycm9yfSBbd2FybmluZy5lcnJvcl1cbiAgICovXG4gIHRoaXMuYWRkV2FybmluZyA9IGZ1bmN0aW9uICh3YXJuaW5nKSB7XG4gICAgdGhpcy53YXJuaW5ncy5wdXNoKHdhcm5pbmcpO1xuICB9O1xufVxuZnVuY3Rpb24gQmFzZUhhbmRsZXIoKSB7fVxuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uICgpIHt9O1xuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVRleHQgPSBmdW5jdGlvbiAoKSB7fTtcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQSBzaW1wbGUgcGFzcyB0aHJvdWdoIGhhbmRsZXIgdGhhdCBkb2VzIG5vdGhpbmcgZXhjZXB0IGZvclxuICogaWdub3JpbmcgYWxsIGlucHV0IGl0IHJlY2VpdmVzLlxuICpcbiAqIFRoaXMgaXMgdXNlZCB0byBpZ25vcmUgdW5rbm93biBlbGVtZW50cyBhbmRcbiAqIGF0dHJpYnV0ZXMuXG4gKi9cbmZ1bmN0aW9uIE5vb3BIYW5kbGVyKCkge31cbk5vb3BIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZUhhbmRsZXIucHJvdG90eXBlKTtcbk5vb3BIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBCb2R5SGFuZGxlcigpIHt9XG5Cb2R5SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSk7XG5Cb2R5SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHRoaXMuYm9keSA9ICh0aGlzLmJvZHkgfHwgJycpICsgdGV4dDtcbn07XG5mdW5jdGlvbiBSZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5LCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICB0aHJvdyBlcnJvcignZXhwZWN0ZWQgbm8gc3ViIG5vZGVzJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVSZWZlcmVuY2Uobm9kZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVsZW1lbnQuaWQgPSB0aGlzLmJvZHk7XG59O1xuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuY3JlYXRlUmVmZXJlbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eS5ucy5uYW1lLFxuICAgIGlkOiAnJ1xuICB9O1xufTtcbmZ1bmN0aW9uIFZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpIHtcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgdGhpcy5wcm9wZXJ0eURlc2MgPSBwcm9wZXJ0eURlc2M7XG59XG5WYWx1ZUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuVmFsdWVIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2YWx1ZSA9IHRoaXMuYm9keSB8fCAnJyxcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgIHByb3BlcnR5RGVzYyA9IHRoaXMucHJvcGVydHlEZXNjO1xuICB2YWx1ZSA9IGNvZXJjZVR5cGUocHJvcGVydHlEZXNjLnR5cGUsIHZhbHVlKTtcbiAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICBlbGVtZW50LmdldChwcm9wZXJ0eURlc2MubmFtZSkucHVzaCh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXQocHJvcGVydHlEZXNjLm5hbWUsIHZhbHVlKTtcbiAgfVxufTtcbmZ1bmN0aW9uIEJhc2VFbGVtZW50SGFuZGxlcigpIHt9XG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpO1xuQmFzZUVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIHBhcnNlciA9IHRoaXMsXG4gICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IHRoaXMuZWxlbWVudCA9IHRoaXMuY3JlYXRlRWxlbWVudChub2RlKTtcbiAgICB0aGlzLmNvbnRleHQuYWRkRWxlbWVudChlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZXIgPSB0aGlzLmhhbmRsZUNoaWxkKG5vZGUpO1xuICB9XG4gIHJldHVybiBwYXJzZXI7XG59O1xuXG4vKipcbiAqIEBjbGFzcyBSZWFkZXIuRWxlbWVudEhhbmRsZXJcbiAqXG4gKi9cbmZ1bmN0aW9uIEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIHRoaXMudHlwZSA9IG1vZGVsLmdldFR5cGUodHlwZU5hbWUpO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKTtcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5hZGRSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVmZXJlbmNlKSB7XG4gIHRoaXMuY29udGV4dC5hZGRSZWZlcmVuY2UocmVmZXJlbmNlKTtcbn07XG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50LFxuICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKGVsZW1lbnQpLFxuICAgIGJvZHlQcm9wZXJ0eSA9IGRlc2NyaXB0b3IuYm9keVByb3BlcnR5O1xuICBpZiAoIWJvZHlQcm9wZXJ0eSkge1xuICAgIHRocm93IGVycm9yKCd1bmV4cGVjdGVkIGJvZHkgdGV4dCA8JyArIHRleHQgKyAnPicpO1xuICB9XG4gIEJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0LmNhbGwodGhpcywgdGV4dCk7XG59O1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5ib2R5LFxuICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQsXG4gICAgZGVzY3JpcHRvciA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCksXG4gICAgYm9keVByb3BlcnR5ID0gZGVzY3JpcHRvci5ib2R5UHJvcGVydHk7XG4gIGlmIChib2R5UHJvcGVydHkgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlID0gY29lcmNlVHlwZShib2R5UHJvcGVydHkudHlwZSwgdmFsdWUpO1xuICAgIGVsZW1lbnQuc2V0KGJvZHlQcm9wZXJ0eS5uYW1lLCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmcm9tIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IG5vZGUgdGhlIHhtbCBub2RlXG4gKi9cbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXMsXG4gICAgVHlwZSA9IHRoaXMudHlwZSxcbiAgICBkZXNjcmlwdG9yID0gZ2V0TW9kZGxlRGVzY3JpcHRvcihUeXBlKSxcbiAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgIGluc3RhbmNlID0gbmV3IFR5cGUoe30pLFxuICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICBwcm9wTmFtZU5zO1xuICBmb3JFYWNoKGF0dHJpYnV0ZXMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgIHZhciBwcm9wID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW25hbWVdLFxuICAgICAgdmFsdWVzO1xuICAgIGlmIChwcm9wICYmIHByb3AuaXNSZWZlcmVuY2UpIHtcbiAgICAgIGlmICghcHJvcC5pc01hbnkpIHtcbiAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgIGVsZW1lbnQ6IGluc3RhbmNlLFxuICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXG4gICAgICAgICAgaWQ6IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSURSRUZTOiBwYXJzZSByZWZlcmVuY2VzIGFzIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3RcbiAgICAgICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yRWFjaCh2YWx1ZXMsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgY29udGV4dC5hZGRSZWZlcmVuY2Uoe1xuICAgICAgICAgICAgZWxlbWVudDogaW5zdGFuY2UsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcC5ucy5uYW1lLFxuICAgICAgICAgICAgaWQ6IHZcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHZhbHVlID0gY29lcmNlVHlwZShwcm9wLnR5cGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3htbG5zJykge1xuICAgICAgICBuYW1lID0gJzonICsgbmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BOYW1lTnMgPSBwYXJzZU5hbWUobmFtZSwgZGVzY3JpcHRvci5ucy5wcmVmaXgpO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gYSB3ZWxsLWtub3duIG5hbWVzcGFjZVxuICAgICAgICAvLyBpZiB0aGF0IGlzIHRoZSBjYXNlIHdlIGVtaXQgYSB3YXJuaW5nIHRvIGluZGljYXRlIHBvdGVudGlhbCBtaXN1c2VcbiAgICAgICAgaWYgKG1vZGVsLmdldFBhY2thZ2UocHJvcE5hbWVOcy5wcmVmaXgpKSB7XG4gICAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICd1bmtub3duIGF0dHJpYnV0ZSA8JyArIG5hbWUgKyAnPicsXG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluc3RhbmNlLnNldChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufTtcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUZvck5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcbiAgdmFyIG5hbWVOcyA9IHBhcnNlTmFtZShuYW1lKTtcbiAgdmFyIHR5cGUgPSB0aGlzLnR5cGUsXG4gICAgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgIGRlc2NyaXB0b3IgPSBnZXRNb2RkbGVEZXNjcmlwdG9yKHR5cGUpO1xuICB2YXIgcHJvcGVydHlOYW1lID0gbmFtZU5zLm5hbWUsXG4gICAgcHJvcGVydHkgPSBkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHlOYW1lXTtcblxuICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuXG4gIGlmIChwcm9wZXJ0eSAmJiAhcHJvcGVydHkuaXNBdHRyKSB7XG4gICAgY29uc3Qgc2VyaWFsaXphdGlvblR5cGUgPSBnZXRTZXJpYWxpemF0aW9uVHlwZShwcm9wZXJ0eSk7XG4gICAgaWYgKHNlcmlhbGl6YXRpb25UeXBlKSB7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZU5hbWUgPSBub2RlLmF0dHJpYnV0ZXNbc2VyaWFsaXphdGlvblR5cGVdO1xuXG4gICAgICAvLyB0eXBlIGlzIG9wdGlvbmFsLCBpZiBpdCBkb2VzIG5vdCBleGlzdHMgdGhlXG4gICAgICAvLyBkZWZhdWx0IHR5cGUgaXMgYXNzdW1lZFxuICAgICAgaWYgKGVsZW1lbnRUeXBlTmFtZSkge1xuICAgICAgICAvLyBjb252ZXJ0IHRoZSBwcmVmaXggdXNlZCB0byB0aGUgbWFwcGVkIGZvcm0sIGJ1dCBhbHNvXG4gICAgICAgIC8vIHRha2UgcG9zc2libGUgdHlwZSBwcmVmaXhlcyBmcm9tIFhNTFxuICAgICAgICAvLyBpbnRvIGFjY291bnQsIGkuZS46IHhzaTp0eXBlPVwidHtBY3R1YWxUeXBlfVwiLFxuICAgICAgICBjb25zdCBub3JtYWxpemVkVHlwZU5hbWUgPSBub3JtYWxpemVUeXBlTmFtZShlbGVtZW50VHlwZU5hbWUsIG5vZGUubnMsIG1vZGVsKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKG5vcm1hbGl6ZWRUeXBlTmFtZSk7XG4gICAgICAgIHJldHVybiBhc3NpZ24oe30sIHByb3BlcnR5LCB7XG4gICAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50VHlwZSkubmFtZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggZm9yIHByb3BlcnRpZXMgYnkgbmFtZSBmaXJzdFxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuICB2YXIgcGtnID0gbW9kZWwuZ2V0UGFja2FnZShuYW1lTnMucHJlZml4KTtcbiAgaWYgKHBrZykge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlTmFtZSA9IGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IG1vZGVsLmdldFR5cGUoZWxlbWVudFR5cGVOYW1lKTtcblxuICAgIC8vIHNlYXJjaCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzIGxhdGVyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiAhcC5pc1ZpcnR1YWwgJiYgIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgZWxlbWVudFR5cGUuaGFzVHlwZShwLnR5cGUpO1xuICAgIH0pO1xuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcHJvcGVydHksIHtcbiAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZGxlRGVzY3JpcHRvcihlbGVtZW50VHlwZSkubmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBhcnNlIHVua25vd24gZWxlbWVudCAobWF5YmUgZXh0ZW5zaW9uKVxuICAgIHByb3BlcnR5ID0gZmluZChkZXNjcmlwdG9yLnByb3BlcnRpZXMsIGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgcC50eXBlID09PSAnRWxlbWVudCc7XG4gICAgfSk7XG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgfVxuICB9XG4gIHRocm93IGVycm9yKCd1bnJlY29nbml6ZWQgZWxlbWVudCA8JyArIG5hbWVOcy5uYW1lICsgJz4nKTtcbn07XG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAnRWxlbWVudERlc2NyaXB0b3JbJyArIGdldE1vZGRsZURlc2NyaXB0b3IodGhpcy50eXBlKS5uYW1lICsgJ10nO1xufTtcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS52YWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAocHJvcGVydHlEZXNjLCBlbGVtZW50KSB7XG4gIHJldHVybiBuZXcgVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudCk7XG59O1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnJlZmVyZW5jZUhhbmRsZXIgPSBmdW5jdGlvbiAocHJvcGVydHlEZXNjKSB7XG4gIHJldHVybiBuZXcgUmVmZXJlbmNlSGFuZGxlcihwcm9wZXJ0eURlc2MsIHRoaXMuY29udGV4dCk7XG59O1xuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbiAodHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ0VsZW1lbnQnKSB7XG4gICAgcmV0dXJuIG5ldyBHZW5lcmljRWxlbWVudEhhbmRsZXIodGhpcy5tb2RlbCwgdHlwZSwgdGhpcy5jb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsIHR5cGUsIHRoaXMuY29udGV4dCk7XG4gIH1cbn07XG5cbi8qKlxuICogSGFuZGxlIHRoZSBjaGlsZCBlbGVtZW50IHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBub2RlIHRoZSB4bWwgbm9kZVxuICovXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlQ2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xuICB2YXIgcHJvcGVydHlEZXNjLCB0eXBlLCBlbGVtZW50LCBjaGlsZEhhbmRsZXI7XG4gIHByb3BlcnR5RGVzYyA9IHRoaXMuZ2V0UHJvcGVydHlGb3JOb2RlKG5vZGUpO1xuICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICB0eXBlID0gcHJvcGVydHlEZXNjLmVmZmVjdGl2ZVR5cGUgfHwgcHJvcGVydHlEZXNjLnR5cGU7XG4gIGlmIChpc1NpbXBsZSh0eXBlKSkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlSGFuZGxlcihwcm9wZXJ0eURlc2MsIGVsZW1lbnQpO1xuICB9XG4gIGlmIChwcm9wZXJ0eURlc2MuaXNSZWZlcmVuY2UpIHtcbiAgICBjaGlsZEhhbmRsZXIgPSB0aGlzLnJlZmVyZW5jZUhhbmRsZXIocHJvcGVydHlEZXNjKS5oYW5kbGVOb2RlKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkSGFuZGxlciA9IHRoaXMuaGFuZGxlcih0eXBlKS5oYW5kbGVOb2RlKG5vZGUpO1xuICB9XG4gIHZhciBuZXdFbGVtZW50ID0gY2hpbGRIYW5kbGVyLmVsZW1lbnQ7XG5cbiAgLy8gY2hpbGQgaGFuZGxlcyBtYXkgZGVjaWRlIHRvIHNraXAgZWxlbWVudHNcbiAgLy8gYnkgbm90IHJldHVybmluZyBhbnl0aGluZ1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb3BlcnR5RGVzYy5pc01hbnkpIHtcbiAgICAgIGVsZW1lbnQuZ2V0KHByb3BlcnR5RGVzYy5uYW1lKS5wdXNoKG5ld0VsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnNldChwcm9wZXJ0eURlc2MubmFtZSwgbmV3RWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eURlc2MuaXNSZWZlcmVuY2UpIHtcbiAgICAgIGFzc2lnbihuZXdFbGVtZW50LCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb250ZXh0LmFkZFJlZmVyZW5jZShuZXdFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXN0YWJsaXNoIGNoaWxkIC0+IHBhcmVudCByZWxhdGlvbnNoaXBcbiAgICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZEhhbmRsZXI7XG59O1xuXG4vKipcbiAqIEFuIGVsZW1lbnQgaGFuZGxlciB0aGF0IHBlcmZvcm1zIHNwZWNpYWwgdmFsaWRhdGlvblxuICogdG8gZW5zdXJlIHRoZSBub2RlIGl0IGdldHMgaW5pdGlhbGl6ZWQgd2l0aCBtYXRjaGVzXG4gKiB0aGUgaGFuZGxlcnMgdHlwZSAobmFtZXNwYWNlIHdpc2UpLlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlfSBtb2RlbFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVOYW1lXG4gKiBAcGFyYW0ge0NvbnRleHR9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gUm9vdEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xuICBFbGVtZW50SGFuZGxlci5jYWxsKHRoaXMsIG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCk7XG59XG5Sb290RWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpLFxuICAgIG1vZGVsID0gdGhpcy5tb2RlbCxcbiAgICB0eXBlID0gdGhpcy50eXBlLFxuICAgIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeCksXG4gICAgdHlwZU5hbWUgPSBwa2cgJiYgYWxpYXNUb05hbWUobmFtZU5zLCBwa2cpIHx8IG5hbWU7XG5cbiAgLy8gdmVyaWZ5IHRoZSBjb3JyZWN0IG5hbWVzcGFjZSBpZiB3ZSBwYXJzZVxuICAvLyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgaGFuZGxlciB0cmVlXG4gIC8vXG4gIC8vIHRoaXMgZW5zdXJlcyB3ZSBkb24ndCBtaXN0YWtlbmx5IGltcG9ydCB3cm9uZyBuYW1lc3BhY2UgZWxlbWVudHNcbiAgaWYgKCF0eXBlLmhhc1R5cGUodHlwZU5hbWUpKSB7XG4gICAgdGhyb3cgZXJyb3IoJ3VuZXhwZWN0ZWQgZWxlbWVudCA8JyArIG5vZGUub3JpZ2luYWxOYW1lICsgJz4nKTtcbiAgfVxuICByZXR1cm4gRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlKTtcbn07XG5mdW5jdGlvbiBHZW5lcmljRWxlbWVudEhhbmRsZXIobW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KSB7XG4gIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cbkdlbmVyaWNFbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpO1xuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIG5hbWUgPSBub2RlLm5hbWUsXG4gICAgbnMgPSBwYXJzZU5hbWUobmFtZSksXG4gICAgcHJlZml4ID0gbnMucHJlZml4LFxuICAgIHVyaSA9IG5vZGUubnNbcHJlZml4ICsgJyR1cmknXSxcbiAgICBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdGVBbnkobmFtZSwgdXJpLCBhdHRyaWJ1dGVzKTtcbn07XG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUNoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgdmFyIGhhbmRsZXIgPSBuZXcgR2VuZXJpY0VsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsICdFbGVtZW50JywgdGhpcy5jb250ZXh0KS5oYW5kbGVOb2RlKG5vZGUpLFxuICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gIHZhciBuZXdFbGVtZW50ID0gaGFuZGxlci5lbGVtZW50LFxuICAgIGNoaWxkcmVuO1xuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGRyZW4gPSBlbGVtZW50LiRjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuIHx8IFtdO1xuICAgIGNoaWxkcmVuLnB1c2gobmV3RWxlbWVudCk7XG5cbiAgICAvLyBlc3RhYmxpc2ggY2hpbGQgLT4gcGFyZW50IHJlbGF0aW9uc2hpcFxuICAgIG5ld0VsZW1lbnQuJHBhcmVudCA9IGVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZXI7XG59O1xuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJvZHkpIHtcbiAgICB0aGlzLmVsZW1lbnQuJGJvZHkgPSB0aGlzLmJvZHk7XG4gIH1cbn07XG5cbi8qKlxuICogQSByZWFkZXIgZm9yIGEgbWV0YS1tb2RlbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge01vZGVsfSBvcHRpb25zLm1vZGVsIHVzZWQgdG8gcmVhZCB4bWwgZmlsZXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9ucy5sYXggd2hldGhlciB0byBtYWtlIHBhcnNlIGVycm9ycyB3YXJuaW5nc1xuICovXG5mdW5jdGlvbiBSZWFkZXIob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIE1vZGRsZSkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBtb2RlbDogb3B0aW9uc1xuICAgIH07XG4gIH1cbiAgYXNzaWduKHRoaXMsIHtcbiAgICBsYXg6IGZhbHNlXG4gIH0sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFRoZSBmcm9tWE1MIHJlc3VsdC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZVJlc3VsdFxuICpcbiAqIEBwcm9wZXJ0eSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8T2JqZWN0Pn0gcmVmZXJlbmNlc1xuICogQHByb3BlcnR5IHtBcnJheTxFcnJvcj59IHdhcm5pbmdzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZWxlbWVudHNCeUlkIC0gYSBtYXBwaW5nIGNvbnRhaW5pbmcgZWFjaCBJRCAtPiBNb2RkbGVFbGVtZW50XG4gKi9cblxuLyoqXG4gKiBUaGUgZnJvbVhNTCByZXN1bHQuXG4gKlxuICogQHR5cGVkZWYge0Vycm9yfSBQYXJzZUVycm9yXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxFcnJvcj59IHdhcm5pbmdzXG4gKi9cblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gWE1MIGludG8gYSBtb2RkbGUgZG9jdW1lbnQgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30geG1sXG4gKiBAcGFyYW0ge0VsZW1lbnRIYW5kbGVyfE9iamVjdH0gb3B0aW9ucyBvciByb290SGFuZGxlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlUmVzdWx0LCBQYXJzZUVycm9yPn1cbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5mcm9tWE1MID0gZnVuY3Rpb24gKHhtbCwgb3B0aW9ucywgZG9uZSkge1xuICB2YXIgcm9vdEhhbmRsZXIgPSBvcHRpb25zLnJvb3RIYW5kbGVyO1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVsZW1lbnRIYW5kbGVyKSB7XG4gICAgLy8gcm9vdCBoYW5kbGVyIHBhc3NlZCB2aWEgKHhtbCwgeyByb290SGFuZGxlcjogRWxlbWVudEhhbmRsZXIgfSwgLi4uKVxuICAgIHJvb3RIYW5kbGVyID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcm9vdEhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCAnc29tZVN0cmluZycsIC4uLilcbiAgICAgIHJvb3RIYW5kbGVyID0gdGhpcy5oYW5kbGVyKG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvb3RIYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcm9vdEhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCB7IHJvb3RIYW5kbGVyOiAnc29tZVN0cmluZycgfSwgLi4uKVxuICAgICAgcm9vdEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIocm9vdEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsLFxuICAgIGxheCA9IHRoaXMubGF4O1xuICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KGFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgcm9vdEhhbmRsZXI6IHJvb3RIYW5kbGVyXG4gICAgfSkpLFxuICAgIHBhcnNlciA9IG5ldyBQYXJzZXIoe1xuICAgICAgcHJveHk6IHRydWVcbiAgICB9KSxcbiAgICBzdGFjayA9IGNyZWF0ZVN0YWNrKCk7XG4gIHJvb3RIYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gIC8vIHB1c2ggcm9vdCBoYW5kbGVyXG4gIHN0YWNrLnB1c2gocm9vdEhhbmRsZXIpO1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSAge0Vycm9yfSBlcnJcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGdldENvbnRleHRcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gbGF4XG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgaGFuZGxlZFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpIHtcbiAgICB2YXIgY3R4ID0gZ2V0Q29udGV4dCgpO1xuICAgIHZhciBsaW5lID0gY3R4LmxpbmUsXG4gICAgICBjb2x1bW4gPSBjdHguY29sdW1uLFxuICAgICAgZGF0YSA9IGN0eC5kYXRhO1xuXG4gICAgLy8gd2UgcmVjZWl2ZSB0aGUgZnVsbCBjb250ZXh0IGRhdGEgaGVyZSxcbiAgICAvLyBmb3IgZWxlbWVudHMgdHJpbSBkb3duIHRoZSBpbmZvcm1hdGlvblxuICAgIC8vIHRvIHRoZSB0YWcgbmFtZSwgb25seVxuICAgIGlmIChkYXRhLmNoYXJBdCgwKSA9PT0gJzwnICYmIGRhdGEuaW5kZXhPZignICcpICE9PSAtMSkge1xuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgZGF0YS5pbmRleE9mKCcgJykpICsgJz4nO1xuICAgIH1cbiAgICB2YXIgbWVzc2FnZSA9ICd1bnBhcnNhYmxlIGNvbnRlbnQgJyArIChkYXRhID8gZGF0YSArICcgJyA6ICcnKSArICdkZXRlY3RlZFxcblxcdCcgKyAnbGluZTogJyArIGxpbmUgKyAnXFxuXFx0JyArICdjb2x1bW46ICcgKyBjb2x1bW4gKyAnXFxuXFx0JyArICduZXN0ZWQgZXJyb3I6ICcgKyBlcnIubWVzc2FnZTtcbiAgICBpZiAobGF4KSB7XG4gICAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIsIGdldENvbnRleHQpIHtcbiAgICAvLyBqdXN0IGxpa2UgaGFuZGxpbmcgZXJyb3JzIGluIDxsYXg9dHJ1ZT4gbW9kZVxuICAgIHJldHVybiBoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgY29sbGVjdGVkIHJlZmVyZW5jZXMgb24gcGFyc2UgZW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZmVyZW5jZXMoKSB7XG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IGNvbnRleHQuZWxlbWVudHNCeUlkO1xuICAgIHZhciByZWZlcmVuY2VzID0gY29udGV4dC5yZWZlcmVuY2VzO1xuICAgIHZhciBpLCByO1xuICAgIGZvciAoaSA9IDA7IHIgPSByZWZlcmVuY2VzW2ldOyBpKyspIHtcbiAgICAgIHZhciBlbGVtZW50ID0gci5lbGVtZW50O1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IGVsZW1lbnRzQnlJZFtyLmlkXTtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IGdldE1vZGRsZURlc2NyaXB0b3IoZWxlbWVudCkucHJvcGVydGllc0J5TmFtZVtyLnByb3BlcnR5XTtcbiAgICAgIGlmICghcmVmZXJlbmNlKSB7XG4gICAgICAgIGNvbnRleHQuYWRkV2FybmluZyh7XG4gICAgICAgICAgbWVzc2FnZTogJ3VucmVzb2x2ZWQgcmVmZXJlbmNlIDwnICsgci5pZCArICc+JyxcbiAgICAgICAgICBlbGVtZW50OiByLmVsZW1lbnQsXG4gICAgICAgICAgcHJvcGVydHk6IHIucHJvcGVydHksXG4gICAgICAgICAgdmFsdWU6IHIuaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydHkuaXNNYW55KSB7XG4gICAgICAgIHZhciBjb2xsZWN0aW9uID0gZWxlbWVudC5nZXQocHJvcGVydHkubmFtZSksXG4gICAgICAgICAgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKHIpO1xuXG4gICAgICAgIC8vIHdlIHJlcGxhY2UgYW4gZXhpc3RpbmcgcGxhY2UgaG9sZGVyIChpZHggIT0gLTEpIG9yXG4gICAgICAgIC8vIGFwcGVuZCB0byB0aGUgY29sbGVjdGlvbiBpbnN0ZWFkXG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgaWR4ID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAvLyByZW1vdmUgdW5yZXNvbHZhYmxlIHJlZmVyZW5jZVxuICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIG9yIHVwZGF0ZSByZWZlcmVuY2UgaW4gY29sbGVjdGlvblxuICAgICAgICAgIGNvbGxlY3Rpb25baWR4XSA9IHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXQocHJvcGVydHkubmFtZSwgcmVmZXJlbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgc3RhY2sucG9wKCkuaGFuZGxlRW5kKCk7XG4gIH1cbiAgdmFyIFBSRUFNQkxFX1NUQVJUX1BBVFRFUk4gPSAvXjxcXD94bWwgL2k7XG4gIHZhciBFTkNPRElOR19QQVRURVJOID0gLyBlbmNvZGluZz1cIihbXlwiXSspXCIvaTtcbiAgdmFyIFVURl84X1BBVFRFUk4gPSAvXnV0Zi04JC9pO1xuICBmdW5jdGlvbiBoYW5kbGVRdWVzdGlvbihxdWVzdGlvbikge1xuICAgIGlmICghUFJFQU1CTEVfU1RBUlRfUEFUVEVSTi50ZXN0KHF1ZXN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSBFTkNPRElOR19QQVRURVJOLmV4ZWMocXVlc3Rpb24pO1xuICAgIHZhciBlbmNvZGluZyA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIGlmICghZW5jb2RpbmcgfHwgVVRGXzhfUEFUVEVSTi50ZXN0KGVuY29kaW5nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZXh0LmFkZFdhcm5pbmcoe1xuICAgICAgbWVzc2FnZTogJ3Vuc3VwcG9ydGVkIGRvY3VtZW50IGVuY29kaW5nIDwnICsgZW5jb2RpbmcgKyAnPiwgJyArICdmYWxsaW5nIGJhY2sgdG8gVVRGLTgnXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlT3Blbihub2RlLCBnZXRDb250ZXh0KSB7XG4gICAgdmFyIGhhbmRsZXIgPSBzdGFjay5wZWVrKCk7XG4gICAgdHJ5IHtcbiAgICAgIHN0YWNrLnB1c2goaGFuZGxlci5oYW5kbGVOb2RlKG5vZGUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIGxheCkpIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgTm9vcEhhbmRsZXIoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpIHtcbiAgICB0cnkge1xuICAgICAgc3RhY2sucGVlaygpLmhhbmRsZVRleHQodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYW5kbGVXYXJuaW5nKGVyciwgZ2V0Q29udGV4dCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZVRleHQodGV4dCwgZ2V0Q29udGV4dCkge1xuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2Ugb25seSBub2RlcywgaS5lLiBiZWZvcmVcbiAgICAvLyA8IUNEQVRBWyAuLi4gXT4gc2VjdGlvbnMgYW5kIGluIGJldHdlZW4gdGFnc1xuXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYW5kbGVDRGF0YSh0ZXh0LCBnZXRDb250ZXh0KTtcbiAgfVxuICB2YXIgdXJpTWFwID0gbW9kZWwuZ2V0UGFja2FnZXMoKS5yZWR1Y2UoZnVuY3Rpb24gKHVyaU1hcCwgcCkge1xuICAgIHVyaU1hcFtwLnVyaV0gPSBwLnByZWZpeDtcbiAgICByZXR1cm4gdXJpTWFwO1xuICB9LCBPYmplY3QuZW50cmllcyhERUZBVUxUX05TX01BUCkucmVkdWNlKGZ1bmN0aW9uIChtYXAsIFtwcmVmaXgsIHVybF0pIHtcbiAgICBtYXBbdXJsXSA9IHByZWZpeDtcbiAgICByZXR1cm4gbWFwO1xuICB9LCBtb2RlbC5jb25maWcgJiYgbW9kZWwuY29uZmlnLm5zTWFwIHx8IHt9KSk7XG4gIHBhcnNlci5ucyh1cmlNYXApLm9uKCdvcGVuVGFnJywgZnVuY3Rpb24gKG9iaiwgZGVjb2RlU3RyLCBzZWxmQ2xvc2luZywgZ2V0Q29udGV4dCkge1xuICAgIC8vIGdyYWNlZnVsbHkgaGFuZGxlIHVucGFyc2FibGUgYXR0cmlidXRlcyAoYXR0cnM9ZmFsc2UpXG4gICAgdmFyIGF0dHJzID0gb2JqLmF0dHJzIHx8IHt9O1xuICAgIHZhciBkZWNvZGVkQXR0cnMgPSBPYmplY3Qua2V5cyhhdHRycykucmVkdWNlKGZ1bmN0aW9uIChkLCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVN0cihhdHRyc1trZXldKTtcbiAgICAgIGRba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGQ7XG4gICAgfSwge30pO1xuICAgIHZhciBub2RlID0ge1xuICAgICAgbmFtZTogb2JqLm5hbWUsXG4gICAgICBvcmlnaW5hbE5hbWU6IG9iai5vcmlnaW5hbE5hbWUsXG4gICAgICBhdHRyaWJ1dGVzOiBkZWNvZGVkQXR0cnMsXG4gICAgICBuczogb2JqLm5zXG4gICAgfTtcbiAgICBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpO1xuICB9KS5vbigncXVlc3Rpb24nLCBoYW5kbGVRdWVzdGlvbikub24oJ2Nsb3NlVGFnJywgaGFuZGxlQ2xvc2UpLm9uKCdjZGF0YScsIGhhbmRsZUNEYXRhKS5vbigndGV4dCcsIGZ1bmN0aW9uICh0ZXh0LCBkZWNvZGVFbnRpdGllcywgZ2V0Q29udGV4dCkge1xuICAgIGhhbmRsZVRleHQoZGVjb2RlRW50aXRpZXModGV4dCksIGdldENvbnRleHQpO1xuICB9KS5vbignZXJyb3InLCBoYW5kbGVFcnJvcikub24oJ3dhcm4nLCBoYW5kbGVXYXJuaW5nKTtcblxuICAvLyBhc3luYyBYTUwgcGFyc2luZyB0byBtYWtlIHN1cmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudFxuICAvLyAobm9kZSBvciBicm93ZXIpIGlzIGtlcHQgcmVzcG9uc2l2ZSBhbmQgdGhhdCBjZXJ0YWluIG9wdGltaXphdGlvblxuICAvLyBzdHJhdGVnaWVzIGNhbiBraWNrIGluLlxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBlcnI7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZSh4bWwpO1xuICAgICAgcmVzb2x2ZVJlZmVyZW5jZXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnIgPSBlO1xuICAgIH1cbiAgICB2YXIgcm9vdEVsZW1lbnQgPSByb290SGFuZGxlci5lbGVtZW50O1xuICAgIGlmICghZXJyICYmICFyb290RWxlbWVudCkge1xuICAgICAgZXJyID0gZXJyb3IoJ2ZhaWxlZCB0byBwYXJzZSBkb2N1bWVudCBhcyA8JyArIHJvb3RIYW5kbGVyLnR5cGUuJGRlc2NyaXB0b3IubmFtZSArICc+Jyk7XG4gICAgfVxuICAgIHZhciB3YXJuaW5ncyA9IGNvbnRleHQud2FybmluZ3M7XG4gICAgdmFyIHJlZmVyZW5jZXMgPSBjb250ZXh0LnJlZmVyZW5jZXM7XG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IGNvbnRleHQuZWxlbWVudHNCeUlkO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVyci53YXJuaW5ncyA9IHdhcm5pbmdzO1xuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgIHJvb3RFbGVtZW50OiByb290RWxlbWVudCxcbiAgICAgICAgZWxlbWVudHNCeUlkOiBlbGVtZW50c0J5SWQsXG4gICAgICAgIHJlZmVyZW5jZXM6IHJlZmVyZW5jZXMsXG4gICAgICAgIHdhcm5pbmdzOiB3YXJuaW5nc1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5SZWFkZXIucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmV3IFJvb3RFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCBuYW1lKTtcbn07XG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gY3JlYXRlU3RhY2soKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RhY2ssICdwZWVrJywge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdGFjaztcbn1cbnZhciBYTUxfUFJFQU1CTEUgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuJztcbnZhciBFU0NBUEVfQVRUUl9DSEFSUyA9IC88fD58J3xcInwmfFxcblxccnxcXG4vZztcbnZhciBFU0NBUEVfQ0hBUlMgPSAvPHw+fCYvZztcbmZ1bmN0aW9uIE5hbWVzcGFjZXMocGFyZW50KSB7XG4gIHRoaXMucHJlZml4TWFwID0ge307XG4gIHRoaXMudXJpTWFwID0ge307XG4gIHRoaXMudXNlZCA9IHt9O1xuICB0aGlzLndlbGxrbm93biA9IFtdO1xuICB0aGlzLmN1c3RvbSA9IFtdO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5kZWZhdWx0UHJlZml4TWFwID0gcGFyZW50ICYmIHBhcmVudC5kZWZhdWx0UHJlZml4TWFwIHx8IHt9O1xufVxuTmFtZXNwYWNlcy5wcm90b3R5cGUubWFwRGVmYXVsdFByZWZpeGVzID0gZnVuY3Rpb24gKGRlZmF1bHRQcmVmaXhNYXApIHtcbiAgdGhpcy5kZWZhdWx0UHJlZml4TWFwID0gZGVmYXVsdFByZWZpeE1hcDtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5kZWZhdWx0VXJpQnlQcmVmaXggPSBmdW5jdGlvbiAocHJlZml4KSB7XG4gIHJldHVybiB0aGlzLmRlZmF1bHRQcmVmaXhNYXBbcHJlZml4XTtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5ieVVyaSA9IGZ1bmN0aW9uICh1cmkpIHtcbiAgcmV0dXJuIHRoaXMudXJpTWFwW3VyaV0gfHwgdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuYnlVcmkodXJpKTtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobnMsIGlzV2VsbGtub3duKSB7XG4gIHRoaXMudXJpTWFwW25zLnVyaV0gPSBucztcbiAgaWYgKGlzV2VsbGtub3duKSB7XG4gICAgdGhpcy53ZWxsa25vd24ucHVzaChucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jdXN0b20ucHVzaChucyk7XG4gIH1cbiAgdGhpcy5tYXBQcmVmaXgobnMucHJlZml4LCBucy51cmkpO1xufTtcbk5hbWVzcGFjZXMucHJvdG90eXBlLnVyaUJ5UHJlZml4ID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICByZXR1cm4gdGhpcy5wcmVmaXhNYXBbcHJlZml4IHx8ICd4bWxucyddIHx8IHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LnVyaUJ5UHJlZml4KHByZWZpeCk7XG59O1xuTmFtZXNwYWNlcy5wcm90b3R5cGUubWFwUHJlZml4ID0gZnVuY3Rpb24gKHByZWZpeCwgdXJpKSB7XG4gIHRoaXMucHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXSA9IHVyaTtcbn07XG5OYW1lc3BhY2VzLnByb3RvdHlwZS5nZXROU0tleSA9IGZ1bmN0aW9uIChucykge1xuICByZXR1cm4gbnMucHJlZml4ICE9PSB1bmRlZmluZWQgPyBucy51cmkgKyAnfCcgKyBucy5wcmVmaXggOiBucy51cmk7XG59O1xuTmFtZXNwYWNlcy5wcm90b3R5cGUubG9nVXNlZCA9IGZ1bmN0aW9uIChucykge1xuICB2YXIgdXJpID0gbnMudXJpO1xuICB2YXIgbnNLZXkgPSB0aGlzLmdldE5TS2V5KG5zKTtcbiAgdGhpcy51c2VkW25zS2V5XSA9IHRoaXMuYnlVcmkodXJpKTtcblxuICAvLyBJbmZvcm0gcGFyZW50IHJlY3Vyc2l2ZWx5IGFib3V0IHRoZSB1c2FnZSBvZiB0aGlzIE5TXG4gIGlmICh0aGlzLnBhcmVudCkge1xuICAgIHRoaXMucGFyZW50LmxvZ1VzZWQobnMpO1xuICB9XG59O1xuTmFtZXNwYWNlcy5wcm90b3R5cGUuZ2V0VXNlZCA9IGZ1bmN0aW9uIChucykge1xuICB2YXIgYWxsTnMgPSBbXS5jb25jYXQodGhpcy53ZWxsa25vd24sIHRoaXMuY3VzdG9tKTtcbiAgcmV0dXJuIGFsbE5zLmZpbHRlcihucyA9PiB7XG4gICAgdmFyIG5zS2V5ID0gdGhpcy5nZXROU0tleShucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlZFtuc0tleV07XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGxvd2VyKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuZnVuY3Rpb24gbmFtZVRvQWxpYXMobmFtZSwgcGtnKSB7XG4gIGlmIChoYXNMb3dlckNhc2VBbGlhcyhwa2cpKSB7XG4gICAgcmV0dXJuIGxvd2VyKG5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBuc05hbWUobnMpIHtcbiAgaWYgKGlzU3RyaW5nKG5zKSkge1xuICAgIHJldHVybiBucztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKG5zLnByZWZpeCA/IG5zLnByZWZpeCArICc6JyA6ICcnKSArIG5zLmxvY2FsTmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TnNBdHRycyhuYW1lc3BhY2VzKSB7XG4gIHJldHVybiBuYW1lc3BhY2VzLmdldFVzZWQoKS5maWx0ZXIoZnVuY3Rpb24gKG5zKSB7XG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBidWlsdCBpbiA8eG1sPiBuYW1lc3BhY2VcbiAgICByZXR1cm4gbnMucHJlZml4ICE9PSAneG1sJztcbiAgfSkubWFwKGZ1bmN0aW9uIChucykge1xuICAgIHZhciBuYW1lID0gJ3htbG5zJyArIChucy5wcmVmaXggPyAnOicgKyBucy5wcmVmaXggOiAnJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbnMudXJpXG4gICAgfTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50TnMobnMsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljKSB7XG4gICAgcmV0dXJuIGFzc2lnbih7XG4gICAgICBsb2NhbE5hbWU6IGRlc2NyaXB0b3IubnMubG9jYWxOYW1lXG4gICAgfSwgbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhc3NpZ24oe1xuICAgICAgbG9jYWxOYW1lOiBuYW1lVG9BbGlhcyhkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSwgZGVzY3JpcHRvci4kcGtnKVxuICAgIH0sIG5zKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlOcyhucywgZGVzY3JpcHRvcikge1xuICByZXR1cm4gYXNzaWduKHtcbiAgICBsb2NhbE5hbWU6IGRlc2NyaXB0b3IubnMubG9jYWxOYW1lXG4gIH0sIG5zKTtcbn1cbmZ1bmN0aW9uIGdldFNlcmlhbGl6YWJsZVByb3BlcnRpZXMoZWxlbWVudCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3I7XG4gIHJldHVybiBmaWx0ZXIoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbiAocCkge1xuICAgIHZhciBuYW1lID0gcC5uYW1lO1xuICAgIGlmIChwLmlzVmlydHVhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgZGVmYXVsdHNcbiAgICBpZiAoIWhhcyhlbGVtZW50LCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50W25hbWVdO1xuXG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBkZWZhdWx0IGVxdWFsc1xuICAgIGlmICh2YWx1ZSA9PT0gcC5kZWZhdWx0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gZG8gbm90IHNlcmlhbGl6ZSBudWxsIHByb3BlcnRpZXNcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHAuaXNNYW55ID8gdmFsdWUubGVuZ3RoIDogdHJ1ZTtcbiAgfSk7XG59XG52YXIgRVNDQVBFX0FUVFJfTUFQID0ge1xuICAnXFxuJzogJyMxMCcsXG4gICdcXG5cXHInOiAnIzEwJyxcbiAgJ1wiJzogJyMzNCcsXG4gICdcXCcnOiAnIzM5JyxcbiAgJzwnOiAnIzYwJyxcbiAgJz4nOiAnIzYyJyxcbiAgJyYnOiAnIzM4J1xufTtcbnZhciBFU0NBUEVfTUFQID0ge1xuICAnPCc6ICdsdCcsXG4gICc+JzogJ2d0JyxcbiAgJyYnOiAnYW1wJ1xufTtcbmZ1bmN0aW9uIGVzY2FwZShzdHIsIGNoYXJQYXR0ZXJuLCByZXBsYWNlTWFwKSB7XG4gIC8vIGVuc3VyZSB3ZSBhcmUgaGFuZGxpbmcgc3RyaW5ncyBoZXJlXG4gIHN0ciA9IGlzU3RyaW5nKHN0cikgPyBzdHIgOiAnJyArIHN0cjtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNoYXJQYXR0ZXJuLCBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiAnJicgKyByZXBsYWNlTWFwW3NdICsgJzsnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgYXR0cmlidXRlIHRvIG5vdCBjb250YWluIGFueSBiYWQgdmFsdWVzIChsaW5lIGJyZWFrcywgJ1wiJywgLi4uKVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBlc2NhcGVcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUF0dHIoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQVRUUl9DSEFSUywgRVNDQVBFX0FUVFJfTUFQKTtcbn1cbmZ1bmN0aW9uIGVzY2FwZUJvZHkoc3RyKSB7XG4gIHJldHVybiBlc2NhcGUoc3RyLCBFU0NBUEVfQ0hBUlMsIEVTQ0FQRV9NQVApO1xufVxuZnVuY3Rpb24gZmlsdGVyQXR0cmlidXRlcyhwcm9wcykge1xuICByZXR1cm4gZmlsdGVyKHByb3BzLCBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwLmlzQXR0cjtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJDb250YWluZWQocHJvcHMpIHtcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gIXAuaXNBdHRyO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFJlZmVyZW5jZVNlcmlhbGl6ZXIodGFnTmFtZSkge1xuICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xufVxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICByZXR1cm4gdGhpcztcbn07XG5SZWZlcmVuY2VTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uICh3cml0ZXIpIHtcbiAgd3JpdGVyLmFwcGVuZEluZGVudCgpLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUgKyAnPicgKyB0aGlzLmVsZW1lbnQuaWQgKyAnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKS5hcHBlbmROZXdMaW5lKCk7XG59O1xuZnVuY3Rpb24gQm9keVNlcmlhbGl6ZXIoKSB7fVxuQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVZhbHVlID0gQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24gKHdyaXRlcikge1xuICB3cml0ZXIuYXBwZW5kKHRoaXMuZXNjYXBlID8gZXNjYXBlQm9keSh0aGlzLnZhbHVlKSA6IHRoaXMudmFsdWUpO1xufTtcbkJvZHlTZXJpYWxpemVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uIChwcm9wLCB2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIGlmIChwcm9wLnR5cGUgPT09ICdTdHJpbmcnICYmIHZhbHVlLnNlYXJjaChFU0NBUEVfQ0hBUlMpICE9PSAtMSkge1xuICAgIHRoaXMuZXNjYXBlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5mdW5jdGlvbiBWYWx1ZVNlcmlhbGl6ZXIodGFnTmFtZSkge1xuICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xufVxuaW5oZXJpdHMoVmFsdWVTZXJpYWxpemVyLCBCb2R5U2VyaWFsaXplcik7XG5WYWx1ZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24gKHdyaXRlcikge1xuICB3cml0ZXIuYXBwZW5kSW5kZW50KCkuYXBwZW5kKCc8JyArIHRoaXMudGFnTmFtZSArICc+Jyk7XG4gIHRoaXMuc2VyaWFsaXplVmFsdWUod3JpdGVyKTtcbiAgd3JpdGVyLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKS5hcHBlbmROZXdMaW5lKCk7XG59O1xuZnVuY3Rpb24gRWxlbWVudFNlcmlhbGl6ZXIocGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IpIHtcbiAgdGhpcy5ib2R5ID0gW107XG4gIHRoaXMuYXR0cnMgPSBbXTtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMucHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yO1xufVxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgdmFyIGVsZW1lbnREZXNjcmlwdG9yID0gZWxlbWVudC4kZGVzY3JpcHRvcixcbiAgICBwcm9wZXJ0eURlc2NyaXB0b3IgPSB0aGlzLnByb3BlcnR5RGVzY3JpcHRvcjtcbiAgdmFyIG90aGVyQXR0cnMsIHByb3BlcnRpZXM7XG4gIHZhciBpc0dlbmVyaWMgPSBlbGVtZW50RGVzY3JpcHRvci5pc0dlbmVyaWM7XG4gIGlmIChpc0dlbmVyaWMpIHtcbiAgICBvdGhlckF0dHJzID0gdGhpcy5wYXJzZUdlbmVyaWNOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VOc0F0dHJpYnV0ZXMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHRoaXMubnMgPSB0aGlzLm5zUHJvcGVydHlUYWdOYW1lKHByb3BlcnR5RGVzY3JpcHRvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5ucyA9IHRoaXMubnNUYWdOYW1lKGVsZW1lbnREZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgdGFnIG5hbWVcbiAgdGhpcy50YWdOYW1lID0gdGhpcy5hZGRUYWdOYW1lKHRoaXMubnMpO1xuICBpZiAoaXNHZW5lcmljKSB7XG4gICAgdGhpcy5wYXJzZUdlbmVyaWNDb250YWlubWVudHMoZWxlbWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcyA9IGdldFNlcmlhbGl6YWJsZVByb3BlcnRpZXMoZWxlbWVudCk7XG4gICAgdGhpcy5wYXJzZUF0dHJpYnV0ZXMoZmlsdGVyQXR0cmlidXRlcyhwcm9wZXJ0aWVzKSk7XG4gICAgdGhpcy5wYXJzZUNvbnRhaW5tZW50cyhmaWx0ZXJDb250YWluZWQocHJvcGVydGllcykpO1xuICB9XG4gIHRoaXMucGFyc2VHZW5lcmljQXR0cmlidXRlcyhlbGVtZW50LCBvdGhlckF0dHJzKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLm5zVGFnTmFtZSA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKTtcbiAgcmV0dXJuIGdldEVsZW1lbnROcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLm5zUHJvcGVydHlUYWdOYW1lID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgdmFyIGVmZmVjdGl2ZU5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKGRlc2NyaXB0b3IubnMpO1xuICByZXR1cm4gZ2V0UHJvcGVydHlOcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcik7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmlzTG9jYWxOcyA9IGZ1bmN0aW9uIChucykge1xuICByZXR1cm4gbnMudXJpID09PSB0aGlzLm5zLnVyaTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBhY3R1YWwgbnMgYXR0cmlidXRlIG5hbWUgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtlbGVtZW50LmluaGVyaXRlZD1mYWxzZV1cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IG5zTmFtZVxuICovXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubnNBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdmFyIG5zO1xuICBpZiAoaXNTdHJpbmcoZWxlbWVudCkpIHtcbiAgICBucyA9IHBhcnNlTmFtZShlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBucyA9IGVsZW1lbnQubnM7XG4gIH1cblxuICAvLyByZXR1cm4ganVzdCBsb2NhbCBuYW1lIGZvciBpbmhlcml0ZWQgYXR0cmlidXRlc1xuICBpZiAoZWxlbWVudC5pbmhlcml0ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWVcbiAgICB9O1xuICB9XG5cbiAgLy8gcGFyc2UgKyBsb2cgZWZmZWN0aXZlIG5zXG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucyk7XG5cbiAgLy8gTE9HIEFDVFVBTCBuYW1lc3BhY2UgdXNlXG4gIHRoaXMuZ2V0TmFtZXNwYWNlcygpLmxvZ1VzZWQoZWZmZWN0aXZlTnMpO1xuXG4gIC8vIHN0cmlwIHByZWZpeCBpZiBzYW1lIG5hbWVzcGFjZSBsaWtlIHBhcmVudFxuICBpZiAodGhpcy5pc0xvY2FsTnMoZWZmZWN0aXZlTnMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsTmFtZTogbnMubG9jYWxOYW1lXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXNzaWduKHtcbiAgICAgIGxvY2FsTmFtZTogbnMubG9jYWxOYW1lXG4gICAgfSwgZWZmZWN0aXZlTnMpO1xuICB9XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpY05zQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlbGVtZW50KS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gIWtleS5zdGFydHNXaXRoKCckJykgJiYgdGhpcy5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICBuYW1lOiBrZXksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pKTtcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQ29udGFpbm1lbnRzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdmFyIGJvZHkgPSBlbGVtZW50LiRib2R5O1xuICBpZiAoYm9keSkge1xuICAgIHRoaXMuYm9keS5wdXNoKG5ldyBCb2R5U2VyaWFsaXplcigpLmJ1aWxkKHtcbiAgICAgIHR5cGU6ICdTdHJpbmcnXG4gICAgfSwgYm9keSkpO1xuICB9XG4gIHZhciBjaGlsZHJlbiA9IGVsZW1lbnQuJGNoaWxkcmVuO1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICBmb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICB0aGlzLmJvZHkucHVzaChuZXcgRWxlbWVudFNlcmlhbGl6ZXIodGhpcykuYnVpbGQoY2hpbGQpKTtcbiAgICB9KTtcbiAgfVxufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZU5zQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBtb2RlbCA9IGVsZW1lbnQuJG1vZGVsO1xuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lKG5hbWUpO1xuICB2YXIgbnM7XG5cbiAgLy8gcGFyc2UgeG1sbnM6Zm9vPVwiaHR0cDovL2Zvby5iYXJcIlxuICBpZiAobmFtZU5zLnByZWZpeCA9PT0gJ3htbG5zJykge1xuICAgIG5zID0ge1xuICAgICAgcHJlZml4OiBuYW1lTnMubG9jYWxOYW1lLFxuICAgICAgdXJpOiB2YWx1ZVxuICAgIH07XG4gIH1cblxuICAvLyBwYXJzZSB4bWxucz1cImh0dHA6Ly9mb28uYmFyXCJcbiAgaWYgKCFuYW1lTnMucHJlZml4ICYmIG5hbWVOcy5sb2NhbE5hbWUgPT09ICd4bWxucycpIHtcbiAgICBucyA9IHtcbiAgICAgIHVyaTogdmFsdWVcbiAgICB9O1xuICB9XG4gIGlmICghbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH07XG4gIH1cbiAgaWYgKG1vZGVsICYmIG1vZGVsLmdldFBhY2thZ2UodmFsdWUpKSB7XG4gICAgLy8gcmVnaXN0ZXIgd2VsbCBrbm93biBuYW1lc3BhY2VcbiAgICB0aGlzLmxvZ05hbWVzcGFjZShucywgdHJ1ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbG9nIGN1c3RvbSBuYW1lc3BhY2UgZGlyZWN0bHkgYXMgdXNlZFxuICAgIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucywgdHJ1ZSk7XG4gICAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChhY3R1YWxOcyk7XG4gIH1cbn07XG5cbi8qKlxuICogUGFyc2UgbmFtZXNwYWNlcyBhbmQgcmV0dXJuIGEgbGlzdCBvZiBsZWZ0IG92ZXIgZ2VuZXJpYyBhdHRyaWJ1dGVzXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtBcnJheTxPYmplY3Q+fVxuICovXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBnZW5lcmljQXR0cnMgPSBlbGVtZW50LiRhdHRycztcbiAgdmFyIGF0dHJpYnV0ZXMgPSBbXTtcblxuICAvLyBwYXJzZSBuYW1lc3BhY2UgYXR0cmlidXRlcyBmaXJzdFxuICAvLyBhbmQgbG9nIHRoZW0uIHB1c2ggbm9uIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIHRvIGEgbGlzdFxuICAvLyBhbmQgcHJvY2VzcyB0aGVtIGxhdGVyXG4gIGZvckVhY2goZ2VuZXJpY0F0dHJzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICB2YXIgbm9uTnNBdHRyID0gc2VsZi5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICBpZiAobm9uTnNBdHRyKSB7XG4gICAgICBhdHRyaWJ1dGVzLnB1c2gobm9uTnNBdHRyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXR0cmlidXRlcztcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VHZW5lcmljQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgZm9yRWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbiAoYXR0cikge1xuICAgIHRyeSB7XG4gICAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpLCBhdHRyLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4oYG1pc3NpbmcgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGZvciA8JHthdHRyLm5hbWV9PSR7YXR0ci52YWx1ZX0+IG9uYCwgZWxlbWVudCwgZSk7XG4gICAgfVxuICB9KTtcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VDb250YWlubWVudHMgPSBmdW5jdGlvbiAocHJvcGVydGllcykge1xuICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgYm9keSA9IHRoaXMuYm9keSxcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKSxcbiAgICAgIGlzUmVmZXJlbmNlID0gcC5pc1JlZmVyZW5jZSxcbiAgICAgIGlzTWFueSA9IHAuaXNNYW55O1xuICAgIGlmICghaXNNYW55KSB7XG4gICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgfVxuICAgIGlmIChwLmlzQm9keSkge1xuICAgICAgYm9keS5wdXNoKG5ldyBCb2R5U2VyaWFsaXplcigpLmJ1aWxkKHAsIHZhbHVlWzBdKSk7XG4gICAgfSBlbHNlIGlmIChpc1NpbXBsZShwLnR5cGUpKSB7XG4gICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICBib2R5LnB1c2gobmV3IFZhbHVlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHAsIHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNSZWZlcmVuY2UpIHtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGJvZHkucHVzaChuZXcgUmVmZXJlbmNlU2VyaWFsaXplcihzZWxmLmFkZFRhZ05hbWUoc2VsZi5uc1Byb3BlcnR5VGFnTmFtZShwKSkpLmJ1aWxkKHYpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhbGxvdyBzZXJpYWxpemF0aW9uIHZpYSB0eXBlXG4gICAgICAvLyByYXRoZXIgdGhhbiBlbGVtZW50IG5hbWVcbiAgICAgIHZhciBzZXJpYWxpemF0aW9uID0gZ2V0U2VyaWFsaXphdGlvbihwKTtcbiAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHZhciBzZXJpYWxpemVyO1xuICAgICAgICBpZiAoc2VyaWFsaXphdGlvbikge1xuICAgICAgICAgIGlmIChzZXJpYWxpemF0aW9uID09PSBTRVJJQUxJWkVfUFJPUEVSVFkpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZiwgcCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgVHlwZVNlcmlhbGl6ZXIoc2VsZiwgcCwgc2VyaWFsaXphdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgYm9keS5wdXNoKHNlcmlhbGl6ZXIuYnVpbGQodikpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlcyA9IGZ1bmN0aW9uIChsb2NhbCkge1xuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMubmFtZXNwYWNlcyxcbiAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICBwYXJlbnROYW1lc3BhY2VzO1xuICBpZiAoIW5hbWVzcGFjZXMpIHtcbiAgICBwYXJlbnROYW1lc3BhY2VzID0gcGFyZW50ICYmIHBhcmVudC5nZXROYW1lc3BhY2VzKCk7XG4gICAgaWYgKGxvY2FsIHx8ICFwYXJlbnROYW1lc3BhY2VzKSB7XG4gICAgICB0aGlzLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID0gbmV3IE5hbWVzcGFjZXMocGFyZW50TmFtZXNwYWNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWVzcGFjZXMgPSBwYXJlbnROYW1lc3BhY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNwYWNlcztcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlID0gZnVuY3Rpb24gKG5zLCB3ZWxsa25vd24sIGxvY2FsKSB7XG4gIHZhciBuYW1lc3BhY2VzID0gdGhpcy5nZXROYW1lc3BhY2VzKGxvY2FsKTtcbiAgdmFyIG5zVXJpID0gbnMudXJpLFxuICAgIG5zUHJlZml4ID0gbnMucHJlZml4O1xuICB2YXIgZXhpc3RpbmcgPSBuYW1lc3BhY2VzLmJ5VXJpKG5zVXJpKTtcbiAgaWYgKCFleGlzdGluZyB8fCBsb2NhbCkge1xuICAgIG5hbWVzcGFjZXMuYWRkKG5zLCB3ZWxsa25vd24pO1xuICB9XG4gIG5hbWVzcGFjZXMubWFwUHJlZml4KG5zUHJlZml4LCBuc1VyaSk7XG4gIHJldHVybiBucztcbn07XG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUubG9nTmFtZXNwYWNlVXNlZCA9IGZ1bmN0aW9uIChucywgbG9jYWwpIHtcbiAgdmFyIG5hbWVzcGFjZXMgPSB0aGlzLmdldE5hbWVzcGFjZXMobG9jYWwpO1xuXG4gIC8vIG5zIG1heSBiZVxuICAvL1xuICAvLyAgICogcHJlZml4IG9ubHlcbiAgLy8gICAqIHByZWZpeDp1cmlcbiAgLy8gICAqIGxvY2FsTmFtZSBvbmx5XG5cbiAgdmFyIHByZWZpeCA9IG5zLnByZWZpeCxcbiAgICB1cmkgPSBucy51cmksXG4gICAgbmV3UHJlZml4LFxuICAgIGlkeCxcbiAgICB3ZWxsa25vd25Vcmk7XG5cbiAgLy8gaGFuZGxlIGFub255bW91cyBuYW1lc3BhY2VzIChlbGVtZW50Rm9ybT11bnF1YWxpZmllZCksIGNmLiAjMjNcbiAgaWYgKCFwcmVmaXggJiYgIXVyaSkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhbE5hbWU6IG5zLmxvY2FsTmFtZVxuICAgIH07XG4gIH1cbiAgd2VsbGtub3duVXJpID0gbmFtZXNwYWNlcy5kZWZhdWx0VXJpQnlQcmVmaXgocHJlZml4KTtcbiAgdXJpID0gdXJpIHx8IHdlbGxrbm93blVyaSB8fCBuYW1lc3BhY2VzLnVyaUJ5UHJlZml4KHByZWZpeCk7XG4gIGlmICghdXJpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBuYW1lc3BhY2UgdXJpIGdpdmVuIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPicpO1xuICB9XG4gIG5zID0gbmFtZXNwYWNlcy5ieVVyaSh1cmkpO1xuXG4gIC8vIHJlZ2lzdGVyIG5ldyBkZWZhdWx0IHByZWZpeCA8eG1sbnM+IGluIGxvY2FsIHNjb3BlXG4gIGlmICghbnMgJiYgIXByZWZpeCkge1xuICAgIG5zID0gdGhpcy5sb2dOYW1lc3BhY2Uoe1xuICAgICAgdXJpXG4gICAgfSwgd2VsbGtub3duVXJpID09PSB1cmksIHRydWUpO1xuICB9XG4gIGlmICghbnMpIHtcbiAgICBuZXdQcmVmaXggPSBwcmVmaXg7XG4gICAgaWR4ID0gMTtcblxuICAgIC8vIGZpbmQgYSBwcmVmaXggdGhhdCBpcyBub3QgbWFwcGVkIHlldFxuICAgIHdoaWxlIChuYW1lc3BhY2VzLnVyaUJ5UHJlZml4KG5ld1ByZWZpeCkpIHtcbiAgICAgIG5ld1ByZWZpeCA9IHByZWZpeCArICdfJyArIGlkeCsrO1xuICAgIH1cbiAgICBucyA9IHRoaXMubG9nTmFtZXNwYWNlKHtcbiAgICAgIHByZWZpeDogbmV3UHJlZml4LFxuICAgICAgdXJpOiB1cmlcbiAgICB9LCB3ZWxsa25vd25VcmkgPT09IHVyaSk7XG4gIH1cbiAgaWYgKHByZWZpeCkge1xuICAgIG5hbWVzcGFjZXMubWFwUHJlZml4KHByZWZpeCwgdXJpKTtcbiAgfVxuICByZXR1cm4gbnM7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICBmb3JFYWNoKHByb3BlcnRpZXMsIGZ1bmN0aW9uIChwKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKTtcbiAgICBpZiAocC5pc1JlZmVyZW5jZSkge1xuICAgICAgaWYgKCFwLmlzTWFueSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHYuaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJRFJFRlMgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlZmVyZW5jZXMuXG4gICAgICAgIHZhbHVlID0gdmFsdWVzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5hZGRBdHRyaWJ1dGUoc2VsZi5uc0F0dHJpYnV0ZU5hbWUocCksIHZhbHVlKTtcbiAgfSk7XG59O1xuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZFRhZ05hbWUgPSBmdW5jdGlvbiAobnNUYWdOYW1lKSB7XG4gIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChuc1RhZ05hbWUpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKTtcbiAgcmV0dXJuIG5zTmFtZShuc1RhZ05hbWUpO1xufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRycztcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhbHVlID0gZXNjYXBlQXR0cih2YWx1ZSk7XG4gIH1cblxuICAvLyBkZS1kdXBsaWNhdGUgYXR0cmlidXRlc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnBtbi1pby9tb2RkbGUteG1sL2lzc3Vlcy82NlxuICB2YXIgaWR4ID0gZmluZEluZGV4KGF0dHJzLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWUubG9jYWxOYW1lID09PSBuYW1lLmxvY2FsTmFtZSAmJiBlbGVtZW50Lm5hbWUudXJpID09PSBuYW1lLnVyaSAmJiBlbGVtZW50Lm5hbWUucHJlZml4ID09PSBuYW1lLnByZWZpeDtcbiAgfSk7XG4gIHZhciBhdHRyID0ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG4gIGlmIChpZHggIT09IC0xKSB7XG4gICAgYXR0cnMuc3BsaWNlKGlkeCwgMSwgYXR0cik7XG4gIH0gZWxzZSB7XG4gICAgYXR0cnMucHVzaChhdHRyKTtcbiAgfVxufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHdyaXRlcikge1xuICB2YXIgYXR0cnMgPSB0aGlzLmF0dHJzLFxuICAgIG5hbWVzcGFjZXMgPSB0aGlzLm5hbWVzcGFjZXM7XG4gIGlmIChuYW1lc3BhY2VzKSB7XG4gICAgYXR0cnMgPSBnZXROc0F0dHJzKG5hbWVzcGFjZXMpLmNvbmNhdChhdHRycyk7XG4gIH1cbiAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGEpIHtcbiAgICB3cml0ZXIuYXBwZW5kKCcgJykuYXBwZW5kKG5zTmFtZShhLm5hbWUpKS5hcHBlbmQoJz1cIicpLmFwcGVuZChhLnZhbHVlKS5hcHBlbmQoJ1wiJyk7XG4gIH0pO1xufTtcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uICh3cml0ZXIpIHtcbiAgdmFyIGZpcnN0Qm9keSA9IHRoaXMuYm9keVswXSxcbiAgICBpbmRlbnQgPSBmaXJzdEJvZHkgJiYgZmlyc3RCb2R5LmNvbnN0cnVjdG9yICE9PSBCb2R5U2VyaWFsaXplcjtcbiAgd3JpdGVyLmFwcGVuZEluZGVudCgpLmFwcGVuZCgnPCcgKyB0aGlzLnRhZ05hbWUpO1xuICB0aGlzLnNlcmlhbGl6ZUF0dHJpYnV0ZXMod3JpdGVyKTtcbiAgd3JpdGVyLmFwcGVuZChmaXJzdEJvZHkgPyAnPicgOiAnIC8+Jyk7XG4gIGlmIChmaXJzdEJvZHkpIHtcbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICB3cml0ZXIuYXBwZW5kTmV3TGluZSgpLmluZGVudCgpO1xuICAgIH1cbiAgICBmb3JFYWNoKHRoaXMuYm9keSwgZnVuY3Rpb24gKGIpIHtcbiAgICAgIGIuc2VyaWFsaXplVG8od3JpdGVyKTtcbiAgICB9KTtcbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICB3cml0ZXIudW5pbmRlbnQoKS5hcHBlbmRJbmRlbnQoKTtcbiAgICB9XG4gICAgd3JpdGVyLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKTtcbiAgfVxuICB3cml0ZXIuYXBwZW5kTmV3TGluZSgpO1xufTtcblxuLyoqXG4gKiBBIHNlcmlhbGl6ZXIgZm9yIHR5cGVzIHRoYXQgaGFuZGxlcyBzZXJpYWxpemF0aW9uIG9mIGRhdGEgdHlwZXNcbiAqL1xuZnVuY3Rpb24gVHlwZVNlcmlhbGl6ZXIocGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IsIHNlcmlhbGl6YXRpb24pIHtcbiAgRWxlbWVudFNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBwYXJlbnQsIHByb3BlcnR5RGVzY3JpcHRvcik7XG4gIHRoaXMuc2VyaWFsaXphdGlvbiA9IHNlcmlhbGl6YXRpb247XG59XG5pbmhlcml0cyhUeXBlU2VyaWFsaXplciwgRWxlbWVudFNlcmlhbGl6ZXIpO1xuVHlwZVNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgLy8gZXh0cmFjdGVkIGF0dHJpYnV0ZXMgd2l0aCBzZXJpYWxpemF0aW9uIGF0dHJpYnV0ZVxuICAvLyA8dHlwZT10eXBlTmFtZT4gc3RyaXBwZWQ7IGl0IG1heSBiZSBsYXRlclxuICB2YXIgYXR0cmlidXRlcyA9IEVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZU5zQXR0cmlidXRlcy5jYWxsKHRoaXMsIGVsZW1lbnQpLmZpbHRlcihhdHRyID0+IGF0dHIubmFtZSAhPT0gdGhpcy5zZXJpYWxpemF0aW9uKTtcbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yO1xuXG4gIC8vIG9ubHkgc2VyaWFsaXplIDx0eXBlPXR5cGVOYW1lPiBpZiBuZWNlc3NhcnlcbiAgaWYgKGRlc2NyaXB0b3IubmFtZSA9PT0gdGhpcy5wcm9wZXJ0eURlc2NyaXB0b3IudHlwZSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9XG4gIHZhciB0eXBlTnMgPSB0aGlzLnR5cGVOcyA9IHRoaXMubnNUYWdOYW1lKGRlc2NyaXB0b3IpO1xuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKHRoaXMudHlwZU5zKTtcblxuICAvLyBhZGQgeHNpOnR5cGUgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgZWxlbWVudHNcbiAgLy8gYWN0dWFsIHR5cGVcblxuICB2YXIgcGtnID0gZWxlbWVudC4kbW9kZWwuZ2V0UGFja2FnZSh0eXBlTnMudXJpKSxcbiAgICB0eXBlUHJlZml4ID0gcGtnLnhtbCAmJiBwa2cueG1sLnR5cGVQcmVmaXggfHwgJyc7XG4gIHRoaXMuYWRkQXR0cmlidXRlKHRoaXMubnNBdHRyaWJ1dGVOYW1lKHRoaXMuc2VyaWFsaXphdGlvbiksICh0eXBlTnMucHJlZml4ID8gdHlwZU5zLnByZWZpeCArICc6JyA6ICcnKSArIHR5cGVQcmVmaXggKyBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSk7XG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufTtcblR5cGVTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbiAobnMpIHtcbiAgcmV0dXJuIG5zLnVyaSA9PT0gKHRoaXMudHlwZU5zIHx8IHRoaXMubnMpLnVyaTtcbn07XG5mdW5jdGlvbiBTYXZpbmdXcml0ZXIoKSB7XG4gIHRoaXMudmFsdWUgPSAnJztcbiAgdGhpcy53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB0aGlzLnZhbHVlICs9IHN0cjtcbiAgfTtcbn1cbmZ1bmN0aW9uIEZvcm1hdGluZ1dyaXRlcihvdXQsIGZvcm1hdCkge1xuICB2YXIgaW5kZW50ID0gWycnXTtcbiAgdGhpcy5hcHBlbmQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgb3V0LndyaXRlKHN0cik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHRoaXMuYXBwZW5kTmV3TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICBvdXQud3JpdGUoJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgdGhpcy5hcHBlbmRJbmRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgb3V0LndyaXRlKGluZGVudC5qb2luKCcgICcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHRoaXMuaW5kZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGluZGVudC5wdXNoKCcnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgdGhpcy51bmluZGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpbmRlbnQucG9wKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59XG5cbi8qKlxuICogQSB3cml0ZXIgZm9yIG1ldGEtbW9kZWwgYmFja2VkIGRvY3VtZW50IHRyZWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3V0cHV0IG9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSB3cml0ZXJcbiAqL1xuZnVuY3Rpb24gV3JpdGVyKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGFzc2lnbih7XG4gICAgZm9ybWF0OiBmYWxzZSxcbiAgICBwcmVhbWJsZTogdHJ1ZVxuICB9LCBvcHRpb25zIHx8IHt9KTtcbiAgZnVuY3Rpb24gdG9YTUwodHJlZSwgd3JpdGVyKSB7XG4gICAgdmFyIGludGVybmFsV3JpdGVyID0gd3JpdGVyIHx8IG5ldyBTYXZpbmdXcml0ZXIoKTtcbiAgICB2YXIgZm9ybWF0aW5nV3JpdGVyID0gbmV3IEZvcm1hdGluZ1dyaXRlcihpbnRlcm5hbFdyaXRlciwgb3B0aW9ucy5mb3JtYXQpO1xuICAgIGlmIChvcHRpb25zLnByZWFtYmxlKSB7XG4gICAgICBmb3JtYXRpbmdXcml0ZXIuYXBwZW5kKFhNTF9QUkVBTUJMRSk7XG4gICAgfVxuICAgIHZhciBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKCk7XG4gICAgdmFyIG1vZGVsID0gdHJlZS4kbW9kZWw7XG4gICAgc2VyaWFsaXplci5nZXROYW1lc3BhY2VzKCkubWFwRGVmYXVsdFByZWZpeGVzKGdldERlZmF1bHRQcmVmaXhNYXBwaW5ncyhtb2RlbCkpO1xuICAgIHNlcmlhbGl6ZXIuYnVpbGQodHJlZSkuc2VyaWFsaXplVG8oZm9ybWF0aW5nV3JpdGVyKTtcbiAgICBpZiAoIXdyaXRlcikge1xuICAgICAgcmV0dXJuIGludGVybmFsV3JpdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHRvWE1MOiB0b1hNTFxuICB9O1xufVxuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vXG5cbi8qKlxuICogQHBhcmFtIHtNb2RkbGV9IG1vZGVsXG4gKlxuICogQHJldHVybiB7IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSBtYXAgZnJvbSBwcmVmaXggdG8gVVJJXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmVmaXhNYXBwaW5ncyhtb2RlbCkge1xuICBjb25zdCBuc01hcCA9IG1vZGVsLmNvbmZpZyAmJiBtb2RlbC5jb25maWcubnNNYXAgfHwge307XG4gIGNvbnN0IHByZWZpeE1hcCA9IHt9O1xuXG4gIC8vIHsgcHJlZml4IC0+IHVyaSB9XG4gIGZvciAoY29uc3QgcHJlZml4IGluIERFRkFVTFRfTlNfTUFQKSB7XG4gICAgcHJlZml4TWFwW3ByZWZpeF0gPSBERUZBVUxUX05TX01BUFtwcmVmaXhdO1xuICB9XG5cbiAgLy8geyB1cmkgLT4gcHJlZml4IH1cbiAgZm9yIChjb25zdCB1cmkgaW4gbnNNYXApIHtcbiAgICBjb25zdCBwcmVmaXggPSBuc01hcFt1cmldO1xuICAgIHByZWZpeE1hcFtwcmVmaXhdID0gdXJpO1xuICB9XG4gIGZvciAoY29uc3QgcGtnIG9mIG1vZGVsLmdldFBhY2thZ2VzKCkpIHtcbiAgICBwcmVmaXhNYXBbcGtnLnByZWZpeF0gPSBwa2cudXJpO1xuICB9XG4gIHJldHVybiBwcmVmaXhNYXA7XG59XG5cbi8qKlxuICogQSBzdWIgY2xhc3Mgb2Yge0BsaW5rIE1vZGRsZX0gd2l0aCBzdXBwb3J0IGZvciBpbXBvcnQgYW5kIGV4cG9ydCBvZiBCUE1OIDIuMCB4bWwgZmlsZXMuXG4gKlxuICogQGNsYXNzIEJwbW5Nb2RkbGVcbiAqIEBleHRlbmRzIE1vZGRsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBwYWNrYWdlcyB0byB1c2UgZm9yIGluc3RhbnRpYXRpbmcgdGhlIG1vZGVsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBwYXNzIG92ZXJcbiAqL1xuZnVuY3Rpb24gQnBtbk1vZGRsZShwYWNrYWdlcywgb3B0aW9ucykge1xuICBNb2RkbGUuY2FsbCh0aGlzLCBwYWNrYWdlcywgb3B0aW9ucyk7XG59XG5CcG1uTW9kZGxlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9kZGxlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogVGhlIGZyb21YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlUmVzdWx0XG4gKlxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSByb290RWxlbWVudFxuICogQHByb3BlcnR5IHtBcnJheTxPYmplY3Q+fSByZWZlcmVuY2VzXG4gKiBAcHJvcGVydHkge0FycmF5PEVycm9yPn0gd2FybmluZ3NcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlbGVtZW50c0J5SWQgLSBhIG1hcHBpbmcgY29udGFpbmluZyBlYWNoIElEIC0+IE1vZGRsZUVsZW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBmcm9tWE1MIGVycm9yLlxuICpcbiAqIEB0eXBlZGVmIHtFcnJvcn0gUGFyc2VFcnJvclxuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXJyb3I+fSB3YXJuaW5nc1xuICovXG5cbi8qKlxuICogSW5zdGFudGlhdGVzIGEgQlBNTiBtb2RlbCB0cmVlIGZyb20gYSBnaXZlbiB4bWwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIHhtbFN0clxuICogQHBhcmFtIHtTdHJpbmd9ICAgW3R5cGVOYW1lPSdicG1uOkRlZmluaXRpb25zJ10gbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyByZWFkZXJcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZVJlc3VsdCwgUGFyc2VFcnJvcj59XG4gKi9cbkJwbW5Nb2RkbGUucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbiAoeG1sU3RyLCB0eXBlTmFtZSwgb3B0aW9ucykge1xuICBpZiAoIWlzU3RyaW5nKHR5cGVOYW1lKSkge1xuICAgIG9wdGlvbnMgPSB0eXBlTmFtZTtcbiAgICB0eXBlTmFtZSA9ICdicG1uOkRlZmluaXRpb25zJztcbiAgfVxuICB2YXIgcmVhZGVyID0gbmV3IFJlYWRlcihhc3NpZ24oe1xuICAgIG1vZGVsOiB0aGlzLFxuICAgIGxheDogdHJ1ZVxuICB9LCBvcHRpb25zKSk7XG4gIHZhciByb290SGFuZGxlciA9IHJlYWRlci5oYW5kbGVyKHR5cGVOYW1lKTtcbiAgcmV0dXJuIHJlYWRlci5mcm9tWE1MKHhtbFN0ciwgcm9vdEhhbmRsZXIpO1xufTtcblxuLyoqXG4gKiBUaGUgdG9YTUwgcmVzdWx0LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNlcmlhbGl6YXRpb25SZXN1bHRcbiAqXG4gKiBAcHJvcGVydHkge1N0cmluZ30geG1sXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgQlBNTiAyLjAgb2JqZWN0IHRyZWUgdG8gWE1MLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSAgIGVsZW1lbnQgICAgdGhlIHJvb3QgZWxlbWVudCwgdHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBicG1uOkRlZmluaXRpb25zYFxuICogQHBhcmFtIHtPYmplY3R9ICAgW29wdGlvbnNdICB0byBwYXNzIHRvIHRoZSB1bmRlcmx5aW5nIHdyaXRlclxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcmlhbGl6YXRpb25SZXN1bHQsIEVycm9yPn1cbiAqL1xuQnBtbk1vZGRsZS5wcm90b3R5cGUudG9YTUwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcihvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHJlc3VsdCA9IHdyaXRlci50b1hNTChlbGVtZW50KTtcbiAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgeG1sOiByZXN1bHRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgIH1cbiAgfSk7XG59O1xudmFyIG5hbWUkNSA9IFwiQlBNTjIwXCI7XG52YXIgdXJpJDUgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUxcIjtcbnZhciBwcmVmaXgkNSA9IFwiYnBtblwiO1xudmFyIGFzc29jaWF0aW9ucyQ1ID0gW107XG52YXIgdHlwZXMkNSA9IFt7XG4gIG5hbWU6IFwiSW50ZXJmYWNlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wZXJhdGlvbnNcIixcbiAgICB0eXBlOiBcIk9wZXJhdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblJlZlwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiT3BlcmF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImluTWVzc2FnZVJlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVwiLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm91dE1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJlcnJvclJlZlwiLFxuICAgIHR5cGU6IFwiRXJyb3JcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25SZWZcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkVuZFBvaW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiQXVkaXRpbmdcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJHbG9iYWxUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNhbGxhYmxlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInJlc291cmNlc1wiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTW9uaXRvcmluZ1wiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIlBlcmZvcm1lclwiLFxuICBzdXBlckNsYXNzOiBbXCJSZXNvdXJjZVJvbGVcIl1cbn0sIHtcbiAgbmFtZTogXCJQcm9jZXNzXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiLCBcIkNhbGxhYmxlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInByb2Nlc3NUeXBlXCIsXG4gICAgdHlwZTogXCJQcm9jZXNzVHlwZVwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJpc0Nsb3NlZFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJhdWRpdGluZ1wiLFxuICAgIHR5cGU6IFwiQXVkaXRpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJtb25pdG9yaW5nXCIsXG4gICAgdHlwZTogXCJNb25pdG9yaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicHJvcGVydGllc1wiLFxuICAgIHR5cGU6IFwiUHJvcGVydHlcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibGFuZVNldHNcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgcmVwbGFjZXM6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2xhbmVTZXRzXCIsXG4gICAgdHlwZTogXCJMYW5lU2V0XCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIHJlcGxhY2VzOiBcIkZsb3dFbGVtZW50c0NvbnRhaW5lciNmbG93RWxlbWVudHNcIixcbiAgICB0eXBlOiBcIkZsb3dFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYXJ0aWZhY3RzXCIsXG4gICAgdHlwZTogXCJBcnRpZmFjdFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJyZXNvdXJjZXNcIixcbiAgICB0eXBlOiBcIlJlc291cmNlUm9sZVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvblN1YnNjcmlwdGlvbnNcIixcbiAgICB0eXBlOiBcIkNvcnJlbGF0aW9uU3Vic2NyaXB0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInN1cHBvcnRzXCIsXG4gICAgdHlwZTogXCJQcm9jZXNzXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImRlZmluaXRpb25hbENvbGxhYm9yYXRpb25SZWZcIixcbiAgICB0eXBlOiBcIkNvbGxhYm9yYXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNFeGVjdXRhYmxlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTGFuZVNldFwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImxhbmVzXCIsXG4gICAgdHlwZTogXCJMYW5lXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkxhbmVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGl0aW9uRWxlbWVudFJlZlwiLFxuICAgIHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGl0aW9uRWxlbWVudFwiLFxuICAgIHR5cGU6IFwiQmFzZUVsZW1lbnRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJmbG93Tm9kZVJlZlwiLFxuICAgIHR5cGU6IFwiRmxvd05vZGVcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY2hpbGRMYW5lU2V0XCIsXG4gICAgdHlwZTogXCJMYW5lU2V0XCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJHbG9iYWxNYW51YWxUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdsb2JhbFRhc2tcIl1cbn0sIHtcbiAgbmFtZTogXCJNYW51YWxUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRhc2tcIl1cbn0sIHtcbiAgbmFtZTogXCJVc2VyVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwicmVuZGVyaW5nc1wiLFxuICAgIHR5cGU6IFwiUmVuZGVyaW5nXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImltcGxlbWVudGF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZW5kZXJpbmdcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJIdW1hblBlcmZvcm1lclwiLFxuICBzdXBlckNsYXNzOiBbXCJQZXJmb3JtZXJcIl1cbn0sIHtcbiAgbmFtZTogXCJQb3RlbnRpYWxPd25lclwiLFxuICBzdXBlckNsYXNzOiBbXCJIdW1hblBlcmZvcm1lclwiXVxufSwge1xuICBuYW1lOiBcIkdsb2JhbFVzZXJUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdsb2JhbFRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlbmRlcmluZ3NcIixcbiAgICB0eXBlOiBcIlJlbmRlcmluZ1wiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkdhdGV3YXlcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRmxvd05vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJnYXRld2F5RGlyZWN0aW9uXCIsXG4gICAgdHlwZTogXCJHYXRld2F5RGlyZWN0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiVW5zcGVjaWZpZWRcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFdmVudEJhc2VkR2F0ZXdheVwiLFxuICBzdXBlckNsYXNzOiBbXCJHYXRld2F5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5zdGFudGlhdGVcIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImV2ZW50R2F0ZXdheVR5cGVcIixcbiAgICB0eXBlOiBcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBcImRlZmF1bHRcIjogXCJFeGNsdXNpdmVcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvbXBsZXhHYXRld2F5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdhdGV3YXlcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJhY3RpdmF0aW9uQ29uZGl0aW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXhjbHVzaXZlR2F0ZXdheVwiLFxuICBzdXBlckNsYXNzOiBbXCJHYXRld2F5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW5jbHVzaXZlR2F0ZXdheVwiLFxuICBzdXBlckNsYXNzOiBbXCJHYXRld2F5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiUGFyYWxsZWxHYXRld2F5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdhdGV3YXlcIl1cbn0sIHtcbiAgbmFtZTogXCJSb290RWxlbWVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIlJlbGF0aW9uc2hpcFwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInR5cGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJkaXJlY3Rpb25cIixcbiAgICB0eXBlOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzb3VyY2VcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiRWxlbWVudFwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQmFzZUVsZW1lbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNJZDogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkb2N1bWVudGF0aW9uXCIsXG4gICAgdHlwZTogXCJEb2N1bWVudGF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkRlZmluaXRpb25zXCIsXG4gICAgdHlwZTogXCJFeHRlbnNpb25EZWZpbml0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkVsZW1lbnRzXCIsXG4gICAgdHlwZTogXCJFeHRlbnNpb25FbGVtZW50c1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXh0ZW5zaW9uXCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJtdXN0VW5kZXJzdGFuZFwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZGVmaW5pdGlvblwiLFxuICAgIHR5cGU6IFwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHRlbnNpb25BdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuICAgIHR5cGU6IFwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJ0eXBlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNSZWZlcmVuY2VcIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkRlZmluaXRpb25cIixcbiAgICB0eXBlOiBcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFeHRlbnNpb25FbGVtZW50c1wiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidmFsdWVSZWZcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwidmFsdWVzXCIsXG4gICAgdHlwZTogXCJFbGVtZW50XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcbiAgICB0eXBlOiBcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEb2N1bWVudGF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidGV4dFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNCb2R5OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInRleHRGb3JtYXRcIixcbiAgICBcImRlZmF1bHRcIjogXCJ0ZXh0L3BsYWluXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFdmVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJGbG93Tm9kZVwiLCBcIkludGVyYWN0aW9uTm9kZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInByb3BlcnRpZXNcIixcbiAgICB0eXBlOiBcIlByb3BlcnR5XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudFwiLFxuICBzdXBlckNsYXNzOiBbXCJDYXRjaEV2ZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiSW50ZXJtZWRpYXRlVGhyb3dFdmVudFwiLFxuICBzdXBlckNsYXNzOiBbXCJUaHJvd0V2ZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiRW5kRXZlbnRcIixcbiAgc3VwZXJDbGFzczogW1wiVGhyb3dFdmVudFwiXVxufSwge1xuICBuYW1lOiBcIlN0YXJ0RXZlbnRcIixcbiAgc3VwZXJDbGFzczogW1wiQ2F0Y2hFdmVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlzSW50ZXJydXB0aW5nXCIsXG4gICAgXCJkZWZhdWx0XCI6IHRydWUsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiVGhyb3dFdmVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImRhdGFJbnB1dHNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlucHV0U2V0XCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImV2ZW50RGVmaW5pdGlvbnNcIixcbiAgICB0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJldmVudERlZmluaXRpb25SZWZcIixcbiAgICB0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNhdGNoRXZlbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRXZlbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJwYXJhbGxlbE11bHRpcGxlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhT3V0cHV0c1wiLFxuICAgIHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhT3V0cHV0QXNzb2NpYXRpb25zXCIsXG4gICAgdHlwZTogXCJEYXRhT3V0cHV0QXNzb2NpYXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0U2V0XCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJldmVudERlZmluaXRpb25zXCIsXG4gICAgdHlwZTogXCJFdmVudERlZmluaXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZXZlbnREZWZpbml0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJFdmVudERlZmluaXRpb25cIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJCb3VuZGFyeUV2ZW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNhdGNoRXZlbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjYW5jZWxBY3Rpdml0eVwiLFxuICAgIFwiZGVmYXVsdFwiOiB0cnVlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJhdHRhY2hlZFRvUmVmXCIsXG4gICAgdHlwZTogXCJBY3Rpdml0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkNhbmNlbEV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl1cbn0sIHtcbiAgbmFtZTogXCJFcnJvckV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJlcnJvclJlZlwiLFxuICAgIHR5cGU6IFwiRXJyb3JcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJUZXJtaW5hdGVFdmVudERlZmluaXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiRXZlbnREZWZpbml0aW9uXCJdXG59LCB7XG4gIG5hbWU6IFwiRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJlc2NhbGF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJFc2NhbGF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXNjYWxhdGlvblwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwic3RydWN0dXJlUmVmXCIsXG4gICAgdHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZXNjYWxhdGlvbkNvZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XSxcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIndhaXRGb3JDb21wbGV0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiLFxuICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImFjdGl2aXR5UmVmXCIsXG4gICAgdHlwZTogXCJBY3Rpdml0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlRpbWVyRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInRpbWVEYXRlXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwidGltZUN5Y2xlXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwidGltZUR1cmF0aW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJMaW5rRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRcIixcbiAgICB0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzb3VyY2VcIixcbiAgICB0eXBlOiBcIkxpbmtFdmVudERlZmluaXRpb25cIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJNZXNzYWdlRXZlbnREZWZpbml0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkV2ZW50RGVmaW5pdGlvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJPcGVyYXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb25kaXRpb25hbEV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb25kaXRpb25cIixcbiAgICB0eXBlOiBcIkV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9XVxufSwge1xuICBuYW1lOiBcIlNpZ25hbEV2ZW50RGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJFdmVudERlZmluaXRpb25cIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzaWduYWxSZWZcIixcbiAgICB0eXBlOiBcIlNpZ25hbFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlNpZ25hbFwiLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInN0cnVjdHVyZVJlZlwiLFxuICAgIHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRocm93RXZlbnRcIl1cbn0sIHtcbiAgbmFtZTogXCJEYXRhU3RhdGVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaXRlbVN1YmplY3RSZWZcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImRhdGFTdGF0ZVwiLFxuICAgIHR5cGU6IFwiRGF0YVN0YXRlXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEYXRhQXNzb2NpYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzb3VyY2VSZWZcIixcbiAgICB0eXBlOiBcIkl0ZW1Bd2FyZUVsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0UmVmXCIsXG4gICAgdHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidHJhbnNmb3JtYXRpb25cIixcbiAgICB0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJhc3NpZ25tZW50XCIsXG4gICAgdHlwZTogXCJBc3NpZ25tZW50XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRGF0YUlucHV0XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkl0ZW1Bd2FyZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNDb2xsZWN0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbnB1dFNldFJlZlwiLFxuICAgIHR5cGU6IFwiSW5wdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlucHV0U2V0V2l0aE9wdGlvbmFsXCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXRTZXRXaXRoV2hpbGVFeGVjdXRpbmdcIixcbiAgICB0eXBlOiBcIklucHV0U2V0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFPdXRwdXRcIixcbiAgc3VwZXJDbGFzczogW1wiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc0NvbGxlY3Rpb25cIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm91dHB1dFNldFJlZlwiLFxuICAgIHR5cGU6IFwiT3V0cHV0U2V0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRwdXRTZXRXaXRoT3B0aW9uYWxcIixcbiAgICB0eXBlOiBcIk91dHB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0U2V0V2l0aFdoaWxlRXhlY3V0aW5nXCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiSW5wdXRTZXRcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZGF0YUlucHV0UmVmc1wiLFxuICAgIHR5cGU6IFwiRGF0YUlucHV0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wdGlvbmFsSW5wdXRSZWZzXCIsXG4gICAgdHlwZTogXCJEYXRhSW5wdXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2hpbGVFeGVjdXRpbmdJbnB1dFJlZnNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRwdXRTZXRSZWZzXCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJPdXRwdXRTZXRcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJkYXRhT3V0cHV0UmVmc1wiLFxuICAgIHR5cGU6IFwiRGF0YU91dHB1dFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXRTZXRSZWZzXCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvcHRpb25hbE91dHB1dFJlZnNcIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2hpbGVFeGVjdXRpbmdPdXRwdXRSZWZzXCIsXG4gICAgdHlwZTogXCJEYXRhT3V0cHV0XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiUHJvcGVydHlcIixcbiAgc3VwZXJDbGFzczogW1wiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkRhdGFBc3NvY2lhdGlvblwiXVxufSwge1xuICBuYW1lOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJEYXRhQXNzb2NpYXRpb25cIl1cbn0sIHtcbiAgbmFtZTogXCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJkYXRhSW5wdXRzXCIsXG4gICAgdHlwZTogXCJEYXRhSW5wdXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZGF0YU91dHB1dHNcIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXRTZXRzXCIsXG4gICAgdHlwZTogXCJJbnB1dFNldFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRwdXRTZXRzXCIsXG4gICAgdHlwZTogXCJPdXRwdXRTZXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEYXRhT2JqZWN0XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkZsb3dFbGVtZW50XCIsIFwiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlzQ29sbGVjdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJJbnB1dE91dHB1dEJpbmRpbmdcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlucHV0RGF0YVJlZlwiLFxuICAgIHR5cGU6IFwiSW5wdXRTZXRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0RGF0YVJlZlwiLFxuICAgIHR5cGU6IFwiT3V0cHV0U2V0XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuICAgIHR5cGU6IFwiT3BlcmF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQXNzaWdubWVudFwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImZyb21cIixcbiAgICB0eXBlOiBcIkV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJ0b1wiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRGF0YVN0b3JlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCIsIFwiSXRlbUF3YXJlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJjYXBhY2l0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkludGVnZXJcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc1VubGltaXRlZFwiLFxuICAgIFwiZGVmYXVsdFwiOiB0cnVlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFTdG9yZVJlZmVyZW5jZVwiLFxuICBzdXBlckNsYXNzOiBbXCJJdGVtQXdhcmVFbGVtZW50XCIsIFwiRmxvd0VsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJkYXRhU3RvcmVSZWZcIixcbiAgICB0eXBlOiBcIkRhdGFTdG9yZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkRhdGFPYmplY3RSZWZlcmVuY2VcIixcbiAgc3VwZXJDbGFzczogW1wiSXRlbUF3YXJlRWxlbWVudFwiLCBcIkZsb3dFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZGF0YU9iamVjdFJlZlwiLFxuICAgIHR5cGU6IFwiRGF0YU9iamVjdFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvbnZlcnNhdGlvbkxpbmtcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzb3VyY2VSZWZcIixcbiAgICB0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRSZWZcIixcbiAgICB0eXBlOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb252ZXJzYXRpb25Bc3NvY2lhdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlubmVyQ29udmVyc2F0aW9uTm9kZVJlZlwiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRlckNvbnZlcnNhdGlvbk5vZGVSZWZcIixcbiAgICB0eXBlOiBcIkNvbnZlcnNhdGlvbk5vZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDYWxsQ29udmVyc2F0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNvbnZlcnNhdGlvbk5vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjYWxsZWRDb2xsYWJvcmF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJDb2xsYWJvcmF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29udmVyc2F0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNvbnZlcnNhdGlvbk5vZGVcIl1cbn0sIHtcbiAgbmFtZTogXCJTdWJDb252ZXJzYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQ29udmVyc2F0aW9uTm9kZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImNvbnZlcnNhdGlvbk5vZGVzXCIsXG4gICAgdHlwZTogXCJDb252ZXJzYXRpb25Ob2RlXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJJbnRlcmFjdGlvbk5vZGVcIiwgXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJwYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZUZsb3dSZWZzXCIsXG4gICAgdHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvbktleXNcIixcbiAgICB0eXBlOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiR2xvYmFsQ29udmVyc2F0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNvbGxhYm9yYXRpb25cIl1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0bmVyRW50aXR5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlBhcnRuZXJSb2xlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50UmVmXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvcnJlbGF0aW9uUHJvcGVydHlcIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInR5cGVcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRXJyb3JcIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJlcnJvckNvZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvcnJlbGF0aW9uS2V5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJlZlwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFeHByZXNzaW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBpc0Fic3RyYWN0OiBmYWxzZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJvZHlcIixcbiAgICBpc0JvZHk6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkZvcm1hbEV4cHJlc3Npb25cIixcbiAgc3VwZXJDbGFzczogW1wiRXhwcmVzc2lvblwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImxhbmd1YWdlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZXZhbHVhdGVzVG9UeXBlUmVmXCIsXG4gICAgdHlwZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIk1lc3NhZ2VcIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXRlbVJlZlwiLFxuICAgIHR5cGU6IFwiSXRlbURlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJJdGVtRGVmaW5pdGlvblwiLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIml0ZW1LaW5kXCIsXG4gICAgdHlwZTogXCJJdGVtS2luZFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzdHJ1Y3R1cmVSZWZcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc0NvbGxlY3Rpb25cIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImltcG9ydFwiLFxuICAgIHR5cGU6IFwiSW1wb3J0XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRmxvd0VsZW1lbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYXVkaXRpbmdcIixcbiAgICB0eXBlOiBcIkF1ZGl0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibW9uaXRvcmluZ1wiLFxuICAgIHR5cGU6IFwiTW9uaXRvcmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImNhdGVnb3J5VmFsdWVSZWZcIixcbiAgICB0eXBlOiBcIkNhdGVnb3J5VmFsdWVcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJTZXF1ZW5jZUZsb3dcIixcbiAgc3VwZXJDbGFzczogW1wiRmxvd0VsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpc0ltbWVkaWF0ZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJjb25kaXRpb25FeHByZXNzaW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwic291cmNlUmVmXCIsXG4gICAgdHlwZTogXCJGbG93Tm9kZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRSZWZcIixcbiAgICB0eXBlOiBcIkZsb3dOb2RlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibGFuZVNldHNcIixcbiAgICB0eXBlOiBcIkxhbmVTZXRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZmxvd0VsZW1lbnRzXCIsXG4gICAgdHlwZTogXCJGbG93RWxlbWVudFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNhbGxhYmxlRWxlbWVudFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJSb290RWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpb1NwZWNpZmljYXRpb25cIixcbiAgICB0eXBlOiBcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInByb3BlcnR5XCJcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiBcInN1cHBvcnRlZEludGVyZmFjZVJlZlwiLFxuICAgIHR5cGU6IFwiSW50ZXJmYWNlXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlvQmluZGluZ1wiLFxuICAgIHR5cGU6IFwiSW5wdXRPdXRwdXRCaW5kaW5nXCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInByb3BlcnR5XCJcbiAgICB9XG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiRmxvd05vZGVcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRmxvd0VsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbmNvbWluZ1wiLFxuICAgIHR5cGU6IFwiU2VxdWVuY2VGbG93XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm91dGdvaW5nXCIsXG4gICAgdHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibGFuZXNcIixcbiAgICB0eXBlOiBcIkxhbmVcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVJldHJpZXZhbEV4cHJlc3Npb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJtZXNzYWdlUGF0aFwiLFxuICAgIHR5cGU6IFwiRm9ybWFsRXhwcmVzc2lvblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImRhdGFQYXRoXCIsXG4gICAgdHlwZTogXCJGb3JtYWxFeHByZXNzaW9uXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eVJlZlwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25Qcm9wZXJ0eVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlJlc291cmNlXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlc291cmNlUGFyYW1ldGVyc1wiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZXNvdXJjZVBhcmFtZXRlclwiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc1JlcXVpcmVkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInR5cGVcIixcbiAgICB0eXBlOiBcIkl0ZW1EZWZpbml0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29ycmVsYXRpb25TdWJzY3JpcHRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb3JyZWxhdGlvbktleVJlZlwiLFxuICAgIHR5cGU6IFwiQ29ycmVsYXRpb25LZXlcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcbiAgICB0eXBlOiBcIkNvcnJlbGF0aW9uUHJvcGVydHlCaW5kaW5nXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTWVzc2FnZUZsb3dcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwic291cmNlUmVmXCIsXG4gICAgdHlwZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0UmVmXCIsXG4gICAgdHlwZTogXCJJbnRlcmFjdGlvbk5vZGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIk1lc3NhZ2VGbG93QXNzb2NpYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbm5lck1lc3NhZ2VGbG93UmVmXCIsXG4gICAgdHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvdXRlck1lc3NhZ2VGbG93UmVmXCIsXG4gICAgdHlwZTogXCJNZXNzYWdlRmxvd1wiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkludGVyYWN0aW9uTm9kZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5jb21pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0Z29pbmdDb252ZXJzYXRpb25MaW5rc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0aWNpcGFudFwiLFxuICBzdXBlckNsYXNzOiBbXCJJbnRlcmFjdGlvbk5vZGVcIiwgXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbnRlcmZhY2VSZWZcIixcbiAgICB0eXBlOiBcIkludGVyZmFjZVwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJwYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRNdWx0aXBsaWNpdHlcIlxuICB9LCB7XG4gICAgbmFtZTogXCJlbmRQb2ludFJlZnNcIixcbiAgICB0eXBlOiBcIkVuZFBvaW50XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInByb2Nlc3NSZWZcIixcbiAgICB0eXBlOiBcIlByb2Nlc3NcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5uZXJQYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwib3V0ZXJQYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJQYXJ0aWNpcGFudE11bHRpcGxpY2l0eVwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibWluaW11bVwiLFxuICAgIFwiZGVmYXVsdFwiOiAwLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkludGVnZXJcIlxuICB9LCB7XG4gICAgbmFtZTogXCJtYXhpbXVtXCIsXG4gICAgXCJkZWZhdWx0XCI6IDEsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiSW50ZWdlclwiXG4gIH1dLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkNvbGxhYm9yYXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiUm9vdEVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNDbG9zZWRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRzXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJtZXNzYWdlRmxvd3NcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VGbG93XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImFydGlmYWN0c1wiLFxuICAgIHR5cGU6IFwiQXJ0aWZhY3RcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29udmVyc2F0aW9uc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTm9kZVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb252ZXJzYXRpb25Bc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkNvbnZlcnNhdGlvbkFzc29jaWF0aW9uXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIlBhcnRpY2lwYW50QXNzb2NpYXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZUZsb3dBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VGbG93QXNzb2NpYXRpb25cIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG4gICAgdHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjaG9yZW9ncmFwaHlSZWZcIixcbiAgICB0eXBlOiBcIkNob3Jlb2dyYXBoeVwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjb252ZXJzYXRpb25MaW5rc1wiLFxuICAgIHR5cGU6IFwiQ29udmVyc2F0aW9uTGlua1wiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIkZsb3dOb2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRSZWZcIixcbiAgICB0eXBlOiBcIlBhcnRpY2lwYW50XCIsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImluaXRpYXRpbmdQYXJ0aWNpcGFudFJlZlwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY29ycmVsYXRpb25LZXlzXCIsXG4gICAgdHlwZTogXCJDb3JyZWxhdGlvbktleVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJsb29wVHlwZVwiLFxuICAgIHR5cGU6IFwiQ2hvcmVvZ3JhcGh5TG9vcFR5cGVcIixcbiAgICBcImRlZmF1bHRcIjogXCJOb25lXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ2FsbENob3Jlb2dyYXBoeVwiLFxuICBzdXBlckNsYXNzOiBbXCJDaG9yZW9ncmFwaHlBY3Rpdml0eVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImNhbGxlZENob3Jlb2dyYXBoeVJlZlwiLFxuICAgIHR5cGU6IFwiQ2hvcmVvZ3JhcGh5XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiU3ViQ2hvcmVvZ3JhcGh5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsIFwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYXJ0aWZhY3RzXCIsXG4gICAgdHlwZTogXCJBcnRpZmFjdFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNob3Jlb2dyYXBoeVRhc2tcIixcbiAgc3VwZXJDbGFzczogW1wiQ2hvcmVvZ3JhcGh5QWN0aXZpdHlcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJtZXNzYWdlRmxvd1JlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZUZsb3dcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDaG9yZW9ncmFwaHlcIixcbiAgc3VwZXJDbGFzczogW1wiQ29sbGFib3JhdGlvblwiLCBcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiXVxufSwge1xuICBuYW1lOiBcIkdsb2JhbENob3Jlb2dyYXBoeVRhc2tcIixcbiAgc3VwZXJDbGFzczogW1wiQ2hvcmVvZ3JhcGh5XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXG4gICAgdHlwZTogXCJQYXJ0aWNpcGFudFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlRleHRBbm5vdGF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFydGlmYWN0XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidGV4dFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwidGV4dEZvcm1hdFwiLFxuICAgIFwiZGVmYXVsdFwiOiBcInRleHQvcGxhaW5cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkdyb3VwXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFydGlmYWN0XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY2F0ZWdvcnlWYWx1ZVJlZlwiLFxuICAgIHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkFzc29jaWF0aW9uXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFydGlmYWN0XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYXNzb2NpYXRpb25EaXJlY3Rpb25cIixcbiAgICB0eXBlOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInNvdXJjZVJlZlwiLFxuICAgIHR5cGU6IFwiQmFzZUVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwidGFyZ2V0UmVmXCIsXG4gICAgdHlwZTogXCJCYXNlRWxlbWVudFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkNhdGVnb3J5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlJvb3RFbGVtZW50XCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY2F0ZWdvcnlWYWx1ZVwiLFxuICAgIHR5cGU6IFwiQ2F0ZWdvcnlWYWx1ZVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJBcnRpZmFjdFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkNhdGVnb3J5VmFsdWVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjYXRlZ29yaXplZEZsb3dFbGVtZW50c1wiLFxuICAgIHR5cGU6IFwiRmxvd0VsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInZhbHVlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJBY3Rpdml0eVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJGbG93Tm9kZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlzRm9yQ29tcGVuc2F0aW9uXCIsXG4gICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgdHlwZTogXCJTZXF1ZW5jZUZsb3dcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW9TcGVjaWZpY2F0aW9uXCIsXG4gICAgdHlwZTogXCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJib3VuZGFyeUV2ZW50UmVmc1wiLFxuICAgIHR5cGU6IFwiQm91bmRhcnlFdmVudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJwcm9wZXJ0aWVzXCIsXG4gICAgdHlwZTogXCJQcm9wZXJ0eVwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJkYXRhSW5wdXRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkRhdGFJbnB1dEFzc29jaWF0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImRhdGFPdXRwdXRBc3NvY2lhdGlvbnNcIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRBc3NvY2lhdGlvblwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJzdGFydFF1YW50aXR5XCIsXG4gICAgXCJkZWZhdWx0XCI6IDEsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiSW50ZWdlclwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlc291cmNlc1wiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VSb2xlXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImNvbXBsZXRpb25RdWFudGl0eVwiLFxuICAgIFwiZGVmYXVsdFwiOiAxLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkludGVnZXJcIlxuICB9LCB7XG4gICAgbmFtZTogXCJsb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG4gICAgdHlwZTogXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJTZXJ2aWNlVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJvcGVyYXRpb25SZWZcIixcbiAgICB0eXBlOiBcIk9wZXJhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlN1YlByb2Nlc3NcIixcbiAgc3VwZXJDbGFzczogW1wiQWN0aXZpdHlcIiwgXCJGbG93RWxlbWVudHNDb250YWluZXJcIiwgXCJJbnRlcmFjdGlvbk5vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJ0cmlnZ2VyZWRCeUV2ZW50XCIsXG4gICAgXCJkZWZhdWx0XCI6IGZhbHNlLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJhcnRpZmFjdHNcIixcbiAgICB0eXBlOiBcIkFydGlmYWN0XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTG9vcENoYXJhY3RlcmlzdGljc1wiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIk11bHRpSW5zdGFuY2VMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkxvb3BDaGFyYWN0ZXJpc3RpY3NcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpc1NlcXVlbnRpYWxcIixcbiAgICBcImRlZmF1bHRcIjogZmFsc2UsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImJlaGF2aW9yXCIsXG4gICAgdHlwZTogXCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcbiAgICBcImRlZmF1bHRcIjogXCJBbGxcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibG9vcENhcmRpbmFsaXR5XCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwibG9vcERhdGFJbnB1dFJlZlwiLFxuICAgIHR5cGU6IFwiSXRlbUF3YXJlRWxlbWVudFwiLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImxvb3BEYXRhT3V0cHV0UmVmXCIsXG4gICAgdHlwZTogXCJJdGVtQXdhcmVFbGVtZW50XCIsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaW5wdXREYXRhSXRlbVwiLFxuICAgIHR5cGU6IFwiRGF0YUlucHV0XCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwicHJvcGVydHlcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwib3V0cHV0RGF0YUl0ZW1cIixcbiAgICB0eXBlOiBcIkRhdGFPdXRwdXRcIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJwcm9wZXJ0eVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJjb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG4gICAgdHlwZTogXCJDb21wbGV4QmVoYXZpb3JEZWZpbml0aW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImNvbXBsZXRpb25Db25kaXRpb25cIixcbiAgICB0eXBlOiBcIkV4cHJlc3Npb25cIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9LCB7XG4gICAgbmFtZTogXCJvbmVCZWhhdmlvckV2ZW50UmVmXCIsXG4gICAgdHlwZTogXCJFdmVudERlZmluaXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcbiAgICB0eXBlOiBcIkV2ZW50RGVmaW5pdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlN0YW5kYXJkTG9vcENoYXJhY3RlcmlzdGljc1wiLFxuICBzdXBlckNsYXNzOiBbXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwidGVzdEJlZm9yZVwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibG9vcENvbmRpdGlvblwiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiBcImxvb3BNYXhpbXVtXCIsXG4gICAgdHlwZTogXCJJbnRlZ2VyXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ2FsbEFjdGl2aXR5XCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkFjdGl2aXR5XCIsIFwiSW50ZXJhY3Rpb25Ob2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiY2FsbGVkRWxlbWVudFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJBY3Rpdml0eVwiLCBcIkludGVyYWN0aW9uTm9kZVwiXVxufSwge1xuICBuYW1lOiBcIlNlbmRUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm9wZXJhdGlvblJlZlwiLFxuICAgIHR5cGU6IFwiT3BlcmF0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1lc3NhZ2VSZWZcIixcbiAgICB0eXBlOiBcIk1lc3NhZ2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZWNlaXZlVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbnN0YW50aWF0ZVwiLFxuICAgIFwiZGVmYXVsdFwiOiBmYWxzZSxcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwib3BlcmF0aW9uUmVmXCIsXG4gICAgdHlwZTogXCJPcGVyYXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwibWVzc2FnZVJlZlwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlNjcmlwdFRhc2tcIixcbiAgc3VwZXJDbGFzczogW1wiVGFza1wiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInNjcmlwdEZvcm1hdFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInNjcmlwdFwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJCdXNpbmVzc1J1bGVUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpbXBsZW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQWRIb2NTdWJQcm9jZXNzXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIlN1YlByb2Nlc3NcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb21wbGV0aW9uQ29uZGl0aW9uXCIsXG4gICAgdHlwZTogXCJFeHByZXNzaW9uXCIsXG4gICAgeG1sOiB7XG4gICAgICBzZXJpYWxpemU6IFwieHNpOnR5cGVcIlxuICAgIH1cbiAgfSwge1xuICAgIG5hbWU6IFwib3JkZXJpbmdcIixcbiAgICB0eXBlOiBcIkFkSG9jT3JkZXJpbmdcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiY2FuY2VsUmVtYWluaW5nSW5zdGFuY2VzXCIsXG4gICAgXCJkZWZhdWx0XCI6IHRydWUsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiVHJhbnNhY3Rpb25cIixcbiAgc3VwZXJDbGFzczogW1wiU3ViUHJvY2Vzc1wiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInByb3RvY29sXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibWV0aG9kXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJHbG9iYWxTY3JpcHRUYXNrXCIsXG4gIHN1cGVyQ2xhc3M6IFtcIkdsb2JhbFRhc2tcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzY3JpcHRMYW5ndWFnZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInNjcmlwdFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiR2xvYmFsQnVzaW5lc3NSdWxlVGFza1wiLFxuICBzdXBlckNsYXNzOiBbXCJHbG9iYWxUYXNrXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wbGVtZW50YXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkNvbXBsZXhCZWhhdmlvckRlZmluaXRpb25cIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb25kaXRpb25cIixcbiAgICB0eXBlOiBcIkZvcm1hbEV4cHJlc3Npb25cIlxuICB9LCB7XG4gICAgbmFtZTogXCJldmVudFwiLFxuICAgIHR5cGU6IFwiSW1wbGljaXRUaHJvd0V2ZW50XCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJSZXNvdXJjZVJvbGVcIixcbiAgc3VwZXJDbGFzczogW1wiQmFzZUVsZW1lbnRcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJyZXNvdXJjZVJlZlwiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VcIixcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJyZXNvdXJjZVBhcmFtZXRlckJpbmRpbmdzXCIsXG4gICAgdHlwZTogXCJSZXNvdXJjZVBhcmFtZXRlckJpbmRpbmdcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwicmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlJlc291cmNlUGFyYW1ldGVyQmluZGluZ1wiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH0sIHtcbiAgICBuYW1lOiBcInBhcmFtZXRlclJlZlwiLFxuICAgIHR5cGU6IFwiUmVzb3VyY2VQYXJhbWV0ZXJcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcIkJhc2VFbGVtZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiUmVzb3VyY2VBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiZXhwcmVzc2lvblwiLFxuICAgIHR5cGU6IFwiRXhwcmVzc2lvblwiLFxuICAgIHhtbDoge1xuICAgICAgc2VyaWFsaXplOiBcInhzaTp0eXBlXCJcbiAgICB9XG4gIH1dLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXVxufSwge1xuICBuYW1lOiBcIkltcG9ydFwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiaW1wb3J0VHlwZVwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImxvY2F0aW9uXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibmFtZXNwYWNlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJEZWZpbml0aW9uc1wiLFxuICBzdXBlckNsYXNzOiBbXCJCYXNlRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXROYW1lc3BhY2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHByZXNzaW9uTGFuZ3VhZ2VcIixcbiAgICBcImRlZmF1bHRcIjogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hQYXRoXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwidHlwZUxhbmd1YWdlXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpbXBvcnRzXCIsXG4gICAgdHlwZTogXCJJbXBvcnRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZXh0ZW5zaW9uc1wiLFxuICAgIHR5cGU6IFwiRXh0ZW5zaW9uXCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInJvb3RFbGVtZW50c1wiLFxuICAgIHR5cGU6IFwiUm9vdEVsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiZGlhZ3JhbXNcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgdHlwZTogXCJicG1uZGk6QlBNTkRpYWdyYW1cIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHBvcnRlclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlbGF0aW9uc2hpcHNcIixcbiAgICB0eXBlOiBcIlJlbGF0aW9uc2hpcFwiLFxuICAgIGlzTWFueTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJleHBvcnRlclZlcnNpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9XVxufV07XG52YXIgZW51bWVyYXRpb25zJDMgPSBbe1xuICBuYW1lOiBcIlByb2Nlc3NUeXBlXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJOb25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiUHVibGljXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiUHJpdmF0ZVwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiR2F0ZXdheURpcmVjdGlvblwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiVW5zcGVjaWZpZWRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJDb252ZXJnaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiRGl2ZXJnaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiTWl4ZWRcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiUGFyYWxsZWxcIlxuICB9LCB7XG4gICAgbmFtZTogXCJFeGNsdXNpdmVcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiTm9uZVwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIkZvcndhcmRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJCYWNrd2FyZFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIkJvdGhcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkl0ZW1LaW5kXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJQaHlzaWNhbFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIkluZm9ybWF0aW9uXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDaG9yZW9ncmFwaHlMb29wVHlwZVwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiTm9uZVwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIlN0YW5kYXJkXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiTXVsdGlJbnN0YW5jZVNlcXVlbnRpYWxcIlxuICB9LCB7XG4gICAgbmFtZTogXCJNdWx0aUluc3RhbmNlUGFyYWxsZWxcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIkFzc29jaWF0aW9uRGlyZWN0aW9uXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJOb25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiT25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiQm90aFwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTXVsdGlJbnN0YW5jZUJlaGF2aW9yXCIsXG4gIGxpdGVyYWxWYWx1ZXM6IFt7XG4gICAgbmFtZTogXCJOb25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiT25lXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiQWxsXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiQ29tcGxleFwiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQWRIb2NPcmRlcmluZ1wiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwiUGFyYWxsZWxcIlxuICB9LCB7XG4gICAgbmFtZTogXCJTZXF1ZW50aWFsXCJcbiAgfV1cbn1dO1xudmFyIHhtbCQxID0ge1xuICB0YWdBbGlhczogXCJsb3dlckNhc2VcIixcbiAgdHlwZVByZWZpeDogXCJ0XCJcbn07XG52YXIgQnBtblBhY2thZ2UgPSB7XG4gIG5hbWU6IG5hbWUkNSxcbiAgdXJpOiB1cmkkNSxcbiAgcHJlZml4OiBwcmVmaXgkNSxcbiAgYXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMkNSxcbiAgdHlwZXM6IHR5cGVzJDUsXG4gIGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDMsXG4gIHhtbDogeG1sJDFcbn07XG52YXIgbmFtZSQ0ID0gXCJCUE1ORElcIjtcbnZhciB1cmkkNCA9IFwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiO1xudmFyIHByZWZpeCQ0ID0gXCJicG1uZGlcIjtcbnZhciB0eXBlcyQ0ID0gW3tcbiAgbmFtZTogXCJCUE1ORGlhZ3JhbVwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwicGxhbmVcIixcbiAgICB0eXBlOiBcIkJQTU5QbGFuZVwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtI3Jvb3RFbGVtZW50XCJcbiAgfSwge1xuICAgIG5hbWU6IFwibGFiZWxTdHlsZVwiLFxuICAgIHR5cGU6IFwiQlBNTkxhYmVsU3R5bGVcIixcbiAgICBpc01hbnk6IHRydWVcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcImRpOkRpYWdyYW1cIl1cbn0sIHtcbiAgbmFtZTogXCJCUE1OUGxhbmVcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJwbW5FbGVtZW50XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuICB9XSxcbiAgc3VwZXJDbGFzczogW1wiZGk6UGxhbmVcIl1cbn0sIHtcbiAgbmFtZTogXCJCUE1OU2hhcGVcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJwbW5FbGVtZW50XCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiYnBtbjpCYXNlRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc0hvcml6b250YWxcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNFeHBhbmRlZFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIkJvb2xlYW5cIlxuICB9LCB7XG4gICAgbmFtZTogXCJpc01hcmtlclZpc2libGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibGFiZWxcIixcbiAgICB0eXBlOiBcIkJQTU5MYWJlbFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzTWVzc2FnZVZpc2libGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJCb29sZWFuXCJcbiAgfSwge1xuICAgIG5hbWU6IFwicGFydGljaXBhbnRCYW5kS2luZFwiLFxuICAgIHR5cGU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJjaG9yZW9ncmFwaHlBY3Rpdml0eVNoYXBlXCIsXG4gICAgdHlwZTogXCJCUE1OU2hhcGVcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcImRpOkxhYmVsZWRTaGFwZVwiXVxufSwge1xuICBuYW1lOiBcIkJQTU5FZGdlXCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJsYWJlbFwiLFxuICAgIHR5cGU6IFwiQlBNTkxhYmVsXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYnBtbkVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJicG1uOkJhc2VFbGVtZW50XCIsXG4gICAgcmVkZWZpbmVzOiBcImRpOkRpYWdyYW1FbGVtZW50I21vZGVsRWxlbWVudFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInNvdXJjZUVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJkaTpEaWFncmFtRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpFZGdlI3NvdXJjZVwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInRhcmdldEVsZW1lbnRcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWUsXG4gICAgdHlwZTogXCJkaTpEaWFncmFtRWxlbWVudFwiLFxuICAgIHJlZGVmaW5lczogXCJkaTpFZGdlI3RhcmdldFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1lc3NhZ2VWaXNpYmxlS2luZFwiLFxuICAgIHR5cGU6IFwiTWVzc2FnZVZpc2libGVLaW5kXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIFwiZGVmYXVsdFwiOiBcImluaXRpYXRpbmdcIlxuICB9XSxcbiAgc3VwZXJDbGFzczogW1wiZGk6TGFiZWxlZEVkZ2VcIl1cbn0sIHtcbiAgbmFtZTogXCJCUE1OTGFiZWxcIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImxhYmVsU3R5bGVcIixcbiAgICB0eXBlOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHJlZGVmaW5lczogXCJkaTpEaWFncmFtRWxlbWVudCNzdHlsZVwiXG4gIH1dLFxuICBzdXBlckNsYXNzOiBbXCJkaTpMYWJlbFwiXVxufSwge1xuICBuYW1lOiBcIkJQTU5MYWJlbFN0eWxlXCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJmb250XCIsXG4gICAgdHlwZTogXCJkYzpGb250XCJcbiAgfV0sXG4gIHN1cGVyQ2xhc3M6IFtcImRpOlN0eWxlXCJdXG59XTtcbnZhciBlbnVtZXJhdGlvbnMkMiA9IFt7XG4gIG5hbWU6IFwiUGFydGljaXBhbnRCYW5kS2luZFwiLFxuICBsaXRlcmFsVmFsdWVzOiBbe1xuICAgIG5hbWU6IFwidG9wX2luaXRpYXRpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJtaWRkbGVfaW5pdGlhdGluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImJvdHRvbV9pbml0aWF0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwidG9wX25vbl9pbml0aWF0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwibWlkZGxlX25vbl9pbml0aWF0aW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiYm90dG9tX25vbl9pbml0aWF0aW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJNZXNzYWdlVmlzaWJsZUtpbmRcIixcbiAgbGl0ZXJhbFZhbHVlczogW3tcbiAgICBuYW1lOiBcImluaXRpYXRpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJub25faW5pdGlhdGluZ1wiXG4gIH1dXG59XTtcbnZhciBhc3NvY2lhdGlvbnMkNCA9IFtdO1xudmFyIEJwbW5EaVBhY2thZ2UgPSB7XG4gIG5hbWU6IG5hbWUkNCxcbiAgdXJpOiB1cmkkNCxcbiAgcHJlZml4OiBwcmVmaXgkNCxcbiAgdHlwZXM6IHR5cGVzJDQsXG4gIGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDIsXG4gIGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDRcbn07XG52YXIgbmFtZSQzID0gXCJEQ1wiO1xudmFyIHVyaSQzID0gXCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9ERC8yMDEwMDUyNC9EQ1wiO1xudmFyIHByZWZpeCQzID0gXCJkY1wiO1xudmFyIHR5cGVzJDMgPSBbe1xuICBuYW1lOiBcIkJvb2xlYW5cIlxufSwge1xuICBuYW1lOiBcIkludGVnZXJcIlxufSwge1xuICBuYW1lOiBcIlJlYWxcIlxufSwge1xuICBuYW1lOiBcIlN0cmluZ1wiXG59LCB7XG4gIG5hbWU6IFwiRm9udFwiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcInNpemVcIixcbiAgICB0eXBlOiBcIlJlYWxcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaXNCb2xkXCIsXG4gICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzSXRhbGljXCIsXG4gICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzVW5kZXJsaW5lXCIsXG4gICAgdHlwZTogXCJCb29sZWFuXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcImlzU3RyaWtlVGhyb3VnaFwiLFxuICAgIHR5cGU6IFwiQm9vbGVhblwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIlBvaW50XCIsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJ4XCIsXG4gICAgdHlwZTogXCJSZWFsXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiMFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ5XCIsXG4gICAgdHlwZTogXCJSZWFsXCIsXG4gICAgXCJkZWZhdWx0XCI6IFwiMFwiLFxuICAgIGlzQXR0cjogdHJ1ZVxuICB9XVxufSwge1xuICBuYW1lOiBcIkJvdW5kc1wiLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwieFwiLFxuICAgIHR5cGU6IFwiUmVhbFwiLFxuICAgIFwiZGVmYXVsdFwiOiBcIjBcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwieVwiLFxuICAgIHR5cGU6IFwiUmVhbFwiLFxuICAgIFwiZGVmYXVsdFwiOiBcIjBcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2lkdGhcIixcbiAgICB0eXBlOiBcIlJlYWxcIixcbiAgICBpc0F0dHI6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwiaGVpZ2h0XCIsXG4gICAgdHlwZTogXCJSZWFsXCIsXG4gICAgaXNBdHRyOiB0cnVlXG4gIH1dXG59XTtcbnZhciBhc3NvY2lhdGlvbnMkMyA9IFtdO1xudmFyIERjUGFja2FnZSA9IHtcbiAgbmFtZTogbmFtZSQzLFxuICB1cmk6IHVyaSQzLFxuICBwcmVmaXg6IHByZWZpeCQzLFxuICB0eXBlczogdHlwZXMkMyxcbiAgYXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMkM1xufTtcbnZhciBuYW1lJDIgPSBcIkRJXCI7XG52YXIgdXJpJDIgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCI7XG52YXIgcHJlZml4JDIgPSBcImRpXCI7XG52YXIgdHlwZXMkMiA9IFt7XG4gIG5hbWU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzSWQ6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJleHRlbnNpb25cIixcbiAgICB0eXBlOiBcIkV4dGVuc2lvblwiXG4gIH0sIHtcbiAgICBuYW1lOiBcIm93bmluZ0RpYWdyYW1cIixcbiAgICB0eXBlOiBcIkRpYWdyYW1cIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJvd25pbmdFbGVtZW50XCIsXG4gICAgdHlwZTogXCJEaWFncmFtRWxlbWVudFwiLFxuICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm1vZGVsRWxlbWVudFwiLFxuICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlLFxuICAgIHR5cGU6IFwiRWxlbWVudFwiXG4gIH0sIHtcbiAgICBuYW1lOiBcInN0eWxlXCIsXG4gICAgdHlwZTogXCJTdHlsZVwiLFxuICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlLFxuICAgIGlzUmVmZXJlbmNlOiB0cnVlXG4gIH0sIHtcbiAgICBuYW1lOiBcIm93bmVkRWxlbWVudFwiLFxuICAgIHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJOb2RlXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIkRpYWdyYW1FbGVtZW50XCJdXG59LCB7XG4gIG5hbWU6IFwiRWRnZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJEaWFncmFtRWxlbWVudFwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInNvdXJjZVwiLFxuICAgIHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZSxcbiAgICBpc1JlZmVyZW5jZTogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJ0YXJnZXRcIixcbiAgICB0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG4gICAgaXNSZWFkT25seTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWUsXG4gICAgaXNSZWZlcmVuY2U6IHRydWVcbiAgfSwge1xuICAgIG5hbWU6IFwid2F5cG9pbnRcIixcbiAgICBpc1VuaXF1ZTogZmFsc2UsXG4gICAgaXNNYW55OiB0cnVlLFxuICAgIHR5cGU6IFwiZGM6UG9pbnRcIixcbiAgICB4bWw6IHtcbiAgICAgIHNlcmlhbGl6ZTogXCJ4c2k6dHlwZVwiXG4gICAgfVxuICB9XVxufSwge1xuICBuYW1lOiBcIkRpYWdyYW1cIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImlkXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIGlzSWQ6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJyb290RWxlbWVudFwiLFxuICAgIHR5cGU6IFwiRGlhZ3JhbUVsZW1lbnRcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzVmlydHVhbDogdHJ1ZVxuICB9LCB7XG4gICAgbmFtZTogXCJuYW1lXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZG9jdW1lbnRhdGlvblwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcInJlc29sdXRpb25cIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJSZWFsXCJcbiAgfSwge1xuICAgIG5hbWU6IFwib3duZWRTdHlsZVwiLFxuICAgIHR5cGU6IFwiU3R5bGVcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJTaGFwZVwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJOb2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYm91bmRzXCIsXG4gICAgdHlwZTogXCJkYzpCb3VuZHNcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlBsYW5lXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIk5vZGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJwbGFuZUVsZW1lbnRcIixcbiAgICB0eXBlOiBcIkRpYWdyYW1FbGVtZW50XCIsXG4gICAgc3Vic2V0dGVkUHJvcGVydHk6IFwiRGlhZ3JhbUVsZW1lbnQtb3duZWRFbGVtZW50XCIsXG4gICAgaXNNYW55OiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTGFiZWxlZEVkZ2VcIixcbiAgaXNBYnN0cmFjdDogdHJ1ZSxcbiAgc3VwZXJDbGFzczogW1wiRWRnZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcIm93bmVkTGFiZWxcIixcbiAgICB0eXBlOiBcIkxhYmVsXCIsXG4gICAgaXNSZWFkT25seTogdHJ1ZSxcbiAgICBzdWJzZXR0ZWRQcm9wZXJ0eTogXCJEaWFncmFtRWxlbWVudC1vd25lZEVsZW1lbnRcIixcbiAgICBpc01hbnk6IHRydWUsXG4gICAgaXNWaXJ0dWFsOiB0cnVlXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiTGFiZWxlZFNoYXBlXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHN1cGVyQ2xhc3M6IFtcIlNoYXBlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwib3duZWRMYWJlbFwiLFxuICAgIHR5cGU6IFwiTGFiZWxcIixcbiAgICBpc1JlYWRPbmx5OiB0cnVlLFxuICAgIHN1YnNldHRlZFByb3BlcnR5OiBcIkRpYWdyYW1FbGVtZW50LW93bmVkRWxlbWVudFwiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICBpc1ZpcnR1YWw6IHRydWVcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJMYWJlbFwiLFxuICBpc0Fic3RyYWN0OiB0cnVlLFxuICBzdXBlckNsYXNzOiBbXCJOb2RlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYm91bmRzXCIsXG4gICAgdHlwZTogXCJkYzpCb3VuZHNcIlxuICB9XVxufSwge1xuICBuYW1lOiBcIlN0eWxlXCIsXG4gIGlzQWJzdHJhY3Q6IHRydWUsXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJpZFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICBpc0lkOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJFeHRlbnNpb25cIixcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcInZhbHVlc1wiLFxuICAgIGlzTWFueTogdHJ1ZSxcbiAgICB0eXBlOiBcIkVsZW1lbnRcIlxuICB9XVxufV07XG52YXIgYXNzb2NpYXRpb25zJDIgPSBbXTtcbnZhciB4bWwkMiA9IHtcbiAgdGFnQWxpYXM6IFwibG93ZXJDYXNlXCJcbn07XG52YXIgRGlQYWNrYWdlID0ge1xuICBuYW1lOiBuYW1lJDIsXG4gIHVyaTogdXJpJDIsXG4gIHByZWZpeDogcHJlZml4JDIsXG4gIHR5cGVzOiB0eXBlcyQyLFxuICBhc3NvY2lhdGlvbnM6IGFzc29jaWF0aW9ucyQyLFxuICB4bWw6IHhtbCQyXG59O1xudmFyIG5hbWUkMSA9IFwiYnBtbi5pbyBjb2xvcnMgZm9yIEJQTU5cIjtcbnZhciB1cmkkMSA9IFwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW4vYmlvY29sb3IvMS4wXCI7XG52YXIgcHJlZml4JDEgPSBcImJpb2NcIjtcbnZhciB0eXBlcyQxID0gW3tcbiAgbmFtZTogXCJDb2xvcmVkU2hhcGVcIixcbiAgXCJleHRlbmRzXCI6IFtcImJwbW5kaTpCUE1OU2hhcGVcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJzdHJva2VcIixcbiAgICBpc0F0dHI6IHRydWUsXG4gICAgdHlwZTogXCJTdHJpbmdcIlxuICB9LCB7XG4gICAgbmFtZTogXCJmaWxsXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfV1cbn0sIHtcbiAgbmFtZTogXCJDb2xvcmVkRWRnZVwiLFxuICBcImV4dGVuZHNcIjogW1wiYnBtbmRpOkJQTU5FZGdlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwic3Ryb2tlXCIsXG4gICAgaXNBdHRyOiB0cnVlLFxuICAgIHR5cGU6IFwiU3RyaW5nXCJcbiAgfSwge1xuICAgIG5hbWU6IFwiZmlsbFwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59XTtcbnZhciBlbnVtZXJhdGlvbnMkMSA9IFtdO1xudmFyIGFzc29jaWF0aW9ucyQxID0gW107XG52YXIgQmlvY1BhY2thZ2UgPSB7XG4gIG5hbWU6IG5hbWUkMSxcbiAgdXJpOiB1cmkkMSxcbiAgcHJlZml4OiBwcmVmaXgkMSxcbiAgdHlwZXM6IHR5cGVzJDEsXG4gIGVudW1lcmF0aW9uczogZW51bWVyYXRpb25zJDEsXG4gIGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDFcbn07XG52YXIgbmFtZSQ2ID0gXCJCUE1OIGluIENvbG9yXCI7XG52YXIgdXJpJDYgPSBcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vbm9uLW5vcm1hdGl2ZS9jb2xvci8xLjBcIjtcbnZhciBwcmVmaXgkNiA9IFwiY29sb3JcIjtcbnZhciB0eXBlcyQ2ID0gW3tcbiAgbmFtZTogXCJDb2xvcmVkTGFiZWxcIixcbiAgXCJleHRlbmRzXCI6IFtcImJwbW5kaTpCUE1OTGFiZWxcIl0sXG4gIHByb3BlcnRpZXM6IFt7XG4gICAgbmFtZTogXCJjb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29sb3JlZFNoYXBlXCIsXG4gIFwiZXh0ZW5kc1wiOiBbXCJicG1uZGk6QlBNTlNoYXBlXCJdLFxuICBwcm9wZXJ0aWVzOiBbe1xuICAgIG5hbWU6IFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH0sIHtcbiAgICBuYW1lOiBcImJvcmRlci1jb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59LCB7XG4gIG5hbWU6IFwiQ29sb3JlZEVkZ2VcIixcbiAgXCJleHRlbmRzXCI6IFtcImJwbW5kaTpCUE1ORWRnZVwiXSxcbiAgcHJvcGVydGllczogW3tcbiAgICBuYW1lOiBcImJvcmRlci1jb2xvclwiLFxuICAgIGlzQXR0cjogdHJ1ZSxcbiAgICB0eXBlOiBcIlN0cmluZ1wiXG4gIH1dXG59XTtcbnZhciBlbnVtZXJhdGlvbnMgPSBbXTtcbnZhciBhc3NvY2lhdGlvbnMkNiA9IFtdO1xudmFyIEJwbW5JbkNvbG9yUGFja2FnZSA9IHtcbiAgbmFtZTogbmFtZSQ2LFxuICB1cmk6IHVyaSQ2LFxuICBwcmVmaXg6IHByZWZpeCQ2LFxuICB0eXBlczogdHlwZXMkNixcbiAgZW51bWVyYXRpb25zOiBlbnVtZXJhdGlvbnMsXG4gIGFzc29jaWF0aW9uczogYXNzb2NpYXRpb25zJDZcbn07XG5jb25zdCBwYWNrYWdlcyA9IHtcbiAgYnBtbjogQnBtblBhY2thZ2UsXG4gIGJwbW5kaTogQnBtbkRpUGFja2FnZSxcbiAgZGM6IERjUGFja2FnZSxcbiAgZGk6IERpUGFja2FnZSxcbiAgYmlvYzogQmlvY1BhY2thZ2UsXG4gIGNvbG9yOiBCcG1uSW5Db2xvclBhY2thZ2Vcbn07XG5mdW5jdGlvbiBTaW1wbGVCcG1uTW9kZGxlKGFkZGl0aW9uYWxQYWNrYWdlcywgb3B0aW9ucykge1xuICBjb25zdCBwa3MgPSBhc3NpZ24oe30sIHBhY2thZ2VzLCBhZGRpdGlvbmFsUGFja2FnZXMpO1xuICByZXR1cm4gbmV3IEJwbW5Nb2RkbGUocGtzLCBvcHRpb25zKTtcbn1cblxudmFyIG5hbWUgPSBcInplZWJlXCI7XG52YXIgcHJlZml4ID0gXCJ6ZWViZVwiO1xudmFyIHVyaSA9IFwiaHR0cDovL2NhbXVuZGEub3JnL3NjaGVtYS96ZWViZS8xLjBcIjtcbnZhciB4bWwgPSB7XG5cdHRhZ0FsaWFzOiBcImxvd2VyQ2FzZVwiXG59O1xudmFyIGFzc29jaWF0aW9ucyA9IFtcbl07XG52YXIgdHlwZXMgPSBbXG5cdHtcblx0XHRuYW1lOiBcIlplZWJlU2VydmljZVRhc2tcIixcblx0XHRcImV4dGVuZHNcIjogW1xuXHRcdFx0XCJicG1uOlNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcImJwbW46QnVzaW5lc3NSdWxlVGFza1wiLFxuXHRcdFx0XCJicG1uOlNjcmlwdFRhc2tcIixcblx0XHRcdFwiYnBtbjpTZW5kVGFza1wiLFxuXHRcdFx0XCJicG1uOkVuZEV2ZW50XCIsXG5cdFx0XHRcImJwbW46SW50ZXJtZWRpYXRlVGhyb3dFdmVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicmV0cnlDb3VudGVyXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSW9NYXBwaW5nXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpb01hcHBpbmdcIixcblx0XHRcdFx0dHlwZTogXCJJb01hcHBpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dFBhcmFtZXRlcnNcIixcblx0XHRcdFx0aXNNYW55OiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIklucHV0XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0UGFyYW1ldGVyc1wiLFxuXHRcdFx0XHRpc01hbnk6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiT3V0cHV0XCJcblx0XHRcdH1cblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46Q2FsbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiYnBtbjpFdmVudFwiLFxuXHRcdFx0XHRcImJwbW46UmVjZWl2ZVRhc2tcIixcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnB1dE91dHB1dFBhcmFtZXRlclwiLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJzb3VyY2VcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInRhcmdldFwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlN1YnNjcmlwdGlvblwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiY29ycmVsYXRpb25LZXlcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJJbnB1dFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiSW5wdXRPdXRwdXRQYXJhbWV0ZXJcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpDYWxsQWN0aXZpdHlcIixcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJPdXRwdXRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIklucHV0T3V0cHV0UGFyYW1ldGVyXCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46Q2FsbEFjdGl2aXR5XCIsXG5cdFx0XHRcdFwiYnBtbjpFdmVudFwiLFxuXHRcdFx0XHRcImJwbW46UmVjZWl2ZVRhc2tcIixcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJUYXNrSGVhZGVyc1wiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRtZXRhOiB7XG5cdFx0XHRhbGxvd2VkSW46IFtcblx0XHRcdFx0XCJ6ZWViZTpaZWViZVNlcnZpY2VUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwidmFsdWVzXCIsXG5cdFx0XHRcdHR5cGU6IFwiSGVhZGVyXCIsXG5cdFx0XHRcdGlzTWFueTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiSGVhZGVyXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpZFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwia2V5XCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJ2YWx1ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRhc2tEZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcInplZWJlOlplZWJlU2VydmljZVRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInR5cGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJldHJpZXNcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9XG5cdFx0XVxuXHR9LFxuXHR7XG5cdFx0bmFtZTogXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcInplZWJlOlplZWJlU2VydmljZVRhc2tcIixcblx0XHRcdFx0XCJicG1uOlJlY2VpdmVUYXNrXCIsXG5cdFx0XHRcdFwiYnBtbjpTdWJQcm9jZXNzXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJpbnB1dENvbGxlY3Rpb25cIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlucHV0RWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0Q29sbGVjdGlvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwib3V0cHV0RWxlbWVudFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkNhbGxlZEVsZW1lbnRcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpDYWxsQWN0aXZpdHlcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb2Nlc3NJZFwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvY2Vzc0lkRXhwcmVzc2lvblwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwicHJvcGFnYXRlQWxsQ2hpbGRWYXJpYWJsZXNcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJwcm9wYWdhdGVBbGxQYXJlbnRWYXJpYWJsZXNcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcIkJvb2xlYW5cIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlVzZXJUYXNrRm9ybVwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRtZXRhOiB7XG5cdFx0XHRhbGxvd2VkSW46IFtcblx0XHRcdFx0XCJicG1uOlByb2Nlc3NcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImlkXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJib2R5XCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQm9keTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiRm9ybURlZmluaXRpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpVc2VyVGFza1wiXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZm9ybUtleVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiZm9ybUlkXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiQ2FsbGVkRGVjaXNpb25cIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0bWV0YToge1xuXHRcdFx0YWxsb3dlZEluOiBbXG5cdFx0XHRcdFwiYnBtbjpCdXNpbmVzc1J1bGVUYXNrXCJcblx0XHRcdF1cblx0XHR9LFxuXHRcdHByb3BlcnRpZXM6IFtcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJkZWNpc2lvbklkXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJyZXN1bHRWYXJpYWJsZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIkFzc2lnbm1lbnREZWZpbml0aW9uXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46VXNlclRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImFzc2lnbmVlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJjYW5kaWRhdGVHcm91cHNcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImNhbmRpZGF0ZVVzZXJzXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGFza1NjaGVkdWxlXCIsXG5cdFx0c3VwZXJDbGFzczogW1xuXHRcdFx0XCJFbGVtZW50XCJcblx0XHRdLFxuXHRcdG1ldGE6IHtcblx0XHRcdGFsbG93ZWRJbjogW1xuXHRcdFx0XHRcImJwbW46VXNlclRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImR1ZURhdGVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImZvbGxvd1VwRGF0ZVwiLFxuXHRcdFx0XHR0eXBlOiBcIlN0cmluZ1wiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlByb3BlcnRpZXNcIixcblx0XHRzdXBlckNsYXNzOiBbXG5cdFx0XHRcIkVsZW1lbnRcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInByb3BlcnRpZXNcIixcblx0XHRcdFx0dHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdFx0XHRpc01hbnk6IHRydWVcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlByb3BlcnR5XCIsXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm5hbWVcIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInZhbHVlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fSxcblx0e1xuXHRcdG5hbWU6IFwiVGVtcGxhdGVTdXBwb3J0ZWRcIixcblx0XHRpc0Fic3RyYWN0OiB0cnVlLFxuXHRcdFwiZXh0ZW5kc1wiOiBbXG5cdFx0XHRcImJwbW46Q29sbGFib3JhdGlvblwiLFxuXHRcdFx0XCJicG1uOlByb2Nlc3NcIixcblx0XHRcdFwiYnBtbjpGbG93RWxlbWVudFwiXG5cdFx0XSxcblx0XHRwcm9wZXJ0aWVzOiBbXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kZWxlclRlbXBsYXRlXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJtb2RlbGVyVGVtcGxhdGVWZXJzaW9uXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJJbnRlZ2VyXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kZWxlclRlbXBsYXRlSWNvblwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlRlbXBsYXRlZFJvb3RFbGVtZW50XCIsXG5cdFx0aXNBYnN0cmFjdDogdHJ1ZSxcblx0XHRcImV4dGVuZHNcIjogW1xuXHRcdFx0XCJicG1uOkVycm9yXCIsXG5cdFx0XHRcImJwbW46RXNjYWxhdGlvblwiLFxuXHRcdFx0XCJicG1uOk1lc3NhZ2VcIixcblx0XHRcdFwiYnBtbjpTaWduYWxcIlxuXHRcdF0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIm1vZGVsZXJUZW1wbGF0ZVwiLFxuXHRcdFx0XHRpc0F0dHI6IHRydWUsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCJcblx0XHRcdH1cblx0XHRdXG5cdH0sXG5cdHtcblx0XHRuYW1lOiBcIlNjcmlwdFwiLFxuXHRcdHN1cGVyQ2xhc3M6IFtcblx0XHRcdFwiRWxlbWVudFwiXG5cdFx0XSxcblx0XHRtZXRhOiB7XG5cdFx0XHRhbGxvd2VkSW46IFtcblx0XHRcdFx0XCJicG1uOlNjcmlwdFRhc2tcIlxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0cHJvcGVydGllczogW1xuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcImV4cHJlc3Npb25cIixcblx0XHRcdFx0dHlwZTogXCJTdHJpbmdcIixcblx0XHRcdFx0aXNBdHRyOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcInJlc3VsdFZhcmlhYmxlXCIsXG5cdFx0XHRcdHR5cGU6IFwiU3RyaW5nXCIsXG5cdFx0XHRcdGlzQXR0cjogdHJ1ZVxuXHRcdFx0fVxuXHRcdF1cblx0fVxuXTtcbnZhciB6ZWViZU1vZGRsZSA9IHtcblx0bmFtZTogbmFtZSxcblx0cHJlZml4OiBwcmVmaXgsXG5cdHVyaTogdXJpLFxuXHR4bWw6IHhtbCxcblx0YXNzb2NpYXRpb25zOiBhc3NvY2lhdGlvbnMsXG5cdHR5cGVzOiB0eXBlc1xufTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgQ2FtdW5kYSBTZXJ2aWNlcyBHbWJIIGFuZC9vciBsaWNlbnNlZCB0byBDYW11bmRhIFNlcnZpY2VzIEdtYkhcbiAqIHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodFxuICogb3duZXJzaGlwLlxuICpcbiAqIENhbXVuZGEgbGljZW5zZXMgdGhpcyBmaWxlIHRvIHlvdSB1bmRlciB0aGUgTUlUOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlXG4gKiBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBlbGVtZW50VGVtcGxhdGVMaW50UnVsZSA9ICh7XG4gIHRlbXBsYXRlcyA9IFtdXG59KSA9PiB7XG4gIGNvbnN0IG1vZGRsZSA9IG5ldyBTaW1wbGVCcG1uTW9kZGxlKHtcbiAgICB6ZWViZTogemVlYmVNb2RkbGVcbiAgfSk7XG4gIGNvbnN0IHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IobW9kZGxlKS5hZGRBbGwodGVtcGxhdGVzKTtcbiAgY29uc3QgdmFsaWRUZW1wbGF0ZXMgPSB2YWxpZGF0b3IuZ2V0VmFsaWRUZW1wbGF0ZXMoKTtcblxuICAvLyBXZSB1c2UgdGhlIEVsZW1lbnRUZW1wbGF0ZXMgTW9kdWxlIHdpdGhvdXQgdGhlIHJlcXVpcmVkIGJwbW4tanMgbW9kdWxlc1xuICAvLyBBcyB3ZSBvbmx5IHVzZSBpdCB0byBmYWNpbGl0YXRlIHRlbXBsYXRlIElEIGFuZCB2ZXJzaW9uIGxvb2t1cCxcbiAgLy8gYWNjZXNzIHRvIGNvbW1hbmRzdGFjayBldGMuIGlzIG5vdCByZXF1aXJlZFxuICBjb25zdCBlbGVtZW50VGVtcGxhdGVzID0gbmV3IEVsZW1lbnRUZW1wbGF0ZXMoKTtcbiAgZWxlbWVudFRlbXBsYXRlcy5zZXQodmFsaWRUZW1wbGF0ZXMpO1xuICBmdW5jdGlvbiBjaGVjayhub2RlLCByZXBvcnRlcikge1xuICAgIGlmICghaXMobm9kZSwgJ2JwbW46Rmxvd0VsZW1lbnQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGVtcGxhdGUgPSBlbGVtZW50VGVtcGxhdGVzLmdldChub2RlKTtcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gZWxlbWVudFRlbXBsYXRlcy5fZ2V0VGVtcGxhdGVJZChub2RlKTtcblxuICAgIC8vIEhhbmRsZSBtaXNzaW5nIHRlbXBsYXRlXG4gICAgaWYgKHRlbXBsYXRlSWQgJiYgIXRlbXBsYXRlKSB7XG4gICAgICByZXBvcnRlci5yZXBvcnQobm9kZS5pZCwgJ0xpbmtlZCBlbGVtZW50IHRlbXBsYXRlIG5vdCBmb3VuZCcsIHtcbiAgICAgICAgbmFtZTogbm9kZS5uYW1lXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZSA9IGFwcGx5Q29uZGl0aW9ucyhub2RlLCB0ZW1wbGF0ZSk7XG5cbiAgICAvLyBDaGVjayBhdHRyaWJ1dGVzXG4gICAgdGVtcGxhdGUucHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShub2RlLCBwcm9wZXJ0eSk7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRlUHJvcGVydHkodmFsdWUsIHByb3BlcnR5KTtcbiAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVwb3J0ZXIucmVwb3J0KG5vZGUuaWQsIGVycm9yLCB7XG4gICAgICAgIHByb3BlcnRpZXNQYW5lbDoge1xuICAgICAgICAgIGVudHJ5SWRzOiBbZ2V0RW50cnlJZChwcm9wZXJ0eSwgdGVtcGxhdGUpXVxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBub2RlLm5hbWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2hlY2tcbiAgfTtcbn07XG5jb25zdCBFbGVtZW50VGVtcGxhdGVMaW50ZXJQbHVnaW4gPSBmdW5jdGlvbiAodGVtcGxhdGVzKSB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnOiB7XG4gICAgICBydWxlczoge1xuICAgICAgICAnZWxlbWVudC10ZW1wbGF0ZXMvdmFsaWRhdGUnOiBbJ2Vycm9yJywge1xuICAgICAgICAgIHRlbXBsYXRlc1xuICAgICAgICB9XVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVzb2x2ZXI6IG5ldyBTdGF0aWNSZXNvbHZlcih7XG4gICAgICAncnVsZTpicG1ubGludC1wbHVnaW4tZWxlbWVudC10ZW1wbGF0ZXMvdmFsaWRhdGUnOiBlbGVtZW50VGVtcGxhdGVMaW50UnVsZVxuICAgIH0pXG4gIH07XG59O1xuXG4vLyBoZWxwZXJzIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2V0RW50cnlJZChwcm9wZXJ0eSwgdGVtcGxhdGUpIHtcbiAgY29uc3QgaW5kZXggPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAuZ3JvdXAgPT09IHByb3BlcnR5Lmdyb3VwKS5pbmRleE9mKHByb3BlcnR5KTtcbiAgY29uc3QgcGF0aCA9IFsnY3VzdG9tLWVudHJ5JywgdGVtcGxhdGUuaWRdO1xuICBpZiAocHJvcGVydHkuZ3JvdXApIHtcbiAgICBwYXRoLnB1c2gocHJvcGVydHkuZ3JvdXApO1xuICB9XG4gIHBhdGgucHVzaChpbmRleCk7XG4gIHJldHVybiBwYXRoLmpvaW4oJy0nKTtcbn1cblxuZXhwb3J0IHsgY29yZU1vZHVsZSQxIGFzIENsb3VkRWxlbWVudFRlbXBsYXRlc0NvcmVNb2R1bGUsIEVsZW1lbnRUZW1wbGF0ZUxpbnRlclBsdWdpbiBhcyBDbG91ZEVsZW1lbnRUZW1wbGF0ZXNMaW50ZXJQbHVnaW4sIGluZGV4JDEgYXMgQ2xvdWRFbGVtZW50VGVtcGxhdGVzUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlLCBWYWxpZGF0b3IgYXMgQ2xvdWRFbGVtZW50VGVtcGxhdGVzVmFsaWRhdG9yLCBjb3JlTW9kdWxlIGFzIEVsZW1lbnRUZW1wbGF0ZXNDb3JlTW9kdWxlLCBpbmRleCBhcyBFbGVtZW50VGVtcGxhdGVzUHJvcGVydGllc1Byb3ZpZGVyTW9kdWxlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-element-templates/dist/index.esm.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js":
-/*!***************************************************************************************************************!*\
- !*** ./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js ***!
- \***************************************************************************************************************/
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-eval("\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n\nvar minDash = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.cjs\");\n\n/**\n * Get a inputOutput from the business object\n *\n * @param {ModdleElement} element\n *\n * @return {ModdleElement} the inputOutput object\n */\nfunction getInputOutput(element) {\n return (getElements(element, 'zeebe:IoMapping') || [])[0];\n}\n\n/**\n * Return all input parameters existing in the business object, and\n * an empty array if none exist.\n *\n * @param {ModdleElement} element\n *\n * @return {Array} a list of input parameter objects\n */\nfunction getInputParameters(element) {\n return getParameters(element, 'inputParameters');\n}\n\n/**\n * Return out mappings existing in the business object\n *\n * @param {ModdleElement} element\n *\n * @return {Array}\n */\nfunction getOutMappings(element) {\n return (getInputOutput(element) || {}).outputParameters;\n}\n\n/**\n * Return out mappings existing in the business object\n *\n * @param {ModdleElement} element\n *\n * @return {Array}\n */\nfunction getInMappings(element) {\n return (getInputOutput(element) || {}).inputParameters;\n}\n\n/**\n * Get the inputElement name from a loopCharacteristics\n *\n * @param {MoodleElement} loopCharacteristics\n * @returns {String} outputCollection\n */\nfunction getInputElement(loopCharacteristics) {\n const extensionElement = getElements(loopCharacteristics, 'zeebe:LoopCharacteristics')[0];\n return extensionElement && extensionElement.inputElement;\n}\n\n/**\n * Get the outputCollection name from a loopCharacteristics\n *\n * @param {MoodleElement} loopCharacteristics\n * @returns {String} outputCollection\n */\nfunction getOutputCollection(loopCharacteristics) {\n const extensionElement = getElements(loopCharacteristics, 'zeebe:LoopCharacteristics')[0];\n return extensionElement && extensionElement.outputCollection;\n\n}\n\n/**\n * Get a calledDecision from the business object\n *\n * @param {MoodleElement} element\n * @returns {MoodleElement} the calledDecision object\n */\nfunction getCalledDecision(element) {\n return (getElements(element, 'zeebe:CalledDecision') || [])[0];\n}\n\n\n/**\n * Get a script from the business object\n *\n * @param {MoodleElement} element\n * @returns {MoodleElement} the script object\n */\nfunction getScript(element) {\n return (getElements(element, 'zeebe:Script') || [])[0];\n}\n\n// helpers //////////\n\nfunction getElements(element, type, property) {\n var elements = getExtensionElements(element, type);\n\n return !property ? elements : (elements[0] || {})[property] || [];\n}\n\nfunction getParameters(element, property) {\n var inputOutput = getInputOutput(element);\n\n return (inputOutput && inputOutput.get(property)) || [];\n}\n\nfunction getExtensionElements(element, type) {\n var elements = [];\n var extensionElements = element.get('extensionElements');\n\n if (typeof extensionElements !== 'undefined') {\n var extensionValues = extensionElements.get('values');\n\n if (typeof extensionValues !== 'undefined') {\n elements = minDash.filter(extensionValues, function(value) {\n return is$2(value, type);\n });\n }\n }\n\n return elements;\n}\n\nfunction is$2(element, type) {\n return (\n element &&\n typeof element.$instanceOf === 'function' &&\n element.$instanceOf(type)\n );\n}\n\n/**\n * Get all parent elements for a given element.\n *\n * @param {ModdleElement|string} element\n *\n * @returns {Array}\n */\nfunction getParents(element) {\n var parents = [];\n var current = element;\n\n while (current.$parent) {\n parents.push(current.$parent);\n current = current.$parent;\n }\n\n return parents;\n}\n\n/**\n * Iterate over each element in a collection, calling the iterator function `fn`\n * with (element, index, recursionDepth).\n *\n * Recurse into all elements that are returned by `fn`.\n *\n * @param {Object|Array} elements\n * @param {Function} fn iterator function called with (element, index, recursionDepth)\n * @param {number} [depth] maximum recursion depth\n */\nfunction eachElement(elements, fn, depth) {\n depth = depth || 0;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(s, i) {\n var filter = fn(s, i, depth);\n\n if (minDash.isArray(filter) && filter.length) {\n eachElement(filter, fn, depth + 1);\n }\n });\n}\n\n/**\n * Adds an element to a collection and returns true if the\n * element was added.\n *\n * @param {Array} elements\n * @param {Object} e\n * @param {boolean} unique\n */\nfunction add(elements, e, unique) {\n var canAdd = !unique || elements.indexOf(e) === -1;\n\n if (canAdd) {\n elements.push(e);\n }\n\n return canAdd;\n}\n\n/**\n * Collects self + flow elements up to a given depth from a list of elements.\n *\n * @param {ModdleElement|Array} elements the elements to select the flowElements from\n * @param {boolean} unique whether to return a unique result set (no duplicates)\n * @param {number} maxDepth the depth to search through or -1 for infinite\n *\n * @return {Array} found elements\n */\nfunction selfAndFlowElements(elements, unique, maxDepth) {\n var result = [],\n processedFlowElements = [];\n\n eachElement(elements, function(element, i, depth) {\n add(result, element, unique);\n\n var flowElements = element.flowElements;\n\n // max traversal depth not reached yet\n if (maxDepth === -1 || depth < maxDepth) {\n\n // flowElements exist && flowElements not yet processed\n if (flowElements && add(processedFlowElements, flowElements, unique)) {\n return flowElements;\n }\n }\n });\n\n return result;\n}\n\n/**\n * Return self + ALL flowElements for a number of elements\n *\n * @param {Array} elements to query\n * @param {boolean} allowDuplicates to allow duplicates in the result set\n *\n * @return {Array} the collected elements\n */\nfunction selfAndAllFlowElements(elements, allowDuplicates) {\n return selfAndFlowElements(elements, !allowDuplicates, -1);\n}\n\n/**\n * Return full moddle element for given element id\n *\n * @param {string} elementId\n * @param {ModdleElement} rootElement\n *\n * @returns {ModdleElement}\n */\nfunction getElement(elementId, rootElement) {\n var allElements = selfAndAllFlowElements(rootElement);\n\n return minDash.find(allElements, function(element) {\n return element.id === elementId;\n });\n}\n\nfunction addVariableToList(variablesList, newVariable) {\n var foundIdx = minDash.findIndex(variablesList, function(variable) {\n return (\n variable.name === newVariable.name && variable.scope === newVariable.scope\n );\n });\n\n if (foundIdx >= 0) {\n variablesList[foundIdx].origin = combineArrays$1(\n variablesList[foundIdx].origin,\n newVariable.origin\n );\n } else {\n variablesList.push(newVariable);\n }\n}\n\n/**\n * Creates new process variable definition object\n * Identifies correct (highest) scope, in which variable is available\n *\n * @param {ModdleElement} flowElement\n * @param {String} name\n * @param {ModdleElement} defaultScope\n *\n * @returns {ProcessVariable}\n */\nfunction createProcessVariable(flowElement, name, defaultScope) {\n var scope = getScope$1(flowElement, defaultScope, name);\n\n return {\n name: name,\n origin: [ flowElement ],\n scope: scope\n };\n}\n\n\n// helpers ////////////////////\n\n/**\n * Set parent container if it defines it's own scope for the variable, so\n * when it defines an input mapping for it. Otherwise returns the default global scope\n */\nfunction getScope$1(element, globalScope, variableName) {\n var parents = getParents(element);\n\n var scopedParent = minDash.find(parents, function(parent) {\n return (\n is$1(parent, 'bpmn:SubProcess') && hasInputParameter(parent, variableName)\n );\n });\n\n return scopedParent ? scopedParent : globalScope;\n}\n\nfunction is$1(element, type) {\n return (\n element &&\n typeof element.$instanceOf === 'function' &&\n element.$instanceOf(type)\n );\n}\n\nfunction hasInputParameter(element, name) {\n return minDash.find(getInputParameters(element), function(input) {\n return input.target === name;\n });\n}\n\nfunction combineArrays$1(a, b) {\n return a.concat(b);\n}\n\n/**\n * Retrieves process variables defined in output mappings, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"variable1\" to the list.\n *\n */\nfunction extractInMappings(options) {\n var elements = options.elements,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var inMappings = getInMappings(element);\n\n // extract all variables with correct scope\n minDash.forEach(inMappings, function(mapping) {\n\n var newVariable = createProcessVariable(\n element,\n mapping.target,\n element\n );\n\n addVariableToList(processVariables, newVariable);\n });\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in result variables, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"inputElement\"to the list.\n *\n */\nfunction extractInputElement(options) {\n var elements = options.elements,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var loopCharacteristics = element.loopCharacteristics;\n\n var inputElement = loopCharacteristics && getInputElement(loopCharacteristics);\n\n if (inputElement) {\n var newVariable = createProcessVariable(\n element,\n inputElement,\n element\n );\n\n addVariableToList(processVariables, newVariable);\n }\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in output mappings, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"variable1\" to the list.\n *\n */\nfunction extractOutMappings(options) {\n var elements = options.elements,\n containerElement = options.containerElement,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var outMappings = getOutMappings(element);\n\n // extract all variables with correct scope\n minDash.forEach(outMappings, function(mapping) {\n var newVariable = createProcessVariable(\n element,\n mapping.target,\n containerElement\n );\n\n addVariableToList(processVariables, newVariable);\n });\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in output collection, e.g.\n *\n * \n * \n * \n * \n * \n * \n * \n *\n * => Adds one variable \"outputCollection\"to the list.\n *\n */\nfunction extractOutputCollections(options) {\n var elements = options.elements,\n containerElement = options.containerElement,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var loopCharacteristics = element.loopCharacteristics;\n\n var outputCollection = loopCharacteristics && getOutputCollection(loopCharacteristics);\n\n if (outputCollection) {\n var newVariable = createProcessVariable(\n element,\n outputCollection,\n containerElement\n );\n\n addVariableToList(processVariables, newVariable);\n }\n });\n\n return processVariables;\n}\n\n/**\n * Retrieves process variables defined in result variables, e.g.\n *\n * \n * \n * \n * \n * \n *\n *\n * => Adds one variable \"variable1\"to the list.\n *\n */\nfunction extractResultVariables(options) {\n var elements = options.elements,\n containerElement = options.containerElement,\n processVariables = options.processVariables;\n\n if (!minDash.isArray(elements)) {\n elements = [ elements ];\n }\n\n minDash.forEach(elements, function(element) {\n\n var baseElement = getCalledDecision(element) ||\n getScript(element);\n\n if (!baseElement) {\n return;\n }\n\n var resultVariable = baseElement.resultVariable;\n\n if (resultVariable) {\n var newVariable = createProcessVariable(\n element,\n resultVariable,\n containerElement\n );\n\n addVariableToList(processVariables, newVariable);\n }\n });\n\n return processVariables;\n}\n\nvar extractors = [\n extractInMappings,\n extractInputElement,\n extractOutMappings,\n extractOutputCollections,\n extractResultVariables\n];\n\n/**\n * @typedef {Object} ProcessVariable\n * @property {string} name\n * @property {Array} origin\n * @property {ModdleElement} scope\n */\n\n// api /////////////////////////\n\n/**\n * Extractors add ProcessVariables to the `options.processVariables` parameter.\n * @callback extractor\n * @param {Object} options\n * @param {Array} options.elements\n * @param {ModdleElement} options.containerElement\n * @param {Array} options.processVariables\n */\n\n/**\n * Retrieves all process variables for a given container element.\n * @param {ModdleElement} containerElement\n * @param {Array} [additionalExtractors]\n *\n * @returns {Promise>}\n */\nfunction getProcessVariables(containerElement, additionalExtractors = []) {\n var processVariables = [];\n\n // (1) extract all flow elements inside the container\n var elements = selfAndAllFlowElements([ containerElement ], false);\n\n const allPromises = [];\n\n // (2) extract all variables from the extractors\n minDash.forEach([ ...extractors, ...additionalExtractors ], function(extractor) {\n allPromises.push(extractor({\n elements: elements,\n containerElement: containerElement,\n processVariables: processVariables\n }));\n });\n\n return Promise.all(allPromises)\n .then(() => processVariables);\n}\n\n/**\n * Retrieves all variables which are available in the given scope\n *\n * * Exclude variables which are only available in other scopes\n * * Exclude variables which are produced by the given element\n * * Include variables which are available in parent scopes\n *\n * @param {string} scope\n * @param {ModdleElement} rootElement element from where to extract all variables\n * @param {Array} [additionalExtractors]\n *\n * @returns {Promise>}\n */\nasync function getVariablesForScope(scope, rootElement, additionalExtractors = []) {\n\n var allVariables = await getProcessVariables(rootElement, additionalExtractors);\n\n var scopeElement = getElement(scope, rootElement);\n\n // (1) get variables for given scope\n var scopeVariables = minDash.filter(allVariables, function(variable) {\n return variable.scope.id === scopeElement.id;\n });\n\n // (2) get variables for parent scopes\n var parents = getParents(scopeElement);\n\n var parentsScopeVariables = minDash.filter(allVariables, function(variable) {\n return minDash.find(parents, function(parent) {\n return parent.id === variable.scope.id;\n });\n });\n\n return combineArrays(scopeVariables, parentsScopeVariables);\n}\n\n\nfunction getVariablesForElement(element, additionalExtractors = []) {\n return getVariablesForScope(getScope(element), getRootElement(element), additionalExtractors);\n}\n\nfunction getScope(element) {\n const bo = getBusinessObject(element);\n\n if (is(element, 'bpmn:Participant')) {\n return bo.processRef.id;\n }\n\n return bo.id;\n}\n\nfunction getRootElement(element) {\n const businessObject = getBusinessObject(element);\n\n if (is(businessObject, 'bpmn:Participant')) {\n return businessObject.processRef;\n }\n\n if (is(businessObject, 'bpmn:Process')) {\n return businessObject;\n }\n\n let parent = businessObject;\n\n while (parent.$parent && !is(parent, 'bpmn:Process')) {\n parent = parent.$parent;\n }\n\n return parent;\n}\n\n\n// helpers ////////////////////\n\nfunction combineArrays(a, b) {\n return a.concat(b);\n}\n\n\nfunction getBusinessObject(element) {\n return (element && element.businessObject) || element;\n}\n\n\nfunction is(element, type) {\n var bo = getBusinessObject(element);\n\n return bo && (typeof bo.$instanceOf === 'function') && bo.$instanceOf(type);\n}\n\nexports.getProcessVariables = getProcessVariables;\nexports.getVariablesForElement = getVariablesForElement;\nexports.getVariablesForScope = getVariablesForScope;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1lbGVtZW50LXRlbXBsYXRlcy9ub2RlX21vZHVsZXMvQGJwbW4taW8vZXh0cmFjdC1wcm9jZXNzLXZhcmlhYmxlcy96ZWViZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7O0FBRTdELGNBQWMsbUJBQU8sQ0FBQyx3REFBVTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNCQUFzQjtBQUNqQztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksc0JBQXNCO0FBQ2xDLFlBQVksVUFBVTtBQUN0QixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9DQUFvQztBQUNoRCxZQUFZLFNBQVM7QUFDckIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEMsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsZUFBZTtBQUMxQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjLFFBQVE7QUFDdEIsY0FBYyxzQkFBc0I7QUFDcEMsY0FBYyxlQUFlO0FBQzdCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLHNCQUFzQjtBQUNqQyxXQUFXLGVBQWU7QUFDMUIsV0FBVyx3QkFBd0I7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxlQUFlO0FBQzFCLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0IsOEJBQThCO0FBQzlCLDRCQUE0QiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1uLWpzLWVsZW1lbnQtdGVtcGxhdGVzL25vZGVfbW9kdWxlcy9AYnBtbi1pby9leHRyYWN0LXByb2Nlc3MtdmFyaWFibGVzL3plZWJlL2luZGV4LmpzPzBkZTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgbWluRGFzaCA9IHJlcXVpcmUoJ21pbi1kYXNoJyk7XG5cbi8qKlxuICogR2V0IGEgaW5wdXRPdXRwdXQgZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtNb2RkbGVFbGVtZW50fSBlbGVtZW50XG4gKlxuICogQHJldHVybiB7TW9kZGxlRWxlbWVudH0gdGhlIGlucHV0T3V0cHV0IG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRJbnB1dE91dHB1dChlbGVtZW50KSB7XG4gIHJldHVybiAoZ2V0RWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOklvTWFwcGluZycpIHx8IFtdKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGlucHV0IHBhcmFtZXRlcnMgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdCwgYW5kXG4gKiBhbiBlbXB0eSBhcnJheSBpZiBub25lIGV4aXN0LlxuICpcbiAqIEBwYXJhbSAge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gYSBsaXN0IG9mIGlucHV0IHBhcmFtZXRlciBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGdldElucHV0UGFyYW1ldGVycyhlbGVtZW50KSB7XG4gIHJldHVybiBnZXRQYXJhbWV0ZXJzKGVsZW1lbnQsICdpbnB1dFBhcmFtZXRlcnMnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gb3V0IG1hcHBpbmdzIGV4aXN0aW5nIGluIHRoZSBidXNpbmVzcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn1cbiAqL1xuZnVuY3Rpb24gZ2V0T3V0TWFwcGluZ3MoZWxlbWVudCkge1xuICByZXR1cm4gKGdldElucHV0T3V0cHV0KGVsZW1lbnQpIHx8IHt9KS5vdXRwdXRQYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFJldHVybiBvdXQgbWFwcGluZ3MgZXhpc3RpbmcgaW4gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZWxlbWVudFxuICpcbiAqIEByZXR1cm4ge0FycmF5PE1vZGRsZUVsZW1lbnQ+fVxuICovXG5mdW5jdGlvbiBnZXRJbk1hcHBpbmdzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIChnZXRJbnB1dE91dHB1dChlbGVtZW50KSB8fCB7fSkuaW5wdXRQYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5wdXRFbGVtZW50IG5hbWUgZnJvbSBhIGxvb3BDaGFyYWN0ZXJpc3RpY3NcbiAqXG4gKiBAcGFyYW0ge01vb2RsZUVsZW1lbnR9IGxvb3BDaGFyYWN0ZXJpc3RpY3NcbiAqIEByZXR1cm5zIHtTdHJpbmd9IG91dHB1dENvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0SW5wdXRFbGVtZW50KGxvb3BDaGFyYWN0ZXJpc3RpY3MpIHtcbiAgY29uc3QgZXh0ZW5zaW9uRWxlbWVudCA9IGdldEVsZW1lbnRzKGxvb3BDaGFyYWN0ZXJpc3RpY3MsICd6ZWViZTpMb29wQ2hhcmFjdGVyaXN0aWNzJylbMF07XG4gIHJldHVybiBleHRlbnNpb25FbGVtZW50ICYmIGV4dGVuc2lvbkVsZW1lbnQuaW5wdXRFbGVtZW50O1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3V0cHV0Q29sbGVjdGlvbiBuYW1lIGZyb20gYSBsb29wQ2hhcmFjdGVyaXN0aWNzXG4gKlxuICogQHBhcmFtIHtNb29kbGVFbGVtZW50fSBsb29wQ2hhcmFjdGVyaXN0aWNzXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBvdXRwdXRDb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE91dHB1dENvbGxlY3Rpb24obG9vcENoYXJhY3RlcmlzdGljcykge1xuICBjb25zdCBleHRlbnNpb25FbGVtZW50ID0gZ2V0RWxlbWVudHMobG9vcENoYXJhY3RlcmlzdGljcywgJ3plZWJlOkxvb3BDaGFyYWN0ZXJpc3RpY3MnKVswXTtcbiAgcmV0dXJuIGV4dGVuc2lvbkVsZW1lbnQgJiYgZXh0ZW5zaW9uRWxlbWVudC5vdXRwdXRDb2xsZWN0aW9uO1xuXG59XG5cbi8qKlxuICogR2V0IGEgY2FsbGVkRGVjaXNpb24gZnJvbSB0aGUgYnVzaW5lc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtNb29kbGVFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7TW9vZGxlRWxlbWVudH0gdGhlIGNhbGxlZERlY2lzaW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRDYWxsZWREZWNpc2lvbihlbGVtZW50KSB7XG4gIHJldHVybiAoZ2V0RWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOkNhbGxlZERlY2lzaW9uJykgfHwgW10pWzBdO1xufVxuXG5cbi8qKlxuICogR2V0IGEgc2NyaXB0IGZyb20gdGhlIGJ1c2luZXNzIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7TW9vZGxlRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge01vb2RsZUVsZW1lbnR9IHRoZSBzY3JpcHQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdldFNjcmlwdChlbGVtZW50KSB7XG4gIHJldHVybiAoZ2V0RWxlbWVudHMoZWxlbWVudCwgJ3plZWJlOlNjcmlwdCcpIHx8IFtdKVswXTtcbn1cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRzKGVsZW1lbnQsIHR5cGUsIHByb3BlcnR5KSB7XG4gIHZhciBlbGVtZW50cyA9IGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIHR5cGUpO1xuXG4gIHJldHVybiAhcHJvcGVydHkgPyBlbGVtZW50cyA6IChlbGVtZW50c1swXSB8fCB7fSlbcHJvcGVydHldIHx8IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJzKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gIHZhciBpbnB1dE91dHB1dCA9IGdldElucHV0T3V0cHV0KGVsZW1lbnQpO1xuXG4gIHJldHVybiAoaW5wdXRPdXRwdXQgJiYgaW5wdXRPdXRwdXQuZ2V0KHByb3BlcnR5KSkgfHwgW107XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkVsZW1lbnRzKGVsZW1lbnQsIHR5cGUpIHtcbiAgdmFyIGVsZW1lbnRzID0gW107XG4gIHZhciBleHRlbnNpb25FbGVtZW50cyA9IGVsZW1lbnQuZ2V0KCdleHRlbnNpb25FbGVtZW50cycpO1xuXG4gIGlmICh0eXBlb2YgZXh0ZW5zaW9uRWxlbWVudHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGV4dGVuc2lvblZhbHVlcyA9IGV4dGVuc2lvbkVsZW1lbnRzLmdldCgndmFsdWVzJyk7XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuc2lvblZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVsZW1lbnRzID0gbWluRGFzaC5maWx0ZXIoZXh0ZW5zaW9uVmFsdWVzLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXMkMih2YWx1ZSwgdHlwZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGlzJDIoZWxlbWVudCwgdHlwZSkge1xuICByZXR1cm4gKFxuICAgIGVsZW1lbnQgJiZcbiAgICB0eXBlb2YgZWxlbWVudC4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIGVsZW1lbnQuJGluc3RhbmNlT2YodHlwZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHBhcmVudCBlbGVtZW50cyBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudHxzdHJpbmd9IGVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8TW9kZGxlRWxlbWVudD59XG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudHMoZWxlbWVudCkge1xuICB2YXIgcGFyZW50cyA9IFtdO1xuICB2YXIgY3VycmVudCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGN1cnJlbnQuJHBhcmVudCkge1xuICAgIHBhcmVudHMucHVzaChjdXJyZW50LiRwYXJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50LiRwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGFyZW50cztcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgY2FsbGluZyB0aGUgaXRlcmF0b3IgZnVuY3Rpb24gYGZuYFxuICogd2l0aCAoZWxlbWVudCwgaW5kZXgsIHJlY3Vyc2lvbkRlcHRoKS5cbiAqXG4gKiBSZWN1cnNlIGludG8gYWxsIGVsZW1lbnRzIHRoYXQgYXJlIHJldHVybmVkIGJ5IGBmbmAuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fEFycmF5PE9iamVjdD59IGVsZW1lbnRzXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gaXRlcmF0b3IgZnVuY3Rpb24gY2FsbGVkIHdpdGggKGVsZW1lbnQsIGluZGV4LCByZWN1cnNpb25EZXB0aClcbiAqIEBwYXJhbSAge251bWJlcn0gW2RlcHRoXSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aFxuICovXG5mdW5jdGlvbiBlYWNoRWxlbWVudChlbGVtZW50cywgZm4sIGRlcHRoKSB7XG4gIGRlcHRoID0gZGVwdGggfHwgMDtcblxuICBpZiAoIW1pbkRhc2guaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIG1pbkRhc2guZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24ocywgaSkge1xuICAgIHZhciBmaWx0ZXIgPSBmbihzLCBpLCBkZXB0aCk7XG5cbiAgICBpZiAobWluRGFzaC5pc0FycmF5KGZpbHRlcikgJiYgZmlsdGVyLmxlbmd0aCkge1xuICAgICAgZWFjaEVsZW1lbnQoZmlsdGVyLCBmbiwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZWxlbWVudCB0byBhIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGVcbiAqIGVsZW1lbnQgd2FzIGFkZGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVuaXF1ZVxuICovXG5mdW5jdGlvbiBhZGQoZWxlbWVudHMsIGUsIHVuaXF1ZSkge1xuICB2YXIgY2FuQWRkID0gIXVuaXF1ZSB8fCBlbGVtZW50cy5pbmRleE9mKGUpID09PSAtMTtcblxuICBpZiAoY2FuQWRkKSB7XG4gICAgZWxlbWVudHMucHVzaChlKTtcbiAgfVxuXG4gIHJldHVybiBjYW5BZGQ7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgc2VsZiArIGZsb3cgZWxlbWVudHMgdXAgdG8gYSBnaXZlbiBkZXB0aCBmcm9tIGEgbGlzdCBvZiBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtNb2RkbGVFbGVtZW50fEFycmF5PE1vZGRsZUVsZW1lbnQ+fSBlbGVtZW50cyB0aGUgZWxlbWVudHMgdG8gc2VsZWN0IHRoZSBmbG93RWxlbWVudHMgZnJvbVxuICogQHBhcmFtICB7Ym9vbGVhbn0gdW5pcXVlIHdoZXRoZXIgdG8gcmV0dXJuIGEgdW5pcXVlIHJlc3VsdCBzZXQgKG5vIGR1cGxpY2F0ZXMpXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1heERlcHRoIHRoZSBkZXB0aCB0byBzZWFyY2ggdGhyb3VnaCBvciAtMSBmb3IgaW5maW5pdGVcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gZm91bmQgZWxlbWVudHNcbiAqL1xuZnVuY3Rpb24gc2VsZkFuZEZsb3dFbGVtZW50cyhlbGVtZW50cywgdW5pcXVlLCBtYXhEZXB0aCkge1xuICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICBwcm9jZXNzZWRGbG93RWxlbWVudHMgPSBbXTtcblxuICBlYWNoRWxlbWVudChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCwgaSwgZGVwdGgpIHtcbiAgICBhZGQocmVzdWx0LCBlbGVtZW50LCB1bmlxdWUpO1xuXG4gICAgdmFyIGZsb3dFbGVtZW50cyA9IGVsZW1lbnQuZmxvd0VsZW1lbnRzO1xuXG4gICAgLy8gbWF4IHRyYXZlcnNhbCBkZXB0aCBub3QgcmVhY2hlZCB5ZXRcbiAgICBpZiAobWF4RGVwdGggPT09IC0xIHx8IGRlcHRoIDwgbWF4RGVwdGgpIHtcblxuICAgICAgLy8gZmxvd0VsZW1lbnRzIGV4aXN0ICYmIGZsb3dFbGVtZW50cyBub3QgeWV0IHByb2Nlc3NlZFxuICAgICAgaWYgKGZsb3dFbGVtZW50cyAmJiBhZGQocHJvY2Vzc2VkRmxvd0VsZW1lbnRzLCBmbG93RWxlbWVudHMsIHVuaXF1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZsb3dFbGVtZW50cztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHNlbGYgKyBBTEwgZmxvd0VsZW1lbnRzIGZvciBhIG51bWJlciBvZiBlbGVtZW50c1xuICpcbiAqIEBwYXJhbSAge0FycmF5PE1vZGRsZUVsZW1lbnQ+fSBlbGVtZW50cyB0byBxdWVyeVxuICogQHBhcmFtICB7Ym9vbGVhbn0gYWxsb3dEdXBsaWNhdGVzIHRvIGFsbG93IGR1cGxpY2F0ZXMgaW4gdGhlIHJlc3VsdCBzZXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxNb2RkbGVFbGVtZW50Pn0gdGhlIGNvbGxlY3RlZCBlbGVtZW50c1xuICovXG5mdW5jdGlvbiBzZWxmQW5kQWxsRmxvd0VsZW1lbnRzKGVsZW1lbnRzLCBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgcmV0dXJuIHNlbGZBbmRGbG93RWxlbWVudHMoZWxlbWVudHMsICFhbGxvd0R1cGxpY2F0ZXMsIC0xKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gZnVsbCBtb2RkbGUgZWxlbWVudCBmb3IgZ2l2ZW4gZWxlbWVudCBpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbGVtZW50SWRcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnRcbiAqXG4gKiBAcmV0dXJucyB7TW9kZGxlRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gZ2V0RWxlbWVudChlbGVtZW50SWQsIHJvb3RFbGVtZW50KSB7XG4gIHZhciBhbGxFbGVtZW50cyA9IHNlbGZBbmRBbGxGbG93RWxlbWVudHMocm9vdEVsZW1lbnQpO1xuXG4gIHJldHVybiBtaW5EYXNoLmZpbmQoYWxsRWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5pZCA9PT0gZWxlbWVudElkO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVmFyaWFibGVUb0xpc3QodmFyaWFibGVzTGlzdCwgbmV3VmFyaWFibGUpIHtcbiAgdmFyIGZvdW5kSWR4ID0gbWluRGFzaC5maW5kSW5kZXgodmFyaWFibGVzTGlzdCwgZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFyaWFibGUubmFtZSA9PT0gbmV3VmFyaWFibGUubmFtZSAmJiB2YXJpYWJsZS5zY29wZSA9PT0gbmV3VmFyaWFibGUuc2NvcGVcbiAgICApO1xuICB9KTtcblxuICBpZiAoZm91bmRJZHggPj0gMCkge1xuICAgIHZhcmlhYmxlc0xpc3RbZm91bmRJZHhdLm9yaWdpbiA9IGNvbWJpbmVBcnJheXMkMShcbiAgICAgIHZhcmlhYmxlc0xpc3RbZm91bmRJZHhdLm9yaWdpbixcbiAgICAgIG5ld1ZhcmlhYmxlLm9yaWdpblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdmFyaWFibGVzTGlzdC5wdXNoKG5ld1ZhcmlhYmxlKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgbmV3IHByb2Nlc3MgdmFyaWFibGUgZGVmaW5pdGlvbiBvYmplY3RcbiAqIElkZW50aWZpZXMgY29ycmVjdCAoaGlnaGVzdCkgc2NvcGUsIGluIHdoaWNoIHZhcmlhYmxlIGlzIGF2YWlsYWJsZVxuICpcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gZmxvd0VsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge01vZGRsZUVsZW1lbnR9IGRlZmF1bHRTY29wZVxuICpcbiAqIEByZXR1cm5zIHtQcm9jZXNzVmFyaWFibGV9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb2Nlc3NWYXJpYWJsZShmbG93RWxlbWVudCwgbmFtZSwgZGVmYXVsdFNjb3BlKSB7XG4gIHZhciBzY29wZSA9IGdldFNjb3BlJDEoZmxvd0VsZW1lbnQsIGRlZmF1bHRTY29wZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIG9yaWdpbjogWyBmbG93RWxlbWVudCBdLFxuICAgIHNjb3BlOiBzY29wZVxuICB9O1xufVxuXG5cbi8vIGhlbHBlcnMgLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBTZXQgcGFyZW50IGNvbnRhaW5lciBpZiBpdCBkZWZpbmVzIGl0J3Mgb3duIHNjb3BlIGZvciB0aGUgdmFyaWFibGUsIHNvXG4gKiB3aGVuIGl0IGRlZmluZXMgYW4gaW5wdXQgbWFwcGluZyBmb3IgaXQuIE90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGdsb2JhbCBzY29wZVxuICovXG5mdW5jdGlvbiBnZXRTY29wZSQxKGVsZW1lbnQsIGdsb2JhbFNjb3BlLCB2YXJpYWJsZU5hbWUpIHtcbiAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKGVsZW1lbnQpO1xuXG4gIHZhciBzY29wZWRQYXJlbnQgPSBtaW5EYXNoLmZpbmQocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzJDEocGFyZW50LCAnYnBtbjpTdWJQcm9jZXNzJykgJiYgaGFzSW5wdXRQYXJhbWV0ZXIocGFyZW50LCB2YXJpYWJsZU5hbWUpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHNjb3BlZFBhcmVudCA/IHNjb3BlZFBhcmVudCA6IGdsb2JhbFNjb3BlO1xufVxuXG5mdW5jdGlvbiBpcyQxKGVsZW1lbnQsIHR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBlbGVtZW50ICYmXG4gICAgICB0eXBlb2YgZWxlbWVudC4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgZWxlbWVudC4kaW5zdGFuY2VPZih0eXBlKVxuICApO1xufVxuXG5mdW5jdGlvbiBoYXNJbnB1dFBhcmFtZXRlcihlbGVtZW50LCBuYW1lKSB7XG4gIHJldHVybiBtaW5EYXNoLmZpbmQoZ2V0SW5wdXRQYXJhbWV0ZXJzKGVsZW1lbnQpLCBmdW5jdGlvbihpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dC50YXJnZXQgPT09IG5hbWU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQXJyYXlzJDEoYSwgYikge1xuICByZXR1cm4gYS5jb25jYXQoYik7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHByb2Nlc3MgdmFyaWFibGVzIGRlZmluZWQgaW4gb3V0cHV0IG1hcHBpbmdzLCBlLmcuXG4gKlxuICogPGJwbW46c2VydmljZVRhc2sgaWQ9XCJTZXJ2aWNlVGFza1wiPlxuICogICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICA8emVlYmU6aW9NYXBwaW5nPlxuICogICAgICAgPHplZWJlOmlucHV0IHNvdXJjZT1cIj0gc291cmNlXCIgdGFyZ2V0PVwidmFyaWFibGUxXCIgLz5cbiAqICAgICA8L3plZWJlOmlvTWFwcGluZz5cbiAqICAgPC9icG1uOmV4dGVuc2lvbkVsZW1lbnRzPlxuICogPC9icG1uOnNlcnZpY2VUYXNrPlxuICpcbiAqID0+IEFkZHMgb25lIHZhcmlhYmxlIFwidmFyaWFibGUxXCIgdG8gdGhlIGxpc3QuXG4gKlxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5NYXBwaW5ncyhvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHMsXG4gICAgICBwcm9jZXNzVmFyaWFibGVzID0gb3B0aW9ucy5wcm9jZXNzVmFyaWFibGVzO1xuXG4gIGlmICghbWluRGFzaC5pc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgbWluRGFzaC5mb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICB2YXIgaW5NYXBwaW5ncyA9IGdldEluTWFwcGluZ3MoZWxlbWVudCk7XG5cbiAgICAvLyBleHRyYWN0IGFsbCB2YXJpYWJsZXMgd2l0aCBjb3JyZWN0IHNjb3BlXG4gICAgbWluRGFzaC5mb3JFYWNoKGluTWFwcGluZ3MsIGZ1bmN0aW9uKG1hcHBpbmcpIHtcblxuICAgICAgdmFyIG5ld1ZhcmlhYmxlID0gY3JlYXRlUHJvY2Vzc1ZhcmlhYmxlKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBtYXBwaW5nLnRhcmdldCxcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcblxuICAgICAgYWRkVmFyaWFibGVUb0xpc3QocHJvY2Vzc1ZhcmlhYmxlcywgbmV3VmFyaWFibGUpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcHJvY2Vzc1ZhcmlhYmxlcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgcHJvY2VzcyB2YXJpYWJsZXMgZGVmaW5lZCBpbiByZXN1bHQgdmFyaWFibGVzLCBlLmcuXG4gKlxuICogPGJwbW46c2VydmljZVRhc2sgaWQ9XCJTZXJ2aWNlVGFza1wiPlxuICogICA8YnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqICAgICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICAgIDx6ZWViZTpsb29wQ2hhcmFjdGVyaXN0aWNzIGlucHV0RWxlbWVudD1cImlucHV0RWxlbWVudFwiIG91dHB1dENvbGxlY3Rpb249XCJvdXRwdXRDb2xsZWN0aW9uXCIgLz5cbiAqICAgICA8L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiAgIDwvYnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqIDwvYnBtbjpzZXJ2aWNlVGFzaz5cbiAqXG4gKiA9PiBBZGRzIG9uZSB2YXJpYWJsZSBcImlucHV0RWxlbWVudFwidG8gdGhlIGxpc3QuXG4gKlxuICovXG5mdW5jdGlvbiBleHRyYWN0SW5wdXRFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gb3B0aW9ucy5lbGVtZW50cyxcbiAgICAgIHByb2Nlc3NWYXJpYWJsZXMgPSBvcHRpb25zLnByb2Nlc3NWYXJpYWJsZXM7XG5cbiAgaWYgKCFtaW5EYXNoLmlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgZWxlbWVudHMgPSBbIGVsZW1lbnRzIF07XG4gIH1cblxuICBtaW5EYXNoLmZvckVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblxuICAgIHZhciBsb29wQ2hhcmFjdGVyaXN0aWNzID0gZWxlbWVudC5sb29wQ2hhcmFjdGVyaXN0aWNzO1xuXG4gICAgdmFyIGlucHV0RWxlbWVudCA9IGxvb3BDaGFyYWN0ZXJpc3RpY3MgJiYgZ2V0SW5wdXRFbGVtZW50KGxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgaWYgKGlucHV0RWxlbWVudCkge1xuICAgICAgdmFyIG5ld1ZhcmlhYmxlID0gY3JlYXRlUHJvY2Vzc1ZhcmlhYmxlKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpbnB1dEVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG5cbiAgICAgIGFkZFZhcmlhYmxlVG9MaXN0KHByb2Nlc3NWYXJpYWJsZXMsIG5ld1ZhcmlhYmxlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzVmFyaWFibGVzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBwcm9jZXNzIHZhcmlhYmxlcyBkZWZpbmVkIGluIG91dHB1dCBtYXBwaW5ncywgZS5nLlxuICpcbiAqIDxicG1uOnNlcnZpY2VUYXNrIGlkPVwiU2VydmljZVRhc2tcIj5cbiAqICAgPGJwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiAgICAgPHplZWJlOmlvTWFwcGluZz5cbiAqICAgICAgIDx6ZWViZTpvdXRwdXQgc291cmNlPVwiPSBzb3VyY2VcIiB0YXJnZXQ9XCJ2YXJpYWJsZTFcIiAvPlxuICogICAgIDwvemVlYmU6aW9NYXBwaW5nPlxuICogICA8L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiA8L2JwbW46c2VydmljZVRhc2s+XG4gKlxuICogPT4gQWRkcyBvbmUgdmFyaWFibGUgXCJ2YXJpYWJsZTFcIiB0byB0aGUgbGlzdC5cbiAqXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPdXRNYXBwaW5ncyhvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHMsXG4gICAgICBjb250YWluZXJFbGVtZW50ID0gb3B0aW9ucy5jb250YWluZXJFbGVtZW50LFxuICAgICAgcHJvY2Vzc1ZhcmlhYmxlcyA9IG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlcztcblxuICBpZiAoIW1pbkRhc2guaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIG1pbkRhc2guZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIG91dE1hcHBpbmdzID0gZ2V0T3V0TWFwcGluZ3MoZWxlbWVudCk7XG5cbiAgICAvLyBleHRyYWN0IGFsbCB2YXJpYWJsZXMgd2l0aCBjb3JyZWN0IHNjb3BlXG4gICAgbWluRGFzaC5mb3JFYWNoKG91dE1hcHBpbmdzLCBmdW5jdGlvbihtYXBwaW5nKSB7XG4gICAgICB2YXIgbmV3VmFyaWFibGUgPSBjcmVhdGVQcm9jZXNzVmFyaWFibGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIG1hcHBpbmcudGFyZ2V0LFxuICAgICAgICBjb250YWluZXJFbGVtZW50XG4gICAgICApO1xuXG4gICAgICBhZGRWYXJpYWJsZVRvTGlzdChwcm9jZXNzVmFyaWFibGVzLCBuZXdWYXJpYWJsZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzVmFyaWFibGVzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBwcm9jZXNzIHZhcmlhYmxlcyBkZWZpbmVkIGluIG91dHB1dCBjb2xsZWN0aW9uLCBlLmcuXG4gKlxuICogPGJwbW46c2VydmljZVRhc2sgaWQ9XCJTZXJ2aWNlVGFza1wiPlxuICogICA8YnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqICAgICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICAgIDx6ZWViZTpsb29wQ2hhcmFjdGVyaXN0aWNzIGlucHV0RWxlbWVudD1cImlucHV0RWxlbWVudFwiIG91dHB1dENvbGxlY3Rpb249XCJvdXRwdXRDb2xsZWN0aW9uXCIgLz5cbiAqICAgICA8L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+XG4gKiAgIDwvYnBtbjptdWx0aUluc3RhbmNlTG9vcENoYXJhY3RlcmlzdGljcz5cbiAqIDwvYnBtbjpzZXJ2aWNlVGFzaz5cbiAqXG4gKiA9PiBBZGRzIG9uZSB2YXJpYWJsZSBcIm91dHB1dENvbGxlY3Rpb25cInRvIHRoZSBsaXN0LlxuICpcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE91dHB1dENvbGxlY3Rpb25zKG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnRzID0gb3B0aW9ucy5lbGVtZW50cyxcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQgPSBvcHRpb25zLmNvbnRhaW5lckVsZW1lbnQsXG4gICAgICBwcm9jZXNzVmFyaWFibGVzID0gb3B0aW9ucy5wcm9jZXNzVmFyaWFibGVzO1xuXG4gIGlmICghbWluRGFzaC5pc0FycmF5KGVsZW1lbnRzKSkge1xuICAgIGVsZW1lbnRzID0gWyBlbGVtZW50cyBdO1xuICB9XG5cbiAgbWluRGFzaC5mb3JFYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG5cbiAgICB2YXIgbG9vcENoYXJhY3RlcmlzdGljcyA9IGVsZW1lbnQubG9vcENoYXJhY3RlcmlzdGljcztcblxuICAgIHZhciBvdXRwdXRDb2xsZWN0aW9uID0gbG9vcENoYXJhY3RlcmlzdGljcyAmJiBnZXRPdXRwdXRDb2xsZWN0aW9uKGxvb3BDaGFyYWN0ZXJpc3RpY3MpO1xuXG4gICAgaWYgKG91dHB1dENvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBuZXdWYXJpYWJsZSA9IGNyZWF0ZVByb2Nlc3NWYXJpYWJsZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgb3V0cHV0Q29sbGVjdGlvbixcbiAgICAgICAgY29udGFpbmVyRWxlbWVudFxuICAgICAgKTtcblxuICAgICAgYWRkVmFyaWFibGVUb0xpc3QocHJvY2Vzc1ZhcmlhYmxlcywgbmV3VmFyaWFibGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHByb2Nlc3NWYXJpYWJsZXM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHByb2Nlc3MgdmFyaWFibGVzIGRlZmluZWQgaW4gcmVzdWx0IHZhcmlhYmxlcywgZS5nLlxuICpcbiAqICAgPGJwbW46YnVzaW5lc3NSdWxlVGFzayBpZD1cIkFjdGl2aXR5XzFcIj5cbiAqICAgICA8YnBtbjpleHRlbnNpb25FbGVtZW50cz5cbiAqICAgICAgIDx6ZWViZTpjYWxsZWREZWNpc2lvbiByZXN1bHRWYXJpYWJsZT1cInZhcmlhYmxlMVwiIC8+XG4gKiAgICAgPC9icG1uOmV4dGVuc2lvbkVsZW1lbnRzPlxuICogICA8L2JwbW46YnVzaW5lc3NSdWxlVGFzaz5cbiAqXG4gKlxuICogPT4gQWRkcyBvbmUgdmFyaWFibGUgXCJ2YXJpYWJsZTFcInRvIHRoZSBsaXN0LlxuICpcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFJlc3VsdFZhcmlhYmxlcyhvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHMsXG4gICAgICBjb250YWluZXJFbGVtZW50ID0gb3B0aW9ucy5jb250YWluZXJFbGVtZW50LFxuICAgICAgcHJvY2Vzc1ZhcmlhYmxlcyA9IG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlcztcblxuICBpZiAoIW1pbkRhc2guaXNBcnJheShlbGVtZW50cykpIHtcbiAgICBlbGVtZW50cyA9IFsgZWxlbWVudHMgXTtcbiAgfVxuXG4gIG1pbkRhc2guZm9yRWFjaChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuXG4gICAgdmFyIGJhc2VFbGVtZW50ID0gZ2V0Q2FsbGVkRGVjaXNpb24oZWxlbWVudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBnZXRTY3JpcHQoZWxlbWVudCk7XG5cbiAgICBpZiAoIWJhc2VFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdFZhcmlhYmxlID0gYmFzZUVsZW1lbnQucmVzdWx0VmFyaWFibGU7XG5cbiAgICBpZiAocmVzdWx0VmFyaWFibGUpIHtcbiAgICAgIHZhciBuZXdWYXJpYWJsZSA9IGNyZWF0ZVByb2Nlc3NWYXJpYWJsZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgcmVzdWx0VmFyaWFibGUsXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnRcbiAgICAgICk7XG5cbiAgICAgIGFkZFZhcmlhYmxlVG9MaXN0KHByb2Nlc3NWYXJpYWJsZXMsIG5ld1ZhcmlhYmxlKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwcm9jZXNzVmFyaWFibGVzO1xufVxuXG52YXIgZXh0cmFjdG9ycyA9IFtcbiAgZXh0cmFjdEluTWFwcGluZ3MsXG4gIGV4dHJhY3RJbnB1dEVsZW1lbnQsXG4gIGV4dHJhY3RPdXRNYXBwaW5ncyxcbiAgZXh0cmFjdE91dHB1dENvbGxlY3Rpb25zLFxuICBleHRyYWN0UmVzdWx0VmFyaWFibGVzXG5dO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFByb2Nlc3NWYXJpYWJsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8TW9kZGxlRWxlbWVudD59IG9yaWdpblxuICogQHByb3BlcnR5IHtNb2RkbGVFbGVtZW50fSBzY29wZVxuICovXG5cbi8vIGFwaSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogRXh0cmFjdG9ycyBhZGQgUHJvY2Vzc1ZhcmlhYmxlcyB0byB0aGUgYG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlc2AgcGFyYW1ldGVyLlxuICogQGNhbGxiYWNrIGV4dHJhY3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXk8TW9kZGxlRWxlbWVudD59IG9wdGlvbnMuZWxlbWVudHNcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gb3B0aW9ucy5jb250YWluZXJFbGVtZW50XG4gKiBAcGFyYW0ge0FycmF5PFByb2Nlc3NWYXJpYWJsZT59IG9wdGlvbnMucHJvY2Vzc1ZhcmlhYmxlc1xuICovXG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBwcm9jZXNzIHZhcmlhYmxlcyBmb3IgYSBnaXZlbiBjb250YWluZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gY29udGFpbmVyRWxlbWVudFxuICogQHBhcmFtIHtBcnJheTxleHRyYWN0b3I+fSBbYWRkaXRpb25hbEV4dHJhY3RvcnNdXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPj59XG4gKi9cbmZ1bmN0aW9uIGdldFByb2Nlc3NWYXJpYWJsZXMoY29udGFpbmVyRWxlbWVudCwgYWRkaXRpb25hbEV4dHJhY3RvcnMgPSBbXSkge1xuICB2YXIgcHJvY2Vzc1ZhcmlhYmxlcyA9IFtdO1xuXG4gIC8vICgxKSBleHRyYWN0IGFsbCBmbG93IGVsZW1lbnRzIGluc2lkZSB0aGUgY29udGFpbmVyXG4gIHZhciBlbGVtZW50cyA9IHNlbGZBbmRBbGxGbG93RWxlbWVudHMoWyBjb250YWluZXJFbGVtZW50IF0sIGZhbHNlKTtcblxuICBjb25zdCBhbGxQcm9taXNlcyA9IFtdO1xuXG4gIC8vICgyKSBleHRyYWN0IGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgZXh0cmFjdG9yc1xuICBtaW5EYXNoLmZvckVhY2goWyAuLi5leHRyYWN0b3JzLCAuLi5hZGRpdGlvbmFsRXh0cmFjdG9ycyBdLCBmdW5jdGlvbihleHRyYWN0b3IpIHtcbiAgICBhbGxQcm9taXNlcy5wdXNoKGV4dHJhY3Rvcih7XG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBjb250YWluZXJFbGVtZW50OiBjb250YWluZXJFbGVtZW50LFxuICAgICAgcHJvY2Vzc1ZhcmlhYmxlczogcHJvY2Vzc1ZhcmlhYmxlc1xuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGFsbFByb21pc2VzKVxuICAgIC50aGVuKCgpID0+IHByb2Nlc3NWYXJpYWJsZXMpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgdmFyaWFibGVzIHdoaWNoIGFyZSBhdmFpbGFibGUgaW4gdGhlIGdpdmVuIHNjb3BlXG4gKlxuICogKiBFeGNsdWRlIHZhcmlhYmxlcyB3aGljaCBhcmUgb25seSBhdmFpbGFibGUgaW4gb3RoZXIgc2NvcGVzXG4gKiAqIEV4Y2x1ZGUgdmFyaWFibGVzIHdoaWNoIGFyZSBwcm9kdWNlZCBieSB0aGUgZ2l2ZW4gZWxlbWVudFxuICogKiBJbmNsdWRlIHZhcmlhYmxlcyB3aGljaCBhcmUgYXZhaWxhYmxlIGluIHBhcmVudCBzY29wZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAqIEBwYXJhbSB7TW9kZGxlRWxlbWVudH0gcm9vdEVsZW1lbnQgZWxlbWVudCBmcm9tIHdoZXJlIHRvIGV4dHJhY3QgYWxsIHZhcmlhYmxlc1xuICogQHBhcmFtIHtBcnJheTxleHRyYWN0b3I+fSBbYWRkaXRpb25hbEV4dHJhY3RvcnNdXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UHJvY2Vzc1ZhcmlhYmxlPj59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFZhcmlhYmxlc0ZvclNjb3BlKHNjb3BlLCByb290RWxlbWVudCwgYWRkaXRpb25hbEV4dHJhY3RvcnMgPSBbXSkge1xuXG4gIHZhciBhbGxWYXJpYWJsZXMgPSBhd2FpdCBnZXRQcm9jZXNzVmFyaWFibGVzKHJvb3RFbGVtZW50LCBhZGRpdGlvbmFsRXh0cmFjdG9ycyk7XG5cbiAgdmFyIHNjb3BlRWxlbWVudCA9IGdldEVsZW1lbnQoc2NvcGUsIHJvb3RFbGVtZW50KTtcblxuICAvLyAoMSkgZ2V0IHZhcmlhYmxlcyBmb3IgZ2l2ZW4gc2NvcGVcbiAgdmFyIHNjb3BlVmFyaWFibGVzID0gbWluRGFzaC5maWx0ZXIoYWxsVmFyaWFibGVzLCBmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgIHJldHVybiB2YXJpYWJsZS5zY29wZS5pZCA9PT0gc2NvcGVFbGVtZW50LmlkO1xuICB9KTtcblxuICAvLyAoMikgZ2V0IHZhcmlhYmxlcyBmb3IgcGFyZW50IHNjb3Blc1xuICB2YXIgcGFyZW50cyA9IGdldFBhcmVudHMoc2NvcGVFbGVtZW50KTtcblxuICB2YXIgcGFyZW50c1Njb3BlVmFyaWFibGVzID0gbWluRGFzaC5maWx0ZXIoYWxsVmFyaWFibGVzLCBmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgIHJldHVybiBtaW5EYXNoLmZpbmQocGFyZW50cywgZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgICByZXR1cm4gcGFyZW50LmlkID09PSB2YXJpYWJsZS5zY29wZS5pZDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbWJpbmVBcnJheXMoc2NvcGVWYXJpYWJsZXMsIHBhcmVudHNTY29wZVZhcmlhYmxlcyk7XG59XG5cblxuZnVuY3Rpb24gZ2V0VmFyaWFibGVzRm9yRWxlbWVudChlbGVtZW50LCBhZGRpdGlvbmFsRXh0cmFjdG9ycyA9IFtdKSB7XG4gIHJldHVybiBnZXRWYXJpYWJsZXNGb3JTY29wZShnZXRTY29wZShlbGVtZW50KSwgZ2V0Um9vdEVsZW1lbnQoZWxlbWVudCksIGFkZGl0aW9uYWxFeHRyYWN0b3JzKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NvcGUoZWxlbWVudCkge1xuICBjb25zdCBibyA9IGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpO1xuXG4gIGlmIChpcyhlbGVtZW50LCAnYnBtbjpQYXJ0aWNpcGFudCcpKSB7XG4gICAgcmV0dXJuIGJvLnByb2Nlc3NSZWYuaWQ7XG4gIH1cblxuICByZXR1cm4gYm8uaWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgYnVzaW5lc3NPYmplY3QgPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICBpZiAoaXMoYnVzaW5lc3NPYmplY3QsICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICByZXR1cm4gYnVzaW5lc3NPYmplY3QucHJvY2Vzc1JlZjtcbiAgfVxuXG4gIGlmIChpcyhidXNpbmVzc09iamVjdCwgJ2JwbW46UHJvY2VzcycpKSB7XG4gICAgcmV0dXJuIGJ1c2luZXNzT2JqZWN0O1xuICB9XG5cbiAgbGV0IHBhcmVudCA9IGJ1c2luZXNzT2JqZWN0O1xuXG4gIHdoaWxlIChwYXJlbnQuJHBhcmVudCAmJiAhaXMocGFyZW50LCAnYnBtbjpQcm9jZXNzJykpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59XG5cblxuLy8gaGVscGVycyAvLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBjb21iaW5lQXJyYXlzKGEsIGIpIHtcbiAgcmV0dXJuIGEuY29uY2F0KGIpO1xufVxuXG5cbmZ1bmN0aW9uIGdldEJ1c2luZXNzT2JqZWN0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIChlbGVtZW50ICYmIGVsZW1lbnQuYnVzaW5lc3NPYmplY3QpIHx8IGVsZW1lbnQ7XG59XG5cblxuZnVuY3Rpb24gaXMoZWxlbWVudCwgdHlwZSkge1xuICB2YXIgYm8gPSBnZXRCdXNpbmVzc09iamVjdChlbGVtZW50KTtcblxuICByZXR1cm4gYm8gJiYgKHR5cGVvZiBiby4kaW5zdGFuY2VPZiA9PT0gJ2Z1bmN0aW9uJykgJiYgYm8uJGluc3RhbmNlT2YodHlwZSk7XG59XG5cbmV4cG9ydHMuZ2V0UHJvY2Vzc1ZhcmlhYmxlcyA9IGdldFByb2Nlc3NWYXJpYWJsZXM7XG5leHBvcnRzLmdldFZhcmlhYmxlc0ZvckVsZW1lbnQgPSBnZXRWYXJpYWJsZXNGb3JFbGVtZW50O1xuZXhwb3J0cy5nZXRWYXJpYWJsZXNGb3JTY29wZSA9IGdldFZhcmlhYmxlc0ZvclNjb3BlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-element-templates/node_modules/@bpmn-io/extract-process-variables/zeebe/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-executable-fix/index.js":
-/*!******************************************************!*\
- !*** ./node_modules/bpmn-js-executable-fix/index.js ***!
- \******************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _src__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src */ \"./node_modules/bpmn-js-executable-fix/src/index.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_src__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3Qzs7QUFFeEMsaUVBQWUsNENBQW1CLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9pbmRleC5qcz82YWRiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGVjdXRhYmxlRml4TW9kdWxlIGZyb20gJy4vc3JjJztcblxuZXhwb3J0IGRlZmF1bHQgRXhlY3V0YWJsZUZpeE1vZHVsZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-executable-fix/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js":
-/*!******************************************************************!*\
- !*** ./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ fixIsExecutable)\n/* harmony export */ });\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bpmn-js/lib/util/ModelUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n\n\n/**\n * Fix bpmn:Process#isExecutable to always be set to either\n * true or false after edit.\n *\n * This is an initializer that may be passed to a modules\n * __init__ block.\n *\n * @param {EventBus} eventBus\n */\nfunction fixIsExecutable(eventBus) {\n\n function fixIfProcess(element) {\n\n // exclude labels\n if (element.labelTarget) {\n return;\n }\n\n var bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.getBusinessObject)(element);\n\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(bo, 'bpmn:Participant')) {\n bo = bo.processRef;\n }\n\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_0__.is)(bo, 'bpmn:Process')) {\n bo.isExecutable = !!bo.isExecutable;\n }\n }\n\n eventBus.on([ 'shape.added', 'root.added' ], function(event) {\n fixIfProcess(event.element);\n });\n\n eventBus.on('elements.changed', function(event) {\n\n var elements = event.elements;\n\n elements.forEach(function(element) {\n fixIfProcess(element);\n });\n\n });\n}\n\nfixIsExecutable.$inject = [ 'eventBus' ];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9zcmMvRXhlY3V0YWJsZUZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUdvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDZTs7QUFFZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLDZFQUFpQjs7QUFFOUIsUUFBUSw4REFBRTtBQUNWO0FBQ0E7O0FBRUEsUUFBUSw4REFBRTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxHQUFHO0FBQ0g7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9zcmMvRXhlY3V0YWJsZUZpeC5qcz9kM2JjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGdldEJ1c2luZXNzT2JqZWN0LFxuICBpc1xufSBmcm9tICdicG1uLWpzL2xpYi91dGlsL01vZGVsVXRpbCc7XG5cbi8qKlxuICogRml4IGJwbW46UHJvY2VzcyNpc0V4ZWN1dGFibGUgdG8gYWx3YXlzIGJlIHNldCB0byBlaXRoZXJcbiAqIHRydWUgb3IgZmFsc2UgYWZ0ZXIgZWRpdC5cbiAqXG4gKiBUaGlzIGlzIGFuIGluaXRpYWxpemVyIHRoYXQgbWF5IGJlIHBhc3NlZCB0byBhIG1vZHVsZXNcbiAqIF9faW5pdF9fIGJsb2NrLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRCdXN9IGV2ZW50QnVzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpeElzRXhlY3V0YWJsZShldmVudEJ1cykge1xuXG4gIGZ1bmN0aW9uIGZpeElmUHJvY2VzcyhlbGVtZW50KSB7XG5cbiAgICAvLyBleGNsdWRlIGxhYmVsc1xuICAgIGlmIChlbGVtZW50LmxhYmVsVGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJvID0gZ2V0QnVzaW5lc3NPYmplY3QoZWxlbWVudCk7XG5cbiAgICBpZiAoaXMoYm8sICdicG1uOlBhcnRpY2lwYW50JykpIHtcbiAgICAgIGJvID0gYm8ucHJvY2Vzc1JlZjtcbiAgICB9XG5cbiAgICBpZiAoaXMoYm8sICdicG1uOlByb2Nlc3MnKSkge1xuICAgICAgYm8uaXNFeGVjdXRhYmxlID0gISFiby5pc0V4ZWN1dGFibGU7XG4gICAgfVxuICB9XG5cbiAgZXZlbnRCdXMub24oWyAnc2hhcGUuYWRkZWQnLCAncm9vdC5hZGRlZCcgXSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBmaXhJZlByb2Nlc3MoZXZlbnQuZWxlbWVudCk7XG4gIH0pO1xuXG4gIGV2ZW50QnVzLm9uKCdlbGVtZW50cy5jaGFuZ2VkJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgIHZhciBlbGVtZW50cyA9IGV2ZW50LmVsZW1lbnRzO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICBmaXhJZlByb2Nlc3MoZWxlbWVudCk7XG4gICAgfSk7XG5cbiAgfSk7XG59XG5cbmZpeElzRXhlY3V0YWJsZS4kaW5qZWN0ID0gWyAnZXZlbnRCdXMnIF07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-executable-fix/src/index.js":
-/*!**********************************************************!*\
- !*** ./node_modules/bpmn-js-executable-fix/src/index.js ***!
- \**********************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ExecutableFix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ExecutableFix */ \"./node_modules/bpmn-js-executable-fix/src/ExecutableFix.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __init__: [\n _ExecutableFix__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnBtbi1qcy1leGVjdXRhYmxlLWZpeC9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNEM7OztBQUc1QyxpRUFBZTtBQUNmO0FBQ0EsSUFBSSxzREFBYTtBQUNqQjtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9icG1uLWpzLWV4ZWN1dGFibGUtZml4L3NyYy9pbmRleC5qcz8xNWJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGVjdXRhYmxlRml4IGZyb20gJy4vRXhlY3V0YWJsZUZpeCc7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2luaXRfXzogW1xuICAgIEV4ZWN1dGFibGVGaXhcbiAgXVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bpmn-js-executable-fix/src/index.js\n");
-
-/***/ }),
-
-/***/ "./node_modules/bpmn-js-properties-panel/dist/index.esm.js":
-/*!*****************************************************************!*\
- !*** ./node_modules/bpmn-js-properties-panel/dist/index.esm.js ***!
- \*****************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BpmnPropertiesPanelModule: () => (/* binding */ index$3),\n/* harmony export */ BpmnPropertiesProviderModule: () => (/* binding */ index$2),\n/* harmony export */ CamundaPlatformPropertiesProviderModule: () => (/* binding */ index),\n/* harmony export */ CamundaPlatformTooltipProvider: () => (/* binding */ TooltipProvider),\n/* harmony export */ ZeebePropertiesProviderModule: () => (/* binding */ index$1),\n/* harmony export */ ZeebeTooltipProvider: () => (/* binding */ TooltipProvider$1),\n/* harmony export */ useService: () => (/* binding */ useService)\n/* harmony export */ });\n/* harmony import */ var _bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/hooks */ \"./node_modules/@bpmn-io/properties-panel/preact/hooks/dist/hooks.module.js\");\n/* harmony import */ var min_dash__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! min-dash */ \"./node_modules/min-dash/dist/index.esm.js\");\n/* harmony import */ var _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @bpmn-io/properties-panel */ \"./node_modules/@bpmn-io/properties-panel/dist/index.esm.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact */ \"./node_modules/@bpmn-io/properties-panel/preact/dist/preact.module.js\");\n/* harmony import */ var bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! bpmn-js/lib/features/label-editing/LabelUtil */ \"./node_modules/bpmn-js/lib/util/LabelUtil.js\");\n/* harmony import */ var bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! bpmn-js/lib/features/modeling/util/ModelingUtil */ \"./node_modules/bpmn-js/lib/util/ModelUtil.js\");\n/* harmony import */ var bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! bpmn-js/lib/util/DiUtil */ \"./node_modules/bpmn-js/lib/util/DiUtil.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/compat */ \"./node_modules/@bpmn-io/properties-panel/preact/compat/dist/compat.module.js\");\n/* harmony import */ var _bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @bpmn-io/properties-panel/preact/jsx-runtime */ \"./node_modules/@bpmn-io/properties-panel/preact/jsx-runtime/dist/jsxRuntime.module.js\");\n/* harmony import */ var diagram_js_lib_features_keyboard_KeyboardUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! diagram-js/lib/features/keyboard/KeyboardUtil */ \"./node_modules/diagram-js/lib/features/keyboard/KeyboardUtil.js\");\n/* harmony import */ var min_dom__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! min-dom */ \"./node_modules/min-dom/dist/index.esm.js\");\n/* harmony import */ var ids__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ids */ \"./node_modules/ids/dist/index.esm.js\");\n/* harmony import */ var diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! diagram-js/lib/util/Collections */ \"./node_modules/diagram-js/lib/util/Collections.js\");\n/* harmony import */ var _bpmn_io_extract_process_variables_zeebe__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @bpmn-io/extract-process-variables/zeebe */ \"./node_modules/@bpmn-io/extract-process-variables/zeebe/index.mjs\");\n/* harmony import */ var array_move__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! array-move */ \"./node_modules/array-move/index.js\");\n/* harmony import */ var _bpmn_io_extract_process_variables__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @bpmn-io/extract-process-variables */ \"./node_modules/@bpmn-io/extract-process-variables/dist/index.mjs\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst BpmnPropertiesPanelContext = (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__.createContext)({\n selectedElement: null,\n injector: null,\n getService() {\n return null;\n }\n});\n\nfunction useService(type, strict) {\n const {\n getService\n } = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(BpmnPropertiesPanelContext);\n return getService(type, strict);\n}\n\nfunction _extends$1o() { return _extends$1o = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1o.apply(null, arguments); }\nvar AssociationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1o({\n width: \"32\",\n height: \"32\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n stroke: \"#000\",\n strokeWidth: \"2\",\n fill: \"none\",\n strokeDasharray: \"3.3,6\",\n strokeLinecap: \"square\",\n d: \"M1.5 30.5l29-29\"\n}));\n\nfunction _extends$1n() { return _extends$1n = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1n.apply(null, arguments); }\nvar BusinessRuleTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1n({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zM5.296 7.398v12.665h16.87V7.398H5.296zm.718 4.386h15.433v3.44H9.985v-3.432h-.719v3.431H6.014v-3.44zm0 4.158h3.252v3.403H6.014v-3.403zm3.97 0h11.463v3.403H9.985v-3.403z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.079 8.209v3.587H21.44V8.209z\"\n}));\n\nfunction _extends$1m() { return _extends$1m = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1m.apply(null, arguments); }\nvar CallActivityIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1m({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M24.978 3c3.761 0 6.89 2.979 7.018 6.695l.004.238V22.4c0 3.747-3.05 6.804-6.783 6.93l-.24.003H7.023c-3.761 0-6.89-2.978-7.018-6.695L0 22.4V9.933C0 6.187 3.05 3.13 6.783 3.004L7.023 3h17.955zm0 3.667H7.022c-1.842 0-3.255 1.344-3.35 3.079l-.005.187V22.4c0 1.761 1.35 3.167 3.16 3.262l.195.005L10 25.666V15h12v10.666h2.978c1.842 0 3.255-1.344 3.35-3.079l.005-.187V9.933c0-1.761-1.35-3.166-3.16-3.261l-.195-.005zm-3.732 9.087H10.754v9.912h10.491v-9.912zm-4.475 1.817v2.658h2.658v1.542H16.77v2.658H15.23V21.77H12.57V20.23h2.658V17.57h1.542z\"\n}));\n\nfunction _extends$1l() { return _extends$1l = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1l.apply(null, arguments); }\nvar CollaborationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1l({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", {\n fillRule: \"evenodd\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fillRule: \"nonzero\",\n d: \"M0 0v8.62h32V0H0zm1.655 7.054v-5.37h28.62v5.37H1.656zM0 23.38V32h32v-8.62H0zm1.655 7.054v-5.37h28.62v5.37H1.656z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M24 8l4 7h-8l4-7zm0 2l-2.28 4h4.56L24 10zM23.5 21h1v3h-1zM23.5 15h1v3h-1zM8 24l-4-7h8l-4 7zm0-2l2.28-4H5.72L8 22zM7.5 8h1v3h-1zM7.5 14h1v3h-1z\"\n})));\n\nfunction _extends$1k() { return _extends$1k = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1k.apply(null, arguments); }\nvar ConditionalFlowIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1k({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M32 .041S20.42 5.95 14.537 8.713c1.26 1.15 2.432 2.392 3.648 3.588-5.703 5.78-3.15 3.303-8.087 8.316l-8.472 1.377L0 32l10.006-1.626.098-.598 1.279-7.873c4.975-5.052 2.403-2.555 8.118-8.346 1.218 1.214 2.43 2.435 3.648 3.648C26.29 11.018 32 .041 32 .041zM9.603 22.397L8.54 28.91 2.03 29.97l1.061-6.515 6.512-1.058z\"\n}));\n\nfunction _extends$1j() { return _extends$1j = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1j.apply(null, arguments); }\nvar ConnectionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1j({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M32 .06S20.33 6.014 14.403 8.798c1.27 1.16 2.451 2.41 3.676 3.616L0 30.734 1.325 32l18.08-18.32c1.227 1.223 2.448 2.453 3.676 3.676C26.247 11.12 32 .06 32 .06z\"\n}));\n\nfunction _extends$1i() { return _extends$1i = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1i.apply(null, arguments); }\nvar DataInputOutputAssociationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1i({\n width: \"32\",\n height: \"32\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n stroke: \"#000\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeDasharray: \"1.1,4.3\",\n d: \"M1.5 30.5L27 5\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M31.803.197L26.5 16.107l-1.52-1.52 3.783-11.35-11.35 3.783-1.52-1.52z\"\n}));\n\nfunction _extends$1h() { return _extends$1h = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1h.apply(null, arguments); }\nvar DataInputIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1h({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M20.833 0H3.488v32H28V7.36L20.833 0zm-2.105 1.818v7.507h7.454v20.857H5.306V1.818h13.422zm1.818.493l5.06 5.196h-5.06V2.311zm-9.182.86v3.744H7.081v3.222h4.283v3.743l5.7-5.354-5.7-5.354zm.808 1.868l3.711 3.487-3.71 3.487V9.329H7.888V7.723h4.283V5.039z\"\n}));\n\nfunction _extends$1g() { return _extends$1g = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1g.apply(null, arguments); }\nvar DataObjectIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1g({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M21.345 0H4v32h24.512V7.36L21.345 0zM19.24 1.818v7.507h7.454v20.857H5.818V1.818H19.24zm1.818.493l5.06 5.196h-5.06V2.311z\"\n}));\n\nfunction _extends$1f() { return _extends$1f = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1f.apply(null, arguments); }\nvar DataOutputIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1f({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M20.833 0H3.488v32H28V7.36L20.833 0zm-2.105 1.818v7.507h7.454v20.857H5.306V1.818h13.422zm1.818.493l5.06 5.196h-5.06V2.311zm-9.182.86v3.744H7.081v3.222h4.283v3.743l5.7-5.354-5.7-5.354z\"\n}));\n\nfunction _extends$1e() { return _extends$1e = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1e.apply(null, arguments); }\nvar DataStoreIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1e({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.008 1c-3.712 0-7.417.306-10.319.939-1.45.316-2.7.71-3.68 1.226C1.065 3.662.297 4.304.061 5.23a.823.823 0 00-.035.15L0 5.502l.017.084c-.012 7.41 0 14.46 0 22.08l.017.082c.203.985.995 1.656 1.975 2.172.98.517 2.23.91 3.68 1.226 2.902.633 6.607.94 10.319.94 3.711 0 7.416-.307 10.318-.94 1.451-.316 2.701-.71 3.68-1.226.98-.516 1.772-1.187 1.975-2.172l.017-.082V5.541a.825.825 0 000-.106v-.016l-.002-.013a.823.823 0 00-.046-.197c-.244-.916-1.007-1.55-1.943-2.044-.98-.516-2.23-.91-3.68-1.226C23.423 1.306 19.718 1 16.006 1zm0 1.646c3.62 0 7.245.308 9.968.901 1.36.297 2.497.67 3.263 1.074.612.323.932.643 1.063.882-.131.24-.451.56-1.063.882-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.901-9.968.901-3.62 0-7.245-.307-9.968-.901-1.361-.297-2.497-.67-3.264-1.074-.611-.322-.931-.642-1.062-.882.13-.24.451-.56 1.062-.882.767-.403 1.903-.777 3.264-1.074 2.723-.593 6.348-.9 9.968-.9zM1.664 7.647c.112.067.227.132.345.194.98.517 2.23.91 3.68 1.226 2.902.633 6.607.94 10.319.94 3.711 0 7.416-.307 10.318-.94 1.451-.316 2.701-.71 3.68-1.226.119-.062.234-.127.346-.194v1.93c-.08.245-.398.619-1.113.995-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.901-9.968.901-3.62 0-7.245-.307-9.968-.9-1.361-.298-2.497-.671-3.264-1.075-.714-.376-1.032-.75-1.112-.995v-1.93zm0 4.187c.112.067.227.132.345.195.98.516 2.23.91 3.68 1.226 2.902.632 6.607.938 10.319.938 3.711 0 7.416-.306 10.318-.938 1.451-.317 2.701-.71 3.68-1.226.119-.063.234-.128.346-.195v1.93c-.08.245-.398.619-1.113.995-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.901-9.968.901-3.62 0-7.245-.307-9.968-.9-1.361-.298-2.497-.67-3.264-1.075-.714-.376-1.032-.75-1.112-.995v-1.93zm0 4.188c.112.067.227.131.345.194.98.516 2.23.91 3.68 1.226 2.902.633 6.607.939 10.319.939 3.711 0 7.416-.306 10.318-.94 1.451-.316 2.701-.709 3.68-1.225.119-.063.234-.127.346-.194V27.47c-.08.245-.398.618-1.113.995-.766.404-1.902.777-3.263 1.074-2.723.594-6.349.9-9.968.9-3.62 0-7.245-.306-9.968-.9-1.361-.297-2.497-.67-3.264-1.074-.714-.377-1.032-.75-1.112-.995V16.022z\"\n}));\n\nfunction _extends$1d() { return _extends$1d = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1d.apply(null, arguments); }\nvar DefaultFlowIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1d({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M32 .06S20.33 6.014 14.403 8.798c1.27 1.16 2.451 2.41 3.676 3.616L6.84 23.804H.046v1.755h5.063L0 30.735 1.325 32l6.357-6.441h7.145v-1.756H9.414l9.99-10.123c1.228 1.223 2.45 2.453 3.677 3.676C26.247 11.12 32 .06 32 .06z\"\n}));\n\nfunction _extends$1c() { return _extends$1c = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1c.apply(null, arguments); }\nvar EndEventCancelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1c({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm-3.955 3.918L8.94 12.072l3.985 3.985-3.913 3.913 3.048 3.047 3.913-3.913 3.987 3.987 3.096-3.096-3.987-3.987 3.913-3.913-3.047-3.048-3.913 3.913-3.985-3.985z\"\n}));\n\nfunction _extends$1b() { return _extends$1b = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1b.apply(null, arguments); }\nvar EndEventCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1b({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm-.56 5.744l-7.407 5.23 7.408 5.234v-5.057c2.384 1.687 4.771 3.371 7.157 5.057V10.801l-7.157 5.054v-5.054z\"\n}));\n\nfunction _extends$1a() { return _extends$1a = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1a.apply(null, arguments); }\nvar EndEventErrorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1a({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm6.132 4.166l-3.633 7.363-4.516-5.874-4.102 12.131 4.599-5.91 4.743 5.427 2.909-13.137z\"\n}));\n\nfunction _extends$19() { return _extends$19 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$19.apply(null, arguments); }\nvar EndEventEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$19({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.006 3.9c-1.672 4.653-2.733 9.5-4.406 14.153 1.535-1.525 2.872-3.234 4.406-4.759l4.406 4.76c-1.497-4.71-2.91-9.445-4.406-14.155z\"\n}));\n\nfunction _extends$18() { return _extends$18 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$18.apply(null, arguments); }\nvar EndEventLinkIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$18({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676 0C7.943.007.834 6.45.104 14.16c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 4.958 23.394.313 16.978.032A18.532 18.532 0 0015.676 0zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm1.78 4.065v3.555H9.779v6.713h7.994v3.554l5.828-6.91-5.828-6.912z\"\n}));\n\nfunction _extends$17() { return _extends$17 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$17.apply(null, arguments); }\nvar EndEventMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$17({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676 0C7.943.007.834 6.45.104 14.16c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 4.958 23.394.313 16.978.032A18.532 18.532 0 0015.676 0zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm-5.91 5.448l6.041 4.9 6.04-4.9H10.084zm-1.34 1.137v9.92h14.513v-9.718l-7.132 5.786-7.381-5.988z\"\n}));\n\nfunction _extends$16() { return _extends$16 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$16.apply(null, arguments); }\nvar EndEventMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$16({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676 0C7.943.007.834 6.45.104 14.16c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 4.958 23.394.313 16.978.032A18.529 18.529 0 0015.676 0zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.011 3.039l-7.619 5.53 2.91 8.95h9.418l2.91-8.95-7.619-5.53z\"\n}));\n\nfunction _extends$15() { return _extends$15 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$15.apply(null, arguments); }\nvar EndEventNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$15({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.84.042C8.654-.01 1.913 5.437.4 12.454-1.057 18.62 1.554 25.495 6.784 29.09c5.076 3.636 12.31 3.92 17.59.544 5.309-3.251 8.435-9.744 7.445-15.921C30.91 7.307 25.795 1.738 19.442.422a16.064 16.064 0 00-3.602-.38zm.382 5.01c5.28-.017 10.13 4.353 10.669 9.61.687 5.025-2.552 10.281-7.423 11.792-4.754 1.617-10.486-.447-12.962-4.856-2.74-4.575-1.574-11.094 2.768-14.27a11.05 11.05 0 016.948-2.276z\"\n}));\n\nfunction _extends$14() { return _extends$14 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$14.apply(null, arguments); }\nvar EndEventSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$14({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.006 3.492c-2.261 4.07-4.532 8.136-6.797 12.204h13.595L15.999 8.55z\"\n}));\n\nfunction _extends$13() { return _extends$13 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$13.apply(null, arguments); }\nvar EndEventTerminateIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$13({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.676.051C7.943.058.834 6.501.104 14.21c-.783 6.565 2.912 13.427 8.942 16.216 5.6 2.737 12.789 1.87 17.434-2.344 4.725-4.09 6.79-11.06 4.714-17.006C29.22 5.009 23.394.364 16.978.083A18.532 18.532 0 0015.676.05zm.317 5.006c5.695-.165 10.916 4.858 10.983 10.555.246 5.212-3.67 10.33-8.864 11.204-5.026 1.007-10.6-1.898-12.36-6.777-1.894-4.826.039-10.928 4.649-13.46a11.082 11.082 0 015.592-1.522zm.006 2.859c-5.264-.2-9.495 5.551-7.755 10.516 1.366 5.085 8.108 7.436 12.339 4.301 4.455-2.807 4.708-9.943.462-13.058A8.128 8.128 0 0016 7.915z\"\n}));\n\nfunction _extends$12() { return _extends$12 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$12.apply(null, arguments); }\nvar EventSubProcessExpandedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$12({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M7.295 4.78h1.779V3.003h-1.78V4.78zm3.558 0h1.779V3.003h-1.78V4.78zm3.557 0h1.78V3.003h-1.78V4.78zm3.558 0h1.78V3.003h-1.78V4.78zm3.558 0h1.779V3.003h-1.779V4.78zm3.558 0c.55.014 1.106-.034 1.654.045l.245-1.762c-.629-.096-1.266-.05-1.9-.061V4.78zM5.732 3.004a5.933 5.933 0 00-.915.093c.111.582.226 1.164.315 1.75.358-.101.947.098.746-.483-.096-.382.164-1.208-.146-1.36zm22.372 2.281c.427.234.812.547 1.13.915.42-.4 1.002-.777 1.33-1.18a5.863 5.863 0 00-1.593-1.289l-.867 1.554zm-25.27-1.44c-.587.354-1.11.811-1.539 1.345.47.333.96.86 1.417 1.077.299-.362.66-.673 1.065-.913-.328-.493-.55-1.055-.944-1.509zM30.515 7.26c-.563.046-.557.342-.378.784.154.25-.097.862.25.85.525-.023 1.14.043 1.612-.032a5.891 5.891 0 00-.362-2.027l-1.122.425zM.268 7.114A6.042 6.042 0 000 9.052h1.78c-.013-.5.047-1.003.208-1.478L.296 7.027l-.026.079-.002.008zM30.22 12.45H32v-1.779h-1.779v1.779zm-30.22.16h1.78v-1.779H0v1.78zm30.22 3.398H32v-1.78h-1.779v1.78zm-30.22.16h1.78v-1.779H0v1.779zm30.22 3.398H32v-1.78h-1.779v1.78zm-30.22.16h1.78v-1.78H0v1.78zm30.22 3.397H32v-1.779h-1.779v1.78zm-30.22.16h1.78v-1.778H0v1.778zm30.137 1.47a4.059 4.059 0 01-.522 1.32c.506.283 1.046.715 1.53.908a5.836 5.836 0 00.744-1.918c-.576-.094-1.209-.264-1.752-.31zm-29.984.51c.157.676.435 1.325.82 1.904l1.486-.977a4.065 4.065 0 01-.577-1.347l-1.73.42zm28.427 1.943c-.371.277-.79.49-1.234.627l.548 1.693a5.84 5.84 0 001.835-.96l-1.082-1.412-.066.05-.001.002zm-26.164 1.47c.567.413 1.21.722 1.886.907.14-.569.343-1.175.444-1.722a4.062 4.062 0 01-1.283-.624l-1.047 1.438zm3.88 1.119h1.779v-1.78h-1.78v1.78zm3.55 0h1.787v-1.78H9.846v1.78zm3.565 0h1.78v-1.78h-1.78v1.78zm3.558 0h1.78v-1.78h-1.78v1.78zm3.451 0h1.743v-1.78h-1.743v1.78zm3.665 0h1.779v-1.78h-1.78v1.78zm-1.922-.545V16.776H9.846V29.25h12.318zM10.967 17.905h10.068V27.97H10.967V17.905zm1.336 3.998v1.711h7.396v-1.711h-7.396z\",\n opacity: \".97\"\n}));\n\nfunction _extends$11() { return _extends$11 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$11.apply(null, arguments); }\nvar GatewayComplexIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$11({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.001 0a1.29 1.29 0 00-.917.373L.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.372A1.294 1.294 0 0016.002 0zM16 2.181l13.821 13.821L16 29.823 2.179 16.003 16 2.18zm-.327 6.79v.007l-.145.027-.118.08-.083.123-.028.145v4.954L11.793 10.8l-.125-.08-.14-.029-.144.027-.122.082-.46.46-.085.125-.026.142.028.14.08.125 3.505 3.505H9.347l-.001-.002-.145.032-.118.08-.083.122-.028.146v.652l.029.147.082.119.12.08.144.032h4.956L10.8 20.207v-.001l-.084.124-.026.142.028.14.08.124.46.461.126.082.14.029.143-.027.124-.084L15.3 17.69v4.964-.001l.028.147.082.12.12.08.144.031h.652l.148-.03.118-.08.083-.12.028-.146v-4.962l3.505 3.505.126.082.14.027.142-.027.124-.084.461-.46.083-.123s.028-.144.027-.146l-.028-.14-.082-.126-3.496-3.496h4.948l.148-.03.119-.08.082-.12.028-.147v-.652l-.028-.145-.083-.122-.119-.08s-.147-.033-.147-.031h-4.964l3.512-3.512.082-.122.029-.144-.028-.14-.084-.124-.46-.461-.123-.082-.14-.027-.145.027-.122.082-3.507 3.507V9.348l-.028-.146-.082-.122-.12-.08-.147-.029h-.652z\"\n}));\n\nfunction _extends$10() { return _extends$10 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$10.apply(null, arguments); }\nvar GatewayEventBasedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$10({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0a1.29 1.29 0 00-.918.373L.371 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.915.372A1.294 1.294 0 0016 0zm-.002 2.181l13.821 13.821-13.821 13.821-13.821-13.82L15.998 2.18zm0 5.876l-.254.185-7.377 5.355 2.915 8.964h9.433l2.915-8.964-7.631-5.54zm0 1.07l6.614 4.8-2.526 7.769h-8.175l-2.526-7.768 6.614-4.802z\"\n}));\n\nfunction _extends$$() { return _extends$$ = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$$.apply(null, arguments); }\nvar GatewayNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$$({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.373a1.313 1.313 0 00-1.833 0L.373 15.084zm1.806.918L16 2.182l13.821 13.82L16 29.823 2.179 16.003z\"\n}));\n\nfunction _extends$_() { return _extends$_ = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$_.apply(null, arguments); }\nvar GatewayOrIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$_({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.001 0a1.29 1.29 0 00-.917.373L.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.372A1.294 1.294 0 0016.002 0zM16 2.181l13.821 13.821L16 29.823 2.179 16.003 16 2.18zm0 6.379a7.447 7.447 0 00-7.44 7.441A7.447 7.447 0 0016 23.443 7.447 7.447 0 0023.443 16a7.447 7.447 0 00-7.441-7.441zm0 .825a6.61 6.61 0 016.617 6.616A6.61 6.61 0 0116 22.618 6.61 6.61 0 019.385 16 6.61 6.61 0 0116 9.385z\"\n}));\n\nfunction _extends$Z() { return _extends$Z = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$Z.apply(null, arguments); }\nvar GatewayParallelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$Z({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.001 0a1.29 1.29 0 00-.917.373L.373 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.917.372A1.294 1.294 0 0016.002 0zM16 2.181l13.821 13.821L16 29.823 2.179 16.003 16 2.18zm-.377 5.708l-.168.032-.136.092-.096.14-.032.168v6.868h-6.87l-.002-.002-.166.037-.137.092v-.002l-.095.141-.033.167v.753s.032.169.034.17l.094.138.138.092.167.036h6.87v6.867l-.001-.001.033.17.095.138.138.092s.166.035.167.037h.752l.17-.036.137-.092.095-.137.033-.17v-6.867h6.868l.17-.035.137-.092.095-.137.033-.17v-.753s-.033-.165-.032-.167l-.096-.14-.138-.093s-.17-.037-.17-.035H16.81V8.323l-.033-.168-.094-.14-.138-.092-.17-.034h-.752z\"\n}));\n\nfunction _extends$Y() { return _extends$Y = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$Y.apply(null, arguments); }\nvar GatewayXorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$Y({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0a1.29 1.29 0 00-.918.373L.371 15.084a1.316 1.316 0 00.002 1.834l14.71 14.709a1.313 1.313 0 001.833 0l14.711-14.711a1.316 1.316 0 00-.002-1.834L16.915.372A1.294 1.294 0 0016 0zm-.002 2.181l13.821 13.821-13.821 13.821-13.821-13.82L15.998 2.18zm-5.162 7.69l-.166.032-.141.096-.532.532s-.097.142-.097.144l-.03.164.032.162.093.144 4.857 4.858-4.855 4.855v-.001L9.9 21l-.03.164.032.162s.093.142.093.144l.531.532.146.095.162.032.164-.03.144-.097 4.855-4.856 4.857 4.857.145.095.162.032.164-.03.144-.097.531-.532.095-.14.033-.168-.033-.162-.095-.146L17.144 16 22 11.144l.095-.14.033-.166-.033-.163-.097-.144-.532-.532-.14-.095-.163-.032-.166.032-.141.095L16 14.855l-4.858-4.858v-.002l-.144-.092-.162-.032z\"\n}));\n\nfunction _extends$X() { return _extends$X = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$X.apply(null, arguments); }\nvar GroupIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$X({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.34.016c-2.333.025-4.684 1.77-5.29 4.17C.608 5.848.88 7.608.804 9.314v2.922h2.041c.038-2.332-.076-4.673.062-7C3.14 3.355 4.869 1.938 6.643 2.04h8.956V.009c-3.086 0-6.173-.02-9.258 0v.007zm13.094 2.023h1.92V.009h-1.92v2.03zm5.756 0c1.265-.069 2.66.045 3.602 1.055 1.036.983 1.201 2.523 1.122 3.91v6.313h2.078c-.03-2.677.062-5.36-.047-8.032-.17-2.743-2.62-5.111-5.215-5.236-.511-.064-1.027-.02-1.54-.033v2.023zM.803 18.319h2.041v-2.026H.804v2.026zm29.11 1.084h2.08v-2.03h-2.08v2.03zM.804 26.148c.004 2.218 1.393 4.366 3.313 5.28 1.728.853 3.681.448 5.521.544.43-.112 1.29.231 1.435-.183v-1.847c-1.788-.043-3.584.094-5.365-.082-1.67-.354-2.919-2.048-2.863-3.844v-3.644H.804v3.777zm29.11-.068c.04 1.961-1.508 3.787-3.381 3.842-1.954.06-3.914.02-5.87.026v2.03c2.118-.042 4.242.08 6.355-.063 2.524-.264 4.818-2.644 4.94-5.323.08-1.039.014-2.085.035-3.126h-2.078v2.613zm-15.006 5.898h1.92v-2.03h-1.92v2.03z\"\n}));\n\nfunction _extends$W() { return _extends$W = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$W.apply(null, arguments); }\nvar IntermediateEventCatchCancelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$W({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.111.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.454 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.215-2.282-2.022-5.3-3.217-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.082 11.082 0 0116 5.021zm-3.956 3.946l-3.096 3.097 3.985 3.985-3.913 3.913 3.047 3.048 3.913-3.913 3.988 3.987 3.097-3.096L19.076 16l3.914-3.913-3.048-3.048-3.913 3.913-3.986-3.985zm-.002 1.222l3.988 3.987 3.913-3.913 1.826 1.826-3.913 3.913 3.985 3.986-1.873 1.873-3.985-3.985-3.913 3.913-1.827-1.827 3.914-3.913-3.988-3.987 1.873-1.873z\"\n}));\n\nfunction _extends$V() { return _extends$V = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$V.apply(null, arguments); }\nvar IntermediateEventCatchCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$V({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm-.56 5.772l-7.408 5.231 7.409 5.234v-5.057c2.385 1.687 4.771 3.371 7.157 5.057V10.793l-7.157 5.055v-5.055zm-.865 1.665v7.125l-5.048-3.562 5.048-3.563zm7.161 0v7.132l-5.048-3.566 5.048-3.566z\"\n}));\n\nfunction _extends$U() { return _extends$U = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$U.apply(null, arguments); }\nvar IntermediateEventCatchConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$U({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.97.04h-.127C8.713-.018 2.003 5.334.437 12.286c-1.51 6.123.98 13.005 6.136 16.665 5.125 3.788 12.546 4.105 17.912.623 5.272-3.276 8.33-9.766 7.325-15.916-.904-6.241-5.79-11.7-11.95-13.143A16.082 16.082 0 0015.97.04zm-.181 1.724c.115 0 .23 0 .347.003 6.625-.066 12.823 5.149 13.89 11.69 1.13 5.91-1.908 12.349-7.262 15.138-5.473 3.013-12.866 1.884-17.116-2.726C1.291 21.372.444 13.914 3.802 8.602c2.493-4.112 7.169-6.819 11.987-6.838zm.283 1.554c-.117 0-.234.002-.351.005-6.1 0-11.691 5.049-12.346 11.114-.78 5.684 2.795 11.612 8.218 13.52 5.139 1.943 11.416.101 14.624-4.38 3.461-4.583 3.262-11.538-.596-15.831-2.36-2.747-5.924-4.423-9.549-4.428zm-.078 1.695c.078 0 .156 0 .234.003 5.4 0 10.321 4.556 10.734 9.942.563 5.13-2.958 10.364-7.971 11.678-4.832 1.41-10.457-.935-12.746-5.446-2.463-4.559-1.2-10.795 3.014-13.883a11.072 11.072 0 016.735-2.294zm-5.352 4.266V22.761h10.716V9.279H10.642zm.863.866h8.987v11.75h-8.987v-11.75zm.927 1.323v.862h7.133v-.862h-7.133zm0 2.602v.866h7.133v-.866h-7.133zm0 3.008v.862h7.133v-.862h-7.133zm0 2.717v.863h7.133v-.863h-7.133z\"\n}));\n\nfunction _extends$T() { return _extends$T = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$T.apply(null, arguments); }\nvar IntermediateEventCatchErrorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$T({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm6.132 4.194c-1.21 2.455-2.422 4.91-3.633 7.364l-4.516-5.875-4.103 12.133 4.6-5.912c1.58 1.81 3.162 3.619 4.744 5.429L22.13 9.215zM14.383 13.1l4.295 5.445 1.073-2.387-1.027 4.131-4.384-5.157-1.778 2.75 1.821-4.782z\"\n}));\n\nfunction _extends$S() { return _extends$S = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$S.apply(null, arguments); }\nvar IntermediateEventCatchEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$S({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm.006 3.927c-1.672 4.654-2.734 9.502-4.406 14.155 1.534-1.525 2.872-3.234 4.406-4.759l4.406 4.76c-1.496-4.71-2.91-9.446-4.406-14.156zm.032 2.929c.822 2.586 1.598 5.186 2.42 7.771l-2.42-2.612c-.682.597-2.452 2.884-2.338 2.388.87-2.487 1.447-5.067 2.338-7.547z\"\n}));\n\nfunction _extends$R() { return _extends$R = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$R.apply(null, arguments); }\nvar IntermediateEventCatchLinkIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$R({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm1.78 4.093v3.555H9.785v6.714h7.994v3.554l5.829-6.911-5.83-6.912zm.974 2.584l3.61 4.295-3.61 4.294v-1.933h-7.88v-4.688h7.88v-1.968z\"\n}));\n\nfunction _extends$Q() { return _extends$Q = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$Q.apply(null, arguments); }\nvar IntermediateEventCatchMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$Q({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm-7.245 5.475v11.06h14.502v-11.06H8.754zm3.222 1.728h8.057c-1.427.878-2.854 2.806-4.281 3.016l-3.776-3.016zm9.554 1.017v6.587H10.48V13.24l5.524 4.414 5.526-4.414z\"\n}));\n\nfunction _extends$P() { return _extends$P = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$P.apply(null, arguments); }\nvar IntermediateEventCatchMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$P({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm.006 3.073l-7.62 5.531 2.91 8.95h9.42l2.91-8.95-7.62-5.53zm0 1.067l6.604 4.794-2.523 7.757h-8.162l-2.522-7.757 6.603-4.794z\"\n}));\n\nfunction _extends$O() { return _extends$O = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$O.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$O({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M10.638 9.563V23.056h10.724V9.563H10.638zm.863.866h8.995v11.76H11.5V10.43zm.928 1.324v.862h7.139v-.862h-7.14zm0 2.605v.866h7.139v-.866h-7.14zm0 3.01v.863h7.139v-.863h-7.14zm0 2.72v.863h7.139v-.864h-7.14zM15.999.308h-.004l-.188.001h-.011l-.188.004h-.011L15.41.32h-.011l-.187.008h-.005L15.2.33l-.187.01h-.005l-.005.001-.187.013h-.011L14.62.37h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.185.027h-.005l-.005.001-.184.029h-.005l-.005.001-.183.031-.006.001-.005.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003.178-.001h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.176.027.17.03.174.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.087-.135.061-.15.032-.158.002-.16-.027-.16-.057-.15L20 1.023l-.108-.12-.128-.097-.145-.073-.128-.038-.158-.035-.005-.001-.005-.001L19.14.62h-.005l-.005-.002-.182-.035h-.006L18.938.58l-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.006-.001-.183-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.43 17.783.41l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.37h-.005L17.38.368l-.187-.015h-.005l-.005-.001-.187-.013h-.011L16.8.328h-.011L16.6.32h-.011l-.187-.006h-.011L16.204.31h-.011L16.005.31H16zm9.016 2.935l-.16.004-.158.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.126.125.124.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.084.152.084.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.16-.016.155-.046.144-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.003-.005-.002-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.003-.005-.101-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.005-.003-.004-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.004-.004-.003-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.004-.004-.132-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027zm-18.381.344l-.161.008-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003L4.682 5l-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.004-.003.005-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.004-.003.005-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023zM16 3.595h-.005l-.148.001h-.01l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.047.12.048.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.139-.107-.12-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.006-.002-.005-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.142-.031-.005-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.002-.143-.025-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01L16.32 3.6h-.011l-.147-.003h-.011l-.147-.001H16zm-5.482 1.366l-.16.008-.157.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.005.003-.004.004-.11.096-.004.004-.004.003-.11.098-.003.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.004.004-.003.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.004-.086.118-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.03.15-.057.138-.085.119-.109.082-.105.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022zm13.91 2.116l-.162.008-.157.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.025.159.055.152.082.138.086.103.09.09.094.098.092.099.093.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.114.068.118.067.115.065.118.064.117.062.117.061.121.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.048.127.047.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.085.137.11.119.129.096.145.07.155.043.16.013.161-.017.154-.046.144-.075.126-.1.106-.12.082-.14.055-.151.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.06-.132-.001-.005-.002-.004-.061-.132-.003-.004-.002-.005-.063-.13-.002-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.074-.125-.002-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.081-.12-.003-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.118-.003-.004-.004-.004-.087-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.094-.113-.003-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.11-.004-.003-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023zM4.45 13.135l-.161.002-.158.032-.15.06-.135.088-.118.11-.094.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.005-.019.145v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.005l-.001.006-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.005.033.142v.005l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.104.102-.125.076-.142.049-.153.02-.16-.011-.161-.031-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.133-.024-.133-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.133.01-.138.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029zm26.698 1.601l-.161.01-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.025.175-.026.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.16-.062.165-.062.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.079.158-.08.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.119.13.097.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.005.002-.004.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.171.001-.005.002-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.181.001-.005.001-.005.037-.182.002-.005v-.005l.036-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187V16.7l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02zm-30.21.572l-.161.001-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.004.074.17.002.005.002.004.076.169.002.004.002.005.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158-.074-.155-.074-.16-.071-.157-.07-.16-.068-.16-.067-.165-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178-.001-.177v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057-.159-.028zm26.798 2.024l-.16.007-.157.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.133-.026.133-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.063.119-.062.116-.067.119-.066.116-.069.115-.069.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.107-.085.11-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.081-.12.003-.005.003-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.005.003-.004.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.002-.005.003-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.001-.006.042-.138.001-.005.002-.005.04-.14v-.005l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.142.001-.005.001-.005.031-.141.001-.006.002-.005.029-.142v-.005l.002-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022zM6.841 23.019l-.16.024-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.109.04.048.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.105.004.004.004.004.103.105.004.004.004.003.105.104.003.004.004.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.004.003.005.004.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.002.126.073.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.067.005.003.004.002.13.066.004.002.005.003.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.002.133.057.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.16-.015.156-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.159-.061-.149-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.08-.11-.08-.109-.081-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006zm15.063 2.701l-.16.014-.156.044-.12.057-.06.034-.12.066-.117.064-.118.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.035-.13.036-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021.005-.001h.006l.143-.023.006-.001h.005l.143-.025h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.037h.005l.005-.002.14-.038.005-.002h.005l.14-.04.005-.002.005-.001.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.057.005-.002.005-.002.132-.057.005-.003.005-.002.132-.06.005-.001.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.003.005-.002.128-.066.005-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.003.065-.037.132-.093.112-.115.089-.135.062-.149.034-.157.003-.161-.026-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.046-.16-.016zM6.33 27.127l-.16.023-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.004.003.005.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.002.162.088.005.003.004.002.164.086.005.003.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.168.076.005.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.06.005.003.005.001.175.06.005.001.005.002.176.057.005.001.005.002.176.055.006.001.005.002.177.052.005.002.005.001.178.05.005.002.005.002.178.048.006.001.005.002.179.046.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.17-.044-.168-.046-.167-.047-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006zm19.215.087l-.16.01-.157.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.158.073-.157.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.047-.17.046-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.007.133-.016.115-.024.005-.001.005-.001.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002.005-.001.18-.046.004-.002h.005l.179-.05h.005l.005-.002.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.004-.002.005-.002.172-.068.005-.002.005-.002.171-.07.005-.001.005-.002.17-.072.005-.002.004-.002.17-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.003.167-.08.004-.002.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.003.163-.086.005-.002.005-.003.162-.088.005-.002.005-.003.161-.09.005-.002.004-.003.16-.092.005-.003.005-.002.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.003.155-.101.005-.003.004-.003.154-.104.004-.003.004-.003.153-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.112.004-.003.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02z\"\n}));\n\nfunction _extends$N() { return _extends$N = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$N.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$N({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.012 9.222c-1.673 4.657-2.735 9.508-4.409 14.164 1.536-1.526 2.874-3.236 4.41-4.762l4.408 4.762c-1.497-4.712-2.911-9.451-4.409-14.164zm.032 2.93c.823 2.588 1.599 5.19 2.421 7.777l-2.42-2.614c-.683.598-2.454 2.886-2.34 2.39.871-2.489 1.448-5.07 2.34-7.552zM16.012.312c-1.448.02-2.93.157-4.302.628-.852.447-.255 1.863.66 1.574 2.255-.608 4.648-.607 6.922-.108.934.075 1.228-1.376.338-1.67C18.451.44 17.227.317 16.012.311zm9.012 2.934c-.913-.104-1.272 1.258-.454 1.648 1.834 1.36 3.293 3.185 4.31 5.22.526.776 1.842.098 1.515-.78a15.522 15.522 0 00-5.06-6.006c-.1-.044-.203-.07-.31-.082zM6.65 3.59c-.762.089-1.24.809-1.805 1.267C3.38 6.295 2.163 8.007 1.37 9.905c-.266.898 1.094 1.484 1.564.675a14.825 14.825 0 014.327-5.56c.476-.515.09-1.419-.612-1.431zm9.362.007c-.698.066-1.689-.16-2.033.635-.282.733.535 1.358 1.217 1.125 1.806-.147 3.63.203 5.293.907.902.255 1.472-1.112.656-1.573-1.6-.735-3.374-1.089-5.133-1.094zm-5.479 1.365c-.835.15-1.517.76-2.21 1.226-1.203.94-2.318 2.061-3.057 3.402-.33.904 1.063 1.552 1.547.723 1.045-1.656 2.596-2.925 4.285-3.873.545-.499.171-1.463-.565-1.478zm13.903 2.115c-.875-.07-1.22 1.173-.501 1.627 1.325 1.34 2.188 3.062 2.748 4.84.468.84 1.869.21 1.557-.699-.604-2.118-1.751-4.097-3.351-5.615a.93.93 0 00-.453-.153zM4.467 13.132c-.822-.07-.996.826-1.046 1.455-.256 1.93-.094 3.933.562 5.769.406.844 1.807.365 1.612-.551a11.498 11.498 0 01-.334-5.808.874.874 0 00-.794-.865zm26.687 1.6c-.746-.037-1.014.785-.879 1.395.043 2.393-.57 4.771-1.66 6.894-.31.884 1.02 1.536 1.53.75a15.632 15.632 0 001.821-8.372.876.876 0 00-.812-.667zm-30.197.571c-.782-.073-1.044.775-.933 1.404.068 2.414.661 4.833 1.809 6.962.534.77 1.842.076 1.505-.798a14.833 14.833 0 01-1.603-6.861.876.876 0 00-.778-.707zm26.787 2.024c-.777-.048-.952.797-1.021 1.392-.354 1.692-1.202 3.231-2.216 4.608-.407.872.925 1.638 1.48.852 1.361-1.733 2.296-3.827 2.582-6.017a.874.874 0 00-.825-.835zM6.857 23.012c-.808.018-1.082 1.122-.47 1.59 1.393 1.607 3.187 2.886 5.194 3.599.91.222 1.43-1.165.598-1.596a11.495 11.495 0 01-4.723-3.396.899.899 0 00-.599-.197zm15.057 2.7c-.81.194-1.504.76-2.325.972-1.203.458-2.5.536-3.758.664-.869.307-.573 1.728.346 1.663 2.201-.034 4.412-.626 6.293-1.778.604-.495.227-1.532-.556-1.521zM6.346 27.118c-.833.008-1.11 1.218-.395 1.617 1.986 1.602 4.358 2.749 6.868 3.226.933.076 1.227-1.376.338-1.67a14.838 14.838 0 01-6.345-3.066.929.929 0 00-.466-.107zm19.208.087c-.766.09-1.241.841-1.922 1.158-1.516.991-3.251 1.58-4.996 2.005-.872.405-.346 1.849.584 1.604 2.543-.526 4.98-1.66 6.963-3.344.47-.52.072-1.42-.63-1.423z\"\n}));\n\nfunction _extends$M() { return _extends$M = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$M.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$M({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M8.742 10.464v11.072h14.516V10.464H8.742zm3.224 1.73h8.066a69569 69569 0 00-4.034 3.22l-4.032-3.22zm9.565 1.018v6.594H10.469v-6.593L16 17.63l5.532-4.419zM16 0h-.005l-.188.001h-.011l-.188.004h-.011l-.187.006h-.011l-.187.008h-.005L15.2.02l-.187.01h-.005l-.005.001-.187.013h-.011L14.62.06h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.185.027h-.005l-.005.001-.184.029h-.005l-.005.001-.183.031-.006.001-.005.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003L16 1.73h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.176.027.17.03.174.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.087-.135.061-.15.032-.158.002-.16-.027-.16-.057-.15L20 .714l-.108-.12-.128-.097-.145-.073-.128-.038-.158-.035-.005-.001-.005-.001L19.14.31h-.005l-.005-.002-.182-.035h-.006l-.005-.002-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.006-.001-.183-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.12 17.783.1l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.06h-.005L17.38.06l-.187-.015h-.005l-.005-.001-.187-.013h-.011L16.8.02h-.011L16.6.01h-.011l-.187-.006h-.011L16.204 0h-.011L16.005 0H16zm9.015 2.935l-.16.004-.158.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.126.125.124.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.084.152.084.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.16-.016.155-.046.144-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.003-.005-.002-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.003-.005-.101-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.005-.003-.004-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.004-.004-.003-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.004-.004-.132-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027zM6.634 3.28l-.161.008-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003-.004.004-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.004-.003.005-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.004-.003.005-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023zM16 3.286h-.005l-.148.001h-.01l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.047.12.048.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.139-.107-.12-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.006-.002-.005-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.142-.031-.005-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.002-.143-.025-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01l-.147-.005h-.011l-.147-.003h-.011l-.147-.001H16zm-5.482 1.366l-.16.008-.157.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.005.003-.004.004-.11.096-.004.004-.004.003-.11.098-.003.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.004.004-.003.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.004-.086.118-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.03.15-.057.138-.085.119-.109.082-.105.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022zm13.91 2.116l-.162.008-.157.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.025.159.055.152.082.138.086.103.09.09.094.098.092.099.093.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.114.068.118.067.115.065.118.064.117.062.117.061.121.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.048.127.047.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.085.137.11.119.129.096.145.07.155.043.16.013.161-.017.154-.046.144-.075.126-.1.106-.12.082-.14.055-.151.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.06-.132-.001-.005-.002-.004-.061-.132-.003-.004-.002-.005-.063-.13-.002-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.074-.125-.002-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.081-.12-.003-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.118-.003-.004-.004-.004-.087-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.094-.113-.003-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.11-.004-.003-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023zM4.45 12.826l-.161.002-.158.032-.15.06-.135.088-.118.11-.094.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.005-.019.145v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.005l-.001.006-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.005.033.142v.005l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.104.102-.125.076-.142.049-.153.02-.16-.011-.161-.031-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.133-.024-.133-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.133.01-.138.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029zm26.698 1.601l-.161.01-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.025.175-.026.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.16-.062.165-.062.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.079.158-.08.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.119.13.097.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.005.002-.004.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.171.001-.005.002-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.181.001-.005.001-.005.037-.182.002-.005v-.005l.036-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187v-.011l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02zM.938 15L.777 15l-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.004.074.17.002.005.002.004.076.169.002.004.002.005.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158L3.1 22.1l-.074-.16-.071-.157-.07-.16-.068-.16-.067-.165-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178L1.73 16v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057L.938 15zm26.798 2.024l-.16.007-.157.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.133-.026.133-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.063.119-.062.116-.067.119-.066.116-.069.115-.069.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.107-.085.11-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.081-.12.003-.005.003-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.005.003-.004.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.002-.005.003-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.001-.006.042-.138.001-.005.002-.005.04-.14V19.4l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.142.001-.005.001-.005.031-.141.001-.006.002-.005.029-.142v-.005l.002-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022zM6.841 22.71l-.16.024-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.109.04.048.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.105.004.004.004.004.103.105.004.004.004.003.105.104.003.004.004.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.004.003.005.004.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.002.126.073.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.067.005.003.004.002.13.066.004.002.005.003.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.002.133.057.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.16-.015.156-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.159-.061-.149-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.08-.11-.08-.109-.081-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006zm15.063 2.701l-.16.014-.156.044-.12.057-.06.034-.12.066-.117.064-.118.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.035-.13.036-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021.005-.001h.006l.143-.023.006-.001h.005l.143-.025h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.037h.005l.005-.002.14-.038.005-.002h.005l.14-.04.005-.002.005-.001.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.057.005-.002.005-.002.132-.057.005-.003.005-.002.132-.06.005-.001.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.003.005-.002.128-.066.005-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.003.065-.037.132-.093.112-.115.089-.135.062-.149.034-.157.003-.161-.026-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.046-.16-.016zM6.33 26.818l-.16.023-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.004.003.005.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.002.162.088.005.003.004.002.164.086.005.003.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.168.076.005.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.06.005.003.005.001.175.06.005.001.005.002.176.057.005.001.005.002.176.055.006.001.005.002.177.052.005.002.005.001.178.05.005.002.005.002.178.048.006.001.005.002.179.046.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.17-.044-.168-.046-.167-.047-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006zm19.215.087l-.16.01-.157.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.158.073-.157.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.047-.17.046-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.007.133-.016.115-.024.005-.001.005-.001.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002.005-.001.18-.046.004-.002h.005l.179-.05h.005l.005-.002.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.004-.002.005-.002.172-.068.005-.002.005-.002.171-.07.005-.001.005-.002.17-.072.005-.002.004-.002.17-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.003.167-.08.004-.002.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.003.163-.086.005-.002.005-.003.162-.088.005-.002.005-.003.161-.09.005-.002.004-.003.16-.092.005-.003.005-.002.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.003.155-.101.005-.003.004-.003.154-.104.004-.003.004-.003.153-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.112.004-.003.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02z\"\n}));\n\nfunction _extends$L() { return _extends$L = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$L.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$L({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M23.637 13.902l-7.625-5.535-7.624 5.535 2.912 8.956h9.425l2.912-8.956zm-1.017.33l-2.524 7.762H11.93l-2.524-7.762 6.607-4.796 6.608 4.796zM16.012.311c-1.448.02-2.93.157-4.302.628-.852.447-.255 1.863.66 1.574 2.255-.608 4.648-.607 6.922-.108.934.075 1.228-1.376.338-1.67C18.451.44 17.227.317 16.012.311zm9.012 2.934c-.913-.104-1.272 1.258-.454 1.648 1.834 1.36 3.293 3.185 4.31 5.22.526.776 1.842.098 1.515-.78a15.522 15.522 0 00-5.06-6.006c-.1-.044-.203-.07-.31-.082zM6.65 3.59c-.762.089-1.24.809-1.805 1.267C3.38 6.295 2.163 8.007 1.37 9.905c-.266.898 1.094 1.484 1.564.675a14.825 14.825 0 014.327-5.56c.476-.515.09-1.419-.612-1.431zm9.362.007c-.698.066-1.689-.16-2.033.635-.282.733.535 1.358 1.217 1.125 1.806-.147 3.63.203 5.293.907.902.255 1.472-1.112.656-1.573-1.6-.735-3.374-1.089-5.133-1.094zm-5.479 1.365c-.835.15-1.517.76-2.21 1.226-1.203.94-2.318 2.061-3.057 3.402-.33.904 1.063 1.552 1.547.723 1.045-1.656 2.596-2.925 4.285-3.873.545-.499.171-1.463-.565-1.478zm13.903 2.115c-.875-.07-1.22 1.173-.501 1.627 1.325 1.34 2.188 3.062 2.748 4.84.468.84 1.869.21 1.557-.699-.604-2.118-1.751-4.097-3.351-5.615a.93.93 0 00-.453-.153zM4.467 13.132c-.822-.07-.996.826-1.046 1.455-.256 1.93-.094 3.933.562 5.769.406.844 1.807.365 1.612-.551a11.498 11.498 0 01-.334-5.808.874.874 0 00-.794-.865zm26.687 1.6c-.746-.037-1.014.785-.879 1.395.043 2.393-.57 4.771-1.66 6.894-.31.884 1.02 1.536 1.53.75a15.632 15.632 0 001.821-8.372.876.876 0 00-.812-.667zm-30.197.571c-.782-.073-1.044.775-.933 1.404.068 2.414.661 4.833 1.809 6.962.534.77 1.842.076 1.505-.798a14.833 14.833 0 01-1.603-6.861.876.876 0 00-.778-.707zm26.787 2.024c-.777-.048-.952.797-1.021 1.392-.354 1.692-1.202 3.231-2.216 4.608-.407.872.925 1.638 1.48.852 1.361-1.733 2.296-3.827 2.582-6.017a.874.874 0 00-.825-.835zM6.857 23.012c-.808.018-1.082 1.122-.47 1.59 1.393 1.607 3.187 2.886 5.194 3.599.91.222 1.43-1.165.598-1.596a11.495 11.495 0 01-4.723-3.396.899.899 0 00-.599-.197zm15.057 2.7c-.81.194-1.504.76-2.325.972-1.203.458-2.5.536-3.758.664-.869.307-.573 1.728.346 1.663 2.201-.034 4.412-.626 6.293-1.778.604-.495.227-1.532-.556-1.521zM6.346 27.118c-.833.008-1.11 1.218-.395 1.617 1.986 1.602 4.358 2.749 6.868 3.226.933.076 1.227-1.376.338-1.67a14.838 14.838 0 01-6.345-3.066.929.929 0 00-.466-.107zm19.208.087c-.766.09-1.241.841-1.922 1.158-1.516.991-3.251 1.58-4.996 2.005-.872.405-.346 1.849.584 1.604 2.543-.526 4.98-1.66 6.963-3.344.47-.52.072-1.42-.63-1.423z\"\n}));\n\nfunction _extends$K() { return _extends$K = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$K.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingParallelIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$K({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M13.51 9.081v4.428H9.08v4.982h4.428v4.428h4.982V18.49h4.428v-4.982H18.49V9.081h-4.982zm.83.83h3.32v4.428h4.429v3.322H17.66v4.428h-3.32v-4.454H9.91v-3.296h4.428V9.911zM16 0h-.005l-.188.001h-.011l-.188.004h-.011l-.187.006h-.011l-.187.008h-.005L15.2.02l-.187.01h-.005l-.005.001-.187.013h-.011L14.62.06h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.185.027h-.005l-.005.001-.184.029h-.005l-.005.001-.183.031-.006.001-.005.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003L16 1.73h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.176.027.17.03.174.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.087-.135.061-.15.032-.158.002-.16-.027-.16-.057-.15L20 .714l-.108-.12-.128-.097-.145-.073-.128-.038-.158-.035-.005-.001-.005-.001L19.14.31h-.005l-.005-.002-.182-.035h-.006l-.005-.002-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.006-.001-.183-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.12 17.783.1l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.06h-.005L17.38.06l-.187-.015h-.005l-.005-.001-.187-.013h-.011L16.8.02h-.011L16.6.01h-.011l-.187-.006h-.011L16.204 0h-.011L16.005 0H16zm9.015 2.935l-.16.004-.158.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.126.125.124.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.084.152.084.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.16-.016.155-.046.144-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.003-.005-.002-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.003-.005-.101-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.005-.003-.004-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.004-.004-.003-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.004-.004-.132-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027zM6.634 3.28l-.161.008-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003-.004.004-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.004-.003.005-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.004-.003.005-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023zM16 3.286h-.005l-.148.001h-.01l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.047.12.048.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.139-.107-.12-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.006-.002-.005-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.142-.031-.005-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.002-.143-.025-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01l-.147-.005h-.011l-.147-.003h-.011l-.147-.001H16zm-5.482 1.366l-.16.008-.157.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.005.003-.004.004-.11.096-.004.004-.004.003-.11.098-.003.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.004.004-.003.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.004-.086.118-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.03.15-.057.138-.085.119-.109.082-.105.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022zm13.91 2.116l-.162.008-.157.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.025.159.055.152.082.138.086.103.09.09.094.098.092.099.093.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.114.068.118.067.115.065.118.064.117.062.117.061.121.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.048.127.047.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.085.137.11.119.129.096.145.07.155.043.16.013.161-.017.154-.046.144-.075.126-.1.106-.12.082-.14.055-.151.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.06-.132-.001-.005-.002-.004-.061-.132-.003-.004-.002-.005-.063-.13-.002-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.074-.125-.002-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.081-.12-.003-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.118-.003-.004-.004-.004-.087-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.094-.113-.003-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.11-.004-.003-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023zM4.45 12.826l-.161.002-.158.032-.15.06-.135.088-.118.11-.094.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.005-.019.145v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.005l-.001.006-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.005.033.142v.005l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.104.102-.125.076-.142.049-.153.02-.16-.011-.161-.031-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.133-.024-.133-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.133.01-.138.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029zm26.698 1.601l-.161.01-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.025.175-.026.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.16-.062.165-.062.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.079.158-.08.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.119.13.097.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.005.002-.004.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.171.001-.005.002-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.181.001-.005.001-.005.037-.182.002-.005v-.005l.036-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187v-.011l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02zM.938 15L.777 15l-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.004.074.17.002.005.002.004.076.169.002.004.002.005.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158L3.1 22.1l-.074-.16-.071-.157-.07-.16-.068-.16-.067-.165-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178L1.73 16v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057L.938 15zm26.798 2.024l-.16.007-.157.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.133-.026.133-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.063.119-.062.116-.067.119-.066.116-.069.115-.069.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.107-.085.11-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.081-.12.003-.005.003-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.005.003-.004.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.002-.005.003-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.001-.006.042-.138.001-.005.002-.005.04-.14V19.4l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.142.001-.005.001-.005.031-.141.001-.006.002-.005.029-.142v-.005l.002-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022zM6.841 22.71l-.16.024-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.109.04.048.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.105.004.004.004.004.103.105.004.004.004.003.105.104.003.004.004.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.004.003.005.004.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.002.126.073.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.067.005.003.004.002.13.066.004.002.005.003.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.002.133.057.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.16-.015.156-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.159-.061-.149-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.08-.11-.08-.109-.081-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006zm15.063 2.701l-.16.014-.156.044-.12.057-.06.034-.12.066-.117.064-.118.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.035-.13.036-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021.005-.001h.006l.143-.023.006-.001h.005l.143-.025h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.037h.005l.005-.002.14-.038.005-.002h.005l.14-.04.005-.002.005-.001.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.057.005-.002.005-.002.132-.057.005-.003.005-.002.132-.06.005-.001.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.003.005-.002.128-.066.005-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.003.065-.037.132-.093.112-.115.089-.135.062-.149.034-.157.003-.161-.026-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.046-.16-.016zM6.33 26.818l-.16.023-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.004.003.005.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.002.162.088.005.003.004.002.164.086.005.003.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.168.076.005.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.06.005.003.005.001.175.06.005.001.005.002.176.057.005.001.005.002.176.055.006.001.005.002.177.052.005.002.005.001.178.05.005.002.005.002.178.048.006.001.005.002.179.046.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.17-.044-.168-.046-.167-.047-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006zm19.215.087l-.16.01-.157.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.158.073-.157.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.047-.17.046-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.007.133-.016.115-.024.005-.001.005-.001.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002.005-.001.18-.046.004-.002h.005l.179-.05h.005l.005-.002.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.004-.002.005-.002.172-.068.005-.002.005-.002.171-.07.005-.001.005-.002.17-.072.005-.002.004-.002.17-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.003.167-.08.004-.002.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.003.163-.086.005-.002.005-.003.162-.088.005-.002.005-.003.161-.09.005-.002.004-.003.16-.092.005-.003.005-.002.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.003.155-.101.005-.003.004-.003.154-.104.004-.003.004-.003.153-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.112.004-.003.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02z\",\n opacity: \".98\"\n}));\n\nfunction _extends$J() { return _extends$J = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$J.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$J({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.012 8.816L9.21 21.026h13.606l-6.803-12.21zm0 1.776l5.332 9.57H10.681l5.331-9.57zm0-10.281c-1.448.02-2.93.157-4.302.628-.852.447-.255 1.863.66 1.574 2.255-.608 4.648-.607 6.922-.108.934.075 1.228-1.376.338-1.67C18.451.44 17.227.317 16.012.311zm9.012 2.934c-.913-.104-1.272 1.258-.454 1.648 1.834 1.36 3.293 3.185 4.31 5.22.526.776 1.842.098 1.515-.78a15.522 15.522 0 00-5.06-6.006c-.1-.044-.203-.07-.31-.082zM6.65 3.59c-.762.089-1.24.809-1.805 1.267C3.38 6.295 2.163 8.007 1.37 9.905c-.266.898 1.094 1.484 1.564.675a14.825 14.825 0 014.327-5.56c.476-.515.09-1.419-.612-1.431zm9.362.007c-.698.066-1.689-.16-2.033.635-.282.733.535 1.358 1.217 1.125 1.806-.147 3.63.203 5.293.907.902.255 1.472-1.112.656-1.573-1.6-.735-3.374-1.089-5.133-1.094zm-5.479 1.365c-.835.15-1.517.76-2.21 1.226-1.203.94-2.318 2.061-3.057 3.402-.33.904 1.063 1.552 1.547.723 1.045-1.656 2.596-2.925 4.285-3.873.545-.499.171-1.463-.565-1.478zm13.903 2.115c-.875-.07-1.22 1.173-.501 1.627 1.325 1.34 2.188 3.062 2.748 4.84.468.84 1.869.21 1.557-.699-.604-2.118-1.751-4.097-3.351-5.615a.93.93 0 00-.453-.153zM4.467 13.132c-.822-.07-.996.826-1.046 1.455-.256 1.93-.094 3.933.562 5.769.406.844 1.807.365 1.612-.551a11.498 11.498 0 01-.334-5.808.874.874 0 00-.794-.865zm26.687 1.6c-.746-.037-1.014.785-.879 1.395.043 2.393-.57 4.771-1.66 6.894-.31.884 1.02 1.536 1.53.75a15.632 15.632 0 001.821-8.372.876.876 0 00-.812-.667zm-30.197.571c-.782-.073-1.044.775-.933 1.404.068 2.414.661 4.833 1.809 6.962.534.77 1.842.076 1.505-.798a14.833 14.833 0 01-1.603-6.861.876.876 0 00-.778-.707zm26.787 2.024c-.777-.048-.952.797-1.021 1.392-.354 1.692-1.202 3.231-2.216 4.608-.407.872.925 1.638 1.48.852 1.361-1.733 2.296-3.827 2.582-6.017a.874.874 0 00-.825-.835zM6.857 23.012c-.808.018-1.082 1.122-.47 1.59 1.393 1.607 3.187 2.886 5.194 3.599.91.222 1.43-1.165.598-1.596a11.495 11.495 0 01-4.723-3.396.899.899 0 00-.599-.197zm15.057 2.7c-.81.194-1.504.76-2.325.972-1.203.458-2.5.536-3.758.664-.869.307-.573 1.728.346 1.663 2.201-.034 4.412-.626 6.293-1.778.604-.495.227-1.532-.556-1.521zM6.346 27.118c-.833.008-1.11 1.218-.395 1.617 1.986 1.602 4.358 2.749 6.868 3.226.933.076 1.227-1.376.338-1.67a14.838 14.838 0 01-6.345-3.066.929.929 0 00-.466-.107zm19.208.087c-.766.09-1.241.841-1.922 1.158-1.516.991-3.251 1.58-4.996 2.005-.872.405-.346 1.849.584 1.604 2.543-.526 4.98-1.66 6.963-3.344.47-.52.072-1.42-.63-1.423z\"\n}));\n\nfunction _extends$I() { return _extends$I = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$I.apply(null, arguments); }\nvar IntermediateEventCatchNonInterruptingTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$I({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.998 8.406c-3.018-.041-5.92 1.926-7.031 4.727-1.138 2.695-.51 6.012 1.537 8.103 1.99 2.141 5.268 2.93 8.014 1.927 2.878-.98 4.992-3.827 5.068-6.87.153-2.957-1.624-5.88-4.3-7.137a7.552 7.552 0 00-3.288-.75zm0 1.384c2.759-.052 5.373 1.973 6.015 4.655.704 2.578-.482 5.517-2.791 6.867-2.358 1.48-5.682 1.086-7.618-.918-2.043-1.971-2.407-5.381-.84-7.745 1.11-1.763 3.15-2.88 5.234-2.86zm1.962 1.765l-2.074 3.762c-.64.068-.793 1.04-.202 1.3.39.27.696-.18 1.052-.165h3.17v-.865h-3.182l1.993-3.615c-.252-.14-.505-.278-.757-.417zm-1.965-8.268h-.158l-.147.003h-.011l-.147.005h-.011l-.146.007h-.011l-.146.009h-.011l-.146.01h-.005l-.005.001-.146.012h-.011l-.145.014h-.006l-.005.001-.05.006-.158.031-.15.06-.135.088-.117.111-.094.13-.069.147-.04.156-.01.16.019.16.049.154.076.142.102.125.123.105.14.08.152.051.16.023.134-.003.045-.005.135-.013.133-.01.136-.01.135-.007.137-.006.136-.004.136-.003h.274l.136.003.136.004.136.006.136.007.136.01.133.01.135.013.135.014.135.016.134.018.132.018.134.021.133.023.133.024.133.025.13.027.132.03.132.03.129.031.13.034.129.035.129.036.13.04.126.038.128.042.126.042.128.045.127.047.126.048.12.047.127.051.123.052.006.002.147.048.16.021.16-.009.157-.038.147-.067.131-.093.112-.116.089-.135.062-.149.033-.158.004-.16-.027-.16-.055-.151-.083-.138-.107-.121-.127-.099-.118-.063-.004-.001-.005-.003-.005-.002-.133-.056-.005-.002-.005-.002-.134-.054-.004-.002-.005-.002-.135-.053-.005-.002-.005-.002-.135-.051-.005-.002-.005-.002-.135-.05-.005-.001-.005-.002-.137-.048-.005-.001-.005-.002-.137-.046-.005-.002-.005-.002-.137-.044-.005-.002-.005-.001-.138-.043-.005-.002-.006-.001-.138-.042-.005-.001-.005-.002-.14-.04H19.4l-.005-.002-.14-.038-.005-.001-.005-.002-.14-.036-.005-.001-.005-.001-.141-.035-.005-.001-.005-.001-.142-.033-.005-.001-.005-.001-.141-.031-.006-.002h-.005l-.142-.03-.005-.001-.005-.001-.143-.028h-.005l-.005-.001-.143-.026-.006-.001-.005-.001-.143-.024-.005-.001-.006-.001-.143-.022-.006-.001h-.005l-.144-.022h-.005l-.006-.001-.144-.019h-.005l-.006-.001-.144-.017h-.006l-.005-.001-.145-.016h-.011l-.145-.014H17.1l-.005-.001-.146-.012h-.01l-.146-.01-.006-.001h-.005l-.146-.009h-.011l-.147-.006h-.01l-.147-.005h-.011l-.147-.003h-.01l-.148-.001h-.01zM10.357 4.66l-.156.037-.123.053-.06.032-.005.002-.004.003-.128.069-.004.002-.005.003-.126.07-.005.003-.004.002-.126.072-.005.003-.004.003-.125.073-.004.003-.005.003-.124.075-.004.003-.005.002-.123.077-.004.003-.005.003-.122.078-.004.003-.005.003-.121.08-.004.002-.005.003-.12.082-.005.003-.004.003-.12.083-.004.003-.004.003-.118.084-.005.003-.004.003-.118.086-.004.003-.004.003-.117.088-.004.003-.004.003-.116.089-.004.003-.004.004-.114.09-.005.003-.004.003-.113.092-.004.004-.004.003-.113.093-.004.004-.004.003-.111.095-.004.003-.005.004-.11.096-.004.004-.004.003-.109.098-.004.003-.004.004-.108.1-.004.003-.004.003-.107.101-.004.004-.004.003-.106.102-.003.004-.004.004-.105.103-.004.004-.004.004-.103.105-.004.004-.004.003-.102.106-.003.004-.004.004-.1.107-.004.004-.004.004-.099.108-.004.004-.003.004-.098.11-.003.003-.004.004-.096.11-.004.005-.003.004-.095.111-.003.004-.004.004-.093.113-.003.004-.004.004-.092.113-.003.004-.003.005-.09.114-.004.004-.003.004-.089.116-.003.004-.003.004-.088.117-.003.004-.003.005-.086.117-.003.004-.003.005-.084.118-.003.004-.003.005-.083.12-.003.003-.003.005-.082.12-.003.005-.002.004-.068.103-.076.142-.048.154-.018.16.011.161.041.156.07.146.095.13.117.11.136.086.15.06.158.03.162.002.158-.029.15-.058.138-.085.119-.108.082-.106.065-.099.075-.11.077-.113.077-.107.08-.11.08-.108.084-.108.083-.105.086-.106.086-.104.088-.104.089-.101.09-.102.093-.101.093-.099.094-.097.095-.096.098-.097.098-.095.099-.093.1-.092.103-.091.101-.089.104-.088.104-.086.106-.086.106-.083.106-.082.109-.082.108-.079.11-.078.11-.076.112-.076.112-.074.113-.072.113-.071.115-.07.115-.068.118-.067.117-.065.12-.065.054-.029.135-.088.116-.111.094-.132.068-.146.04-.156.009-.161-.02-.16-.05-.153-.078-.142-.102-.125-.123-.103-.141-.079-.153-.051-.16-.022-.16.008zm13.91 2.116l-.158.037-.147.066-.132.092-.113.116-.09.134-.063.148-.034.157-.005.162.026.159.054.152.082.139.086.102.09.09.094.098.093.099.092.1.091.103.089.101.088.104.086.104.086.106.083.105.083.108.08.108.081.11.077.107.077.112.075.111.075.114.072.113.071.113.07.115.068.117.067.115.065.118.064.117.062.118.061.12.059.119.059.122.056.121.054.12.055.125.051.123.051.125.048.123.049.127.046.126.044.125.043.128.042.129.039.126.038.13.022.076.058.15.086.137.109.119.129.096.145.07.155.043.16.013.161-.017.155-.046.143-.074.126-.1.106-.122.082-.138.055-.152.025-.16-.005-.16-.026-.132-.023-.082-.002-.005-.001-.005-.042-.139-.001-.005-.002-.005-.043-.138-.001-.005-.002-.005-.044-.137-.002-.005-.002-.005-.046-.137-.002-.005-.001-.005-.048-.137-.002-.005-.002-.005-.05-.135-.001-.005-.002-.005-.051-.135-.002-.005-.002-.005-.053-.135-.002-.005-.002-.005-.054-.133-.002-.005-.002-.005-.057-.133-.002-.005-.002-.005-.057-.132-.003-.005-.002-.005-.059-.132-.002-.005-.002-.004-.061-.132-.003-.004-.002-.005-.062-.13-.003-.005-.002-.005-.064-.13-.003-.004-.002-.005-.066-.129-.002-.004-.003-.005-.067-.128-.002-.005-.003-.004-.069-.128-.002-.004-.003-.005-.07-.126-.003-.005-.003-.004-.072-.126-.002-.005-.003-.004-.073-.125-.003-.004-.003-.005-.075-.124-.003-.004-.003-.005-.076-.123-.003-.004-.003-.005-.078-.122-.003-.004-.003-.005-.08-.121-.003-.004-.003-.005-.08-.12-.004-.005-.003-.004-.083-.12-.003-.004-.003-.004-.084-.118-.003-.005-.003-.004-.086-.117-.003-.005-.003-.004-.088-.117-.003-.004-.003-.004-.09-.116-.002-.004-.004-.004-.09-.114-.003-.005-.004-.004-.091-.113-.004-.004-.003-.004-.093-.113-.004-.004-.003-.004-.095-.111-.004-.004-.003-.004-.096-.11-.004-.005-.003-.004-.098-.109-.004-.004-.003-.004-.1-.108-.003-.004-.004-.004-.1-.107-.004-.004-.004-.004-.102-.106-.003-.003-.004-.004-.093-.095-.124-.103-.14-.08-.153-.05-.16-.023-.16.008zM4.288 12.828l-.158.032-.15.06-.135.088-.117.11-.095.131-.069.146-.035.129-.026.132v.005l-.002.005-.025.143-.001.005-.001.006-.024.143-.001.005-.001.006-.022.143-.001.006-.001.005-.02.144-.001.005-.001.006-.019.144v.005l-.001.006-.017.144v.006l-.001.005-.016.145v.011l-.014.145v.006l-.001.005-.012.146v.01l-.01.146-.001.006v.005l-.009.146v.011l-.007.146v.011l-.004.147v.011l-.003.147v.01l-.002.148v.01l.001.148v.01l.003.147v.011l.005.147v.01l.007.147v.011l.009.146v.011l.01.146v.01l.013.146v.011l.014.145v.005l.001.006.016.145v.011l.018.144v.006l.001.005.019.144v.006l.001.005.021.144v.005l.002.006.022.143v.006l.002.005.024.143v.005l.002.006.025.143.001.005.001.005.028.143.001.005.001.005.03.142v.005l.002.006.03.141.002.005.001.006.033.14v.006l.002.005.035.14v.006l.002.005.036.14.002.005.001.005.038.14.001.005.002.005.04.14v.005l.002.005.042.138.001.006.002.005.042.138.002.005.002.005.017.054.064.148.09.134.114.114.132.092.148.065.157.037.16.007.16-.023.153-.052.14-.08.123-.103.102-.126.076-.142.049-.153.02-.16-.01-.161-.032-.13-.017-.051-.039-.126-.038-.13-.037-.128-.035-.13-.033-.128-.033-.134-.03-.13-.029-.131-.026-.13-.026-.132-.024-.134-.023-.133-.02-.132-.02-.136-.017-.132-.016-.135-.014-.135-.012-.133-.012-.138-.009-.133-.007-.136-.006-.138-.004-.134-.003-.136v-.274l.003-.136.004-.134.006-.139.007-.136.01-.132.01-.139.013-.132.014-.135.016-.135.017-.132.02-.137.02-.13.023-.134.024-.133.024-.126.016-.16-.014-.161-.044-.155-.072-.145-.098-.128-.12-.108-.137-.084-.15-.057-.16-.029-.16.002zm23.286 4.202l-.156.038-.148.066-.132.092-.113.115-.09.134-.062.148-.03.127-.001.004-.023.134-.024.134-.026.132-.026.13-.03.132-.03.129-.032.134-.033.128-.035.13-.037.128-.038.13-.04.126-.04.128-.044.128-.044.126-.046.126-.048.126-.05.125-.05.125-.051.122-.054.123-.055.122-.056.12-.058.122-.06.12-.061.12-.062.119-.063.116-.067.119-.066.116-.068.115-.07.115-.07.113-.073.113-.074.112-.076.113-.077.112-.077.107-.08.11-.08.108-.085.109-.044.056-.088.135-.06.15-.033.158-.002.16.027.16.057.15.083.138.108.12.128.098.144.072.155.045.16.015.161-.016.155-.044.144-.073.128-.098.09-.099.05-.061.003-.004.003-.005.089-.115.003-.004.003-.005.088-.116.003-.004.003-.005.086-.117.003-.004.003-.005.084-.118.003-.004.003-.005.083-.12.003-.004.003-.004.082-.12.003-.005.002-.004.08-.121.003-.005.003-.004.078-.122.003-.005.003-.004.077-.123.002-.005.003-.004.075-.124.003-.005.003-.004.073-.125.003-.004.003-.005.072-.126.002-.004.003-.005.07-.126.003-.005.002-.005.07-.127.002-.004.002-.005.068-.128.002-.005.002-.004.066-.13.003-.004.002-.005.064-.13.002-.004.003-.005.062-.13.003-.005.002-.005.06-.13.003-.005.002-.005.06-.132.002-.005.002-.005.057-.132.003-.005.002-.005.056-.133.002-.005.002-.005.054-.134.002-.004.002-.005.053-.135.002-.005.002-.005.051-.135.002-.005.002-.005.05-.135.001-.005.002-.005.048-.137.001-.005.002-.005.046-.137.002-.005.002-.005.044-.137.002-.005.002-.005.042-.138.002-.005.002-.006.04-.138.002-.005.002-.005.04-.14V19.4l.002-.005.038-.14.001-.005.002-.005.036-.14.001-.005.001-.005.035-.141.001-.005.001-.005.033-.141.001-.006.001-.005.031-.141.002-.006v-.005l.03-.142.001-.005.001-.005.028-.143v-.005l.002-.005.025-.143.001-.006.001-.005.024-.143.001-.005.001-.006.001-.006.01-.161-.02-.16-.05-.154-.077-.141-.102-.125-.123-.104-.141-.079-.153-.051-.16-.022-.16.007zM6.681 22.734l-.152.053-.14.08-.122.105-.101.126-.076.142-.048.154-.018.16.011.161.041.156.07.146.077.11.04.047.003.004.003.004.095.111.003.004.004.004.096.11.004.005.003.004.098.109.003.004.004.004.1.108.003.004.003.004.101.107.004.004.003.004.102.106.004.003.004.004.103.105.004.004.004.004.105.103.004.004.003.003.106.102.004.004.004.004.107.1.004.004.004.004.108.099.004.003.004.004.11.098.003.003.004.004.11.096.005.004.004.003.11.095.005.003.004.004.113.093.004.003.004.004.113.091.004.004.005.003.114.09.004.004.004.003.116.089.004.003.004.003.117.088.004.003.004.003.118.086.004.003.005.003.118.084.004.003.005.003.119.083.004.003.005.003.12.081.005.003.004.003.121.08.005.003.004.003.122.078.005.003.004.003.123.076.005.003.004.003.124.075.005.003.004.003.125.073.004.003.005.003.126.072.004.002.005.003.126.07.005.003.004.002.128.07.004.002.005.002.128.068.005.002.004.002.13.066.004.003.005.002.13.064.004.002.005.003.13.062.005.002.004.003.132.06.004.003.005.002.132.06.005.002.005.002.132.057.005.002.005.003.133.056.005.002.005.002.133.054.005.002.005.002.13.05.154.045.16.016.161-.015.155-.045.144-.072.128-.098.108-.12.083-.138.057-.15.028-.16-.003-.16-.032-.158-.061-.15-.088-.135-.11-.117-.132-.094-.12-.058-.124-.049-.126-.051-.122-.051-.122-.054-.12-.054-.126-.058-.119-.057-.12-.06-.12-.06-.118-.063-.117-.064-.119-.066-.116-.066-.115-.068-.115-.07-.113-.07-.115-.074-.112-.074-.11-.075-.11-.076-.112-.079-.11-.08-.109-.082-.106-.082-.104-.082-.106-.086-.105-.087-.101-.086-.105-.091-.1-.09-.1-.091-.1-.094-.097-.094-.1-.098-.093-.095-.096-.1-.093-.098-.092-.101-.089-.1-.09-.102-.088-.104-.036-.043-.114-.114-.133-.091-.148-.065-.157-.036-.161-.006-.16.024zm15.063 2.691l-.156.044-.12.057-.06.034-.12.066-.116.064-.119.062-.12.061-.12.06-.118.057-.126.058-.12.054-.122.054-.122.05-.126.052-.125.05-.124.046-.127.047-.125.044-.129.043-.126.04-.13.042-.128.038-.127.036-.13.035-.131.034-.129.031-.132.03-.13.03-.135.027-.133.026-.13.023-.13.022-.137.021-.132.02-.134.017-.132.015-.138.015-.135.013-.133.01-.138.01-.136.007-.134.006-.136.004-.14.003-.16.018-.155.047-.142.076-.127.1-.105.122-.08.14-.054.151-.025.16.006.16.035.158.064.148.09.134.114.114.133.092.147.065.157.036.134.008.145-.002h.011l.147-.005h.01l.147-.007h.011l.146-.009h.011l.146-.01h.005l.005-.001.146-.012h.011l.145-.014h.005l.006-.001.145-.016h.011l.144-.018h.006l.005-.001.144-.02h.011l.144-.021h.005l.006-.002.143-.022h.006l.005-.002.143-.024h.005l.006-.002.143-.026h.005l.005-.002.143-.027.005-.001.005-.001.142-.03h.005l.005-.002.142-.03.005-.002.005-.001.142-.033.005-.001.005-.001.14-.035.006-.001.005-.001.14-.036.005-.002.005-.001.14-.038.005-.001.005-.002.14-.04h.005l.005-.002.138-.042.005-.001.006-.002.138-.043.005-.001.005-.002.137-.044.005-.002.005-.002.137-.046.005-.002.005-.001.137-.048.005-.002.005-.002.135-.05.005-.001.005-.002.135-.051.005-.002.005-.002.135-.053.005-.002.004-.002.134-.054.005-.002.005-.002.133-.056.005-.003.005-.002.132-.057.005-.002.005-.003.132-.059.005-.002.004-.002.131-.061.005-.003.005-.002.13-.062.005-.003.005-.002.13-.064.004-.002.005-.003.129-.066.004-.002.005-.003.128-.067.005-.002.004-.003.127-.069.005-.002.005-.003.126-.07.005-.003.004-.002.065-.038.132-.093.112-.115.089-.135.062-.149.034-.157.004-.161-.027-.16-.055-.15-.082-.14-.107-.12-.127-.1-.144-.073-.154-.045-.16-.017-.161.014zM15.994 0l-.187.001h-.011l-.188.004h-.011l-.187.006h-.011l-.187.008h-.005L15.2.02l-.187.01h-.005l-.005.001-.187.013h-.01L14.62.06h-.01l-.186.018h-.011l-.185.02-.005.001h-.006l-.185.022-.005.001h-.005l-.185.025h-.005l-.005.001-.184.027h-.006l-.005.001-.184.029h-.005l-.005.001-.183.031-.005.001-.006.001-.182.033-.006.001-.005.001-.182.035-.005.001-.005.001-.182.038h-.005l-.005.002-.181.04h-.005l-.005.002-.18.042-.006.001-.005.001-.18.044-.005.002h-.005l-.17.045-.152.054-.139.082-.121.106-.1.127-.074.143-.046.155-.017.16.013.16.043.156.07.145.097.13.119.108.137.085.15.058.159.03.16-.001.133-.023.165-.043.168-.041.171-.04.171-.037.172-.036.17-.033.173-.03.17-.03.177-.027.171-.025.175-.022.175-.02.175-.02.176-.016.175-.014.177-.012.176-.01.177-.007.174-.006.177-.003L16 1.73h.177l.178.004.174.006.177.007.176.01.177.012.175.014.176.017.175.018.175.02.175.023.171.025.177.027.17.03.173.03.17.033.171.036.154.033.16.02.161-.01.156-.04.146-.069.131-.094.111-.117.088-.135.06-.15.032-.158.002-.16-.027-.16-.057-.15L20 .714l-.108-.12-.128-.097-.144-.073-.129-.038-.158-.035-.005-.001-.005-.001L19.14.31h-.005l-.005-.002-.182-.035h-.006l-.005-.002-.182-.033h-.006l-.005-.002-.183-.03-.005-.001-.005-.001-.184-.029h-.005l-.006-.001-.184-.027h-.005l-.005-.001-.185-.024h-.005L17.968.12 17.783.1l-.006-.001h-.005l-.185-.02h-.006l-.005-.001L17.39.06 17.385.06h-.005l-.187-.015h-.005l-.005-.001-.187-.013h-.01L16.799.02h-.011L16.6.01h-.011l-.187-.006h-.011L16.204 0h-.011L16.005 0h-.01zm8.86 2.939l-.157.033-.15.062-.134.09-.116.111-.093.132-.067.147-.038.156-.01.161.022.16.05.153.078.141.103.124.102.087.045.034.142.106.137.105.14.11.136.11.135.112.134.115.134.117.13.115.132.122.128.12.127.122.127.125.123.126.124.128.121.13.118.128.118.132.117.133.113.134.113.136.11.136.109.137.109.142.104.14.103.14.101.142.1.144.099.146.095.145.094.147.093.15.092.15.087.149.087.15.085.152.083.155.08.152.08.155.04.081.084.138.11.119.128.096.145.072.155.043.16.013.161-.016.155-.046.143-.074.127-.099.106-.12.083-.14.055-.151.026-.16-.004-.16-.034-.158-.05-.124-.042-.085-.002-.004-.003-.005-.084-.165-.002-.004-.003-.005-.086-.164-.002-.004-.003-.005-.088-.162-.002-.005-.003-.005-.09-.161-.002-.005-.003-.004-.092-.16-.002-.005-.003-.005-.094-.16-.003-.004-.003-.004-.096-.159-.002-.004-.003-.005-.098-.157-.003-.004-.003-.005-.1-.156-.003-.004-.002-.005-.102-.154-.003-.005-.003-.004-.104-.154-.003-.004-.003-.005-.106-.152-.003-.004-.003-.005-.108-.151-.003-.004-.003-.005-.11-.15-.003-.004-.003-.004-.111-.15-.004-.003-.003-.005-.113-.147-.004-.004-.003-.005-.115-.146-.004-.004-.003-.004-.117-.145-.004-.004-.003-.004-.12-.144-.003-.004-.003-.004-.121-.142-.003-.004-.004-.004-.123-.141-.003-.004-.004-.004-.125-.14-.003-.004-.004-.004-.127-.138-.003-.004-.004-.004-.128-.136-.004-.004-.004-.004-.13-.135-.004-.004-.003-.004-.133-.134-.003-.004-.004-.003-.134-.133-.004-.003-.004-.004-.135-.13-.004-.004-.004-.004-.136-.128-.004-.004-.004-.004-.138-.126-.004-.004-.004-.003-.14-.125-.004-.004-.004-.003-.14-.123-.005-.004-.004-.003-.142-.121-.004-.004-.004-.003-.144-.12-.004-.003-.004-.003-.145-.117-.004-.004-.004-.003-.147-.115-.004-.004-.004-.003-.148-.113-.004-.003-.004-.004-.149-.111-.004-.003-.004-.004-.05-.036-.14-.083-.15-.055-.16-.027-.16.004zm-18.381.348l-.157.037-.147.066-.111.074-.04.032-.005.003-.004.004-.145.117-.004.003-.004.004-.144.119-.004.003-.004.004-.142.12-.004.004-.004.004-.141.123-.004.003-.004.004-.14.125-.004.003-.004.004-.138.126-.004.004-.004.004-.136.128-.004.004-.004.004-.135.13-.004.004-.004.003-.134.133-.004.003-.004.004-.132.134-.003.004-.004.004-.13.135-.004.004-.004.004-.128.136-.004.004-.004.004-.126.138-.004.004-.003.004-.125.14-.004.004-.003.004-.123.14-.004.005-.003.004-.121.142-.004.004-.003.004-.12.144-.003.004-.003.004-.117.145-.004.004-.003.004-.115.146-.004.005-.003.004-.113.147-.003.005-.004.004-.111.149-.003.004-.004.004-.11.15-.002.005-.003.004-.108.151-.003.005-.003.004-.106.152-.003.005-.003.004-.104.154-.003.004-.003.005-.102.154-.003.005-.002.004-.1.156-.003.005-.003.004-.098.157-.003.005-.003.004-.096.159-.002.004-.003.005-.094.16-.003.004-.002.004-.092.16-.003.005-.003.005-.09.161-.002.005-.003.005-.088.162-.002.005-.003.004-.086.164-.002.005-.002.004-.084.165-.003.005-.002.004-.082.166-.002.005-.003.004-.08.167-.002.004-.002.005-.078.168-.002.004-.002.005-.045.1-.053.153-.023.16.007.16.037.157.065.148.092.132.114.114.134.09.148.064.157.035.161.006.16-.025.152-.054.14-.08.121-.106.1-.126.065-.118.043-.095.074-.16.075-.155.077-.157.08-.155.08-.152.083-.155.085-.152.086-.15.088-.149.091-.15.094-.15.094-.147.095-.145.099-.146.1-.144.1-.142.104-.14.104-.14.11-.142.107-.137.11-.136.114-.136.113-.134.117-.133.118-.132.117-.129.122-.13.124-.127.123-.126.127-.125.127-.122.128-.12.132-.122.13-.115.133-.117.135-.115.135-.111.136-.11.037-.03.117-.11.094-.132.068-.146.04-.156.01-.161-.02-.16-.05-.154-.076-.141-.102-.125-.123-.104-.14-.08-.153-.051-.16-.023-.161.008zm24.514 11.15l-.157.04-.146.067-.131.093-.112.117-.088.135-.061.149-.033.157-.005.134.006.14.006.176.003.177.001.178-.001.177-.003.178-.006.177-.007.176-.01.177-.012.176-.015.176-.016.173-.018.175-.02.175-.024.174-.024.175-.027.17-.03.174-.03.173-.033.17-.036.172-.037.17-.04.17-.042.172-.043.168-.045.166-.048.169-.05.167-.052.168-.053.164-.056.166-.058.166-.06.161-.061.164-.063.158-.066.165-.068.16-.07.16-.07.158-.075.159-.074.155-.078.158-.081.158-.06.15-.03.158-.001.161.029.159.058.15.085.137.108.12.13.096.144.07.156.044.16.013.16-.017.155-.046.143-.074.127-.1.107-.12.07-.115.083-.164.003-.005.002-.004.082-.166.002-.005.003-.004.08-.167.002-.005.002-.004.078-.168.002-.004.002-.005.076-.169.002-.004.002-.005.074-.17.002-.004.002-.005.072-.17.002-.005.002-.005.07-.17.002-.006.001-.005.068-.172.002-.004.002-.005.065-.173.002-.005.002-.005.063-.173.002-.005.002-.005.06-.174.003-.005.001-.005.06-.175.001-.005.002-.005.057-.176.001-.005.002-.005.055-.177.001-.005.002-.005.052-.177.002-.005.001-.005.051-.178.001-.005.002-.005.048-.179.002-.005v-.005l.047-.179.001-.005.002-.005.044-.18v-.005l.002-.005.042-.18.001-.006.001-.005.04-.18.001-.006.001-.005.038-.182v-.005l.002-.005.035-.182v-.006l.002-.005.033-.182v-.006l.002-.005.03-.183.001-.005.001-.005.029-.184v-.005l.001-.006.027-.184v-.005l.001-.005.024-.185v-.005l.001-.005.022-.185v-.006l.001-.005.02-.185v-.006l.001-.005.017-.186v-.005l.001-.005.015-.187v-.005l.001-.005.013-.187v-.01l.01-.187.001-.006v-.005l.009-.187v-.011l.006-.187v-.011l.004-.188v-.011l.001-.188v-.01l-.001-.188v-.011l-.004-.188v-.011l-.006-.187v-.011l-.007-.145-.022-.16-.05-.152-.08-.141-.103-.124-.125-.102-.141-.077-.153-.05-.16-.02-.161.009zM.777 15l-.158.032-.15.06-.136.087-.117.11-.095.131-.068.146-.04.156-.012.133-.001.14v.01l.001.188v.011l.004.188v.011l.006.187v.011l.008.187v.011l.011.187v.005l.001.005.013.187v.01l.016.187v.01l.018.186v.011l.02.185.001.005v.006l.022.185.001.005v.005l.025.185v.005l.001.005.027.184v.006l.001.005.029.184v.005l.001.005.031.183.001.005.001.006.033.182.001.005.001.006.035.182.001.005.001.005.038.182v.005l.002.005.04.181v.005l.002.005.042.18.001.006.001.005.044.18.002.005v.005l.047.18.001.004.002.005.048.179.002.005.001.005.05.178.002.005.001.005.053.177.002.005.001.005.055.177.002.005.001.005.057.176.002.005.001.005.06.175.001.005.002.005.061.174.002.005.002.005.063.173.002.005.002.005.065.173.002.005.002.004.067.172.002.005.002.005.07.171.002.005.002.005.072.17.002.005.002.005.074.169.002.005.002.004.076.169.002.005.002.004.078.168.002.004.002.005.08.167.003.004.002.005.082.166.002.004.003.005.02.04.086.136.11.118.13.095.146.07.156.041.16.012.16-.019.155-.048.142-.075.126-.1.105-.123.08-.14.054-.152.024-.16-.006-.16-.036-.158-.051-.123-.018-.034-.078-.158L3.1 22.1l-.074-.16-.071-.156-.07-.162-.068-.16-.067-.164-.062-.158-.062-.164-.059-.161-.058-.166-.056-.166-.053-.164-.052-.168-.05-.167-.048-.17-.045-.165-.043-.168-.043-.172-.039-.17-.037-.17-.036-.172-.033-.17-.03-.173-.03-.174-.027-.17-.025-.175-.022-.174-.021-.175-.018-.175-.017-.173-.014-.176-.012-.176-.01-.177-.007-.176-.006-.177-.003-.178L1.73 16v-.134l-.013-.16-.044-.156-.072-.144-.097-.129-.12-.108-.137-.085-.15-.057L.938 15 .777 15zM6.17 26.842l-.152.052-.14.08-.122.105-.101.126-.076.142-.048.154-.02.16.012.161.041.156.07.146.094.13.096.093.032.026.004.003.004.004.145.117.004.003.004.004.146.115.005.003.004.004.147.113.005.003.004.004.149.111.004.003.004.003.15.11.005.003.004.003.151.108.005.003.004.003.152.106.005.003.004.003.154.104.004.003.005.003.154.102.005.002.004.003.156.1.005.003.004.003.157.098.005.003.004.002.159.096.004.003.005.003.16.094.004.003.004.002.16.092.005.003.005.002.161.09.005.003.005.003.162.088.005.002.004.002.164.087.005.002.004.002.165.084.005.003.004.002.166.082.004.002.005.003.167.08.004.002.005.002.168.078.004.002.005.002.169.076.004.002.005.002.17.074.004.002.005.002.17.072.005.002.005.002.17.07.006.002.005.001.171.068.005.002.005.002.173.065.005.002.005.002.173.063.005.002.005.002.174.061.005.002.005.001.175.06.005.001.005.002.176.057.005.001.005.002.177.055.005.001.005.002.177.052.005.002.005.001.178.051.005.001.005.002.178.048.006.002h.005l.179.047.005.001.005.002.18.044h.005l.005.002.18.042.006.001.005.001.159.035.16.02.16-.01.157-.04.146-.069.13-.094.112-.117.087-.136.06-.149.033-.158.002-.161-.028-.159-.057-.15-.084-.138-.108-.12-.128-.098-.144-.072-.128-.039-.154-.033-.168-.04-.171-.041-.169-.044-.17-.045-.166-.048-.168-.05-.165-.051-.166-.054-.166-.056-.163-.057-.165-.06-.161-.062-.164-.064-.16-.065-.16-.068-.162-.07-.157-.07-.157-.074-.157-.075-.156-.077-.153-.079-.156-.082-.153-.082-.154-.086-.15-.086-.152-.09-.148-.09-.147-.092-.149-.095-.145-.095-.144-.098-.145-.1-.143-.102-.14-.103-.14-.104-.14-.108-.139-.11-.136-.11-.027-.022-.133-.091-.148-.065-.157-.036-.161-.006-.16.024zm19.214.073l-.156.039-.146.067-.11.076-.064.051-.139.11-.14.108-.14.104-.14.103-.143.101-.145.101-.144.098-.145.095-.149.095-.148.093-.147.089-.152.09-.15.086-.154.086-.153.082-.156.082-.153.079-.156.077-.157.075-.157.073-.158.071-.16.07-.16.068-.161.065-.164.064-.161.061-.165.06-.163.058-.166.056-.166.054-.166.051-.167.05-.167.048-.17.045-.168.044-.171.042-.168.039-.17.037-.11.023-.154.047-.143.075-.126.1-.106.122-.081.139-.054.152-.025.16.006.16.035.158.063.148.09.133.114.115.132.092.148.065.157.037.16.008.133-.017.115-.024h.005l.005-.002.181-.04h.005l.005-.002.18-.042.006-.001.005-.001.18-.044.005-.002h.005l.18-.047.004-.001.005-.002.179-.048.005-.002.005-.001.178-.05.005-.002.005-.002.177-.052.005-.002.005-.001.177-.055.005-.002.005-.001.176-.057.005-.002.005-.002.175-.059.005-.001.005-.002.174-.061.005-.002.005-.002.173-.063.005-.002.005-.002.173-.065.005-.002.004-.002.172-.068.005-.001.005-.002.171-.07.005-.002.005-.002.17-.072.005-.002.005-.002.169-.074.005-.002.004-.002.169-.076.004-.002.005-.002.168-.078.004-.002.005-.002.167-.08.004-.003.005-.002.166-.082.004-.002.005-.003.165-.084.004-.002.005-.002.163-.087.005-.002.005-.002.162-.088.005-.003.005-.003.161-.09.005-.002.004-.003.16-.092.005-.002.005-.003.16-.094.004-.003.004-.003.158-.096.005-.002.004-.003.158-.098.004-.003.005-.003.156-.1.004-.003.004-.002.155-.102.005-.003.004-.003.154-.104.004-.003.005-.003.152-.106.004-.003.005-.003.151-.108.004-.003.005-.003.15-.11.004-.003.004-.003.149-.111.004-.004.004-.003.148-.113.004-.004.004-.003.147-.115.004-.004.004-.003.068-.055.116-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.05-.153-.08-.14-.103-.125-.124-.102-.142-.077-.153-.05-.16-.02-.16.009z\"\n}));\n\nfunction _extends$H() { return _extends$H = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$H.apply(null, arguments); }\nvar IntermediateEventCatchParallelMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$H({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.157.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.408 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.215-2.282-2.022-5.3-3.217-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.082 11.082 0 0116 4.975zm-2.15 3.281v5.534H8.213v4.38h5.636v5.534h4.31V18.17h5.639v-4.38h-5.64V8.256h-4.31zm.865.865h2.583v5.534h5.635v2.65h-5.635v5.533h-2.583v-5.534h-5.64v-2.649h5.64V9.121z\"\n}));\n\nfunction _extends$G() { return _extends$G = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$G.apply(null, arguments); }\nvar IntermediateEventCatchSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$G({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm.006 3.521L9.206 20.745h13.598L16.005 8.542zm0 1.775l5.329 9.564H10.677l5.328-9.564z\"\n}));\n\nfunction _extends$F() { return _extends$F = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$F.apply(null, arguments); }\nvar IntermediateEventCatchTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$F({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.97.04h-.127C8.713-.018 2.003 5.334.437 12.286c-1.51 6.123.98 13.005 6.136 16.665 5.125 3.788 12.546 4.105 17.912.623 5.272-3.276 8.33-9.766 7.325-15.916-.904-6.241-5.79-11.7-11.95-13.143A16.082 16.082 0 0015.97.04zm-.181 1.724c.115 0 .23 0 .347.003 6.625-.066 12.823 5.149 13.89 11.69 1.13 5.91-1.908 12.349-7.262 15.138-5.473 3.013-12.866 1.884-17.116-2.726C1.291 21.372.444 13.914 3.802 8.602c2.493-4.112 7.169-6.819 11.987-6.838zm.283 1.554c-.117 0-.234.002-.351.005-6.1 0-11.691 5.049-12.346 11.114-.78 5.684 2.795 11.612 8.218 13.52 5.139 1.943 11.416.101 14.624-4.38 3.461-4.583 3.262-11.538-.596-15.831-2.36-2.747-5.924-4.423-9.549-4.428zm-.078 1.695c.078 0 .156 0 .234.003 5.4 0 10.321 4.556 10.734 9.942.563 5.13-2.958 10.364-7.971 11.678-4.832 1.41-10.457-.935-12.746-5.446-2.463-4.559-1.2-10.795 3.014-13.883a11.072 11.072 0 016.735-2.294zm-.137 3.42c-2.965.02-5.792 1.968-6.884 4.722-1.137 2.693-.509 6.007 1.536 8.096 1.988 2.14 5.263 2.929 8.007 1.926 2.875-.98 4.987-3.824 5.063-6.865.154-2.954-1.622-5.875-4.295-7.13a7.545 7.545 0 00-3.427-.75zm.27 1.381c2.708.013 5.249 2.014 5.88 4.652.704 2.576-.481 5.512-2.788 6.862-2.356 1.478-5.677 1.084-7.611-.918-2.042-1.97-2.405-5.376-.839-7.738 1.11-1.762 3.146-2.877 5.229-2.857h.13zm1.831 1.764l-2.072 3.76c-.64.068-.792 1.039-.202 1.298.39.27.696-.18 1.051-.164h3.168v-.864h-3.18l1.992-3.612-.757-.418z\"\n}));\n\nfunction _extends$E() { return _extends$E = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$E.apply(null, arguments); }\nvar IntermediateEventNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$E({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.848.001C8.113-.093.931 6.281.125 13.983c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.207C29.105 4.938 23.55.48 17.367.06A16.448 16.448 0 0015.848 0v.001zm.293 1.727c7.113-.099 13.662 5.97 14.077 13.08.56 6.299-3.516 12.735-9.582 14.679-5.798 2.004-12.806-.12-16.283-5.237C.717 19.159.874 11.638 5.016 6.876 7.722 3.638 11.902 1.63 16.14 1.728zm-.415 1.555C9.157 3.258 3.256 9.156 3.278 15.729c-.16 5.965 4.365 11.725 10.293 12.737 5.409 1.065 11.37-1.744 13.775-6.753 2.534-4.986 1.386-11.627-2.953-15.251-2.364-2.077-5.512-3.27-8.667-3.18zm.507 1.692c5.82-.026 11.013 5.318 10.79 11.143-.024 5.3-4.313 10.267-9.636 10.803-5.075.667-10.426-2.588-11.885-7.553-1.535-4.744.494-10.46 4.925-12.885a11.072 11.072 0 015.806-1.508z\"\n}));\n\nfunction _extends$D() { return _extends$D = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$D.apply(null, arguments); }\nvar IntermediateEventThrowCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$D({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm-.56 5.772l-7.408 5.231 7.409 5.234v-5.057c2.385 1.687 4.771 3.371 7.157 5.057V10.747l-7.157 5.055v-5.055z\"\n}));\n\nfunction _extends$C() { return _extends$C = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$C.apply(null, arguments); }\nvar IntermediateEventThrowEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$C({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm.006 3.927c-1.672 4.654-2.734 9.502-4.406 14.155 1.534-1.525 2.872-3.234 4.406-4.759l4.406 4.76c-1.496-4.71-2.91-9.446-4.406-14.156z\"\n}));\n\nfunction _extends$B() { return _extends$B = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$B.apply(null, arguments); }\nvar IntermediateEventThrowLinkIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$B({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.049C8.195-.11.935 6.286.125 14.03c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.93 23.445.453 17.201.095c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.22.872 11.725 4.985 6.962c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 5.021c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 5.021zm1.78 4.093v3.555H9.785v6.714h7.994v3.554l5.829-6.911-5.83-6.912z\"\n}));\n\nfunction _extends$A() { return _extends$A = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$A.apply(null, arguments); }\nvar IntermediateEventThrowMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$A({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm-5.91 5.475l6.04 4.901 6.042-4.9H10.088zm-1.341 1.138v9.921h14.514V11.79l-7.132 5.787-7.382-5.99z\"\n}));\n\nfunction _extends$z() { return _extends$z = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$z.apply(null, arguments); }\nvar IntermediateEventThrowMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$z({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm.006 3.073l-7.62 5.532 2.91 8.95h9.42l2.91-8.95-7.62-5.532z\"\n}));\n\nfunction _extends$y() { return _extends$y = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$y.apply(null, arguments); }\nvar IntermediateEventThrowSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$y({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.975.003C8.195-.156.935 6.24.125 13.985c-.855 6.55 2.741 13.46 8.74 16.314 5.666 2.847 13.012 1.99 17.71-2.33 4.745-4.162 6.727-11.243 4.532-17.206C29.09 4.884 23.445.407 17.201.049c-.408-.03-.817-.046-1.226-.046zm-.181 1.724c7.134-.269 13.84 5.68 14.399 12.804.686 6.283-3.267 12.792-9.283 14.862-5.847 2.162-13.025.06-16.557-5.141C.728 19.174.872 11.679 4.985 6.916c2.632-3.171 6.671-5.174 10.809-5.19zm.283 1.553c-6.6-.21-12.671 5.585-12.79 12.185-.292 5.964 4.129 11.817 10.034 12.953 5.47 1.198 11.584-1.613 14.025-6.702 2.525-4.97 1.396-11.585-2.912-15.216-2.282-2.021-5.3-3.216-8.357-3.22zM16 4.975c5.818-.154 11.117 5.082 11.024 10.905.103 5.384-4.23 10.5-9.636 11.043-5.075.667-10.426-2.587-11.885-7.552-1.53-4.73.48-10.428 4.888-12.864A11.083 11.083 0 0116 4.975zm.006 3.52c-2.261 4.07-4.533 8.136-6.798 12.205h13.596L16.005 8.495z\"\n}));\n\nfunction _extends$x() { return _extends$x = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$x.apply(null, arguments); }\nvar LaneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$x({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M0 7v18.62h32V7H0zm1.655 17.056V8.684h28.62v15.372H1.656z\"\n}));\n\nfunction _extends$w() { return _extends$w = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$w.apply(null, arguments); }\nvar ManualTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$w({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm4.43 1.328c-.222.005-.43.09-.606.203-.985.638-4.356 2.977-5.096 3.486-.67.46-1.12 1.153-1.38 1.974-.27.858-.235 1.793-.232 2.576.002.59.016 1.104.17 1.727.22.908.634 1.63 1.23 2.118.597.49 1.363.732 2.23.734 3.038.012 6.078.016 9.119 0 .327-.002.645-.127.848-.37.204-.241.287-.56.291-.914a1.732 1.732 0 00-.097-.625h.327c.335 0 .641-.11.852-.316.21-.206.317-.475.374-.754a1.783 1.783 0 00-.126-1.143 1.18 1.18 0 00.877-.521c.196-.306.257-.666.258-1.025.001-.375-.088-.738-.293-1.033a1.179 1.179 0 00-.958-.512h-.478c.108-.237.156-.505.155-.782-.003-.373-.098-.721-.316-.99a1.21 1.21 0 00-.943-.43c-2.273-.004-4.236.018-6.412.012l-.19-.001c.102-.104.202-.205.312-.314.337-.336.662-.652.83-.869.4-.516.46-1.215.123-1.729-.178-.272-.439-.456-.72-.494a.93.93 0 00-.148-.008zm.029.728l.022.001c.055.008.115.027.209.172.132.201.126.606-.09.884-.079.102-.431.465-.767.8-.337.334-.657.643-.815.836-.153.186-.096.338-.056.435.04.096.085.212.298.263.063.014.066.01.086.012l.066.003c2.429.027 4.986-.004 7.223-.003.194 0 .293.056.379.162.086.105.151.286.153.533 0 .257-.065.467-.155.59-.09.124-.183.182-.37.183-1.706-.001-3.411-.005-5.117-.009v.731c2.23.004 4.461.01 6.692.012.17 0 .265.06.361.2.096.138.164.364.163.615 0 .268-.058.501-.143.634-.085.132-.162.193-.385.195-2.32-.001-4.554-.006-6.688-.003v.73c1.905 0 3.809.003 5.713.001.194.005.316.09.416.26.102.173.151.442.093.728-.04.193-.102.313-.17.38-.067.065-.148.108-.343.108h-5.71l.002.734c1.445 0 2.89-.01 4.334-.001.162 0 .232.041.297.123.064.081.123.238.12.488-.003.244-.061.385-.12.455-.06.07-.127.11-.296.11-3.037.016-6.076.012-9.113 0-.735-.002-1.316-.196-1.77-.568-.454-.372-.793-.935-.986-1.728-.134-.546-.146-.978-.148-1.558-.003-.796-.018-1.664.199-2.354.222-.705.582-1.24 1.096-1.593.75-.515 4.14-2.866 5.079-3.474a.504.504 0 01.241-.087z\"\n}));\n\nfunction _extends$v() { return _extends$v = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$v.apply(null, arguments); }\nvar MessageFlowIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$v({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M4.073 26.607l1.295 1.296L1.325 32l-.662-.633L0 30.735l4.073-4.128zm6.953-7.046l1.296 1.296L1.325 32l7.555-7.656-1.295-1.296 1.455-1.474 1.986-2.013zM32 .06s-2.699 5.189-5.417 10.462l-.326.633c-1.14 2.214-2.265 4.407-3.176 6.2-1.228-1.222-2.449-2.452-3.676-3.675l-3.57 3.618-1.297-1.296 3.541-3.588c-.98-.964-1.932-1.958-2.923-2.91l-.753-.706c2.68-1.258 6.533-3.165 9.95-4.876l.617-.309C28.838 1.673 32 .06 32 .06zm-4.126 4.06l-.015.007-.115.057-.048.024-.115.057L17.7 9.172l5.017 4.948 5.157-10z\"\n}));\n\nfunction _extends$u() { return _extends$u = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$u.apply(null, arguments); }\nvar ParticipantIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$u({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M0 5v22.069h32V5H0zm30.276 1.684v18.82H6.62V6.684h23.655zm-28.62 0h3.31v18.82h-3.31V6.684z\"\n}));\n\nfunction _extends$t() { return _extends$t = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$t.apply(null, arguments); }\nvar ProcessIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$t({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M16.177 0l.137.002c.452.009.9.037 1.342.082.346.036.62.303.68.646l.437 2.536c.055.319.296.57.608.655.986.269 1.923.653 2.796 1.14.28.155.624.145.885-.039l2.083-1.47a.775.775 0 01.937.022c.86.699 1.645 1.484 2.343 2.343.22.27.223.653.023.937l-1.439 2.038a.833.833 0 00-.031.896c.512.889.92 1.846 1.204 2.855a.833.833 0 00.653.601l2.435.42c.342.059.61.333.645.679a15.928 15.928 0 01.08 2.064l-.003.114c-.012.382-.038.76-.077 1.134a.775.775 0 01-.645.68l-2.396.412a.835.835 0 00-.656.61 12.511 12.511 0 01-1.2 2.917.832.832 0 00.034.892l1.396 1.978c.2.284.196.667-.023.936a16.104 16.104 0 01-2.343 2.343.775.775 0 01-.937.023l-1.99-1.404a.833.833 0 00-.88-.026c-.907.516-1.886.922-2.916 1.2a.833.833 0 00-.61.656l-.414 2.396a.775.775 0 01-.679.646 16.096 16.096 0 01-3.312 0 .775.775 0 01-.679-.646l-.423-2.452a.834.834 0 00-.598-.636 12.474 12.474 0 01-1.468-.514 12.49 12.49 0 01-1.417-.68.833.833 0 00-.878.03l-2.026 1.43a.775.775 0 01-.937-.023 16.069 16.069 0 01-2.342-2.342.774.774 0 01-.024-.936l1.402-1.986a.833.833 0 00.032-.896 12.507 12.507 0 01-1.214-2.911.833.833 0 00-.655-.606l-2.386-.412a.775.775 0 01-.646-.678 16.097 16.097 0 010-3.314.775.775 0 01.646-.678l2.386-.412a.833.833 0 00.655-.606 12.507 12.507 0 011.214-2.911.833.833 0 00-.032-.896L3.552 6.853a.774.774 0 01.023-.936 16.091 16.091 0 012.343-2.343.775.775 0 01.937-.023l2.03 1.433c.26.177.6.182.874.028.915-.512 1.88-.9 2.87-1.167a.833.833 0 00.612-.656l.424-2.46a.775.775 0 01.679-.645C14.845.032 15.348.004 15.85 0h.326zM16 6.4c-5.302 0-9.6 4.297-9.6 9.599 0 5.302 4.298 9.6 9.6 9.6s9.6-4.298 9.6-9.6-4.298-9.6-9.6-9.6zm-3 4.283c0-1.425 1.637-2.203 2.715-1.29l5.69 4.815c.794.672.794 1.91 0 2.583l-5.69 4.815c-1.078.913-2.715.134-2.715-1.29z\"\n}));\n\nfunction _extends$s() { return _extends$s = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$s.apply(null, arguments); }\nvar ReceiveTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$s({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zM5.23 7.764v11.577h17.55V7.764H5.23zm1.816.758h13.917l-6.959 4.577-6.958-4.577zm-1.06.21l8.018 5.274 8.018-5.275v9.853H5.987V8.73z\"\n}));\n\nfunction _extends$r() { return _extends$r = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$r.apply(null, arguments); }\nvar ScriptTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$r({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm2.99 3.077l-.077.045-.026.015c-1.09.646-1.84 1.239-2.336 1.818-.496.579-.735 1.162-.742 1.725-.014 1.119.812 1.958 1.544 2.708.732.75 1.385 1.456 1.446 2.041.032.298-.039.598-.364 1.008-.324.408-.911.897-1.85 1.445l-1.388.808h8.56l.101-.059c.996-.58 1.667-1.116 2.094-1.655.429-.54.603-1.107.547-1.638-.11-1.052-.967-1.818-1.688-2.556-.721-.739-1.306-1.436-1.298-2.092.004-.331.132-.7.535-1.171.402-.47 1.08-1.02 2.119-1.636l1.362-.806h-8.54zm.241.867h5.271a6.83 6.83 0 00-1.113 1.01c-.496.58-.736 1.163-.743 1.726-.014 1.119.812 1.958 1.544 2.708.732.75 1.385 1.456 1.446 2.041.032.298-.039.598-.364 1.008-.312.393-.872.862-1.753 1.386H8.728c.367-.286.658-.566.88-.847.43-.54.604-1.107.548-1.638-.11-1.052-.968-1.818-1.688-2.556-.721-.739-1.306-1.435-1.298-2.092.004-.331.132-.7.534-1.171.389-.454 1.04-.984 2.021-1.575zm-1.233 1.48v.4h4.12v-.4h-4.12zm-.154 2.158v.4H12.6v-.4H8.34zm1.931 2.158v.4h4.126v-.4H10.27zm.59 2.158v.4h4.276v-.4h-4.276z\"\n}));\n\nfunction _extends$q() { return _extends$q = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$q.apply(null, arguments); }\nvar SendTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$q({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm-1.38 3.16l8.332 4.717L21.78 8.16H5.114zm.021 1.745v9.309H21.8V9.905l-8.353 4.655-8.31-4.655z\"\n}));\n\nfunction _extends$p() { return _extends$p = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$p.apply(null, arguments); }\nvar ServiceTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$p({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 3C2.916 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.012C28.015 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5zm1.22 1.681V7.84c-.329.093-.63.223-.914.382l-.83-.82-1.554 1.561.83.82c-.16.288-.285.594-.372.911l-1.177.002v2.2l1.189-.004c.109.431.345.819.58 1.165v-1.898l-1.038.004v-.737l1.034-.002.058-.294c.084-.429.252-.838.493-1.203l.165-.25-.727-.718.523-.526.728.719.247-.165c.379-.25.793-.417 1.206-.505l.291-.06-.002-1.01h.75L9.19 8.417H11.16c-.185-.221-.951-.508-1.237-.588L9.93 6.68H7.713zm2.078 2.105l.003 1.158a4.19 4.19 0 00-.915.383l-.83-.821-1.553 1.562.83.82c-.16.288-.286.593-.373.91l-1.176.003v2.2l1.188-.004c.094.326.224.624.383.905l-.85.847 1.57 1.543.847-.843c.29.161.599.286.919.373v1.198c.756.006 1.56.003 2.206.003V17.81a4.19 4.19 0 00.915-.383l.847.835 1.554-1.56-.848-.836c.16-.288.286-.594.373-.912l1.152-.007V12.75l-1.165.007a4.09 4.09 0 00-.382-.905l.805-.807-1.57-1.546-.804.806a4.16 4.16 0 00-.915-.372l.007-1.147H9.792zm.732.73h.751l-.006 1.005.297.058c.43.085.844.252 1.21.492l.25.162.701-.704.528.52-.702.704.169.25c.248.374.412.779.505 1.196l.061.292 1.016-.006v.737l-1.01.006-.058.292c-.085.43-.252.838-.494 1.205l-.165.25.744.733-.523.525-.743-.734-.248.165c-.378.247-.789.418-1.203.503l-.294.058v1.067h-.745v-1.059l-.295-.057a3.395 3.395 0 01-1.21-.492l-.248-.162-.747.743-.528-.52.747-.744-.17-.25a3.546 3.546 0 01-.506-1.196l-.06-.291-1.04.004v-.738l1.034-.002.058-.294c.085-.428.252-.837.493-1.203l.165-.25-.726-.718.522-.526.728.72.248-.166a3.546 3.546 0 011.205-.504l.292-.06-.003-1.01zm.388 2.685a1.65 1.65 0 00-1.645 1.645c0 .904.74 1.645 1.645 1.645a1.65 1.65 0 001.645-1.645 1.65 1.65 0 00-1.645-1.645zm0 .73a.91.91 0 01.915.915.91.91 0 01-.915.914.91.91 0 01-.915-.914.91.91 0 01.915-.915z\"\n}));\n\nfunction _extends$o() { return _extends$o = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$o.apply(null, arguments); }\nvar StartEventCompensationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$o({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm-.566 9.03l-7.415 5.235 7.415 5.238v-5.062c2.386 1.689 4.775 3.375 7.163 5.062V10.761l-7.163 5.058v-5.058zm-.866 1.666v7.13L9.51 15.993l5.052-3.565zm7.166 0v7.137l-5.052-3.568 5.052-3.569z\"\n}));\n\nfunction _extends$n() { return _extends$n = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$n.apply(null, arguments); }\nvar StartEventConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$n({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0C7.174 0 0 7.174 0 16s7.174 16 16 16 16-7.174 16-16S24.826 0 16 0zm0 1.73c7.892 0 14.27 6.378 14.27 14.27 0 7.891-6.379 14.27-14.27 14.27S1.73 23.891 1.73 16C1.73 8.108 8.108 1.73 16 1.73zm-5.362 7.523v13.493h10.724V9.253H10.638zm.863.866h8.995V21.88H11.501V10.12zm.928 1.324v.863h7.139v-.863h-7.139zm0 2.605v.867h7.139v-.867h-7.139zm0 3.01v.864h7.139v-.863h-7.139zm0 2.72v.863h7.139v-.863h-7.139z\"\n}));\n\nfunction _extends$m() { return _extends$m = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$m.apply(null, arguments); }\nvar StartEventErrorIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$m({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.005C9.705-.08 3.643 3.968 1.257 9.78-1.235 15.49.06 22.581 4.42 27.034c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994.005zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626-4.814-3.838-6.538-10.939-4.067-16.57 2.14-5.205 7.515-8.774 13.147-8.708zm6.13 7.45l-3.635 7.37-4.52-5.88c-1.37 4.048-2.738 8.095-4.106 12.143l4.603-5.917 4.748 5.433 2.91-13.149zm-7.754 3.889l4.299 5.449 1.073-2.39-1.028 4.135-4.387-5.16-1.78 2.75 1.823-4.784z\"\n}));\n\nfunction _extends$l() { return _extends$l = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$l.apply(null, arguments); }\nvar StartEventEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$l({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm0 7.183c-1.674 4.658-2.736 9.509-4.41 14.166 1.535-1.526 2.874-3.236 4.41-4.763l4.41 4.763c-1.499-4.713-2.913-9.453-4.41-14.166zm.032 2.931c.822 2.588 1.598 5.19 2.42 7.778l-2.42-2.615c-.683.598-2.455 2.887-2.34 2.39.871-2.489 1.448-5.07 2.34-7.553z\"\n}));\n\nfunction _extends$k() { return _extends$k = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$k.apply(null, arguments); }\nvar StartEventMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$k({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm-7.257 8.732v11.069h14.513v-11.07H8.738zm3.224 1.73h8.064c-1.428.878-2.857 2.807-4.285 3.018l-3.779-3.019zm9.562 1.017v6.593H10.465V13.21l5.528 4.417 5.53-4.418z\"\n}));\n\nfunction _extends$j() { return _extends$j = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$j.apply(null, arguments); }\nvar StartEventMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$j({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.001C9.705-.084 3.643 3.964 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994 0zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626C2.101 23.171.377 16.07 2.848 10.44c2.14-5.205 7.515-8.774 13.147-8.708zm0 6.328l-7.626 5.536c.97 2.986 1.942 5.971 2.913 8.957h9.426l2.912-8.957-7.625-5.536zm0 1.068l6.609 4.798-2.525 7.763H11.91l-2.524-7.763 6.609-4.798z\"\n}));\n\nfunction _extends$i() { return _extends$i = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$i.apply(null, arguments); }\nvar StartEventNonInterruptingConditionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$i({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M10.632 9.189V22.68h10.723V9.189H10.632zm.862.865h8.994v11.76H11.494v-11.76zm.928 1.324v.863h7.138v-.863h-7.138zm0 2.605v.866h7.138v-.866h-7.138zm0 3.01v.863h7.138v-.863h-7.138zm0 2.72v.862h7.138v-.863h-7.138zM16.12 0h-.232l-.22.004h-.012l-.221.006h-.012l-.22.01h-.012l-.22.013h-.012l-.22.016h-.012l-.22.019h-.005l-.006.001-.22.021h-.006l-.005.001-.22.025h-.011l-.22.028h-.005l-.006.002-.219.03h-.005l-.006.001-.218.033-.006.001-.006.001-.217.036-.006.001-.006.001-.217.039-.006.001-.006.001-.216.042-.006.001-.006.001-.215.045-.006.001-.006.002-.215.047-.006.002-.006.001-.214.05-.006.002-.006.002-.115.029-.152.053-.14.081-.122.106-.1.126-.075.143-.047.154-.018.16.012.16.042.156.07.145.095.13.118.11.137.086.15.059.158.03h.161l.132-.022.11-.028.202-.047.203-.046.208-.043.202-.039.206-.037.206-.034.205-.03.208-.03.205-.025.209-.023.208-.02.21-.017.209-.015.207-.011.21-.009.21-.006.207-.003h.21l.21.002.207.005.207.008.212.011.207.014.208.017.209.019.208.022.205.025.206.028.207.03.208.035.205.036.202.039.052.01.16.018.16-.012.156-.042.146-.07.13-.096.109-.119.085-.136.06-.15.03-.159v-.16l-.03-.16-.059-.15-.086-.136-.109-.118-.13-.096-.145-.07-.128-.038-.057-.011-.006-.002h-.006l-.216-.042-.006-.001-.006-.001-.217-.039H18.9l-.006-.002-.217-.035-.006-.001-.006-.001-.218-.032-.006-.001-.006-.001-.218-.03h-.006l-.006-.001-.219-.027h-.011l-.22-.024-.005-.001h-.006l-.22-.021h-.006l-.006-.001-.22-.017-.005-.001h-.006L17.06.03h-.012l-.22-.012h-.012l-.22-.01h-.012l-.22-.005h-.012L16.132 0h-.012zm8.715 2.783l-.157.034-.149.063-.134.089-.116.112-.092.132-.067.147-.038.157-.008.16.021.16.051.153.079.141.103.124.102.087.052.038h.001l.087.064v.001l.082.061.002.001.076.059h.001l.084.065.082.066.002.001.079.063.002.002.077.063.081.067.002.002.077.065.076.065.001.002.08.07.078.07h.002l.075.068.077.072.002.001.073.069.077.073.072.07.002.001.077.076.07.07v.001l.075.076.07.073.002.001.074.079.002.002.069.074.069.075.074.082.07.08.002.001.068.079h.001l.067.079.068.082.065.078.001.002.068.083.067.084.063.081.001.002.067.087.002.002.063.084.001.001.064.087.008.01.008.01.095.12.093.121.09.119.087.119.088.122.086.123.084.12.081.122.001.002.084.126.08.126.08.127.077.126.079.131.074.127.075.131.073.131.07.13.07.133.069.133.045.09.086.137.109.119.13.096.144.07.156.042.16.013.16-.017.155-.047.143-.075.126-.1.106-.121.082-.14.054-.151.025-.16-.005-.16-.035-.158-.05-.124-.048-.095-.002-.004-.002-.004-.073-.14-.002-.005-.002-.004-.074-.14-.002-.004-.002-.004-.076-.14-.002-.003-.002-.004-.077-.139-.003-.004-.002-.004-.078-.138-.003-.004-.002-.003-.08-.137-.002-.004-.003-.004-.081-.136-.002-.004-.003-.004-.083-.136-.002-.003-.002-.004-.085-.135-.002-.004-.003-.003-.085-.134-.003-.004-.002-.004-.087-.132-.003-.004-.003-.004-.088-.132-.003-.003-.002-.004-.09-.13-.003-.005-.003-.003-.091-.13-.003-.004-.002-.004-.093-.129-.003-.003-.003-.004-.094-.128-.003-.004-.003-.003-.095-.127-.003-.004-.003-.004-.097-.125-.003-.004-.003-.004-.09-.114-.06-.082-.003-.003-.002-.003-.069-.091-.002-.004-.002-.003-.07-.09-.003-.003-.002-.003-.07-.09-.003-.003-.002-.003-.071-.09-.002-.003-.003-.002-.072-.089-.002-.003-.002-.003-.073-.088-.002-.003-.002-.002-.074-.087-.002-.003-.002-.003-.074-.086-.003-.003-.002-.003-.074-.086-.003-.002-.002-.003-.075-.085-.003-.003-.002-.002-.076-.084-.002-.003-.003-.003-.076-.083-.002-.003-.003-.003-.077-.082-.002-.003-.003-.002-.077-.082-.003-.003-.003-.002-.078-.081-.002-.003-.003-.003-.078-.08-.003-.002-.003-.003-.079-.08-.002-.002-.003-.002-.08-.08-.002-.002-.003-.002-.08-.078-.003-.003-.003-.002-.08-.077-.003-.003-.003-.002-.082-.077-.002-.002-.003-.002-.082-.076-.003-.002-.002-.003-.083-.075-.003-.002-.002-.003-.084-.074-.002-.002-.003-.002-.084-.074-.003-.002-.002-.002-.085-.073-.002-.002-.003-.003-.085-.071-.003-.003-.002-.002-.086-.07-.003-.003-.002-.002-.086-.07-.003-.003-.003-.002-.086-.07-.003-.002-.003-.002-.087-.069-.002-.002-.003-.002-.088-.068-.002-.002-.003-.002-.088-.067-.003-.003-.003-.002-.088-.066-.003-.002-.003-.002-.089-.066-.003-.002-.003-.002-.057-.042-.14-.082-.15-.055-.16-.026-.16.004zM6.377 3.21l-.157.037-.148.066-.111.074-.007.006-.003.002-.003.002-.086.069-.003.002-.002.002-.086.07-.003.002-.002.002-.086.07-.002.003-.003.002-.085.071-.002.002-.003.003-.084.071-.003.003-.002.002-.084.072-.003.003-.002.002-.083.073-.003.003-.002.002-.083.074-.002.002-.003.003-.082.074-.003.003-.002.002-.081.076-.003.002-.003.002-.08.077-.003.002-.003.003-.08.076-.002.003-.003.002-.08.078-.002.002-.003.003-.079.078-.002.003-.003.002-.078.08-.003.002-.002.002-.078.08-.002.003-.003.002-.077.08-.003.004-.002.002-.077.081-.002.003-.003.003-.076.082-.002.002-.003.003-.075.082-.002.003-.003.003-.074.083-.003.003-.002.003-.074.084-.003.003-.002.002-.074.085-.002.003-.002.003-.073.085-.003.003-.002.003-.072.086-.002.003-.003.003-.071.087-.003.003-.002.002-.07.088-.003.003-.002.003-.07.088-.003.003-.002.003-.07.09-.002.002-.002.003-.069.09-.002.003-.003.003-.068.09-.002.003-.002.003-.067.092-.003.003-.002.003-.067.092-.002.003-.002.003-.066.092-.002.003-.002.004-.066.093-.002.003-.002.003-.065.094-.002.003-.002.004-.064.094-.002.003-.002.004-.063.095-.002.003-.002.003-.063.097-.002.003-.002.003-.046.073-.05.07-.003.002-.002.003-.067.093-.003.003-.002.003-.066.094-.002.003-.002.003-.066.094-.002.003-.002.003-.064.094-.002.004-.002.003-.064.094-.002.004-.002.003-.062.095-.002.003-.002.003-.062.096-.002.003-.002.003-.06.096-.003.003-.002.003-.06.096-.001.004-.002.003-.059.096-.002.004-.002.003-.058.097-.002.003-.001.003-.057.098-.002.003-.002.003-.056.098-.002.003-.002.003-.055.098-.002.004-.001.003-.055.098-.001.004-.002.003-.054.099-.001.003-.002.003-.052.1-.002.002-.002.004-.051.1-.002.002-.002.004-.05.1-.002.003-.002.003-.05.1v.003l-.002.004-.05.1v.003l-.002.004-.048.1-.002.004-.001.003-.047.101-.002.003-.001.004-.013.027-.052.152-.024.16.006.16.037.157.064.148.091.133.114.114.134.09.147.065.157.036.162.006.159-.024.152-.053.14-.08.122-.105.1-.126.066-.117.01-.023.044-.095.045-.095.002-.003.042-.087.048-.097.048-.095v-.001l.048-.092.001-.001.047-.09.05-.093.002-.002.049-.09.052-.092.001-.002.051-.089.001-.002.051-.087.053-.088.001-.002.055-.091.057-.091.057-.09.001-.002.057-.089.055-.083.001-.002.06-.09.06-.088.062-.089.001-.001.06-.084.063-.088.065-.089.017-.023.016-.025.06-.094.059-.09v-.002l.058-.086.057-.086.001-.001.062-.09.062-.088.001-.002.06-.085.002-.002.06-.082.063-.087.064-.084.002-.002.061-.08.065-.084.064-.08v-.001l.067-.083.067-.082.07-.083.069-.08.063-.074.074-.083.068-.077.002-.002.07-.076.07-.075.072-.077.001-.001.067-.07.076-.078.002-.002.07-.07.075-.075.002-.002.072-.07.075-.072.002-.002.073-.069.074-.068.001-.001.08-.073.076-.068.002-.002.072-.063v-.001l.078-.067.079-.068.002-.001.08-.068.002-.002.077-.063.082-.066.001-.001.075-.06.002-.002.006-.004.117-.111.094-.131.068-.146.04-.156.01-.161-.019-.16-.049-.154-.076-.141-.102-.125-.123-.105-.14-.079-.153-.052-.16-.023-.16.007zm24.596 11.088l-.156.04-.146.067-.131.094-.112.117-.087.135-.061.15-.033.157-.004.134.007.142.005.152.004.15.002.149v.153l.001.011v.015l.004.11.002.11v.002l.002.106v.321l-.003.102-.002.106-.004.107-.005.105-.006.106-.006.106-.008.106v.002l-.008.103v.002l-.01.1-.01.105-.01.105-.013.105-.012.099v.002l-.014.108-.014.1-.016.105-.016.103v.002l-.017.099-.018.104-.019.103v.002l-.019.097-.02.104-.022.103v.001l-.022.098-.023.103v.002l-.024.096-.025.103v.002l-.024.096-.027.102v.003l-.026.093v.001l-.029.103v.002l-.03.099-.028.097v.002l-.03.095-.03.096v.001l-.033.1-.031.095v.002l-.035.1v.003l-.034.094v.003l-.035.096v.001l-.034.09v.002l-.038.098-.036.093v.002l-.038.095-.079.194-.08.188-.085.189-.087.19-.09.184-.092.183-.095.184-.05.093-.064.148-.034.158-.005.16.026.16.054.151.082.14.106.12.127.1.143.075.154.046.16.017.161-.013.156-.042.144-.071.13-.096.109-.119.072-.112.053-.099.003-.005.003-.006.102-.195.003-.006.003-.006.098-.196.003-.006.003-.006.096-.197.002-.006.003-.006.093-.2.002-.006.003-.006.09-.2.002-.006.003-.007.086-.202.003-.006.002-.006.084-.203.002-.005.001-.005.04-.102.002-.003.001-.003.04-.103.001-.003.001-.003.04-.103v-.004l.001-.003.039-.103v-.003l.002-.003.037-.104.001-.003.001-.003.037-.104v-.004l.002-.003.035-.104.002-.003v-.004l.035-.104.002-.004v-.003l.034-.105.002-.003v-.003l.034-.105v-.004l.002-.003.032-.106.001-.003.001-.003.031-.106.001-.003.001-.004.031-.106.001-.003.001-.004.03-.106v-.003l.002-.004.028-.107.001-.003.001-.003.028-.107.001-.004.001-.003.027-.107.001-.004v-.003l.027-.108.001-.003v-.004l.026-.108.001-.003v-.004l.025-.108.001-.003v-.004l.025-.108v-.004l.001-.003.023-.109v-.003l.001-.004.022-.109v-.003l.002-.004.02-.109.001-.004v-.003l.02-.11.002-.003v-.004l.02-.11v-.007l.019-.11v-.003l.001-.004.017-.11v-.004l.001-.003.017-.11v-.008l.016-.11v-.004l.001-.004.015-.11v-.008l.015-.111v-.008l.013-.111v-.007l.013-.112v-.007l.011-.112v-.004l.001-.004.01-.112v-.007l.01-.112v-.008l.008-.112v-.008l.007-.113v-.007l.007-.113v-.008l.005-.113v-.007l.005-.114v-.007l.003-.114v-.007l.003-.114v-.129l.001-.114v-.13l-.003-.114v-.008l-.003-.115v-.007l-.003-.102v-.155l-.003-.158v-.01l-.004-.158v-.01l-.006-.158v-.01l-.007-.148-.023-.16-.051-.152-.08-.14-.103-.124-.125-.102-.142-.077-.153-.05-.16-.02-.161.01zm-30.213.66l-.157.034-.149.063-.134.09-.115.113-.092.132-.067.147-.037.156-.009.134.001.11V15.95l.006.22v.012l.01.22v.012l.012.22v.006l.001.006.015.22v.005l.001.006.018.22.001.006v.006l.022.219v.006l.001.006.024.219.001.006v.006l.028.218.001.006v.006l.031.218.001.006.001.006.033.218.001.006.001.005.037.218v.006l.002.005.04.217v.006l.001.006.043.216.001.006.001.006.046.216v.005l.002.006.048.215.002.006.001.006.051.214.002.006v.006l.055.214.002.005.001.006.057.213.002.006.001.005.06.213.002.005.001.006.063.212.002.005.001.006.066.21.002.006.002.006.068.21.002.005.002.005.07.21.003.005.002.005.074.208.002.006.002.005.077.207.002.006.002.005.08.206.002.005.002.006.082.204.002.006.002.005.086.204.002.005.002.006.088.202.002.005.003.006.09.2.003.006.002.005.094.2.002.006.003.005.096.199.002.005.003.005.03.062.086.137.11.118.128.097.145.07.156.043.16.013.16-.017.155-.047.143-.074.127-.1.106-.121.081-.14.055-.15.025-.16-.005-.161-.034-.158-.05-.124-.028-.055-.092-.19-.087-.188-.087-.192-.083-.19-.08-.193-.078-.194-.076-.196-.073-.195-.07-.197-.067-.198-.065-.199-.063-.2-.059-.2-.056-.2-.055-.204-.05-.201-.049-.202-.046-.205-.043-.206-.04-.203-.038-.207-.034-.204-.032-.207-.028-.205-.026-.207-.023-.208-.02-.207-.018-.207-.014-.208-.011-.207-.009-.208-.005-.207-.002-.104-.017-.16-.046-.155-.074-.143-.1-.126-.121-.107-.139-.081-.152-.055-.159-.025-.161.004zm24.585 11.83l-.156.039-.146.068-.11.076-.015.012-.163.129-.166.127-.168.125-.17.124-.17.12-.172.118-.173.115-.176.114-.177.111-.18.11-.178.105-.182.104-.182.101-.184.1-.184.095-.189.095-.186.09-.188.089-.19.086-.19.082-.193.081-.195.078-.191.074-.197.073-.195.07-.196.065-.198.064-.198.061-.2.058-.2.055-.2.052-.2.049-.151.035-.153.05-.141.078-.125.103-.103.124-.078.14-.05.154-.022.16.009.16.038.157.067.147.093.132.116.112.134.089.149.062.158.034.16.003.133-.02.158-.035.006-.002.006-.001.213-.052.006-.002.007-.001.212-.056.006-.001.006-.002.212-.058.006-.002.006-.002.211-.061.006-.002.006-.002.21-.064.006-.002.006-.002.21-.067.005-.002.006-.002.208-.07.006-.002.006-.003.207-.073.006-.002.006-.002.206-.077.006-.002.005-.002.206-.08.005-.001.006-.003.204-.082.006-.002.005-.002.203-.085.006-.003.005-.002.202-.088.006-.002.005-.003.2-.09.006-.003.006-.003.2-.093.005-.003.005-.002.198-.096.006-.003.005-.003.197-.099.005-.002.005-.003.196-.102.005-.002.005-.003.195-.105.005-.002.005-.003.193-.107.005-.003.005-.003.191-.11.005-.003.005-.003.19-.112.005-.003.005-.003.189-.115.005-.003.005-.003.187-.117.005-.003.004-.004.186-.12.005-.003.004-.003.184-.122.005-.003.005-.004.182-.125.004-.003.005-.003.18-.128.005-.003.005-.003.179-.13.004-.003.005-.004.177-.132.004-.004.005-.003.175-.135.005-.003.004-.004.173-.137.005-.003.004-.004.019-.015.115-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.052-.153-.079-.14-.103-.124-.125-.102-.142-.078-.153-.05-.16-.02-.16.01zm-19.17.054l-.153.051-.14.079-.124.103-.103.125-.077.141-.05.153-.02.16.009.161.04.156.067.147.093.131.095.094.047.04.005.004.005.004.17.14.005.004.005.004.172.137.004.004.005.003.086.067.003.002.003.002.087.067.003.002.003.002.088.066.002.003.003.002.089.065.002.002.003.002.09.065.002.002.003.002.09.064.002.002.003.002.09.063.003.002.003.002.09.063.003.002.003.002.092.062.002.002.003.002.092.061.003.002.003.002.092.06.003.003.003.001.093.06.003.002.003.002.093.06.003.001.003.002.094.058.003.002.003.002.095.058.003.001.003.002.095.057.003.002.003.002.095.056.003.002.003.002.096.055.004.002.003.001.096.055.003.002.003.002.098.053.003.002.003.002.097.053.004.002.003.001.098.053.003.001.003.002.099.052.003.001.003.002.1.05.003.002.003.002.1.05.003.002.003.001.1.05h.003l.004.003.1.048.004.001.003.002.101.048.003.001.004.002.101.046.004.002.003.001.102.046.004.002.003.001.103.045.003.002.003.001.103.045.004.001.003.002.104.043.003.001.004.002.104.042.003.002.004.001.104.042.004.001.003.002.105.04.004.002.003.001.106.04.003.002h.004l.106.04.004.001.003.002.107.038.003.001.004.001.107.038.003.001.004.001.107.037.004.001.004.001.108.036.003.001.004.001.108.035.004.001.003.001.11.034.003.001.004.001.109.033.004.002h.003l.11.033h.004l.003.002.11.031.004.001.004.001.084.023.081.028.004.001.003.001.109.037.003.001.004.001.109.036.003.001.004.001.109.035h.003l.004.002.11.033.003.001.003.001.11.033.003.001.004.001.109.031.004.002h.003l.11.031.003.001.004.001.11.03h.003l.003.001.11.029h.004l.003.002.11.027.003.001.004.001.11.027h.003l.004.001.004.001.16.022.16-.008.157-.038.147-.067.132-.092.112-.116.09-.134.062-.149.034-.157.004-.161-.025-.16-.055-.151-.082-.139-.107-.12-.127-.1-.143-.074-.124-.04h-.003l-.104-.025-.103-.026h-.002l-.095-.026h-.001l-.101-.027h-.002l-.1-.028h-.002l-.103-.03-.104-.032-.097-.03h-.002l-.103-.033-.102-.033-.101-.034-.106-.036-.027-.01-.027-.007-.107-.03-.104-.029-.104-.03h-.002l-.097-.03-.102-.032-.102-.032-.102-.034-.103-.035-.096-.034-.1-.036-.101-.037h-.002l-.094-.036-.096-.037-.097-.04h-.002l-.099-.04-.098-.042h-.002l-.092-.04-.097-.043-.095-.043-.097-.044h-.002l-.09-.043-.094-.045-.094-.046-.093-.047-.09-.046-.096-.05-.088-.047-.002-.001-.09-.049-.094-.052-.002-.002-.087-.049-.087-.05h-.002l-.088-.053h-.001l-.09-.055-.086-.052-.002-.001-.089-.055-.084-.054h-.002l-.09-.059h-.001l-.085-.056-.001-.001-.084-.056-.082-.056h-.001l-.086-.06-.082-.058H7.79l-.086-.062-.002-.002-.08-.058-.081-.06h-.001l-.085-.064-.002-.002-.076-.058-.002-.002-.082-.064-.161-.128-.162-.133-.04-.034-.132-.092-.147-.066-.157-.038-.16-.008-.16.022z\"\n}));\n\nfunction _extends$h() { return _extends$h = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$h.apply(null, arguments); }\nvar StartEventNonInterruptingEscalationIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$h({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 9.209c-1.674 4.655-2.735 9.504-4.408 14.16 1.534-1.526 2.873-3.235 4.407-4.761l4.408 4.76c-1.497-4.71-2.91-9.448-4.408-14.16zm.031 2.93c.822 2.586 1.598 5.187 2.42 7.774l-2.42-2.614c-.682.598-2.453 2.886-2.34 2.389.873-2.488 1.45-5.068 2.34-7.55zM16.132.364c-1.51.016-3.055.139-4.492.614-.854.442-.266 1.861.651 1.578 2.266-.58 4.656-.596 6.944-.144.935.063 1.21-1.391.318-1.674-1.118-.26-2.274-.361-3.42-.374zm8.865 2.777c-.931-.1-1.262 1.29-.425 1.666 1.863 1.364 3.222 3.298 4.322 5.296.617.737 1.875-.145 1.398-.979-1.184-2.275-2.808-4.384-4.923-5.866a.863.863 0 00-.372-.117zM6.55 3.564c-.734.078-1.196.762-1.735 1.206C3.552 6.02 2.55 7.511 1.681 9.053c-.31.533-.71 1.33-.03 1.767.615.432 1.282-.132 1.446-.742.796-1.475 1.746-2.89 2.934-4.08.43-.548 1.292-.822 1.34-1.595a.874.874 0 00-.822-.839zm24.582 11.078c-.771-.033-1.004.82-.873 1.437.13 2.395-.471 4.797-1.615 6.897-.33.876.984 1.559 1.512.785a14.276 14.276 0 001.761-8.54.865.865 0 00-.785-.579zm-30.195.666c-.774-.06-1.032.785-.905 1.407.117 2.41.732 4.81 1.858 6.945.528.774 1.84.09 1.51-.786A15.932 15.932 0 011.728 16a.876.876 0 00-.79-.692zm24.57 11.817c-.762.099-1.243.835-1.919 1.16-1.514 1.002-3.237 1.632-4.978 2.092-.864.423-.307 1.855.616 1.591 2.528-.578 4.93-1.75 6.913-3.421.469-.522.07-1.42-.631-1.422zm-19.16.042c-.845.001-1.12 1.228-.395 1.628 1.665 1.401 3.667 2.348 5.76 2.912.618.178 1.482.565 1.893-.177.355-.628-.226-1.297-.87-1.326-1.972-.515-3.912-1.285-5.5-2.594-.26-.213-.522-.472-.888-.443z\"\n}));\n\nfunction _extends$g() { return _extends$g = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$g.apply(null, arguments); }\nvar StartEventNonInterruptingMessageIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$g({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M8.746 10.393v11.064h14.506V10.393H8.746zm3.223 1.728h8.06c-1.428.879-2.856 2.807-4.283 3.018l-3.777-3.018zm9.557 1.018v6.59H10.473v-6.59l5.525 4.416 5.528-4.416zM16.132 0c-1.51.016-3.055.139-4.492.614-.854.442-.266 1.861.651 1.578 2.266-.58 4.656-.596 6.944-.144.935.063 1.21-1.391.318-1.674-1.118-.26-2.274-.361-3.42-.374zm8.865 2.777c-.931-.1-1.262 1.29-.425 1.666 1.863 1.364 3.222 3.298 4.322 5.296.617.737 1.875-.145 1.398-.979-1.184-2.275-2.808-4.384-4.923-5.866a.863.863 0 00-.372-.117zM6.55 3.2c-.734.078-1.196.762-1.735 1.206C3.552 5.656 2.55 7.147 1.681 8.69c-.31.533-.71 1.33-.03 1.767.615.432 1.282-.132 1.446-.742.796-1.475 1.746-2.89 2.934-4.08.43-.548 1.292-.822 1.34-1.595a.874.874 0 00-.822-.839zm24.582 11.078c-.771-.033-1.004.82-.873 1.437.13 2.395-.471 4.797-1.615 6.897-.33.876.984 1.559 1.512.785a14.276 14.276 0 001.761-8.54.865.865 0 00-.785-.579zm-30.195.666c-.774-.06-1.032.785-.905 1.407.117 2.41.732 4.81 1.858 6.945.528.774 1.84.09 1.51-.786a15.932 15.932 0 01-1.672-6.874.876.876 0 00-.79-.692zm24.57 11.817c-.762.099-1.243.835-1.919 1.16-1.514 1.002-3.237 1.632-4.978 2.092-.864.423-.307 1.855.616 1.591 2.528-.578 4.93-1.75 6.913-3.421.469-.522.07-1.42-.631-1.422zm-19.16.042c-.845.001-1.12 1.228-.395 1.628 1.665 1.401 3.667 2.348 5.76 2.912.618.178 1.482.565 1.893-.177.355-.628-.226-1.297-.87-1.326-1.972-.515-3.912-1.285-5.5-2.594-.26-.213-.522-.472-.888-.443z\"\n}));\n\nfunction _extends$f() { return _extends$f = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$f.apply(null, arguments); }\nvar StartEventNonInterruptingMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$f({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M23.621 13.524L16 7.99l-7.622 5.534 2.911 8.952h9.422l2.911-8.952zm-1.016.33l-2.523 7.759h-8.165l-2.524-7.76L16 9.059l6.606 4.796zM16.132 0c-1.51.016-3.055.139-4.492.614-.854.442-.266 1.861.651 1.578 2.266-.58 4.656-.596 6.944-.144.935.063 1.21-1.391.318-1.674-1.118-.26-2.274-.361-3.42-.374zm8.865 2.777c-.931-.1-1.262 1.29-.425 1.666 1.863 1.364 3.222 3.298 4.322 5.296.617.737 1.875-.145 1.398-.979-1.184-2.275-2.808-4.384-4.923-5.866a.863.863 0 00-.372-.117zM6.55 3.2c-.734.078-1.196.762-1.735 1.206C3.552 5.656 2.55 7.147 1.681 8.69c-.31.533-.71 1.33-.03 1.767.615.432 1.282-.132 1.446-.742.796-1.475 1.746-2.89 2.934-4.08.43-.548 1.292-.822 1.34-1.595a.874.874 0 00-.822-.839zm24.582 11.078c-.771-.033-1.004.82-.873 1.437.13 2.395-.471 4.797-1.615 6.897-.33.876.984 1.559 1.512.785a14.276 14.276 0 001.761-8.54.865.865 0 00-.785-.579zm-30.195.666c-.774-.06-1.032.785-.905 1.407.117 2.41.732 4.81 1.858 6.945.528.774 1.84.09 1.51-.786a15.932 15.932 0 01-1.672-6.874.876.876 0 00-.79-.692zm24.57 11.817c-.762.099-1.243.835-1.919 1.16-1.514 1.002-3.237 1.632-4.978 2.092-.864.423-.307 1.855.616 1.591 2.528-.578 4.93-1.75 6.913-3.421.469-.522.07-1.42-.631-1.422zm-19.16.042c-.845.001-1.12 1.228-.395 1.628 1.665 1.401 3.667 2.348 5.76 2.912.618.178 1.482.565 1.893-.177.355-.628-.226-1.297-.87-1.326-1.972-.515-3.912-1.285-5.5-2.594-.26-.213-.522-.472-.888-.443z\"\n}));\n\nfunction _extends$e() { return _extends$e = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$e.apply(null, arguments); }\nvar StartEventNonInterruptingParallelMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$e({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M13.503 9.016v4.428H9.075v4.98h4.428v4.428h4.98v-4.427h4.428v-4.981h-4.427V9.016h-4.981zm.83.83h3.32v4.428h4.428v3.32h-4.428v4.428h-3.32v-4.454H9.905v-3.294h4.428V9.846zM16.12 0h-.232l-.22.004h-.012l-.221.006h-.012l-.22.01h-.012l-.22.013h-.012l-.22.016h-.012l-.22.019h-.005l-.006.001-.22.021h-.006l-.005.001-.22.025h-.011l-.22.028h-.005l-.006.002-.219.03h-.005l-.006.001-.218.033-.006.001-.006.001-.217.036-.006.001-.006.001-.217.039-.006.001-.006.001-.216.042-.006.001-.006.001-.215.045-.006.001-.006.002-.215.047-.006.002-.006.001-.214.05-.006.002-.006.002-.115.029-.152.053-.14.081-.122.106-.1.126-.075.143-.047.154-.018.16.012.16.042.156.07.145.095.13.118.11.137.086.15.059.158.03h.161l.132-.022.11-.028.202-.047.203-.046.208-.043.202-.039.206-.037.206-.034.205-.03.208-.03.205-.025.209-.023.208-.02.21-.017.209-.015.207-.011.21-.009.21-.006.207-.003h.21l.21.002.207.005.207.008.212.011.207.014.208.017.209.019.208.022.205.025.206.028.207.03.208.035.205.036.202.039.052.01.16.018.16-.012.156-.042.146-.07.13-.096.109-.119.085-.136.06-.15.03-.159v-.16l-.03-.16-.059-.15-.086-.136-.109-.118-.13-.096-.145-.07-.128-.038-.057-.011-.006-.002h-.006l-.216-.042-.006-.001-.006-.001-.217-.039H18.9l-.006-.002-.217-.035-.006-.001-.006-.001-.218-.032-.006-.001-.006-.001-.218-.03h-.006l-.006-.001-.219-.027h-.011l-.22-.024-.005-.001h-.006l-.22-.021h-.006l-.006-.001-.22-.017-.005-.001h-.006L17.06.03h-.012l-.22-.012h-.012l-.22-.01h-.012l-.22-.005h-.012L16.132 0h-.012zm8.715 2.783l-.157.034-.149.063-.134.089-.116.112-.092.132-.067.147-.038.157-.008.16.021.16.051.153.079.141.103.124.102.087.052.038h.001l.087.064v.001l.082.061.002.001.076.059h.001l.084.065.082.066.002.001.079.063.002.002.077.063.081.067.002.002.077.065.076.065.001.002.08.07.078.07h.002l.075.068.077.072.002.001.073.069.077.073.072.07.002.001.077.076.07.07v.001l.075.076.07.073.002.001.074.079.002.002.069.074.069.075.074.082.07.08.002.001.068.079h.001l.067.079.068.082.065.078.001.002.068.083.067.084.063.081.001.002.067.087.002.002.063.084.001.001.064.087.008.01.008.01.095.12.093.121.09.119.087.119.088.122.086.123.084.12.081.122.001.002.084.126.08.126.08.127.077.126.079.131.074.127.075.131.073.131.07.13.07.133.069.133.045.09.086.137.109.119.13.096.144.07.156.042.16.013.16-.017.155-.047.143-.075.126-.1.106-.121.082-.14.054-.151.025-.16-.005-.16-.035-.158-.05-.124-.048-.095-.002-.004-.002-.004-.073-.14-.002-.005-.002-.004-.074-.14-.002-.004-.002-.004-.076-.14-.002-.003-.002-.004-.077-.139-.003-.004-.002-.004-.078-.138-.003-.004-.002-.003-.08-.137-.002-.004-.003-.004-.081-.136-.002-.004-.003-.004-.083-.136-.002-.003-.002-.004-.085-.135-.002-.004-.003-.003-.085-.134-.003-.004-.002-.004-.087-.132-.003-.004-.003-.004-.088-.132-.003-.003-.002-.004-.09-.13-.003-.005-.003-.003-.091-.13-.003-.004-.002-.004-.093-.129-.003-.003-.003-.004-.094-.128-.003-.004-.003-.003-.095-.127-.003-.004-.003-.004-.097-.125-.003-.004-.003-.004-.09-.114-.06-.082-.003-.003-.002-.003-.069-.091-.002-.004-.002-.003-.07-.09-.003-.003-.002-.003-.07-.09-.003-.003-.002-.003-.071-.09-.002-.003-.003-.002-.072-.089-.002-.003-.002-.003-.073-.088-.002-.003-.002-.002-.074-.087-.002-.003-.002-.003-.074-.086-.003-.003-.002-.003-.074-.086-.003-.002-.002-.003-.075-.085-.003-.003-.002-.002-.076-.084-.002-.003-.003-.003-.076-.083-.002-.003-.003-.003-.077-.082-.002-.003-.003-.002-.077-.082-.003-.003-.003-.002-.078-.081-.002-.003-.003-.003-.078-.08-.003-.002-.003-.003-.079-.08-.002-.002-.003-.002-.08-.08-.002-.002-.003-.002-.08-.078-.003-.003-.003-.002-.08-.077-.003-.003-.003-.002-.082-.077-.002-.002-.003-.002-.082-.076-.003-.002-.002-.003-.083-.075-.003-.002-.002-.003-.084-.074-.002-.002-.003-.002-.084-.074-.003-.002-.002-.002-.085-.073-.002-.002-.003-.003-.085-.071-.003-.003-.002-.002-.086-.07-.003-.003-.002-.002-.086-.07-.003-.003-.003-.002-.086-.07-.003-.002-.003-.002-.087-.069-.002-.002-.003-.002-.088-.068-.002-.002-.003-.002-.088-.067-.003-.003-.003-.002-.088-.066-.003-.002-.003-.002-.089-.066-.003-.002-.003-.002-.057-.042-.14-.082-.15-.055-.16-.026-.16.004zM6.377 3.21l-.157.037-.148.066-.111.074-.007.006-.003.002-.003.002-.086.069-.003.002-.002.002-.086.07-.003.002-.002.002-.086.07-.002.003-.003.002-.085.071-.002.002-.003.003-.084.071-.003.003-.002.002-.084.072-.003.003-.002.002-.083.073-.003.003-.002.002-.083.074-.002.002-.003.003-.082.074-.003.003-.002.002-.081.076-.003.002-.003.002-.08.077-.003.002-.003.003-.08.076-.002.003-.003.002-.08.078-.002.002-.003.003-.079.078-.002.003-.003.002-.078.08-.003.002-.002.002-.078.08-.002.003-.003.002-.077.08-.003.004-.002.002-.077.081-.002.003-.003.003-.076.082-.002.002-.003.003-.075.082-.002.003-.003.003-.074.083-.003.003-.002.003-.074.084-.003.003-.002.002-.074.085-.002.003-.002.003-.073.085-.003.003-.002.003-.072.086-.002.003-.003.003-.071.087-.003.003-.002.002-.07.088-.003.003-.002.003-.07.088-.003.003-.002.003-.07.09-.002.002-.002.003-.069.09-.002.003-.003.003-.068.09-.002.003-.002.003-.067.092-.003.003-.002.003-.067.092-.002.003-.002.003-.066.092-.002.003-.002.004-.066.093-.002.003-.002.003-.065.094-.002.003-.002.004-.064.094-.002.003-.002.004-.063.095-.002.003-.002.003-.063.097-.002.003-.002.003-.046.073-.05.07-.003.002-.002.003-.067.093-.003.003-.002.003-.066.094-.002.003-.002.003-.066.094-.002.003-.002.003-.064.094-.002.004-.002.003-.064.094-.002.004-.002.003-.062.095-.002.003-.002.003-.062.096-.002.003-.002.003-.06.096-.003.003-.002.003-.06.096-.001.004-.002.003-.059.096-.002.004-.002.003-.058.097-.002.003-.001.003-.057.098-.002.003-.002.003-.056.098-.002.003-.002.003-.055.098-.002.004-.001.003-.055.098-.001.004-.002.003-.054.099-.001.003-.002.003-.052.1-.002.002-.002.004-.051.1-.002.002-.002.004-.05.1-.002.003-.002.003-.05.1v.003l-.002.004-.05.1v.003l-.002.004-.048.1-.002.004-.001.003-.047.101-.002.003-.001.004-.013.027-.052.152-.024.16.006.16.037.157.064.148.091.133.114.114.134.09.147.065.157.036.162.006.159-.024.152-.053.14-.08.122-.105.1-.126.066-.117.01-.023.044-.095.045-.095.002-.003.042-.087.048-.097.048-.095v-.001l.048-.092.001-.001.047-.09.05-.093.002-.002.049-.09.052-.092.001-.002.051-.089.001-.002.051-.087.053-.088.001-.002.055-.091.057-.091.057-.09.001-.002.057-.089.055-.083.001-.002.06-.09.06-.088.062-.089.001-.001.06-.084.063-.088.065-.089.017-.023.016-.025.06-.094.059-.09v-.002l.058-.086.057-.086.001-.001.062-.09.062-.088.001-.002.06-.085.002-.002.06-.082.063-.087.064-.084.002-.002.061-.08.065-.084.064-.08v-.001l.067-.083.067-.082.07-.083.069-.08.063-.074.074-.083.068-.077.002-.002.07-.076.07-.075.072-.077.001-.001.067-.07.076-.078.002-.002.07-.07.075-.075.002-.002.072-.07.075-.072.002-.002.073-.069.074-.068.001-.001.08-.073.076-.068.002-.002.072-.063v-.001l.078-.067.079-.068.002-.001.08-.068.002-.002.077-.063.082-.066.001-.001.075-.06.002-.002.006-.004.117-.111.094-.131.068-.146.04-.156.01-.161-.019-.16-.049-.154-.076-.141-.102-.125-.123-.105-.14-.079-.153-.052-.16-.023-.16.007zm24.596 11.088l-.156.04-.146.067-.131.094-.112.117-.087.135-.061.15-.033.157-.004.134.007.142.005.152.004.15.002.149v.153l.001.011v.015l.004.11.002.11v.002l.002.106v.321l-.003.102-.002.106-.004.107-.005.105-.006.106-.006.106-.008.106v.002l-.008.103v.002l-.01.1-.01.105-.01.105-.013.105-.012.099v.002l-.014.108-.014.1-.016.105-.016.103v.002l-.017.099-.018.104-.019.103v.002l-.019.097-.02.104-.022.103v.001l-.022.098-.023.103v.002l-.024.096-.025.103v.002l-.024.096-.027.102v.003l-.026.093v.001l-.029.103v.002l-.03.099-.028.097v.002l-.03.095-.03.096v.001l-.033.1-.031.095v.002l-.035.1v.003l-.034.094v.003l-.035.096v.001l-.034.09v.002l-.038.098-.036.093v.002l-.038.095-.079.194-.08.188-.085.189-.087.19-.09.184-.092.183-.095.184-.05.093-.064.148-.034.158-.005.16.026.16.054.151.082.14.106.12.127.1.143.075.154.046.16.017.161-.013.156-.042.144-.071.13-.096.109-.119.072-.112.053-.099.003-.005.003-.006.102-.195.003-.006.003-.006.098-.196.003-.006.003-.006.096-.197.002-.006.003-.006.093-.2.002-.006.003-.006.09-.2.002-.006.003-.007.086-.202.003-.006.002-.006.084-.203.002-.005.001-.005.04-.102.002-.003.001-.003.04-.103.001-.003.001-.003.04-.103v-.004l.001-.003.039-.103v-.003l.002-.003.037-.104.001-.003.001-.003.037-.104v-.004l.002-.003.035-.104.002-.003v-.004l.035-.104.002-.004v-.003l.034-.105.002-.003v-.003l.034-.105v-.004l.002-.003.032-.106.001-.003.001-.003.031-.106.001-.003.001-.004.031-.106.001-.003.001-.004.03-.106v-.003l.002-.004.028-.107.001-.003.001-.003.028-.107.001-.004.001-.003.027-.107.001-.004v-.003l.027-.108.001-.003v-.004l.026-.108.001-.003v-.004l.025-.108.001-.003v-.004l.025-.108v-.004l.001-.003.023-.109v-.003l.001-.004.022-.109v-.003l.002-.004.02-.109.001-.004v-.003l.02-.11.002-.003v-.004l.02-.11v-.007l.019-.11v-.003l.001-.004.017-.11v-.004l.001-.003.017-.11v-.008l.016-.11v-.004l.001-.004.015-.11v-.008l.015-.111v-.008l.013-.111v-.007l.013-.112v-.007l.011-.112v-.004l.001-.004.01-.112v-.007l.01-.112v-.008l.008-.112v-.008l.007-.113v-.007l.007-.113v-.008l.005-.113v-.007l.005-.114v-.007l.003-.114v-.007l.003-.114v-.129l.001-.114v-.13l-.003-.114v-.008l-.003-.115v-.007l-.003-.102v-.155l-.003-.158v-.01l-.004-.158v-.01l-.006-.158v-.01l-.007-.148-.023-.16-.051-.152-.08-.14-.103-.124-.125-.102-.142-.077-.153-.05-.16-.02-.161.01zm-30.213.66l-.157.034-.149.063-.134.09-.115.113-.092.132-.067.147-.037.156-.009.134.001.11V15.95l.006.22v.012l.01.22v.012l.012.22v.006l.001.006.015.22v.005l.001.006.018.22.001.006v.006l.022.219v.006l.001.006.024.219.001.006v.006l.028.218.001.006v.006l.031.218.001.006.001.006.033.218.001.006.001.005.037.218v.006l.002.005.04.217v.006l.001.006.043.216.001.006.001.006.046.216v.005l.002.006.048.215.002.006.001.006.051.214.002.006v.006l.055.214.002.005.001.006.057.213.002.006.001.005.06.213.002.005.001.006.063.212.002.005.001.006.066.21.002.006.002.006.068.21.002.005.002.005.07.21.003.005.002.005.074.208.002.006.002.005.077.207.002.006.002.005.08.206.002.005.002.006.082.204.002.006.002.005.086.204.002.005.002.006.088.202.002.005.003.006.09.2.003.006.002.005.094.2.002.006.003.005.096.199.002.005.003.005.03.062.086.137.11.118.128.097.145.07.156.043.16.013.16-.017.155-.047.143-.074.127-.1.106-.121.081-.14.055-.15.025-.16-.005-.161-.034-.158-.05-.124-.028-.055-.092-.19-.087-.188-.087-.192-.083-.19-.08-.193-.078-.194-.076-.196-.073-.195-.07-.197-.067-.198-.065-.199-.063-.2-.059-.2-.056-.2-.055-.204-.05-.201-.049-.202-.046-.205-.043-.206-.04-.203-.038-.207-.034-.204-.032-.207-.028-.205-.026-.207-.023-.208-.02-.207-.018-.207-.014-.208-.011-.207-.009-.208-.005-.207-.002-.104-.017-.16-.046-.155-.074-.143-.1-.126-.121-.107-.139-.081-.152-.055-.159-.025-.161.004zm24.585 11.83l-.156.039-.146.068-.11.076-.015.012-.163.129-.166.127-.168.125-.17.124-.17.12-.172.118-.173.115-.176.114-.177.111-.18.11-.178.105-.182.104-.182.101-.184.1-.184.095-.189.095-.186.09-.188.089-.19.086-.19.082-.193.081-.195.078-.191.074-.197.073-.195.07-.196.065-.198.064-.198.061-.2.058-.2.055-.2.052-.2.049-.151.035-.153.05-.141.078-.125.103-.103.124-.078.14-.05.154-.022.16.009.16.038.157.067.147.093.132.116.112.134.089.149.062.158.034.16.003.133-.02.158-.035.006-.002.006-.001.213-.052.006-.002.007-.001.212-.056.006-.001.006-.002.212-.058.006-.002.006-.002.211-.061.006-.002.006-.002.21-.064.006-.002.006-.002.21-.067.005-.002.006-.002.208-.07.006-.002.006-.003.207-.073.006-.002.006-.002.206-.077.006-.002.005-.002.206-.08.005-.001.006-.003.204-.082.006-.002.005-.002.203-.085.006-.003.005-.002.202-.088.006-.002.005-.003.2-.09.006-.003.006-.003.2-.093.005-.003.005-.002.198-.096.006-.003.005-.003.197-.099.005-.002.005-.003.196-.102.005-.002.005-.003.195-.105.005-.002.005-.003.193-.107.005-.003.005-.003.191-.11.005-.003.005-.003.19-.112.005-.003.005-.003.189-.115.005-.003.005-.003.187-.117.005-.003.004-.004.186-.12.005-.003.004-.003.184-.122.005-.003.005-.004.182-.125.004-.003.005-.003.18-.128.005-.003.005-.003.179-.13.004-.003.005-.004.177-.132.004-.004.005-.003.175-.135.005-.003.004-.004.173-.137.005-.003.004-.004.019-.015.115-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.052-.153-.079-.14-.103-.124-.125-.102-.142-.078-.153-.05-.16-.02-.16.01zm-19.17.054l-.153.051-.14.079-.124.103-.103.125-.077.141-.05.153-.02.16.009.161.04.156.067.147.093.131.095.094.047.04.005.004.005.004.17.14.005.004.005.004.172.137.004.004.005.003.086.067.003.002.003.002.087.067.003.002.003.002.088.066.002.003.003.002.089.065.002.002.003.002.09.065.002.002.003.002.09.064.002.002.003.002.09.063.003.002.003.002.09.063.003.002.003.002.092.062.002.002.003.002.092.061.003.002.003.002.092.06.003.003.003.001.093.06.003.002.003.002.093.06.003.001.003.002.094.058.003.002.003.002.095.058.003.001.003.002.095.057.003.002.003.002.095.056.003.002.003.002.096.055.004.002.003.001.096.055.003.002.003.002.098.053.003.002.003.002.097.053.004.002.003.001.098.053.003.001.003.002.099.052.003.001.003.002.1.05.003.002.003.002.1.05.003.002.003.001.1.05h.003l.004.003.1.048.004.001.003.002.101.048.003.001.004.002.101.046.004.002.003.001.102.046.004.002.003.001.103.045.003.002.003.001.103.045.004.001.003.002.104.043.003.001.004.002.104.042.003.002.004.001.104.042.004.001.003.002.105.04.004.002.003.001.106.04.003.002h.004l.106.04.004.001.003.002.107.038.003.001.004.001.107.038.003.001.004.001.107.037.004.001.004.001.108.036.003.001.004.001.108.035.004.001.003.001.11.034.003.001.004.001.109.033.004.002h.003l.11.033h.004l.003.002.11.031.004.001.004.001.084.023.081.028.004.001.003.001.109.037.003.001.004.001.109.036.003.001.004.001.109.035h.003l.004.002.11.033.003.001.003.001.11.033.003.001.004.001.109.031.004.002h.003l.11.031.003.001.004.001.11.03h.003l.003.001.11.029h.004l.003.002.11.027.003.001.004.001.11.027h.003l.004.001.004.001.16.022.16-.008.157-.038.147-.067.132-.092.112-.116.09-.134.062-.149.034-.157.004-.161-.025-.16-.055-.151-.082-.139-.107-.12-.127-.1-.143-.074-.124-.04h-.003l-.104-.025-.103-.026h-.002l-.095-.026h-.001l-.101-.027h-.002l-.1-.028h-.002l-.103-.03-.104-.032-.097-.03h-.002l-.103-.033-.102-.033-.101-.034-.106-.036-.027-.01-.027-.007-.107-.03-.104-.029-.104-.03h-.002l-.097-.03-.102-.032-.102-.032-.102-.034-.103-.035-.096-.034-.1-.036-.101-.037h-.002l-.094-.036-.096-.037-.097-.04h-.002l-.099-.04-.098-.042h-.002l-.092-.04-.097-.043-.095-.043-.097-.044h-.002l-.09-.043-.094-.045-.094-.046-.093-.047-.09-.046-.096-.05-.088-.047-.002-.001-.09-.049-.094-.052-.002-.002-.087-.049-.087-.05h-.002l-.088-.053h-.001l-.09-.055-.086-.052-.002-.001-.089-.055-.084-.054h-.002l-.09-.059h-.001l-.085-.056-.001-.001-.084-.056-.082-.056h-.001l-.086-.06-.082-.058H7.79l-.086-.062-.002-.002-.08-.058-.081-.06h-.001l-.085-.064-.002-.002-.076-.058-.002-.002-.082-.064-.161-.128-.162-.133-.04-.034-.132-.092-.147-.066-.157-.038-.16-.008-.16.022z\",\n opacity: \".98\"\n}));\n\nfunction _extends$d() { return _extends$d = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$d.apply(null, arguments); }\nvar StartEventNonInterruptingSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$d({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16.007 8.82L9.21 21.022h13.596L16.007 8.82zm0 1.775l5.328 9.563H10.68l5.327-9.563zM16.14.386c-1.571.236-4.195-.284-4.9 1.381.619 1.703 2.745.069 4.085.365 1.421-.13 2.84.2 4.235.259C21.27.784 18.19.344 17 .413a20.456 20.456 0 00-.86-.027zM25 3.162c-2.19.694.401 2.26 1.181 3.094 1.083 1.152 1.954 2.484 2.715 3.864 1.48 1.005 1.845-1.26.81-2.03-1.158-1.897-2.613-3.704-4.513-4.89l-.192-.038zm-18.438.423c-1.793.712-2.909 2.548-4.01 4.061-.773.814-2.211 3.653.005 3.211 1.123-1.469 1.87-3.306 3.267-4.614.664-.7 2.73-2.013.738-2.658zm24.57 11.072c-1.659.435-.468 2.667-.99 3.895a13.427 13.427 0 01-1.497 4.435c-.23 1.659 1.991 1.165 2.018-.199a14.277 14.277 0 001.254-7.552.865.865 0 00-.785-.579zm-30.18.666c-1.677.386-.633 2.667-.608 3.876.371 1.623.792 3.35 1.79 4.696 2.382.321.571-2.338.292-3.492a15.92 15.92 0 01-.684-4.39.877.877 0 00-.79-.69zm24.558 11.81c-1.755.865-3.303 2.266-5.274 2.765-1.162-.016-3.074 1.271-1.331 2.102 2.66-.447 5.163-1.733 7.236-3.445.472-.506.06-1.432-.631-1.421zm-19.151.043c-2.004.786.416 2.405 1.43 2.913 1.608.904 3.379 1.636 5.208 1.877 1.77-.804-.228-2.094-1.357-2.073-1.75-.537-3.403-1.396-4.798-2.586l-.227-.104-.256-.027z\"\n}));\n\nfunction _extends$c() { return _extends$c = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$c.apply(null, arguments); }\nvar StartEventNonInterruptingTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$c({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.991 8.7c-3.018-.042-5.92 1.925-7.03 4.725-1.138 2.695-.509 6.011 1.537 8.102 1.99 2.142 5.267 2.93 8.013 1.927 2.877-.98 4.99-3.826 5.067-6.87.153-2.956-1.624-5.88-4.299-7.135a7.551 7.551 0 00-3.288-.75zm0 1.383c2.758-.052 5.372 1.972 6.014 4.654.704 2.578-.482 5.516-2.79 6.867-2.358 1.48-5.682 1.085-7.617-.919-2.043-1.97-2.407-5.38-.84-7.743 1.11-1.764 3.149-2.88 5.233-2.86zm1.962 1.764l-2.074 3.762c-.64.068-.793 1.04-.202 1.3.39.27.696-.18 1.052-.165h3.17v-.865h-3.182l1.993-3.614-.757-.418zM16.12.358h-.232l-.22.004h-.012l-.221.006h-.012l-.22.01h-.012l-.22.013h-.012l-.22.016h-.012l-.22.019h-.005l-.006.001-.22.021h-.006l-.005.001-.22.025h-.011l-.22.028h-.005l-.006.002-.219.03h-.005l-.006.001-.218.033-.006.001-.006.001-.217.036-.006.001-.006.001-.217.039-.006.001-.006.001-.216.042-.006.001-.006.001-.215.045-.006.001-.006.002-.215.047-.006.002-.006.001-.214.05-.006.002-.006.002-.115.029-.152.053-.14.081-.122.106-.1.126-.075.143-.047.154-.018.16.012.16.042.156.07.145.095.13.118.11.137.086.15.059.158.03h.161l.132-.022.11-.028.202-.047.203-.046.208-.043.202-.039.206-.037.206-.034.205-.03.208-.03.205-.025.209-.023.208-.02.21-.017.209-.015.207-.011.21-.009.21-.006.207-.003h.21l.21.002.207.005.207.008.212.011.207.014.208.017.209.019.208.022.205.025.206.028.207.03.208.035.205.036.202.039.052.01.16.018.16-.012.156-.042.146-.07.13-.096.109-.119.085-.136.06-.15.03-.159v-.16l-.03-.16-.059-.15-.086-.136L19.823.9l-.13-.096-.145-.07-.128-.038-.057-.011-.006-.002h-.006L19.135.64l-.006-.001-.006-.001-.217-.039H18.9l-.006-.002-.217-.035-.006-.001-.006-.001-.218-.032-.006-.001-.006-.001-.218-.03h-.006l-.006-.001-.219-.027h-.011l-.22-.024-.005-.001h-.006l-.22-.021h-.006L17.512.42l-.22-.017-.005-.001h-.006l-.22-.015h-.012l-.22-.012h-.012l-.22-.01h-.012l-.22-.005h-.012l-.221-.003h-.012zm8.715 2.783l-.157.034-.149.063-.134.089-.116.112-.092.132-.067.147-.038.157-.008.16.021.16.051.153.079.141.103.124.102.087.052.038h.001l.087.064v.001l.082.061.002.001.076.059h.001l.084.065.082.066.002.001.079.063.002.002.077.063.081.067.002.002.077.065.076.065.001.002.08.07.078.07h.002l.075.068.077.072.002.001.073.069.077.073.072.07.002.001.077.076.07.07v.001l.075.076.07.073.002.001.074.079.002.002.069.074.069.075.074.082.07.08.002.001.068.079h.001l.067.079.068.082.065.078.001.002.068.083.067.084.063.081.001.002.067.087.002.002.063.084.001.001.064.087.008.01.008.01.095.12.093.121.09.119.087.119.088.122.086.123.084.12.081.122.001.002.084.126.08.126.08.127.077.126.079.131.074.127.075.131.073.131.07.13.07.133.069.133.045.09.086.137.109.119.13.096.144.07.156.042.16.013.16-.017.155-.047.143-.075.126-.1.106-.121.082-.14.054-.151.025-.16-.005-.16-.035-.158-.05-.124-.048-.095-.002-.004-.002-.004-.073-.14-.002-.005-.002-.004-.074-.14-.002-.004-.002-.004-.076-.14-.002-.003-.002-.004-.077-.139-.003-.004-.002-.004-.078-.138-.003-.004-.002-.003-.08-.137-.002-.004-.003-.004-.081-.136-.002-.004-.003-.004-.083-.136-.002-.003-.002-.004-.085-.135-.002-.004-.003-.003-.085-.134-.003-.004-.002-.004-.087-.132-.003-.004-.003-.004-.088-.132-.003-.003-.002-.004-.09-.13-.003-.005-.003-.003-.091-.13-.003-.004-.002-.004-.093-.129-.003-.003-.003-.004-.094-.128-.003-.004-.003-.003-.095-.127-.003-.004-.003-.004-.097-.125-.003-.004-.003-.004-.09-.114-.06-.082-.003-.003-.002-.003-.069-.091-.002-.004-.002-.003-.07-.09-.003-.003-.002-.003-.07-.09-.003-.003-.002-.003-.071-.09-.002-.003-.003-.002-.072-.089-.002-.003-.002-.003-.073-.088-.002-.003-.002-.002-.074-.087-.002-.003-.002-.003-.074-.086-.003-.003-.002-.003-.074-.086-.003-.002-.002-.003-.075-.085-.003-.003-.002-.002-.076-.084-.002-.003-.003-.003-.076-.083-.002-.003-.003-.003-.077-.082-.002-.003-.003-.002-.077-.082-.003-.003-.003-.002-.078-.081-.002-.003-.003-.003-.078-.08-.003-.002-.003-.003-.079-.08-.002-.002-.003-.002-.08-.08-.002-.002-.003-.002-.08-.078-.003-.003-.003-.002-.08-.077-.003-.003-.003-.002-.082-.077-.002-.002-.003-.002-.082-.076-.003-.002-.002-.003-.083-.075-.003-.002-.002-.003-.084-.074-.002-.002-.003-.002-.084-.074-.003-.002-.002-.002-.085-.073-.002-.002-.003-.003-.085-.071-.003-.003-.002-.002-.086-.07-.003-.003-.002-.002-.086-.07-.003-.003-.003-.002-.086-.07-.003-.002-.003-.002-.087-.069-.002-.002-.003-.002-.088-.068-.002-.002-.003-.002-.088-.067-.003-.003-.003-.002-.088-.066-.003-.002-.003-.002-.089-.066-.003-.002-.003-.002-.057-.042-.14-.082-.15-.055-.16-.026-.16.004zm-18.458.426l-.157.037-.148.066-.111.074-.007.006-.003.002-.003.002-.086.069-.003.002-.002.002-.086.07-.003.002-.002.002-.086.07-.002.003-.003.002-.085.071-.002.002-.003.003-.084.071-.003.003-.002.002-.084.072-.003.003-.002.002-.083.073-.003.003-.002.002-.083.074-.002.002-.003.003-.082.074-.003.003-.002.002-.081.076-.003.002-.003.002-.08.077-.003.002-.003.003-.08.076-.002.003-.003.002-.08.078-.002.002-.003.003-.079.078-.002.003-.003.002-.078.08-.003.002-.002.002-.078.08-.002.003-.003.002-.077.08-.003.004-.002.002-.077.081-.002.003-.003.003-.076.082-.002.002-.003.003-.075.082-.002.003-.003.003-.074.083-.003.003-.002.003-.074.084-.003.003-.002.002-.074.085-.002.003-.002.003-.073.085-.003.003-.002.003-.072.086-.002.003-.003.003-.071.087-.003.003-.002.002-.07.088-.003.003-.002.003-.07.088-.003.003-.002.003-.07.09-.002.002-.002.003-.069.09-.002.003-.003.003-.068.09-.002.003-.002.003-.067.092-.003.003-.002.003-.067.092-.002.003-.002.003-.066.092-.002.003-.002.004-.066.093-.002.003-.002.003-.065.094-.002.003-.002.004-.064.094-.002.003-.002.004-.063.095-.002.003-.002.003-.063.097-.002.003-.002.003-.046.073-.05.07-.003.002-.002.003-.067.093-.003.003-.002.003-.066.094-.002.003-.002.003-.066.094-.002.003-.002.003-.064.094-.002.004-.002.003-.064.094-.002.004-.002.003-.062.095-.002.003-.002.003-.062.096-.002.003-.002.003-.06.096-.003.003-.002.003-.06.096-.001.004-.002.003-.059.096-.002.004-.002.003-.058.097-.002.003-.001.003-.057.098-.002.003-.002.003-.056.098-.002.003-.002.003-.055.098-.002.004-.001.003-.055.098-.001.004-.002.003-.054.099-.001.003-.002.003-.052.1-.002.002-.002.004-.051.1-.002.002-.002.004-.05.1-.002.003-.002.003-.05.1v.003l-.002.004-.05.1V9.5l-.002.004-.048.1-.002.004-.001.003-.047.101-.002.003-.001.004-.013.027-.052.152-.024.16.006.16.037.157.064.148.091.133.114.114.134.09.147.065.157.036.162.006.159-.024.152-.053.14-.08.122-.105.1-.126.066-.117.01-.023.044-.095.045-.095.002-.003.042-.087.048-.097.048-.095v-.001l.048-.092.001-.001.047-.09.05-.093.002-.002.049-.09.052-.092.001-.002.051-.089.001-.002.051-.087.053-.088.001-.002.055-.091.057-.091.057-.09.001-.002.057-.089.055-.083.001-.002.06-.09.06-.088.062-.089.001-.001.06-.084.063-.088.065-.089.017-.023.016-.025.06-.094.059-.09v-.002l.058-.086.057-.086.001-.001.062-.09.062-.088.001-.002.06-.085.002-.002.06-.082.063-.087.064-.084.002-.002.061-.08.065-.084.064-.08v-.001l.067-.083.067-.082.07-.083.069-.08.063-.074.074-.083.068-.077.002-.002.07-.076.07-.075.072-.077.001-.001.067-.07.076-.078.002-.002.07-.07.075-.075.002-.002.072-.07.075-.072.002-.002.073-.069.074-.068.001-.001.08-.073.076-.068.002-.002.072-.063v-.001l.078-.067.079-.068.002-.001.08-.068.002-.002.077-.063.082-.066.001-.001.075-.06.002-.002.006-.004.117-.111.094-.131.068-.146.04-.156.01-.161-.019-.16-.049-.154-.076-.141-.102-.125-.123-.105-.14-.079-.153-.052-.16-.023-.16.007zm24.596 11.088l-.156.04-.146.067-.131.094-.112.117-.087.135-.061.15-.033.157-.004.134.007.142.005.152.004.15.002.149v.153l.001.011v.015l.004.11.002.11v.002l.002.106v.321l-.003.102-.002.106-.004.107-.005.105-.006.106-.006.106-.008.106v.002l-.008.103v.002l-.01.1-.01.105-.01.105-.013.105-.012.099v.002l-.014.108-.014.1-.016.105-.016.103v.002l-.017.099-.018.104-.019.103v.002l-.019.097-.02.104-.022.103v.001l-.022.098-.023.103v.002l-.024.096-.025.103v.002l-.024.096-.027.102v.003l-.026.093v.001l-.029.103v.002l-.03.099-.028.097v.002l-.03.095-.03.096v.001l-.033.1-.031.095v.002l-.035.1v.003l-.034.094v.003l-.035.096v.001l-.034.09v.002l-.038.098-.036.093v.002l-.038.095-.079.194-.08.188-.085.189-.087.19-.09.184-.092.183-.095.184-.05.093-.064.148-.034.158-.005.16.026.16.054.151.082.14.106.12.127.1.143.075.154.046.16.017.161-.013.156-.042.144-.071.13-.096.109-.119.072-.112.053-.099.003-.005.003-.006.102-.195.003-.006.003-.006.098-.196.003-.006.003-.006.096-.197.002-.006.003-.006.093-.2.002-.006.003-.006.09-.2.002-.006.003-.007.086-.202.003-.006.002-.006.084-.203.002-.005.001-.005.04-.102.002-.003.001-.003.04-.103.001-.003.001-.003.04-.103v-.004l.001-.003.039-.103v-.003l.002-.003.037-.104.001-.003.001-.003.037-.104v-.004l.002-.003.035-.104.002-.003v-.004l.035-.104.002-.004v-.003l.034-.105.002-.003v-.003l.034-.105v-.004l.002-.003.032-.106.001-.003.001-.003.031-.106.001-.003.001-.004.031-.106.001-.003.001-.004.03-.106v-.003l.002-.004.028-.107.001-.003.001-.003.028-.107.001-.004.001-.003.027-.107.001-.004v-.003l.027-.108.001-.003v-.004l.026-.108.001-.003v-.004l.025-.108.001-.003v-.004l.025-.108v-.004l.001-.003.023-.109v-.003l.001-.004.022-.109v-.003l.002-.004.02-.109.001-.004v-.003l.02-.11.002-.003v-.004l.02-.11v-.007l.019-.11v-.003l.001-.004.017-.11v-.004l.001-.003.017-.11v-.008l.016-.11v-.004l.001-.004.015-.11v-.008l.015-.111v-.008l.013-.111v-.007l.013-.112v-.007l.011-.112v-.004l.001-.004.01-.112v-.007l.01-.112v-.008l.008-.112v-.008l.007-.113v-.007l.007-.113v-.008l.005-.113v-.007l.005-.114v-.007l.003-.114v-.007l.003-.114v-.129l.001-.114v-.13l-.003-.114V16.5l-.003-.115v-.007l-.003-.102v-.155l-.003-.158v-.01l-.004-.158v-.01l-.006-.158v-.01l-.007-.148-.023-.16-.051-.152-.08-.14-.103-.124-.125-.102-.142-.077-.153-.05-.16-.02-.161.01zm-30.213.66l-.157.034-.149.063-.134.09-.115.113-.092.132-.067.147-.037.156-.009.134.001.11V16.308l.006.22v.012l.01.22v.012l.012.22v.006l.001.006.015.22v.005l.001.006.018.22.001.006v.006l.022.219v.006l.001.006.024.219.001.006v.006l.028.218.001.006v.006l.031.218.001.006.001.006.033.218.001.006.001.005.037.218v.006l.002.005.04.217v.006l.001.006.043.216.001.006.001.006.046.216v.005l.002.006.048.215.002.006.001.006.051.214.002.006v.006l.055.214.002.005.001.006.057.213.002.006.001.005.06.213.002.005.001.006.063.212.002.005.001.006.066.21.002.006.002.006.068.21.002.005.002.005.07.21.003.005.002.005.074.208.002.006.002.005.077.207.002.006.002.005.08.206.002.005.002.006.082.204.002.006.002.005.086.204.002.005.002.006.088.202.002.005.003.006.09.2.003.006.002.005.094.2.002.006.003.005.096.199.002.005.003.005.03.062.086.137.11.118.128.097.145.07.156.043.16.013.16-.017.155-.047.143-.074.127-.1.106-.121.081-.14.055-.15.025-.16-.005-.161-.034-.158-.05-.124-.028-.055-.092-.19-.087-.188-.087-.192-.083-.19-.08-.193-.078-.194-.076-.196-.073-.195-.07-.197-.067-.198-.065-.199-.063-.2-.059-.2-.056-.2-.055-.204-.05-.201-.049-.202-.046-.205-.043-.206-.04-.203-.038-.207-.034-.204-.032-.207-.028-.205-.026-.207-.023-.208-.02-.207-.018-.207-.014-.208-.011-.207-.009-.208-.005-.207-.002-.104-.017-.16-.046-.155-.074-.143-.1-.126-.121-.107-.139-.081-.152-.055-.159-.025-.161.004zm24.585 11.83l-.156.039-.146.068-.11.076-.015.012-.163.129-.166.127-.168.125-.17.124-.17.12-.172.118-.173.115-.176.114-.177.111-.18.11-.178.105-.182.104-.182.101-.184.1-.184.095-.189.095-.186.09-.188.089-.19.086-.19.082-.193.081-.195.078-.191.074-.197.073-.195.07-.196.065-.198.064-.198.061-.2.058-.2.055-.2.052-.2.049-.151.035-.153.05-.141.078-.125.103-.103.124-.078.14-.05.154-.022.16.009.16.038.157.067.147.093.132.116.112.134.089.149.062.158.034.16.003.133-.02.158-.035.006-.002.006-.001.213-.052.006-.002.007-.001.212-.056.006-.001.006-.002.212-.058.006-.002.006-.002.211-.061.006-.002.006-.002.21-.064.006-.002.006-.002.21-.067.005-.002.006-.002.208-.07.006-.002.006-.003.207-.073.006-.002.006-.002.206-.077.006-.002.005-.002.206-.08.005-.001.006-.003.204-.082.006-.002.005-.002.203-.085.006-.003.005-.002.202-.088.006-.002.005-.003.2-.09.006-.003.006-.003.2-.093.005-.003.005-.002.198-.096.006-.003.005-.003.197-.099.005-.002.005-.003.196-.102.005-.002.005-.003.195-.105.005-.002.005-.003.193-.107.005-.003.005-.003.191-.11.005-.003.005-.003.19-.112.005-.003.005-.003.189-.115.005-.003.005-.003.187-.117.005-.003.004-.004.186-.12.005-.003.004-.003.184-.122.005-.003.005-.004.182-.125.004-.003.005-.003.18-.128.005-.003.005-.003.179-.13.004-.003.005-.004.177-.132.004-.004.005-.003.175-.135.005-.003.004-.004.173-.137.005-.003.004-.004.019-.015.115-.113.092-.132.066-.147.038-.157.008-.16-.022-.16-.052-.153-.079-.14-.103-.124-.125-.102-.142-.078-.153-.05-.16-.02-.16.01zm-19.17.054l-.153.051-.14.079-.124.103-.103.125-.077.141-.05.153-.02.16.009.161.04.156.067.147.093.131.095.094.047.04.005.004.005.004.17.14.005.004.005.004.172.137.004.004.005.003.086.067.003.002.003.002.087.067.003.002.003.002.088.066.002.003.003.002.089.065.002.002.003.002.09.065.002.002.003.002.09.064.002.002.003.002.09.063.003.002.003.002.09.063.003.002.003.002.092.062.002.002.003.002.092.061.003.002.003.002.092.06.003.003.003.001.093.06.003.002.003.002.093.06.003.001.003.002.094.058.003.002.003.002.095.058.003.001.003.002.095.057.003.002.003.002.095.056.003.002.003.002.096.055.004.002.003.001.096.055.003.002.003.002.098.053.003.002.003.002.097.053.004.002.003.001.098.053.003.001.003.002.099.052.003.001.003.002.1.05.003.002.003.002.1.05.003.002.003.001.1.05h.003l.004.003.1.048.004.001.003.002.101.048.003.001.004.002.101.046.004.002.003.001.102.046.004.002.003.001.103.045.003.002.003.001.103.045.004.001.003.002.104.043.003.001.004.002.104.042.003.002.004.001.104.042.004.001.003.002.105.04.004.002.003.001.106.04.003.002h.004l.106.04.004.001.003.002.107.038.003.001.004.001.107.038.003.001.004.001.107.037.004.001.004.001.108.036.003.001.004.001.108.035.004.001.003.001.11.034.003.001.004.001.109.033.004.002h.003l.11.033h.004l.003.002.11.031.004.001.004.001.084.023.081.028.004.001.003.001.109.037.003.001.004.001.109.036.003.001.004.001.109.035h.003l.004.002.11.033.003.001.003.001.11.033.003.001.004.001.109.031.004.002h.003l.11.031.003.001.004.001.11.03h.003l.003.001.11.029h.004l.003.002.11.027.003.001.004.001.11.027h.003l.004.001.004.001.16.022.16-.008.157-.038.147-.067.132-.092.112-.116.09-.134.062-.149.034-.157.004-.161-.025-.16-.055-.151-.082-.139-.107-.12-.127-.1-.143-.074-.124-.04h-.003l-.104-.025-.103-.026h-.002l-.095-.026h-.001l-.101-.027h-.002l-.1-.028h-.002l-.103-.03-.104-.032-.097-.03h-.002l-.103-.033-.102-.033-.101-.034-.106-.036-.027-.01-.027-.007-.107-.03-.104-.029-.104-.03h-.002l-.097-.03-.102-.032-.102-.032-.102-.034-.103-.035-.096-.034-.1-.036-.101-.037h-.002l-.094-.036-.096-.037-.097-.04h-.002l-.099-.04-.098-.042h-.002l-.092-.04-.097-.043-.095-.043-.097-.044h-.002l-.09-.043-.094-.045-.094-.046-.093-.047-.09-.046-.096-.05-.088-.047-.002-.001-.09-.049-.094-.052-.002-.002-.087-.049-.087-.05h-.002l-.088-.053h-.001l-.09-.055-.086-.052-.002-.001-.089-.055-.084-.054h-.002l-.09-.059h-.001l-.085-.056-.001-.001-.084-.056-.082-.056h-.001l-.086-.06-.082-.058H7.79l-.086-.062-.002-.002-.08-.058-.081-.06h-.001l-.085-.064-.002-.002-.076-.058-.002-.002-.082-.064-.161-.128-.162-.133-.04-.034-.132-.092-.147-.066-.157-.038-.16-.008-.16.022z\"\n}));\n\nfunction _extends$b() { return _extends$b = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$b.apply(null, arguments); }\nvar StartEventNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$b({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.847.004C9.61-.016 3.624 4.014 1.257 9.78-1.235 15.49.06 22.581 4.42 27.034c4.193 4.513 11.101 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.268.403-6.228-3.26-12.441-8.87-15.154A15.924 15.924 0 0015.846.004zm.439 1.729c6.105.033 11.856 4.45 13.435 10.359 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.625-4.814-3.84-6.538-10.94-4.067-16.57 2.14-5.206 7.515-8.775 13.147-8.71.097-.001.194-.002.29-.001z\"\n}));\n\nfunction _extends$a() { return _extends$a = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$a.apply(null, arguments); }\nvar StartEventParallelMultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$a({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.847 0C9.61-.02 3.624 4.01 1.257 9.775-1.235 15.485.06 22.577 4.42 27.03c4.193 4.513 11.101 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.268.403-6.228-3.26-12.441-8.87-15.154A15.924 15.924 0 0015.846 0zm.439 1.729c6.105.033 11.856 4.45 13.435 10.359 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.625C2.101 23.17.377 16.07 2.848 10.44c2.134-5.2 7.522-8.78 13.147-8.71.097-.001.194-.002.29-.001zM13.504 9.08v4.427H9.077v4.98h4.427v4.427h4.98v-4.427h4.428v-4.98h-4.427V9.08h-4.98zm.83.83h3.32v4.427h4.428v3.32h-4.427v4.427h-3.32v-4.453H9.906v-3.294h4.427V9.91z\"\n}));\n\nfunction _extends$9() { return _extends$9 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$9.apply(null, arguments); }\nvar StartEventSignalIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$9({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M15.995.005C9.705-.08 3.643 3.968 1.257 9.78-1.235 15.49.06 22.581 4.42 27.034c4.193 4.513 11.102 6.17 16.887 4.058 5.996-2.042 10.423-7.93 10.664-14.269.403-6.227-3.26-12.44-8.87-15.153A15.924 15.924 0 0015.994.005zm0 1.73c6.213-.108 12.122 4.355 13.726 10.357 1.678 5.653-.592 12.198-5.463 15.547-5.06 3.719-12.564 3.45-17.343-.626-4.814-3.838-6.538-10.939-4.067-16.57 2.14-5.205 7.515-8.774 13.147-8.708zm0 6.776L9.19 20.724H22.8L15.995 8.511zm0 1.777l5.332 9.572H10.662l5.333-9.572z\"\n}));\n\nfunction _extends$8() { return _extends$8 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$8.apply(null, arguments); }\nvar StartEventTimerIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$8({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M16 0C7.174 0 0 7.174 0 16s7.174 16 16 16 16-7.174 16-16S24.826 0 16 0zm0 1.73c7.892 0 14.27 6.378 14.27 14.27 0 7.891-6.379 14.27-14.27 14.27S1.73 23.891 1.73 16C1.73 8.108 8.108 1.73 16 1.73zm-.143 6.676c-2.967.02-5.797 1.97-6.89 4.727-1.138 2.695-.51 6.012 1.537 8.102 1.99 2.142 5.268 2.932 8.014 1.928 2.878-.98 4.992-3.827 5.068-6.87.153-2.957-1.624-5.881-4.3-7.137a7.552 7.552 0 00-3.43-.75zm.27 1.383c2.71.012 5.254 2.015 5.886 4.656.704 2.577-.482 5.517-2.791 6.867-2.358 1.48-5.682 1.085-7.618-.918-2.043-1.971-2.407-5.381-.84-7.745 1.11-1.763 3.15-2.88 5.234-2.86h.13zm1.833 1.765l-2.074 3.763c-.64.068-.793 1.04-.202 1.3.39.27.696-.18 1.052-.165h3.17v-.865h-3.181l1.992-3.615-.757-.418z\"\n}));\n\nfunction _extends$7() { return _extends$7 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$7.apply(null, arguments); }\nvar SubprocessCollapsedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$7({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M5.637 3A5.644 5.644 0 000 8.637v15.417a5.644 5.644 0 005.637 5.637h20.726A5.644 5.644 0 0032 24.054V8.637A5.644 5.644 0 0026.363 3H5.637zm0 1.778h20.726a3.83 3.83 0 013.859 3.859v15.417a3.83 3.83 0 01-3.859 3.858h-4.201V16.695H9.838v11.217H5.637a3.83 3.83 0 01-3.859-3.858V8.637a3.83 3.83 0 013.859-3.859zm5.33 13.046h10.066v10.065H10.967V17.824zm4.189 1.431V22.06H12.35v1.689h2.804V26.554h1.69V23.749h2.804V22.06h-2.804V19.255h-1.69z\"\n}));\n\nfunction _extends$6() { return _extends$6 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$6.apply(null, arguments); }\nvar SubprocessExpandedIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$6({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M5.636 3A5.642 5.642 0 000 8.636v15.418a5.643 5.643 0 005.636 5.636h20.728A5.643 5.643 0 0032 24.054V8.636A5.642 5.642 0 0026.364 3H5.636zm0 1.778h20.728a3.83 3.83 0 013.858 3.858v15.418a3.83 3.83 0 01-3.858 3.858h-4.203V16.723H9.84v11.189H5.636a3.83 3.83 0 01-3.858-3.858V8.636a3.83 3.83 0 013.858-3.858zm5.331 13.074h10.066v10.06H10.967v-10.06zm1.336 3.996v1.711h7.394v-1.71h-7.394z\"\n}));\n\nfunction _extends$5() { return _extends$5 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$5.apply(null, arguments); }\nvar TaskNoneIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$5({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M6.494 2.667C2.916 2.667 0 5.57 0 9.142v13.383C0 26.097 2.916 29 6.494 29h19.012C29.084 29 32 26.097 32 22.525V9.142c0-3.572-2.916-6.475-6.494-6.475H6.494zm0 2h19.012c2.509 0 4.494 1.98 4.494 4.475v13.383C30 25.02 28.015 27 25.506 27H6.494C3.985 27 2 25.02 2 22.525V9.142c0-2.495 1.985-4.475 4.494-4.475z\"\n}));\n\nfunction _extends$4() { return _extends$4 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$4.apply(null, arguments); }\nvar TextAnnotationicon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$4({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M22.087 0v31.647H32v-1.788h-8.125V1.788H32V0h-9.913zm-2.924 13.999l-2.737 2.167 2.167 2.738 2.738-2.167-2.168-2.738zm-5.475 4.335L10.95 20.5l2.168 2.738 2.737-2.168-2.167-2.737zm-5.475 4.335l-2.738 2.167 2.168 2.738 2.737-2.168-2.167-2.737zm-5.476 4.335L0 29.17l2.167 2.738 2.738-2.168-2.168-2.737z\"\n}));\n\nfunction _extends$3() { return _extends$3 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$3.apply(null, arguments); }\nvar TransactionIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$3({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n d: \"M5.422 3A5.424 5.424 0 000 8.422v15.822a5.424 5.424 0 005.422 5.423h21.156A5.424 5.424 0 0032 24.244V8.422A5.424 5.424 0 0026.578 3H5.422zm0 1.244h21.156a4.155 4.155 0 014.178 4.178v15.822a4.155 4.155 0 01-4.178 4.178H5.422a4.155 4.155 0 01-4.178-4.178V8.422a4.155 4.155 0 014.178-4.178zm1.056 1.778a3.373 3.373 0 00-3.367 3.366v13.89a3.373 3.373 0 003.367 3.366h19.044a3.373 3.373 0 003.367-3.366V9.388a3.373 3.373 0 00-3.367-3.366H6.478zm0 1.245h19.044c1.187 0 2.122.935 2.122 2.121v13.89a2.104 2.104 0 01-2.122 2.122H6.478a2.104 2.104 0 01-2.122-2.122V9.388c0-1.186.935-2.121 2.122-2.121z\"\n}));\n\nfunction _extends$2() { return _extends$2 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$2.apply(null, arguments); }\nvar UserTaskIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$2({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"32\",\n height: \"32\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10.263 7.468c-1.698 0-2.912 1.305-2.915 2.791v.001c0 .45.121.924.311 1.352.138.309.308.593.516.82-1.235.423-2.683 1.119-3.414 2.49l-.04.075v4.44h11.083v-4.44l-.04-.074c-.72-1.352-2.136-2.047-3.36-2.471.597-.608.774-1.392.774-2.192-.004-1.487-1.218-2.792-2.915-2.792zm-1.16 1.583c.08 0 .165.003.26.008.757.045 1.012.181 1.207.31.196.13.334.252.851.268.404-.016.598-.087.737-.169.056-.033.103-.067.152-.1.128.275.197.578.198.893 0 .894-.154 1.52-.975 2.034l.08.604c.171.052.348.11.527.171.025.105.054.242.073.387.02.153.029.311.016.43a.422.422 0 01-.056.19c-.417.417-1.157.66-1.908.66-.75 0-1.49-.243-1.908-.66a.422.422 0 01-.056-.19 1.949 1.949 0 01.016-.43c.02-.146.049-.284.074-.388.177-.062.352-.118.521-.17l.048-.648a.616.616 0 00-.126-.118c-.183-.138-.405-.44-.562-.793-.157-.353-.254-.757-.254-1.08 0-.387.105-.758.297-1.079l.11-.04c.143-.046.339-.09.679-.09zm-1.448 4.304l-.002.014c-.025.185-.04.387-.018.589.021.202.074.42.248.593.595.594 1.494.857 2.382.857.889 0 1.788-.263 2.382-.857.174-.174.227-.391.249-.593a2.496 2.496 0 00-.018-.59l-.002-.01c.903.396 1.776.963 2.258 1.81v3.599H13.53v-2.538h-.67v2.538H7.651v-2.538h-.67v2.538H5.39v-3.599c.483-.849 1.359-1.416 2.264-1.813zM6.495 3C2.914 3 0 5.903 0 9.475v13.383c0 3.572 2.916 6.475 6.494 6.475h19.012c3.578 0 6.494-2.903 6.494-6.475V9.475C32 5.903 29.084 3 25.506 3H6.494zm0 2h19.01C28.016 5 30 6.98 30 9.475v13.383c0 2.495-1.985 4.475-4.494 4.475H6.494C3.985 27.333 2 25.353 2 22.858V9.475C2 6.98 3.985 5 6.494 5z\"\n}));\n\nvar iconsByType = {\n 'Association': AssociationIcon,\n 'BusinessRuleTask': BusinessRuleTaskIcon,\n 'CallActivity': CallActivityIcon,\n 'Collaboration': CollaborationIcon,\n 'ConditionalFlow': ConditionalFlowIcon,\n 'SequenceFlow': ConnectionIcon,\n 'DataInput': DataInputIcon,\n 'DataInputAssociation': DataInputOutputAssociationIcon,\n 'DataOutput': DataOutputIcon,\n 'DataOutputAssociation': DataInputOutputAssociationIcon,\n 'DataObjectReference': DataObjectIcon,\n 'DataStoreReference': DataStoreIcon,\n 'DefaultFlow': DefaultFlowIcon,\n 'CancelEndEvent': EndEventCancelIcon,\n 'CompensateEndEvent': EndEventCompensationIcon,\n 'ErrorEndEvent': EndEventErrorIcon,\n 'EscalationEndEvent': EndEventEscalationIcon,\n 'LinkEndEvent': EndEventLinkIcon,\n 'MessageEndEvent': EndEventMessageIcon,\n 'MultipleEndEvent': EndEventMultipleIcon,\n 'EndEvent': EndEventNoneIcon,\n 'SignalEndEvent': EndEventSignalIcon,\n 'TerminateEndEvent': EndEventTerminateIcon,\n 'EventSubProcess': EventSubProcessExpandedIcon,\n 'ComplexGateway': GatewayComplexIcon,\n 'EventBasedGateway': GatewayEventBasedIcon,\n 'ExclusiveGateway': GatewayXorIcon,\n 'Gateway': GatewayNoneIcon,\n 'InclusiveGateway': GatewayOrIcon,\n 'ParallelGateway': GatewayParallelIcon,\n 'Group': GroupIcon,\n 'CancelIntermediateCatchEvent': IntermediateEventCatchCancelIcon,\n 'CompensateIntermediateCatchEvent': IntermediateEventCatchCompensationIcon,\n 'ConditionalIntermediateCatchEvent': IntermediateEventCatchConditionIcon,\n 'ErrorIntermediateCatchEvent': IntermediateEventCatchErrorIcon,\n 'EscalationIntermediateCatchEvent': IntermediateEventCatchEscalationIcon,\n 'LinkIntermediateCatchEvent': IntermediateEventCatchLinkIcon,\n 'MessageIntermediateCatchEvent': IntermediateEventCatchMessageIcon,\n 'MultipleIntermediateCatchEvent': IntermediateEventCatchMultipleIcon,\n 'ConditionalIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingConditionIcon,\n 'EscalationIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingEscalationIcon,\n 'MessageIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingMessageIcon,\n 'MultipleIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingMultipleIcon,\n 'ParallelIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingParallelIcon,\n 'SignalIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingSignalIcon,\n 'TimerIntermediateCatchEventNonInterrupting': IntermediateEventCatchNonInterruptingTimerIcon,\n 'ParallelMultipleIntermediateCatchEvent': IntermediateEventCatchParallelMultipleIcon,\n 'SignalIntermediateCatchEvent': IntermediateEventCatchSignalIcon,\n 'TimerIntermediateCatchEvent': IntermediateEventCatchTimerIcon,\n 'IntermediateThrowEvent': IntermediateEventNoneIcon,\n 'CompensateIntermediateThrowEvent': IntermediateEventThrowCompensationIcon,\n 'EscalationIntermediateThrowEvent': IntermediateEventThrowEscalationIcon,\n 'LinkIntermediateThrowEvent': IntermediateEventThrowLinkIcon,\n 'MessageIntermediateThrowEvent': IntermediateEventThrowMessageIcon,\n 'MultipleIntermediateThrowEvent': IntermediateEventThrowMultipleIcon,\n 'SignalIntermediateThrowEvent': IntermediateEventThrowSignalIcon,\n 'Lane': LaneIcon,\n 'ManualTask': ManualTaskIcon,\n 'MessageFlow': MessageFlowIcon,\n 'Participant': ParticipantIcon,\n 'Process': ProcessIcon,\n 'ReceiveTask': ReceiveTaskIcon,\n 'ScriptTask': ScriptTaskIcon,\n 'SendTask': SendTaskIcon,\n 'ServiceTask': ServiceTaskIcon,\n 'CompensateStartEvent': StartEventCompensationIcon,\n 'ConditionalStartEvent': StartEventConditionIcon,\n 'ErrorStartEvent': StartEventErrorIcon,\n 'EscalationStartEvent': StartEventEscalationIcon,\n 'MessageStartEvent': StartEventMessageIcon,\n 'MultipleStartEvent': StartEventMultipleIcon,\n 'ConditionalStartEventNonInterrupting': StartEventNonInterruptingConditionIcon,\n 'EscalationStartEventNonInterrupting': StartEventNonInterruptingEscalationIcon,\n 'MessageStartEventNonInterrupting': StartEventNonInterruptingMessageIcon,\n 'MultipleStartEventNonInterrupting': StartEventNonInterruptingMultipleIcon,\n 'ParallelMultipleStartEventNonInterrupting': StartEventNonInterruptingParallelMultipleIcon,\n 'SignalStartEventNonInterrupting': StartEventNonInterruptingSignalIcon,\n 'TimerStartEventNonInterrupting': StartEventNonInterruptingTimerIcon,\n 'CancelBoundaryEvent': IntermediateEventCatchCancelIcon,\n 'CompensateBoundaryEvent': IntermediateEventCatchCompensationIcon,\n 'ConditionalBoundaryEvent': IntermediateEventCatchConditionIcon,\n 'ErrorBoundaryEvent': IntermediateEventCatchErrorIcon,\n 'EscalationBoundaryEvent': IntermediateEventCatchEscalationIcon,\n 'LinkBoundaryEvent': IntermediateEventCatchLinkIcon,\n 'MessageBoundaryEvent': IntermediateEventCatchMessageIcon,\n 'MultipleBoundaryEvent': IntermediateEventCatchMultipleIcon,\n 'BoundaryEvent': IntermediateEventNoneIcon,\n 'ConditionalBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingConditionIcon,\n 'EscalationBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingEscalationIcon,\n 'MessageBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingMessageIcon,\n 'MultipleBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingMultipleIcon,\n 'ParallelBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingParallelIcon,\n 'SignalBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingSignalIcon,\n 'TimerBoundaryEventNonInterrupting': IntermediateEventCatchNonInterruptingTimerIcon,\n 'ParallelMultipleBoundaryEvent': IntermediateEventCatchParallelMultipleIcon,\n 'SignalBoundaryEvent': IntermediateEventCatchSignalIcon,\n 'TimerBoundaryEvent': IntermediateEventCatchTimerIcon,\n 'StartEvent': StartEventNoneIcon,\n 'ParallelMultipleStartEvent': StartEventParallelMultipleIcon,\n 'SignalStartEvent': StartEventSignalIcon,\n 'TimerStartEvent': StartEventTimerIcon,\n 'CollapsedSubProcess': SubprocessCollapsedIcon,\n 'CollapsedAdHocSubProcess': SubprocessCollapsedIcon,\n 'ExpandedSubProcess': SubprocessExpandedIcon,\n 'ExpandedAdHocSubProcess': SubprocessExpandedIcon,\n 'Task': TaskNoneIcon,\n 'TextAnnotation': TextAnnotationicon,\n 'Transaction': TransactionIcon,\n 'UserTask': UserTaskIcon\n};\n\nfunction getConcreteType(element) {\n const {\n type: elementType\n } = element;\n let type = getRawType(elementType);\n\n // (1) event definition types\n const eventDefinition = getEventDefinition$2(element);\n if (eventDefinition) {\n type = `${getEventDefinitionPrefix(eventDefinition)}${type}`;\n\n // (1.1) interrupting / non interrupting\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:StartEvent') && !(0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isInterrupting)(element) || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:BoundaryEvent') && !isCancelActivity(element)) {\n type = `${type}NonInterrupting`;\n }\n return type;\n }\n\n // (2) sub process types\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SubProcess') && !(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Transaction')) {\n if ((0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isEventSubProcess)(element)) {\n type = `Event${type}`;\n } else {\n const expanded = (0,bpmn_js_lib_util_DiUtil__WEBPACK_IMPORTED_MODULE_10__.isExpanded)(element) && !isPlane(element);\n type = `${expanded ? 'Expanded' : 'Collapsed'}${type}`;\n }\n }\n\n // (3) conditional + default flows\n if (isDefaultFlow(element)) {\n type = 'DefaultFlow';\n }\n if (isConditionalFlow(element)) {\n type = 'ConditionalFlow';\n }\n return type;\n}\nconst PanelHeaderProvider = translate => {\n if (!translate) translate = text => text;\n return {\n getDocumentationRef: element => {\n const elementTemplates = getTemplatesService();\n if (elementTemplates) {\n return getTemplateDocumentation(element, elementTemplates);\n }\n },\n getElementLabel: element => {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process')) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).name;\n }\n return (0,bpmn_js_lib_features_label_editing_LabelUtil__WEBPACK_IMPORTED_MODULE_11__.getLabel)(element);\n },\n getElementIcon: element => {\n const concreteType = getConcreteType(element);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const config = useService('config.elementTemplateIconRenderer', false);\n const {\n iconProperty = 'zeebe:modelerTemplateIcon'\n } = config || {};\n const templateIcon = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).get(iconProperty);\n if (templateIcon) {\n return () => (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"img\", {\n class: \"bio-properties-panel-header-template-icon\",\n width: \"32\",\n height: \"32\",\n src: templateIcon\n });\n }\n return iconsByType[concreteType];\n },\n getTypeLabel: element => {\n const elementTemplates = getTemplatesService();\n if (elementTemplates) {\n const template = getTemplate(element, elementTemplates);\n if (template && template.name) {\n return translate(template.name);\n }\n }\n const concreteType = getConcreteType(element);\n return translate(concreteType.replace(/(\\B[A-Z])/g, ' $1').replace(/(\\bNon Interrupting)/g, '($1)'));\n }\n };\n};\n\n// helpers ///////////////////////\n\nfunction isCancelActivity(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return businessObject && businessObject.cancelActivity !== false;\n}\nfunction getEventDefinition$2(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n eventDefinitions = businessObject.eventDefinitions;\n return eventDefinitions && eventDefinitions[0];\n}\nfunction getRawType(type) {\n return type.split(':')[1];\n}\nfunction getEventDefinitionPrefix(eventDefinition) {\n const rawType = getRawType(eventDefinition.$type);\n return rawType.replace('EventDefinition', '');\n}\nfunction isDefaultFlow(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const sourceBusinessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element.source);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow') || !sourceBusinessObject) {\n return false;\n }\n return sourceBusinessObject.default && sourceBusinessObject.default === businessObject && ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(sourceBusinessObject, 'bpmn:Gateway') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(sourceBusinessObject, 'bpmn:Activity'));\n}\nfunction isConditionalFlow(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const sourceBusinessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element.source);\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:SequenceFlow') || !sourceBusinessObject) {\n return false;\n }\n return businessObject.conditionExpression && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(sourceBusinessObject, 'bpmn:Activity');\n}\nfunction isPlane(element) {\n // Backwards compatibility for bpmn-js<8\n const di = element && (element.di || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).di);\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(di, 'bpmndi:BPMNPlane');\n}\nfunction getTemplatesService() {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useService('elementTemplates', false);\n}\nfunction getTemplate(element, elementTemplates) {\n return elementTemplates.get(element);\n}\nfunction getTemplateDocumentation(element, elementTemplates) {\n const template = getTemplate(element, elementTemplates);\n return template && template.documentationRef;\n}\n\nfunction _extends$1() { return _extends$1 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1.apply(null, arguments); }\nvar EmptyIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends$1({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: \"64\",\n height: \"64\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"defs\", null, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"rect\", {\n id: \"a\",\n width: \"57\",\n height: \"47\",\n x: \"3\",\n y: \"8\",\n rx: \"7\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"mask\", {\n id: \"b\",\n width: \"57\",\n height: \"47\",\n x: \"0\",\n y: \"0\",\n fill: \"#fff\",\n maskContentUnits: \"userSpaceOnUse\",\n maskUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n xlinkHref: \"#a\"\n}))), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M52 11a5 5 0 015 5v31a5 5 0 01-5 5H11a5 5 0 01-5-5V16a5 5 0 015-5h41zm0 2H11a3 3 0 00-2.995 2.824L8 16v31a3 3 0 002.824 2.995L11 50h41a3 3 0 002.995-2.824L55 47V16a3 3 0 00-2.824-2.995L52 13z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M16 24h31v6H16zM21 33h21v6H21z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n stroke: \"#B9BCC6\",\n strokeDasharray: \"5 2\",\n strokeWidth: \"2\",\n mask: \"url(#b)\",\n xlinkHref: \"#a\"\n})));\n\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nvar MultipleIcon = ({\n styles = {},\n ...props\n}) => /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n width: \"128\",\n height: \"64\"\n}, props), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"defs\", null, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n id: \"a\",\n d: \"M9 9h110v47H9z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"mask\", {\n id: \"b\",\n width: \"110\",\n height: \"47\",\n x: \"0\",\n y: \"0\",\n fill: \"#fff\",\n maskContentUnits: \"userSpaceOnUse\",\n maskUnits: \"objectBoundingBox\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n xlinkHref: \"#a\"\n}))), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M25 20.272L37.728 33 25 45.728 12.272 33 25 20.272zm0 2.829L15.1 33l9.9 9.9 9.9-9.9-9.9-9.9z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M17 47h16v6H17z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M35 32h27v2H35z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M60 30v6l6-3z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M80 34h21v6H80z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"g\", null, /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#818798\",\n d: \"M111 12a5 5 0 015 5v31a5 5 0 01-5 5H70a5 5 0 01-5-5V17a5 5 0 015-5h41zm0 2H70a3 3 0 00-3 3v31a3 3 0 003 3h41a3 3 0 003-3V17a3 3 0 00-3-3z\"\n}), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"path\", {\n fill: \"#D5D7DD\",\n d: \"M75 25h31v6H75z\"\n})), /*#__PURE__*/_bpmn_io_properties_panel_preact_compat__WEBPACK_IMPORTED_MODULE_3__[\"default\"].createElement(\"use\", {\n stroke: \"#B9BCC6\",\n strokeDasharray: \"5 2\",\n strokeWidth: \"2\",\n mask: \"url(#b)\",\n xlinkHref: \"#a\"\n})));\n\nconst PanelPlaceholderProvider = translate => {\n if (!translate) translate = text => text;\n return {\n getEmpty: () => {\n return {\n text: translate('Select an element to edit its properties.'),\n icon: EmptyIcon\n };\n },\n getMultiple: () => {\n return {\n text: translate('Multiple elements are selected. Select a single element to edit its properties.'),\n icon: MultipleIcon\n };\n }\n };\n};\n\nfunction BpmnPropertiesPanel(props) {\n const {\n element,\n injector,\n getProviders,\n layoutConfig: initialLayoutConfig,\n descriptionConfig,\n tooltipConfig,\n feelPopupContainer,\n getFeelPopupLinks\n } = props;\n const canvas = injector.get('canvas');\n const elementRegistry = injector.get('elementRegistry');\n const eventBus = injector.get('eventBus');\n const translate = injector.get('translate');\n const [state, setState] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({\n selectedElement: element\n });\n const selectedElement = state.selectedElement;\n\n /**\n * @param {djs.model.Base | Array} element\n */\n const _update = element => {\n if (!element) {\n return;\n }\n let newSelectedElement = element;\n\n // handle labels\n if (newSelectedElement && newSelectedElement.type === 'label') {\n newSelectedElement = newSelectedElement.labelTarget;\n }\n setState({\n ...state,\n selectedElement: newSelectedElement\n });\n\n // notify interested parties on property panel updates\n eventBus.fire('propertiesPanel.updated', {\n element: newSelectedElement\n });\n };\n\n // (2) react on element changes\n\n // (2a) selection changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onSelectionChanged = e => {\n const {\n newSelection = []\n } = e;\n if (newSelection.length > 1) {\n return _update(newSelection);\n }\n const newElement = newSelection[0];\n const rootElement = canvas.getRootElement();\n if (isImplicitRoot$1(rootElement)) {\n return;\n }\n _update(newElement || rootElement);\n };\n eventBus.on('selection.changed', onSelectionChanged);\n return () => {\n eventBus.off('selection.changed', onSelectionChanged);\n };\n }, []);\n\n // (2b) selected element changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onElementsChanged = e => {\n const elements = e.elements;\n const updatedElement = findElement(elements, selectedElement);\n if (updatedElement && elementExists(updatedElement, elementRegistry)) {\n _update(updatedElement);\n }\n };\n eventBus.on('elements.changed', onElementsChanged);\n return () => {\n eventBus.off('elements.changed', onElementsChanged);\n };\n }, [selectedElement]);\n\n // (2c) root element changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onRootAdded = e => {\n const element = e.element;\n _update(element);\n };\n eventBus.on('root.added', onRootAdded);\n return () => {\n eventBus.off('root.added', onRootAdded);\n };\n }, [selectedElement]);\n\n // (2d) provided entries changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onProvidersChanged = () => {\n _update(selectedElement);\n };\n eventBus.on('propertiesPanel.providersChanged', onProvidersChanged);\n return () => {\n eventBus.off('propertiesPanel.providersChanged', onProvidersChanged);\n };\n }, [selectedElement]);\n\n // (2e) element templates changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const onTemplatesChanged = () => {\n _update(selectedElement);\n };\n eventBus.on('elementTemplates.changed', onTemplatesChanged);\n return () => {\n eventBus.off('elementTemplates.changed', onTemplatesChanged);\n };\n }, [selectedElement]);\n\n // (3) create properties panel context\n const bpmnPropertiesPanelContext = {\n selectedElement,\n injector,\n getService(type, strict) {\n return injector.get(type, strict);\n }\n };\n\n // (4) retrieve groups for selected element\n const providers = getProviders(selectedElement);\n const groups = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.reduce)(providers, function (groups, provider) {\n // do not collect groups for multi element state\n if ((0,min_dash__WEBPACK_IMPORTED_MODULE_12__.isArray)(selectedElement)) {\n return [];\n }\n const updater = provider.getGroups(selectedElement);\n return updater(groups);\n }, []);\n }, [providers, selectedElement]);\n\n // (5) notify layout changes\n const [layoutConfig, setLayoutConfig] = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(initialLayoutConfig || {});\n const onLayoutChanged = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newLayout => {\n eventBus.fire('propertiesPanel.layoutChanged', {\n layout: newLayout\n });\n }, [eventBus]);\n\n // React to external layout changes\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const cb = e => {\n const {\n layout\n } = e;\n setLayoutConfig(layout);\n };\n eventBus.on('propertiesPanel.setLayout', cb);\n return () => eventBus.off('propertiesPanel.setLayout', cb);\n }, [eventBus, setLayoutConfig]);\n\n // (6) notify description changes\n const onDescriptionLoaded = description => {\n eventBus.fire('propertiesPanel.descriptionLoaded', {\n description\n });\n };\n\n // (7) notify tooltip changes\n const onTooltipLoaded = tooltip => {\n eventBus.fire('propertiesPanel.tooltipLoaded', {\n tooltip\n });\n };\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(BpmnPropertiesPanelContext.Provider, {\n value: bpmnPropertiesPanelContext,\n children: (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.PropertiesPanel, {\n element: selectedElement,\n headerProvider: PanelHeaderProvider(translate),\n placeholderProvider: PanelPlaceholderProvider(translate),\n groups: groups,\n layoutConfig: layoutConfig,\n layoutChanged: onLayoutChanged,\n descriptionConfig: descriptionConfig,\n descriptionLoaded: onDescriptionLoaded,\n tooltipConfig: tooltipConfig,\n tooltipLoaded: onTooltipLoaded,\n feelPopupContainer: feelPopupContainer,\n getFeelPopupLinks: getFeelPopupLinks,\n eventBus: eventBus\n })\n });\n}\n\n// helpers //////////////////////////\n\nfunction isImplicitRoot$1(element) {\n return element && element.isImplicit;\n}\nfunction findElement(elements, element) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(elements, e => e === element);\n}\nfunction elementExists(element, elementRegistry) {\n return element && elementRegistry.get(element.id);\n}\n\nconst DEFAULT_PRIORITY = 1000;\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').GroupDefinition } GroupDefinition\n * @typedef { import('@bpmn-io/properties-panel').ListGroupDefinition } ListGroupDefinition\n * @typedef { { getGroups: (ModdleElement) => (Array{GroupDefinition|ListGroupDefinition}) => Array{GroupDefinition|ListGroupDefinition}) } PropertiesProvider\n */\n\nclass BpmnPropertiesPanelRenderer {\n constructor(config, injector, eventBus) {\n const {\n parent,\n layout: layoutConfig,\n description: descriptionConfig,\n tooltip: tooltipConfig,\n feelPopupContainer,\n getFeelPopupLinks\n } = config || {};\n this._eventBus = eventBus;\n this._injector = injector;\n this._layoutConfig = layoutConfig;\n this._descriptionConfig = descriptionConfig;\n this._tooltipConfig = tooltipConfig;\n this._feelPopupContainer = feelPopupContainer;\n this._getFeelPopupLinks = getFeelPopupLinks;\n this._container = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.domify)('
');\n var commandStack = injector.get('commandStack', false);\n commandStack && setupKeyboard(this._container, eventBus, commandStack);\n eventBus.on('diagram.init', () => {\n if (parent) {\n this.attachTo(parent);\n }\n });\n eventBus.on('diagram.destroy', () => {\n this.detach();\n });\n eventBus.on('root.added', event => {\n const {\n element\n } = event;\n this._render(element);\n });\n }\n\n /**\n * Attach the properties panel to a parent node.\n *\n * @param {HTMLElement} container\n */\n attachTo(container) {\n if (!container) {\n throw new Error('container required');\n }\n\n // unwrap jQuery if provided\n if (container.get && container.constructor.prototype.jquery) {\n container = container.get(0);\n }\n if (typeof container === 'string') {\n container = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.query)(container);\n }\n\n // (1) detach from old parent\n this.detach();\n\n // (2) append to parent container\n container.appendChild(this._container);\n\n // (3) notify interested parties\n this._eventBus.fire('propertiesPanel.attach');\n }\n\n /**\n * Detach the properties panel from its parent node.\n */\n detach() {\n const parentNode = this._container.parentNode;\n if (parentNode) {\n parentNode.removeChild(this._container);\n this._eventBus.fire('propertiesPanel.detach');\n }\n }\n\n /**\n * Register a new properties provider to the properties panel.\n *\n * @param {Number} [priority]\n * @param {PropertiesProvider} provider\n */\n registerProvider(priority, provider) {\n if (!provider) {\n provider = priority;\n priority = DEFAULT_PRIORITY;\n }\n if (typeof provider.getGroups !== 'function') {\n console.error('Properties provider does not implement #getGroups(element) API');\n return;\n }\n this._eventBus.on('propertiesPanel.getProviders', priority, function (event) {\n event.providers.push(provider);\n });\n this._eventBus.fire('propertiesPanel.providersChanged');\n }\n\n /**\n * Updates the layout of the properties panel.\n * @param {Object} layout\n */\n setLayout(layout) {\n this._eventBus.fire('propertiesPanel.setLayout', {\n layout\n });\n }\n _getProviders() {\n const event = this._eventBus.createEvent({\n type: 'propertiesPanel.getProviders',\n providers: []\n });\n this._eventBus.fire(event);\n return event.providers;\n }\n _render(element) {\n const canvas = this._injector.get('canvas');\n if (!element) {\n element = canvas.getRootElement();\n }\n if (isImplicitRoot(element)) {\n return;\n }\n (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__.render)((0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(BpmnPropertiesPanel, {\n element: element,\n injector: this._injector,\n getProviders: this._getProviders.bind(this),\n layoutConfig: this._layoutConfig,\n descriptionConfig: this._descriptionConfig,\n tooltipConfig: this._tooltipConfig,\n feelPopupContainer: this._feelPopupContainer,\n getFeelPopupLinks: this._getFeelPopupLinks\n }), this._container);\n this._eventBus.fire('propertiesPanel.rendered');\n }\n _destroy() {\n if (this._container) {\n (0,_bpmn_io_properties_panel_preact__WEBPACK_IMPORTED_MODULE_2__.render)(null, this._container);\n this._eventBus.fire('propertiesPanel.destroyed');\n }\n }\n}\nBpmnPropertiesPanelRenderer.$inject = ['config.propertiesPanel', 'injector', 'eventBus'];\n\n// helpers ///////////////////////\n\nfunction isImplicitRoot(element) {\n return element && element.isImplicit;\n}\n\n/**\n * Setup keyboard bindings (undo, redo) on the given container.\n *\n * @param {Element} container\n * @param {EventBus} eventBus\n * @param {CommandStack} commandStack\n */\nfunction setupKeyboard(container, eventBus, commandStack) {\n function cancel(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n function handleKeys(event) {\n if ((0,diagram_js_lib_features_keyboard_KeyboardUtil__WEBPACK_IMPORTED_MODULE_14__.isUndo)(event)) {\n commandStack.undo();\n return cancel(event);\n }\n if ((0,diagram_js_lib_features_keyboard_KeyboardUtil__WEBPACK_IMPORTED_MODULE_14__.isRedo)(event)) {\n commandStack.redo();\n return cancel(event);\n }\n }\n eventBus.on('keyboard.bind', function () {\n min_dom__WEBPACK_IMPORTED_MODULE_13__.event.bind(container, 'keydown', handleKeys);\n });\n eventBus.on('keyboard.unbind', function () {\n min_dom__WEBPACK_IMPORTED_MODULE_13__.event.unbind(container, 'keydown', handleKeys);\n });\n}\n\n/**\n * A handler that combines and executes multiple commands.\n *\n * All updates are bundled on the command stack and executed in one step.\n * This also makes it possible to revert the changes in one step.\n *\n * Example use case: remove the camunda:formKey attribute and in addition\n * add all form fields needed for the camunda:formData property.\n */\nclass MultiCommandHandler {\n constructor(commandStack) {\n this._commandStack = commandStack;\n }\n preExecute(context) {\n const commandStack = this._commandStack;\n (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.forEach)(context, function (command) {\n commandStack.execute(command.cmd, command.context);\n });\n }\n}\nMultiCommandHandler.$inject = ['commandStack'];\n\nconst HANDLERS = {\n 'properties-panel.multi-command-executor': MultiCommandHandler\n};\nfunction CommandInitializer(eventBus, commandStack) {\n eventBus.on('diagram.init', function () {\n (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.forEach)(HANDLERS, function (handler, id) {\n commandStack.registerHandler(id, handler);\n });\n });\n}\nCommandInitializer.$inject = ['eventBus', 'commandStack'];\nvar Commands = {\n __init__: [CommandInitializer]\n};\n\nvar index$3 = {\n __depends__: [Commands, _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.DebounceInputModule, _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.FeelPopupModule],\n __init__: ['propertiesPanel'],\n propertiesPanel: ['type', BpmnPropertiesPanelRenderer]\n};\n\nfunction ReferenceSelectEntry(props) {\n const {\n autoFocusEntry,\n element,\n getOptions\n } = props;\n const options = getOptions(element);\n const prevOptions = (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.usePrevious)(options);\n\n // auto focus specifc other entry when options changed\n (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (autoFocusEntry && prevOptions && options.length > prevOptions.length) {\n const entry = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.query)(`[data-entry-id=\"${autoFocusEntry}\"]`);\n const focusableInput = (0,min_dom__WEBPACK_IMPORTED_MODULE_13__.query)('.bio-properties-panel-input', entry);\n if (focusableInput) {\n focusableInput.select();\n }\n }\n }, [options]);\n return (0,_bpmn_io_properties_panel_preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.SelectEntry, {\n ...props\n });\n}\n\nfunction isErrorSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:StartEvent', 'bpmn:BoundaryEvent', 'bpmn:EndEvent']) && !!getErrorEventDefinition$1(element);\n}\nfunction getErrorEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:ErrorEventDefinition');\n}\nfunction getTimerEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:TimerEventDefinition');\n}\nfunction getError(element) {\n const errorEventDefinition = getErrorEventDefinition$1(element);\n return errorEventDefinition && errorEventDefinition.get('errorRef');\n}\nfunction getEventDefinition$1(element, eventType) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n const eventDefinitions = businessObject.get('eventDefinitions') || [];\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(eventDefinitions, function (definition) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(definition, eventType);\n });\n}\nfunction isMessageSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ReceiveTask') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:StartEvent', 'bpmn:EndEvent', 'bpmn:IntermediateThrowEvent', 'bpmn:BoundaryEvent', 'bpmn:IntermediateCatchEvent']) && !!getMessageEventDefinition(element);\n}\nfunction getMessageEventDefinition(element) {\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:ReceiveTask')) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n }\n return getEventDefinition$1(element, 'bpmn:MessageEventDefinition');\n}\nfunction getMessage(element) {\n const messageEventDefinition = getMessageEventDefinition(element);\n return messageEventDefinition && messageEventDefinition.get('messageRef');\n}\nfunction getLinkEventDefinition(element) {\n return getEventDefinition$1(element, 'bpmn:LinkEventDefinition');\n}\nfunction getSignalEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:SignalEventDefinition');\n}\nfunction isLinkSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:IntermediateThrowEvent', 'bpmn:IntermediateCatchEvent']) && !!getLinkEventDefinition(element);\n}\nfunction isSignalSupported$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event') && !!getSignalEventDefinition$1(element);\n}\nfunction getSignal$1(element) {\n const signalEventDefinition = getSignalEventDefinition$1(element);\n return signalEventDefinition && signalEventDefinition.get('signalRef');\n}\nfunction getEscalationEventDefinition(element) {\n return getEventDefinition$1(element, 'bpmn:EscalationEventDefinition');\n}\nfunction isEscalationSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Event') && !!getEscalationEventDefinition(element);\n}\nfunction getEscalation(element) {\n const escalationEventDefinition = getEscalationEventDefinition(element);\n return escalationEventDefinition && escalationEventDefinition.get('escalationRef');\n}\nfunction isCompensationSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:EndEvent', 'bpmn:IntermediateThrowEvent']) && !!getCompensateEventDefinition$1(element);\n}\nfunction getCompensateEventDefinition$1(element) {\n return getEventDefinition$1(element, 'bpmn:CompensateEventDefinition');\n}\nfunction getCompensateActivity(element) {\n const compensateEventDefinition = getCompensateEventDefinition$1(element);\n return compensateEventDefinition && compensateEventDefinition.get('activityRef');\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction CompensationProps(props) {\n const {\n element\n } = props;\n if (!isCompensationSupported(element)) {\n return [];\n }\n return [{\n id: 'waitForCompletion',\n component: WaitForCompletion,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }, {\n id: 'activityRef',\n component: ActivityRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n}\nfunction WaitForCompletion(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const compensateEventDefinition = getCompensateEventDefinition$1(element);\n const getValue = () => {\n return compensateEventDefinition.get('waitForCompletion');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: compensateEventDefinition,\n properties: {\n waitForCompletion: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'waitForCompletion',\n label: translate('Wait for completion'),\n getValue,\n setValue\n });\n}\nfunction ActivityRef(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const elementRegistry = useService('elementRegistry');\n const translate = useService('translate');\n const compensateEventDefinition = getCompensateEventDefinition$1(element);\n const getValue = () => {\n const activityRef = getCompensateActivity(element);\n return activityRef && activityRef.get('id');\n };\n const setValue = value => {\n // update (or remove) activityRef\n const activityRef = value ? (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(elementRegistry.get(value)) : undefined;\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: compensateEventDefinition,\n properties: {\n activityRef\n }\n });\n };\n const getOptions = () => {\n let options = [{\n value: '',\n label: translate('')\n }];\n const activities = findActivityRefs(element);\n sortByName$6(activities).forEach(function (activity) {\n options.push({\n value: activity.id,\n label: createOptionLabel(activity)\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'activityRef',\n label: translate('Activity reference'),\n getValue,\n setValue,\n getOptions\n });\n}\n\n// helper /////////////////////////\n\nfunction getFlowElements(element, type) {\n const {\n flowElements\n } = element;\n return flowElements.filter(function (flowElement) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(flowElement, type);\n });\n}\nfunction getContainedActivities(element) {\n return getFlowElements(element, 'bpmn:Activity');\n}\nfunction getContainedBoundaryEvents(element) {\n return getFlowElements(element, 'bpmn:BoundaryEvent');\n}\n\n/**\n * Checks whether an Activity is attaching a CompensateEvent of the parent container.\n *\n * @param {ModdleElement} activity\n * @param {Array} boundaryEvents\n * @returns {Boolean}\n */\nfunction hasCompensationEventAttached(activity, boundaryEvents) {\n const {\n id: activityId\n } = activity;\n return !!(0,min_dash__WEBPACK_IMPORTED_MODULE_12__.find)(boundaryEvents, function (boundaryEvent) {\n const {\n attachedToRef\n } = boundaryEvent;\n const compensateEventDefinition = getCompensateEventDefinition$1(boundaryEvent);\n return attachedToRef && compensateEventDefinition && attachedToRef.id === activityId;\n });\n}\n\n/**\n * Checks whether an Activity can be compensated. That's the case when it is\n * a) a CallActivity\n * b) a SubProcess, when it is not event based and not a compensation\n * c) any other Activity, when it is attaching a CompensateEvent of the parent container\n *\n * @param {ModdleElement} activity\n * @param {Array} boundaryEvents\n * @returns {Boolean}\n */\nfunction canBeCompensated(activity, boundaryEvents) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(activity, 'bpmn:CallActivity') || (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(activity, 'bpmn:SubProcess') && !activity.triggeredByEvent && !activity.isForCompensation || hasCompensationEventAttached(activity, boundaryEvents);\n}\nfunction getActivitiesForCompensation(element) {\n const activities = getContainedActivities(element);\n const boundaryEvents = getContainedBoundaryEvents(element);\n return activities.filter(function (activity) {\n return canBeCompensated(activity, boundaryEvents);\n });\n}\n\n/**\n * Retrieves all possible activities to reference for a Compensation.\n *\n * @param {djs.model.Base} element\n * @returns {Array}\n */\nfunction findActivityRefs(element) {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n let parent = businessObject.$parent;\n\n // (1) get all activities in parent container\n let activities = getActivitiesForCompensation(parent);\n\n // (2) if throwing compensation event is inside an EventSubProcess,\n // also get all activities outside of the event sub process\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(parent, 'bpmn:SubProcess') && parent.triggeredByEvent) {\n parent = parent.$parent;\n if (parent) {\n activities = [...activities, ...getActivitiesForCompensation(parent)];\n }\n }\n return activities;\n}\n\n/**\n * Retrieves an option label in the form\n * a) with name: \"my Task (id=Task_1)\"\n * b) without name: \"(id=Task_1)\"\n *\n * @param {ModdleElement} activity\n * @returns {String}\n */\nfunction createOptionLabel(activity) {\n const {\n id,\n name\n } = activity;\n return `${name ? name + ' ' : ''}(id=${id})`;\n}\nfunction sortByName$6(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nconst DOCUMENTATION_TEXT_FORMAT = 'text/plain';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction DocumentationProps(props) {\n const {\n element\n } = props;\n const entries = [{\n id: 'documentation',\n component: ElementDocumentationProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n }];\n if (hasProcessRef$3(element)) {\n entries.push({\n id: 'processDocumentation',\n component: ProcessDocumentationProperty,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n });\n }\n return entries;\n}\nfunction ElementDocumentationProperty(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const getValue = getDocumentation((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element));\n const setValue = setDocumentation(element, (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), bpmnFactory, commandStack);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element,\n id: 'documentation',\n label: translate('Element documentation'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ProcessDocumentationProperty(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const processRef = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).processRef;\n const getValue = getDocumentation(processRef);\n const setValue = setDocumentation(element, processRef, bpmnFactory, commandStack);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)({\n element,\n id: 'processDocumentation',\n label: translate('Process documentation'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ////////////////////////////\n\nfunction hasProcessRef$3(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\nfunction findDocumentation(docs) {\n return docs.find(function (d) {\n return (d.textFormat || DOCUMENTATION_TEXT_FORMAT) === DOCUMENTATION_TEXT_FORMAT;\n });\n}\n\n/**\n * Retrieves a documentation element from a given moddle element.\n *\n * @param {ModdleElement} businessObject\n *\n * @returns {ModdleElement} documentation element inside the given moddle element.\n */\nfunction getDocumentation(businessObject) {\n return function () {\n const documentation = findDocumentation(businessObject && businessObject.get('documentation'));\n return documentation && documentation.text;\n };\n}\n\n/**\n * Sets a documentation element for a given moddle element.\n *\n * @param {ModdleElement} businessObject\n */\nfunction setDocumentation(element, businessObject, bpmnFactory, commandStack) {\n return function (value) {\n let documentation = findDocumentation(businessObject && businessObject.get('documentation'));\n\n // (1) update or removing existing documentation\n if (documentation) {\n if (value) {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: documentation,\n properties: {\n text: value\n }\n });\n } else {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n documentation: (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.without)(businessObject.get('documentation'), documentation)\n }\n });\n }\n }\n\n // (2) create new documentation entry\n if (value) {\n documentation = bpmnFactory.create('bpmn:Documentation', {\n text: value\n });\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: businessObject,\n properties: {\n documentation: [...businessObject.get('documentation'), documentation]\n }\n });\n }\n };\n}\n\n/**\n * Create a new element and (optionally) set its parent.\n *\n * @param {string} type\n * @param {Object} properties\n * @param {import('bpmn-js/lib/model/Types').ModdleElement} parent\n * @param {import('bpmn-js/lib/features/modeling/BpmnFactory').default} bpmnFactory\n *\n * @returns {import('bpmn-js/lib/model/Types').ModdleElement}\n */\nfunction createElement(type, properties, parent, bpmnFactory) {\n const element = bpmnFactory.create(type, properties);\n if (parent) {\n element.$parent = parent;\n }\n return element;\n}\n\n/**\n * generate a semantic id with given prefix\n */\nfunction nextId(prefix) {\n const ids = new ids__WEBPACK_IMPORTED_MODULE_5__[\"default\"]([32, 32, 1]);\n return ids.nextPrefixed(prefix);\n}\nfunction getRoot(businessObject) {\n let parent = businessObject;\n while (parent.$parent) {\n parent = parent.$parent;\n }\n return parent;\n}\nfunction filterElementsByType(objectList, type) {\n const list = objectList || [];\n return list.filter(element => (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, type));\n}\nfunction findRootElementsByType(businessObject, referencedType) {\n const root = getRoot(businessObject);\n return filterElementsByType(root.get('rootElements'), referencedType);\n}\nfunction findRootElementById(businessObject, type, id) {\n const elements = findRootElementsByType(businessObject, type);\n return elements.find(element => element.id === id);\n}\n\nconst EMPTY_OPTION$4 = '';\nconst CREATE_NEW_OPTION$4 = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ErrorProps$2(props) {\n const {\n element\n } = props;\n if (!isErrorSupported(element)) {\n return [];\n }\n const error = getError(element);\n let entries = [{\n id: 'errorRef',\n component: ErrorRef$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (error) {\n entries = [...entries, {\n id: 'errorName',\n component: ErrorName$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'errorCode',\n component: ErrorCode$2,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction ErrorRef$1(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const errorEventDefinition = getErrorEventDefinition$1(element);\n const getValue = () => {\n const error = getError(element);\n if (error) {\n return error.get('id');\n }\n return EMPTY_OPTION$4;\n };\n const setValue = value => {\n const root = getRoot(errorEventDefinition);\n const commands = [];\n let error;\n\n // (1) create new error\n if (value === CREATE_NEW_OPTION$4) {\n error = createElement('bpmn:Error', {\n name: nextId('Error_')\n }, root, bpmnFactory);\n value = error.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), error]\n }\n }\n });\n }\n\n // (2) update (or remove) errorRef\n error = error || findRootElementById(errorEventDefinition, 'bpmn:Error', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: errorEventDefinition,\n properties: {\n errorRef: error\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION$4,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$4,\n label: translate('Create new ...')\n }];\n const errors = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Error');\n sortByName$5(errors).forEach(error => {\n options.push({\n value: error.get('id'),\n label: error.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'errorRef',\n label: translate('Global error reference'),\n autoFocusEntry: 'errorName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction ErrorName$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const error = getError(element);\n const getValue = () => {\n return error.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ErrorCode$2(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const error = getError(element);\n const getValue = () => {\n return error.get('errorCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: error,\n properties: {\n errorCode: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'errorCode',\n label: translate('Code'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$5(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nconst CREATE_NEW_OPTION$3 = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction EscalationProps$2(props) {\n const {\n element\n } = props;\n if (!isEscalationSupported(element)) {\n return [];\n }\n const escalation = getEscalation(element);\n let entries = [{\n id: 'escalationRef',\n component: EscalationRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (escalation) {\n entries = [...entries, {\n id: 'escalationName',\n component: EscalationName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'escalationCode',\n component: EscalationCode$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction EscalationRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const escalationEventDefinition = getEscalationEventDefinition(element);\n const getValue = () => {\n const escalation = getEscalation(element);\n return escalation && escalation.get('id');\n };\n const setValue = value => {\n const root = getRoot(escalationEventDefinition);\n const commands = [];\n let escalation;\n\n // (1) create new escalation\n if (value === CREATE_NEW_OPTION$3) {\n const id = nextId('Escalation_');\n escalation = createElement('bpmn:Escalation', {\n id,\n name: id\n }, root, bpmnFactory);\n value = escalation.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), escalation]\n }\n }\n });\n }\n\n // (2) update (or remove) escalationRef\n escalation = escalation || findRootElementById(escalationEventDefinition, 'bpmn:Escalation', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: escalationEventDefinition,\n properties: {\n escalationRef: escalation\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: '',\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$3,\n label: translate('Create new ...')\n }];\n const escalations = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Escalation');\n sortByName$4(escalations).forEach(escalation => {\n options.push({\n value: escalation.get('id'),\n label: escalation.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'escalationRef',\n label: translate('Global escalation reference'),\n autoFocusEntry: 'escalationName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction EscalationName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const escalation = getEscalation(element);\n const getValue = () => {\n return escalation.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: escalation,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'escalationName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction EscalationCode$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const escalation = getEscalation(element);\n const getValue = () => {\n return escalation.get('escalationCode');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: escalation,\n properties: {\n escalationCode: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'escalationCode',\n label: translate('Code'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$4(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ExecutableProps(props) {\n const {\n element\n } = props;\n if (!(0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Process') && !hasProcessRef$2(element)) {\n return [];\n }\n return [{\n id: 'isExecutable',\n component: Executable,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isCheckboxEntryEdited\n }];\n}\nfunction Executable(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n let getValue, setValue;\n setValue = value => {\n modeling.updateProperties(element, {\n isExecutable: value\n });\n };\n getValue = element => {\n return element.businessObject.isExecutable;\n };\n\n // handle properties on processRef level for participants\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n const process = element.businessObject.get('processRef');\n setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n isExecutable: value\n }\n });\n };\n getValue = () => {\n return process.get('isExecutable');\n };\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.CheckboxEntry)({\n element,\n id: 'isExecutable',\n label: translate('Executable'),\n getValue,\n setValue\n });\n}\n\n// helper /////////////////////\n\nfunction hasProcessRef$2(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\n\nconst SPACE_REGEX = /\\s/;\n\n// for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar\nconst QNAME_REGEX = /^([a-z][\\w-.]*:)?[a-z_][\\w-.]*$/i;\n\n// for ID validation as per BPMN Schema (QName - Namespace)\nconst ID_REGEX = /^[a-z_][\\w-.]*$/i;\n\n/**\n * checks whether the id value is valid\n *\n * @param {ModdleElement} element\n * @param {String} idValue\n * @param {Function} translate\n *\n * @return {String} error message\n */\nfunction isIdValid(element, idValue, translate) {\n const assigned = element.$model.ids.assigned(idValue);\n const idAlreadyExists = assigned && assigned !== element;\n if (!idValue) {\n return translate('ID must not be empty.');\n }\n if (idAlreadyExists) {\n return translate('ID must be unique.');\n }\n return validateId(idValue, translate);\n}\nfunction validateId(idValue, translate) {\n if (containsSpace(idValue)) {\n return translate('ID must not contain spaces.');\n }\n if (!ID_REGEX.test(idValue)) {\n if (QNAME_REGEX.test(idValue)) {\n return translate('ID must not contain prefix.');\n }\n return translate('ID must be a valid QName.');\n }\n}\nfunction containsSpace(value) {\n return SPACE_REGEX.test(value);\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction IdProps$1() {\n return [{\n id: 'id',\n component: Id$4,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction Id$4(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const debounce = useService('debounceInput');\n const translate = useService('translate');\n const setValue = (value, error) => {\n if (error) {\n return;\n }\n modeling.updateProperties(element, {\n id: value\n });\n };\n const getValue = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(element => {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element).id;\n }, [element]);\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return isIdValid(businessObject, value, translate);\n }, [element, translate]);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'id',\n label: translate((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') ? 'Participant ID' : 'ID'),\n getValue,\n setValue,\n debounce,\n validate\n });\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction LinkProps(props) {\n const {\n element\n } = props;\n if (!isLinkSupported(element)) {\n return [];\n }\n return [{\n id: 'linkName',\n component: LinkName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction LinkName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const linkEventDefinition = getLinkEventDefinition(element);\n const getValue = () => {\n return linkEventDefinition.get('name');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: linkEventDefinition,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'linkName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\nconst EMPTY_OPTION$3 = '';\nconst CREATE_NEW_OPTION$2 = 'create-new';\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction MessageProps$1(props) {\n const {\n element\n } = props;\n if (!isMessageSupported(element)) {\n return [];\n }\n const message = getMessage(element);\n let entries = [{\n id: 'messageRef',\n component: MessageRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (message) {\n entries = [...entries, {\n id: 'messageName',\n component: MessageName$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction MessageRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const messageEventDefinition = getMessageEventDefinition(element);\n const getValue = () => {\n const message = getMessage(element);\n if (message) {\n return message.get('id');\n }\n return EMPTY_OPTION$3;\n };\n const setValue = value => {\n const root = getRoot(messageEventDefinition);\n const commands = [];\n let message;\n\n // (1) create new message\n if (value === CREATE_NEW_OPTION$2) {\n const id = nextId('Message_');\n message = createElement('bpmn:Message', {\n id,\n name: id\n }, root, bpmnFactory);\n value = message.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), message]\n }\n }\n });\n }\n\n // (2) update (or remove) messageRef\n message = message || findRootElementById(messageEventDefinition, 'bpmn:Message', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: messageEventDefinition,\n properties: {\n messageRef: message\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION$3,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$2,\n label: translate('Create new ...')\n }];\n const messages = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Message');\n sortByName$3(messages).forEach(message => {\n options.push({\n value: message.get('id'),\n label: message.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'messageRef',\n label: translate('Global message reference'),\n autoFocusEntry: 'messageName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction MessageName$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const message = getMessage(element);\n const getValue = () => {\n return message.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: message,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'messageName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$3(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction MultiInstanceProps$2(props) {\n const {\n element\n } = props;\n if (!isMultiInstanceSupported$1(element)) {\n return [];\n }\n const entries = [{\n id: 'loopCardinality',\n component: LoopCardinality,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'completionCondition',\n component: CompletionCondition$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n return entries;\n}\nfunction LoopCardinality(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getLoopCardinalityValue(element);\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', updateFormalExpression(element, 'loopCardinality', value, bpmnFactory));\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'loopCardinality',\n label: translate('Loop cardinality'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction CompletionCondition$1(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const debounce = useService('debounceInput');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const getValue = () => {\n return getCompletionConditionValue(element);\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', updateFormalExpression(element, 'completionCondition', value, bpmnFactory));\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'completionCondition',\n label: translate('Completion condition'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper ////////////////////////////\n\n// generic ///////////////////////////\n\n/**\n * isMultiInstanceSupported - check whether given element supports MultiInstanceLoopCharacteristics.\n *\n * @param {djs.model.Base} element\n * @return {boolean}\n */\nfunction isMultiInstanceSupported$1(element) {\n const loopCharacteristics = getLoopCharacteristics$2(element);\n return !!loopCharacteristics && (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(loopCharacteristics, 'bpmn:MultiInstanceLoopCharacteristics');\n}\n\n/**\n * getBody - get the body of a given expression.\n *\n * @param {ModdleElement} expression\n * @return {string} the body (value) of the expression\n */\nfunction getBody(expression) {\n return expression && expression.get('body');\n}\n\n/**\n * getProperty - get a property value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n * @param {string} propertyName\n *\n * @return {any} the property value\n */\nfunction getProperty$2(element, propertyName) {\n const loopCharacteristics = getLoopCharacteristics$2(element);\n return loopCharacteristics && loopCharacteristics.get(propertyName);\n}\n\n/**\n * getLoopCharacteristics - get loopCharacteristics of a given element.\n *\n * @param {djs.model.Base} element\n * @return {ModdleElement | undefined}\n */\nfunction getLoopCharacteristics$2(element) {\n const bo = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element);\n return bo.loopCharacteristics;\n}\n\n/**\n * createFormalExpression - creates a 'bpmn:FormalExpression' element.\n *\n * @param {ModdleElement} parent\n * @param {string} body\n * @param {BpmnFactory} bpmnFactory\n *\n * @result {ModdleElement} a formal expression\n */\nfunction createFormalExpression$1(parent, body, bpmnFactory) {\n return createElement('bpmn:FormalExpression', {\n body: body\n }, parent, bpmnFactory);\n}\n\n/**\n * updateFormalExpression - updates a specific formal expression of the loop characteristics.\n *\n * @param {djs.model.Base} element\n * @param {string} propertyName\n * @param {string} newValue\n * @param {BpmnFactory} bpmnFactory\n */\nfunction updateFormalExpression(element, propertyName, newValue, bpmnFactory) {\n const loopCharacteristics = getLoopCharacteristics$2(element);\n const expressionProps = {};\n if (!newValue) {\n // remove formal expression\n expressionProps[propertyName] = undefined;\n return {\n element,\n moddleElement: loopCharacteristics,\n properties: expressionProps\n };\n }\n const existingExpression = loopCharacteristics.get(propertyName);\n if (!existingExpression) {\n // add formal expression\n expressionProps[propertyName] = createFormalExpression$1(loopCharacteristics, newValue, bpmnFactory);\n return {\n element,\n moddleElement: loopCharacteristics,\n properties: expressionProps\n };\n }\n\n // edit existing formal expression\n return {\n element,\n moddleElement: existingExpression,\n properties: {\n body: newValue\n }\n };\n}\n\n// loopCardinality\n\n/**\n * getLoopCardinality - get the loop cardinality of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {ModdleElement} an expression representing the loop cardinality\n */\nfunction getLoopCardinality(element) {\n return getProperty$2(element, 'loopCardinality');\n}\n\n/**\n * getLoopCardinalityValue - get the loop cardinality value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {string} the loop cardinality value\n */\nfunction getLoopCardinalityValue(element) {\n const loopCardinality = getLoopCardinality(element);\n return getBody(loopCardinality);\n}\n\n// completionCondition /////////////////////\n\n/**\n * getCompletionCondition - get the completion condition of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {ModdleElement} an expression representing the completion condition\n */\nfunction getCompletionCondition$1(element) {\n return getProperty$2(element, 'completionCondition');\n}\n\n/**\n * getCompletionConditionValue - get the completion condition value of the loop characteristics.\n *\n * @param {djs.model.Base} element\n *\n * @return {string} the completion condition value\n */\nfunction getCompletionConditionValue(element) {\n const completionCondition = getCompletionCondition$1(element);\n return getBody(completionCondition);\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction NameProps(props) {\n const {\n element\n } = props;\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:Collaboration', 'bpmn:DataAssociation', 'bpmn:Association'])) {\n return [];\n }\n return [{\n id: 'name',\n component: Name$3,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextAreaEntryEdited\n }];\n}\nfunction Name$3(props) {\n const {\n element\n } = props;\n const modeling = useService('modeling');\n const debounce = useService('debounceInput');\n const canvas = useService('canvas');\n const bpmnFactory = useService('bpmnFactory');\n const translate = useService('translate');\n\n // (1) default: name\n let options = {\n element,\n id: 'name',\n label: translate('Name'),\n debounce,\n setValue: value => {\n modeling.updateProperties(element, {\n name: value\n });\n },\n getValue: element => {\n return element.businessObject.name;\n },\n autoResize: true\n };\n\n // (2) text annotations\n if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:TextAnnotation')) {\n options = {\n ...options,\n setValue: value => {\n modeling.updateProperties(element, {\n text: value\n });\n },\n getValue: element => {\n return element.businessObject.text;\n }\n };\n }\n\n // (3) groups\n else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Group')) {\n options = {\n ...options,\n setValue: value => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n categoryValueRef = businessObject.categoryValueRef;\n if (!categoryValueRef) {\n initializeCategory(businessObject, canvas.getRootElement(), bpmnFactory);\n }\n modeling.updateLabel(element, value);\n },\n getValue: element => {\n const businessObject = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element),\n categoryValueRef = businessObject.categoryValueRef;\n return categoryValueRef && categoryValueRef.value;\n }\n };\n }\n\n // (4) participants (only update label)\n else if ((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant')) {\n options.label = translate('Participant Name');\n }\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextAreaEntry)(options);\n}\n\n// helpers ////////////////////////\n\nfunction initializeCategory(businessObject, rootElement, bpmnFactory) {\n const definitions = (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(rootElement).$parent;\n const categoryValue = createCategoryValue(definitions, bpmnFactory);\n businessObject.categoryValueRef = categoryValue;\n}\nfunction createCategoryValue(definitions, bpmnFactory) {\n const categoryValue = bpmnFactory.create('bpmn:CategoryValue');\n const category = bpmnFactory.create('bpmn:Category', {\n categoryValue: [categoryValue]\n });\n\n // add to correct place\n (0,diagram_js_lib_util_Collections__WEBPACK_IMPORTED_MODULE_15__.add)(definitions.get('rootElements'), category);\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(category).$parent = definitions;\n (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(categoryValue).$parent = category;\n return categoryValue;\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\n/**\n * @returns {Array} entries\n */\nfunction ProcessProps$1(props) {\n const {\n element\n } = props;\n if (!hasProcessRef$1(element)) {\n return [];\n }\n return [{\n id: 'processId',\n component: ProcessId$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }, {\n id: 'processName',\n component: ProcessName,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n}\nfunction ProcessName(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = element.businessObject.get('processRef');\n const getValue = () => {\n return process.get('name');\n };\n const setValue = value => {\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'processName',\n label: translate('Process name'),\n getValue,\n setValue,\n debounce\n });\n}\nfunction ProcessId$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const process = element.businessObject.get('processRef');\n const getValue = () => {\n return process.get('id');\n };\n const setValue = (value, error) => {\n if (error) {\n return;\n }\n commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: process,\n properties: {\n id: value\n }\n });\n };\n const validate = (0,_bpmn_io_properties_panel_preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(value => {\n return isIdValid(process, value, translate);\n }, [process, translate]);\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'processId',\n label: translate('Process ID'),\n getValue,\n setValue,\n debounce,\n validate\n });\n}\n\n// helper ////////////////\n\nfunction hasProcessRef$1(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.is)(element, 'bpmn:Participant') && element.businessObject.get('processRef');\n}\n\n/**\n * @typedef { import('@bpmn-io/properties-panel').EntryDefinition } Entry\n */\n\nconst EMPTY_OPTION$2 = '';\nconst CREATE_NEW_OPTION$1 = 'create-new';\n\n/**\n * @returns {Entry[]}\n */\nfunction SignalProps$1(props) {\n const {\n element\n } = props;\n if (!isSignalSupported$1(element)) {\n return [];\n }\n const signal = getSignal$1(element);\n let entries = [{\n id: 'signalRef',\n component: SignalRef,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isSelectEntryEdited\n }];\n if (signal) {\n entries = [...entries, {\n id: 'signalName',\n component: SignalName$1,\n isEdited: _bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.isTextFieldEntryEdited\n }];\n }\n return entries;\n}\nfunction SignalRef(props) {\n const {\n element\n } = props;\n const bpmnFactory = useService('bpmnFactory');\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const signalEventDefinition = getSignalEventDefinition$1(element);\n const getValue = () => {\n const signal = getSignal$1(element);\n if (signal) {\n return signal.get('id');\n }\n return EMPTY_OPTION$2;\n };\n const setValue = value => {\n const root = getRoot(signalEventDefinition);\n const commands = [];\n let signal;\n\n // (1) create new signal\n if (value === CREATE_NEW_OPTION$1) {\n const id = nextId('Signal_');\n signal = createElement('bpmn:Signal', {\n id,\n name: id\n }, root, bpmnFactory);\n value = signal.get('id');\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: root,\n properties: {\n rootElements: [...root.get('rootElements'), signal]\n }\n }\n });\n }\n\n // (2) update (or remove) signalRef\n signal = signal || findRootElementById(signalEventDefinition, 'bpmn:Signal', value);\n commands.push({\n cmd: 'element.updateModdleProperties',\n context: {\n element,\n moddleElement: signalEventDefinition,\n properties: {\n signalRef: signal\n }\n }\n });\n\n // (3) commit all updates\n return commandStack.execute('properties-panel.multi-command-executor', commands);\n };\n const getOptions = () => {\n let options = [{\n value: EMPTY_OPTION$2,\n label: translate('')\n }, {\n value: CREATE_NEW_OPTION$1,\n label: translate('Create new ...')\n }];\n const signals = findRootElementsByType((0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.getBusinessObject)(element), 'bpmn:Signal');\n sortByName$2(signals).forEach(signal => {\n options.push({\n value: signal.get('id'),\n label: signal.get('name')\n });\n });\n return options;\n };\n return ReferenceSelectEntry({\n element,\n id: 'signalRef',\n label: translate('Global signal reference'),\n autoFocusEntry: 'signalName',\n getValue,\n setValue,\n getOptions\n });\n}\nfunction SignalName$1(props) {\n const {\n element\n } = props;\n const commandStack = useService('commandStack');\n const translate = useService('translate');\n const debounce = useService('debounceInput');\n const signal = getSignal$1(element);\n const getValue = () => {\n return signal.get('name');\n };\n const setValue = value => {\n return commandStack.execute('element.updateModdleProperties', {\n element,\n moddleElement: signal,\n properties: {\n name: value\n }\n });\n };\n return (0,_bpmn_io_properties_panel__WEBPACK_IMPORTED_MODULE_1__.TextFieldEntry)({\n element,\n id: 'signalName',\n label: translate('Name'),\n getValue,\n setValue,\n debounce\n });\n}\n\n// helper /////////////////////////\n\nfunction sortByName$2(elements) {\n return (0,min_dash__WEBPACK_IMPORTED_MODULE_12__.sortBy)(elements, e => (e.name || '').toLowerCase());\n}\n\nfunction getErrorEventDefinition(element) {\n return getEventDefinition(element, 'bpmn:ErrorEventDefinition');\n}\nfunction isTimerSupported(element) {\n return (0,bpmn_js_lib_util_ModelUtil__WEBPACK_IMPORTED_MODULE_9__.isAny)(element, ['bpmn:StartEvent', 'bpmn:IntermediateCatchEvent', 'bpmn:BoundaryEvent']) && !!getTimerEventDefinition(element);\n}\n\n/**\n * Get the timer definition type for a given timer event definition.\n *\n * @param {ModdleElement