@1money/react-ui 1.7.20 → 1.7.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.zh-CN.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # @1money/react-ui
2
- @1money co 的 React 组件库
2
+
3
+ 基于 PrimeReact 构建的综合性 React 组件库,专为金融应用程序和现代 Web 界面设计。
3
4
 
4
5
  [![Build Status](https://github.com/1Money-Co/1money-react-ui/actions/workflows/cicd-npm.yml/badge.svg)](https://github.com/1Money-Co/1money-react-ui/actions/workflows/cicd-npm.yml)
5
6
  [![NPM downloads](http://img.shields.io/npm/dm/%401money%2Freact-ui.svg?style=flat-square)](https://www.npmjs.com/package/@1money/react-ui)
@@ -7,32 +8,442 @@
7
8
  [![install size](https://packagephobia.now.sh/badge?p=%401money%2Freact-ui)](https://packagephobia.now.sh/result?p=%401money%2Freact-ui)
8
9
  [![license](http://img.shields.io/npm/l/%401money%2Freact-ui.svg)](https://github.com/1money/tpls/blob/master/packages/react-ui/LICENSE)
9
10
 
10
- [在线预览](https://1money-co.github.io/1money-react-ui/)
11
+ 📖 [在线文档 & Storybook](https://1money-co.github.io/1money-react-ui/)
11
12
 
12
13
  [English](./README.md) | 简体中文
13
14
 
14
- ## 快速开始
15
- ### 安装
16
- ```shell
17
- npm i -S @1money/react-ui
18
- # 或者
15
+ ## ✨ 特性
16
+
17
+ - 🎨 **30+ 高质量组件** - 基于 PrimeReact 构建,具有增强样式
18
+ - 💰 **金融应用就绪** - 专为金融科技界面设计的组件
19
+ - 🎯 **TypeScript 支持** - 完整的 TypeScript 定义和严格类型检查
20
+ - 📱 **响应式设计** - 移动优先方法,集成 TailwindCSS
21
+ - ♿ **无障碍优先** - 符合 WCAG 标准,支持键盘导航
22
+ - 🌍 **国际化就绪** - 开箱即用的国际化支持
23
+ - 🎭 **可自定义主题** - 使用 SCSS 变量轻松自定义
24
+ - 📦 **Tree Shaking** - 通过单独组件导入优化包大小
25
+
26
+ ## 📦 安装
27
+
28
+ ```bash
29
+ # npm
30
+ npm install @1money/react-ui
31
+
32
+ # yarn
19
33
  yarn add @1money/react-ui
20
- # 或者
21
- pnpm i -S @1money/react-ui
34
+
35
+ # pnpm
36
+ pnpm add @1money/react-ui
37
+ ```
38
+
39
+ ### 同伴依赖
40
+
41
+ 确保已安装所需的同伴依赖:
42
+
43
+ ```bash
44
+ npm install react react-dom primereact primeicons tailwindcss
45
+ ```
46
+
47
+ ## 🚀 快速开始
48
+
49
+ ### 基础设置
50
+
51
+ ```tsx
52
+ import '@1money/react-ui/index.css';
53
+ import { Button, Input, Modal } from '@1money/react-ui';
54
+
55
+ function App() {
56
+ return (
57
+ <div className="p-4">
58
+ <Button severity="primary">开始使用</Button>
59
+ </div>
60
+ );
61
+ }
62
+ ```
63
+
64
+ ### 单独组件导入
65
+
66
+ 为了更好的 tree shaking,可以单独导入组件:
67
+
68
+ ```tsx
69
+ import { Button } from '@1money/react-ui/Button';
70
+ import { Input } from '@1money/react-ui/Input';
71
+ import { Modal } from '@1money/react-ui/Modal';
72
+ import '@1money/react-ui/index.css';
73
+ ```
74
+
75
+ ## 📋 组件分类
76
+
77
+ ### 🎮 表单组件
78
+ 构建复杂表单和数据输入界面的完美选择。
79
+
80
+ ```tsx
81
+ import { Button, Input, Checkbox, Radio, Switch, Select } from '@1money/react-ui';
82
+
83
+ // 表单示例
84
+ <form className="space-y-4">
85
+ <Input
86
+ type="text"
87
+ label="姓名"
88
+ placeholder="请输入您的姓名"
89
+ required
90
+ />
91
+
92
+ <Input
93
+ type="number"
94
+ label="投资金额"
95
+ prefixEle="¥"
96
+ placeholder="0.00"
97
+ />
98
+
99
+ <Select
100
+ label="账户类型"
101
+ options={[
102
+ { label: '活期账户', value: 'checking' },
103
+ { label: '储蓄账户', value: 'savings' },
104
+ { label: '投资账户', value: 'investment' }
105
+ ]}
106
+ />
107
+
108
+ <div className="flex items-center gap-2">
109
+ <Checkbox inputId="terms" />
110
+ <label htmlFor="terms">我同意条款和条件</label>
111
+ </div>
112
+
113
+ <Button type="submit" severity="primary">
114
+ 创建账户
115
+ </Button>
116
+ </form>
117
+ ```
118
+
119
+ ### 💼 金融组件
120
+ 专为金融应用程序设计的专业组件。
121
+
122
+ ```tsx
123
+ import { InputAmount, Badge, Progress, Table } from '@1money/react-ui';
124
+
125
+ // 金融仪表板示例
126
+ <div className="financial-dashboard">
127
+ <div className="balance-card">
128
+ <h3>账户余额</h3>
129
+ <InputAmount
130
+ value={125430.50}
131
+ precision={2}
132
+ disabled
133
+ prefixEle="¥"
134
+ />
135
+ <Badge severity="success" value="↑ 12.5%" />
136
+ </div>
137
+
138
+ <Progress
139
+ type="ring"
140
+ value={75}
141
+ label="投资组合增长"
142
+ color="var(--primary-color)"
143
+ />
144
+ </div>
145
+ ```
146
+
147
+ ### 🎨 布局和导航
148
+ 构建复杂布局和导航系统。
149
+
150
+ ```tsx
151
+ import { Sidebar, Tab, Menu, Collapse } from '@1money/react-ui';
152
+
153
+ // 应用程序布局
154
+ <div className="app-layout">
155
+ <Sidebar
156
+ items={[
157
+ { label: '仪表板', icon: 'dashboard', command: () => navigate('/dashboard') },
158
+ { label: '账户', icon: 'account-balance', command: () => navigate('/accounts') },
159
+ { label: '交易记录', icon: 'receipt', command: () => navigate('/transactions') },
160
+ { label: '设置', icon: 'settings', command: () => navigate('/settings') }
161
+ ]}
162
+ />
163
+
164
+ <main className="main-content">
165
+ <Tab
166
+ items={[
167
+ { label: '概览', content: <DashboardOverview /> },
168
+ { label: '分析', content: <Analytics />, count: 3 },
169
+ { label: '报告', content: <Reports /> }
170
+ ]}
171
+ />
172
+ </main>
173
+ </div>
174
+ ```
175
+
176
+ ### 📊 数据展示
177
+ 以表格、列表和其他格式展示数据。
178
+
179
+ ```tsx
180
+ import { Table, Cell, Typography, Loading } from '@1money/react-ui';
181
+
182
+ // 交易记录表格
183
+ const transactions = [
184
+ { id: 1, date: '2024-01-15', description: '咖啡店', amount: -4.50, category: '餐饮' },
185
+ { id: 2, date: '2024-01-14', description: '工资入账', amount: 3500.00, category: '收入' },
186
+ { id: 3, date: '2024-01-13', description: '超市购物', amount: -89.32, category: '购物' }
187
+ ];
188
+
189
+ <Table
190
+ data={transactions}
191
+ selectionMode="multiple"
192
+ pagination
193
+ pageSize={10}
194
+ >
195
+ <Column field="date" header="日期" />
196
+ <Column field="description" header="描述" />
197
+ <Column
198
+ field="amount"
199
+ header="金额"
200
+ body={(rowData) => (
201
+ <Typography.Body
202
+ className={rowData.amount > 0 ? 'text-green-600' : 'text-red-600'}
203
+ >
204
+ ¥{Math.abs(rowData.amount).toFixed(2)}
205
+ </Typography.Body>
206
+ )}
207
+ />
208
+ <Column field="category" header="类别" />
209
+ </Table>
210
+ ```
211
+
212
+ ### 💬 反馈组件
213
+ 提供用户反馈和系统状态。
214
+
215
+ ```tsx
216
+ import { Toast, Notification, Message, Progress } from '@1money/react-ui';
217
+
218
+ // 支付处理反馈
219
+ const PaymentFlow = () => {
220
+ const [processing, setProcessing] = useState(false);
221
+ const toast = useRef<Toast>(null);
222
+
223
+ const processPayment = async () => {
224
+ setProcessing(true);
225
+
226
+ try {
227
+ await paymentAPI.process();
228
+ toast.current?.show({
229
+ severity: 'success',
230
+ summary: '支付成功',
231
+ detail: '您的支付已成功处理'
232
+ });
233
+ } catch (error) {
234
+ toast.current?.show({
235
+ severity: 'error',
236
+ summary: '支付失败',
237
+ detail: error.message
238
+ });
239
+ } finally {
240
+ setProcessing(false);
241
+ }
242
+ };
243
+
244
+ return (
245
+ <div>
246
+ <Button
247
+ onClick={processPayment}
248
+ loading={processing}
249
+ disabled={processing}
250
+ >
251
+ 处理支付
252
+ </Button>
253
+
254
+ {processing && (
255
+ <Progress
256
+ type="bar"
257
+ mode="indeterminate"
258
+ className="mt-4"
259
+ />
260
+ )}
261
+
262
+ <Toast ref={toast} />
263
+ </div>
264
+ );
265
+ };
266
+ ```
267
+
268
+ ### 🎭 交互组件
269
+ 模态框、弹窗和其他交互元素。
270
+
271
+ ```tsx
272
+ import { Modal, Popup, Tooltip, ConfirmPopup } from '@1money/react-ui';
273
+
274
+ // 账户删除确认
275
+ const AccountSettings = () => {
276
+ const [deleteModalVisible, setDeleteModalVisible] = useState(false);
277
+
278
+ return (
279
+ <div className="account-settings">
280
+ <Tooltip target=".delete-btn" content="此操作无法撤消">
281
+ <Button
282
+ className="delete-btn"
283
+ severity="danger"
284
+ outlined
285
+ onClick={() => setDeleteModalVisible(true)}
286
+ >
287
+ 删除账户
288
+ </Button>
289
+ </Tooltip>
290
+
291
+ <Modal
292
+ visible={deleteModalVisible}
293
+ onHide={() => setDeleteModalVisible(false)}
294
+ header="确认删除账户"
295
+ footer={
296
+ <div className="flex gap-2">
297
+ <Button
298
+ severity="secondary"
299
+ onClick={() => setDeleteModalVisible(false)}
300
+ >
301
+ 取消
302
+ </Button>
303
+ <Button
304
+ severity="danger"
305
+ onClick={handleAccountDeletion}
306
+ >
307
+ 删除账户
308
+ </Button>
309
+ </div>
310
+ }
311
+ >
312
+ <Message
313
+ severity="warn"
314
+ text="这将永久删除您的账户和所有相关数据。"
315
+ />
316
+ <Typography.Body className="mt-4">
317
+ 您确定要继续吗?此操作无法撤消。
318
+ </Typography.Body>
319
+ </Modal>
320
+ </div>
321
+ );
322
+ };
323
+ ```
324
+
325
+ ## 🎨 主题和自定义
326
+
327
+ ### CSS 自定义属性
328
+
329
+ ```css
330
+ :root {
331
+ --primary-color: #007bff;
332
+ --secondary-color: #6c757d;
333
+ --success-color: #28a745;
334
+ --warning-color: #ffc107;
335
+ --danger-color: #dc3545;
336
+ --info-color: #17a2b8;
337
+
338
+ --border-radius: 6px;
339
+ --font-family: 'Inter', sans-serif;
340
+ --transition-duration: 0.15s;
341
+ }
342
+ ```
343
+
344
+ ### SCSS 变量
345
+
346
+ ```scss
347
+ @import '@1money/react-ui/variable.scss';
348
+
349
+ // 覆盖默认变量
350
+ $primary-color: #007bff;
351
+ $secondary-color: #6c757d;
352
+ $border-radius: 8px;
353
+ $font-size-base: 14px;
354
+ ```
355
+
356
+ ### 组件级自定义
357
+
358
+ ```tsx
359
+ // 使用 prefixCls 进行组件级样式设置
360
+ <Button
361
+ prefixCls="custom-button"
362
+ className="my-custom-styles"
363
+ >
364
+ 自定义按钮
365
+ </Button>
22
366
  ```
23
367
 
24
- ### 使用
25
- ```js
26
- import UI from '@1money/react-ui';
368
+ ```css
369
+ .custom-button {
370
+ background: linear-gradient(45deg, #007bff, #0056b3);
371
+ border: none;
372
+ box-shadow: 0 4px 8px rgba(0, 123, 255, 0.3);
373
+ }
27
374
  ```
28
375
 
29
- ## 开发
30
- 对于调试或维护,可以将项目 clone 到本地,然后启动项目。
376
+ ## 🛠️ 开发
31
377
 
32
- ```shell
33
- git clone --depth 1
378
+ ### 先决条件
379
+
380
+ - Node.js >= 16
381
+ - pnpm(推荐)
382
+
383
+ ### 开始使用
384
+
385
+ ```bash
386
+ # 克隆仓库
387
+ git clone https://github.com/1Money-Co/1money-react-ui.git
388
+ cd 1money-react-ui
389
+
390
+ # 安装依赖
391
+ pnpm install
392
+
393
+ # 启动开发服务器(Storybook)
394
+ pnpm dev
395
+
396
+ # 构建组件
397
+ pnpm build
398
+
399
+ # 运行测试
400
+ pnpm test
401
+
402
+ # 代码检查
403
+ pnpm lint
404
+ ```
405
+
406
+ ### 项目结构
34
407
 
35
- pnpm i && pnpm dev
36
408
  ```
409
+ src/
410
+ ├── components/ # 所有 UI 组件
411
+ │ ├── Button/ # 单个组件
412
+ │ │ ├── Button.tsx # 组件实现
413
+ │ │ ├── interface.ts # TypeScript 接口
414
+ │ │ ├── index.ts # 导出文件
415
+ │ │ ├── style/ # 组件样式
416
+ │ │ └── README.md # 组件文档
417
+ │ └── ...
418
+ ├── utils/ # 工具函数
419
+ ├── variable.scss # 全局 SCSS 变量
420
+ └── index.ts # 主库导出
421
+ ```
422
+
423
+ ## 📚 文档
424
+
425
+ - 📖 [Storybook 文档](https://1money-co.github.io/1money-react-ui/)
426
+ - 🔧 [开发指南](./DEV.zh-CN.md)
427
+ - 📝 [组件文档](./src/components/)
428
+ - 🤖 [Claude Code 指南](./CLAUDE.md)
429
+
430
+ ### 开发工作流程
431
+
432
+ 1. Fork 仓库
433
+ 2. 创建功能分支:`git checkout -b feature/new-component`
434
+ 3. 进行更改并添加测试
435
+ 4. 运行检查和测试:`pnpm lint && pnpm test`
436
+ 5. 创建拉取请求
437
+
438
+ ## 📄 许可证
439
+
440
+ 本项目基于 MIT 许可证 - 查看 [LICENSE](./LICENSE) 文件了解详情。
441
+
442
+ ## 🆘 支持
443
+
444
+ - 📖 [文档](https://1money-co.github.io/1money-react-ui/)
445
+ - 🐛 [问题反馈](https://github.com/1Money-Co/1money-react-ui/issues)
446
+
447
+ ---
37
448
 
38
- [更多详情](./DEV.zh-CN.md)
449
+ 用 ❤️ 由 [@1money](https://github.com/1Money-Co) 团队制作
@@ -72,7 +72,7 @@ export var InputAmount = function InputAmount(props) {
72
72
  if (!input) return;
73
73
  var len = (_a = input.value) === null || _a === void 0 ? void 0 : _a.length;
74
74
  var position = input.scrollLeft;
75
- var shouldToEnd = !!position || !sticky;
75
+ var shouldToEnd = !sticky;
76
76
  var start = shouldToEnd ? len : inputCaretPositionRef.current;
77
77
  input.setSelectionRange(start, start);
78
78
  input.scrollLeft = shouldToEnd ? input.scrollWidth : position;
@@ -232,4 +232,4 @@ export var InputAmount = function InputAmount(props) {
232
232
  });
233
233
  };
234
234
  export default /*#__PURE__*/memo(InputAmount);
235
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvSW5wdXRBbW91bnQvSW5wdXRBbW91bnQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJtZW1vIiwidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJCaWdOdW1iZXIiLCJudW1lcmljRm9ybWF0dGVyIiwiY2xhc3NuYW1lcyIsIk1JTl9JTlBVVF9XSURUSCIsIklucHV0QW1vdW50IiwicHJvcHMiLCJ2YWx1ZSIsIm1heEZyYWN0aW9uRGlnaXRzIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJ3cmFwcGVyQ2xzIiwiX3Byb3BzJHByZWZpeENscyIsInByZWZpeENscyIsIm1lc3NhZ2VDbHMiLCJmb290bm90ZUNscyIsImludmFsaWQiLCJfcHJvcHMkcGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciIsInByZWZpeCIsImN1cnJlbmN5Iiwic3VmZml4IiwibWVzc2FnZSIsImZvb3Rub3RlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJvbkZvY3VzIiwicmVzdCIsImNsYXNzZXMiLCJpbnB1dFJlZiIsImZha2VFbGVSZWYiLCJwcmVmaXhSZWYiLCJzdWZmaXhSZWYiLCJjdXJyZW5jeVJlZiIsImNvbnRhaW5lclJlZiIsImlucHV0Q2FyZXRQb3NpdGlvblJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsIl92YWx1ZSIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJfd2lkdGgiLCJzZXRXaWR0aCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNNYXhXaWR0aCIsInNldElzTWF4V2lkdGgiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRm9jdXMiLCJzZXRJc0ZvY3VzIiwiZm9ybWF0dGVkVmFsdWUiLCJ0aG91c2FuZFNlcGFyYXRvciIsImFsbG93TmVnYXRpdmUiLCJzY3JvbGxUb0VuZCIsInN0aWNreSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9hIiwiaW5wdXQiLCJjdXJyZW50IiwibGVuIiwicG9zaXRpb24iLCJzY3JvbGxMZWZ0Iiwic2hvdWxkVG9FbmQiLCJzdGFydCIsInNldFNlbGVjdGlvblJhbmdlIiwic2Nyb2xsV2lkdGgiLCJmb2N1cyIsImhhbmRsZUNoYW5nZSIsIl9iIiwiX2MiLCJfZCIsIl9lIiwidmFsIiwidGFyZ2V0Iiwic3BsaXQiLCJqb2luIiwiaGFzRGVjaW1hbFBvaW50IiwibGFzdEluZGV4T2YiLCJzbGljZSIsImlzTmFOIiwiX3ZhbCRzcGxpdCIsIl92YWwkc3BsaXQyIiwiZGVjaW1hbCIsIk51bWJlciIsImZvcm1hdHRlZE5ld1ZhbCIsImlzQWRkIiwic2VsZWN0aW9uU3RhcnQiLCJvbGRQb3NWYWwiLCJwb3NWYWwiLCJyZWR1Y2UiLCJhY2MiLCJjaGFyIiwiaW5kIiwicHVzaCIsImRlY2ltYWxzIiwibWF0Y2giLCJjb25jYXQiLCJ0b0ZpeGVkIiwidHJpbSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJjb250YWluZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwicHJlZml4V2lkdGgiLCJzdWZmaXhXaWR0aCIsImN1cnJlbmN5V2lkdGgiLCJmYWtlV2lkdGgiLCJnYXBXaWR0aCIsIm1heFdpZHRoIiwiaXNNYXgiLCJNYXRoIiwibWluIiwibWF4IiwiX3NwbGl0IiwiX3NwbGl0MiIsImludCIsInJlZiIsIm9uQ2xpY2siLCJIVE1MSW5wdXRFbGVtZW50IiwiYXNzaWduIiwic3R5bGUiLCJzdG9wUHJvcGFnYXRpb24iXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQ0csQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPSSxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0sscUJBQXFCLENBQUNULENBQUMsQ0FBQyxFQUFFVSxDQUFDLEdBQUdQLENBQUMsQ0FBQ1EsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtJQUNwRSxJQUFJVCxDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSU4sTUFBTSxDQUFDQyxTQUFTLENBQUNPLG9CQUFvQixDQUFDTCxJQUFJLENBQUNQLENBQUMsRUFBRUcsQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQyxFQUMxRVIsQ0FBQyxDQUFDQyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUdWLENBQUMsQ0FBQ0csQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQztFQUN6QjtFQUNKLE9BQU9SLENBQUM7QUFDWixDQUFDO0FBQ0QsU0FBU1csR0FBRyxJQUFJQyxJQUFJLEVBQUVDLElBQUksSUFBSUMsS0FBSyxRQUFRLG1CQUFtQjtBQ1g5RCxTQUFTQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxRQUFRLE9BQU87QUFDL0UsT0FBT0MsU0FBUyxNQUFNLGNBQWM7QUFDcEMsU0FBU0MsZ0JBQWdCLFFBQVEscUJBQXFCO0FBQ3RELE9BQU9DLFVBQVUsTUFBTSx3QkFBd0I7QUFLL0MsSUFBTUMsZUFBZSxHQUFHLEVBQUU7QUFFMUIsT0FBTyxJQUFNQyxXQUFXLEdBQTRDLFNBQXZEQSxXQUFXQSxDQUE0Q0MsS0FBSyxFQUFHO0VBQzFFLElBQ0VDLEtBQUssR0FtQkhELEtBQUssQ0FuQlBDLEtBQUs7SUFDTEMsaUJBQWlCLEdBa0JmRixLQUFLLENBbEJQRSxpQkFBaUI7SUFDakJDLFFBQVEsR0FpQk5ILEtBQUssQ0FqQlBHLFFBQVE7SUFDUkMsU0FBUyxHQWdCUEosS0FBSyxDQWhCUEksU0FBUztJQUNUQyxVQUFVLEdBZVJMLEtBQUssQ0FmUEssVUFBVTtJQUFBQyxnQkFBQSxHQWVSTixLQUFLLENBZFBPLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxnQkFBQSxjQUFHLGNBQWMsR0FBQUEsZ0JBQUE7SUFDMUJFLFVBQVUsR0FhUlIsS0FBSyxDQWJQUSxVQUFVO0lBQ1ZDLFdBQVcsR0FZVFQsS0FBSyxDQVpQUyxXQUFXO0lBQ1hDLE9BQU8sR0FXTFYsS0FBSyxDQVhQVSxPQUFPO0lBQUFDLGtCQUFBLEdBV0xYLEtBQUssQ0FWUFksV0FBVztJQUFYQSxXQUFXLEdBQUFELGtCQUFBLGNBQUcsR0FBRyxHQUFBQSxrQkFBQTtJQUNqQkUsTUFBTSxHQVNKYixLQUFLLENBVFBhLE1BQU07SUFDTkMsUUFBUSxHQVFOZCxLQUFLLENBUlBjLFFBQVE7SUFDUkMsTUFBTSxHQU9KZixLQUFLLENBUFBlLE1BQU07SUFDTkMsT0FBTyxHQU1MaEIsS0FBSyxDQU5QZ0IsT0FBTztJQUNQQyxRQUFRLEdBS05qQixLQUFLLENBTFBpQixRQUFRO0lBQ1JDLFFBQVEsR0FJTmxCLEtBQUssQ0FKUGtCLFFBQVE7SUFDUkMsT0FBTSxHQUdKbkIsS0FBSyxDQUhQbUIsTUFBTTtJQUNOQyxRQUFPLEdBRUxwQixLQUFLLENBRlBvQixPQUFPO0lBQ0pDLElBQUksR0FBQWxELE1BQUEsQ0FDTDZCLEtBQUssRUFwQkgsQ0FBQSxPQUFBLEVBQUEsbUJBQUEsRUFBQSxVQUFBLEVBQUEsV0FBQSxFQUFBLFlBQUEsRUFBQSxXQUFBLEVBQUEsWUFBQSxFQUFBLGFBQUEsRUFBQSxTQUFBLEVBQUEsYUFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsUUFBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxFQUFBLFFBQUEsRUFBQSxTQUFBLENBb0JMLENBQVE7RUFDVCxJQUFNc0IsT0FBTyxHQUFHekIsVUFBVSxDQUFDVSxTQUFTLENBQUM7RUFFckMsSUFBTWdCLFFBQVEsR0FBRzlCLE1BQU0sQ0FBbUIsSUFBSSxDQUFDO0VBQy9DLElBQU0rQixVQUFVLEdBQUcvQixNQUFNLENBQWtCLElBQUksQ0FBQztFQUNoRCxJQUFNZ0MsU0FBUyxHQUFHaEMsTUFBTSxDQUFrQixJQUFJLENBQUM7RUFDL0MsSUFBTWlDLFNBQVMsR0FBR2pDLE1BQU0sQ0FBa0IsSUFBSSxDQUFDO0VBQy9DLElBQU1rQyxXQUFXLEdBQUdsQyxNQUFNLENBQWtCLElBQUksQ0FBQztFQUNqRCxJQUFNbUMsWUFBWSxHQUFHbkMsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDakQsSUFBTW9DLHFCQUFxQixHQUFHcEMsTUFBTSxDQUFTLENBQUMsQ0FBQztFQUUvQyxJQUFBcUMsU0FBQSxHQUEyQnZDLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDO0lBQUF3QyxVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUFqREcsTUFBTSxHQUFBRixVQUFBO0lBQUVHLFFBQVEsR0FBQUgsVUFBQTtFQUN2QixJQUFBSSxVQUFBLEdBQTJCNUMsUUFBUSxDQUFTTyxlQUFlLENBQUM7SUFBQXNDLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBQXJERSxNQUFNLEdBQUFELFVBQUE7SUFBRUUsUUFBUSxHQUFBRixVQUFBO0VBQ3ZCLElBQUFHLFVBQUEsR0FBb0NoRCxRQUFRLENBQVUsS0FBSyxDQUFDO0lBQUFpRCxVQUFBLEdBQUFSLGNBQUEsQ0FBQU8sVUFBQTtJQUFyREUsVUFBVSxHQUFBRCxVQUFBO0lBQUVFLGFBQWEsR0FBQUYsVUFBQTtFQUNoQyxJQUFBRyxVQUFBLEdBQThCcEQsUUFBUSxDQUFVLEtBQUssQ0FBQztJQUFBcUQsVUFBQSxHQUFBWixjQUFBLENBQUFXLFVBQUE7SUFBL0NFLE9BQU8sR0FBQUQsVUFBQTtJQUFFRSxVQUFVLEdBQUFGLFVBQUE7RUFFMUIsSUFBTUcsY0FBYyxHQUFHekQsT0FBTyxDQUFDLFlBQUs7SUFDbEMsT0FBT00sZ0JBQWdCLENBQUMsRUFBRSxJQUFJcUMsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUdBLE1BQU0sQ0FBQyxFQUFFO01BQzNEZSxpQkFBaUIsRUFBRSxJQUFJO01BQ3ZCQyxhQUFhLEVBQUU7SURmYixDQ2dCSCxDQUFDO0VBQ0osQ0FBQyxFQUFFLENBQUNoQixNQUFNLENBQUMsQ0FBQztFQUVaLElBQU1pQixXQUFXLEdBQUcxRCxXQUFXLENBQUMsWUFBNEI7SUFBQSxJQUEzQjJELE1BQUEsR0FBQUMsU0FBQSxDQUFBckUsTUFBQSxRQUFBcUUsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBa0IsS0FBSztJRGhCbEQsSUFBSUUsRUFBRTtJQ2lCVixJQUFNQyxLQUFLLEdBQUdoQyxRQUFRLENBQUNpQyxPQUFPO0lBQzlCLElBQUksQ0FBQ0QsS0FBSyxFQUFFO0lBQ1osSUFBTUUsR0FBRyxHQUFHLENBQUFILEVBQUEsR0FBQUMsS0FBSyxDQUFDdEQsS0FBSyxNQUFBLElBQUEsSUFBQXFELEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFdkUsTUFBTTtJQUMvQixJQUFNMkUsUUFBUSxHQUFHSCxLQUFLLENBQUNJLFVBQVU7SUFDakMsSUFBTUMsV0FBVyxHQUFHLENBQUMsQ0FBQ0YsUUFBUSxJQUFJLENBQUNQLE1BQU07SUFDekMsSUFBTVUsS0FBSyxHQUFHRCxXQUFXLEdBQUdILEdBQUcsR0FBRzVCLHFCQUFxQixDQUFDMkIsT0FBTztJQUMvREQsS0FBSyxDQUFDTyxpQkFBaUIsQ0FBQ0QsS0FBSyxFQUFFQSxLQUFLLENBQUM7SUFDckNOLEtBQUssQ0FBQ0ksVUFBVSxHQUFHQyxXQUFXLEdBQUdMLEtBQUssQ0FBQ1EsV0FBVyxHQUFHTCxRQUFRO0lBQzdESCxLQUFLLENBQUNTLEtBQUssQ0FBQSxDQUFFO0VBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1DLFlBQVksR0FBR3pFLFdBQVcsQ0FBQyxVQUFDbkIsQ0FBZ0MsRUFBSTtJRGZoRSxJQUFJaUYsRUFBRSxFQUFFWSxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFO0lDZ0IxQixJQUFJQyxHQUFHLEdBQUdqRyxDQUFDLENBQUNrRyxNQUFNLENBQUN0RSxLQUFLO0lBQ3hCLElBQUlxRSxHQUFHLElBQUksSUFBSSxFQUFFQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzlDLElBQU1DLGVBQWUsR0FBR0osR0FBRyxDQUFDSyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUtMLEdBQUcsQ0FBQ3ZGLE1BQU0sR0FBRyxDQUFDO0lBQy9ELElBQUkyRixlQUFlLEVBQUVKLEdBQUcsR0FBR0EsR0FBRyxDQUFDTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUlDLEtBQUssQ0FBQyxDQUFDUCxHQUFHLENBQUMsRUFBRTtJQUNqQixJQUFJQSxHQUFHLEtBQUtyQyxNQUFNLElBQUksQ0FBQ3lDLGVBQWUsRUFBRTtJQUN4QyxJQUFJLE9BQU94RSxpQkFBaUIsS0FBSyxRQUFRLElBQUksT0FBT0EsaUJBQWlCLEtBQUssUUFBUSxFQUFFO01BQ2xGLElBQUE0RSxVQUFBLEdBQW9CUixHQUFHLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFBQU8sV0FBQSxHQUFBL0MsY0FBQSxDQUFBOEMsVUFBQTtRQUF6QkUsT0FBTyxHQUFBRCxXQUFBO01BQ2hCLElBQUlDLE9BQU8sSUFBSSxJQUFJLElBQUlBLE9BQU8sQ0FBQ2pHLE1BQU0sR0FBR2tHLE1BQU0sQ0FBQy9FLGlCQUFpQixDQUFDLEVBQUU7SUFDckU7SUFDQSxJQUFJcUIsUUFBUSxDQUFDaUMsT0FBTyxFQUFFO01BQ3BCLElBQU0wQixlQUFlLEdBQUd0RixnQkFBZ0IsQ0FBQzBFLEdBQUcsRUFBRTtRQUM1Q3RCLGlCQUFpQixFQUFFLElBQUk7UUFDdkJDLGFBQWEsRUFBRTtNRFRYLENDVUwsQ0FBQztNQUVGLElBQU1rQyxLQUFLLEdBQUdiLEdBQUcsQ0FBQ3ZGLE1BQU0sSUFBSSxDQUFBdUUsRUFBQSxHQUFBckIsTUFBTSxLQUFBLElBQUEsSUFBTkEsTUFBTSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFOQSxNQUFNLENBQUVsRCxNQUFNLE1BQUEsSUFBQSxJQUFBdUUsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQyxDQUFDO01BQ2hELElBQUlJLFFBQVEsR0FBRyxDQUFBUSxFQUFBLEdBQUEzQyxRQUFRLENBQUNpQyxPQUFPLENBQUM0QixjQUFjLE1BQUEsSUFBQSxJQUFBbEIsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQztNQUNuRCxJQUFNbUIsU0FBUyxHQUFHdEMsY0FBYyxDQUFDNkIsS0FBSyxDQUFDLENBQUMsRUFBR2xCLFFBQVEsSUFBSXlCLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQztNQUN4RXpCLFFBQVEsR0FBRzJCLFNBQVMsQ0FBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMxRixNQUFNLElBQUlvRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2xFLElBQU1HLE1BQU0sR0FBR2hCLEdBQUcsQ0FBQ00sS0FBSyxDQUFDLENBQUMsRUFBRWxCLFFBQVEsQ0FBQztNQUNyQ3dCLGVBQWUsQ0FBQ1YsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDZSxNQUFNLENBQVcsVUFBQ0MsR0FBRyxFQUFFQyxLQUFJLEVBQUVDLEdBQUcsRUFBSTtRQUM1RCxJQUFJRCxLQUFJLEtBQUssR0FBRyxFQUFFLE9BQU9ELEdBQUcsQ0FBQyxLQUN4QkEsR0FBRyxDQUFDRyxJQUFJLENBQUNGLEtBQUksQ0FBQztRQUNuQixJQUFJRCxHQUFHLENBQUNmLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBS2EsTUFBTSxFQUFFO1VBQzNCNUIsUUFBUSxHQUFHZ0MsR0FBRyxHQUFHLENBQUM7VUFDbEIsT0FBT0YsR0FBRztRQUNaO1FBQ0EsT0FBT0EsR0FBRztNQUNaLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDTjNELHFCQUFxQixDQUFDMkIsT0FBTyxHQUFHRSxRQUFRLElBQUlnQixlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RTtJQUVBLElBQUksT0FBT3pFLEtBQUssS0FBSyxXQUFXLEVBQUU7TUFDaEMsSUFBSXFFLEdBQUcsS0FBSyxFQUFFLEVBQUU7UUFDZHBDLFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDaEIsQ0FBQyxNQUFNO1FBQ0wsSUFBTTBELFFBQVEsR0FBRyxDQUFBdkIsRUFBQSxHQUFBLENBQUFELEVBQUEsR0FBQSxDQUFBRCxFQUFBLEdBQUFHLEdBQUcsQ0FBQ3VCLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBQSxJQUFBLElBQUExQixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRyxDQUFDLENBQUMsTUFBQSxJQUFBLElBQUFDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFckYsTUFBTSxNQUFBLElBQUEsSUFBQXNGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLENBQUM7UUFDeERuQyxRQUFRLENBQUMsR0FBQTRELE1BQUEsQ0FBR25HLFNBQVMsQ0FBQzJFLEdBQUcsQ0FBQyxDQUFDeUIsT0FBTyxDQUFDSCxRQUFRLENBQUMsRUFBQUUsTUFBQSxDQUFHcEIsZUFBZSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUdzQixJQUFJLENBQUEsQ0FBRSxDQUFDO01BQ3JGO0lBQ0Y7SUFFQTlFLFFBQVEsS0FBQSxJQUFBLElBQVJBLFFBQVEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUkEsUUFBUSxDQUFHN0MsQ0FBQyxDQUFDO0VBQ2YsQ0FBQyxFQUFFLENBQUM2QyxRQUFRLEVBQUVlLE1BQU0sRUFBRWhDLEtBQUssRUFBRThDLGNBQWMsRUFBRTdDLGlCQUFpQixDQUFDLENBQUM7RUFFaEVSLFNBQVMsQ0FBQyxZQUFLO0lEVlQsSUFBSTRELEVBQUUsRUFBRVksRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFNEIsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFO0lDVzlDLElBQU1DLGNBQWMsR0FBRyxDQUFBcEMsRUFBQSxHQUFBLENBQUFaLEVBQUEsR0FBQTFCLFlBQVksQ0FBQzRCLE9BQU8sTUFBQSxJQUFBLElBQUFGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFaUQsV0FBVyxNQUFBLElBQUEsSUFBQXJDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJcEUsZUFBZTtJQUMzRSxJQUFNMEcsV0FBVyxHQUFHLENBQUFwQyxFQUFBLEdBQUEsQ0FBQUQsRUFBQSxHQUFBMUMsU0FBUyxDQUFDK0IsT0FBTyxNQUFBLElBQUEsSUFBQVcsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVvQyxXQUFXLE1BQUEsSUFBQSxJQUFBbkMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQztJQUN2RCxJQUFNcUMsV0FBVyxHQUFHLENBQUFSLEVBQUEsR0FBQSxDQUFBNUIsRUFBQSxHQUFBM0MsU0FBUyxDQUFDOEIsT0FBTyxNQUFBLElBQUEsSUFBQWEsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVrQyxXQUFXLE1BQUEsSUFBQSxJQUFBTixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxDQUFDO0lBQ3ZELElBQU1TLGFBQWEsR0FBRyxDQUFBUCxFQUFBLEdBQUEsQ0FBQUQsRUFBQSxHQUFBdkUsV0FBVyxDQUFDNkIsT0FBTyxNQUFBLElBQUEsSUFBQTBDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFSyxXQUFXLE1BQUEsSUFBQSxJQUFBSixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxDQUFDO0lBQzNELElBQU1RLFNBQVMsR0FBRyxDQUFBTixFQUFBLEdBQUEsQ0FBQUQsRUFBQSxHQUFBNUUsVUFBVSxDQUFDZ0MsT0FBTyxNQUFBLElBQUEsSUFBQTRDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFRyxXQUFXLE1BQUEsSUFBQSxJQUFBRixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxDQUFDO0lBQ3RELElBQU1PLFFBQVEsR0FBR0osV0FBVyxJQUFJQyxXQUFXLElBQUlDLGFBQWEsR0FDeEQsRUFBRSxHQUNERixXQUFXLElBQUlDLFdBQVcsSUFBTUQsV0FBVyxJQUFJRSxhQUFjLElBQUtELFdBQVcsSUFBSUMsYUFBYyxHQUM5RixFQUFFLEdBQ0ZGLFdBQVcsSUFBSUMsV0FBVyxJQUFJQyxhQUFhLEdBQ3pDLENBQUMsR0FDRCxDQUFDO0lBRVQsSUFBTUcsUUFBUSxHQUFHUCxjQUFjLEdBQUdFLFdBQVcsR0FBR0MsV0FBVyxHQUFHQyxhQUFhLEdBQUdFLFFBQVE7SUFDdEYsSUFBTUUsS0FBSyxHQUFHSCxTQUFTLElBQUlFLFFBQVE7SUFDbkN2RSxRQUFRLENBQUN5RSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0gsUUFBUSxFQUFFRSxJQUFJLENBQUNFLEdBQUcsQ0FBQ04sU0FBUyxFQUFFN0csZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNsRTRDLGFBQWEsQ0FBQ29FLEtBQUssQ0FBQztJQUNwQjVELFdBQVcsQ0FBQyxJQUFJLENBQUM7RUFDbkIsQ0FBQyxFQUFFLENBQUNqQixNQUFNLENBQUMsQ0FBQztFQUVadkMsU0FBUyxDQUFDLFlBQUs7SURYVCxJQUFJNEQsRUFBRSxFQUFFWSxFQUFFLEVBQUVDLEVBQUU7SUNZbEIsSUFBSUcsR0FBRyxHQUFHckUsS0FBSztJQUNmLElBQUl5RSxlQUFlLEdBQUcsS0FBSztJQUMzQixJQUFJLE9BQU9KLEdBQUcsS0FBSyxRQUFRLEVBQUU7TUFDM0IsSUFBSUEsR0FBRyxLQUFLLEVBQUUsRUFBRTtRQUNkQSxHQUFHLEdBQUcsSUFBSTtNQUNaLENBQUMsTUFBTTtRQUNMQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdCQyxlQUFlLEdBQUdKLEdBQUcsQ0FBQ0ssV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLTCxHQUFHLENBQUN2RixNQUFNLEdBQUcsQ0FBQztRQUN6RCxJQUFJMkYsZUFBZSxFQUFFSixHQUFHLEdBQUdBLEdBQUcsQ0FBQ00sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJQyxLQUFLLENBQUMsQ0FBQ1AsR0FBRyxDQUFDLEVBQUU7TUFDbkI7SUFDRixDQUFDLE1BQU0sSUFBSUEsR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7SUFFL0UsSUFBSSxDQUFDLE9BQU9BLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsTUFBTSxPQUFPcEUsaUJBQWlCLEtBQUssUUFBUSxJQUFJLE9BQU9BLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxFQUFFO01BQzVJLElBQUFnSCxNQUFBLEdBQXVCLENBQUMsRUFBRSxHQUFHNUMsR0FBRyxFQUFFRSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQUEyQyxPQUFBLEdBQUFuRixjQUFBLENBQUFrRixNQUFBO1FBQXJDRSxJQUFHLEdBQUFELE9BQUE7UUFBRW5DLE9BQU8sR0FBQW1DLE9BQUE7TUFDbkIsSUFBSW5DLE9BQU8sSUFBSSxJQUFJLElBQUlBLE9BQU8sQ0FBQ2pHLE1BQU0sR0FBR2tHLE1BQU0sQ0FBQy9FLGlCQUFpQixDQUFDLEVBQUU7UUFDakVvRSxHQUFHLEdBQUc4QyxJQUFHLEdBQUcsR0FBRyxHQUFHcEMsT0FBTyxDQUFDSixLQUFLLENBQUMsQ0FBQyxFQUFFSyxNQUFNLENBQUMvRSxpQkFBaUIsQ0FBQyxDQUFDO01BQy9EO0lBQ0Y7SUFFQSxJQUFJb0UsR0FBRyxLQUFLLEVBQUUsSUFBSUEsR0FBRyxJQUFJLElBQUksRUFBRTtNQUM3QnBDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxNQUFNO01BQ0wsSUFBTTBELFFBQVEsR0FBRyxDQUFBekIsRUFBQSxHQUFBLENBQUFELEVBQUEsR0FBQSxDQUFBWixFQUFBLEdBQUEsQ0FBQyxFQUFFLEdBQUdnQixHQUFHLEVBQUV1QixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQUEsSUFBQSxJQUFBdkMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUcsQ0FBQyxDQUFDLE1BQUEsSUFBQSxJQUFBWSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRW5GLE1BQU0sTUFBQSxJQUFBLElBQUFvRixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxDQUFDO01BQy9EakMsUUFBUSxDQUFDLEdBQUE0RCxNQUFBLENBQUduRyxTQUFTLENBQUMyRSxHQUFHLENBQUMsQ0FBQ3lCLE9BQU8sQ0FBQ0gsUUFBUSxDQUFDLEVBQUFFLE1BQUEsQ0FBR3BCLGVBQWUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFHc0IsSUFBSSxDQUFBLENBQUUsQ0FBQztJQUNyRjtFQUNGLENBQUMsRUFBRSxDQUFDL0YsS0FBSyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUFDO0VBRTlCLE9BQU9kLEtBQUEsQ0FBQSxLQUFBLEVBQUE7SUFDTGdCLFNBQVMsRUFBRWtCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQ2pCLFVBQVUsRUFBRUssT0FBTyxHQUFHWSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcrQixTQUFTLENBQUMsQ0FBQ29CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQ3VCLElBQUksQ0FBQSxDQUFFLENBQUM7SUFBQTdGLFFBQUEsRUFBQSxDQUV0R2YsS0FBQSxDQUFBLEtBQUEsRUFBQTtNQUNFaUksR0FBRyxFQUFFekYsWUFBWTtNQUNqQnhCLFNBQVMsRUFBRWtCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDbEIsU0FBUyxFQUFFeUMsT0FBTyxHQUFHdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDbUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDdUIsSUFBSSxDQUFBLENBQUUsQ0FBQztNQUN6RnNCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFHakosQ0FBQyxFQUFJO1FEYkQsSUFBSWlGLEVBQUU7UUNjbEIsSUFBSWpGLENBQUMsQ0FBQ2tHLE1BQU0sWUFBWWdELGdCQUFnQixFQUFFO1FBQzFDLENBQUFqRSxFQUFBLEdBQUEvQixRQUFRLENBQUNpQyxPQUFPLE1BQUEsSUFBQSxJQUFBRixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRVUsS0FBSyxDQUFBLENBQUU7UUFDekIsSUFBSXZCLFVBQVUsRUFBRVMsV0FBVyxDQUFBLENBQUU7TUFDL0IsQ0FBQztNQUFBL0MsUUFBQSxFQUFBLENBR0NVLE1BQU0sSUFBSTNCLElBQUEsQ0FBQSxNQUFBLEVBQUE7UUFDUm1JLEdBQUcsRUFBRTVGLFNBQVM7UUFDZHJCLFNBQVMsRUFBRWtCLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFBQW5CLFFBQUEsRUFFM0JVO01BQU0sQ0FBQSxDQUNGLEVBRVQzQixJQUFBLENBQUEsS0FBQSxFQUFBO1FBQ0VrQixTQUFTLEVBQUVrQixPQUFPLENBQUMsU0FBUyxFQUFHLENBQUN1QixPQUFPLElBQUlKLFVBQVUsR0FBSW5CLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7UUFBQW5CLFFBQUEsRUFFckZqQixJQUFBLENBQUEsT0FBQSxFQUFBVixNQUFBLENBQUFnSixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ01uRyxJQUFJLEVBQUE7VUFDUmdHLEdBQUcsRUFBRTlGLFFBQVE7VUFDYnRCLEtBQUssRUFBRThDLGNBQWM7VUFDckJuQyxXQUFXLEVBQUVBLFdBQVc7VUFDeEI2RyxLQUFLLEVBQUU7WUFBRSxlQUFlLEtBQUEzQixNQUFBLENBQUt6RCxNQUFNO1VBQUksQ0FBbUI7VUFDMURuQixRQUFRLEVBQUUrQyxZQUFZO1VBQ3RCN0MsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUUvQyxDQUFDLEVBQUc7WUFDWHlFLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDaEIxQixRQUFPLEtBQUEsSUFBQSxJQUFQQSxRQUFPLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVBBLFFBQU8sQ0FBRy9DLENBQUMsQ0FBQztVQUNkLENBQUM7VUFDRDhDLE1BQU0sRUFBRSxTQUFSQSxNQUFNQSxDQUFFOUMsQ0FBQyxFQUFHO1lBQ1Z5RSxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ2pCM0IsT0FBTSxLQUFBLElBQUEsSUFBTkEsT0FBTSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFOQSxPQUFNLENBQUc5QyxDQUFDLENBQUM7VUFDYjtRQUFDLENBQUEsQ0FBQTtNQUNELENBQUEsQ0FDRSxFQUVKeUMsUUFBUSxJQUFJNUIsSUFBQSxDQUFBLE1BQUEsRUFBQTtRQUNWbUksR0FBRyxFQUFFMUYsV0FBVztRQUNoQnZCLFNBQVMsRUFBRWtCLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFBQW5CLFFBQUEsRUFFN0JXO01BQVEsQ0FBQSxDQUNKLEVBRVJDLE1BQU0sSUFBSTdCLElBQUEsQ0FBQSxNQUFBLEVBQUE7UUFBTW1JLEdBQUcsRUFBRTNGLFNBQVM7UUFBRXRCLFNBQVMsRUFBRWtCLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFBQW5CLFFBQUEsRUFBR1k7TUFBTSxDQUFBLENBQVEsRUFDOUU3QixJQUFBLENBQUEsTUFBQSxFQUFBO1FBQ0VtSSxHQUFHLEVBQUU3RixVQUFVO1FBQ2ZwQixTQUFTLEVBQUVrQixPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzFCZ0csT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUVqSixDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDcUosZUFBZSxDQUFBLENBQUU7UUFBQTtRQUFBdkgsUUFBQSxFQUcvQlAsZ0JBQWdCLENBQUMsRUFBRSxJQUFJcUMsTUFBTSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUdBLE1BQU0sQ0FBQyxFQUFFO1VBQ3BEZSxpQkFBaUIsRUFBRSxJQUFJO1VBQ3ZCQyxhQUFhLEVBQUU7UURqREgsQ0NrRGI7TUFBQyxDQUFBLENBRUM7SUFBQSxDQUFBLENBQ0gsRUFFSixDQUFDakMsT0FBTyxJQUFJQyxRQUFRLEtBQUs3QixLQUFBLENBQUEsS0FBQSxFQUFBO01BQUtnQixTQUFTLEVBQUVrQixPQUFPLENBQUMsT0FBTyxDQUFDO01BQUFuQixRQUFBLEVBQUEsQ0FDdERhLE9BQU8sSUFBSTlCLElBQUEsQ0FBQSxLQUFBLEVBQUE7UUFBS2tCLFNBQVMsRUFBRWtCLE9BQU8sQ0FBQyxTQUFTLEVBQUVkLFVBQVUsQ0FBQztRQUFBTCxRQUFBLEVBQUdhO01BQU8sQ0FBQSxDQUFPLEVBQzFFQyxRQUFRLElBQUkvQixJQUFBLENBQUEsS0FBQSxFQUFBO1FBQUtrQixTQUFTLEVBQUVrQixPQUFPLENBQUMsVUFBVSxFQUFFYixXQUFXLENBQUM7UUFBQU4sUUFBQSxFQUFHYztNQUFRLENBQUEsQ0FBTztJQUFBLENBQUEsQ0FDM0U7RUFBQSxDQUFBLENBRUo7QUFDUixDQUFDO0FBRUQsNEJBQWU1QixJQUFJLENBQUNVLFdBQVcsQ0FBQyIsImZpbGUiOiJjb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBudW1lcmljRm9ybWF0dGVyIH0gZnJvbSAncmVhY3QtbnVtYmVyLWZvcm1hdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmNvbnN0IE1JTl9JTlBVVF9XSURUSCA9IDMzO1xuZXhwb3J0IGNvbnN0IElucHV0QW1vdW50ID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB3cmFwcGVyQ2xzLCBwcmVmaXhDbHMgPSAnaW5wdXQtYW1vdW50JywgbWVzc2FnZUNscywgZm9vdG5vdGVDbHMsIGludmFsaWQsIHBsYWNlaG9sZGVyID0gJzAnLCBwcmVmaXgsIGN1cnJlbmN5LCBzdWZmaXgsIG1lc3NhZ2UsIGZvb3Rub3RlLCBvbkNoYW5nZSwgb25CbHVyLCBvbkZvY3VzIH0gPSBwcm9wcywgcmVzdCA9IF9fcmVzdChwcm9wcywgW1widmFsdWVcIiwgXCJtYXhGcmFjdGlvbkRpZ2l0c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcHBlckNsc1wiLCBcInByZWZpeENsc1wiLCBcIm1lc3NhZ2VDbHNcIiwgXCJmb290bm90ZUNsc1wiLCBcImludmFsaWRcIiwgXCJwbGFjZWhvbGRlclwiLCBcInByZWZpeFwiLCBcImN1cnJlbmN5XCIsIFwic3VmZml4XCIsIFwibWVzc2FnZVwiLCBcImZvb3Rub3RlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCJdKTtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGZha2VFbGVSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgcHJlZml4UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHN1ZmZpeFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjdXJyZW5jeVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaW5wdXRDYXJldFBvc2l0aW9uUmVmID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IFtfdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtfd2lkdGgsIHNldFdpZHRoXSA9IHVzZVN0YXRlKE1JTl9JTlBVVF9XSURUSCk7XG4gICAgY29uc3QgW2lzTWF4V2lkdGgsIHNldElzTWF4V2lkdGhdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc0ZvY3VzLCBzZXRJc0ZvY3VzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gbnVtZXJpY0Zvcm1hdHRlcignJyArIChfdmFsdWUgPT0gbnVsbCA/ICcnIDogX3ZhbHVlKSwge1xuICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9LCBbX3ZhbHVlXSk7XG4gICAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VDYWxsYmFjaygoc3RpY2t5ID0gZmFsc2UpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxlbiA9IChfYSA9IGlucHV0LnZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGlucHV0LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IHNob3VsZFRvRW5kID0gISFwb3NpdGlvbiB8fCAhc3RpY2t5O1xuICAgICAgICBjb25zdCBzdGFydCA9IHNob3VsZFRvRW5kID8gbGVuIDogaW5wdXRDYXJldFBvc2l0aW9uUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBzdGFydCk7XG4gICAgICAgIGlucHV0LnNjcm9sbExlZnQgPSBzaG91bGRUb0VuZCA/IGlucHV0LnNjcm9sbFdpZHRoIDogcG9zaXRpb247XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG4gICAgICAgIGxldCB2YWwgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsKVxuICAgICAgICAgICAgdmFsID0gdmFsLnNwbGl0KCcsJykuam9pbignJyk7XG4gICAgICAgIGNvbnN0IGhhc0RlY2ltYWxQb2ludCA9IHZhbC5sYXN0SW5kZXhPZignLicpID09PSB2YWwubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKGhhc0RlY2ltYWxQb2ludClcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgwLCAtMSk7XG4gICAgICAgIGlmIChpc05hTigrdmFsKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHZhbCA9PT0gX3ZhbHVlICYmICFoYXNEZWNpbWFsUG9pbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2YgbWF4RnJhY3Rpb25EaWdpdHMgPT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXhGcmFjdGlvbkRpZ2l0cyA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIGRlY2ltYWxdID0gdmFsLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAoZGVjaW1hbCAhPSBudWxsICYmIGRlY2ltYWwubGVuZ3RoID4gTnVtYmVyKG1heEZyYWN0aW9uRGlnaXRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE5ld1ZhbCA9IG51bWVyaWNGb3JtYXR0ZXIodmFsLCB7XG4gICAgICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgICAgICAgYWxsb3dOZWdhdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaXNBZGQgPSB2YWwubGVuZ3RoID4gKChfYSA9IF92YWx1ZSA9PT0gbnVsbCB8fCBfdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF92YWx1ZS5sZW5ndGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApO1xuICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gKF9iID0gaW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMDtcbiAgICAgICAgICAgIGNvbnN0IG9sZFBvc1ZhbCA9IGZvcm1hdHRlZFZhbHVlLnNsaWNlKDAsIChwb3NpdGlvbiAtIChpc0FkZCA/IDEgOiAtMSkpKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2xkUG9zVmFsLnNwbGl0KCcsJykuam9pbignJykubGVuZ3RoICsgKGlzQWRkID8gMSA6IC0xKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc1ZhbCA9IHZhbC5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBmb3JtYXR0ZWROZXdWYWwuc3BsaXQoJycpLnJlZHVjZSgoYWNjLCBjaGFyLCBpbmQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gJywnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYWNjLnB1c2goY2hhcik7XG4gICAgICAgICAgICAgICAgaWYgKGFjYy5qb2luKCcnKSA9PT0gcG9zVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gaW5kICsgMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIGlucHV0Q2FyZXRQb3NpdGlvblJlZi5jdXJyZW50ID0gcG9zaXRpb24gKyAoaGFzRGVjaW1hbFBvaW50ID8gMiA6IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoX2UgPSAoX2QgPSAoX2MgPSB2YWwubWF0Y2goL1xcLihcXGQrKSQvKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jWzFdKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QubGVuZ3RoKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAwO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKGAke0JpZ051bWJlcih2YWwpLnRvRml4ZWQoZGVjaW1hbHMpfSR7aGFzRGVjaW1hbFBvaW50ID8gJy4nIDogJyd9YC50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShlKTtcbiAgICB9LCBbb25DaGFuZ2UsIF92YWx1ZSwgdmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtYXhGcmFjdGlvbkRpZ2l0c10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaztcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSAoX2IgPSAoX2EgPSBjb250YWluZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBNSU5fSU5QVVRfV0lEVEg7XG4gICAgICAgIGNvbnN0IHByZWZpeFdpZHRoID0gKF9kID0gKF9jID0gcHJlZml4UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMDtcbiAgICAgICAgY29uc3Qgc3VmZml4V2lkdGggPSAoX2YgPSAoX2UgPSBzdWZmaXhSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAwO1xuICAgICAgICBjb25zdCBjdXJyZW5jeVdpZHRoID0gKF9oID0gKF9nID0gY3VycmVuY3lSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAwO1xuICAgICAgICBjb25zdCBmYWtlV2lkdGggPSAoX2sgPSAoX2ogPSBmYWtlRWxlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogMDtcbiAgICAgICAgY29uc3QgZ2FwV2lkdGggPSBwcmVmaXhXaWR0aCAmJiBzdWZmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoXG4gICAgICAgICAgICA/IDI0XG4gICAgICAgICAgICA6IChwcmVmaXhXaWR0aCAmJiBzdWZmaXhXaWR0aCkgfHwgKHByZWZpeFdpZHRoICYmIGN1cnJlbmN5V2lkdGgpIHx8IChzdWZmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoKVxuICAgICAgICAgICAgICAgID8gMTZcbiAgICAgICAgICAgICAgICA6IHByZWZpeFdpZHRoIHx8IHN1ZmZpeFdpZHRoIHx8IGN1cnJlbmN5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBjb250YWluZXJXaWR0aCAtIHByZWZpeFdpZHRoIC0gc3VmZml4V2lkdGggLSBjdXJyZW5jeVdpZHRoIC0gZ2FwV2lkdGg7XG4gICAgICAgIGNvbnN0IGlzTWF4ID0gZmFrZVdpZHRoID49IG1heFdpZHRoO1xuICAgICAgICBzZXRXaWR0aChNYXRoLm1pbihtYXhXaWR0aCwgTWF0aC5tYXgoZmFrZVdpZHRoLCBNSU5fSU5QVVRfV0lEVEgpKSk7XG4gICAgICAgIHNldElzTWF4V2lkdGgoaXNNYXgpO1xuICAgICAgICBzY3JvbGxUb0VuZCh0cnVlKTtcbiAgICB9LCBbX3ZhbHVlXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgbGV0IGhhc0RlY2ltYWxQb2ludCA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgnLCcpLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIGhhc0RlY2ltYWxQb2ludCA9IHZhbC5sYXN0SW5kZXhPZignLicpID09PSB2YWwubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRGVjaW1hbFBvaW50KVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTigrdmFsKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsICE9PSAnYmlnaW50JylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgJiYgKHR5cGVvZiBtYXhGcmFjdGlvbkRpZ2l0cyA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heEZyYWN0aW9uRGlnaXRzID09PSAnYmlnaW50JykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtpbnQsIGRlY2ltYWxdID0gKCcnICsgdmFsKS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWwgIT0gbnVsbCAmJiBkZWNpbWFsLmxlbmd0aCA+IE51bWJlcihtYXhGcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBpbnQgKyAnLicgKyBkZWNpbWFsLnNsaWNlKDAsIE51bWJlcihtYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKF9jID0gKF9iID0gKF9hID0gKCcnICsgdmFsKS5tYXRjaCgvXFwuKFxcZCspJC8pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgICAgICBzZXRWYWx1ZShgJHtCaWdOdW1iZXIodmFsKS50b0ZpeGVkKGRlY2ltYWxzKX0ke2hhc0RlY2ltYWxQb2ludCA/ICcuJyA6ICcnfWAudHJpbSgpKTtcbiAgICAgICAgfVxuICAgIH0sIFt2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHNdKTtcbiAgICByZXR1cm4gX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3dyYXBwZXInLCBbd3JhcHBlckNscywgaW52YWxpZCA/IGNsYXNzZXMoJ2ludmFsaWQnKSA6IHVuZGVmaW5lZF0uam9pbignICcpLnRyaW0oKSksIGNoaWxkcmVuOiBbX2pzeHMoXCJkaXZcIiwgeyByZWY6IGNvbnRhaW5lclJlZiwgY2xhc3NOYW1lOiBjbGFzc2VzKHZvaWQgMCwgW2NsYXNzTmFtZSwgaXNGb2N1cyA/IGNsYXNzZXMoJ2ZvY3VzJykgOiAnJ10uam9pbignICcpLnRyaW0oKSksIG9uQ2xpY2s6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01heFdpZHRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9FbmQoKTtcbiAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW3ByZWZpeCAmJiBfanN4KFwic3BhblwiLCB7IHJlZjogcHJlZml4UmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ3ByZWZpeCcpLCBjaGlsZHJlbjogcHJlZml4IH0pLCBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdlbGVtZW50JywgKCFpc0ZvY3VzICYmIGlzTWF4V2lkdGgpID8gY2xhc3NlcygnZWxlbWVudC1tYXgnKSA6ICcnKSwgY2hpbGRyZW46IF9qc3goXCJpbnB1dFwiLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IHJlZjogaW5wdXRSZWYsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBzdHlsZTogeyAnLS1pbnB1dC13aWR0aCc6IGAke193aWR0aH1weGAgfSwgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSwgb25Gb2N1czogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkJsdXI6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0ZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CbHVyKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpIH0pLCBjdXJyZW5jeSAmJiBfanN4KFwic3BhblwiLCB7IHJlZjogY3VycmVuY3lSZWYsIGNsYXNzTmFtZTogY2xhc3NlcygnY3VycmVuY3knKSwgY2hpbGRyZW46IGN1cnJlbmN5IH0pLCBzdWZmaXggJiYgX2pzeChcInNwYW5cIiwgeyByZWY6IHN1ZmZpeFJlZiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdzdWZmaXgnKSwgY2hpbGRyZW46IHN1ZmZpeCB9KSwgX2pzeChcInNwYW5cIiwgeyByZWY6IGZha2VFbGVSZWYsIGNsYXNzTmFtZTogY2xhc3NlcygnZmFrZScpLCBvbkNsaWNrOiBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCksIGNoaWxkcmVuOiBudW1lcmljRm9ybWF0dGVyKCcnICsgKF92YWx1ZSA9PSBudWxsID8gJycgOiBfdmFsdWUpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dOZWdhdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pXSB9KSwgKG1lc3NhZ2UgfHwgZm9vdG5vdGUpICYmIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdleHRyYScpLCBjaGlsZHJlbjogW21lc3NhZ2UgJiYgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbWVzc2FnZScsIG1lc3NhZ2VDbHMpLCBjaGlsZHJlbjogbWVzc2FnZSB9KSwgZm9vdG5vdGUgJiYgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZm9vdG5vdGUnLCBmb290bm90ZUNscyksIGNoaWxkcmVuOiBmb290bm90ZSB9KV0gfSldIH0pO1xufTtcbmV4cG9ydCBkZWZhdWx0IG1lbW8oSW5wdXRBbW91bnQpOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
235
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvSW5wdXRBbW91bnQvSW5wdXRBbW91bnQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJtZW1vIiwidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJCaWdOdW1iZXIiLCJudW1lcmljRm9ybWF0dGVyIiwiY2xhc3NuYW1lcyIsIk1JTl9JTlBVVF9XSURUSCIsIklucHV0QW1vdW50IiwicHJvcHMiLCJ2YWx1ZSIsIm1heEZyYWN0aW9uRGlnaXRzIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJ3cmFwcGVyQ2xzIiwiX3Byb3BzJHByZWZpeENscyIsInByZWZpeENscyIsIm1lc3NhZ2VDbHMiLCJmb290bm90ZUNscyIsImludmFsaWQiLCJfcHJvcHMkcGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciIsInByZWZpeCIsImN1cnJlbmN5Iiwic3VmZml4IiwibWVzc2FnZSIsImZvb3Rub3RlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJvbkZvY3VzIiwicmVzdCIsImNsYXNzZXMiLCJpbnB1dFJlZiIsImZha2VFbGVSZWYiLCJwcmVmaXhSZWYiLCJzdWZmaXhSZWYiLCJjdXJyZW5jeVJlZiIsImNvbnRhaW5lclJlZiIsImlucHV0Q2FyZXRQb3NpdGlvblJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsIl92YWx1ZSIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJfd2lkdGgiLCJzZXRXaWR0aCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNNYXhXaWR0aCIsInNldElzTWF4V2lkdGgiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRm9jdXMiLCJzZXRJc0ZvY3VzIiwiZm9ybWF0dGVkVmFsdWUiLCJ0aG91c2FuZFNlcGFyYXRvciIsImFsbG93TmVnYXRpdmUiLCJzY3JvbGxUb0VuZCIsInN0aWNreSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9hIiwiaW5wdXQiLCJjdXJyZW50IiwibGVuIiwicG9zaXRpb24iLCJzY3JvbGxMZWZ0Iiwic2hvdWxkVG9FbmQiLCJzdGFydCIsInNldFNlbGVjdGlvblJhbmdlIiwic2Nyb2xsV2lkdGgiLCJmb2N1cyIsImhhbmRsZUNoYW5nZSIsIl9iIiwiX2MiLCJfZCIsIl9lIiwidmFsIiwidGFyZ2V0Iiwic3BsaXQiLCJqb2luIiwiaGFzRGVjaW1hbFBvaW50IiwibGFzdEluZGV4T2YiLCJzbGljZSIsImlzTmFOIiwiX3ZhbCRzcGxpdCIsIl92YWwkc3BsaXQyIiwiZGVjaW1hbCIsIk51bWJlciIsImZvcm1hdHRlZE5ld1ZhbCIsImlzQWRkIiwic2VsZWN0aW9uU3RhcnQiLCJvbGRQb3NWYWwiLCJwb3NWYWwiLCJyZWR1Y2UiLCJhY2MiLCJjaGFyIiwiaW5kIiwicHVzaCIsImRlY2ltYWxzIiwibWF0Y2giLCJjb25jYXQiLCJ0b0ZpeGVkIiwidHJpbSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJjb250YWluZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwicHJlZml4V2lkdGgiLCJzdWZmaXhXaWR0aCIsImN1cnJlbmN5V2lkdGgiLCJmYWtlV2lkdGgiLCJnYXBXaWR0aCIsIm1heFdpZHRoIiwiaXNNYXgiLCJNYXRoIiwibWluIiwibWF4IiwiX3NwbGl0IiwiX3NwbGl0MiIsImludCIsInJlZiIsIm9uQ2xpY2siLCJIVE1MSW5wdXRFbGVtZW50IiwiYXNzaWduIiwic3R5bGUiLCJzdG9wUHJvcGFnYXRpb24iXSwi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M0U7RUFBQSxDQUFBLENBRUo7QUFDUixDQUFDO0FBRUQsNEJBQWU1QixJQUFJLENBQUNVLFdBQVcsQ0FBQyIsImZpbGUiOiJjb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBudW1lcmljRm9ybWF0dGVyIH0gZnJvbSAncmVhY3QtbnVtYmVyLWZvcm1hdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmNvbnN0IE1JTl9JTlBVVF9XSURUSCA9IDMzO1xuZXhwb3J0IGNvbnN0IElucHV0QW1vdW50ID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCB3cmFwcGVyQ2xzLCBwcmVmaXhDbHMgPSAnaW5wdXQtYW1vdW50JywgbWVzc2FnZUNscywgZm9vdG5vdGVDbHMsIGludmFsaWQsIHBsYWNlaG9sZGVyID0gJzAnLCBwcmVmaXgsIGN1cnJlbmN5LCBzdWZmaXgsIG1lc3NhZ2UsIGZvb3Rub3RlLCBvbkNoYW5nZSwgb25CbHVyLCBvbkZvY3VzIH0gPSBwcm9wcywgcmVzdCA9IF9fcmVzdChwcm9wcywgW1widmFsdWVcIiwgXCJtYXhGcmFjdGlvbkRpZ2l0c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcHBlckNsc1wiLCBcInByZWZpeENsc1wiLCBcIm1lc3NhZ2VDbHNcIiwgXCJmb290bm90ZUNsc1wiLCBcImludmFsaWRcIiwgXCJwbGFjZWhvbGRlclwiLCBcInByZWZpeFwiLCBcImN1cnJlbmN5XCIsIFwic3VmZml4XCIsIFwibWVzc2FnZVwiLCBcImZvb3Rub3RlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCJdKTtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGZha2VFbGVSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgcHJlZml4UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHN1ZmZpeFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjdXJyZW5jeVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaW5wdXRDYXJldFBvc2l0aW9uUmVmID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IFtfdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtfd2lkdGgsIHNldFdpZHRoXSA9IHVzZVN0YXRlKE1JTl9JTlBVVF9XSURUSCk7XG4gICAgY29uc3QgW2lzTWF4V2lkdGgsIHNldElzTWF4V2lkdGhdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc0ZvY3VzLCBzZXRJc0ZvY3VzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gbnVtZXJpY0Zvcm1hdHRlcignJyArIChfdmFsdWUgPT0gbnVsbCA/ICcnIDogX3ZhbHVlKSwge1xuICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9LCBbX3ZhbHVlXSk7XG4gICAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VDYWxsYmFjaygoc3RpY2t5ID0gZmFsc2UpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxlbiA9IChfYSA9IGlucHV0LnZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGlucHV0LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IHNob3VsZFRvRW5kID0gIXN0aWNreTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBzaG91bGRUb0VuZCA/IGxlbiA6IGlucHV0Q2FyZXRQb3NpdGlvblJlZi5jdXJyZW50O1xuICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgc3RhcnQpO1xuICAgICAgICBpbnB1dC5zY3JvbGxMZWZ0ID0gc2hvdWxkVG9FbmQgPyBpbnB1dC5zY3JvbGxXaWR0aCA6IHBvc2l0aW9uO1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICBsZXQgdmFsID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgIGlmICh2YWwgIT0gbnVsbClcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zcGxpdCgnLCcpLmpvaW4oJycpO1xuICAgICAgICBjb25zdCBoYXNEZWNpbWFsUG9pbnQgPSB2YWwubGFzdEluZGV4T2YoJy4nKSA9PT0gdmFsLmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChoYXNEZWNpbWFsUG9pbnQpXG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICBpZiAoaXNOYU4oK3ZhbCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh2YWwgPT09IF92YWx1ZSAmJiAhaGFzRGVjaW1hbFBvaW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIG1heEZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4RnJhY3Rpb25EaWdpdHMgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBbLCBkZWNpbWFsXSA9IHZhbC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWwgIT0gbnVsbCAmJiBkZWNpbWFsLmxlbmd0aCA+IE51bWJlcihtYXhGcmFjdGlvbkRpZ2l0cykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWROZXdWYWwgPSBudW1lcmljRm9ybWF0dGVyKHZhbCwge1xuICAgICAgICAgICAgICAgIHRob3VzYW5kU2VwYXJhdG9yOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFsbG93TmVnYXRpdmU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGlzQWRkID0gdmFsLmxlbmd0aCA+ICgoX2EgPSBfdmFsdWUgPT09IG51bGwgfHwgX3ZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdmFsdWUubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKTtcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IChfYiA9IGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG4gICAgICAgICAgICBjb25zdCBvbGRQb3NWYWwgPSBmb3JtYXR0ZWRWYWx1ZS5zbGljZSgwLCAocG9zaXRpb24gLSAoaXNBZGQgPyAxIDogLTEpKSk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9sZFBvc1ZhbC5zcGxpdCgnLCcpLmpvaW4oJycpLmxlbmd0aCArIChpc0FkZCA/IDEgOiAtMSk7XG4gICAgICAgICAgICBjb25zdCBwb3NWYWwgPSB2YWwuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICAgICAgZm9ybWF0dGVkTmV3VmFsLnNwbGl0KCcnKS5yZWR1Y2UoKGFjYywgY2hhciwgaW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcsJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFjYy5wdXNoKGNoYXIpO1xuICAgICAgICAgICAgICAgIGlmIChhY2Muam9pbignJykgPT09IHBvc1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGluZCArIDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICBpbnB1dENhcmV0UG9zaXRpb25SZWYuY3VycmVudCA9IHBvc2l0aW9uICsgKGhhc0RlY2ltYWxQb2ludCA/IDIgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKF9lID0gKF9kID0gKF9jID0gdmFsLm1hdGNoKC9cXC4oXFxkKykkLykpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1sxXSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmxlbmd0aCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogMDtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShgJHtCaWdOdW1iZXIodmFsKS50b0ZpeGVkKGRlY2ltYWxzKX0ke2hhc0RlY2ltYWxQb2ludCA/ICcuJyA6ICcnfWAudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UoZSk7XG4gICAgfSwgW29uQ2hhbmdlLCBfdmFsdWUsIHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHNdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2s7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gKF9iID0gKF9hID0gY29udGFpbmVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogTUlOX0lOUFVUX1dJRFRIO1xuICAgICAgICBjb25zdCBwcmVmaXhXaWR0aCA9IChfZCA9IChfYyA9IHByZWZpeFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Mub2Zmc2V0V2lkdGgpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDA7XG4gICAgICAgIGNvbnN0IHN1ZmZpeFdpZHRoID0gKF9mID0gKF9lID0gc3VmZml4UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogMDtcbiAgICAgICAgY29uc3QgY3VycmVuY3lXaWR0aCA9IChfaCA9IChfZyA9IGN1cnJlbmN5UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogMDtcbiAgICAgICAgY29uc3QgZmFrZVdpZHRoID0gKF9rID0gKF9qID0gZmFrZUVsZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oub2Zmc2V0V2lkdGgpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IDA7XG4gICAgICAgIGNvbnN0IGdhcFdpZHRoID0gcHJlZml4V2lkdGggJiYgc3VmZml4V2lkdGggJiYgY3VycmVuY3lXaWR0aFxuICAgICAgICAgICAgPyAyNFxuICAgICAgICAgICAgOiAocHJlZml4V2lkdGggJiYgc3VmZml4V2lkdGgpIHx8IChwcmVmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoKSB8fCAoc3VmZml4V2lkdGggJiYgY3VycmVuY3lXaWR0aClcbiAgICAgICAgICAgICAgICA/IDE2XG4gICAgICAgICAgICAgICAgOiBwcmVmaXhXaWR0aCB8fCBzdWZmaXhXaWR0aCB8fCBjdXJyZW5jeVdpZHRoXG4gICAgICAgICAgICAgICAgICAgID8gOFxuICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gY29udGFpbmVyV2lkdGggLSBwcmVmaXhXaWR0aCAtIHN1ZmZpeFdpZHRoIC0gY3VycmVuY3lXaWR0aCAtIGdhcFdpZHRoO1xuICAgICAgICBjb25zdCBpc01heCA9IGZha2VXaWR0aCA+PSBtYXhXaWR0aDtcbiAgICAgICAgc2V0V2lkdGgoTWF0aC5taW4obWF4V2lkdGgsIE1hdGgubWF4KGZha2VXaWR0aCwgTUlOX0lOUFVUX1dJRFRIKSkpO1xuICAgICAgICBzZXRJc01heFdpZHRoKGlzTWF4KTtcbiAgICAgICAgc2Nyb2xsVG9FbmQodHJ1ZSk7XG4gICAgfSwgW192YWx1ZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBsZXQgdmFsID0gdmFsdWU7XG4gICAgICAgIGxldCBoYXNEZWNpbWFsUG9pbnQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgICAgIHZhbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3BsaXQoJywnKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBoYXNEZWNpbWFsUG9pbnQgPSB2YWwubGFzdEluZGV4T2YoJy4nKSA9PT0gdmFsLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0RlY2ltYWxQb2ludClcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oK3ZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbCAhPT0gJ2JpZ2ludCcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICgodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpICYmICh0eXBlb2YgbWF4RnJhY3Rpb25EaWdpdHMgPT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXhGcmFjdGlvbkRpZ2l0cyA9PT0gJ2JpZ2ludCcpKSB7XG4gICAgICAgICAgICBjb25zdCBbaW50LCBkZWNpbWFsXSA9ICgnJyArIHZhbCkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmIChkZWNpbWFsICE9IG51bGwgJiYgZGVjaW1hbC5sZW5ndGggPiBOdW1iZXIobWF4RnJhY3Rpb25EaWdpdHMpKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gaW50ICsgJy4nICsgZGVjaW1hbC5zbGljZSgwLCBOdW1iZXIobWF4RnJhY3Rpb25EaWdpdHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsID09PSAnJyB8fCB2YWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IChfYyA9IChfYiA9IChfYSA9ICgnJyArIHZhbCkubWF0Y2goL1xcLihcXGQrKSQvKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwO1xuICAgICAgICAgICAgc2V0VmFsdWUoYCR7QmlnTnVtYmVyKHZhbCkudG9GaXhlZChkZWNpbWFscyl9JHtoYXNEZWNpbWFsUG9pbnQgPyAnLicgOiAnJ31gLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICB9LCBbdmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzXSk7XG4gICAgcmV0dXJuIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCd3cmFwcGVyJywgW3dyYXBwZXJDbHMsIGludmFsaWQgPyBjbGFzc2VzKCdpbnZhbGlkJykgOiB1bmRlZmluZWRdLmpvaW4oJyAnKS50cmltKCkpLCBjaGlsZHJlbjogW19qc3hzKFwiZGl2XCIsIHsgcmVmOiBjb250YWluZXJSZWYsIGNsYXNzTmFtZTogY2xhc3Nlcyh2b2lkIDAsIFtjbGFzc05hbWUsIGlzRm9jdXMgPyBjbGFzc2VzKCdmb2N1cycpIDogJyddLmpvaW4oJyAnKS50cmltKCkpLCBvbkNsaWNrOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXhXaWR0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvRW5kKCk7XG4gICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IFtwcmVmaXggJiYgX2pzeChcInNwYW5cIiwgeyByZWY6IHByZWZpeFJlZiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdwcmVmaXgnKSwgY2hpbGRyZW46IHByZWZpeCB9KSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZWxlbWVudCcsICghaXNGb2N1cyAmJiBpc01heFdpZHRoKSA/IGNsYXNzZXMoJ2VsZW1lbnQtbWF4JykgOiAnJyksIGNoaWxkcmVuOiBfanN4KFwiaW5wdXRcIiwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyByZWY6IGlucHV0UmVmLCB2YWx1ZTogZm9ybWF0dGVkVmFsdWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgc3R5bGU6IHsgJy0taW5wdXQtd2lkdGgnOiBgJHtfd2lkdGh9cHhgIH0sIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsIG9uRm9jdXM6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0ZvY3VzKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZvY3VzID09PSBudWxsIHx8IG9uRm9jdXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRm9jdXMoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25CbHVyOiBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNGb2N1cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0pKSB9KSwgY3VycmVuY3kgJiYgX2pzeChcInNwYW5cIiwgeyByZWY6IGN1cnJlbmN5UmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2N1cnJlbmN5JyksIGNoaWxkcmVuOiBjdXJyZW5jeSB9KSwgc3VmZml4ICYmIF9qc3goXCJzcGFuXCIsIHsgcmVmOiBzdWZmaXhSZWYsIGNsYXNzTmFtZTogY2xhc3Nlcygnc3VmZml4JyksIGNoaWxkcmVuOiBzdWZmaXggfSksIF9qc3goXCJzcGFuXCIsIHsgcmVmOiBmYWtlRWxlUmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2Zha2UnKSwgb25DbGljazogZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpLCBjaGlsZHJlbjogbnVtZXJpY0Zvcm1hdHRlcignJyArIChfdmFsdWUgPT0gbnVsbCA/ICcnIDogX3ZhbHVlKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob3VzYW5kU2VwYXJhdG9yOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93TmVnYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSB9KV0gfSksIChtZXNzYWdlIHx8IGZvb3Rub3RlKSAmJiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZXh0cmEnKSwgY2hpbGRyZW46IFttZXNzYWdlICYmIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ21lc3NhZ2UnLCBtZXNzYWdlQ2xzKSwgY2hpbGRyZW46IG1lc3NhZ2UgfSksIGZvb3Rub3RlICYmIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2Zvb3Rub3RlJywgZm9vdG5vdGVDbHMpLCBjaGlsZHJlbjogZm9vdG5vdGUgfSldIH0pXSB9KTtcbn07XG5leHBvcnQgZGVmYXVsdCBtZW1vKElucHV0QW1vdW50KTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=