@cartanova/qgrid-cli 1.0.3 → 1.1.0

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.
Files changed (133) hide show
  1. package/bundle/dist/application/qgrid/pool.js +15 -6
  2. package/bundle/dist/application/qgrid/qgrid.frame.js +17 -22
  3. package/bundle/dist/application/qgrid/qgrid.types.js +5 -2
  4. package/bundle/dist/application/request-log/request-log.model.js +2 -2
  5. package/bundle/dist/sonamu.config.js +5 -2
  6. package/bundle/src/application/qgrid/pool.ts +17 -7
  7. package/bundle/src/application/qgrid/qgrid.frame.ts +18 -25
  8. package/bundle/src/application/qgrid/qgrid.types.ts +1 -1
  9. package/bundle/src/application/request-log/request-log.model.ts +2 -2
  10. package/bundle/src/sonamu.config.ts +1 -1
  11. package/bundle/web-dist/{web-dist/client/assets/index-DlPchHBY.js → client/assets/index-C0m8rRjO.js} +2 -2
  12. package/bundle/web-dist/client/assets/{routes-CagDz23B.js → routes-B1eOXnpo.js} +1 -1
  13. package/bundle/web-dist/client/assets/{show-aXUGa0gm.js → show-BztN6MXO.js} +1 -1
  14. package/bundle/web-dist/client/assets/tokens-rR2_-Pte.js +1 -0
  15. package/bundle/web-dist/client/index.html +1 -1
  16. package/bundle/web-dist/server/assets/{tokens-JH6FsnWZ.js → tokens-ARL5AOAh.js} +4 -1
  17. package/bundle/web-dist/server/entry-server.generated.js +1 -1
  18. package/dist/cli.js +34 -25
  19. package/package.json +11 -11
  20. package/bundle/dist/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +0 -9
  21. package/bundle/dist/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js +0 -6
  22. package/bundle/dist/dist/_virtual/_rolldown/runtime.js +0 -15
  23. package/bundle/dist/dist/application/qgrid/oauth.js +0 -140
  24. package/bundle/dist/dist/application/qgrid/pool.js +0 -100
  25. package/bundle/dist/dist/application/qgrid/qgrid.frame.js +0 -280
  26. package/bundle/dist/dist/application/qgrid/qgrid.types.js +0 -79
  27. package/bundle/dist/dist/application/qgrid/worker.js +0 -183
  28. package/bundle/dist/dist/application/queries.generated.js +0 -31
  29. package/bundle/dist/dist/application/request-log/request-log.model.js +0 -113
  30. package/bundle/dist/dist/application/request-log/request-log.types.js +0 -13
  31. package/bundle/dist/dist/application/sonamu.generated.js +0 -99
  32. package/bundle/dist/dist/application/sonamu.generated.sso.js +0 -34
  33. package/bundle/dist/dist/application/token/token.model.js +0 -157
  34. package/bundle/dist/dist/application/token/token.types.js +0 -22
  35. package/bundle/dist/dist/i18n/en.js +0 -63
  36. package/bundle/dist/dist/i18n/ko.js +0 -62
  37. package/bundle/dist/dist/i18n/sd.generated.js +0 -272
  38. package/bundle/dist/dist/index.js +0 -11
  39. package/bundle/dist/dist/migrations/20260410171405_create__request_logs.js +0 -26
  40. package/bundle/dist/dist/migrations/20260410171406_create__tokens.js +0 -24
  41. package/bundle/dist/dist/migrations/20260411120624_alter_tokens_alter2.js +0 -16
  42. package/bundle/dist/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -155
  43. package/bundle/dist/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +0 -1484
  44. package/bundle/dist/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +0 -887
  45. package/bundle/dist/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2746
  46. package/bundle/dist/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +0 -8
  47. package/bundle/dist/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +0 -8
  48. package/bundle/dist/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +0 -662
  49. package/bundle/dist/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +0 -386
  50. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -82
  51. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +0 -48
  52. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +0 -1307
  53. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +0 -558
  54. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +0 -33
  55. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +0 -226
  56. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +0 -27
  57. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +0 -77
  58. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +0 -374
  59. package/bundle/dist/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +0 -37
  60. package/bundle/dist/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2886
  61. package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
  62. package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
  63. package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
  64. package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
  65. package/bundle/dist/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
  66. package/bundle/dist/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1127
  67. package/bundle/dist/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
  68. package/bundle/dist/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
  69. package/bundle/dist/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -506
  70. package/bundle/dist/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -86
  71. package/bundle/dist/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.9.2_@emnapi_runtime@1.9.2_@types_node@25.0.7_esbuild@0.27.4_jiti@2.6.1_sass@1.98.0_tsx@4.21.0/node_modules/vite/dist/node/module-runner.js +0 -426
  72. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -6
  73. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
  74. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
  75. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
  76. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/index.DOa3dzoN.js +0 -16
  77. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -59
  78. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/test.p_J6dB8a.js +0 -2910
  79. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -44
  80. package/bundle/dist/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/index.js +0 -28
  81. package/bundle/dist/dist/sonamu.config.js +0 -196
  82. package/bundle/dist/dist/testing/fixture.js +0 -8
  83. package/bundle/dist/dist/testing/global.js +0 -9
  84. package/bundle/dist/dist/testing/setup-mocks.js +0 -17
  85. package/bundle/dist/dist/utils/subset-loaders.js +0 -12
  86. package/bundle/src/src/application/qgrid/oauth.ts +0 -181
  87. package/bundle/src/src/application/qgrid/pool.ts +0 -132
  88. package/bundle/src/src/application/qgrid/qgrid.frame.ts +0 -275
  89. package/bundle/src/src/application/qgrid/qgrid.types.ts +0 -117
  90. package/bundle/src/src/application/qgrid/worker.ts +0 -234
  91. package/bundle/src/src/application/queries.generated.ts +0 -59
  92. package/bundle/src/src/application/request-log/request-log.entity.json +0 -75
  93. package/bundle/src/src/application/request-log/request-log.model.ts +0 -155
  94. package/bundle/src/src/application/request-log/request-log.types.ts +0 -15
  95. package/bundle/src/src/application/sonamu.generated.http +0 -187
  96. package/bundle/src/src/application/sonamu.generated.sso.ts +0 -66
  97. package/bundle/src/src/application/sonamu.generated.ts +0 -135
  98. package/bundle/src/src/application/token/token.entity.json +0 -37
  99. package/bundle/src/src/application/token/token.model.ts +0 -160
  100. package/bundle/src/src/application/token/token.types.ts +0 -26
  101. package/bundle/src/src/i18n/en.ts +0 -59
  102. package/bundle/src/src/i18n/ko.ts +0 -59
  103. package/bundle/src/src/i18n/sd.generated.ts +0 -384
  104. package/bundle/src/src/index.ts +0 -6
  105. package/bundle/src/src/migrations/20260410171405_create__request_logs.ts +0 -23
  106. package/bundle/src/src/migrations/20260410171406_create__tokens.ts +0 -21
  107. package/bundle/src/src/migrations/20260411120624_alter_tokens_alter2.ts +0 -15
  108. package/bundle/src/src/sonamu.config.ts +0 -248
  109. package/bundle/src/src/testing/fixture.ts +0 -6
  110. package/bundle/src/src/testing/global.ts +0 -6
  111. package/bundle/src/src/testing/setup-mocks.ts +0 -44
  112. package/bundle/src/src/typings/fastify.d.ts +0 -8
  113. package/bundle/src/src/typings/sonamu.d.ts +0 -17
  114. package/bundle/src/src/utils/subset-loaders.ts +0 -11
  115. package/bundle/web-dist/client/assets/index-DlPchHBY.js +0 -116
  116. package/bundle/web-dist/client/assets/tokens-DRkXtZ3Q.js +0 -1
  117. package/bundle/web-dist/web-dist/client/assets/index-vZsvyuFn.css +0 -1
  118. package/bundle/web-dist/web-dist/client/assets/rolldown-runtime-Dw2cE7zH.js +0 -1
  119. package/bundle/web-dist/web-dist/client/assets/routes-CagDz23B.js +0 -1
  120. package/bundle/web-dist/web-dist/client/assets/sd.generated-BrQoQXvv.js +0 -47
  121. package/bundle/web-dist/web-dist/client/assets/services.generated-BspO2L0j.js +0 -1
  122. package/bundle/web-dist/web-dist/client/assets/show-aXUGa0gm.js +0 -29
  123. package/bundle/web-dist/web-dist/client/assets/tokens-DRkXtZ3Q.js +0 -1
  124. package/bundle/web-dist/web-dist/client/assets/vendor-react-DH4kUfK2.js +0 -9
  125. package/bundle/web-dist/web-dist/client/assets/vendor-tanstack-CUxlo6YN.js +0 -1
  126. package/bundle/web-dist/web-dist/client/index.html +0 -18
  127. package/bundle/web-dist/web-dist/server/assets/react-dom-CGIzOSuj.js +0 -335
  128. package/bundle/web-dist/web-dist/server/assets/routes-ClzReRep.js +0 -490
  129. package/bundle/web-dist/web-dist/server/assets/sd.generated-BnonqqKr.js +0 -21694
  130. package/bundle/web-dist/web-dist/server/assets/services.generated-D5ABD5fr.js +0 -836
  131. package/bundle/web-dist/web-dist/server/assets/show-C9pcdSxc.js +0 -23364
  132. package/bundle/web-dist/web-dist/server/assets/tokens-JH6FsnWZ.js +0 -860
  133. package/bundle/web-dist/web-dist/server/entry-server.generated.js +0 -44646
@@ -1,272 +0,0 @@
1
- import "../_virtual/_rolldown/runtime.js";
2
- import en_default from "./en.js";
3
- import ko_default from "./ko.js";
4
- import { Sonamu } from "sonamu";
5
- //#region src/i18n/sd.generated.ts
6
- /**
7
- * @generated
8
- * 직접 수정하지 마세요.
9
- */
10
- const DEFAULT_LOCALE = "ko";
11
- const SUPPORTED_LOCALES = ["ko", "en"];
12
- function getCurrentLocale() {
13
- try {
14
- return Sonamu.getContext().locale ?? DEFAULT_LOCALE;
15
- } catch (_) {
16
- return DEFAULT_LOCALE;
17
- }
18
- }
19
- const rcKeysKo = {
20
- "rc.asyncSelect.loading": "로딩 중...",
21
- "rc.asyncSelect.noOptions": "옵션이 없습니다",
22
- "rc.asyncSelect.noResults": "검색 결과가 없습니다",
23
- "rc.asyncSelect.selectPlaceholder": "선택하세요...",
24
- "rc.combobox.noResults": "검색 결과가 없습니다",
25
- "rc.combobox.selectPlaceholder": "선택하세요...",
26
- "rc.datePicker.pickDate": "날짜 선택",
27
- "rc.datePicker.placeholder": "날짜 선택",
28
- "rc.datePicker.selectDate": "날짜 선택",
29
- "rc.dateSelectorMultiple.addDate": "날짜 추가",
30
- "rc.dateSelectorMultiple.dateRange": "기간",
31
- "rc.dateSelectorMultiple.placeholder": "날짜 선택",
32
- "rc.dateSelectorMultiple.singleDate": "단일",
33
- "rc.fileInput.browseFiles": "파일 찾기",
34
- "rc.fileInput.dropZone": "파일을 드래그하거나 클릭하여 업로드",
35
- "rc.fileInput.filePlaceholder": "파일",
36
- "rc.fileInput.imagePlaceholder": "이미지",
37
- "rc.fileInput.maxFilesExceeded": (maxFiles) => `최대 ${maxFiles}개 파일만 업로드 가능합니다`,
38
- "rc.fileInput.pending": "대기 중",
39
- "rc.fileInput.remove": "제거",
40
- "rc.fileInput.uploadFailed": "업로드 실패",
41
- "rc.fileInput.uploading": "업로드 중...",
42
- "rc.monthPickerMultiple.addMonth": "월 추가",
43
- "rc.monthPickerMultiple.dateRange": "기간",
44
- "rc.monthPickerMultiple.endDate": "종료일",
45
- "rc.monthPickerMultiple.placeholder": "월 선택",
46
- "rc.monthPickerMultiple.singleDate": "단일",
47
- "rc.monthPickerMultiple.startDate": "시작일",
48
- "rc.multiSelect.clear": "전체 해제",
49
- "rc.multiSelect.close": "닫기",
50
- "rc.multiSelect.moreItems": (count) => `+${count}개 더보기`,
51
- "rc.multiSelect.noOptions": "옵션이 없습니다",
52
- "rc.multiSelect.noOptionsSelected": "선택된 옵션이 없습니다",
53
- "rc.multiSelect.noResults": "검색 결과가 없습니다",
54
- "rc.multiSelect.optionsCount": (count) => `${count}개 옵션`,
55
- "rc.multiSelect.selectAll": "전체 선택",
56
- "rc.multiSelect.selectPlaceholder": "선택하세요...",
57
- "rc.pagination.next": "다음",
58
- "rc.pagination.previous": "이전",
59
- "rc.pagination.showing": (start, end, total) => `${total}개 중 ${start}-${end}`,
60
- "rc.calendar.month.0": "1월",
61
- "rc.calendar.month.1": "2월",
62
- "rc.calendar.month.2": "3월",
63
- "rc.calendar.month.3": "4월",
64
- "rc.calendar.month.4": "5월",
65
- "rc.calendar.month.5": "6월",
66
- "rc.calendar.month.6": "7월",
67
- "rc.calendar.month.7": "8월",
68
- "rc.calendar.month.8": "9월",
69
- "rc.calendar.month.9": "10월",
70
- "rc.calendar.month.10": "11월",
71
- "rc.calendar.month.11": "12월",
72
- "rc.sonamuFilter.title": "소나무 필터",
73
- "rc.sonamuFilter.apply": "적용",
74
- "rc.sonamuFilter.reset": "초기화",
75
- "rc.sonamuFilter.addRule": "규칙 추가",
76
- "rc.sonamuFilter.noRulesYet": "아직 규칙이 없습니다. \"+ 규칙 추가\"를 클릭하여 시작하세요.",
77
- "rc.sonamuFilter.selectField": "필드 선택",
78
- "rc.sonamuFilter.selectOperator": "연산자 선택",
79
- "rc.sonamuFilter.selectOperatorFirst": "먼저 연산자를 선택하세요",
80
- "rc.sonamuFilter.enterValue": "값 입력",
81
- "rc.sonamuFilter.enterNumber": "숫자 입력",
82
- "rc.sonamuFilter.notSupported": "지원하지 않음",
83
- "rc.sonamuFilter.startDate": "시작일",
84
- "rc.sonamuFilter.endDate": "종료일",
85
- "rc.sonamuFilter.appliedFilters": "🌲 적용된 소나무 필터",
86
- "rc.common.cancel": "취소",
87
- "rc.common.save": "저장"
88
- };
89
- const rcKeysEn = {
90
- "rc.asyncSelect.loading": "Loading...",
91
- "rc.asyncSelect.noOptions": "No options",
92
- "rc.asyncSelect.noResults": "No results",
93
- "rc.asyncSelect.selectPlaceholder": "Select...",
94
- "rc.combobox.noResults": "No results",
95
- "rc.combobox.selectPlaceholder": "Select...",
96
- "rc.datePicker.pickDate": "Pick date",
97
- "rc.datePicker.placeholder": "Pick date",
98
- "rc.datePicker.selectDate": "Select date",
99
- "rc.dateSelectorMultiple.addDate": "Add date",
100
- "rc.dateSelectorMultiple.dateRange": "Range",
101
- "rc.dateSelectorMultiple.placeholder": "Pick date",
102
- "rc.dateSelectorMultiple.singleDate": "Single",
103
- "rc.fileInput.browseFiles": "Browse files",
104
- "rc.fileInput.dropZone": "Drag files here or click to upload",
105
- "rc.fileInput.filePlaceholder": "File",
106
- "rc.fileInput.imagePlaceholder": "Image",
107
- "rc.fileInput.maxFilesExceeded": (maxFiles) => `Maximum ${maxFiles} files allowed`,
108
- "rc.fileInput.pending": "Pending",
109
- "rc.fileInput.remove": "Remove",
110
- "rc.fileInput.uploadFailed": "Upload failed",
111
- "rc.fileInput.uploading": "Uploading...",
112
- "rc.monthPickerMultiple.addMonth": "Add month",
113
- "rc.monthPickerMultiple.dateRange": "Range",
114
- "rc.monthPickerMultiple.endDate": "End date",
115
- "rc.monthPickerMultiple.placeholder": "Pick month",
116
- "rc.monthPickerMultiple.singleDate": "Single",
117
- "rc.monthPickerMultiple.startDate": "Start date",
118
- "rc.multiSelect.clear": "Clear all",
119
- "rc.multiSelect.close": "Close",
120
- "rc.multiSelect.moreItems": (count) => `+${count} more`,
121
- "rc.multiSelect.noOptions": "No options",
122
- "rc.multiSelect.noOptionsSelected": "No options selected",
123
- "rc.multiSelect.noResults": "No results",
124
- "rc.multiSelect.optionsCount": (count) => `${count} options`,
125
- "rc.multiSelect.selectAll": "Select all",
126
- "rc.multiSelect.selectPlaceholder": "Select...",
127
- "rc.pagination.next": "Next",
128
- "rc.pagination.previous": "Previous",
129
- "rc.pagination.showing": (start, end, total) => `Showing ${start}-${end} of ${total}`,
130
- "rc.calendar.month.0": "January",
131
- "rc.calendar.month.1": "February",
132
- "rc.calendar.month.2": "March",
133
- "rc.calendar.month.3": "April",
134
- "rc.calendar.month.4": "May",
135
- "rc.calendar.month.5": "June",
136
- "rc.calendar.month.6": "July",
137
- "rc.calendar.month.7": "August",
138
- "rc.calendar.month.8": "September",
139
- "rc.calendar.month.9": "October",
140
- "rc.calendar.month.10": "November",
141
- "rc.calendar.month.11": "December",
142
- "rc.sonamuFilter.title": "Sonamu Filter",
143
- "rc.sonamuFilter.apply": "Apply",
144
- "rc.sonamuFilter.reset": "Reset",
145
- "rc.sonamuFilter.addRule": "Add Rule",
146
- "rc.sonamuFilter.noRulesYet": "No rules yet. Click \"+ Add Rule\" to start.",
147
- "rc.sonamuFilter.selectField": "Select field",
148
- "rc.sonamuFilter.selectOperator": "Operator",
149
- "rc.sonamuFilter.selectOperatorFirst": "Select operator first",
150
- "rc.sonamuFilter.enterValue": "Enter value",
151
- "rc.sonamuFilter.enterNumber": "Enter number",
152
- "rc.sonamuFilter.notSupported": "Not supported",
153
- "rc.sonamuFilter.startDate": "Start date",
154
- "rc.sonamuFilter.endDate": "End date",
155
- "rc.sonamuFilter.appliedFilters": "🌲 Applied SonamuFilters",
156
- "rc.common.cancel": "Cancel",
157
- "rc.common.save": "Save"
158
- };
159
- const entityLabels = {
160
- "entity.RequestLog": "RequestLog",
161
- "entity.RequestLog.id": "ID",
162
- "entity.RequestLog.created_at": "등록일시",
163
- "entity.RequestLog.token_name": "토큰 이름",
164
- "entity.RequestLog.query": "prompt 전문",
165
- "entity.RequestLog.response": "llm 응답 전문",
166
- "entity.RequestLog.input_tokens": "입력 토큰",
167
- "entity.RequestLog.output_tokens": "출력 토큰",
168
- "entity.RequestLog.cache_read_tokens": "캐시 읽기 토큰",
169
- "entity.RequestLog.cache_creation_tokens": "캐시 생성 토큰",
170
- "entity.RequestLog.duration_ms": "응답 소요시간(ms)",
171
- "enum.RequestLogOrderBy.id-desc": "ID최신순",
172
- "enum.RequestLogSearchField.id": "ID",
173
- "enum.RequestLogSearchField.token_name": "토큰이름",
174
- "enum.RequestLogSearchField.query": "쿼리",
175
- "entity.Token": "Token",
176
- "entity.Token.id": "ID",
177
- "entity.Token.created_at": "등록일시",
178
- "entity.Token.token": "access_token",
179
- "entity.Token.name": "토큰 이름",
180
- "entity.Token.refresh_token": "refresh_token",
181
- "entity.Token.expires_at": "만료 시각 (epoch ms)",
182
- "entity.Token.account_uuid": "Anthropic 계정 UUID",
183
- "entity.Token.active": "활성 여부",
184
- "enum.TokenOrderBy.id-desc": "ID최신순",
185
- "enum.TokenSearchField.id": "ID",
186
- "enum.TokenSearchField.name": "이름"
187
- };
188
- function defineLocale(dict) {
189
- return dict;
190
- }
191
- const dictionaries = {
192
- ko: {
193
- ...rcKeysKo,
194
- ...entityLabels,
195
- ...ko_default
196
- },
197
- en: {
198
- ...rcKeysEn,
199
- ...en_default
200
- }
201
- };
202
- function getDictValue(key, locale) {
203
- const dict = dictionaries[locale];
204
- if (dict?.[key] !== void 0) return dict[key];
205
- if (locale !== DEFAULT_LOCALE && dictionaries[DEFAULT_LOCALE]?.[key] !== void 0) return dictionaries[DEFAULT_LOCALE][key];
206
- for (const supportedLocale of SUPPORTED_LOCALES) if (supportedLocale !== locale && supportedLocale !== DEFAULT_LOCALE) {
207
- if (dictionaries[supportedLocale]?.[key] !== void 0) return dictionaries[supportedLocale][key];
208
- }
209
- return key;
210
- }
211
- /**
212
- * Sonamu Dictionary 함수
213
- * locale에 맞는 번역 텍스트를 반환합니다.
214
- *
215
- * @example
216
- * SD("common.save") // → "저장" (LocalizedString)
217
- * SD("user.notFound")(1) // → "존재하지 않는 User ID 1" (LocalizedString)
218
- */
219
- function SD(key) {
220
- return getDictValue(key, getCurrentLocale());
221
- }
222
- /**
223
- * 특정 locale의 번역 텍스트를 반환하는 함수를 생성합니다.
224
- *
225
- * @example
226
- * const EN = SD.locale("en");
227
- * EN("common.save") // → "Save"
228
- */
229
- SD.locale = (locale) => (key) => {
230
- return getDictValue(key, locale);
231
- };
232
- /**
233
- * locale에 따라 적절한 컬럼 값을 반환합니다.
234
- * DB에 name, name_ko, name_en처럼 localized column이 있을 때 사용합니다.
235
- *
236
- * 우선순위 (지원 로케일은 ko/jp/en이고, 서비스의 기본 로케일은 ko, 사용자의 로케일은 jp일 때): column_jp → column → column_ko → column_en
237
- * 우선순위 (지원 로케일은 ko/jp/en이고, 서비스의 기본 로케일은 en, 사용자의 로케일은 ko일 때): column_ko → column → column_en → column_jp
238
- *
239
- * @example
240
- * localizedColumn(tag, "name")
241
- */
242
- function localizedColumn(row, column) {
243
- const locale = getCurrentLocale();
244
- const otherLocales = SUPPORTED_LOCALES.filter((l) => l !== locale && l !== DEFAULT_LOCALE);
245
- const localizedKey = (column, locale) => `${column}_${locale}`;
246
- const keys = [
247
- localizedKey(column, locale),
248
- column,
249
- localizedKey(column, DEFAULT_LOCALE),
250
- ...otherLocales.map((l) => localizedKey(column, l))
251
- ];
252
- for (const key of keys) {
253
- if (!(key in row)) continue;
254
- if (row[key] !== null && row[key] !== void 0 && row[key] !== "") return String(row[key]);
255
- }
256
- }
257
- /**
258
- * Enum의 localized labels를 Proxy로 반환합니다.
259
- * Select 컴포넌트 등에서 EnumLabel[key] 대신 사용합니다.
260
- *
261
- * @example
262
- * SD.enumLabels("TagOrderBy")[key] // → 현재 locale의 라벨
263
- */
264
- SD.enumLabels = (enumName) => {
265
- return new Proxy({}, { get(_, key) {
266
- return getDictValue(`enum.${enumName}.${key}`, getCurrentLocale());
267
- } });
268
- };
269
- //#endregion
270
- export { SD, defineLocale, localizedColumn };
271
-
272
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QuZ2VuZXJhdGVkLmpzIiwibmFtZXMiOlsia28iLCJlbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pMThuL3NkLmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtcblxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcImtvXCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9IFtcImtvXCIsIFwiZW5cIl0gYXMgY29uc3Q7XG5mdW5jdGlvbiBnZXRDdXJyZW50TG9jYWxlKCk6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0ge1xuICB0cnkge1xuICAgIGNvbnN0IGN0eCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgcmV0dXJuIChjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID8/IERFRkFVTFRfTE9DQUxFO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIERFRkFVTFRfTE9DQUxFO1xuICB9XG59XG5cbmltcG9ydCBlbiBmcm9tIFwiLi9lblwiO1xuaW1wb3J0IGtvIGZyb20gXCIuL2tvXCI7XG5cbi8vIHJlYWN0LWNvbXBvbmVudHMgaTE4biBrZXlzXG5jb25zdCByY0tleXNLbyA9IHtcbiAgLy8gQXN5bmNTZWxlY3QgQ29tcG9uZW50XG4gIFwicmMuYXN5bmNTZWxlY3QubG9hZGluZ1wiOiBcIuuhnOuUqSDspJEuLi5cIixcbiAgXCJyYy5hc3luY1NlbGVjdC5ub09wdGlvbnNcIjogXCLsmLXshZjsnbQg7JeG7Iq164uI64ukXCIsXG4gIFwicmMuYXN5bmNTZWxlY3Qubm9SZXN1bHRzXCI6IFwi6rKA7IOJIOqysOqzvOqwgCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5hc3luY1NlbGVjdC5zZWxlY3RQbGFjZWhvbGRlclwiOiBcIuyEoO2Dne2VmOyEuOyalC4uLlwiLFxuXG4gIC8vIENvbWJvYm94IENvbXBvbmVudFxuICBcInJjLmNvbWJvYm94Lm5vUmVzdWx0c1wiOiBcIuqygOyDiSDqsrDqs7zqsIAg7JeG7Iq164uI64ukXCIsXG4gIFwicmMuY29tYm9ib3guc2VsZWN0UGxhY2Vob2xkZXJcIjogXCLshKDtg53tlZjshLjsmpQuLi5cIixcblxuICAvLyBEYXRlUGlja2VyIENvbXBvbmVudFxuICBcInJjLmRhdGVQaWNrZXIucGlja0RhdGVcIjogXCLrgqDsp5wg7ISg7YOdXCIsXG4gIFwicmMuZGF0ZVBpY2tlci5wbGFjZWhvbGRlclwiOiBcIuuCoOynnCDshKDtg51cIixcbiAgXCJyYy5kYXRlUGlja2VyLnNlbGVjdERhdGVcIjogXCLrgqDsp5wg7ISg7YOdXCIsXG5cbiAgLy8gRGF0ZVNlbGVjdG9yTXVsdGlwbGUgQ29tcG9uZW50XG4gIFwicmMuZGF0ZVNlbGVjdG9yTXVsdGlwbGUuYWRkRGF0ZVwiOiBcIuuCoOynnCDstpTqsIBcIixcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5kYXRlUmFuZ2VcIjogXCLquLDqsIRcIixcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5wbGFjZWhvbGRlclwiOiBcIuuCoOynnCDshKDtg51cIixcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5zaW5nbGVEYXRlXCI6IFwi64uo7J28XCIsXG5cbiAgLy8gRmlsZUlucHV0IENvbXBvbmVudFxuICBcInJjLmZpbGVJbnB1dC5icm93c2VGaWxlc1wiOiBcIu2MjOydvCDssL7quLBcIixcbiAgXCJyYy5maWxlSW5wdXQuZHJvcFpvbmVcIjogXCLtjIzsnbzsnYQg65Oc656Y6re47ZWY6rGw64KYIO2BtOumre2VmOyXrCDsl4XroZzrk5xcIixcbiAgXCJyYy5maWxlSW5wdXQuZmlsZVBsYWNlaG9sZGVyXCI6IFwi7YyM7J28XCIsXG4gIFwicmMuZmlsZUlucHV0LmltYWdlUGxhY2Vob2xkZXJcIjogXCLsnbTrr7jsp4BcIixcbiAgXCJyYy5maWxlSW5wdXQubWF4RmlsZXNFeGNlZWRlZFwiOiAobWF4RmlsZXM6IG51bWJlcikgPT5cbiAgICBg7LWc64yAICR7bWF4RmlsZXN96rCcIO2MjOydvOunjCDsl4XroZzrk5wg6rCA64ql7ZWp64uI64ukYCxcbiAgXCJyYy5maWxlSW5wdXQucGVuZGluZ1wiOiBcIuuMgOq4sCDspJFcIixcbiAgXCJyYy5maWxlSW5wdXQucmVtb3ZlXCI6IFwi7KCc6rGwXCIsXG4gIFwicmMuZmlsZUlucHV0LnVwbG9hZEZhaWxlZFwiOiBcIuyXheuhnOuTnCDsi6TtjKhcIixcbiAgXCJyYy5maWxlSW5wdXQudXBsb2FkaW5nXCI6IFwi7JeF66Gc65OcIOykkS4uLlwiLFxuXG4gIC8vIE1vbnRoUGlja2VyTXVsdGlwbGUgQ29tcG9uZW50XG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5hZGRNb250aFwiOiBcIuyblCDstpTqsIBcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLmRhdGVSYW5nZVwiOiBcIuq4sOqwhFwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuZW5kRGF0ZVwiOiBcIuyiheujjOydvFwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUucGxhY2Vob2xkZXJcIjogXCLsm5Qg7ISg7YOdXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5zaW5nbGVEYXRlXCI6IFwi64uo7J28XCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5zdGFydERhdGVcIjogXCLsi5zsnpHsnbxcIixcblxuICAvLyBNdWx0aVNlbGVjdCBDb21wb25lbnRcbiAgXCJyYy5tdWx0aVNlbGVjdC5jbGVhclwiOiBcIuyghOyytCDtlbTsoJxcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5jbG9zZVwiOiBcIuuLq+q4sFwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm1vcmVJdGVtc1wiOiAoY291bnQ6IG51bWJlcikgPT4gYCske2NvdW50feqwnCDrjZTrs7TquLBgLFxuICBcInJjLm11bHRpU2VsZWN0Lm5vT3B0aW9uc1wiOiBcIuyYteyFmOydtCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5ub09wdGlvbnNTZWxlY3RlZFwiOiBcIuyEoO2DneuQnCDsmLXshZjsnbQg7JeG7Iq164uI64ukXCIsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9SZXN1bHRzXCI6IFwi6rKA7IOJIOqysOqzvOqwgCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5vcHRpb25zQ291bnRcIjogKGNvdW50OiBudW1iZXIpID0+IGAke2NvdW50feqwnCDsmLXshZhgLFxuICBcInJjLm11bHRpU2VsZWN0LnNlbGVjdEFsbFwiOiBcIuyghOyytCDshKDtg51cIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5zZWxlY3RQbGFjZWhvbGRlclwiOiBcIuyEoO2Dne2VmOyEuOyalC4uLlwiLFxuXG4gIC8vIFBhZ2luYXRpb24gQ29tcG9uZW50XG4gIFwicmMucGFnaW5hdGlvbi5uZXh0XCI6IFwi64uk7J2MXCIsXG4gIFwicmMucGFnaW5hdGlvbi5wcmV2aW91c1wiOiBcIuydtOyghFwiLFxuICBcInJjLnBhZ2luYXRpb24uc2hvd2luZ1wiOiAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRvdGFsOiBudW1iZXIpID0+XG4gICAgYCR7dG90YWx96rCcIOykkSAke3N0YXJ0fS0ke2VuZH1gLFxuXG4gIC8vIENhbGVuZGFyIENvbXBvbmVudFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjBcIjogXCIx7JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguMVwiOiBcIjLsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4yXCI6IFwiM+yblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjNcIjogXCI07JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguNFwiOiBcIjXsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC41XCI6IFwiNuyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjZcIjogXCI37JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguN1wiOiBcIjjsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC44XCI6IFwiOeyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjlcIjogXCIxMOyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjEwXCI6IFwiMTHsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xMVwiOiBcIjEy7JuUXCIsXG5cbiAgLy8gU29uYW11IEZpbHRlciBDb21wb25lbnRcbiAgXCJyYy5zb25hbXVGaWx0ZXIudGl0bGVcIjogXCLshozrgpjrrLQg7ZWE7YSwXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmFwcGx5XCI6IFwi7KCB7JqpXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnJlc2V0XCI6IFwi7LSI6riw7ZmUXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmFkZFJ1bGVcIjogXCLqt5zsuZkg7LaU6rCAXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLm5vUnVsZXNZZXRcIjogJ+yVhOyngSDqt5zsuZnsnbQg7JeG7Iq164uI64ukLiBcIisg6rec7LmZIOy2lOqwgFwi66W8IO2BtOumre2VmOyXrCDsi5zsnpHtlZjshLjsmpQuJyxcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc2VsZWN0RmllbGRcIjogXCLtlYTrk5wg7ISg7YOdXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnNlbGVjdE9wZXJhdG9yXCI6IFwi7Jew7IKw7J6QIOyEoO2DnVwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RPcGVyYXRvckZpcnN0XCI6IFwi66i87KCAIOyXsOyCsOyekOulvCDshKDtg53tlZjshLjsmpRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW50ZXJWYWx1ZVwiOiBcIuqwkiDsnoXroKVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW50ZXJOdW1iZXJcIjogXCLsiKvsnpAg7J6F66ClXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLm5vdFN1cHBvcnRlZFwiOiBcIuyngOybkO2VmOyngCDslYrsnYxcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc3RhcnREYXRlXCI6IFwi7Iuc7J6R7J28XCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmVuZERhdGVcIjogXCLsooXro4zsnbxcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYXBwbGllZEZpbHRlcnNcIjogXCLwn4yyIOyggeyaqeuQnCDshozrgpjrrLQg7ZWE7YSwXCIsXG5cbiAgLy8gQ29tbW9uXG4gIFwicmMuY29tbW9uLmNhbmNlbFwiOiBcIuy3qOyGjFwiLFxuICBcInJjLmNvbW1vbi5zYXZlXCI6IFwi7KCA7J6lXCIsXG59O1xuXG5jb25zdCByY0tleXNFbiA9IHtcbiAgLy8gQXN5bmNTZWxlY3QgQ29tcG9uZW50XG4gIFwicmMuYXN5bmNTZWxlY3QubG9hZGluZ1wiOiBcIkxvYWRpbmcuLi5cIixcbiAgXCJyYy5hc3luY1NlbGVjdC5ub09wdGlvbnNcIjogXCJObyBvcHRpb25zXCIsXG4gIFwicmMuYXN5bmNTZWxlY3Qubm9SZXN1bHRzXCI6IFwiTm8gcmVzdWx0c1wiLFxuICBcInJjLmFzeW5jU2VsZWN0LnNlbGVjdFBsYWNlaG9sZGVyXCI6IFwiU2VsZWN0Li4uXCIsXG5cbiAgLy8gQ29tYm9ib3ggQ29tcG9uZW50XG4gIFwicmMuY29tYm9ib3gubm9SZXN1bHRzXCI6IFwiTm8gcmVzdWx0c1wiLFxuICBcInJjLmNvbWJvYm94LnNlbGVjdFBsYWNlaG9sZGVyXCI6IFwiU2VsZWN0Li4uXCIsXG5cbiAgLy8gRGF0ZVBpY2tlciBDb21wb25lbnRcbiAgXCJyYy5kYXRlUGlja2VyLnBpY2tEYXRlXCI6IFwiUGljayBkYXRlXCIsXG4gIFwicmMuZGF0ZVBpY2tlci5wbGFjZWhvbGRlclwiOiBcIlBpY2sgZGF0ZVwiLFxuICBcInJjLmRhdGVQaWNrZXIuc2VsZWN0RGF0ZVwiOiBcIlNlbGVjdCBkYXRlXCIsXG5cbiAgLy8gRGF0ZVNlbGVjdG9yTXVsdGlwbGUgQ29tcG9uZW50XG4gIFwicmMuZGF0ZVNlbGVjdG9yTXVsdGlwbGUuYWRkRGF0ZVwiOiBcIkFkZCBkYXRlXCIsXG4gIFwicmMuZGF0ZVNlbGVjdG9yTXVsdGlwbGUuZGF0ZVJhbmdlXCI6IFwiUmFuZ2VcIixcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5wbGFjZWhvbGRlclwiOiBcIlBpY2sgZGF0ZVwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnNpbmdsZURhdGVcIjogXCJTaW5nbGVcIixcblxuICAvLyBGaWxlSW5wdXQgQ29tcG9uZW50XG4gIFwicmMuZmlsZUlucHV0LmJyb3dzZUZpbGVzXCI6IFwiQnJvd3NlIGZpbGVzXCIsXG4gIFwicmMuZmlsZUlucHV0LmRyb3Bab25lXCI6IFwiRHJhZyBmaWxlcyBoZXJlIG9yIGNsaWNrIHRvIHVwbG9hZFwiLFxuICBcInJjLmZpbGVJbnB1dC5maWxlUGxhY2Vob2xkZXJcIjogXCJGaWxlXCIsXG4gIFwicmMuZmlsZUlucHV0LmltYWdlUGxhY2Vob2xkZXJcIjogXCJJbWFnZVwiLFxuICBcInJjLmZpbGVJbnB1dC5tYXhGaWxlc0V4Y2VlZGVkXCI6IChtYXhGaWxlczogbnVtYmVyKSA9PiBgTWF4aW11bSAke21heEZpbGVzfSBmaWxlcyBhbGxvd2VkYCxcbiAgXCJyYy5maWxlSW5wdXQucGVuZGluZ1wiOiBcIlBlbmRpbmdcIixcbiAgXCJyYy5maWxlSW5wdXQucmVtb3ZlXCI6IFwiUmVtb3ZlXCIsXG4gIFwicmMuZmlsZUlucHV0LnVwbG9hZEZhaWxlZFwiOiBcIlVwbG9hZCBmYWlsZWRcIixcbiAgXCJyYy5maWxlSW5wdXQudXBsb2FkaW5nXCI6IFwiVXBsb2FkaW5nLi4uXCIsXG5cbiAgLy8gTW9udGhQaWNrZXJNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLmFkZE1vbnRoXCI6IFwiQWRkIG1vbnRoXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5kYXRlUmFuZ2VcIjogXCJSYW5nZVwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuZW5kRGF0ZVwiOiBcIkVuZCBkYXRlXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5wbGFjZWhvbGRlclwiOiBcIlBpY2sgbW9udGhcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnNpbmdsZURhdGVcIjogXCJTaW5nbGVcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnN0YXJ0RGF0ZVwiOiBcIlN0YXJ0IGRhdGVcIixcblxuICAvLyBNdWx0aVNlbGVjdCBDb21wb25lbnRcbiAgXCJyYy5tdWx0aVNlbGVjdC5jbGVhclwiOiBcIkNsZWFyIGFsbFwiLFxuICBcInJjLm11bHRpU2VsZWN0LmNsb3NlXCI6IFwiQ2xvc2VcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5tb3JlSXRlbXNcIjogKGNvdW50OiBudW1iZXIpID0+IGArJHtjb3VudH0gbW9yZWAsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9PcHRpb25zXCI6IFwiTm8gb3B0aW9uc1wiLFxuICBcInJjLm11bHRpU2VsZWN0Lm5vT3B0aW9uc1NlbGVjdGVkXCI6IFwiTm8gb3B0aW9ucyBzZWxlY3RlZFwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm5vUmVzdWx0c1wiOiBcIk5vIHJlc3VsdHNcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5vcHRpb25zQ291bnRcIjogKGNvdW50OiBudW1iZXIpID0+IGAke2NvdW50fSBvcHRpb25zYCxcbiAgXCJyYy5tdWx0aVNlbGVjdC5zZWxlY3RBbGxcIjogXCJTZWxlY3QgYWxsXCIsXG4gIFwicmMubXVsdGlTZWxlY3Quc2VsZWN0UGxhY2Vob2xkZXJcIjogXCJTZWxlY3QuLi5cIixcblxuICAvLyBQYWdpbmF0aW9uIENvbXBvbmVudFxuICBcInJjLnBhZ2luYXRpb24ubmV4dFwiOiBcIk5leHRcIixcbiAgXCJyYy5wYWdpbmF0aW9uLnByZXZpb3VzXCI6IFwiUHJldmlvdXNcIixcbiAgXCJyYy5wYWdpbmF0aW9uLnNob3dpbmdcIjogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PlxuICAgIGBTaG93aW5nICR7c3RhcnR9LSR7ZW5kfSBvZiAke3RvdGFsfWAsXG5cbiAgLy8gQ2FsZW5kYXIgQ29tcG9uZW50XG4gIFwicmMuY2FsZW5kYXIubW9udGguMFwiOiBcIkphbnVhcnlcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xXCI6IFwiRmVicnVhcnlcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4yXCI6IFwiTWFyY2hcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4zXCI6IFwiQXByaWxcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC40XCI6IFwiTWF5XCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguNVwiOiBcIkp1bmVcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC42XCI6IFwiSnVseVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjdcIjogXCJBdWd1c3RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC44XCI6IFwiU2VwdGVtYmVyXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguOVwiOiBcIk9jdG9iZXJcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xMFwiOiBcIk5vdmVtYmVyXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguMTFcIjogXCJEZWNlbWJlclwiLFxuXG4gIC8vIFNvbmFtdSBGaWx0ZXIgQ29tcG9uZW50XG4gIFwicmMuc29uYW11RmlsdGVyLnRpdGxlXCI6IFwiU29uYW11IEZpbHRlclwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5hcHBseVwiOiBcIkFwcGx5XCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnJlc2V0XCI6IFwiUmVzZXRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYWRkUnVsZVwiOiBcIkFkZCBSdWxlXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLm5vUnVsZXNZZXRcIjogJ05vIHJ1bGVzIHlldC4gQ2xpY2sgXCIrIEFkZCBSdWxlXCIgdG8gc3RhcnQuJyxcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc2VsZWN0RmllbGRcIjogXCJTZWxlY3QgZmllbGRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc2VsZWN0T3BlcmF0b3JcIjogXCJPcGVyYXRvclwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RPcGVyYXRvckZpcnN0XCI6IFwiU2VsZWN0IG9wZXJhdG9yIGZpcnN0XCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmVudGVyVmFsdWVcIjogXCJFbnRlciB2YWx1ZVwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbnRlck51bWJlclwiOiBcIkVudGVyIG51bWJlclwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5ub3RTdXBwb3J0ZWRcIjogXCJOb3Qgc3VwcG9ydGVkXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnN0YXJ0RGF0ZVwiOiBcIlN0YXJ0IGRhdGVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW5kRGF0ZVwiOiBcIkVuZCBkYXRlXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmFwcGxpZWRGaWx0ZXJzXCI6IFwi8J+MsiBBcHBsaWVkIFNvbmFtdUZpbHRlcnNcIixcblxuICAvLyBDb21tb25cbiAgXCJyYy5jb21tb24uY2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gIFwicmMuY29tbW9uLnNhdmVcIjogXCJTYXZlXCIsXG59IGFzIGNvbnN0O1xuXG4vLyBlbnRpdHkuanNvbuyXkOyEnCDstpTstpztlZwgZW50aXR5IGxhYmVscyAoZGVmYXVsdExvY2FsZSDsoITsmqkpXG5jb25zdCBlbnRpdHlMYWJlbHMgPSB7XG4gIFwiZW50aXR5LlJlcXVlc3RMb2dcIjogXCJSZXF1ZXN0TG9nXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuaWRcIjogXCJJRFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNyZWF0ZWRfYXRcIjogXCLrk7HroZ3snbzsi5xcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy50b2tlbl9uYW1lXCI6IFwi7Yag7YGwIOydtOumhFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnF1ZXJ5XCI6IFwicHJvbXB0IOyghOusuFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnJlc3BvbnNlXCI6IFwibGxtIOydkeuLtSDsoITrrLhcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5pbnB1dF90b2tlbnNcIjogXCLsnoXroKUg7Yag7YGwXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cub3V0cHV0X3Rva2Vuc1wiOiBcIuy2nOugpSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5jYWNoZV9yZWFkX3Rva2Vuc1wiOiBcIuy6kOyLnCDsnb3quLAg7Yag7YGwXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuY2FjaGVfY3JlYXRpb25fdG9rZW5zXCI6IFwi7LqQ7IucIOyDneyEsSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5kdXJhdGlvbl9tc1wiOiBcIuydkeuLtSDshozsmpTsi5zqsIQobXMpXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5pZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTZWFyY2hGaWVsZC5pZFwiOiBcIklEXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU2VhcmNoRmllbGQudG9rZW5fbmFtZVwiOiBcIu2GoO2BsOydtOumhFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1NlYXJjaEZpZWxkLnF1ZXJ5XCI6IFwi7L+866asXCIsXG4gIFwiZW50aXR5LlRva2VuXCI6IFwiVG9rZW5cIixcbiAgXCJlbnRpdHkuVG9rZW4uaWRcIjogXCJJRFwiLFxuICBcImVudGl0eS5Ub2tlbi5jcmVhdGVkX2F0XCI6IFwi65Ox66Gd7J287IucXCIsXG4gIFwiZW50aXR5LlRva2VuLnRva2VuXCI6IFwiYWNjZXNzX3Rva2VuXCIsXG4gIFwiZW50aXR5LlRva2VuLm5hbWVcIjogXCLthqDtgbAg7J2066aEXCIsXG4gIFwiZW50aXR5LlRva2VuLnJlZnJlc2hfdG9rZW5cIjogXCJyZWZyZXNoX3Rva2VuXCIsXG4gIFwiZW50aXR5LlRva2VuLmV4cGlyZXNfYXRcIjogXCLrp4zro4wg7Iuc6rCBIChlcG9jaCBtcylcIixcbiAgXCJlbnRpdHkuVG9rZW4uYWNjb3VudF91dWlkXCI6IFwiQW50aHJvcGljIOqzhOyglSBVVUlEXCIsXG4gIFwiZW50aXR5LlRva2VuLmFjdGl2ZVwiOiBcIu2ZnOyEsSDsl6zrtoBcIixcbiAgXCJlbnVtLlRva2VuT3JkZXJCeS5pZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgXCJlbnVtLlRva2VuU2VhcmNoRmllbGQuaWRcIjogXCJJRFwiLFxuICBcImVudW0uVG9rZW5TZWFyY2hGaWVsZC5uYW1lXCI6IFwi7J2066aEXCIsXG59IGFzIGNvbnN0O1xuXG4vLyBkZWZhdWx0TG9jYWxl7J2YIGRpY3Rpb25hcnnrpbwg6riw7KSA7Jy866GcIO2CpCDstpTstpxcbnR5cGUgUkNLZXlzID0gdHlwZW9mIHJjS2V5c0tvO1xudHlwZSBQcm9qZWN0RGljdGlvbmFyeSA9IHR5cGVvZiBrbztcbnR5cGUgRW50aXR5TGFiZWxzID0gdHlwZW9mIGVudGl0eUxhYmVscztcbnR5cGUgUmF3TWVyZ2VkRGljdGlvbmFyeSA9IFJDS2V5cyAmXG4gIE9taXQ8RW50aXR5TGFiZWxzLCBrZXlvZiAoUkNLZXlzICYgUHJvamVjdERpY3Rpb25hcnkpPiAmXG4gIFByb2plY3REaWN0aW9uYXJ5O1xuXG4vLyDtgqTripQg7Jyg7KeA7ZWY65CYLCDqsJIg7YOA7J6F7J2AIHN0cmluZyDrmJDripQg7ZWo7IiY66GcIOydvOuwmO2ZlCAo64uk66W4IGxvY2FsZeydmCDrpqzthLDrn7Qg7YOA7J6FIOy2qeuPjCDrsKnsp4ApXG5leHBvcnQgdHlwZSBNZXJnZWREaWN0aW9uYXJ5ID0ge1xuICBbSyBpbiBrZXlvZiBSYXdNZXJnZWREaWN0aW9uYXJ5XTogUmF3TWVyZ2VkRGljdGlvbmFyeVtLXSBleHRlbmRzICguLi5hcmdzOiBpbmZlciBQKSA9PiBzdHJpbmdcbiAgICA/ICguLi5hcmdzOiBQKSA9PiBzdHJpbmdcbiAgICA6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBEaWN0S2V5ID0ga2V5b2YgTWVyZ2VkRGljdGlvbmFyeTtcbmV4cG9ydCB0eXBlIExvY2FsaXplZFN0cmluZyA9IHN0cmluZyAmIHsgX19icmFuZDogXCJMb2NhbGl6ZWRTdHJpbmdcIiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKGRpY3Q6IFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4pIHtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbi8vIOqwgSBsb2NhbGXrs4TroZwgcmMta2V5cyArIGVudGl0eSBsYWJlbHMgKyDtlITroZzsoJ3tirggZGljdCDtlansuahcbmNvbnN0IGRpY3Rpb25hcmllczogUmVjb3JkPHN0cmluZywgUGFydGlhbDxNZXJnZWREaWN0aW9uYXJ5Pj4gPSB7XG4gIGtvOiB7IC4uLnJjS2V5c0tvLCAuLi5lbnRpdHlMYWJlbHMsIC4uLmtvIH0sXG4gIGVuOiB7IC4uLnJjS2V5c0VuLCAuLi5lbiB9LFxufTtcblxudHlwZSBTRFJldHVyblR5cGU8SyBleHRlbmRzIERpY3RLZXk+ID0gTWVyZ2VkRGljdGlvbmFyeVtLXSBleHRlbmRzICguLi5hcmdzOiBpbmZlciBQKSA9PiBzdHJpbmdcbiAgPyAoLi4uYXJnczogUCkgPT4gTG9jYWxpemVkU3RyaW5nXG4gIDogTG9jYWxpemVkU3RyaW5nO1xuXG5mdW5jdGlvbiBnZXREaWN0VmFsdWU8SyBleHRlbmRzIERpY3RLZXk+KGtleTogSywgbG9jYWxlOiBzdHJpbmcpOiBTRFJldHVyblR5cGU8Sz4ge1xuICAvLyAxLiDsp4DsoJXrkJwgbG9jYWxl7JeQ7IScIOyhsO2ajFxuICBjb25zdCBkaWN0ID0gZGljdGlvbmFyaWVzW2xvY2FsZV07XG4gIGlmIChkaWN0Py5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRpY3Rba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgfVxuXG4gIC8vIDIuIGRlZmF1bHQgbG9jYWxl7JeQ7IScIOyhsO2ajFxuICBpZiAobG9jYWxlICE9PSBERUZBVUxUX0xPQ0FMRSAmJiBkaWN0aW9uYXJpZXNbREVGQVVMVF9MT0NBTEVdPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV1ba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgfVxuXG4gIC8vIDMuIHN1cHBvcnRlZCBsb2NhbGVzIOyInO2ajFxuICBmb3IgKGNvbnN0IHN1cHBvcnRlZExvY2FsZSBvZiBTVVBQT1JURURfTE9DQUxFUykge1xuICAgIGlmIChzdXBwb3J0ZWRMb2NhbGUgIT09IGxvY2FsZSAmJiBzdXBwb3J0ZWRMb2NhbGUgIT09IERFRkFVTFRfTE9DQUxFKSB7XG4gICAgICBpZiAoZGljdGlvbmFyaWVzW3N1cHBvcnRlZExvY2FsZV0/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpY3Rpb25hcmllc1tzdXBwb3J0ZWRMb2NhbGVdW2tleV0gYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gNC4g66qo65GQIOyLpO2MqCDsi5wga2V5IOuwmO2ZmFxuICByZXR1cm4ga2V5IGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xufVxuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IO2VqOyImFxuICogbG9jYWxl7JeQIOunnuuKlCDrsojsl60g7YWN7Iqk7Yq466W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogU0QoXCJjb21tb24uc2F2ZVwiKSAgLy8g4oaSIFwi7KCA7J6lXCIgKExvY2FsaXplZFN0cmluZylcbiAqIFNEKFwidXNlci5ub3RGb3VuZFwiKSgxKSAgLy8g4oaSIFwi7KG07J6s7ZWY7KeAIOyViuuKlCBVc2VyIElEIDFcIiAoTG9jYWxpemVkU3RyaW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gU0Q8SyBleHRlbmRzIERpY3RLZXk+KGtleTogSyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIGNvbnN0IGxvY2FsZSA9IGdldEN1cnJlbnRMb2NhbGUoKTtcbiAgcmV0dXJuIGdldERpY3RWYWx1ZShrZXksIGxvY2FsZSk7XG59XG5cbi8qKlxuICog7Yq57KCVIGxvY2FsZeydmCDrsojsl60g7YWN7Iqk7Yq466W8IOuwmO2ZmO2VmOuKlCDtlajsiJjrpbwg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBFTiA9IFNELmxvY2FsZShcImVuXCIpO1xuICogRU4oXCJjb21tb24uc2F2ZVwiKSAgLy8g4oaSIFwiU2F2ZVwiXG4gKi9cblNELmxvY2FsZSA9XG4gIChsb2NhbGU6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID0+XG4gIDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+ID0+IHtcbiAgICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbiAgfTtcblxuLy8gTG9jYWxpemVkIOqwgOuKpe2VnCBDb2x1bW4g7YOA7J6FIOqzhOyCsFxudHlwZSBMb2NhbGl6ZWRCYXNlQ29sdW1uPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUICYgc3RyaW5nXTogSyBleHRlbmRzIGAke2luZmVyIEJhc2V9XyR7KHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXX1gXG4gICAgPyBCYXNlXG4gICAgOiBLO1xufVtrZXlvZiBUICYgc3RyaW5nXTtcblxuLyoqXG4gKiBsb2NhbGXsl5Ag65Sw6528IOyggeygiO2VnCDsu6zrn7wg6rCS7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIERC7JeQIG5hbWUsIG5hbWVfa28sIG5hbWVfZW7sspjrn7wgbG9jYWxpemVkIGNvbHVtbuydtCDsnojsnYQg65WMIOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiDsmrDshKDsiJzsnIQgKOyngOybkCDroZzsvIDsnbzsnYAga28vanAvZW7snbTqs6AsIOyEnOu5hOyKpOydmCDquLDrs7gg66Gc7LyA7J287J2AIGtvLCDsgqzsmqnsnpDsnZgg66Gc7LyA7J287J2AIGpw7J28IOuVjCk6IGNvbHVtbl9qcCDihpIgY29sdW1uIOKGkiBjb2x1bW5fa28g4oaSIGNvbHVtbl9lblxuICog7Jqw7ISg7Iic7JyEICjsp4Dsm5Ag66Gc7LyA7J287J2AIGtvL2pwL2Vu7J206rOgLCDshJzruYTsiqTsnZgg6riw67O4IOuhnOy8gOydvOydgCBlbiwg7IKs7Jqp7J6Q7J2YIOuhnOy8gOydvOydgCBrb+ydvCDrlYwpOiBjb2x1bW5fa28g4oaSIGNvbHVtbiDihpIgY29sdW1uX2VuIOKGkiBjb2x1bW5fanBcbiAqXG4gKiBAZXhhbXBsZVxuICogbG9jYWxpemVkQ29sdW1uKHRhZywgXCJuYW1lXCIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbGl6ZWRDb2x1bW48XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgSyBleHRlbmRzIExvY2FsaXplZEJhc2VDb2x1bW48VD4sXG4+KHJvdzogVCwgY29sdW1uOiBLKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICBjb25zdCBvdGhlckxvY2FsZXMgPSBTVVBQT1JURURfTE9DQUxFUy5maWx0ZXIoXG4gICAgKGw6IHN0cmluZykgPT4gbCAhPT0gbG9jYWxlICYmIGwgIT09IERFRkFVTFRfTE9DQUxFLFxuICApO1xuICBjb25zdCBsb2NhbGl6ZWRLZXkgPSAoY29sdW1uOiBLLCBsb2NhbGU6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID0+XG4gICAgYCR7Y29sdW1ufV8ke2xvY2FsZX1gO1xuICBjb25zdCBrZXlzID0gW1xuICAgIGxvY2FsaXplZEtleShjb2x1bW4sIGxvY2FsZSksXG4gICAgY29sdW1uLFxuICAgIGxvY2FsaXplZEtleShjb2x1bW4sIERFRkFVTFRfTE9DQUxFKSxcbiAgICAuLi5vdGhlckxvY2FsZXMubWFwKChsKSA9PiBsb2NhbGl6ZWRLZXkoY29sdW1uLCBsKSksXG4gIF07XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICghKGtleSBpbiByb3cpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocm93W2tleV0gIT09IG51bGwgJiYgcm93W2tleV0gIT09IHVuZGVmaW5lZCAmJiByb3dba2V5XSAhPT0gXCJcIikge1xuICAgICAgcmV0dXJuIFN0cmluZyhyb3dba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbnVt7J2YIGxvY2FsaXplZCBsYWJlbHPrpbwgUHJveHnroZwg67CY7ZmY7ZWp64uI64ukLlxuICogU2VsZWN0IOy7tO2PrOuEjO2KuCDrk7Hsl5DshJwgRW51bUxhYmVsW2tleV0g64yA7IugIOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogU0QuZW51bUxhYmVscyhcIlRhZ09yZGVyQnlcIilba2V5XSAgLy8g4oaSIO2YhOyerCBsb2NhbGXsnZgg652867KoXG4gKi9cblNELmVudW1MYWJlbHMgPSAoZW51bU5hbWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIExvY2FsaXplZFN0cmluZz4gPT4ge1xuICByZXR1cm4gbmV3IFByb3h5KHt9IGFzIFJlY29yZDxzdHJpbmcsIExvY2FsaXplZFN0cmluZz4sIHtcbiAgICBnZXQoXywga2V5OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IGRpY3RLZXkgPSBgZW51bS4ke2VudW1OYW1lfS4ke2tleX1gIGFzIERpY3RLZXk7XG4gICAgICByZXR1cm4gZ2V0RGljdFZhbHVlKGRpY3RLZXksIGdldEN1cnJlbnRMb2NhbGUoKSk7XG4gICAgfSxcbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFPQSxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLG9CQUFvQixDQUFDLE1BQU0sS0FBSztBQUN0QyxTQUFTLG1CQUF1RDtBQUM5RCxLQUFJO0FBRUYsU0FEWSxPQUFPLFlBQVksQ0FDbkIsVUFB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
@@ -1,11 +0,0 @@
1
- import "./_virtual/_rolldown/runtime.js";
2
- import { Sonamu } from "sonamu";
3
- //#region src/index.ts
4
- async function bootstrap() {
5
- await Sonamu.createServer();
6
- }
7
- bootstrap();
8
- //#endregion
9
- export {};
10
-
11
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtcblxuYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwKCkge1xuICBhd2FpdCBTb25hbXUuY3JlYXRlU2VydmVyKCk7XG59XG5ib290c3RyYXAoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsZUFBZSxZQUFZO0FBQ3pCLE9BQU0sT0FBTyxjQUFjOztBQUU3QixXQUFXIn0=
@@ -1,26 +0,0 @@
1
- import "../_virtual/_rolldown/runtime.js";
2
- //#region src/migrations/20260410171405_create__request_logs.ts
3
- async function up(knex) {
4
- await knex.schema.createTable("request_logs", (table) => {
5
- table.increments().primary();
6
- table.timestamp("created_at", {
7
- useTz: true,
8
- precision: 3
9
- }).notNullable().defaultTo(knex.raw("CURRENT_TIMESTAMP"));
10
- table.string("token_name", 100).notNullable();
11
- table.text("query").notNullable();
12
- table.text("response").notNullable();
13
- table.integer("input_tokens").notNullable();
14
- table.integer("output_tokens").notNullable();
15
- table.integer("cache_read_tokens").notNullable();
16
- table.integer("cache_creation_tokens").notNullable();
17
- table.integer("duration_ms").notNullable();
18
- });
19
- }
20
- async function down(knex) {
21
- return knex.schema.dropTable("request_logs");
22
- }
23
- //#endregion
24
- export { down, up };
25
-
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAyNjA0MTAxNzE0MDVfY3JlYXRlX19yZXF1ZXN0X2xvZ3MuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGlvbnMvMjAyNjA0MTAxNzE0MDVfY3JlYXRlX19yZXF1ZXN0X2xvZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQga25leC5zY2hlbWEuY3JlYXRlVGFibGUoXCJyZXF1ZXN0X2xvZ3NcIiwgKHRhYmxlKSA9PiB7XG4gICAgdGFibGUuaW5jcmVtZW50cygpLnByaW1hcnkoKTtcbiAgICB0YWJsZVxuICAgICAgLnRpbWVzdGFtcChcImNyZWF0ZWRfYXRcIiwgeyB1c2VUejogdHJ1ZSwgcHJlY2lzaW9uOiAzIH0pXG4gICAgICAubm90TnVsbGFibGUoKVxuICAgICAgLmRlZmF1bHRUbyhrbmV4LnJhdyhcIkNVUlJFTlRfVElNRVNUQU1QXCIpKTtcbiAgICB0YWJsZS5zdHJpbmcoXCJ0b2tlbl9uYW1lXCIsIDEwMCkubm90TnVsbGFibGUoKTtcbiAgICB0YWJsZS50ZXh0KFwicXVlcnlcIikubm90TnVsbGFibGUoKTtcbiAgICB0YWJsZS50ZXh0KFwicmVzcG9uc2VcIikubm90TnVsbGFibGUoKTtcbiAgICB0YWJsZS5pbnRlZ2VyKFwiaW5wdXRfdG9rZW5zXCIpLm5vdE51bGxhYmxlKCk7XG4gICAgdGFibGUuaW50ZWdlcihcIm91dHB1dF90b2tlbnNcIikubm90TnVsbGFibGUoKTtcbiAgICB0YWJsZS5pbnRlZ2VyKFwiY2FjaGVfcmVhZF90b2tlbnNcIikubm90TnVsbGFibGUoKTtcbiAgICB0YWJsZS5pbnRlZ2VyKFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIpLm5vdE51bGxhYmxlKCk7XG4gICAgdGFibGUuaW50ZWdlcihcImR1cmF0aW9uX21zXCIpLm5vdE51bGxhYmxlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBrbmV4LnNjaGVtYS5kcm9wVGFibGUoXCJyZXF1ZXN0X2xvZ3NcIik7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBRUEsZUFBc0IsR0FBRyxNQUEyQjtBQUNsRCxPQUFNLEtBQUssT0FBTyxZQUFZLGlCQUFpQixVQUFVO0FBQ3ZELFFBQU0sWUFBWSxDQUFDLFNBQVM7QUFDNUIsUUFDRyxVQUFVLGNBQWM7R0FBRSxPQUFPO0dBQU0sV0FBVztHQUFHLENBQUMsQ0FDdEQsYUFBYSxDQUNiLFVBQVUsS0FBSyxJQUFJLG9CQUFvQixDQUFDO0FBQzNDLFFBQU0sT0FBTyxjQUFjLElBQUksQ0FBQyxhQUFhO0FBQzdDLFFBQU0sS0FBSyxRQUFRLENBQUMsYUFBYTtBQUNqQyxRQUFNLEtBQUssV0FBVyxDQUFDLGFBQWE7QUFDcEMsUUFBTSxRQUFRLGVBQWUsQ0FBQyxhQUFhO0FBQzNDLFFBQU0sUUFBUSxnQkFBZ0IsQ0FBQyxhQUFhO0FBQzVDLFFBQU0sUUFBUSxvQkFBb0IsQ0FBQyxhQUFhO0FBQ2hELFFBQU0sUUFBUSx3QkFBd0IsQ0FBQyxhQUFhO0FBQ3BELFFBQU0sUUFBUSxjQUFjLENBQUMsYUFBYTtHQUMxQzs7QUFHSixlQUFzQixLQUFLLE1BQTJCO0FBQ3BELFFBQU8sS0FBSyxPQUFPLFVBQVUsZUFBZSJ9
@@ -1,24 +0,0 @@
1
- import "../_virtual/_rolldown/runtime.js";
2
- //#region src/migrations/20260410171406_create__tokens.ts
3
- async function up(knex) {
4
- await knex.schema.createTable("tokens", (table) => {
5
- table.increments().primary();
6
- table.timestamp("created_at", {
7
- useTz: true,
8
- precision: 3
9
- }).notNullable().defaultTo(knex.raw("CURRENT_TIMESTAMP"));
10
- table.text("token").notNullable();
11
- table.text("name").nullable();
12
- table.text("refresh_token").nullable();
13
- table.bigInteger("expires_at").nullable();
14
- table.text("account_uuid").nullable();
15
- table.boolean("active").notNullable().defaultTo(knex.raw("true"));
16
- });
17
- }
18
- async function down(knex) {
19
- return knex.schema.dropTable("tokens");
20
- }
21
- //#endregion
22
- export { down, up };
23
-
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAyNjA0MTAxNzE0MDZfY3JlYXRlX190b2tlbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGlvbnMvMjAyNjA0MTAxNzE0MDZfY3JlYXRlX190b2tlbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQga25leC5zY2hlbWEuY3JlYXRlVGFibGUoXCJ0b2tlbnNcIiwgKHRhYmxlKSA9PiB7XG4gICAgdGFibGUuaW5jcmVtZW50cygpLnByaW1hcnkoKTtcbiAgICB0YWJsZVxuICAgICAgLnRpbWVzdGFtcChcImNyZWF0ZWRfYXRcIiwgeyB1c2VUejogdHJ1ZSwgcHJlY2lzaW9uOiAzIH0pXG4gICAgICAubm90TnVsbGFibGUoKVxuICAgICAgLmRlZmF1bHRUbyhrbmV4LnJhdyhcIkNVUlJFTlRfVElNRVNUQU1QXCIpKTtcbiAgICB0YWJsZS50ZXh0KFwidG9rZW5cIikubm90TnVsbGFibGUoKTtcbiAgICB0YWJsZS50ZXh0KFwibmFtZVwiKS5udWxsYWJsZSgpO1xuICAgIHRhYmxlLnRleHQoXCJyZWZyZXNoX3Rva2VuXCIpLm51bGxhYmxlKCk7XG4gICAgdGFibGUuYmlnSW50ZWdlcihcImV4cGlyZXNfYXRcIikubnVsbGFibGUoKTtcbiAgICB0YWJsZS50ZXh0KFwiYWNjb3VudF91dWlkXCIpLm51bGxhYmxlKCk7XG4gICAgdGFibGUuYm9vbGVhbihcImFjdGl2ZVwiKS5ub3ROdWxsYWJsZSgpLmRlZmF1bHRUbyhrbmV4LnJhdyhcInRydWVcIikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4ga25leC5zY2hlbWEuZHJvcFRhYmxlKFwidG9rZW5zXCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUVBLGVBQXNCLEdBQUcsTUFBMkI7QUFDbEQsT0FBTSxLQUFLLE9BQU8sWUFBWSxXQUFXLFVBQVU7QUFDakQsUUFBTSxZQUFZLENBQUMsU0FBUztBQUM1QixRQUNHLFVBQVUsY0FBYztHQUFFLE9BQU87R0FBTSxXQUFXO0dBQUcsQ0FBQyxDQUN0RCxhQUFhLENBQ2IsVUFBVSxLQUFLLElBQUksb0JBQW9CLENBQUM7QUFDM0MsUUFBTSxLQUFLLFFBQVEsQ0FBQyxhQUFhO0FBQ2pDLFFBQU0sS0FBSyxPQUFPLENBQUMsVUFBVTtBQUM3QixRQUFNLEtBQUssZ0JBQWdCLENBQUMsVUFBVTtBQUN0QyxRQUFNLFdBQVcsYUFBYSxDQUFDLFVBQVU7QUFDekMsUUFBTSxLQUFLLGVBQWUsQ0FBQyxVQUFVO0FBQ3JDLFFBQU0sUUFBUSxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsS0FBSyxJQUFJLE9BQU8sQ0FBQztHQUNqRTs7QUFHSixlQUFzQixLQUFLLE1BQTJCO0FBQ3BELFFBQU8sS0FBSyxPQUFPLFVBQVUsU0FBUyJ9
@@ -1,16 +0,0 @@
1
- import "../_virtual/_rolldown/runtime.js";
2
- //#region src/migrations/20260411120624_alter_tokens_alter2.ts
3
- async function up(knex) {
4
- await knex.schema.alterTable("tokens", (table) => {
5
- table.text("name").notNullable().alter();
6
- });
7
- }
8
- async function down(knex) {
9
- await knex.schema.alterTable("tokens", (table) => {
10
- table.text("name").nullable().alter();
11
- });
12
- }
13
- //#endregion
14
- export { down, up };
15
-
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAyNjA0MTExMjA2MjRfYWx0ZXJfdG9rZW5zX2FsdGVyMi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlncmF0aW9ucy8yMDI2MDQxMTEyMDYyNF9hbHRlcl90b2tlbnNfYWx0ZXIyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCJ0b2tlbnNcIiwgKHRhYmxlKSA9PiB7XG4gICAgLy8gYWx0ZXIgY29sdW1uXG4gICAgdGFibGUudGV4dChcIm5hbWVcIikubm90TnVsbGFibGUoKS5hbHRlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwidG9rZW5zXCIsICh0YWJsZSkgPT4ge1xuICAgIC8vIHJvbGxiYWNrIC0gYWx0ZXIgY29sdW1uXG4gICAgdGFibGUudGV4dChcIm5hbWVcIikubnVsbGFibGUoKS5hbHRlcigpO1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFFQSxlQUFzQixHQUFHLE1BQTJCO0FBQ2xELE9BQU0sS0FBSyxPQUFPLFdBQVcsV0FBVyxVQUFVO0FBRWhELFFBQU0sS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU87R0FDeEM7O0FBR0osZUFBc0IsS0FBSyxNQUEyQjtBQUNwRCxPQUFNLEtBQUssT0FBTyxXQUFXLFdBQVcsVUFBVTtBQUVoRCxRQUFNLEtBQUssT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPO0dBQ3JDIn0=
@@ -1,155 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
2
- var comma = ",".charCodeAt(0);
3
- var semicolon = ";".charCodeAt(0);
4
- var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
5
- var intToChar = new Uint8Array(64);
6
- var charToInt = new Uint8Array(128);
7
- for (let i = 0; i < chars.length; i++) {
8
- const c = chars.charCodeAt(i);
9
- intToChar[i] = c;
10
- charToInt[c] = i;
11
- }
12
- function encodeInteger(builder, num, relative) {
13
- let delta = num - relative;
14
- delta = delta < 0 ? -delta << 1 | 1 : delta << 1;
15
- do {
16
- let clamped = delta & 31;
17
- delta >>>= 5;
18
- if (delta > 0) clamped |= 32;
19
- builder.write(intToChar[clamped]);
20
- } while (delta > 0);
21
- return num;
22
- }
23
- var bufLength = 1024 * 16;
24
- var td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { decode(buf) {
25
- return Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength).toString();
26
- } } : { decode(buf) {
27
- let out = "";
28
- for (let i = 0; i < buf.length; i++) out += String.fromCharCode(buf[i]);
29
- return out;
30
- } };
31
- var StringWriter = class {
32
- constructor() {
33
- this.pos = 0;
34
- this.out = "";
35
- this.buffer = new Uint8Array(bufLength);
36
- }
37
- write(v) {
38
- const { buffer } = this;
39
- buffer[this.pos++] = v;
40
- if (this.pos === bufLength) {
41
- this.out += td.decode(buffer);
42
- this.pos = 0;
43
- }
44
- }
45
- flush() {
46
- const { buffer, out, pos } = this;
47
- return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;
48
- }
49
- };
50
- function _encodeOriginalScopes(scopes, index, writer, state) {
51
- const scope = scopes[index];
52
- const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;
53
- if (index > 0) writer.write(comma);
54
- state[0] = encodeInteger(writer, startLine, state[0]);
55
- encodeInteger(writer, startColumn, 0);
56
- encodeInteger(writer, kind, 0);
57
- encodeInteger(writer, scope.length === 6 ? 1 : 0, 0);
58
- if (scope.length === 6) encodeInteger(writer, scope[5], 0);
59
- for (const v of vars) encodeInteger(writer, v, 0);
60
- for (index++; index < scopes.length;) {
61
- const { 0: l, 1: c } = scopes[index];
62
- if (l > endLine || l === endLine && c >= endColumn) break;
63
- index = _encodeOriginalScopes(scopes, index, writer, state);
64
- }
65
- writer.write(comma);
66
- state[0] = encodeInteger(writer, endLine, state[0]);
67
- encodeInteger(writer, endColumn, 0);
68
- return index;
69
- }
70
- function _encodeGeneratedRanges(ranges, index, writer, state) {
71
- const range = ranges[index];
72
- const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, isScope, callsite, bindings } = range;
73
- if (state[0] < startLine) {
74
- catchupLine(writer, state[0], startLine);
75
- state[0] = startLine;
76
- state[1] = 0;
77
- } else if (index > 0) writer.write(comma);
78
- state[1] = encodeInteger(writer, range[1], state[1]);
79
- encodeInteger(writer, (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0), 0);
80
- if (range.length === 6) {
81
- const { 4: sourcesIndex, 5: scopesIndex } = range;
82
- if (sourcesIndex !== state[2]) state[3] = 0;
83
- state[2] = encodeInteger(writer, sourcesIndex, state[2]);
84
- state[3] = encodeInteger(writer, scopesIndex, state[3]);
85
- }
86
- if (callsite) {
87
- const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite;
88
- if (sourcesIndex !== state[4]) {
89
- state[5] = 0;
90
- state[6] = 0;
91
- } else if (callLine !== state[5]) state[6] = 0;
92
- state[4] = encodeInteger(writer, sourcesIndex, state[4]);
93
- state[5] = encodeInteger(writer, callLine, state[5]);
94
- state[6] = encodeInteger(writer, callColumn, state[6]);
95
- }
96
- if (bindings) for (const binding of bindings) {
97
- if (binding.length > 1) encodeInteger(writer, -binding.length, 0);
98
- const expression = binding[0][0];
99
- encodeInteger(writer, expression, 0);
100
- let bindingStartLine = startLine;
101
- let bindingStartColumn = startColumn;
102
- for (let i = 1; i < binding.length; i++) {
103
- const expRange = binding[i];
104
- bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);
105
- bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);
106
- encodeInteger(writer, expRange[0], 0);
107
- }
108
- }
109
- for (index++; index < ranges.length;) {
110
- const { 0: l, 1: c } = ranges[index];
111
- if (l > endLine || l === endLine && c >= endColumn) break;
112
- index = _encodeGeneratedRanges(ranges, index, writer, state);
113
- }
114
- if (state[0] < endLine) {
115
- catchupLine(writer, state[0], endLine);
116
- state[0] = endLine;
117
- state[1] = 0;
118
- } else writer.write(comma);
119
- state[1] = encodeInteger(writer, endColumn, state[1]);
120
- return index;
121
- }
122
- function catchupLine(writer, lastLine, line) {
123
- do
124
- writer.write(semicolon);
125
- while (++lastLine < line);
126
- }
127
- function encode(decoded) {
128
- const writer = new StringWriter();
129
- let sourcesIndex = 0;
130
- let sourceLine = 0;
131
- let sourceColumn = 0;
132
- let namesIndex = 0;
133
- for (let i = 0; i < decoded.length; i++) {
134
- const line = decoded[i];
135
- if (i > 0) writer.write(semicolon);
136
- if (line.length === 0) continue;
137
- let genColumn = 0;
138
- for (let j = 0; j < line.length; j++) {
139
- const segment = line[j];
140
- if (j > 0) writer.write(comma);
141
- genColumn = encodeInteger(writer, segment[0], genColumn);
142
- if (segment.length === 1) continue;
143
- sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);
144
- sourceLine = encodeInteger(writer, segment[2], sourceLine);
145
- sourceColumn = encodeInteger(writer, segment[3], sourceColumn);
146
- if (segment.length === 4) continue;
147
- namesIndex = encodeInteger(writer, segment[4], namesIndex);
148
- }
149
- }
150
- return writer.flush();
151
- }
152
- //#endregion
153
- export { encode };
154
-
155
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlbWFwLWNvZGVjLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AanJpZGdld2VsbCtzb3VyY2VtYXAtY29kZWNAMS41LjUvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9kaXN0L3NvdXJjZW1hcC1jb2RlYy5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL3ZscS50c1xudmFyIGNvbW1hID0gXCIsXCIuY2hhckNvZGVBdCgwKTtcbnZhciBzZW1pY29sb24gPSBcIjtcIi5jaGFyQ29kZUF0KDApO1xudmFyIGNoYXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XG52YXIgaW50VG9DaGFyID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xudmFyIGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG4gIGNvbnN0IGMgPSBjaGFycy5jaGFyQ29kZUF0KGkpO1xuICBpbnRUb0NoYXJbaV0gPSBjO1xuICBjaGFyVG9JbnRbY10gPSBpO1xufVxuZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHJlbGF0aXZlKSB7XG4gIGxldCB2YWx1ZSA9IDA7XG4gIGxldCBzaGlmdCA9IDA7XG4gIGxldCBpbnRlZ2VyID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IGMgPSByZWFkZXIubmV4dCgpO1xuICAgIGludGVnZXIgPSBjaGFyVG9JbnRbY107XG4gICAgdmFsdWUgfD0gKGludGVnZXIgJiAzMSkgPDwgc2hpZnQ7XG4gICAgc2hpZnQgKz0gNTtcbiAgfSB3aGlsZSAoaW50ZWdlciAmIDMyKTtcbiAgY29uc3Qgc2hvdWxkTmVnYXRlID0gdmFsdWUgJiAxO1xuICB2YWx1ZSA+Pj49IDE7XG4gIGlmIChzaG91bGROZWdhdGUpIHtcbiAgICB2YWx1ZSA9IC0yMTQ3NDgzNjQ4IHwgLXZhbHVlO1xuICB9XG4gIHJldHVybiByZWxhdGl2ZSArIHZhbHVlO1xufVxuZnVuY3Rpb24gZW5jb2RlSW50ZWdlcihidWlsZGVyLCBudW0sIHJlbGF0aXZlKSB7XG4gIGxldCBkZWx0YSA9IG51bSAtIHJlbGF0aXZlO1xuICBkZWx0YSA9IGRlbHRhIDwgMCA/IC1kZWx0YSA8PCAxIHwgMSA6IGRlbHRhIDw8IDE7XG4gIGRvIHtcbiAgICBsZXQgY2xhbXBlZCA9IGRlbHRhICYgMzE7XG4gICAgZGVsdGEgPj4+PSA1O1xuICAgIGlmIChkZWx0YSA+IDApIGNsYW1wZWQgfD0gMzI7XG4gICAgYnVpbGRlci53cml0ZShpbnRUb0NoYXJbY2xhbXBlZF0pO1xuICB9IHdoaWxlIChkZWx0YSA+IDApO1xuICByZXR1cm4gbnVtO1xufVxuZnVuY3Rpb24gaGFzTW9yZVZscShyZWFkZXIsIG1heCkge1xuICBpZiAocmVhZGVyLnBvcyA+PSBtYXgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlYWRlci5wZWVrKCkgIT09IGNvbW1hO1xufVxuXG4vLyBzcmMvc3RyaW5ncy50c1xudmFyIGJ1Zkxlbmd0aCA9IDEwMjQgKiAxNjtcbnZhciB0ZCA9IHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gXCJ1bmRlZmluZWRcIiA/IC8qIEBfX1BVUkVfXyAqLyBuZXcgVGV4dERlY29kZXIoKSA6IHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIgPyB7XG4gIGRlY29kZShidWYpIHtcbiAgICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTtcbiAgfVxufSA6IHtcbiAgZGVjb2RlKGJ1Zikge1xuICAgIGxldCBvdXQgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG59O1xudmFyIFN0cmluZ1dyaXRlciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMub3V0ID0gXCJcIjtcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJ1Zkxlbmd0aCk7XG4gIH1cbiAgd3JpdGUodikge1xuICAgIGNvbnN0IHsgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGJ1ZmZlclt0aGlzLnBvcysrXSA9IHY7XG4gICAgaWYgKHRoaXMucG9zID09PSBidWZMZW5ndGgpIHtcbiAgICAgIHRoaXMub3V0ICs9IHRkLmRlY29kZShidWZmZXIpO1xuICAgICAgdGhpcy5wb3MgPSAwO1xuICAgIH1cbiAgfVxuICBmbHVzaCgpIHtcbiAgICBjb25zdCB7IGJ1ZmZlciwgb3V0LCBwb3MgfSA9IHRoaXM7XG4gICAgcmV0dXJuIHBvcyA+IDAgPyBvdXQgKyB0ZC5kZWNvZGUoYnVmZmVyLnN1YmFycmF5KDAsIHBvcykpIDogb3V0O1xuICB9XG59O1xudmFyIFN0cmluZ1JlYWRlciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoYnVmZmVyKSB7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICB9XG4gIG5leHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmNoYXJDb2RlQXQodGhpcy5wb3MrKyk7XG4gIH1cbiAgcGVlaygpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIH1cbiAgaW5kZXhPZihjaGFyKSB7XG4gICAgY29uc3QgeyBidWZmZXIsIHBvcyB9ID0gdGhpcztcbiAgICBjb25zdCBpZHggPSBidWZmZXIuaW5kZXhPZihjaGFyLCBwb3MpO1xuICAgIHJldHVybiBpZHggPT09IC0xID8gYnVmZmVyLmxlbmd0aCA6IGlkeDtcbiAgfVxufTtcblxuLy8gc3JjL3Njb3Blcy50c1xudmFyIEVNUFRZID0gW107XG5mdW5jdGlvbiBkZWNvZGVPcmlnaW5hbFNjb3BlcyhpbnB1dCkge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gaW5wdXQ7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpO1xuICBjb25zdCBzY29wZXMgPSBbXTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgbGV0IGxpbmUgPSAwO1xuICBmb3IgKDsgcmVhZGVyLnBvcyA8IGxlbmd0aDsgcmVhZGVyLnBvcysrKSB7XG4gICAgbGluZSA9IGRlY29kZUludGVnZXIocmVhZGVyLCBsaW5lKTtcbiAgICBjb25zdCBjb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgbGVuZ3RoKSkge1xuICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgbGFzdFsyXSA9IGxpbmU7XG4gICAgICBsYXN0WzNdID0gY29sdW1uO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtpbmQgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgY29uc3QgZmllbGRzID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgIGNvbnN0IGhhc05hbWUgPSBmaWVsZHMgJiAxO1xuICAgIGNvbnN0IHNjb3BlID0gaGFzTmFtZSA/IFtsaW5lLCBjb2x1bW4sIDAsIDAsIGtpbmQsIGRlY29kZUludGVnZXIocmVhZGVyLCAwKV0gOiBbbGluZSwgY29sdW1uLCAwLCAwLCBraW5kXTtcbiAgICBsZXQgdmFycyA9IEVNUFRZO1xuICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgbGVuZ3RoKSkge1xuICAgICAgdmFycyA9IFtdO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCB2YXJzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICAgIHZhcnMucHVzaCh2YXJzSW5kZXgpO1xuICAgICAgfSB3aGlsZSAoaGFzTW9yZVZscShyZWFkZXIsIGxlbmd0aCkpO1xuICAgIH1cbiAgICBzY29wZS52YXJzID0gdmFycztcbiAgICBzY29wZXMucHVzaChzY29wZSk7XG4gICAgc3RhY2sucHVzaChzY29wZSk7XG4gIH1cbiAgcmV0dXJuIHNjb3Blcztcbn1cbmZ1bmN0aW9uIGVuY29kZU9yaWdpbmFsU2NvcGVzKHNjb3Blcykge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NvcGVzLmxlbmd0aDsgKSB7XG4gICAgaSA9IF9lbmNvZGVPcmlnaW5hbFNjb3BlcyhzY29wZXMsIGksIHdyaXRlciwgWzBdKTtcbiAgfVxuICByZXR1cm4gd3JpdGVyLmZsdXNoKCk7XG59XG5mdW5jdGlvbiBfZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSkge1xuICBjb25zdCBzY29wZSA9IHNjb3Blc1tpbmRleF07XG4gIGNvbnN0IHsgMDogc3RhcnRMaW5lLCAxOiBzdGFydENvbHVtbiwgMjogZW5kTGluZSwgMzogZW5kQ29sdW1uLCA0OiBraW5kLCB2YXJzIH0gPSBzY29wZTtcbiAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgc3RhdGVbMF0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc3RhcnRMaW5lLCBzdGF0ZVswXSk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBzdGFydENvbHVtbiwgMCk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBraW5kLCAwKTtcbiAgY29uc3QgZmllbGRzID0gc2NvcGUubGVuZ3RoID09PSA2ID8gMSA6IDA7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBmaWVsZHMsIDApO1xuICBpZiAoc2NvcGUubGVuZ3RoID09PSA2KSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2NvcGVbNV0sIDApO1xuICBmb3IgKGNvbnN0IHYgb2YgdmFycykge1xuICAgIGVuY29kZUludGVnZXIod3JpdGVyLCB2LCAwKTtcbiAgfVxuICBmb3IgKGluZGV4Kys7IGluZGV4IDwgc2NvcGVzLmxlbmd0aDsgKSB7XG4gICAgY29uc3QgbmV4dCA9IHNjb3Blc1tpbmRleF07XG4gICAgY29uc3QgeyAwOiBsLCAxOiBjIH0gPSBuZXh0O1xuICAgIGlmIChsID4gZW5kTGluZSB8fCBsID09PSBlbmRMaW5lICYmIGMgPj0gZW5kQ29sdW1uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggPSBfZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSk7XG4gIH1cbiAgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgc3RhdGVbMF0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kTGluZSwgc3RhdGVbMF0pO1xuICBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kQ29sdW1uLCAwKTtcbiAgcmV0dXJuIGluZGV4O1xufVxuZnVuY3Rpb24gZGVjb2RlR2VuZXJhdGVkUmFuZ2VzKGlucHV0KSB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBpbnB1dDtcbiAgY29uc3QgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG4gIGNvbnN0IHJhbmdlcyA9IFtdO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgZ2VuTGluZSA9IDA7XG4gIGxldCBkZWZpbml0aW9uU291cmNlc0luZGV4ID0gMDtcbiAgbGV0IGRlZmluaXRpb25TY29wZUluZGV4ID0gMDtcbiAgbGV0IGNhbGxzaXRlU291cmNlc0luZGV4ID0gMDtcbiAgbGV0IGNhbGxzaXRlTGluZSA9IDA7XG4gIGxldCBjYWxsc2l0ZUNvbHVtbiA9IDA7XG4gIGxldCBiaW5kaW5nTGluZSA9IDA7XG4gIGxldCBiaW5kaW5nQ29sdW1uID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IHNlbWkgPSByZWFkZXIuaW5kZXhPZihcIjtcIik7XG4gICAgbGV0IGdlbkNvbHVtbiA9IDA7XG4gICAgZm9yICg7IHJlYWRlci5wb3MgPCBzZW1pOyByZWFkZXIucG9zKyspIHtcbiAgICAgIGdlbkNvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBnZW5Db2x1bW4pO1xuICAgICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBsYXN0WzJdID0gZ2VuTGluZTtcbiAgICAgICAgbGFzdFszXSA9IGdlbkNvbHVtbjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICBjb25zdCBoYXNEZWZpbml0aW9uID0gZmllbGRzICYgMTtcbiAgICAgIGNvbnN0IGhhc0NhbGxzaXRlID0gZmllbGRzICYgMjtcbiAgICAgIGNvbnN0IGhhc1Njb3BlID0gZmllbGRzICYgNDtcbiAgICAgIGxldCBjYWxsc2l0ZSA9IG51bGw7XG4gICAgICBsZXQgYmluZGluZ3MgPSBFTVBUWTtcbiAgICAgIGxldCByYW5nZTtcbiAgICAgIGlmIChoYXNEZWZpbml0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRlZlNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBkZWZpbml0aW9uU291cmNlc0luZGV4KTtcbiAgICAgICAgZGVmaW5pdGlvblNjb3BlSW5kZXggPSBkZWNvZGVJbnRlZ2VyKFxuICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICBkZWZpbml0aW9uU291cmNlc0luZGV4ID09PSBkZWZTb3VyY2VzSW5kZXggPyBkZWZpbml0aW9uU2NvcGVJbmRleCA6IDBcbiAgICAgICAgKTtcbiAgICAgICAgZGVmaW5pdGlvblNvdXJjZXNJbmRleCA9IGRlZlNvdXJjZXNJbmRleDtcbiAgICAgICAgcmFuZ2UgPSBbZ2VuTGluZSwgZ2VuQ29sdW1uLCAwLCAwLCBkZWZTb3VyY2VzSW5kZXgsIGRlZmluaXRpb25TY29wZUluZGV4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gW2dlbkxpbmUsIGdlbkNvbHVtbiwgMCwgMF07XG4gICAgICB9XG4gICAgICByYW5nZS5pc1Njb3BlID0gISFoYXNTY29wZTtcbiAgICAgIGlmIChoYXNDYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBwcmV2Q3NpID0gY2FsbHNpdGVTb3VyY2VzSW5kZXg7XG4gICAgICAgIGNvbnN0IHByZXZMaW5lID0gY2FsbHNpdGVMaW5lO1xuICAgICAgICBjYWxsc2l0ZVNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBjYWxsc2l0ZVNvdXJjZXNJbmRleCk7XG4gICAgICAgIGNvbnN0IHNhbWVTb3VyY2UgPSBwcmV2Q3NpID09PSBjYWxsc2l0ZVNvdXJjZXNJbmRleDtcbiAgICAgICAgY2FsbHNpdGVMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNhbWVTb3VyY2UgPyBjYWxsc2l0ZUxpbmUgOiAwKTtcbiAgICAgICAgY2FsbHNpdGVDb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKFxuICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICBzYW1lU291cmNlICYmIHByZXZMaW5lID09PSBjYWxsc2l0ZUxpbmUgPyBjYWxsc2l0ZUNvbHVtbiA6IDBcbiAgICAgICAgKTtcbiAgICAgICAgY2FsbHNpdGUgPSBbY2FsbHNpdGVTb3VyY2VzSW5kZXgsIGNhbGxzaXRlTGluZSwgY2FsbHNpdGVDb2x1bW5dO1xuICAgICAgfVxuICAgICAgcmFuZ2UuY2FsbHNpdGUgPSBjYWxsc2l0ZTtcbiAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgYmluZGluZ3MgPSBbXTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGJpbmRpbmdMaW5lID0gZ2VuTGluZTtcbiAgICAgICAgICBiaW5kaW5nQ29sdW1uID0gZ2VuQ29sdW1uO1xuICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zQ291bnQgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICAgICAgbGV0IGV4cHJlc3Npb25SYW5nZXM7XG4gICAgICAgICAgaWYgKGV4cHJlc3Npb25zQ291bnQgPCAtMSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlcyA9IFtbZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApXV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7IGkgPiBleHByZXNzaW9uc0NvdW50OyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldkJsID0gYmluZGluZ0xpbmU7XG4gICAgICAgICAgICAgIGJpbmRpbmdMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGJpbmRpbmdMaW5lKTtcbiAgICAgICAgICAgICAgYmluZGluZ0NvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBiaW5kaW5nTGluZSA9PT0gcHJldkJsID8gYmluZGluZ0NvbHVtbiA6IDApO1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VzLnB1c2goW2V4cHJlc3Npb24sIGJpbmRpbmdMaW5lLCBiaW5kaW5nQ29sdW1uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZXMgPSBbW2V4cHJlc3Npb25zQ291bnRdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYmluZGluZ3MucHVzaChleHByZXNzaW9uUmFuZ2VzKTtcbiAgICAgICAgfSB3aGlsZSAoaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpKTtcbiAgICAgIH1cbiAgICAgIHJhbmdlLmJpbmRpbmdzID0gYmluZGluZ3M7XG4gICAgICByYW5nZXMucHVzaChyYW5nZSk7XG4gICAgICBzdGFjay5wdXNoKHJhbmdlKTtcbiAgICB9XG4gICAgZ2VuTGluZSsrO1xuICAgIHJlYWRlci5wb3MgPSBzZW1pICsgMTtcbiAgfSB3aGlsZSAocmVhZGVyLnBvcyA8IGxlbmd0aCk7XG4gIHJldHVybiByYW5nZXM7XG59XG5mdW5jdGlvbiBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMocmFuZ2VzKSB7XG4gIGlmIChyYW5nZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7ICkge1xuICAgIGkgPSBfZW5jb2RlR2VuZXJhdGVkUmFuZ2VzKHJhbmdlcywgaSwgd3JpdGVyLCBbMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xuICB9XG4gIHJldHVybiB3cml0ZXIuZmx1c2goKTtcbn1cbmZ1bmN0aW9uIF9lbmNvZGVHZW5lcmF0ZWRSYW5nZXMocmFuZ2VzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSkge1xuICBjb25zdCByYW5nZSA9IHJhbmdlc1tpbmRleF07XG4gIGNvbnN0IHtcbiAgICAwOiBzdGFydExpbmUsXG4gICAgMTogc3RhcnRDb2x1bW4sXG4gICAgMjogZW5kTGluZSxcbiAgICAzOiBlbmRDb2x1bW4sXG4gICAgaXNTY29wZSxcbiAgICBjYWxsc2l0ZSxcbiAgICBiaW5kaW5nc1xuICB9ID0gcmFuZ2U7XG4gIGlmIChzdGF0ZVswXSA8IHN0YXJ0TGluZSkge1xuICAgIGNhdGNodXBMaW5lKHdyaXRlciwgc3RhdGVbMF0sIHN0YXJ0TGluZSk7XG4gICAgc3RhdGVbMF0gPSBzdGFydExpbmU7XG4gICAgc3RhdGVbMV0gPSAwO1xuICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgIHdyaXRlci53cml0ZShjb21tYSk7XG4gIH1cbiAgc3RhdGVbMV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgcmFuZ2VbMV0sIHN0YXRlWzFdKTtcbiAgY29uc3QgZmllbGRzID0gKHJhbmdlLmxlbmd0aCA9PT0gNiA/IDEgOiAwKSB8IChjYWxsc2l0ZSA/IDIgOiAwKSB8IChpc1Njb3BlID8gNCA6IDApO1xuICBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZmllbGRzLCAwKTtcbiAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gNikge1xuICAgIGNvbnN0IHsgNDogc291cmNlc0luZGV4LCA1OiBzY29wZXNJbmRleCB9ID0gcmFuZ2U7XG4gICAgaWYgKHNvdXJjZXNJbmRleCAhPT0gc3RhdGVbMl0pIHtcbiAgICAgIHN0YXRlWzNdID0gMDtcbiAgICB9XG4gICAgc3RhdGVbMl0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc291cmNlc0luZGV4LCBzdGF0ZVsyXSk7XG4gICAgc3RhdGVbM10gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2NvcGVzSW5kZXgsIHN0YXRlWzNdKTtcbiAgfVxuICBpZiAoY2FsbHNpdGUpIHtcbiAgICBjb25zdCB7IDA6IHNvdXJjZXNJbmRleCwgMTogY2FsbExpbmUsIDI6IGNhbGxDb2x1bW4gfSA9IHJhbmdlLmNhbGxzaXRlO1xuICAgIGlmIChzb3VyY2VzSW5kZXggIT09IHN0YXRlWzRdKSB7XG4gICAgICBzdGF0ZVs1XSA9IDA7XG4gICAgICBzdGF0ZVs2XSA9IDA7XG4gICAgfSBlbHNlIGlmIChjYWxsTGluZSAhPT0gc3RhdGVbNV0pIHtcbiAgICAgIHN0YXRlWzZdID0gMDtcbiAgICB9XG4gICAgc3RhdGVbNF0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc291cmNlc0luZGV4LCBzdGF0ZVs0XSk7XG4gICAgc3RhdGVbNV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgY2FsbExpbmUsIHN0YXRlWzVdKTtcbiAgICBzdGF0ZVs2XSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBjYWxsQ29sdW1uLCBzdGF0ZVs2XSk7XG4gIH1cbiAgaWYgKGJpbmRpbmdzKSB7XG4gICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIGJpbmRpbmdzKSB7XG4gICAgICBpZiAoYmluZGluZy5sZW5ndGggPiAxKSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgLWJpbmRpbmcubGVuZ3RoLCAwKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBiaW5kaW5nWzBdWzBdO1xuICAgICAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cHJlc3Npb24sIDApO1xuICAgICAgbGV0IGJpbmRpbmdTdGFydExpbmUgPSBzdGFydExpbmU7XG4gICAgICBsZXQgYmluZGluZ1N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJpbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwUmFuZ2UgPSBiaW5kaW5nW2ldO1xuICAgICAgICBiaW5kaW5nU3RhcnRMaW5lID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cFJhbmdlWzFdLCBiaW5kaW5nU3RhcnRMaW5lKTtcbiAgICAgICAgYmluZGluZ1N0YXJ0Q29sdW1uID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cFJhbmdlWzJdLCBiaW5kaW5nU3RhcnRDb2x1bW4pO1xuICAgICAgICBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZXhwUmFuZ2VbMF0sIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmb3IgKGluZGV4Kys7IGluZGV4IDwgcmFuZ2VzLmxlbmd0aDsgKSB7XG4gICAgY29uc3QgbmV4dCA9IHJhbmdlc1tpbmRleF07XG4gICAgY29uc3QgeyAwOiBsLCAxOiBjIH0gPSBuZXh0O1xuICAgIGlmIChsID4gZW5kTGluZSB8fCBsID09PSBlbmRMaW5lICYmIGMgPj0gZW5kQ29sdW1uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggPSBfZW5jb2RlR2VuZXJhdGVkUmFuZ2VzKHJhbmdlcywgaW5kZXgsIHdyaXRlciwgc3RhdGUpO1xuICB9XG4gIGlmIChzdGF0ZVswXSA8IGVuZExpbmUpIHtcbiAgICBjYXRjaHVwTGluZSh3cml0ZXIsIHN0YXRlWzBdLCBlbmRMaW5lKTtcbiAgICBzdGF0ZVswXSA9IGVuZExpbmU7XG4gICAgc3RhdGVbMV0gPSAwO1xuICB9IGVsc2Uge1xuICAgIHdyaXRlci53cml0ZShjb21tYSk7XG4gIH1cbiAgc3RhdGVbMV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kQ29sdW1uLCBzdGF0ZVsxXSk7XG4gIHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGNhdGNodXBMaW5lKHdyaXRlciwgbGFzdExpbmUsIGxpbmUpIHtcbiAgZG8ge1xuICAgIHdyaXRlci53cml0ZShzZW1pY29sb24pO1xuICB9IHdoaWxlICgrK2xhc3RMaW5lIDwgbGluZSk7XG59XG5cbi8vIHNyYy9zb3VyY2VtYXAtY29kZWMudHNcbmZ1bmN0aW9uIGRlY29kZShtYXBwaW5ncykge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gbWFwcGluZ3M7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIobWFwcGluZ3MpO1xuICBjb25zdCBkZWNvZGVkID0gW107XG4gIGxldCBnZW5Db2x1bW4gPSAwO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuICBkbyB7XG4gICAgY29uc3Qgc2VtaSA9IHJlYWRlci5pbmRleE9mKFwiO1wiKTtcbiAgICBjb25zdCBsaW5lID0gW107XG4gICAgbGV0IHNvcnRlZCA9IHRydWU7XG4gICAgbGV0IGxhc3RDb2wgPSAwO1xuICAgIGdlbkNvbHVtbiA9IDA7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBzZW1pKSB7XG4gICAgICBsZXQgc2VnO1xuICAgICAgZ2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbik7XG4gICAgICBpZiAoZ2VuQ29sdW1uIDwgbGFzdENvbCkgc29ydGVkID0gZmFsc2U7XG4gICAgICBsYXN0Q29sID0gZ2VuQ29sdW1uO1xuICAgICAgaWYgKGhhc01vcmVWbHEocmVhZGVyLCBzZW1pKSkge1xuICAgICAgICBzb3VyY2VzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlc0luZGV4KTtcbiAgICAgICAgc291cmNlTGluZSA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VMaW5lKTtcbiAgICAgICAgc291cmNlQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUNvbHVtbik7XG4gICAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgICBuYW1lc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIG5hbWVzSW5kZXgpO1xuICAgICAgICAgIHNlZyA9IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZyA9IFtnZW5Db2x1bW5dO1xuICAgICAgfVxuICAgICAgbGluZS5wdXNoKHNlZyk7XG4gICAgICByZWFkZXIucG9zKys7XG4gICAgfVxuICAgIGlmICghc29ydGVkKSBzb3J0KGxpbmUpO1xuICAgIGRlY29kZWQucHVzaChsaW5lKTtcbiAgICByZWFkZXIucG9zID0gc2VtaSArIDE7XG4gIH0gd2hpbGUgKHJlYWRlci5wb3MgPD0gbGVuZ3RoKTtcbiAgcmV0dXJuIGRlY29kZWQ7XG59XG5mdW5jdGlvbiBzb3J0KGxpbmUpIHtcbiAgbGluZS5zb3J0KHNvcnRDb21wYXJhdG9yKTtcbn1cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuZnVuY3Rpb24gZW5jb2RlKGRlY29kZWQpIHtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gZGVjb2RlZFtpXTtcbiAgICBpZiAoaSA+IDApIHdyaXRlci53cml0ZShzZW1pY29sb24pO1xuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgbGV0IGdlbkNvbHVtbiA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gbGluZVtqXTtcbiAgICAgIGlmIChqID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgICAgIGdlbkNvbHVtbiA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzBdLCBnZW5Db2x1bW4pO1xuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSBjb250aW51ZTtcbiAgICAgIHNvdXJjZXNJbmRleCA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzFdLCBzb3VyY2VzSW5kZXgpO1xuICAgICAgc291cmNlTGluZSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzJdLCBzb3VyY2VMaW5lKTtcbiAgICAgIHNvdXJjZUNvbHVtbiA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzNdLCBzb3VyY2VDb2x1bW4pO1xuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSA0KSBjb250aW51ZTtcbiAgICAgIG5hbWVzSW5kZXggPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFs0XSwgbmFtZXNJbmRleCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB3cml0ZXIuZmx1c2goKTtcbn1cbmV4cG9ydCB7XG4gIGRlY29kZSxcbiAgZGVjb2RlR2VuZXJhdGVkUmFuZ2VzLFxuICBkZWNvZGVPcmlnaW5hbFNjb3BlcyxcbiAgZW5jb2RlLFxuICBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMsXG4gIGVuY29kZU9yaWdpbmFsU2NvcGVzXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlbWFwLWNvZGVjLm1qcy5tYXBcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiO0FBQ0EsSUFBSSxRQUFRLElBQUksV0FBVyxFQUFFO0FBQzdCLElBQUksWUFBWSxJQUFJLFdBQVcsRUFBRTtBQUNqQyxJQUFJLFFBQVE7QUFDWixJQUFJLFlBQVksSUFBSSxXQUFXLEdBQUc7QUFDbEMsSUFBSSxZQUFZLElBQUksV0FBVyxJQUFJO0FBQ25DLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztDQUNyQyxNQUFNLElBQUksTUFBTSxXQUFXLEVBQUU7QUFDN0IsV0FBVSxLQUFLO0FBQ2YsV0FBVSxLQUFLOztBQW1CakIsU0FBUyxjQUFjLFNBQVMsS0FBSyxVQUFVO0NBQzdDLElBQUksUUFBUSxNQUFNO0FBQ2xCLFNBQVEsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksU0FBUztBQUMvQyxJQUFHO0VBQ0QsSUFBSSxVQUFVLFFBQVE7QUFDdEIsYUFBVztBQUNYLE1BQUksUUFBUSxFQUFHLFlBQVc7QUFDMUIsVUFBUSxNQUFNLFVBQVUsU0FBUztVQUMxQixRQUFRO0FBQ2pCLFFBQU87O0FBUVQsSUFBSSxZQUFZLE9BQU87QUFDdkIsSUFBSSxLQUFLLE9BQU8sZ0JBQWdCLDhCQUE4QixJQUFJLGFBQWEsR0FBRyxPQUFPLFdBQVcsY0FBYyxFQUNoSCxPQUFPLEtBQUs7QUFFVixRQURZLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxZQUFZLElBQUksV0FBVyxDQUN4RCxVQUFVO0dBRXhCLEdBQUcsRUFDRixPQUFPLEtBQUs7Q0FDVixJQUFJLE1BQU07QUFDVixNQUFLLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLElBQzlCLFFBQU8sT0FBTyxhQUFhLElBQUksR0FBRztBQUVwQyxRQUFPO0dBRVY7QUFDRCxJQUFJLGVBQWUsTUFBTTtDQUN2QixjQUFjO0FBQ1osT0FBSyxNQUFNO0FBQ1gsT0FBSyxNQUFNO0FBQ1gsT0FBSyxTQUFTLElBQUksV0FBVyxVQUFVOztDQUV6QyxNQUFNLEdBQUc7RUFDUCxNQUFNLEVBQUUsV0FBVztBQUNuQixTQUFPLEtBQUssU0FBUztBQUNyQixNQUFJLEtBQUssUUFBUSxXQUFXO0FBQzFCLFFBQUssT0FBTyxHQUFHLE9BQU8sT0FBTztBQUM3QixRQUFLLE1BQU07OztDQUdmLFFBQVE7RUFDTixNQUFNLEVBQUUsUUFBUSxLQUFLLFFBQVE7QUFDN0IsU0FBTyxNQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sT0FBTyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUc7OztBQStEaEUsU0FBUyxzQkFBc0IsUUFBUSxPQUFPLFFBQVEsT0FBTztDQUMzRCxNQUFNLFFBQVEsT0FBTztDQUNyQixNQUFNLEVBQUUsR0FBRyxXQUFXLEdBQUcsYUFBYSxHQUFHLFNBQVMsR0FBRyxXQUFXLEdBQUcsTUFBTSxTQUFTO0FBQ2xGLEtBQUksUUFBUSxFQUFHLFFBQU8sTUFBTSxNQUFNO0FBQ2xDLE9BQU0sS0FBSyxjQUFjLFFBQVEsV0FBVyxNQUFNLEdBQUc7QUFDckQsZUFBYyxRQUFRLGFBQWEsRUFBRTtBQUNyQyxlQUFjLFFBQVEsTUFBTSxFQUFFO0FBRTlCLGVBQWMsUUFEQyxNQUFNLFdBQVcsSUFBSSxJQUFJLEdBQ1YsRUFBRTtBQUNoQyxLQUFJLE1BQU0sV0FBVyxFQUFHLGVBQWMsUUFBUSxNQUFNLElBQUksRUFBRTtBQUMxRCxNQUFLLE1BQU0sS0FBSyxLQUNkLGVBQWMsUUFBUSxHQUFHLEVBQUU7QUFFN0IsTUFBSyxTQUFTLFFBQVEsT0FBTyxTQUFVO0VBRXJDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxNQURKLE9BQU87QUFFcEIsTUFBSSxJQUFJLFdBQVcsTUFBTSxXQUFXLEtBQUssVUFDdkM7QUFFRixVQUFRLHNCQUFzQixRQUFRLE9BQU8sUUFBUSxNQUFNOztBQUU3RCxRQUFPLE1BQU0sTUFBTTtBQUNuQixPQUFNLEtBQUssY0FBYyxRQUFRLFNBQVMsTUFBTSxHQUFHO0FBQ25ELGVBQWMsUUFBUSxXQUFXLEVBQUU7QUFDbkMsUUFBTzs7QUFpR1QsU0FBUyx1QkFBdUIsUUFBUSxPQUFPLFFBQVEsT0FBTztDQUM1RCxNQUFNLFFBQVEsT0FBTztDQUNyQixNQUFNLEVBQ0osR0FBRyxXQUNILEdBQUcsYUFDSCxHQUFHLFNBQ0gsR0FBRyxXQUNILFNBQ0EsVUFDQSxhQUNFO0FBQ0osS0FBSSxNQUFNLEtBQUssV0FBVztBQUN4QixjQUFZLFFBQVEsTUFBTSxJQUFJLFVBQVU7QUFDeEMsUUFBTSxLQUFLO0FBQ1gsUUFBTSxLQUFLO1lBQ0YsUUFBUSxFQUNqQixRQUFPLE1BQU0sTUFBTTtBQUVyQixPQUFNLEtBQUssY0FBYyxRQUFRLE1BQU0sSUFBSSxNQUFNLEdBQUc7QUFFcEQsZUFBYyxTQURFLE1BQU0sV0FBVyxJQUFJLElBQUksTUFBTSxXQUFXLElBQUksTUFBTSxVQUFVLElBQUksSUFDcEQsRUFBRTtBQUNoQyxLQUFJLE1BQU0sV0FBVyxHQUFHO0VBQ3RCLE1BQU0sRUFBRSxHQUFHLGNBQWMsR0FBRyxnQkFBZ0I7QUFDNUMsTUFBSSxpQkFBaUIsTUFBTSxHQUN6QixPQUFNLEtBQUs7QUFFYixRQUFNLEtBQUssY0FBYyxRQUFRLGNBQWMsTUFBTSxHQUFHO0FBQ3hELFFBQU0sS0FBSyxjQUFjLFFBQVEsYUFBYSxNQUFNLEdBQUc7O0FBRXpELEtBQUksVUFBVTtFQUNaLE1BQU0sRUFBRSxHQUFHLGNBQWMsR0FBRyxVQUFVLEdBQUcsZUFBZSxNQUFNO0FBQzlELE1BQUksaUJBQWlCLE1BQU0sSUFBSTtBQUM3QixTQUFNLEtBQUs7QUFDWCxTQUFNLEtBQUs7YUFDRixhQUFhLE1BQU0sR0FDNUIsT0FBTSxLQUFLO0FBRWIsUUFBTSxLQUFLLGNBQWMsUUFBUSxjQUFjLE1BQU0sR0FBRztBQUN4RCxRQUFNLEtBQUssY0FBYyxRQUFRLFVBQVUsTUFBTSxHQUFHO0FBQ3BELFFBQU0sS0FBSyxjQUFjLFFBQVEsWUFBWSxNQUFNLEdBQUc7O0FBRXhELEtBQUksU0FDRixNQUFLLE1BQU0sV0FBVyxVQUFVO0FBQzlCLE1BQUksUUFBUSxTQUFTLEVBQUcsZUFBYyxRQUFRLENBQUMsUUFBUSxRQUFRLEVBQUU7RUFDakUsTUFBTSxhQUFhLFFBQVEsR0FBRztBQUM5QixnQkFBYyxRQUFRLFlBQVksRUFBRTtFQUNwQyxJQUFJLG1CQUFtQjtFQUN2QixJQUFJLHFCQUFxQjtBQUN6QixPQUFLLElBQUksSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7R0FDdkMsTUFBTSxXQUFXLFFBQVE7QUFDekIsc0JBQW1CLGNBQWMsUUFBUSxTQUFTLElBQUksaUJBQWlCO0FBQ3ZFLHdCQUFxQixjQUFjLFFBQVEsU0FBUyxJQUFJLG1CQUFtQjtBQUMzRSxpQkFBYyxRQUFRLFNBQVMsSUFBSSxFQUFFOzs7QUFJM0MsTUFBSyxTQUFTLFFBQVEsT0FBTyxTQUFVO0VBRXJDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxNQURKLE9BQU87QUFFcEIsTUFBSSxJQUFJLFdBQVcsTUFBTSxXQUFXLEtBQUssVUFDdkM7QUFFRixVQUFRLHVCQUF1QixRQUFRLE9BQU8sUUFBUSxNQUFNOztBQUU5RCxLQUFJLE1BQU0sS0FBSyxTQUFTO0FBQ3RCLGNBQVksUUFBUSxNQUFNLElBQUksUUFBUTtBQUN0QyxRQUFNLEtBQUs7QUFDWCxRQUFNLEtBQUs7T0FFWCxRQUFPLE1BQU0sTUFBTTtBQUVyQixPQUFNLEtBQUssY0FBYyxRQUFRLFdBQVcsTUFBTSxHQUFHO0FBQ3JELFFBQU87O0FBRVQsU0FBUyxZQUFZLFFBQVEsVUFBVSxNQUFNO0FBQzNDO0FBQ0UsU0FBTyxNQUFNLFVBQVU7UUFDaEIsRUFBRSxXQUFXOztBQW9EeEIsU0FBUyxPQUFPLFNBQVM7Q0FDdkIsTUFBTSxTQUFTLElBQUksY0FBYztDQUNqQyxJQUFJLGVBQWU7Q0FDbkIsSUFBSSxhQUFhO0NBQ2pCLElBQUksZUFBZTtDQUNuQixJQUFJLGFBQWE7QUFDakIsTUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0VBQ3ZDLE1BQU0sT0FBTyxRQUFRO0FBQ3JCLE1BQUksSUFBSSxFQUFHLFFBQU8sTUFBTSxVQUFVO0FBQ2xDLE1BQUksS0FBSyxXQUFXLEVBQUc7RUFDdkIsSUFBSSxZQUFZO0FBQ2hCLE9BQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztHQUNwQyxNQUFNLFVBQVUsS0FBSztBQUNyQixPQUFJLElBQUksRUFBRyxRQUFPLE1BQU0sTUFBTTtBQUM5QixlQUFZLGNBQWMsUUFBUSxRQUFRLElBQUksVUFBVTtBQUN4RCxPQUFJLFFBQVEsV0FBVyxFQUFHO0FBQzFCLGtCQUFlLGNBQWMsUUFBUSxRQUFRLElBQUksYUFBYTtBQUM5RCxnQkFBYSxjQUFjLFFBQVEsUUFBUSxJQUFJLFdBQVc7QUFDMUQsa0JBQWUsY0FBYyxRQUFRLFFBQVEsSUFBSSxhQUFhO0FBQzlELE9BQUksUUFBUSxXQUFXLEVBQUc7QUFDMUIsZ0JBQWEsY0FBYyxRQUFRLFFBQVEsSUFBSSxXQUFXOzs7QUFHOUQsUUFBTyxPQUFPLE9BQU8ifQ==