@reclaimprotocol/attestor-core 4.0.3 → 5.0.1-beta.2

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 (297) hide show
  1. package/LICENSE +660 -660
  2. package/README.md +1 -2
  3. package/lib/avs/abis/avsDirectoryABI.js +341 -342
  4. package/lib/avs/abis/delegationABI.js +4 -5
  5. package/lib/avs/abis/registryABI.js +722 -723
  6. package/lib/avs/client/create-claim-on-avs.d.ts +5 -5
  7. package/lib/avs/client/create-claim-on-avs.js +160 -139
  8. package/lib/avs/config.d.ts +1 -1
  9. package/lib/avs/config.js +25 -23
  10. package/lib/avs/contracts/ReclaimServiceManager.d.ts +436 -532
  11. package/lib/avs/contracts/ReclaimServiceManager.js +0 -3
  12. package/lib/avs/contracts/common.d.ts +40 -11
  13. package/lib/avs/contracts/common.js +0 -3
  14. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +13 -11
  15. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1157 -1148
  16. package/lib/avs/contracts/factories/index.d.ts +1 -1
  17. package/lib/avs/contracts/factories/index.js +4 -9
  18. package/lib/avs/contracts/index.d.ts +3 -3
  19. package/lib/avs/contracts/index.js +6 -40
  20. package/lib/avs/types/index.d.ts +6 -6
  21. package/lib/avs/types/index.js +0 -3
  22. package/lib/avs/utils/contracts.d.ts +14 -14
  23. package/lib/avs/utils/contracts.js +50 -35
  24. package/lib/avs/utils/register.d.ts +3 -3
  25. package/lib/avs/utils/register.js +71 -79
  26. package/lib/avs/utils/tasks.d.ts +4 -4
  27. package/lib/avs/utils/tasks.js +44 -41
  28. package/lib/client/create-claim.d.ts +2 -2
  29. package/lib/client/create-claim.js +437 -400
  30. package/lib/client/index.d.ts +3 -3
  31. package/lib/client/index.js +3 -20
  32. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +2 -2
  33. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +49 -56
  34. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +4 -3
  35. package/lib/client/tunnels/make-rpc-tls-tunnel.js +123 -131
  36. package/lib/client/utils/attestor-pool.d.ts +3 -1
  37. package/lib/client/utils/attestor-pool.js +21 -25
  38. package/lib/client/utils/client-socket.d.ts +4 -4
  39. package/lib/client/utils/client-socket.js +114 -94
  40. package/lib/client/utils/message-handler.d.ts +2 -2
  41. package/lib/client/utils/message-handler.js +89 -86
  42. package/lib/config/index.d.ts +6 -3
  43. package/lib/config/index.js +60 -37
  44. package/lib/external-rpc/benchmark.d.ts +1 -0
  45. package/lib/external-rpc/benchmark.js +82 -0
  46. package/lib/external-rpc/event-bus.d.ts +7 -0
  47. package/lib/external-rpc/event-bus.js +17 -0
  48. package/lib/external-rpc/global.d.js +0 -0
  49. package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
  50. package/lib/external-rpc/handle-incoming-msg.js +241 -0
  51. package/lib/external-rpc/index.d.ts +3 -0
  52. package/lib/external-rpc/index.js +3 -0
  53. package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
  54. package/lib/external-rpc/jsc-polyfills/1.js +80 -0
  55. package/lib/external-rpc/jsc-polyfills/2.js +15 -0
  56. package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
  57. package/lib/external-rpc/jsc-polyfills/event.js +19 -0
  58. package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
  59. package/lib/external-rpc/jsc-polyfills/index.js +2 -0
  60. package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
  61. package/lib/external-rpc/jsc-polyfills/ws.js +83 -0
  62. package/lib/external-rpc/setup-browser.d.ts +6 -0
  63. package/lib/external-rpc/setup-browser.js +33 -0
  64. package/lib/external-rpc/setup-jsc.d.ts +24 -0
  65. package/lib/external-rpc/setup-jsc.js +22 -0
  66. package/lib/{window-rpc → external-rpc}/types.d.ts +56 -35
  67. package/lib/external-rpc/types.js +0 -0
  68. package/lib/external-rpc/utils.d.ts +20 -0
  69. package/lib/external-rpc/utils.js +100 -0
  70. package/lib/external-rpc/zk.d.ts +14 -0
  71. package/lib/external-rpc/zk.js +58 -0
  72. package/lib/index.d.ts +8 -9
  73. package/lib/index.js +12 -49
  74. package/lib/mechain/abis/governanceABI.js +460 -461
  75. package/lib/mechain/abis/taskABI.js +505 -506
  76. package/lib/mechain/client/create-claim-on-mechain.d.ts +3 -3
  77. package/lib/mechain/client/create-claim-on-mechain.js +31 -30
  78. package/lib/mechain/client/index.d.ts +1 -1
  79. package/lib/mechain/client/index.js +1 -18
  80. package/lib/mechain/constants/index.js +8 -7
  81. package/lib/mechain/index.d.ts +2 -2
  82. package/lib/mechain/index.js +2 -19
  83. package/lib/mechain/types/index.d.ts +2 -2
  84. package/lib/mechain/types/index.js +0 -3
  85. package/lib/proto/api.d.ts +182 -39
  86. package/lib/proto/api.js +4105 -3555
  87. package/lib/proto/tee-bundle.d.ts +156 -0
  88. package/lib/proto/tee-bundle.js +1296 -0
  89. package/lib/providers/http/index.d.ts +16 -1
  90. package/lib/providers/http/index.js +603 -576
  91. package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
  92. package/lib/providers/http/patch-parse5-tree.js +34 -0
  93. package/lib/providers/http/utils.d.ts +7 -4
  94. package/lib/providers/http/utils.js +240 -317
  95. package/lib/providers/index.d.ts +1 -1
  96. package/lib/providers/index.js +5 -9
  97. package/lib/scripts/check-avs-registration.d.ts +1 -1
  98. package/lib/scripts/check-avs-registration.js +24 -25
  99. package/lib/scripts/fallbacks/crypto.d.ts +1 -0
  100. package/lib/scripts/fallbacks/crypto.js +4 -0
  101. package/lib/scripts/fallbacks/empty.d.ts +3 -0
  102. package/lib/scripts/fallbacks/empty.js +4 -0
  103. package/lib/scripts/fallbacks/re2.d.ts +1 -0
  104. package/lib/scripts/fallbacks/re2.js +7 -0
  105. package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
  106. package/lib/scripts/fallbacks/snarkjs.js +10 -0
  107. package/lib/scripts/fallbacks/stwo.d.ts +6 -0
  108. package/lib/scripts/fallbacks/stwo.js +159 -0
  109. package/lib/scripts/generate-provider-types.js +92 -73
  110. package/lib/scripts/generate-receipt.d.ts +2 -2
  111. package/lib/scripts/generate-receipt.js +94 -83
  112. package/lib/scripts/generate-toprf-keys.js +17 -16
  113. package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
  114. package/lib/scripts/jsc-cli-rpc.js +35 -0
  115. package/lib/scripts/register-avs-operator.d.ts +1 -1
  116. package/lib/scripts/register-avs-operator.js +3 -7
  117. package/lib/scripts/start-server.d.ts +1 -1
  118. package/lib/scripts/start-server.js +9 -11
  119. package/lib/scripts/update-avs-metadata.d.ts +1 -1
  120. package/lib/scripts/update-avs-metadata.js +17 -19
  121. package/lib/scripts/utils.js +8 -9
  122. package/lib/scripts/whitelist-operator.d.ts +1 -1
  123. package/lib/scripts/whitelist-operator.js +13 -15
  124. package/lib/server/create-server.d.ts +3 -2
  125. package/lib/server/create-server.js +98 -85
  126. package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
  127. package/lib/server/handlers/claimTeeBundle.js +232 -0
  128. package/lib/server/handlers/claimTunnel.d.ts +1 -1
  129. package/lib/server/handlers/claimTunnel.js +75 -73
  130. package/lib/server/handlers/completeClaimOnChain.d.ts +1 -1
  131. package/lib/server/handlers/completeClaimOnChain.js +27 -26
  132. package/lib/server/handlers/createClaimOnChain.d.ts +1 -1
  133. package/lib/server/handlers/createClaimOnChain.js +30 -29
  134. package/lib/server/handlers/createTaskOnMechain.d.ts +1 -1
  135. package/lib/server/handlers/createTaskOnMechain.js +54 -49
  136. package/lib/server/handlers/createTunnel.d.ts +1 -1
  137. package/lib/server/handlers/createTunnel.js +91 -94
  138. package/lib/server/handlers/disconnectTunnel.d.ts +1 -1
  139. package/lib/server/handlers/disconnectTunnel.js +6 -8
  140. package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
  141. package/lib/server/handlers/fetchCertificateBytes.js +57 -0
  142. package/lib/server/handlers/index.d.ts +1 -1
  143. package/lib/server/handlers/index.js +24 -21
  144. package/lib/server/handlers/init.d.ts +1 -1
  145. package/lib/server/handlers/init.js +31 -34
  146. package/lib/server/handlers/toprf.d.ts +1 -1
  147. package/lib/server/handlers/toprf.js +17 -19
  148. package/lib/server/index.d.ts +4 -4
  149. package/lib/server/index.js +4 -21
  150. package/lib/server/socket.d.ts +7 -7
  151. package/lib/server/socket.js +104 -106
  152. package/lib/server/tunnels/make-tcp-tunnel.d.ts +5 -3
  153. package/lib/server/tunnels/make-tcp-tunnel.js +189 -162
  154. package/lib/server/utils/apm.d.ts +1 -1
  155. package/lib/server/utils/apm.js +26 -40
  156. package/lib/server/utils/assert-valid-claim-request.d.ts +6 -5
  157. package/lib/server/utils/assert-valid-claim-request.js +339 -185
  158. package/lib/server/utils/config-env.js +4 -7
  159. package/lib/server/utils/dns.js +18 -16
  160. package/lib/server/utils/gcp-attestation.d.ts +17 -0
  161. package/lib/server/utils/gcp-attestation.js +237 -0
  162. package/lib/server/utils/generics.d.ts +3 -3
  163. package/lib/server/utils/generics.js +37 -51
  164. package/lib/server/utils/iso.js +255 -256
  165. package/lib/server/utils/keep-alive.d.ts +2 -2
  166. package/lib/server/utils/keep-alive.js +36 -40
  167. package/lib/server/utils/nitro-attestation.d.ts +33 -0
  168. package/lib/server/utils/nitro-attestation.js +249 -0
  169. package/lib/server/utils/oprf-raw.d.ts +21 -0
  170. package/lib/server/utils/oprf-raw.js +61 -0
  171. package/lib/server/utils/process-handshake.d.ts +3 -3
  172. package/lib/server/utils/process-handshake.js +217 -175
  173. package/lib/server/utils/proxy-session.d.ts +1 -0
  174. package/lib/server/utils/proxy-session.js +6 -0
  175. package/lib/server/utils/tee-oprf-mpc-verification.d.ts +16 -0
  176. package/lib/server/utils/tee-oprf-mpc-verification.js +86 -0
  177. package/lib/server/utils/tee-oprf-verification.d.ts +24 -0
  178. package/lib/server/utils/tee-oprf-verification.js +151 -0
  179. package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
  180. package/lib/server/utils/tee-transcript-reconstruction.js +140 -0
  181. package/lib/server/utils/tee-verification.d.ts +28 -0
  182. package/lib/server/utils/tee-verification.js +358 -0
  183. package/lib/{utils → server/utils}/validation.d.ts +1 -1
  184. package/lib/server/utils/validation.js +45 -0
  185. package/lib/types/bgp.js +0 -3
  186. package/lib/types/claims.d.ts +7 -10
  187. package/lib/types/claims.js +0 -3
  188. package/lib/types/client.d.ts +5 -5
  189. package/lib/types/client.js +0 -3
  190. package/lib/types/general.d.ts +29 -4
  191. package/lib/types/general.js +0 -3
  192. package/lib/types/handlers.d.ts +3 -3
  193. package/lib/types/handlers.js +0 -3
  194. package/lib/types/index.d.ts +10 -10
  195. package/lib/types/index.js +10 -27
  196. package/lib/types/providers.d.ts +15 -4
  197. package/lib/types/providers.gen.d.ts +15 -1
  198. package/lib/types/providers.gen.js +15 -13
  199. package/lib/types/providers.js +0 -3
  200. package/lib/types/rpc.d.ts +2 -2
  201. package/lib/types/rpc.js +0 -3
  202. package/lib/types/signatures.js +0 -3
  203. package/lib/types/tunnel.d.ts +2 -2
  204. package/lib/types/tunnel.js +0 -3
  205. package/lib/types/zk.d.ts +17 -2
  206. package/lib/types/zk.js +0 -3
  207. package/lib/utils/auth.d.ts +2 -1
  208. package/lib/utils/auth.js +66 -59
  209. package/lib/utils/b64-json.js +13 -19
  210. package/lib/utils/bgp-listener.d.ts +1 -1
  211. package/lib/utils/bgp-listener.js +111 -114
  212. package/lib/utils/claims.d.ts +3 -3
  213. package/lib/utils/claims.js +78 -101
  214. package/lib/utils/env.js +15 -16
  215. package/lib/utils/error.d.ts +6 -7
  216. package/lib/utils/error.js +50 -39
  217. package/lib/utils/generics.d.ts +15 -13
  218. package/lib/utils/generics.js +217 -297
  219. package/lib/utils/http-parser.d.ts +1 -1
  220. package/lib/utils/http-parser.js +186 -237
  221. package/lib/utils/index.d.ts +13 -12
  222. package/lib/utils/index.js +13 -29
  223. package/lib/utils/logger.d.ts +1 -1
  224. package/lib/utils/logger.js +69 -87
  225. package/lib/utils/prepare-packets.d.ts +3 -3
  226. package/lib/utils/prepare-packets.js +66 -58
  227. package/lib/utils/redactions.d.ts +20 -1
  228. package/lib/utils/redactions.js +116 -129
  229. package/lib/utils/retries.d.ts +1 -1
  230. package/lib/utils/retries.js +24 -26
  231. package/lib/utils/signatures/eth.d.ts +1 -1
  232. package/lib/utils/signatures/eth.js +28 -30
  233. package/lib/utils/signatures/index.d.ts +3 -3
  234. package/lib/utils/signatures/index.js +11 -10
  235. package/lib/utils/socket-base.d.ts +6 -5
  236. package/lib/utils/socket-base.js +89 -88
  237. package/lib/utils/tls.d.ts +1 -1
  238. package/lib/utils/tls.js +54 -28
  239. package/lib/utils/ws.d.ts +1 -6
  240. package/lib/utils/ws.js +17 -33
  241. package/lib/utils/zk.d.ts +28 -12
  242. package/lib/utils/zk.js +587 -406
  243. package/package.json +72 -60
  244. package/lib/avs/tests/test.operator.d.ts +0 -11
  245. package/lib/avs/tests/test.operator.js +0 -313
  246. package/lib/avs/tests/utils.d.ts +0 -2
  247. package/lib/avs/tests/utils.js +0 -50
  248. package/lib/scripts/verify-root-ca.d.ts +0 -1
  249. package/lib/scripts/verify-root-ca.js +0 -51
  250. package/lib/tests/describe-with-server.d.ts +0 -20
  251. package/lib/tests/describe-with-server.js +0 -64
  252. package/lib/tests/mock-provider-server.d.ts +0 -13
  253. package/lib/tests/mock-provider-server.js +0 -65
  254. package/lib/tests/mocks.d.ts +0 -4
  255. package/lib/tests/mocks.js +0 -23
  256. package/lib/tests/test.auth.js +0 -75
  257. package/lib/tests/test.bgp-listener.js +0 -169
  258. package/lib/tests/test.claim-creation.js +0 -280
  259. package/lib/tests/test.http-parser.d.ts +0 -1
  260. package/lib/tests/test.http-parser.js +0 -120
  261. package/lib/tests/test.http-provider-utils.js +0 -2416
  262. package/lib/tests/test.http-provider.d.ts +0 -1
  263. package/lib/tests/test.http-provider.js +0 -114
  264. package/lib/tests/test.rpc-communication.d.ts +0 -1
  265. package/lib/tests/test.rpc-communication.js +0 -64
  266. package/lib/tests/test.rpc-tunnel.d.ts +0 -1
  267. package/lib/tests/test.rpc-tunnel.js +0 -172
  268. package/lib/tests/test.signatures.d.ts +0 -1
  269. package/lib/tests/test.signatures.js +0 -24
  270. package/lib/tests/test.tcp-tunnel.d.ts +0 -1
  271. package/lib/tests/test.tcp-tunnel.js +0 -64
  272. package/lib/tests/test.zk.d.ts +0 -1
  273. package/lib/tests/test.zk.js +0 -337
  274. package/lib/tests/utils.d.ts +0 -18
  275. package/lib/tests/utils.js +0 -64
  276. package/lib/utils/atomic-operations.d.ts +0 -24
  277. package/lib/utils/atomic-operations.js +0 -65
  278. package/lib/utils/benchmark.d.ts +0 -1
  279. package/lib/utils/benchmark.js +0 -70
  280. package/lib/utils/connection-state-machine.d.ts +0 -43
  281. package/lib/utils/connection-state-machine.js +0 -129
  282. package/lib/utils/resource-monitor.d.ts +0 -61
  283. package/lib/utils/resource-monitor.js +0 -107
  284. package/lib/utils/validation.js +0 -46
  285. package/lib/window-rpc/index.d.ts +0 -3
  286. package/lib/window-rpc/index.js +0 -20
  287. package/lib/window-rpc/setup-window-rpc.d.ts +0 -5
  288. package/lib/window-rpc/setup-window-rpc.js +0 -291
  289. package/lib/window-rpc/types.js +0 -3
  290. package/lib/window-rpc/utils.d.ts +0 -14
  291. package/lib/window-rpc/utils.js +0 -102
  292. package/lib/window-rpc/window-rpc-zk.d.ts +0 -15
  293. package/lib/window-rpc/window-rpc-zk.js +0 -85
  294. /package/lib/{tests/test.auth.d.ts → external-rpc/jsc-polyfills/2.d.ts} +0 -0
  295. /package/lib/{tests/test.bgp-listener.d.ts → scripts/build-browser.d.ts} +0 -0
  296. /package/lib/{tests/test.claim-creation.d.ts → scripts/build-jsc.d.ts} +0 -0
  297. /package/lib/{tests/test.http-provider-utils.d.ts → scripts/build-lib.d.ts} +0 -0
@@ -1,2416 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const tls_1 = require("@reclaimprotocol/tls");
7
- const assert_1 = __importDefault(require("assert"));
8
- const config_1 = require("../config");
9
- const providers_1 = require("../providers");
10
- const http_1 = __importDefault(require("../providers/http"));
11
- const utils_1 = require("../providers/http/utils");
12
- const test_http_parser_1 = require("../tests/test.http-parser");
13
- const utils_2 = require("../utils");
14
- const v8_1 = require("v8");
15
- jest.setTimeout(60000);
16
- const ctx = config_1.PROVIDER_CTX;
17
- describe('HTTP Provider Utils tests', () => {
18
- const { hostPort, geoLocation, getResponseRedactions, createRequest, assertValidProviderReceipt } = providers_1.providers['http'];
19
- const transcript = JSON.parse('[' +
20
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},' +
21
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},' +
22
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},' +
23
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"server"},' +
24
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},' +
25
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio=","sender":"server"},' +
26
- '{"message":"R0VUIC8gSFRUUC8xLjENCkhvc3Q6IHhhcmdzLm9yZw0KQ29udGVudC1MZW5ndGg6IDQNCkNvbm5lY3Rpb246IGNsb3NlDQpBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5DQp1c2VyLWFnZW50OiBNb3ppbGxhLzUuMA0K","sender":"client"},' +
27
- '{"message":"KioqKio=","sender":"client"},' +
28
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==","sender":"client"},' +
29
- '{"message":"KioqKio=","sender":"client"},' +
30
- '{"message":"DQoNCnQ=","sender":"client"},' +
31
- '{"message":"KioqKio=","sender":"client"},' +
32
- '{"message":"Kg==","sender":"client"},' +
33
- '{"message":"KioqKio=","sender":"client"},' +
34
- '{"message":"c3Q=","sender":"client"},' +
35
- '{"message":"SFRUUC8xLjEgMjAwIE9LKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQo=","sender":"server"},' +
36
- '{"message":"KioqKioqKioqKioqKioqKioqKioqKioqKioqKjx0aXRsZT5BaWtlbiAmYW1wOyBEcmlzY29sbCAmYW1wOyBXZWJiPC90aXRsZT4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqT25lIG9mIHRoZSBmZXcgZXhjZXB0aW9ucyBpcyBhIHNlcmllcyBvZiBkb2N1bWVudHMgdGhhdCBJJ3ZlIHdyaXR0ZW4KICAgIGJyZWFraW5nIGRvd24gY3J5cHRvZ3JhcGhpYyBhbmQgbmV0d29yayBwcm90b2NvbHMgYnl0ZS1ieS1ieXRlLiBJJ20KICAgIGFsd2F5cyBoZWFyaW5nIGZyb20gdGVhY2hlcnMsIHN0dWRlbnRzLCBhbmQgZmVsbG93IHNvZnR3YXJlIGRldmVsb3BlcnMKICAgIHdobyB1c2UgdGhlc2UgdG8gbGVhcm4sIHRvIGZpeCwgYW5kIHRvIHVuZGVyc3RhbmQuIEknbSB2ZXJ5IHByb3VkIG9mIHRoYXQuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq","sender":"server"},{"message":"Kio=","sender":"server"}]')
37
- .map((x) => ({
38
- ...x,
39
- message: Buffer.from(x.message, 'base64'),
40
- }));
41
- it('should parse xpath & JSON path', () => {
42
- const json = (0, utils_1.extractHTMLElement)(html, "//script[@data-component-name='Navbar']", true);
43
- const val = (0, utils_1.extractJSONValueIndex)(json, '$.hasBookface');
44
- const rm = '"hasBookface":true';
45
- const regexp = new RegExp(rm, 'gim');
46
- expect(regexp.test(json.slice(val.start, val.end))).toBe(true);
47
- });
48
- it('should extract complex JSON path', () => {
49
- const json = `{
50
- "items":[
51
- {
52
- "name": "John Doe",
53
- "country": "USA"
54
- },
55
- {
56
- "country": "USA",
57
- "age":25
58
- }
59
- ]
60
- }`;
61
- const val = (0, utils_1.extractJSONValueIndex)(json, '$.items[?(@.name.match(/.*oe/))].name');
62
- const rm = '"name": "John Doe"';
63
- const regexp = new RegExp(rm, 'gim');
64
- expect(regexp.test(json.slice(val.start, val.end))).toBe(true);
65
- });
66
- it('should get inner & outer tag contents', () => {
67
- const html = `<body>
68
- <div id="content123">This is <span>some</span> text!</div>
69
- <div id="content456">This is <span>some</span> other text!</div>
70
- <div id="content789">This is <span>some</span> irrelevant text!</div>
71
- </body>`;
72
- let content = (0, utils_1.extractHTMLElement)(html, "//div[contains(@id, 'content123')]", true);
73
- expect(content).toEqual('This is <span>some</span> text!');
74
- content = (0, utils_1.extractHTMLElement)(html, "//div[contains(@id, 'content456')]", false);
75
- expect(content).toEqual('<div id="content456">This is <span>some</span> other text!</div>');
76
- });
77
- it('should get multiple elements', () => {
78
- const html = `<body>
79
- <div id="content123">This is <span>some</span> text!</div>
80
- <div id="content456">This is <span>some</span> other text!</div>
81
- <div id="content789">This is <span>some</span> irrelevant text!</div>
82
- </body>`;
83
- const contents = (0, utils_1.extractHTMLElements)(html, '//body/div', true);
84
- expect(contents).toEqual(['This is <span>some</span> text!', 'This is <span>some</span> other text!', 'This is <span>some</span> irrelevant text!']);
85
- });
86
- it('should get multiple JSONPaths', () => {
87
- const jsonData = `{
88
- "firstName": "John",
89
- "lastName": "doe",
90
- "age": 26,
91
- "address": {
92
- "streetAddress": "naist street",
93
- "city": "Nara",
94
- "postalCode": "630-0192"
95
- },
96
- "phoneNumbers": [
97
- {
98
- "type": "iPhone",
99
- "number": "0123-4567-8888"
100
- },
101
- {
102
- "type": "home",
103
- "number": "0123-4567-8910"
104
- }
105
- ]
106
- }`;
107
- const contents = (0, utils_1.extractJSONValueIndexes)(jsonData, '$.phoneNumbers[*].number');
108
- const res = [];
109
- for (const { start, end } of contents) {
110
- res.push(jsonData.slice(start, end));
111
- }
112
- expect(res).toEqual(['"number": "0123-4567-8888"', '"number": "0123-4567-8910"']);
113
- });
114
- it('should error on incorrect jsonPath', () => {
115
- expect(() => {
116
- (0, utils_1.extractJSONValueIndex)(('{"asdf": 1}'), '(alert(origin))');
117
- }).toThrow('loc.indexOf is not a function');
118
- });
119
- it('should not error on incorrect regex', () => {
120
- expect(() => {
121
- const regexp = (0, utils_1.makeRegex)('([a-z]+)+$');
122
- regexp.test('a'.repeat(31) + '\x00');
123
- }).not.toThrow();
124
- });
125
- it('should hide chunked parts from response', () => {
126
- const provider = http_1.default;
127
- const simpleChunk = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nTransfer-Encoding: chunked\r\nConnection: close\r\n\r\n9\r\nchunk 1, \r\n7\r\nchunk 2\r\n0\r\n');
128
- if (provider.getResponseRedactions) {
129
- const redactions = provider.getResponseRedactions({
130
- response: simpleChunk,
131
- params: {
132
- method: 'GET',
133
- url: 'https://test.com',
134
- 'responseMatches': [],
135
- 'responseRedactions': [
136
- {
137
- 'regex': 'chunk 1, chunk 2'
138
- }
139
- ],
140
- },
141
- logger: utils_2.logger,
142
- ctx
143
- });
144
- expect(redactions).toEqual([
145
- {
146
- 'fromIndex': 15,
147
- 'toIndex': 88,
148
- },
149
- {
150
- 'fromIndex': 92,
151
- 'toIndex': 95
152
- },
153
- {
154
- 'fromIndex': 104,
155
- 'toIndex': 109
156
- },
157
- {
158
- 'fromIndex': 116,
159
- 'toIndex': 121
160
- }
161
- ]);
162
- let start = 0;
163
- let str = '';
164
- for (const red of redactions) {
165
- str += simpleChunk.subarray(start, red.fromIndex);
166
- start = red.toIndex;
167
- }
168
- expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\nchunk 1, chunk 2');
169
- }
170
- });
171
- it('should perform complex redactions', () => {
172
- const provider = http_1.default;
173
- const response = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\ncontent-length: 222\r\nConnection: close\r\n\r\n<body> <div id="c1">{"ages":[{"age":"26"},{"age":"27"},{"age":"28"}]}</div> <div id="c2">{"ages":[{"age":"27"},{"age":"28"},{"age":"29"}]}</div> <div id="c3">{"ages":[{"age":"29"},{"age":"30"},{"age":"31"}]}</div></body>\r\n');
174
- if (provider.getResponseRedactions) {
175
- const redactions = provider.getResponseRedactions({
176
- response,
177
- params: {
178
- method: 'GET',
179
- url: 'https://test.com',
180
- 'responseMatches': [],
181
- 'responseRedactions': [
182
- {
183
- 'xPath': '//body/div',
184
- 'jsonPath': '$.ages[*].age',
185
- 'regex': '(2|3)\\d'
186
- }
187
- ],
188
- },
189
- logger: utils_2.logger,
190
- ctx,
191
- });
192
- expect(redactions).toEqual([
193
- {
194
- 'fromIndex': 15,
195
- 'toIndex': 81,
196
- },
197
- {
198
- 'fromIndex': 85,
199
- 'toIndex': 122
200
- },
201
- {
202
- 'fromIndex': 124,
203
- 'toIndex': 135
204
- },
205
- {
206
- 'fromIndex': 137,
207
- 'toIndex': 148
208
- },
209
- {
210
- 'fromIndex': 150,
211
- 'toIndex': 191
212
- },
213
- {
214
- 'fromIndex': 193,
215
- 'toIndex': 204
216
- },
217
- {
218
- 'fromIndex': 206,
219
- 'toIndex': 217
220
- },
221
- {
222
- 'fromIndex': 219,
223
- 'toIndex': 260
224
- },
225
- {
226
- 'fromIndex': 262,
227
- 'toIndex': 273
228
- },
229
- {
230
- 'fromIndex': 275,
231
- 'toIndex': 286
232
- },
233
- {
234
- 'fromIndex': 288,
235
- 'toIndex': 307
236
- }
237
- ]);
238
- let start = 0;
239
- let str = '';
240
- for (const red of redactions) {
241
- str += response.subarray(start, red.fromIndex);
242
- start = red.toIndex;
243
- }
244
- expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\n262728272829293031');
245
- }
246
- });
247
- it('should perform complex redactions 2', () => {
248
- const provider = http_1.default;
249
- const response = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\ncontent-length: 51\r\nConnection: close\r\n\r\n{"ages":[{"age":"26"},{"age":"27"},{"age":"28"}]}\r\n');
250
- if (provider.getResponseRedactions) {
251
- const redactions = provider.getResponseRedactions({
252
- response,
253
- params: {
254
- method: 'GET',
255
- url: 'https://test.com',
256
- 'responseMatches': [],
257
- 'responseRedactions': [
258
- {
259
- 'jsonPath': '$.ages[*].age',
260
- 'regex': '(2|3)\\d'
261
- }
262
- ],
263
- },
264
- logger: utils_2.logger,
265
- ctx,
266
- });
267
- expect(redactions).toEqual([
268
- {
269
- 'fromIndex': 15,
270
- 'toIndex': 80,
271
- },
272
- {
273
- 'fromIndex': 84,
274
- 'toIndex': 101
275
- },
276
- {
277
- 'fromIndex': 103,
278
- 'toIndex': 114
279
- },
280
- {
281
- 'fromIndex': 116,
282
- 'toIndex': 127
283
- },
284
- {
285
- 'fromIndex': 129,
286
- 'toIndex': 135
287
- }
288
- ]);
289
- let start = 0;
290
- let str = '';
291
- for (const red of redactions) {
292
- str += response.subarray(start, red.fromIndex);
293
- start = red.toIndex;
294
- }
295
- expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\n262728');
296
- }
297
- });
298
- it('should perform complex redactions 3', () => {
299
- const provider = http_1.default;
300
- const response = Buffer.from('HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\ncontent-length: 222\r\nConnection: close\r\n\r\n<body> <div id="c1">{"ages":[{"age":"26"},{"age":"27"},{"age":"28"}]}</div> <div id="c2">{"ages":[{"age":"27"},{"age":"28"},{"age":"29"}]}</div> <div id="c3">{"ages":[{"age":"29"},{"age":"30"},{"age":"31"}]}</div></body>\r\n');
301
- if (provider.getResponseRedactions) {
302
- const redactions = provider.getResponseRedactions({
303
- response,
304
- params: {
305
- method: 'GET',
306
- url: 'https://test.com',
307
- 'responseMatches': [],
308
- 'responseRedactions': [
309
- {
310
- 'xPath': '//body/div',
311
- 'regex': '"age":"\\d{2}"'
312
- }
313
- ],
314
- },
315
- logger: utils_2.logger,
316
- ctx,
317
- });
318
- expect(redactions).toEqual([
319
- {
320
- 'fromIndex': 15,
321
- 'toIndex': 81,
322
- },
323
- {
324
- 'fromIndex': 85,
325
- 'toIndex': 115
326
- },
327
- {
328
- 'fromIndex': 125,
329
- 'toIndex': 184
330
- },
331
- {
332
- 'fromIndex': 194,
333
- 'toIndex': 253
334
- },
335
- {
336
- 'fromIndex': 263,
337
- 'toIndex': 307
338
- }
339
- ]);
340
- let start = 0;
341
- let str = '';
342
- for (const red of redactions) {
343
- str += response.subarray(start, red.fromIndex);
344
- start = red.toIndex;
345
- }
346
- expect(str).toEqual('HTTP/1.1 200 OK\r\n\r\n"age":"26""age":"27""age":"29"');
347
- }
348
- });
349
- it('should get redactions from chunked response', () => {
350
- const provider = http_1.default;
351
- if (provider.getResponseRedactions) {
352
- const redactions = provider.getResponseRedactions({
353
- response: chunkedResp,
354
- params: {
355
- method: 'GET',
356
- url: 'https://bookface.ycombinator.com/home',
357
- 'responseMatches': [],
358
- 'responseRedactions': [
359
- {
360
- 'xPath': "//script[@id='js-react-on-rails-context']",
361
- 'jsonPath': '$.currentUser',
362
- },
363
- {
364
- 'xPath': "//script[@data-component-name='BookfaceCsrApp']",
365
- 'jsonPath': '$.hasBookface',
366
- },
367
- {
368
- 'regex': 'code_version:\\s"[0-9a-f]{40}\\sruby'
369
- }
370
- ],
371
- },
372
- logger: utils_2.logger,
373
- ctx,
374
- });
375
- expect(redactions).toEqual([
376
- {
377
- 'fromIndex': 15,
378
- 'toIndex': 17
379
- },
380
- {
381
- 'fromIndex': 52,
382
- 'toIndex': 4290,
383
- },
384
- {
385
- 'fromIndex': 4294,
386
- 'toIndex': 4760
387
- },
388
- {
389
- 'fromIndex': 4820,
390
- 'toIndex': 53268
391
- },
392
- {
393
- 'fromIndex': 53507,
394
- 'toIndex': 58705
395
- },
396
- {
397
- 'fromIndex': 58723,
398
- 'toIndex': 64093
399
- }
400
- ]);
401
- }
402
- });
403
- it('should hash provider params consistently', () => {
404
- const params = {
405
- url: 'https://xargs.org/',
406
- responseMatches: [
407
- {
408
- type: 'regex',
409
- value: '<title.*?(?<name>Aiken &amp; Driscoll &amp; Webb)<\\/title>'
410
- }
411
- ],
412
- method: 'GET',
413
- responseRedactions: [{ xPath: './html/head/title' }],
414
- geoLocation: 'US',
415
- };
416
- const hash = (0, utils_2.hashProviderParams)(params);
417
- expect(hash).toEqual('0xe9624d26421a4d898d401e98821ccd645c25b06de97746a6c24a8b12d9aec143');
418
- const paramsEx = {
419
- 'geoLocation': '',
420
- 'url': 'https://www.linkedin.com/dashboard/',
421
- 'method': 'GET',
422
- 'body': '',
423
- 'responseMatches': [
424
- {
425
- 'value': 'TOTAL_FOLLOWERS&quot;,&quot;$recipeTypes&quot;:[&quot;com.linkedin.c123aee2ba3dfeb6a4580e7effdf5d3f&quot;],&quot;analyticsTitle&quot;:{&quot;textDirection&quot;:&quot;USER_LOCALE&quot;,&quot;text&quot;:&quot;581&quot;',
426
- 'type': 'contains'
427
- }
428
- ],
429
- 'responseRedactions': [{
430
- 'xPath': '{{xpath}}',
431
- 'jsonPath': '',
432
- 'regex': 'TOTAL_FOLLOWERS&quot;,&quot;\\$recipeTypes&quot;:(.*?),&quot;analyticsTitle&quot;:{&quot;textDirection&quot;:&quot;USER_LOCALE&quot;,&quot;text&quot;:&quot;(.*?)&quot;'
433
- }]
434
- };
435
- expect((0, utils_2.hashProviderParams)(paramsEx)).toEqual('0x6fb81ebab0fb5dca0356abfd8726af97675e4a426712377bfc6ad9a0271c913b');
436
- });
437
- it('should match redacted strings', () => {
438
- const testCases = [
439
- {
440
- a: 'aaa',
441
- b: 'aaa'
442
- },
443
- {
444
- a: '{{abc}}',
445
- b: '************'
446
- },
447
- {
448
- a: '{{abc}}d',
449
- b: '*d'
450
- },
451
- {
452
- a: 'd{{abc}}',
453
- b: 'd*******************************************'
454
- },
455
- {
456
- a: 'd{{abc}}d{{abwewewewec}}',
457
- b: 'd*d*'
458
- },
459
- {
460
- a: '{{abc}}x{{abwewewewec}}',
461
- b: '*x*'
462
- }
463
- ];
464
- for (const { a, b } of testCases) {
465
- expect((0, utils_1.matchRedactedStrings)((0, tls_1.strToUint8Array)(a), (0, tls_1.strToUint8Array)(b))).toBeTruthy();
466
- }
467
- });
468
- it('should not match bad redacted strings', () => {
469
- const testCases = [
470
- {
471
- a: 'aaa',
472
- b: 'aab'
473
- },
474
- {
475
- a: '{{abc}}',
476
- b: ''
477
- },
478
- {
479
- a: '',
480
- b: '*****'
481
- },
482
- {
483
- a: '{{abc}}{{abc}}d',
484
- b: '*d'
485
- },
486
- {
487
- a: '{{yy',
488
- b: '*'
489
- },
490
- {
491
- a: '{{abc}}d{{abwewewewec}}',
492
- b: 'a*d*'
493
- },
494
- {
495
- a: '{abc}}',
496
- b: '************'
497
- }
498
- ];
499
- for (const { a, b } of testCases) {
500
- expect((0, utils_1.matchRedactedStrings)((0, tls_1.strToUint8Array)(a), (0, tls_1.strToUint8Array)(b))).toBeFalsy();
501
- }
502
- });
503
- it('should throw on invalid URL', () => {
504
- expect(() => ((0, utils_2.getProviderValue)({
505
- url: 'abc',
506
- responseMatches: [],
507
- responseRedactions: [],
508
- method: 'GET'
509
- }, hostPort))).toThrow('Invalid URL');
510
- });
511
- it('should throw on invalid params', () => {
512
- expect(() => {
513
- (0, utils_2.assertValidateProviderParams)('http', { a: 'b', body: 2 });
514
- }).toThrow(/^Params validation failed/);
515
- });
516
- it('should throw on invalid secret params', () => {
517
- expect(() => {
518
- createRequest({
519
- cookieStr: undefined,
520
- authorisationHeader: undefined,
521
- headers: undefined
522
- }, {
523
- url: 'abc',
524
- responseMatches: [],
525
- responseRedactions: [],
526
- method: 'GET'
527
- }, utils_2.logger);
528
- }).toThrow('auth parameters are not set');
529
- });
530
- it('should return empty redactions', () => {
531
- const res = `HTTP/1.1 200 OK\r
532
- Content-Length: 0\r
533
- Connection: close\r
534
- Content-Type: text/html; charset=utf-8\r
535
- \r
536
- `;
537
- const redactions = (getResponseRedactions) ?
538
- getResponseRedactions({
539
- response: (0, tls_1.strToUint8Array)(res),
540
- params: {
541
- url: 'abc',
542
- responseMatches: [],
543
- responseRedactions: [],
544
- method: 'GET'
545
- },
546
- logger: utils_2.logger,
547
- ctx
548
- })
549
- : undefined;
550
- expect(redactions).toHaveLength(0);
551
- });
552
- it('should throw on empty body', () => {
553
- const res = `HTTP/1.1 200 OK\r
554
- Content-Length: 0\r
555
- Connection: close\r
556
- Content-Type: text/html; charset=utf-8\r
557
- \r
558
- `;
559
- expect(() => {
560
- if (getResponseRedactions) {
561
- getResponseRedactions({
562
- response: (0, tls_1.strToUint8Array)(res),
563
- params: {
564
- url: 'abc',
565
- responseMatches: [],
566
- responseRedactions: [{
567
- regex: 'abc'
568
- }],
569
- method: 'GET'
570
- },
571
- logger: utils_2.logger,
572
- ctx,
573
- });
574
- }
575
- }).toThrow('Failed to find response body');
576
- });
577
- it('should throw on bad xpath', () => {
578
- const res = `HTTP/1.1 200 OK\r
579
- Content-Length: 1\r
580
- Connection: close\r
581
- Content-Type: text/html; charset=utf-8\r
582
- \r
583
- 1`;
584
- expect(() => {
585
- if (getResponseRedactions) {
586
- getResponseRedactions({
587
- response: (0, tls_1.strToUint8Array)(res),
588
- params: {
589
- url: 'abc',
590
- responseMatches: [],
591
- responseRedactions: [{
592
- xPath: 'abc'
593
- }],
594
- method: 'GET'
595
- },
596
- logger: utils_2.logger,
597
- ctx
598
- });
599
- }
600
- }).toThrow('Failed to find XPath: \"abc\"');
601
- });
602
- it('should throw on bad jsonPath', () => {
603
- const res = `HTTP/1.1 200 OK\r
604
- Content-Length: 1\r
605
- Connection: close\r
606
- Content-Type: text/html; charset=utf-8\r
607
- \r
608
- 1`;
609
- expect(() => {
610
- if (getResponseRedactions) {
611
- getResponseRedactions({
612
- response: (0, tls_1.strToUint8Array)(res),
613
- params: {
614
- url: 'abc',
615
- responseMatches: [],
616
- responseRedactions: [{
617
- jsonPath: 'abc'
618
- }],
619
- method: 'GET'
620
- },
621
- logger: utils_2.logger,
622
- ctx,
623
- });
624
- }
625
- }).toThrow('jsonPath not found');
626
- });
627
- it('should throw on bad regex', () => {
628
- const res = `HTTP/1.1 200 OK\r
629
- Content-Length: 1\r
630
- Connection: close\r
631
- Content-Type: text/html; charset=utf-8\r
632
- \r
633
- 1`;
634
- expect(() => {
635
- if (getResponseRedactions) {
636
- getResponseRedactions({
637
- response: (0, tls_1.strToUint8Array)(res),
638
- params: {
639
- url: 'abc',
640
- responseMatches: [],
641
- responseRedactions: [{
642
- regex: 'abc'
643
- }],
644
- method: 'GET'
645
- },
646
- logger: utils_2.logger,
647
- ctx,
648
- });
649
- }
650
- }).toThrow('regexp abc does not match found element \'MQ==\'');
651
- });
652
- it('should throw on bad method', async () => {
653
- await expect(async () => {
654
- await assertValidProviderReceipt({
655
- receipt: transcript,
656
- params: {
657
- url: 'abc',
658
- responseMatches: [],
659
- responseRedactions: [],
660
- method: 'POST'
661
- },
662
- logger: utils_2.logger,
663
- ctx
664
- });
665
- }).rejects.toThrow('Invalid method: get');
666
- });
667
- it('should throw on bad protocol', async () => {
668
- await expect(async () => {
669
- await assertValidProviderReceipt({
670
- receipt: transcript,
671
- params: {
672
- url: 'http://xargs.com',
673
- responseMatches: [],
674
- responseRedactions: [],
675
- method: 'GET'
676
- },
677
- logger: utils_2.logger,
678
- ctx,
679
- });
680
- }).rejects.toThrow('Expected protocol: https, found: http:');
681
- });
682
- it('should throw on duplicate groups', async () => {
683
- await expect(async () => {
684
- await assertValidProviderReceipt({
685
- receipt: transcript,
686
- params: {
687
- url: 'https://xargs.{{abc}}',
688
- responseMatches: [{
689
- type: 'regex',
690
- value: '(?<abc>.)'
691
- }],
692
- responseRedactions: [],
693
- method: 'GET',
694
- paramValues: {
695
- 'abc': 'org'
696
- }
697
- },
698
- logger: utils_2.logger,
699
- ctx
700
- });
701
- }).rejects.toThrow('Duplicate parameter abc');
702
- });
703
- it('should throw on bad path', async () => {
704
- await expect(async () => {
705
- await assertValidProviderReceipt({
706
- receipt: transcript,
707
- params: {
708
- url: 'https://xargs.com/abc',
709
- responseMatches: [],
710
- responseRedactions: [],
711
- method: 'GET'
712
- },
713
- logger: utils_2.logger,
714
- ctx
715
- });
716
- }).rejects.toThrow('Expected path: /abc, found: /');
717
- });
718
- it('should throw on bad host', async () => {
719
- await expect(async () => {
720
- await assertValidProviderReceipt({
721
- receipt: transcript,
722
- params: {
723
- url: 'https://abc.com/',
724
- responseMatches: [],
725
- responseRedactions: [],
726
- method: 'GET'
727
- },
728
- logger: utils_2.logger,
729
- ctx,
730
- });
731
- }).rejects.toThrow('Expected host: abc.com, found: xargs.org');
732
- });
733
- it('should throw on bad OK string', async () => {
734
- const temp = cloneObject(transcript);
735
- // changes the status ("OK") text to something else
736
- // it'll be in the first server response packet
737
- const firstServerMsg = temp.find((x, index) => x.sender === 'server' && index !== 0);
738
- firstServerMsg.message[0] = 32;
739
- await expect(async () => {
740
- await assertValidProviderReceipt({
741
- receipt: temp,
742
- params: {
743
- url: 'https://xargs.org/',
744
- responseMatches: [],
745
- responseRedactions: [],
746
- method: 'GET'
747
- },
748
- logger: utils_2.logger,
749
- ctx,
750
- });
751
- }).rejects.toThrow('Response did not start with \"HTTP/1.1 2XX\"');
752
- });
753
- it('should throw on bad close header', async () => {
754
- const temp = cloneObject(transcript);
755
- const clientMsgWithClose = temp.find((x) => {
756
- if (x.sender !== 'client') {
757
- return false;
758
- }
759
- return (0, utils_2.uint8ArrayToStr)(x.message)
760
- .includes('Connection: close');
761
- });
762
- clientMsgWithClose.message[68] = 102;
763
- await expect(async () => {
764
- await assertValidProviderReceipt({
765
- receipt: temp,
766
- params: {
767
- url: 'https://xargs.org/',
768
- responseMatches: [],
769
- responseRedactions: [],
770
- method: 'GET'
771
- },
772
- logger: utils_2.logger,
773
- ctx
774
- });
775
- }).rejects.toThrow('Connection header must be \"close\"');
776
- });
777
- it('should throw on bad body', async () => {
778
- await expect(async () => {
779
- await assertValidProviderReceipt({
780
- receipt: transcript,
781
- params: {
782
- url: 'https://xargs.org/',
783
- responseMatches: [],
784
- responseRedactions: [],
785
- method: 'GET',
786
- body: 'abc'
787
- },
788
- logger: utils_2.logger,
789
- ctx
790
- });
791
- }).rejects.toThrow('request body mismatch');
792
- });
793
- it('should throw on bad regex match', async () => {
794
- await expect(async () => {
795
- await assertValidProviderReceipt({
796
- receipt: transcript,
797
- params: {
798
- url: 'https://xargs.org/',
799
- responseMatches: [{
800
- type: 'regex',
801
- value: 'abc'
802
- }],
803
- responseRedactions: [],
804
- method: 'GET',
805
- },
806
- logger: utils_2.logger,
807
- ctx
808
- });
809
- }).rejects.toThrow('Invalid receipt. Regex \"abc\" didn\'t match');
810
- });
811
- it('should throw on bad contains match', async () => {
812
- await expect(async () => {
813
- await assertValidProviderReceipt({
814
- receipt: transcript,
815
- params: {
816
- url: 'https://xargs.org/',
817
- responseMatches: [{
818
- type: 'contains',
819
- value: 'abc'
820
- }],
821
- responseRedactions: [],
822
- method: 'GET',
823
- },
824
- logger: utils_2.logger,
825
- ctx,
826
- });
827
- }).rejects.toThrow('Invalid receipt. Response does not contain \"abc\"');
828
- });
829
- it('should get geo', () => {
830
- const geo = (0, utils_2.getProviderValue)({
831
- geoLocation: '{{geo}}',
832
- paramValues: {
833
- 'geo': 'US'
834
- }
835
- }, geoLocation);
836
- expect(geo).toEqual('US');
837
- });
838
- it('should throw on bad geo param', () => {
839
- expect(() => {
840
- // @ts-ignore
841
- geoLocation({
842
- geoLocation: '{{geo}}',
843
- paramValues: {
844
- 'geo1': 'US'
845
- }
846
- });
847
- }).toThrow('parameter "geo" value not found in templateParams');
848
- });
849
- it('should return empty geo', () => {
850
- expect(// @ts-ignore
851
- geoLocation({
852
- geoLocation: '',
853
- })).toEqual(undefined);
854
- });
855
- it('should throw on bad param in url', () => {
856
- expect(() => {
857
- // @ts-ignore
858
- return hostPort({
859
- url: 'https://xargs.{{param1}}'
860
- });
861
- })
862
- .toThrow('parameter "param1" value not found in templateParams');
863
- });
864
- it('should throw on bad url', () => {
865
- expect(() => {
866
- // @ts-ignore
867
- hostPort({
868
- url: 'file:///C:/path'
869
- });
870
- })
871
- .toThrow('url is incorrect');
872
- });
873
- it('should throw on bad match type', async () => {
874
- await expect(async () => {
875
- const params = {
876
- url: 'https://xargs.org/',
877
- responseMatches: [{
878
- type: 'abc',
879
- value: 'abc'
880
- }],
881
- responseRedactions: [],
882
- method: 'GET',
883
- };
884
- await assertValidProviderReceipt({
885
- receipt: transcript,
886
- // @ts-ignore
887
- params,
888
- logger: utils_2.logger,
889
- ctx,
890
- });
891
- }).rejects.toThrow('Invalid response match type abc');
892
- });
893
- it('should throw on no non present params', async () => {
894
- await expect(async () => {
895
- await assertValidProviderReceipt({
896
- receipt: transcript,
897
- params: {
898
- url: 'https://xargs.{{org}}/',
899
- responseMatches: [{
900
- type: 'contains',
901
- value: 'abc'
902
- }],
903
- responseRedactions: [],
904
- method: 'GET',
905
- },
906
- logger: utils_2.logger,
907
- ctx
908
- });
909
- }).rejects.toThrow('Expected host: xargs.{{org}}, found: xargs.org');
910
- });
911
- it('should throw on non present secret params', () => {
912
- expect(() => {
913
- createRequest({
914
- cookieStr: 'abc',
915
- }, {
916
- url: 'https://xargs.{{com}}',
917
- responseMatches: [],
918
- responseRedactions: [],
919
- method: 'GET'
920
- }, utils_2.logger);
921
- }).toThrow('parameter\'s \"com\" value not found in paramValues and secret parameter\'s paramValues');
922
- });
923
- it('should replace params in body correctly', () => {
924
- const params = {
925
- url: 'https://example.{{param1}}/',
926
- method: 'GET',
927
- body: 'hello {{h}} {{b}} {{h1h1h1h1h1h1h1}} {{h2}} {{a}} {{h1h1h1h1h1h1h1}} {{h}} {{a}} {{h2}} {{a}} {{b}} world',
928
- geoLocation: 'US',
929
- responseMatches: [{
930
- type: 'regex',
931
- value: '<title.*?(?<domain>{{param2}} Domain)<\\/title>',
932
- }],
933
- responseRedactions: [{
934
- xPath: './html/head/{{param3}}',
935
- }, {
936
- xPath: '/html/body/div/p[1]/text()'
937
- }],
938
- paramValues: {
939
- param1: 'com',
940
- param2: 'Example',
941
- param3: 'title',
942
- what: 'illustrative',
943
- a: '{{b}}',
944
- b: 'aaaaa'
945
- },
946
- headers: {
947
- 'user-agent': 'Mozilla/5.0',
948
- }
949
- };
950
- const secretParams = {
951
- cookieStr: '<cookie-str>',
952
- paramValues: {
953
- h: 'crazy',
954
- h1h1h1h1h1h1h1: 'crazy1',
955
- h2: 'crazy2',
956
- },
957
- authorisationHeader: 'abc'
958
- };
959
- const req = createRequest(secretParams, params, utils_2.logger);
960
- const reqText = (0, utils_2.uint8ArrayToStr)(req.data);
961
- expect(reqText).toContain('hello crazy aaaaa crazy1 crazy2 {{b}} crazy1 crazy {{b}} crazy2 {{b}} aaaaa world');
962
- expect(req.redactions.length).toEqual(7);
963
- expect(getRedaction(0)).toEqual('Cookie: <cookie-str>\r\nAuthorization: abc');
964
- expect(getRedaction(1)).toEqual('crazy');
965
- expect(getRedaction(2)).toEqual('crazy1');
966
- expect(getRedaction(3)).toEqual('crazy2');
967
- expect(getRedaction(4)).toEqual('crazy1');
968
- expect(getRedaction(5)).toEqual('crazy');
969
- expect(getRedaction(6)).toEqual('crazy2');
970
- function getRedaction(index) {
971
- return (0, utils_2.uint8ArrayToStr)(req.data.slice(req.redactions[index].fromIndex, req.redactions[index].toIndex));
972
- }
973
- });
974
- it('should replace params in body correctly case 2', () => {
975
- const params = {
976
- 'body': '{"includeGroups":{{REQ_DAT}},"includeLogins":{{REQ_SECRET}},"includeVerificationStatus":false}',
977
- 'geoLocation': '',
978
- 'method': 'POST',
979
- 'paramValues': {
980
- 'REQ_DAT': 'false',
981
- 'username': 'testyreclaim'
982
- },
983
- 'responseMatches': [
984
- {
985
- 'type': 'contains',
986
- 'value': '"userName":"{{username}}"'
987
- }
988
- ],
989
- 'responseRedactions': [
990
- {
991
- 'jsonPath': '$.userName',
992
- 'regex': '"userName":"(.*)"',
993
- 'xPath': ''
994
- }
995
- ],
996
- 'url': 'https://www.kaggle.com'
997
- };
998
- const secretParams = {
999
- 'paramValues': {
1000
- 'REQ_SECRET': 'false'
1001
- },
1002
- authorisationHeader: 'abc'
1003
- };
1004
- const req = createRequest(secretParams, params, utils_2.logger);
1005
- const reqText = (0, utils_2.uint8ArrayToStr)(req.data);
1006
- expect(reqText).toContain('{\"includeGroups\":false,\"includeLogins\":false,\"includeVerificationStatus\":false}');
1007
- expect(req.redactions.length).toEqual(2);
1008
- expect(getRedaction(0)).toEqual('Authorization: abc');
1009
- expect(getRedaction(1)).toEqual('false');
1010
- function getRedaction(index) {
1011
- return (0, utils_2.uint8ArrayToStr)(req.data.slice(req.redactions[index].fromIndex, req.redactions[index].toIndex));
1012
- }
1013
- });
1014
- describe('OPRF', () => {
1015
- it('should handle OPRF replacements', async () => {
1016
- const params = {
1017
- url: 'https://example.com/',
1018
- method: 'GET',
1019
- responseMatches: [
1020
- {
1021
- type: 'regex',
1022
- value: '<title>(?<domain>.+)<\\/title>',
1023
- }
1024
- ],
1025
- responseRedactions: [
1026
- {
1027
- regex: '<title>(?<domain>.+)<\\/title>',
1028
- hash: 'oprf'
1029
- }
1030
- ],
1031
- };
1032
- const res = Buffer.from('SFRUUC8xLjEgMjAwIE9LDQpBY2NlcHQtUmFuZ2VzOiBieXRlcw0KQWdlOiAzNzIxNDcNCkNhY2hlLUNvbnRyb2w6IG1heC1hZ2U9NjA0ODAwDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOA0KRGF0ZTogVGh1LCAyMSBOb3YgMjAyNCAwNTozOTo0NiBHTVQNCkV0YWc6ICIzMTQ3NTI2OTQ3Ig0KRXhwaXJlczogVGh1LCAyOCBOb3YgMjAyNCAwNTozOTo0NiBHTVQNCkxhc3QtTW9kaWZpZWQ6IFRodSwgMTcgT2N0IDIwMTkgMDc6MTg6MjYgR01UDQpTZXJ2ZXI6IEVDQWNjIChsYWMvNTVCNSkNClZhcnk6IEFjY2VwdC1FbmNvZGluZw0KWC1DYWNoZTogSElUDQpDb250ZW50LUxlbmd0aDogMTI1Ng0KQ29ubmVjdGlvbjogY2xvc2UNCg0KPCFkb2N0eXBlIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDx0aXRsZT5FeGFtcGxlIERvbWFpbjwvdGl0bGU+CgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSIgLz4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICBib2R5IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgIk9wZW4gU2FucyIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgCiAgICB9CiAgICBkaXYgewogICAgICAgIHdpZHRoOiA2MDBweDsKICAgICAgICBtYXJnaW46IDVlbSBhdXRvOwogICAgICAgIHBhZGRpbmc6IDJlbTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRmZGZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNWVtOwogICAgICAgIGJveC1zaGFkb3c6IDJweCAzcHggN3B4IDJweCByZ2JhKDAsMCwwLDAuMDIpOwogICAgfQogICAgYTpsaW5rLCBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiAjMzg0ODhmOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIH0KICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3MDBweCkgewogICAgICAgIGRpdiB7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICB9CiAgICB9CiAgICA8L3N0eWxlPiAgICAKPC9oZWFkPgoKPGJvZHk+CjxkaXY+CiAgICA8aDE+RXhhbXBsZSBEb21haW48L2gxPgogICAgPHA+VGhpcyBkb21haW4gaXMgZm9yIHVzZSBpbiBpbGx1c3RyYXRpdmUgZXhhbXBsZXMgaW4gZG9jdW1lbnRzLiBZb3UgbWF5IHVzZSB0aGlzCiAgICBkb21haW4gaW4gbGl0ZXJhdHVyZSB3aXRob3V0IHByaW9yIGNvb3JkaW5hdGlvbiBvciBhc2tpbmcgZm9yIHBlcm1pc3Npb24uPC9wPgogICAgPHA+PGEgaHJlZj0iaHR0cHM6Ly93d3cuaWFuYS5vcmcvZG9tYWlucy9leGFtcGxlIj5Nb3JlIGluZm9ybWF0aW9uLi4uPC9hPjwvcD4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=', 'base64');
1033
- const redactedStr = await getRedactedStr(res, params);
1034
- // the transcript contained "Example Domain" in the title
1035
- // which should be replaced with the hash
1036
- expect(redactedStr).toContain('<title>AAAAAAAAAAAAAA</title>');
1037
- });
1038
- it('should handle OPRF replacements in a chunked res', async () => {
1039
- const params = {
1040
- url: 'https://example.com/',
1041
- method: 'GET',
1042
- responseMatches: [
1043
- {
1044
- type: 'regex',
1045
- value: '\"name\":\"(?<name>.+?)\"',
1046
- }
1047
- ],
1048
- responseRedactions: [
1049
- {
1050
- regex: '\"name\":\"(?<name>.+?)\"',
1051
- hash: 'oprf'
1052
- }
1053
- ],
1054
- };
1055
- const arr = (0, tls_1.strToUint8Array)(test_http_parser_1.RES_CHUNKED_PARTIAL_BODY);
1056
- const redactedStr = await getRedactedStr(arr, params);
1057
- // "name":"John" should be replaced with the hash
1058
- expect(redactedStr).toContain('"name":"AAAA"');
1059
- });
1060
- it('should gracefully error when OPRF spans multiple chunks', () => {
1061
- const params = {
1062
- url: 'https://example.com/',
1063
- method: 'GET',
1064
- responseMatches: [
1065
- {
1066
- type: 'regex',
1067
- value: '\"house\":\"(?<house>.+?)\"',
1068
- }
1069
- ],
1070
- responseRedactions: [
1071
- {
1072
- regex: '\"house\":\"(?<house>.+?)\"',
1073
- hash: 'oprf'
1074
- }
1075
- ],
1076
- };
1077
- const response = (0, tls_1.strToUint8Array)(test_http_parser_1.RES_CHUNKED_PARTIAL_BODY);
1078
- expect(() => getResponseRedactions({
1079
- response, params, logger: utils_2.logger, ctx
1080
- })).toThrow(/cannot be performed/);
1081
- });
1082
- });
1083
- it('should replace secret params in URL correctly', () => {
1084
- const params = {
1085
- 'body': '',
1086
- 'geoLocation': '',
1087
- 'method': 'POST',
1088
- 'paramValues': {
1089
- 'username': 'testyreclaim'
1090
- },
1091
- 'responseMatches': [
1092
- {
1093
- 'type': 'contains',
1094
- 'value': '"userName":"{{username}}"'
1095
- }
1096
- ],
1097
- 'responseRedactions': [
1098
- {
1099
- 'jsonPath': '$.userName',
1100
- 'regex': '"userName":"(.*)"',
1101
- 'xPath': ''
1102
- }
1103
- ],
1104
- 'url': 'https://www.kaggle.com/{{auth_token}}?request={{param_request}}'
1105
- };
1106
- const secretParams = {
1107
- 'paramValues': {
1108
- 'auth_token': '1234567890',
1109
- 'param_request': 'select * from users'
1110
- },
1111
- authorisationHeader: 'abc'
1112
- };
1113
- const req = createRequest(secretParams, params, utils_2.logger);
1114
- const reqText = (0, utils_2.uint8ArrayToStr)(req.data);
1115
- expect(reqText).toContain('POST /1234567890?request=select * from users HTTP/1.1');
1116
- expect(req.redactions.length).toEqual(3);
1117
- expect(getRedaction(2)).toEqual('Authorization: abc');
1118
- expect(getRedaction(0)).toEqual('1234567890');
1119
- expect(getRedaction(1)).toEqual('select * from users');
1120
- function getRedaction(index) {
1121
- return (0, utils_2.uint8ArrayToStr)(req.data.slice(req.redactions[index].fromIndex, req.redactions[index].toIndex));
1122
- }
1123
- });
1124
- async function getRedactedStr(plaintext, params) {
1125
- const hash = new Uint8Array(32);
1126
- const trans = await (0, utils_2.getBlocksToReveal)([{ plaintext }], response => getResponseRedactions({
1127
- response, params, logger: utils_2.logger, ctx
1128
- }), async (txt) => ({
1129
- nullifier: hash,
1130
- dataLocation: { fromIndex: 0, length: txt.length },
1131
- responses: [],
1132
- mask: new Uint8Array(0),
1133
- plaintext: plaintext
1134
- }));
1135
- (0, assert_1.default)(trans !== 'all', 'Expected not all blocks to be revealed');
1136
- const redactedStr = (0, utils_2.uint8ArrayToStr)(trans[0].redactedPlaintext);
1137
- // the transcript contained "Example Domain" in the title
1138
- // which should be replaced with the hash
1139
- return redactedStr;
1140
- }
1141
- });
1142
- function cloneObject(obj) {
1143
- // use node serialization to clone object
1144
- // to allow binary data to be cloned
1145
- return (0, v8_1.deserialize)((0, v8_1.serialize)(obj));
1146
- }
1147
- const html = `
1148
- <!DOCTYPE html><html class="home index"><head><title>Home | Bookface</title><script>window.RAILS_ENV = 'production';</script><script>var _rollbarConfig = {
1149
- accessToken: "1aa22a01bffe4c07b70adcedb63ed76d",
1150
- captureUncaught: true,
1151
- captureUnhandledRejections: true,
1152
- payload: {
1153
- client: {
1154
- javascript: {
1155
- source_map_enabled: true,
1156
- code_version: "9af724bccab729487057681b5e91f7a7c45cabf4",
1157
- guess_uncaught_frames: true
1158
- }
1159
- },
1160
- environment: 'browser-production',
1161
- person: {
1162
- id: "123",
1163
- username: "qweqwe"
1164
- }
1165
- },
1166
- transform: function(payload) {
1167
- var trace = payload.body.trace;
1168
- var locRegex = /^(https?):\/\/[^\/]+\/(.*)/
1169
- if (trace && trace.frames) {
1170
- for (var i = 0; i < trace.frames.length; i++) {
1171
- var filename = trace.frames[i].filename;
1172
- if (filename) {
1173
- var m = filename.match(locRegex);
1174
- if (m) {
1175
- trace.frames[i].filename = m[1] + '://dynamichost/' + m[2];
1176
- }
1177
- }
1178
- }
1179
- }
1180
- }
1181
- };
1182
-
1183
- // Rollbar Snippet
1184
- !function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.19.0/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||"object"==typeof a&&a.network)&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting promise from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting reason from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);
1185
- // End Rollbar Snippet</script><script>window.AlgoliaOpts = {"key":"OWE1NzQ0MzgzYjY0NGI0OGEyMzljZDZlY2VjODUzZDcwOWZjNzljYTUxY2JiMzVjNjFlZGYxYzIxZWY0NDc1ZHRhZ0ZpbHRlcnM9JTVCJTVCJTIycHVibGljJTIyJTJDJTIyYmF0Y2hfdzIwMjElMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX2NsYXNzaWZpZWRzJTIyJTJDJTIyYm9va2ZhY2VfY2hhbm5lbF9sYXVuY2hfYm9va2ZhY2UlMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX3JlY3J1aXRpbmclMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX2dlbmVyYWwlMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX3cyMDIxXzMlMjIlMkMlMjJib29rZmFjZV9jaGFubmVsX3cyMDIxJTIyJTJDJTIyYm9va2ZhY2VfY2hhbm5lbF9hbm5vdW5jZW1lbnRzJTIyJTJDJTIyYm9va2ZhY2VfY2hhbm5lbF9mZWF0dXJlZCUyMiUyQyUyMmJvb2tmYWNlX2NoYW5uZWxfYWxsJTIyJTJDJTIyYWN0aXZlX2ZvdW5kZXJzJTIyJTJDJTIyZGRheV9iYXRjaF93MjAyMyUyMiUyQyUyMmFsbF9mb3VuZGVycyUyMiUyQyUyMndhYXNfYWNjZXNzJTIyJTJDJTIyZnVuZHJhaXNpbmclMjIlMkMlMjJkZWFscyUzQWF1ZGllbmNlJTNBYWxsX2ZvdW5kZXJzJTIyJTJDJTIyZGVhbHMlM0FhdWRpZW5jZSUzQWFjdGl2ZV9mb3VuZGVycyUyMiUyQyUyMmRlYWxzJTNBb3duZWRfYnlfdXNlciUzQTE4Mjg1MyUyMiUyQyUyMmRlYWxzJTNBb3duZWRfYnlfY29tcGFueSUzQTIzMTA1JTIyJTVEJTVEJnVzZXJUb2tlbj0xSjBVbnA3cWZuZWN5NVR6Y2w1YVpycXB4VDljVUZxM2JiVU0yeUlDJTJCTjAlM0QmYW5hbHl0aWNzVGFncz0lNUIlNUIlMjJib29rZmFjZSUyMiUyQyUyMmFsdW1uaSUyMiUyQyUyMmFjdGl2ZSUyMiU1RCU1RA==","app":"45BWZJ1SGC","tag_filters":"(public,batch_w2021,bookface_channel_classifieds,bookface_channel_launch_bookface,bookface_channel_recruiting,bookface_channel_general,bookface_channel_w2021_3,bookface_channel_w2021,bookface_channel_announcements,bookface_channel_featured,bookface_channel_all,active_founders,dday_batch_w2023,all_founders,waas_access,fundraising,deals:audience:all_founders,deals:audience:active_founders,deals:owned_by_user:182853,deals:owned_by_company:23105)"};</script><meta name="csrf-param" content="authenticity_token" />
1186
- <meta name="csrf-token" content="V4opQ8owGbameRXSOV-tI7DNGnvOjer5dD4dMPzKJXyNHX2QiZyt9C7pmHCk2RQVi_lF8t8oTyOuxOVSwXV5Iw" /><link href="/assets/favicon-402519a37fed7880aea64ce37c210cd32c33be9b468fb2668ffcd6faec51260d.ico" rel="icon" type="image/x-icon" /><link href="/assets/favicon-402519a37fed7880aea64ce37c210cd32c33be9b468fb2668ffcd6faec51260d.ico" rel="shortcut icon" type="image/x-icon" /><link href="/manifest.json" rel="manifest" /><link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" /><link href="//cdnjs.cloudflare.com/ajax/libs/ionicons/3.0.0/css/ionicons.min.css" rel="stylesheet" /><link href="https://bookface.ycombinator.com/search/opensearch?token=ea742fc7-3bc3-4c59-8e71-80983227a57f" rel="search" title="Bookface" type="application/opensearchdescription+xml" /><meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport" /><meta charset="utf-8" />
1187
- <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"f604a527b0","applicationID":"97963418","transactionName":"cg0NQhFeVVgAExdeV1wHTF8NVVxM","queueTime":0,"applicationTime":262,"agent":""}</script>
1188
- <script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"f604a527b0",applicationID:"97963418"};;(()=>{var e,t,r={8768:(e,t,r)=>{"use strict";r.d(t,{T:()=>n,p:()=>i});const n=/(iPad|iPhone|iPod)/g.test(navigator.userAgent),i=n&&Boolean("undefined"==typeof SharedWorker)},27:(e,t,r)=>{"use strict";r.d(t,{P_:()=>h,Mt:()=>v,C5:()=>d,DL:()=>y,OP:()=>O,lF:()=>R,Yu:()=>A,Dg:()=>p,CX:()=>f,GE:()=>w,sU:()=>C});var n={};r.r(n),r.d(n,{agent:()=>x,match:()=>k,version:()=>j});var i=r(6797),o=r(909),a=r(8610);class s{constructor(e,t){try{if(!e||"object"!=typeof e)return(0,a.Z)("New setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,a.Z)("Setting a Configurable requires a model to set its initial properties");Object.assign(this,t),Object.entries(e).forEach((e=>{let[t,r]=e;const n=(0,o.q)(t);n.length&&r&&"object"==typeof r&&n.forEach((e=>{e in r&&((0,a.Z)('"'.concat(e,'" is a protected attribute and can not be changed in feature ').concat(t,". It will have no effect.")),delete r[e])})),this[t]=r}))}catch(e){(0,a.Z)("An error occured while setting a Configurable",e)}}}const c={beacon:i.ce.beacon,errorBeacon:i.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},u={};function d(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!u[e])throw new Error("Info for ".concat(e," was never set"));return u[e]}function f(e,t){if(!e)throw new Error("All info objects require an agent identifier!");u[e]=new s(t,c),(0,i.Qy)(e,u[e],"info")}const l={allow_bfcache:!0,privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0,harvestTimeSeconds:10},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10},metrics:{enabled:!0},page_action:{enabled:!0,harvestTimeSeconds:30},page_view_event:{enabled:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1},session_trace:{enabled:!0,harvestTimeSeconds:10},spa:{enabled:!0,harvestTimeSeconds:10}},g={};function h(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!g[e])throw new Error("Configuration for ".concat(e," was never set"));return g[e]}function p(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");g[e]=new s(t,l),(0,i.Qy)(e,g[e],"config")}function v(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var r=h(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}const m={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},b={};function y(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!b[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return b[e]}function w(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");b[e]=new s(t,m),(0,i.Qy)(e,b[e],"loader_config")}const A=(0,i.mF)().o;var x=null,j=null;const _=/Version\/(\S+)\s+Safari/;if(navigator.userAgent){var D=navigator.userAgent,E=D.match(_);E&&-1===D.indexOf("Chrome")&&-1===D.indexOf("Chromium")&&(x="Safari",j=E[1])}function k(e,t){if(!x)return!1;if(e!==x)return!1;if(!t)return!0;if(!j)return!1;for(var r=j.split("."),n=t.split("."),i=0;i<n.length;i++)if(n[i]!==r[i])return!1;return!0}var S=r(2400),P=r(2374),I=r(8226);const T=e=>({buildEnv:I.Re,bytesSent:{},customTransaction:void 0,disabled:!1,distMethod:I.gF,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,offset:Math.floor(P._A?.performance?.timeOrigin||P._A?.performance?.timing?.navigationStart||Date.now()),onerror:void 0,origin:""+P._A.location,ptid:void 0,releaseIds:{},sessionId:1==v(e,"privacy.cookies_enabled")?(0,S.Bj)():null,xhrWrappable:"function"==typeof P._A.XMLHttpRequest?.prototype?.addEventListener,userAgent:n,version:I.q4}),N={};function O(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!N[e])throw new Error("Runtime for ".concat(e," was never set"));return N[e]}function C(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");N[e]=new s(t,T(e)),(0,i.Qy)(e,N[e],"runtime")}function R(e){return function(e){try{const t=d(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}(e)}},8226:(e,t,r)=>{"use strict";r.d(t,{Re:()=>i,gF:()=>o,q4:()=>n});const n="1.230.0",i="PROD",o="CDN"},9557:(e,t,r)=>{"use strict";r.d(t,{w:()=>o});var n=r(8610);const i={agentIdentifier:""};class o{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,i),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(i).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},4329:(e,t,r)=>{"use strict";r.d(t,{L:()=>d,R:()=>c});var n=r(3752),i=r(7022),o=r(4045),a=r(2325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function u(e){e&&(s[e]||(s[e]=new Map))}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature";if(u(e),!e||!s[e].get(t))return a(t);s[e].get(t).staged=!0;const r=Array.from(s[e]);function a(t){const r=e?n.ee.get(e):n.ee,a=o.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var u=0;s&&u<s.length;++u)f(s[u],c);(0,i.D)(c,(function(e,t){(0,i.D)(t,(function(t,r){r[0].on(e,r[1])}))}))}delete a[t],r.backlog[t]=null,r.emit("drain-"+t,[])}}r.every((e=>{let[t,r]=e;return r.staged}))&&(r.sort(((e,t)=>e[1].priority-t[1].priority)),r.forEach((e=>{let[t]=e;a(t)})))}function f(e,t){var r=e[1];(0,i.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var i=r[1],o=e[3],a=e[2];i.apply(o,a)}}))}},3752:(e,t,r)=>{"use strict";r.d(t,{ee:()=>u});var n=r(6797),i=r(3916),o=r(7022),a=r(27),s="nr@context";let c=(0,n.fP)();var u;function d(){}function f(){return new d}function l(){u.aborted=!0,u.backlog={}}c.ee?u=c.ee:(u=function e(t,r){var n={},c={},g={},h=!1;try{h=16===r.length&&(0,a.OP)(r).isolatedBacklog}catch(e){}var p={on:b,addEventListener:b,removeEventListener:y,emit:m,get:A,listeners:w,context:v,buffer:x,abort:l,aborted:!1,isBuffering:j,debugId:r,backlog:h?{}:t&&"object"==typeof t.backlog?t.backlog:{}};return p;function v(e){return e&&e instanceof d?e:e?(0,i.X)(e,s,f):f()}function m(e,r,n,i,o){if(!1!==o&&(o=!0),!u.aborted||i){t&&o&&t.emit(e,r,n);for(var a=v(n),s=w(e),d=s.length,f=0;f<d;f++)s[f].apply(a,r);var l=_()[c[e]];return l&&l.push([p,e,r,a]),a}}function b(e,t){n[e]=w(e).concat(t)}function y(e,t){var r=n[e];if(r)for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)}function w(e){return n[e]||[]}function A(t){return g[t]=g[t]||e(p,t)}function x(e,t){var r=_();p.aborted||(0,o.D)(e,(function(e,n){t=t||"feature",c[n]=t,t in r||(r[t]=[])}))}function j(e){return!!_()[c[e]]}function _(){return p.backlog}}(void 0,"globalEE"),c.ee=u)},9252:(e,t,r)=>{"use strict";r.d(t,{E:()=>n,p:()=>i});var n=r(3752).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},4045:(e,t,r)=>{"use strict";r.d(t,{X:()=>o});var n=r(9252);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.E,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.E);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},8544:(e,t,r)=>{"use strict";r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(2374);let i=!1,o=!1;try{const e={get passive(){return i=!0,!1},get signal(){return o=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return i||o?{capture:!!e,passive:i,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];window.addEventListener(e,t,a(r))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];document.addEventListener(e,t,a(r))}},5526:(e,t,r)=>{"use strict";r.d(t,{Rl:()=>i,ky:()=>o});var n=r(2374);function i(){var e=null,t=0,r=n._A?.crypto||n._A?.msCrypto;function i(){return e?15&e[t++]:16*Math.random()|0}r&&r.getRandomValues&&(e=r.getRandomValues(new Uint8Array(31)));for(var o,a="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",s="",c=0;c<a.length;c++)s+="x"===(o=a[c])?i().toString(16):"y"===o?(o=3&i()|8).toString(16):o;return s}function o(e){var t=null,r=0,n=self.crypto||self.msCrypto;n&&n.getRandomValues&&Uint8Array&&(t=n.getRandomValues(new Uint8Array(31)));for(var i=[],o=0;o<e;o++)i.push(a().toString(16));return i.join("");function a(){return t?15&t[r++]:16*Math.random()|0}}},2053:(e,t,r)=>{"use strict";function n(){return Math.round(performance.now())}r.d(t,{z:()=>n})},8610:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},3916:(e,t,r)=>{"use strict";r.d(t,{X:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},2374:(e,t,r)=>{"use strict";r.d(t,{_A:()=>o,il:()=>n,lW:()=>a,v6:()=>i});const n=Boolean("undefined"!=typeof window&&window.document),i=Boolean("undefined"!=typeof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator);let o=(()=>{if(n)return window;if(i){if("undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope)return globalThis;if(self instanceof WorkerGlobalScope)return self}throw new Error('New Relic browser agent shutting down due to error: Unable to locate global scope. This is possibly due to code redefining browser global variables like "self" and "window".')})();function a(){return o}},7022:(e,t,r)=>{"use strict";r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},2438:(e,t,r)=>{"use strict";r.d(t,{P:()=>o});var n=r(3752);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},2650:(e,t,r)=>{"use strict";r.d(t,{K:()=>a,b:()=>o});var n=r(8544);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.bP)("load",e,t)}function a(e){if(i())return e();(0,n.iz)("DOMContentLoaded",e)}},6797:(e,t,r)=>{"use strict";r.d(t,{EZ:()=>u,Qy:()=>c,ce:()=>o,fP:()=>a,gG:()=>d,mF:()=>s});var n=r(2053),i=r(2374);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return i._A.NREUM||(i._A.NREUM={}),void 0===i._A.newrelic&&(i._A.newrelic=i._A.NREUM),i._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:i._A.setTimeout,SI:i._A.setImmediate,CT:i._A.clearTimeout,XHR:i._A.XMLHttpRequest,REQ:i._A.Request,EV:i._A.Event,PR:i._A.Promise,MO:i._A.MutationObserver,FETCH:i._A.fetch}),e}function c(e,t,r){let i=a();const o=i.initializedAgents||{},s=o[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,n.z)(),date:new Date}),i.initializedAgents={...o,[e]:{...s,[r]:t}},i}function u(e,t){a()[e]=t}function d(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},6998:(e,t,r)=>{"use strict";r.d(t,{N:()=>i});var n=r(8544);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return void(0,n.iz)("visibilitychange",(function(){if(t){if("hidden"!=document.visibilityState)return;e()}e(document.visibilityState)}))}},2400:(e,t,r)=>{"use strict";r.d(t,{Bj:()=>c,GD:()=>s,J8:()=>u,ju:()=>o});var n=r(5526);const i="NRBA/";function o(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{return window.sessionStorage.setItem(i+r+e,t),!0}catch(e){return!1}}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return window.sessionStorage.getItem(i+t+e)}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";try{window.sessionStorage.removeItem(i+t+e)}catch(e){}}function c(){try{let e;return null===(e=a("SESSION_ID"))&&(e=(0,n.ky)(16),o("SESSION_ID",e)),e}catch(e){return null}}function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=i+e,r={};try{for(let n=0;n<window.sessionStorage.length;n++){let i=window.sessionStorage.key(n);i.startsWith(t)&&(i=i.slice(t.length),r[i]=a(i,e))}}catch(e){}return r}},6034:(e,t,r)=>{"use strict";r.d(t,{gF:()=>o,mY:()=>i,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(2325).D.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},2484:(e,t,r)=>{"use strict";r.d(t,{Dz:()=>i,OJ:()=>a,qw:()=>o,t9:()=>n});const n=r(2325).D.pageViewEvent,i="firstbyte",o="domcontent",a="windowload"},6382:(e,t,r)=>{"use strict";r.d(t,{t:()=>n});const n=r(2325).D.pageViewTiming},1509:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(27),i=r(3752),o=r(2384),a=r(6797);class s{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=i.ee.get(e,(0,n.OP)(this.agentIdentifier).isolatedBacklog),this.featureName=r,this.blocked=!1,this.checkConfiguration()}checkConfiguration(){if(!(0,n.lF)(this.agentIdentifier)){let e={...(0,a.gG)().info?.jsAttributes};try{e={...e,...(0,n.C5)(this.agentIdentifier)?.jsAttributes}}catch(e){}(0,o.j)(this.agentIdentifier,{...(0,a.gG)(),info:{...(0,a.gG)().info,jsAttributes:e}})}}}},2384:(e,t,r)=>{"use strict";r.d(t,{j:()=>w});var n=r(2325),i=r(27),o=r(9252),a=r(3752),s=r(2053),c=r(4329),u=r(2650),d=r(2374),f=r(8610),l=r(6034),g=r(6797),h=r(2400);const p="CUSTOM/";function v(){const e=(0,g.gG)();["setErrorHandler","finished","addToTrace","inlineHit","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId"].forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];let o=[];return Object.values(e.initializedAgents).forEach((e=>{e.exposed&&e.api[t]&&o.push(e.api[t](...n))})),o.length>1?returnsVals:o[0]}(t,...n)}}))}var m=r(7022);const b={stn:[n.D.sessionTrace],err:[n.D.jserrors,n.D.metrics],ins:[n.D.pageAction],spa:[n.D.spa]};const y={};function w(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},w=arguments.length>2?arguments[2]:void 0,A=arguments.length>3?arguments[3]:void 0,{init:x,info:j,loader_config:_,runtime:D={loaderType:w},exposed:E=!0}=t;const k=(0,g.gG)();if(j||(x=k.init,j=k.info,_=k.loader_config),j.jsAttributes??={},d.v6&&(j.jsAttributes.isWorker=!0),d.il){let e=(0,h.J8)(p);Object.assign(j.jsAttributes,e)}(0,i.CX)(e,j),(0,i.Dg)(e,x||{}),(0,i.GE)(e,_||{}),(0,i.sU)(e,D),v();const S=function(e,t){t||(0,c.R)(e,"api");const g={};var v=a.ee.get(e),m=v.get("tracer"),b="api-",y=b+"ixn-";function w(t,r,n,o){const a=(0,i.C5)(e);return null===r?(delete a.jsAttributes[t],d.il&&(0,h.GD)(t,p)):((0,i.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),d.il&&o&&(0,h.ju)(t,r,p)),j(b,n,!0)()}function A(){}["setErrorHandler","finished","addToTrace","inlineHit","addRelease"].forEach((e=>g[e]=j(b,e,!0,"api"))),g.addPageAction=j(b,"addPageAction",!0,n.D.pageAction),g.setCurrentRouteName=j(b,"routeName",!0,n.D.spa),g.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,i.OP)(e).customTransaction=(r||"http://custom.transaction")+t,j(b,"setPageViewName",!0)()},g.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number"].includes(typeof t)||null===t)return w(e,t,"setCustomAttribute",r);(0,f.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of <".concat(typeof t,"> was provided."))}else(0,f.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of <".concat(typeof e,"> was provided."))},g.setUserId=function(e){if("string"==typeof e||null===e)return w("enduser.id",e,"setUserId",!0);(0,f.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of <".concat(typeof e,"> was provided."))},g.interaction=function(){return(new A).get()};var x=A.prototype={createTracer:function(e,t){var r={},i=this,a="function"==typeof t;return(0,o.p)(y+"tracer",[(0,s.z)(),e,r],i,n.D.spa,v),function(){if(m.emit((a?"":"no-")+"fn-start",[(0,s.z)(),i,a],r),a)try{return t.apply(this,arguments)}catch(e){throw m.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],r),e}finally{m.emit("fn-end",[(0,s.z)()],r)}}}};function j(e,t,r,i){return function(){return(0,o.p)(l.xS,["API/"+t+"/called"],void 0,n.D.metrics,v),i&&(0,o.p)(e+t,[(0,s.z)(),...arguments],r?null:this,i,v),r?void 0:this}}function _(){r.e(439).then(r.bind(r,5692)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>(0,f.Z)("Downloading runtime APIs failed...")))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{x[e]=j(y,e,void 0,n.D.spa)})),g.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,o.p)(l.xS,["API/noticeError/called"],void 0,n.D.metrics,v),(0,o.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,v)},d.v6?_():(0,u.b)((()=>_()),!0),g}(e,A);return(0,g.Qy)(e,S,"api"),(0,g.Qy)(e,E,"exposed"),(0,g.EZ)("activatedFeatures",y),(0,g.EZ)("setToken",(t=>function(e,t){var r=a.ee.get(t);e&&"object"==typeof e&&((0,m.D)(e,(function(e,t){if(!t)return(b[e]||[]).forEach((t=>{(0,o.p)("block-"+e,[],void 0,t,r)}));y[e]||((0,o.p)("feat-"+e,[],void 0,b[e],r),y[e]=!0)})),(0,c.L)(t,n.D.pageViewEvent))}(t,e))),S}},909:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i,q:()=>o});var n=r(2325);function i(e){switch(e){case n.D.ajax:return[n.D.jserrors];case n.D.sessionTrace:return[n.D.ajax,n.D.pageViewEvent];case n.D.pageViewTiming:return[n.D.pageViewEvent];default:return[]}}function o(e){return e===n.D.jserrors?[]:["auto"]}},2325:(e,t,r)=>{"use strict";r.d(t,{D:()=>n,p:()=>i});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionTrace:"session_trace",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8}},8683:e=>{e.exports=function(e,t,r){t||(t=0),void 0===r&&(r=e?e.length:0);for(var n=-1,i=r-t||0,o=Array(i<0?0:i);++n<i;)o[n]=e[t+n];return o}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(({78:"page_action-aggregate",147:"metrics-aggregate",193:"session_trace-aggregate",317:"jserrors-aggregate",348:"page_view_timing-aggregate",439:"async-api",729:"lazy-loader",786:"page_view_event-aggregate",873:"spa-aggregate",898:"ajax-aggregate"}[e]||e)+"."+{78:"4d79b951",147:"20a08804",193:"6e2218bf",317:"9136a849",348:"9590bdab",439:"6c072bf7",729:"ff971c03",786:"75812140",862:"9f44b58b",873:"6c038a0a",898:"bcd562bf"}[e]+"-1.230.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var f=u[d];if(f.getAttribute("src")==r||f.getAttribute("data-webpack")==t+o){s=f;break}}s||(c=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r),e[r]=[n];var l=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={30:0,768:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=window.webpackChunkNRBA=window.webpackChunkNRBA||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var o={};(()=>{"use strict";i.r(o);var e=i(2325),t=i(27);const r=Object.values(e.D);function n(e){const n={};return r.forEach((r=>{n[r]=function(e,r){return!1!==(0,t.Mt)(r,"".concat(e,".enabled"))}(r,e)})),n}var a=i(2384),s=i(909),c=i(9252),u=i(8768),d=i(4329),f=i(1509),l=i(2650),g=i(2374),h=i(8610);class p extends f.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.hasAggregator=!1,this.auto=n,this.abortHandler,n&&(0,d.R)(e,r)}importAggregator(){if(this.hasAggregator||!this.auto)return;this.hasAggregator=!0;const e=async()=>{try{const{lazyLoader:e}=await i.e(729).then(i.bind(i,8110)),{Aggregate:t}=await e(this.featureName,"aggregate");new t(this.agentIdentifier,this.aggregator)}catch(e){(0,h.Z)("Downloading ".concat(this.featureName," failed...")),this.abortHandler?.()}};g.v6?e():(0,l.b)((()=>e()),!0)}}var v=i(2484),m=i(2053);class b extends p{static featureName=v.t9;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(super(r,n,v.t9,i),("undefined"==typeof PerformanceNavigationTiming||u.T)&&"undefined"!=typeof PerformanceTiming){const n=(0,t.OP)(r);n[v.Dz]=Math.max(Date.now()-n.offset,0),(0,l.K)((()=>n[v.qw]=Math.max((0,m.z)()-n[v.Dz],0))),(0,l.b)((()=>{const t=(0,m.z)();n[v.OJ]=Math.max(t-n[v.Dz],0),(0,c.p)("timing",["load",t],void 0,e.D.pageViewTiming,this.ee)}))}this.importAggregator()}}var y=i(9557),w=i(7022);class A extends y.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,i){var o=this.getBucket(e,t,r,i);return o.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,w.D)(e,(function(e,r){t[e]=x(r,t[e])})),t}(n,o.metrics),o}merge(e,t,r,n,i){var o=this.getBucket(e,t,n,i);if(o.metrics){var a=o.metrics;a.count+=r.count,(0,w.D)(r,(function(e,t){if("count"!==e){var n=a[e],i=r[e];i&&!i.c?a[e]=x(i.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=j(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(i,a[e])}}))}else o.metrics=r}storeMetric(e,t,r,n){var i=this.getBucket(e,t,r);return i.stats=x(n,i.stats),i}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var i=this.aggregatedData[e][t];return i||(i=this.aggregatedData[e][t]={params:r||{}},n&&(i.custom=n)),i}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,i=0;i<e.length;i++)t[r=e[i]]=_(this.aggregatedData[r]),t[r].length&&(n=!0),delete this.aggregatedData[r];return n?t:null}}function x(e,t){return null==e?function(e){e?e.c++:e={c:1};return e}(t):t?(t.c||(t=j(t.t)),t.c+=1,t.t+=e,t.sos+=e*e,e>t.max&&(t.max=e),e<t.min&&(t.min=e),t):{t:e}}function j(e){return{t:e,min:e,max:e,sos:e*e,c:1}}function _(e){return"object"!=typeof e?[]:(0,w.D)(e,D)}function D(e,t){return t}var E=i(6797),k=i(5526),S=i(2438);var P=i(6998),I=i(8544),T=i(6382);class N extends p{static featureName=T.t;constructor(e,r){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,r,T.t,n),g.il&&((0,t.OP)(e).initHidden=Boolean("hidden"===document.visibilityState),(0,P.N)((()=>(0,c.p)("docHidden",[(0,m.z)()],void 0,T.t,this.ee)),!0),(0,I.bP)("pagehide",(()=>(0,c.p)("winPagehide",[(0,m.z)()],void 0,T.t,this.ee))),this.importAggregator())}}const O=Boolean(g._A?.Worker),C=Boolean(g._A?.SharedWorker),R=Boolean(g._A?.navigator?.serviceWorker);let M,B,W;var z=i(6034),q=i(3752),L=i(8683),V=i.n(L);const Z="nr@original";var U=Object.prototype.hasOwnProperty,F=!1;function G(e,t){return e||(e=q.ee),r.inPlace=function(e,t,n,i,o){n||(n="");var a,s,c,u="-"===n.charAt(0);for(c=0;c<t.length;c++)Q(a=e[s=t[c]])||(e[s]=r(a,u?s+n:n,i,s,o))},r.flag=Z,r;function r(t,r,i,o,a){return Q(t)?t:(r||(r=""),nrWrapper[Z]=t,X(t,nrWrapper,e),nrWrapper);function nrWrapper(){var s,c,u,d;try{c=this,s=V()(arguments),u="function"==typeof i?i(s,c):i||{}}catch(t){H([t,"",[s,c,o],u],e)}n(r+"start",[s,c,o],u,a);try{return d=t.apply(c,s)}catch(e){throw n(r+"err",[s,c,e],u,a),e}finally{n(r+"end",[s,c,d],u,a)}}}function n(r,n,i,o){if(!F||t){var a=F;F=!0;try{e.emit(r,n,i,t,o)}catch(t){H([t,r,n,i],e)}F=a}}}function H(e,t){t||(t=q.ee);try{t.emit("internal-error",e)}catch(e){}}function X(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){H([e],r)}for(var n in e)U.call(e,n)&&(t[n]=e[n]);return t}function Q(e){return!(e&&e instanceof Function&&e.apply&&!e[Z])}const K={},J=["debug","error","info","log","trace","warn"];function Y(e){const t=function(e){return(e||q.ee).get("console")}(e);return K[t.debugId]||(K[t.debugId]=!0,G(t).inPlace(g._A.console,J,"-console-")),t}i(3916);XMLHttpRequest;g._A.Request,g._A.Response;class $ extends p{static featureName=z.t9;constructor(t,r){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(t,r,z.t9,n),function(e){if(!M){if(O){M=Worker;try{g._A.Worker=r(M,"Dedicated")}catch(e){o(e,"Dedicated")}if(C){B=SharedWorker;try{g._A.SharedWorker=r(B,"Shared")}catch(e){o(e,"Shared")}}else n("Shared");if(R){W=navigator.serviceWorker.register;try{g._A.navigator.serviceWorker.register=(t=W,function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return i("Service",r[1]?.type),t.apply(navigator.serviceWorker,r)})}catch(e){o(e,"Service")}}else n("Service");var t;return}n("All")}function r(e,t){return"undefined"==typeof Proxy?e:new Proxy(e,{construct:(e,r)=>(i(t,r[1]?.type),new e(...r))})}function n(t){g.v6||e("Workers/".concat(t,"/Unavailable"))}function i(t,r){e("Workers/".concat(t,"module"===r?"/Module":"/Classic"))}function o(t,r){e("Workers/".concat(r,"/SM/Unsupported")),(0,h.Z)("NR Agent: Unable to capture ".concat(r," workers."),t)}}((t=>(0,c.p)(z.xS,[t],void 0,e.D.metrics,this.ee))),this.addConsoleSupportabilityMetrics(),this.importAggregator()}addConsoleSupportabilityMetrics(){const t=Y(this.ee);for(const r of["Debug","Error","Info","Log","Trace","Warn"])t.on("".concat(r.toLowerCase(),"-console-start"),(function(n,i){let o=[];for(const e of n)"function"==typeof e||e&&e.message&&e.stack?o.push(e.toString()):o.push(e);const a=(0,S.P)(o);(0,c.p)(z.xS,["Console/".concat(r,"/Seen"),a.length],void 0,e.D.metrics,t)}))}}new class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,k.ky)(16);this.agentIdentifier=t,this.sharedAggregator=new A({agentIdentifier:this.agentIdentifier}),this.features={},this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(b),Object.assign(this,(0,a.j)(this.agentIdentifier,e,e.loaderType||"agent")),this.start()}get config(){return{info:(0,t.C5)(this.agentIdentifier),init:(0,t.P_)(this.agentIdentifier),loader_config:(0,t.DL)(this.agentIdentifier),runtime:(0,t.OP)(this.agentIdentifier)}}start(){const t="features";try{const r=n(this.agentIdentifier),i=Array.from(this.desiredFeatures);i.sort(((t,r)=>e.p[t.featureName]-e.p[r.featureName])),i.forEach((t=>{if(r[t.featureName]||t.featureName===e.D.pageViewEvent){const e=(0,s.Z)(t.featureName);e.every((e=>r[e]))||(0,h.Z)("".concat(t.featureName," is enabled but one or more dependent features has been disabled (").concat((0,S.P)(e),"). This may cause unintended consequences or missing data...")),this.features[t.featureName]=new t(this.agentIdentifier,this.sharedAggregator)}})),(0,E.Qy)(this.agentIdentifier,this.features,t)}catch(e){(0,h.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",e);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,E.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.[t],delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[b,N,$],loaderType:"lite"})})(),window.NRBA=o})();</script><meta content="noindex" name="robots" /><script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC0BuJ43Ncbmuro17vVxWJWrOzzAPZ0rQE&amp;libraries=places&amp;language=en"></script><link rel="stylesheet" media="screen" href="/assets/application-1e5a6017c873d97c5d5844e64ff5031a5e6183d183ad0a004cf6a15a8ba137a7.css" /><link rel="stylesheet" media="screen" href="/packs/css/4081-1044bc7f.css" />
1189
- <link rel="stylesheet" media="screen" href="/packs/css/6188-50231742.css" />
1190
- <link rel="stylesheet" media="screen" href="/packs/css/7454-f0d96ad9.css" />
1191
- <link rel="stylesheet" media="screen" href="/packs/css/application-395dffc4.css" /><script src="/packs/js/runtime-854e05829e5ac6a73c42.js"></script>
1192
- <script src="/packs/js/1761-689a3b9fd1d7f61a6602.js"></script>
1193
- <script src="/packs/js/7297-9d4447e6ae6874a48ced.js"></script>
1194
- <script src="/packs/js/2482-3e6a3d56a99ec4cf96b5.js"></script>
1195
- <script src="/packs/js/3687-329b1f19feac4544afbf.js"></script>
1196
- <script src="/packs/js/3921-dac94c0464d34976c95e.js"></script>
1197
- <script src="/packs/js/4163-b4615f06dd1b835d3329.js"></script>
1198
- <script src="/packs/js/4275-9f16d7d21f847803d1ff.js"></script>
1199
- <script src="/packs/js/7399-725ce19fc749c03b9f9f.js"></script>
1200
- <script src="/packs/js/4288-6235ebddef5772df226b.js"></script>
1201
- <script src="/packs/js/4154-6ecb4fd696394376c851.js"></script>
1202
- <script src="/packs/js/554-9d0a90c09f5caccc5634.js"></script>
1203
- <script src="/packs/js/5470-d3e6b16e1214a43ccb89.js"></script>
1204
- <script src="/packs/js/8873-0bd271aae83f52cb3caa.js"></script>
1205
- <script src="/packs/js/7438-14d9a6011a3be8b4d922.js"></script>
1206
- <script src="/packs/js/5770-cb2b8585220d263b0dda.js"></script>
1207
- <script src="/packs/js/7429-22deb32463a5b6231449.js"></script>
1208
- <script src="/packs/js/1349-538de172cd2b62969ded.js"></script>
1209
- <script src="/packs/js/5219-577c1ea86d98bba4128c.js"></script>
1210
- <script src="/packs/js/8243-219f306e81c28add1561.js"></script>
1211
- <script src="/packs/js/6183-c22d78630ecf5b3cd9e0.js"></script>
1212
- <script src="/packs/js/1427-8ba361ca3eedfc4223fe.js"></script>
1213
- <script src="/packs/js/9240-981b8b896a9278e0cbf9.js"></script>
1214
- <script src="/packs/js/844-b8e74c0cd4028f594c93.js"></script>
1215
- <script src="/packs/js/5190-76575a547ab3604fb2aa.js"></script>
1216
- <script src="/packs/js/8005-e0bc9aa7364ea7a80729.js"></script>
1217
- <script src="/packs/js/5924-808f2cfcb6db92812bf3.js"></script>
1218
- <script src="/packs/js/9873-becf8a5bb2c6442c989a.js"></script>
1219
- <script src="/packs/js/6074-4c993b38d9503c4272dd.js"></script>
1220
- <script src="/packs/js/8413-b0c9517f7fce17a1b9cb.js"></script>
1221
- <script src="/packs/js/3610-6eaaacb9bd375fe0a3b7.js"></script>
1222
- <script src="/packs/js/1814-7050be1da4918dbaeb12.js"></script>
1223
- <script src="/packs/js/2949-09b991988c07646782ab.js"></script>
1224
- <script src="/packs/js/4081-7c24f71981e00d43e36d.js"></script>
1225
- <script src="/packs/js/4572-24881d80615959dd4435.js"></script>
1226
- <script src="/packs/js/635-ded99b4fbaa85ab5950c.js"></script>
1227
- <script src="/packs/js/999-6d7113b8f1b66ef0ee04.js"></script>
1228
- <script src="/packs/js/4919-15ad9a68aa782bb6ae31.js"></script>
1229
- <script src="/packs/js/6188-424b6e9097a93be38834.js"></script>
1230
- <script src="/packs/js/7454-f0193a54ebcb2f1b48da.js"></script>
1231
- <script src="/packs/js/7675-16d22ef3c6628a3ff0ea.js"></script>
1232
- <script src="/packs/js/application-9b23474b577395cd7d39.js"></script><script src="/assets/application-91ccbe93ad65b0cf8d1e0b94248456ffb124e16941119e9979793c87aa6abb23.js"></script><meta name="csrf-param" content="authenticity_token" />
1233
- <meta name="csrf-token" content="MZXjvOwNCkK4RydNO7p30-uQwbQKiGS8788ICbXngGzrArdvr6G-ADDXqu-mPM7l0KSePRstwWY1NfBriFjcMw" /></head><body class="home index"><div id="Navbar-react-component-460db06a-bafe-4158-bd55-200992503445"></div>
1234
- <script type="application/json" class="js-react-on-rails-component" data-component-name="Navbar" data-dom-id="Navbar-react-component-460db06a-bafe-4158-bd55-200992503445">{"navMenus":{"left":[{"name":"Community","icon":"ion-md-people","badge_content":null,"entries":[{"name":"Forum","icon":"ion-md-chatboxes","path":"/channels/all"},{"name":"Company Directory","icon":"ion-md-briefcase","path":"/directory"},{"name":"Founder Directory","icon":"ion-md-contacts","path":"/directory/founders"},{"name":"Founder Navigator (Beta)","icon":"ion-md-compass","path":"/navigator"},{"name":"Batch W2021","icon":"ion-ios-people","path":"/batches/w2021"},{"name":"Group 3","icon":"ion-ios-return-right","path":"/batches/w2021#group-3"},{"name":"Alumni Demo Day","icon":"ion-md-bonfire","path":"/directory/demo_day"},{"name":"Launch YC","icon":"ion-ios-megaphone","path":"https://www.ycombinator.com/launches"},{"name":"YC Top Companies","icon":"ion-ios-trending-up-outline","path":"https://www.ycombinator.com/topcompanies"},{"name":"Non-YC Companies","icon":"ion-ios-globe","path":"/directory/non_yc_directory"},{"name":"YC Store","icon":"ion-ios-shirt","path":"https://shop.gemnote.com/yc/shop"},{"name":"Alumni Groups","icon":"ion-ios-chatbubbles-outline","path":"/knowledge/9m-online-alumni-groups"},{"name":"This week at YC","icon":"ion-ios-information-circle-outline","path":"https://us7.campaign-archive.com/home/?u=6507bf4e4c2df3fdbae6ef738\u0026id=547725049b"}]},{"name":"Resources","icon":"ion-ios-book","entries":[{"name":"User Manual","icon":"ion-ios-bookmarks-outline","path":"/knowledge/1T-yc-user-manual"},{"name":"Batch Schedule","icon":"ion-md-calendar","path":"/schedule"},{"name":"Deals","icon":"ion-md-card","path":"/deals"},{"name":"Professional Services Directory","icon":"ion-md-people","path":"/professional_services"},{"name":"Fundraising Trends","icon":"ion-ios-stats","path":"/trends"},{"name":"Investor Database","icon":"ion-logo-usd","path":"/directory/investors?year=%5B2019%2C+2023%5D"},{"name":"Startup Library","icon":"ion-ios-book-outline","path":"https://ycombinator.com/library"},{"name":"Series A Manual","icon":"ion-ios-compass","path":"/knowledge/FI-series-a-manual"},{"name":"Admissions","icon":"ion-ios-school","path":"/knowledge/Go-yc-admissions"},{"name":"Knowledge Base","icon":"ion-md-globe","path":"/knowledge"},{"name":"Bookface Companion","icon":"ion-logo-chrome","path":"/knowledge/Em-bookface-companion"},{"name":"My Lists","icon":"ion-ios-list-box-outline","path":"/lists"}]},{"name":"Contact YC","icon":"ion-logo-hackernews","entries":[{"name":"Book Office Hours","icon":"ion-md-bookmarks","path":"/booker"},{"name":"Financings \u0026 Transactions","icon":"ion-md-cash","path":"/knowledge/Bp-notify-yc-financings-transactions"},{"name":"People at YC","icon":"ion-md-people","path":"/yc"},{"name":"Report Bad Actors","icon":"ion-md-sad","path":"https://docs.google.com/forms/d/e/1FAIpQLSf1BT_28VFKQS-AQm9XKA238-o2WBT90Um3PnD0xSg5UBx-XQ/viewform"},{"name":"Recommend Startups","icon":"ion-md-person-add","path":"https://apply.ycombinator.com/recommendations"},{"name":"Email Us","icon":"ion-ios-mail","path":"mailto:software@ycombinator.com"},{"name":"Privacy Policy","icon":"ion-ios-information-circle","path":"https://www.ycombinator.com/legal#privacy"}]},{"name":"Recruiting","icon":"ion-md-person-add","entries":[{"name":"Dashboard","icon":"ion-ios-home","path":"/workatastartup/dashboard"},{"name":"Source","icon":"ion-ios-contacts","path":"/workatastartup/applicants"},{"name":"Inbox","icon":"ion-ios-mail","path":"/workatastartup/inbox","waas_unread_inbox":true},{"name":"Applicants","icon":"ion-ios-hand","path":"/workatastartup/applied","waas_unread_applied":true},{"name":"Jobs","icon":"ion-md-document","path":"/company/23105/jobs","badge_content":null}],"waas_unread_inbox":true},{"name":"Company","icon":"ion-md-briefcase","entries":[{"name":"Questbook","icon":"ion-md-briefcase","path":"/company/23105"},{"name":"Investments","icon":"ion-ios-return-right","path":"/company/23105/investments"},{"name":"Demo Day Leads","icon":"ion-ios-return-right","path":"/company/23105/demo_day_investors"},{"name":"Rate your investors","icon":"ion-ios-return-right","path":"/investor_grades"},{"name":"Company Updates","icon":"ion-ios-return-right","path":"/companies/23155/company_updates"}]}],"right":[{"name":"werwer","icon":"ion-md-contact","type":"user","entries":[{"name":"My Profile","icon":"ion-md-contact","path":"/user/182853"},{"name":"Forum Notifications","icon":"ion-md-notifications","path":"/forum/notifications"},{"name":"Forum Keyword Alerts","icon":"ion-md-headset","path":"/forum_alerts"},{"name":"Log Out","icon":"ion-md-log-out","path":"/session/logout"}]}]},"brandImageUrl":"https://bookface.ycombinator.com/assets/ycombinator-logo-7481412385fe6d0f7d4a3339d90fe12309432ca41983e8d350b232301d5d8684.png","brandHref":"https://bookface.ycombinator.com/home","currentUser":{"avatarThumbUrl":"https://bookface-images.s3.amazonaws.com/avatars/a5c05c087cf0b25cf0e08654e2d95128e379b7ec.jpg"},"currentPath":"/home","searchVisible":true,"subnav":null,"inWaas":false,"waasHref":"https://bookface.ycombinator.com/workatastartup/dashboard","hasBookface":true,"loggedIn":true,"releaseNotes":{"notes":[],"type":"bookface","since":null},"borderType":"None"}</script>
1235
-
1236
- <div id="Search-react-component-76e03c44-d86c-409e-b85c-5fb08597ec31"></div>
1237
- <script type="application/json" class="js-react-on-rails-component" data-component-name="Search" data-dom-id="Search-react-component-76e03c44-d86c-409e-b85c-5fb08597ec31">{"waas":false,"siteNav":{"left":[{"name":"Community","icon":"ion-md-people","badge_content":null,"entries":[{"name":"Forum","icon":"ion-md-chatboxes","path":"/channels/all"},{"name":"Company Directory","icon":"ion-md-briefcase","path":"/directory"},{"name":"Founder Directory","icon":"ion-md-contacts","path":"/directory/founders"},{"name":"Founder Navigator (Beta)","icon":"ion-md-compass","path":"/navigator"},{"name":"Batch W2021","icon":"ion-ios-people","path":"/batches/w2021"},{"name":"Group 3","icon":"ion-ios-return-right","path":"/batches/w2021#group-3"},{"name":"Alumni Demo Day","icon":"ion-md-bonfire","path":"/directory/demo_day"},{"name":"Launch YC","icon":"ion-ios-megaphone","path":"https://www.ycombinator.com/launches"},{"name":"YC Top Companies","icon":"ion-ios-trending-up-outline","path":"https://www.ycombinator.com/topcompanies"},{"name":"Non-YC Companies","icon":"ion-ios-globe","path":"/directory/non_yc_directory"},{"name":"YC Store","icon":"ion-ios-shirt","path":"https://shop.gemnote.com/yc/shop"},{"name":"Alumni Groups","icon":"ion-ios-chatbubbles-outline","path":"/knowledge/9m-online-alumni-groups"},{"name":"This week at YC","icon":"ion-ios-information-circle-outline","path":"https://us7.campaign-archive.com/home/?u=6507bf4e4c2df3fdbae6ef738\u0026id=547725049b"}]},{"name":"Resources","icon":"ion-ios-book","entries":[{"name":"User Manual","icon":"ion-ios-bookmarks-outline","path":"/knowledge/1T-yc-user-manual"},{"name":"Batch Schedule","icon":"ion-md-calendar","path":"/schedule"},{"name":"Deals","icon":"ion-md-card","path":"/deals"},{"name":"Professional Services Directory","icon":"ion-md-people","path":"/professional_services"},{"name":"Fundraising Trends","icon":"ion-ios-stats","path":"/trends"},{"name":"Investor Database","icon":"ion-logo-usd","path":"/directory/investors?year=%5B2019%2C+2023%5D"},{"name":"Startup Library","icon":"ion-ios-book-outline","path":"https://ycombinator.com/library"},{"name":"Series A Manual","icon":"ion-ios-compass","path":"/knowledge/FI-series-a-manual"},{"name":"Admissions","icon":"ion-ios-school","path":"/knowledge/Go-yc-admissions"},{"name":"Knowledge Base","icon":"ion-md-globe","path":"/knowledge"},{"name":"Bookface Companion","icon":"ion-logo-chrome","path":"/knowledge/Em-bookface-companion"},{"name":"My Lists","icon":"ion-ios-list-box-outline","path":"/lists"}]},{"name":"Contact YC","icon":"ion-logo-hackernews","entries":[{"name":"Book Office Hours","icon":"ion-md-bookmarks","path":"/booker"},{"name":"Financings \u0026 Transactions","icon":"ion-md-cash","path":"/knowledge/Bp-notify-yc-financings-transactions"},{"name":"People at YC","icon":"ion-md-people","path":"/yc"},{"name":"Report Bad Actors","icon":"ion-md-sad","path":"https://docs.google.com/forms/d/e/1FAIpQLSf1BT_28VFKQS-AQm9XKA238-o2WBT90Um3PnD0xSg5UBx-XQ/viewform"},{"name":"Recommend Startups","icon":"ion-md-person-add","path":"https://apply.ycombinator.com/recommendations"},{"name":"Email Us","icon":"ion-ios-mail","path":"mailto:software@ycombinator.com"},{"name":"Privacy Policy","icon":"ion-ios-information-circle","path":"https://www.ycombinator.com/legal#privacy"}]},{"name":"Recruiting","icon":"ion-md-person-add","entries":[{"name":"Dashboard","icon":"ion-ios-home","path":"/workatastartup/dashboard"},{"name":"Source","icon":"ion-ios-contacts","path":"/workatastartup/applicants"},{"name":"Inbox","icon":"ion-ios-mail","path":"/workatastartup/inbox","waas_unread_inbox":true},{"name":"Applicants","icon":"ion-ios-hand","path":"/workatastartup/applied","waas_unread_applied":true},{"name":"Jobs","icon":"ion-md-document","path":"/company/23105/jobs","badge_content":null}],"waas_unread_inbox":true},{"name":"Company","icon":"ion-md-briefcase","entries":[{"name":"Questbook","icon":"ion-md-briefcase","path":"/company/23105"},{"name":"Investments","icon":"ion-ios-return-right","path":"/company/23105/investments"},{"name":"Demo Day Leads","icon":"ion-ios-return-right","path":"/company/23105/demo_day_investors"},{"name":"Rate your investors","icon":"ion-ios-return-right","path":"/investor_grades"},{"name":"Company Updates","icon":"ion-ios-return-right","path":"/companies/23155/company_updates"}]}],"right":[{"name":"wer","icon":"ion-md-contact","type":"user","entries":[{"name":"My Profile","icon":"ion-md-contact","path":"/user/182853"},{"name":"Forum Notifications","icon":"ion-md-notifications","path":"/forum/notifications"},{"name":"Forum Keyword Alerts","icon":"ion-md-headset","path":"/forum_alerts"},{"name":"Log Out","icon":"ion-md-log-out","path":"/session/logout"}]}]},"defaultQuery":null}</script>
1238
-
1239
- <div class="container page-body"><div class="content nomargin"><script type="application/json" id="js-react-on-rails-context">{"railsEnv":"production","inMailer":false,"i18nLocale":"en","i18nDefaultLocale":"en","rorVersion":"13.0.0","rorPro":false,"href":"https://bookface.ycombinator.com/home","location":"/home","scheme":"https","host":"bookface.ycombinator.com","port":null,"pathname":"/home","search":null,"httpAcceptLanguage":"en-US,en;q=0.9","applyBatchLong":"Summer 2023","applyBatchShort":"S2023","applyDeadlineShort":"April 7","ycdcRetroMode":false,"currentUser":{"id":182853,"admin":false,"waas_admin":false,"yc_partner":false,"current_company":{"name":"Questbook"},"company_for_deals":{"name":"Questbook"},"full_name":"qweqwe","first_name":"qwe","hnid":"qwe"},"serverSide":false}</script>
1240
- <div id="HomePage-react-component-da3a44a5-f5a9-4034-bc29-92c963507ad6"></div>
1241
- <script type="application/json" class="js-react-on-rails-component" data-component-name="HomePage" data-dom-id="HomePage-react-component-da3a44a5-f5a9-4034-bc29-92c963507ad6">{"currentUser":{"id":182853,"hnid":"qweqwe","full_name":"qwe qwe","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/a5c05c087cf0b25cf0e08654e2d95128e379b7ec.jpg","admin":false,"batch_location":false,"company":{"id":23105,"name":"Questbook","avatar":"https://bookface-images.s3.amazonaws.com/small_logos/76b4d06ff2e585b333f5f8c0fd3930367130db4e.png","active":true,"batch":{"short":"W21","long":"W2021","current":false}}},"userVotes":null,"onboardingStatus":null,"banner":{"cache_key":"0.6353781550327607","class_name":"","large":"","md":""},"events":[],"channels":[{"id":349709,"subscribed":true,"notifications":"digest","force_subscribed":true,"force_important_notifications":false,"display_as_restricted":false,"can_comment":false,"can_post":false,"archived":false,"name":"All Posts","description":"All posts from your channels.","slug":"all","type":null,"synthetic":true},{"id":349710,"subscribed":true,"notifications":"digest","force_subscribed":true,"force_important_notifications":false,"display_as_restricted":false,"can_comment":false,"can_post":false,"archived":false,"name":"⭐ Featured Posts","description":"Posts featured by forum admins.","slug":"featured","type":null,"synthetic":true},{"id":349711,"subscribed":true,"notifications":"important_immediate","force_subscribed":true,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":false,"archived":false,"name":"YC Announcements","description":"Announcements (events, programs, content) relevant to the YC community.","slug":"announcements","type":null,"synthetic":false},{"id":349735,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"General","description":"Technical or business learnings or questions, including requests for technical expertise, that would be relevant for a large number of YC companies.","slug":"general","type":null,"synthetic":false},{"id":528210,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"Launch Bookface","description":"New products or features that you would like YC alumni to try.","slug":"launch_bookface","type":null,"synthetic":false},{"id":528211,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"Classifieds","description":"Events, groups, side projects, introduction requests, requests for feedback or surveys, vendor or agency requests, items for sale, office space for lease.","slug":"classifieds","type":null,"synthetic":false},{"id":349754,"subscribed":true,"notifications":"digest","force_subscribed":false,"force_important_notifications":false,"display_as_restricted":false,"can_comment":true,"can_post":true,"archived":false,"name":"Recruiting","description":"Ask hiring questions, share candidate recommendations and post open jobs at active YC startups.","slug":"recruiting","type":null,"synthetic":false},{"id":349712,"subscribed":true,"notifications":"important_immediate","force_subscribed":true,"force_important_notifications":true,"display_as_restricted":true,"can_comment":true,"can_post":true,"archived":false,"name":"Batch W2021","description":"Questions or announcements that you would like just your batch-mates to see.","slug":"w2021","type":"batch","synthetic":false},{"id":349713,"subscribed":true,"notifications":"immediate","force_subscribed":true,"force_important_notifications":true,"display_as_restricted":true,"can_comment":true,"can_post":true,"archived":false,"name":"Group W2021-3","description":"Questions or announcements that you would like just your group-mates to see.","slug":"w2021_3","type":"batch_group","synthetic":false}],"announcements":[],"posts":[{"vote_info":{"current_user_vote":null,"count":16,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71262,"title":"Advice Scaling Kubernetes","body":"We're using Keda to scale our Kubernetes cluster up and down to match user demand throughout the day. \n\nBut with a lot of recent growth, we're coming close to a volume and frequency of activity that will overload Keda and, unfortunately, Keda's architecture does not allow us to simply scale it horizontally. \n\nWe are considering different strategies to address the problem, but we would love to chat with anyone who has experience auto-scaling k8s at high volumes. Thanks!\\\n\\\nDrop me a line at [rich@fathom.video](mailto:rich@fathom.video) or leave a comment below and I'll find you 🙂 \n\nThanks YC fam!","user":{"id":497830,"full_name":"Richard White","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/1d6ebbdda301f0db1c3de4d1094ebf025f2d4592.jpg","companies":[{"id":22879,"name":"Fathom","batch":"W21","url":"/company/22879","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/008e65b3fdfccde7a316a6c0911fd59301ff1025.png"}],"email":"rich@fathom.video","url":"/user/497830","badges":[],"trusted_answerer":false},"comment_count":2,"views_count":174,"state":"","channel":"general","url":"https://bookface.ycombinator.com/posts/71262","edit_url":"https://bookface.ycombinator.com/posts/71262","important":false,"created_at":"2023-04-28T23:11:04.550Z","pinned":false,"slug":"IXO-advice-scaling-kubernetes","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71258,"title":"Making use of SKAN 4.0?","body":"Hey folks, is anyone already successfully making use of the new SKAN 4.0 features, such as the multiple postback windows, e.g. to report conversions to paid after a 7 day trial, and the better support for safari web to app store conversions for e.g. google search ads to app store? \n\nWe use AppsFlyer, and they rolled out their support for it recently and we're looking to update, but was hoping to hear if anyone else already took the plunge and how it's going. \n\nSomething else on my mind is "are Facebook and Google ready to support SKAN 4.0 yet as part of their campaign optimization?"\n\nIf anyone has any insight or wants to trade notes, DM or reply below :)","user":{"id":740607,"full_name":"Ilya Usorov","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/2259539f017cffde44733f871f90e7476ac3dfb6.jpg","companies":[{"id":24065,"name":"BoldVoice","batch":"S21","url":"/company/24065","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/b5efb6e4dabd2976ede40db2ef12a87efce69aa3.png"}],"email":"ilya@usorov.com","url":"/user/740607","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":79,"state":"","channel":"general","url":"https://bookface.ycombinator.com/posts/71258","edit_url":"https://bookface.ycombinator.com/posts/71258","important":false,"created_at":"2023-04-28T17:00:35.857Z","pinned":false,"slug":"IXK-making-use-of-skan-4-0","all_tags":[]}],"comments":[],"launchBookfacePosts":[],"launchYCPosts":[],"recruitingPosts":[{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71266,"title":"Stellar devops engineer available for hire","body":"[Dushyant Mehta](https://www.linkedin.com/in/dmehta28/) is a great devops engineer and architect that was just laid off from Amazon during their latest round of layoffs. He worked for us at Qventus for more than five years and was a huge driver of our maturing infrastructure during that time. He holds himself to a high level of ownership and executes incredibly well in a startup environment.\n\nHe is based in Atlanta but prefers to work remotely. If you need help scaling your infrastructure and maturing your eng organization, Dushyant would be a great hire! If interested, please reach out to him directly at [dushyant.mehta28@gmail.com](mailto:dushyant.mehta28@gmail.com)","user":{"id":8044,"full_name":"Ian Christopher","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/b94f5d92b6c119af50130079c36007d4dd3f9a3e.jpg","companies":[{"id":740,"name":"Qventus","batch":"W15","url":"/company/740","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/1defe75646f1d3885f2a5762f45c3977246f4ec8.png"}],"email":"ian@qventus.com","url":"/user/8044","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":31,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71266","edit_url":"https://bookface.ycombinator.com/posts/71266","important":false,"created_at":"2023-04-29T05:20:26.845Z","pinned":false,"slug":"IXS-stellar-devops-engineer-available-for-hire","all_tags":[],"location":"Atlanta","rec_strength":"2","worked_together":true,"how_known":"Dushyant worked with us for 5+ years","discipline":"eng","waas_invite_email":"dushyant.mehta28@gmail.com"},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71261,"title":"Recent law grad looking for opportunity in tech/startup","body":"Hey YC,\n\nMy wife recently relocated to San Francisco from Canada and is currently looking for a job. She has a JD from McGill and an BA in English from Brown University. If your company is looking for any help with legal stuff, she's a highly recommended candidate :)\n\n\u003chttps://www.linkedin.com/in/margcr/\u003e\n\nThx!","user":{"id":265839,"full_name":"Christian Mathiesen","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/f1a02aca7bf268e8a6f107251cac7301fdb7d5e8.jpg","companies":[{"id":27852,"name":"Frigade","batch":"W23","url":"/company/27852","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/ccd8e1e94fc54f293c3bd81a6c1d8b21ebc157b1.png"}],"email":"christian@frigade.com","url":"/user/265839","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":47,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71261","edit_url":"https://bookface.ycombinator.com/posts/71261","important":false,"created_at":"2023-04-28T23:00:11.706Z","pinned":false,"slug":"IXN-recent-law-grad-looking-for-opportunity-in-tech-startup","all_tags":[],"location":"","rec_strength":"","worked_together":null,"how_known":"","discipline":"","waas_invite_email":""},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71259,"title":"Great Mechanical Designer looking for work","body":"If any of you need mechanical design support, I highly recommend [Michael McClain](https://www.linkedin.com/in/michael-mcclain/?locale=it_IT) who has done a ton of great work for us. He lives in Slovakia though grew up in Oregon and  communication with him has been excellent. He has been super organized and completes one task after the next. I've given him a fair bit of autonomy in coming up with solutions and have been pleased with the results. He does not have a mechanical engineering degree but designs as if he did, and his rates are lower than an ME. We've used [his services through Upwork](https://www.upwork.com/freelancers/\\~01052d50d552be0de4?referrer_url_path=%2Fab%2Fprofiles%2Fsearch%2Fdetails%2F\\~01052d50d552be0de4%2Fprofile) which has been easy.","user":{"id":740600,"full_name":"Nico Julian","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/d3f1e140517db6a6cf7b7fc4fe45a898989d2aa1.jpg","companies":[{"id":24759,"name":"Phykos","batch":"S21","url":"/company/24759","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/f4fae33c25ffd1357e90efd63adf09b81698da05.png"}],"email":"npjulian@gmail.com","url":"/user/740600","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":34,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71259","edit_url":"https://bookface.ycombinator.com/posts/71259","important":false,"created_at":"2023-04-28T17:32:40.128Z","pinned":false,"slug":"IXL-great-mechanical-designer-looking-for-work","all_tags":[],"location":"Slovakia","rec_strength":"2","worked_together":true,"how_known":"","discipline":"design","waas_invite_email":""},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71256,"title":"Fantastic Commercial VP available","body":"If any of you are looking for a very strong commercial VP with strengths in BD, product planning as well as Competitive intelligence - I **strongly** recommend Peter Finlayson. Feel free to contact me for questions, or reach out to him directly.\n\nBrief Bio below:\n\n\u003e Peter is the Executive Director of Partnerships and Innovation for Pardes Biosciences in support of its lead asset, an oral antiviral to treat COVID-19. As a member of the Commercial Leadership Team, Peter defined the commercial launch strategy and execution plan for all elements of a broad, international launch. His responsibilities included both traditional and non-traditional Business Development, strategic partnerships, clinical trial enablement, demand forecasting, company valuation, market research, competitive intelligence, generic/brand naming, and more.\n\u003e\n\u003e Prior to Pardes, Peter spent almost 9 years at Genentech in roles of increasing responsibility. He was a Marketing Leader and led commercial launch planning \u0026 execution for multiple brands. He has deep U.S. market access expertise and experience in developing and executing novel distribution and contracting approaches to maximize patient access and reduce launch-related costs. Peter successfully worked in customer experience organizations implementing digital innovation solutions and processes that reduced time and costs of bringing new solutions to market. He thrives in regional \u0026 national account management roles working with providers, health systems, GPOs, distributors, and advocacy organizations. In addition to Infectious Disease, Peter has worked in Oncology, Ophthalmology, Multiple Sclerosis, Rare Disease, and Thrombolytics.\n\u003e\n\u003e Before joining Genentech, Peter worked for ZS Associates for nearly six years as a healthcare consultant where he honed his team and project management skills, as well as account management and consultative selling abilities. Peter supported dozens of BioPharma companies in exceeding their commercial goals in many therapeutic areas, and spanning across functional groups.\n\u003e\n\u003e Peter holds bachelor's and master's degrees from Stanford University. As a father of four boys, Peter stays very active in his local community as a coach on countless sports teams, and serving as bishop for his local church.","user":{"id":323931,"full_name":"Uri Lopatin","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/5778aaf0271d7d376bc1f3f639c7a6d72753d456.jpg","companies":[{"id":22111,"name":"Pardes Biosciences","batch":"S20","url":"/company/22111","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/7a90b132bd3ef57761690e68c3355e7471e2abf7.png"},{"id":64,"name":"Y Combinator","batch":"","url":"/company/64","former_company":true,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/2db694dd7905db37d037821a2fdaf9fa0708a964.png"}],"email":"uri@ycombinator.com","url":"/user/323931","badges":["yc_staff"],"trusted_answerer":false},"comment_count":0,"views_count":65,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71256","edit_url":"https://bookface.ycombinator.com/posts/71256","important":false,"created_at":"2023-04-28T15:50:18.007Z","pinned":false,"slug":"IXI-fantastic-commercial-vp-available","all_tags":["Partnerships","business development","VP","competitive intelligence","commercialization"],"location":"Remote","rec_strength":"3","worked_together":true,"how_known":"Peter was a key member of our commercial team, reporting to our chief commercial officer. He was excellent. ","discipline":"marketing","waas_invite_email":"petefin@gmail.com"},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71255,"title":"Stellar full-stack engineer (ex-FB, former founder) looking for new role","body":"Hi all,\n\nRecommending Shreyas, who's looking to join an early stage startup (seed/A/B preferred) as a full-stack engineer. He spent time at Facebook and was a former founder beforehand.\n\nHe's especially great with Python/React and is a terrific communicator, and someone who can do adjacent PM/design work when needed.\n\nPrefers NYC but open to SF and remote roles.\n\nYou can reach out at [shreyassood@gmail.com](mailto:shreyassood@gmail.com)!","user":{"id":217871,"full_name":"Bhavin Gupta","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/542515bdad75d8b1f3514d5c94a7aa59250c9de7.jpg","companies":[{"id":12631,"name":"Fynn","batch":"S19","url":"/company/12631","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/2130bc9129d6903e966a14272a2916b912d00d2e.png"}],"email":"bhavingpt@gmail.com","url":"/user/217871","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":123,"state":"","channel":"recruiting","url":"https://bookface.ycombinator.com/posts/71255","edit_url":"https://bookface.ycombinator.com/posts/71255","important":false,"created_at":"2023-04-28T15:35:05.359Z","pinned":false,"slug":"IXH-stellar-full-stack-engineer-ex-fb-former-founder-looking-for-new-role","all_tags":[],"location":"NYC/San Francisco/Remote","rec_strength":"2","worked_together":false,"how_known":"Known them for the last 7 years","discipline":"eng","waas_invite_email":"shreyassood@gmail.com"}],"classifieds":[{"vote_info":{"current_user_vote":null,"count":1,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71265,"title":"Intro to someone at Welkin, Nabla, or Kareo","body":"Are there any founders here who have a contact at either [Welkin](https://welkinhealth.com/), [Nabla](https://www.nabla.com/), or [Kareo](https://www.kareo.com/)?\\\n\\\nWe're talking to potential customers who use these EHRs, and want to be able to offer our [Medical API](https://www.metriport.com/medical) as an integration through their platform, so our customers don't have to build around them.\\\n\\\nWould love to leverage a warm intro if anyone happens to know someone at these small-ish companies!","user":{"id":611194,"full_name":"Colin Elsinga","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/0d5eb4599804eeaebc6a92ba0735d0cb92ff3c46.jpg","companies":[{"id":27037,"name":"Metriport","batch":"S22","url":"/company/27037","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/d4da680d3cdee4cc7ad6408d3177026092f04c75.png"}],"email":"colin@metriport.com","url":"/user/611194","badges":[],"trusted_answerer":false},"comment_count":0,"views_count":23,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71265","edit_url":"https://bookface.ycombinator.com/posts/71265","important":false,"created_at":"2023-04-29T01:25:03.604Z","pinned":false,"slug":"IXR-intro-to-someone-at-welkin-nabla-or-kareo","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":3,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71264,"title":"Looking to chat with platform engineers/developer productivity engineers","body":"Hi friends! Has anyone here worked on a platform engineering team that's responsible for building Internal Developer Platforms? Specifically, I'm looking to talk to folks who have worked on teams which build self-service tools which take away the burden of building, deploying, scaling, and managing devops around their code. Google, Airbnb, Netflix, Uber, Stripe, to name a few all have such teams.\n\nWould love to chat with you and would appreciate intros to anyone you may know!","user":{"id":1098594,"full_name":"Jessie Young","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/bacd8dfbf932dba178be48e147deb56a5188e65c.jpg","companies":[{"id":27810,"name":"Cakework","batch":"W23","url":"/company/27810","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/c4dbd8d6bcbc396c907943226c3f01d2cbcd5809.png"}],"email":"jessie@cakework.com","url":"/user/1098594","badges":[],"trusted_answerer":false},"comment_count":1,"views_count":47,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71264","edit_url":"https://bookface.ycombinator.com/posts/71264","important":false,"created_at":"2023-04-29T01:19:35.329Z","pinned":false,"slug":"IXQ-looking-to-chat-with-platform-engineers-developer-productivity-engineers","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":0,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71263,"title":"Rippling Payroll Issue - anyone know how their \"clawback\" works or how we can avoid it?","body":"So I just found out from my controller that he forgot to wire funds from our operating account to our payroll account this week.\n\nAt 3:36PM PT today he got an email saying we needed to wire funds to Rippling by 11AM PT today, which raises … a bit of an issue seeing that the time had already passed.\n\nIt says they will begin clawing back employee funds if we did not do that which of course was not done.\n\nWe have the money in our payroll account now and can wire the funds but the wire deadline has passed so now I'm stuck wondering if employees will have their money clawed back on Monday?\n\nIs there anyone at [@Rippling](https://bookface.ycombinator.com/company/1451) that can tell us what we can do to avoid that happening?","user":{"id":886,"full_name":"Zach Bruhnke","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/a5d68ce2558580800f21597871d32e3076d485c5.jpg","companies":[{"id":62,"name":"Medmonk","batch":"W12","url":"/company/62","former_company":true,"logo_url":null}],"email":"z@zbruhnke.com","url":"/user/886","badges":[],"trusted_answerer":false},"comment_count":1,"views_count":103,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71263","edit_url":"https://bookface.ycombinator.com/posts/71263","important":false,"created_at":"2023-04-28T23:33:23.252Z","pinned":false,"slug":"IXP-rippling-payroll-issue-anyone-know-how-their-clawback-works-or-how-we-can-avoid-it","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":10,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71260,"title":"YC founder hoodies for sale ","body":"Hey all - We (Vastrm) had some left over fleece fabric that we made into YC hoodies. There aren't many available only about 60 units in assorted sizes - 2 colors available. It is a thicker fleece material vs the pique cotton we have used in the past. Sizing is true to fit. Size chart here: \u003chttp://www.vastrm.com/size-chart#\u003e Cost is $95 (normally would retail for about $225 - I know expensive but we sell into high end boutique stores mainly.) \n\n\u003chttps://vastrmsportswear.myshopify.com/products/fleece-yc-founders-hoodie?variant=42571111694513\u003e","user":{"id":30619,"full_name":"Jonathan Tang","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/2374146a4bbe9bbb25318ea23d2fecbfe9b11ec8.jpg","companies":[{"id":460,"name":"Vastrm","batch":"S12","url":"/company/460","former_company":false,"logo_url":null}],"email":"jtang@vastrm.com","url":"/user/30619","badges":[],"trusted_answerer":false},"comment_count":2,"views_count":352,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71260","edit_url":"https://bookface.ycombinator.com/posts/71260","important":false,"created_at":"2023-04-28T21:35:37.167Z","pinned":false,"slug":"IXM-yc-founder-hoodies-for-sale","all_tags":[]},{"vote_info":{"current_user_vote":null,"count":1,"adjustment":false},"moderated_by":false,"featured_at":null,"id":71257,"title":"Bakar Labs hosting a happy hour on May 4th 5-7pm","body":"Courtesy of Gino Segre\n\n"Please join us for spring happy hour on **May 4, 2023, 5-7pm** at Bakar Labs, in the courtyard! \n\nWe've invited you, members of the East Bay biotech community, and our friends at Activate, the coolest deep tech program around. Come for the libations, stay for the conversation. \n\nRSVP** **[**here**](https://airtable.com/shrvTl0Wtub7xxn8W)** **so that we can get a headcount on food and drinks. Hope you can join us!\n\nAnd.... if you can't remember what day it is, may the fourth be with you. Light sabers and Jedi mind tricks welcome!!"","user":{"id":323931,"full_name":"Uri Lopatin","avatar_thumb":"https://bookface-images.s3.amazonaws.com/avatars/5778aaf0271d7d376bc1f3f639c7a6d72753d456.jpg","companies":[{"id":22111,"name":"Pardes Biosciences","batch":"S20","url":"/company/22111","former_company":false,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/7a90b132bd3ef57761690e68c3355e7471e2abf7.png"},{"id":64,"name":"Y Combinator","batch":"","url":"/company/64","former_company":true,"logo_url":"https://bookface-images.s3.amazonaws.com/small_logos/2db694dd7905db37d037821a2fdaf9fa0708a964.png"}],"email":"uri@ycombinator.com","url":"/user/323931","badges":["yc_staff"],"trusted_answerer":false},"comment_count":0,"views_count":64,"state":"","channel":"classifieds","url":"https://bookface.ycombinator.com/posts/71257","edit_url":"https://bookface.ycombinator.com/posts/71257","important":false,"created_at":"2023-04-28T15:54:46.981Z","pinned":false,"slug":"IXJ-bakar-labs-hosting-a-happy-hour-on-may-4th-5-7pm","all_tags":["Social","Social Networking","happy hour","east bay","happy hours"]}],"companyNews":[{"id":3216,"title":"Replit, the web-based IDE developing a GitHub Copilot competitor, raises $100M | TechCrunch","url":"https://techcrunch.com/2023/04/27/replit-funding-100m-generative-ai/","image_url":"https://techcrunch.com/wp-content/uploads/2023/04/GettyImages-1322437940-e1680174106448.jpg?resize=1200,675","posted_at":"2023-04-27T19:00:00.000Z","created_at":"2023-04-27T19:37:21.881Z","updated_at":"2023-04-28T13:25:58.941Z","domain":"techcrunch.com"},{"id":3217,"title":"Y Combinator-backed Luca aims to optimize retail prices at enterprise scale | TechCrunch","url":"https://techcrunch.com/2023/04/27/luca-raises-cash-for-pricing-optimization/","image_url":"https://techcrunch.com/wp-content/uploads/2022/07/GettyImages-1387537769.jpg?resize=1200,800","posted_at":"2023-04-27T19:00:00.000Z","created_at":"2023-04-27T19:38:40.258Z","updated_at":"2023-04-28T13:25:58.943Z","domain":"techcrunch.com"},{"id":3218,"title":"Jopwell Acquired by True | Fast Company","url":"https://www.fastcompany.com/90886934/jopwell-acquired-by-true-the-top-five-things-ive-learned-from-being-a-black-founder","image_url":"","posted_at":"2023-04-27T19:00:00.000Z","created_at":"2023-04-27T20:24:44.089Z","updated_at":"2023-04-28T13:25:58.944Z","domain":"www.fastcompany.com"}],"hnPosts":[{"id":35720865,"author_name":"NN88","title":"Automakers are starting to admit that drivers hate touchscreens","url":"https://slate.com/business/2023/04/cars-buttons-touchscreens-vw-porsche-nissan-hyundai.html","score":1272,"created_at":1682548186,"featured_at":1682688520},{"id":35727967,"author_name":"xmlblog","title":"Datomic is Free","url":"https://blog.datomic.com/2023/04/datomic-is-free.html","score":1017,"created_at":1682602847,"featured_at":1682688520},{"id":35730711,"author_name":"twapi","title":"Every web search result in Brave Search is now served by our own index","url":"https://brave.com/search-independence/","score":620,"created_at":1682613475,"featured_at":1682688520},{"id":35724634,"author_name":"andsoitis","title":"Steven Spielberg: 'No film should be revised' based on modern sensitivity","url":"https://www.theguardian.com/film/2023/apr/26/steven-spielberg-et-guns-movie-edit","score":861,"created_at":1682581868,"featured_at":1682688520}],"youtubes":[{"id":"EiRnSjcVIqk","featured_at":1682688304}],"syllabusUrl":"/knowledge/C4-batch-syllabus","postBatchAdviceUrl":"/knowledge/BA-post-batch-advice","waasAdPlacement":{"imgUrl":"https://i.imgur.com/vt8n9Ik.png","targetUrl":"/posts/71251"},"batchStart":"2023-01-08"}</script>
1242
-
1243
- </div></div><div id="BottomMobileNavbar-react-component-9f975abe-af77-45aa-9e40-992807cef14f"></div>
1244
- <script type="application/json" class="js-react-on-rails-component" data-component-name="BottomMobileNavbar" data-dom-id="BottomMobileNavbar-react-component-9f975abe-af77-45aa-9e40-992807cef14f">{"navMenus":{"left":[{"name":"Community","icon":"ion-md-people","badge_content":null,"entries":[{"name":"Forum","icon":"ion-md-chatboxes","path":"/channels/all"},{"name":"Company Directory","icon":"ion-md-briefcase","path":"/directory"},{"name":"Founder Directory","icon":"ion-md-contacts","path":"/directory/founders"},{"name":"Founder Navigator (Beta)","icon":"ion-md-compass","path":"/navigator"},{"name":"Batch W2021","icon":"ion-ios-people","path":"/batches/w2021"},{"name":"Group 3","icon":"ion-ios-return-right","path":"/batches/w2021#group-3"},{"name":"Alumni Demo Day","icon":"ion-md-bonfire","path":"/directory/demo_day"},{"name":"Launch YC","icon":"ion-ios-megaphone","path":"https://www.ycombinator.com/launches"},{"name":"YC Top Companies","icon":"ion-ios-trending-up-outline","path":"https://www.ycombinator.com/topcompanies"},{"name":"Non-YC Companies","icon":"ion-ios-globe","path":"/directory/non_yc_directory"},{"name":"YC Store","icon":"ion-ios-shirt","path":"https://shop.gemnote.com/yc/shop"},{"name":"Alumni Groups","icon":"ion-ios-chatbubbles-outline","path":"/knowledge/9m-online-alumni-groups"},{"name":"This week at YC","icon":"ion-ios-information-circle-outline","path":"https://us7.campaign-archive.com/home/?u=6507bf4e4c2df3fdbae6ef738\u0026id=547725049b"}]},{"name":"Resources","icon":"ion-ios-book","entries":[{"name":"User Manual","icon":"ion-ios-bookmarks-outline","path":"/knowledge/1T-yc-user-manual"},{"name":"Batch Schedule","icon":"ion-md-calendar","path":"/schedule"},{"name":"Deals","icon":"ion-md-card","path":"/deals"},{"name":"Professional Services Directory","icon":"ion-md-people","path":"/professional_services"},{"name":"Fundraising Trends","icon":"ion-ios-stats","path":"/trends"},{"name":"Investor Database","icon":"ion-logo-usd","path":"/directory/investors?year=%5B2019%2C+2023%5D"},{"name":"Startup Library","icon":"ion-ios-book-outline","path":"https://ycombinator.com/library"},{"name":"Series A Manual","icon":"ion-ios-compass","path":"/knowledge/FI-series-a-manual"},{"name":"Admissions","icon":"ion-ios-school","path":"/knowledge/Go-yc-admissions"},{"name":"Knowledge Base","icon":"ion-md-globe","path":"/knowledge"},{"name":"Bookface Companion","icon":"ion-logo-chrome","path":"/knowledge/Em-bookface-companion"},{"name":"My Lists","icon":"ion-ios-list-box-outline","path":"/lists"}]},{"name":"Contact YC","icon":"ion-logo-hackernews","entries":[{"name":"Book Office Hours","icon":"ion-md-bookmarks","path":"/booker"},{"name":"Financings \u0026 Transactions","icon":"ion-md-cash","path":"/knowledge/Bp-notify-yc-financings-transactions"},{"name":"People at YC","icon":"ion-md-people","path":"/yc"},{"name":"Report Bad Actors","icon":"ion-md-sad","path":"https://docs.google.com/forms/d/e/1FAIpQLSf1BT_28VFKQS-AQm9XKA238-o2WBT90Um3PnD0xSg5UBx-XQ/viewform"},{"name":"Recommend Startups","icon":"ion-md-person-add","path":"https://apply.ycombinator.com/recommendations"},{"name":"Email Us","icon":"ion-ios-mail","path":"mailto:software@ycombinator.com"},{"name":"Privacy Policy","icon":"ion-ios-information-circle","path":"https://www.ycombinator.com/legal#privacy"}]},{"name":"Recruiting","icon":"ion-md-person-add","entries":[{"name":"Dashboard","icon":"ion-ios-home","path":"/workatastartup/dashboard"},{"name":"Source","icon":"ion-ios-contacts","path":"/workatastartup/applicants"},{"name":"Inbox","icon":"ion-ios-mail","path":"/workatastartup/inbox","waas_unread_inbox":true},{"name":"Applicants","icon":"ion-ios-hand","path":"/workatastartup/applied","waas_unread_applied":true},{"name":"Jobs","icon":"ion-md-document","path":"/company/23105/jobs","badge_content":null}],"waas_unread_inbox":true},{"name":"Company","icon":"ion-md-briefcase","entries":[{"name":"Questbook","icon":"ion-md-briefcase","path":"/company/23105"},{"name":"Investments","icon":"ion-ios-return-right","path":"/company/23105/investments"},{"name":"Demo Day Leads","icon":"ion-ios-return-right","path":"/company/23105/demo_day_investors"},{"name":"Rate your investors","icon":"ion-ios-return-right","path":"/investor_grades"},{"name":"Company Updates","icon":"ion-ios-return-right","path":"/companies/23155/company_updates"}]}],"right":[{"name":"qwe","icon":"ion-md-contact","type":"user","entries":[{"name":"My Profile","icon":"ion-md-contact","path":"/user/182853"},{"name":"Forum Notifications","icon":"ion-md-notifications","path":"/forum/notifications"},{"name":"Forum Keyword Alerts","icon":"ion-md-headset","path":"/forum_alerts"},{"name":"Log Out","icon":"ion-md-log-out","path":"/session/logout"}]}]},"subnav":null,"currentUser":{"avatarThumbUrl":"https://bookface-images.s3.amazonaws.com/avatars/a5c05c087cf0b25cf0e08654e2d95128e379b7ec.jpg"},"currentPath":"/home","loggedIn":true,"inWaas":false,"releaseNotes":{"notes":[],"type":"bookface","since":null}}</script>
1245
-
1246
- <!-- Segment --><script>!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://segment-cdn.ycombinator.com/seg-proxy/"+t+"/seg.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
1247
- analytics.load("OU4fgsPeMupJ2LesI1K7dfOsH7JjCmJD");
1248
- analytics.page();
1249
- }}();</script><script>document.addEventListener("DOMContentLoaded", function(e) {
1250
- analytics.ready(function() {
1251
- var traits = {
1252
- first_name: 'qwerqwer',
1253
- last_name: 'qwer',
1254
- created_at: '2017-03-07 08:20:26 UTC',
1255
- email: 'qwer@cqwerqwer,
1256
- hnid: 'qwer',
1257
- company: 'Questbook',
1258
- batch: 'w2021',
1259
- batches: 'w2021',
1260
- is_yc: 'true',
1261
- is_core: 'true',
1262
- is_fellowship: 'false',
1263
- is_active_founder: 'true',
1264
- is_investor: 'false',
1265
- is_media: 'false',
1266
- in_current_batch: 'false',
1267
- };
1268
-
1269
- analytics.identify('182853', traits);
1270
- analytics.user().traits(traits);
1271
- });
1272
- });</script><!-- End Segment --><!-- Google Analytics -->
1273
- <script>
1274
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
1275
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
1276
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
1277
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
1278
-
1279
- ga('create', 'UA-66452210-1', 'auto', {'legacyCookieDomain': 'bookface.ycombinator.com'});
1280
- ga('set', 'userId', 182853); // Set the user ID using signed-in user_id.
1281
- ga('set', 'dimension1', false);
1282
- ga('set', 'dimension2', 'w2021');
1283
- ga('set', 'dimension3', true);
1284
- ga('set', 'dimension4', true);
1285
- ga('send', 'pageview');
1286
-
1287
- </script>
1288
- <!-- End Google Analytics -->
1289
- </body></html>
1290
- `;
1291
- const chunkedResp = Buffer.from(`SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDA0IFNlcCAyMDIzIDE1OjQ0OjMzIEdNVA0KQ29u
1292
- dGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgNClRyYW5zZmVyLUVuY29kaW5nOiBj
1293
- aHVua2VkDQpDb25uZWN0aW9uOiBjbG9zZQ0KQ2FjaGUtQ29udHJvbDogbWF4LWFnZT0wLCBwcml2
1294
- YXRlLCBtdXN0LXJldmFsaWRhdGUNCkVUYWc6IFcvImI4NjA4ZTM5MTk0ZTZhMTk2ZGViMjZlZDRh
1295
- Mjg3OTk2Ig0KTGluazogPC9hc3NldHMvYXBwbGljYXRpb24tY2VlODVkZTY5NzkyNjQ2OTBiNmQx
1296
- ZWU0YjIzZmY0YmQ3OWJjNDllODlkOWU0YTI0YTFhYTg0MDczMDlmMjU3NS5jc3M+OyByZWw9cHJl
1297
- bG9hZDsgYXM9c3R5bGU7IG5vcHVzaCw8L3BhY2tzL2Nzcy8yNzg0LTY5ZDQ0Yjg1LmNzcz47IHJl
1298
- bD1wcmVsb2FkOyBhcz1zdHlsZTsgbm9wdXNoLDwvcGFja3MvY3NzLzQxMDQtN2Q1ZjMyMzEuY3Nz
1299
- PjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9jc3MvODU2NC02NjA2YTA2
1300
- Yy5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGU7IG5vcHVzaCw8L3BhY2tzL2Nzcy8zMDM0LWE1
1301
- YTFhOTNiLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZTsgbm9wdXNoLDwvcGFja3MvY3NzLzE1
1302
- MjktNjUzY2M0MDcuY3NzPjsgcmVsPXByZWxvYWQ7IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9j
1303
- c3MvNDQ2Mi00ZjA4MWEzZC5jc3M+OyByZWw9cHJlbG9hZDsgYXM9c3R5bGU7IG5vcHVzaCw8L3Bh
1304
- Y2tzL2Nzcy8zNTM0LTA2N2I3N2Q1LmNzcz47IHJlbD1wcmVsb2FkOyBhcz1zdHlsZTsgbm9wdXNo
1305
- LDwvcGFja3MvY3NzL2FwcGxpY2F0aW9uLWJjOGU2NWIwLmNzcz47IHJlbD1wcmVsb2FkOyBhcz1z
1306
- dHlsZTsgbm9wdXNoLDwvcGFja3MvY3NzLzE1MjktNjUzY2M0MDcuY3NzPjsgcmVsPXByZWxvYWQ7
1307
- IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9jc3MvdGFpbHdpbmQtYzg1NzM0NDYuY3NzPjsgcmVs
1308
- PXByZWxvYWQ7IGFzPXN0eWxlOyBub3B1c2gsPC9wYWNrcy9qcy9ydW50aW1lLWM1ZDJiMmI4MzU5
1309
- ZWViNzUzMTExLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMv
1310
- MTc2MS02ODlhM2I5ZmQxZDdmNjFhNjYwMi5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5v
1311
- cHVzaCw8L3BhY2tzL2pzLzY4NDktMmM3YzljNWM3ODIwOWNhODUwNmIuanM+OyByZWw9cHJlbG9h
1312
- ZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy84NDYxLTdjMDQyZmM3ZDMwYjk4Yzc4MGEx
1313
- LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvOTk2NS1lODNl
1314
- ZTlhYzYwOWE2NmNmMWI0Ny5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3Bh
1315
- Y2tzL2pzLzUxOTYtMGQyYWU5NjI0MzQ2OGFlZGFhMzMuanM+OyByZWw9cHJlbG9hZDsgYXM9c2Ny
1316
- aXB0OyBub3B1c2gsPC9wYWNrcy9qcy80Mjc1LTlmMTZkN2QyMWY4NDc4MDNkMWZmLmpzPjsgcmVs
1317
- PXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvOTkwNy1iNWZjMTQ1OGQ1ZjYx
1318
- OWU0YWY5Ny5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzc3
1319
- OTItMGNlZmM4NmFkYThlMjZjODc3MTQuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1
1320
- c2gsPC9wYWNrcy9qcy8yMTg3LTZlODczZDZhODBkODIyZGQ4N2U4LmpzPjsgcmVsPXByZWxvYWQ7
1321
- IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvOTUwNC0zZjZjMGEzOWNiYzI1NTllMjFiNy5q
1322
- cz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzMyNjEtZGEyZTgz
1323
- Mjg1MTgyODY5YWFjNzkuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNr
1324
- cy9qcy8zNTQwLTBiMThhNmZjNzZlOTI5N2ZjN2ExLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlw
1325
- dDsgbm9wdXNoLDwvcGFja3MvanMvNzQ5NC0xMmQwMTU0YzgxYjkzMzAzNmExNi5qcz47IHJlbD1w
1326
- cmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzUyNzYtNTYyZTk1M2FlOGYzNjZh
1327
- ZGRkZDcuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8xMzQ5
1328
- LThkZGE4ZTQ3YWJjYzhlNjcxMmI5LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNo
1329
- LDwvcGFja3MvanMvMTM4My0zZTJlODk4ZmE4MDBhN2MyMWEzMC5qcz47IHJlbD1wcmVsb2FkOyBh
1330
- cz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzk4NzMtYzZjODhjNDM5MGZlMDg5YWM1ZDQuanM+
1331
- OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8yNzg0LTg3MGYxYzcw
1332
- MWI0ZGUzOTIyOTg0LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3Mv
1333
- anMvNTY0My1hMjY5NjJhN2ZhZmVjOTQ4MjA1Zi5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7
1334
- IG5vcHVzaCw8L3BhY2tzL2pzLzUyNS1jYzJmZTUxNWQ1OTZmNTg4MDU2Yi5qcz47IHJlbD1wcmVs
1335
- b2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzQ4MDctN2FmOTc0YzdhNmZlOTJkZTk1
1336
- MDIuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy80MTA0LWJh
1337
- M2I3ZmQ5MzYyMjRiYTlhM2UxLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwv
1338
- cGFja3MvanMvMzE4LWQ0Y2M4ZjYxOGU0MDc3NGQyZmZjLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNj
1339
- cmlwdDsgbm9wdXNoLDwvcGFja3MvanMvNDI2NC1hMjI0OTk0ZjZmZjQzZTVhMTI0NC5qcz47IHJl
1340
- bD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzg1NjQtNjE4NDIzMWU2ZmE5
1341
- ODZkNTk0YWUuanM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8y
1342
- MTAyLTkwZTUwZTg3ZDUxZWI2NTA0MDQ1LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9w
1343
- dXNoLDwvcGFja3MvanMvMzE5NC01NTIzYzg0MTMyNzZiMjBjODVhYi5qcz47IHJlbD1wcmVsb2Fk
1344
- OyBhcz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzEwNzUtYzg2YzQ5YjAwNmRiNWE3MWYzZGIu
1345
- anM+OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy8xNzczLWEwZThh
1346
- NzIxMGY1M2U0ZmQ2YzU2LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFj
1347
- a3MvanMvNzU3NS0zYjM0OThmNjU5ZjQxNWZlODhmYy5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3Jp
1348
- cHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzMwMzQtMjk4ZDQzMWRhNjU0ZmI2OGJkMzIuanM+OyByZWw9
1349
- cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy84OTUyLWVhMGY2Y2ZmYzU0ZDZj
1350
- M2ZmZTE2LmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsgbm9wdXNoLDwvcGFja3MvanMvNDQ2
1351
- Mi05NzNmZjAwOTVhN2MxNGIwNjk3YS5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVz
1352
- aCw8L3BhY2tzL2pzLzI5OC05MWZjOTZiNDQ4MDlkNzBhOWUwNy5qcz47IHJlbD1wcmVsb2FkOyBh
1353
- cz1zY3JpcHQ7IG5vcHVzaCw8L3BhY2tzL2pzLzM1MzQtMDgyZTYzYmE4ZjBmYjZmM2YyNTQuanM+
1354
- OyByZWw9cHJlbG9hZDsgYXM9c2NyaXB0OyBub3B1c2gsPC9wYWNrcy9qcy9hcHBsaWNhdGlvbi1i
1355
- NTM1NGY2MWFiYzlmMTQ1YTIxOC5qcz47IHJlbD1wcmVsb2FkOyBhcz1zY3JpcHQ7IG5vcHVzaCw8
1356
- L2Fzc2V0cy9hcHBsaWNhdGlvbi0yY2Q0ZWQ0ODc3OTEzMTgxOWIxZGU3NTBjODExZjJiMzE0ODJl
1357
- YzFhMDg4ZTA0ZDUyNTlkYzAwNWQzNjU4MmNkLmpzPjsgcmVsPXByZWxvYWQ7IGFzPXNjcmlwdDsg
1358
- bm9wdXNoDQpSZWZlcnJlci1Qb2xpY3k6IHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4N
1359
- ClNldC1Db29raWU6ICoqKg0KU3RhdHVzOiAyMDAgT0sNClN0cmljdC1UcmFuc3BvcnQtU2VjdXJp
1360
- dHk6IG1heC1hZ2U9NjMwNzIwMDA7IGluY2x1ZGVTdWJEb21haW5zDQpWYXJ5OiBBY2NlcHQsQWNj
1361
- ZXB0LUVuY29kaW5nDQpYLUNvbnRlbnQtVHlwZS1PcHRpb25zOiBub3NuaWZmDQpYLURvd25sb2Fk
1362
- LU9wdGlvbnM6IG5vb3Blbg0KWC1GcmFtZS1PcHRpb25zOiBTQU1FT1JJR0lODQpYLVBlcm1pdHRl
1363
- ZC1Dcm9zcy1Eb21haW4tUG9saWNpZXM6IG5vbmUNClgtUmVxdWVzdC1JZDogY2NhYWQ1YzAyYWNl
1364
- Njk2YzBkMmU5MDhjZmU3YmUyMmMNClgtWFNTLVByb3RlY3Rpb246IDE7IG1vZGU9YmxvY2sNCkNG
1365
- LUNhY2hlLVN0YXR1czogRFlOQU1JQw0KU2VydmVyOiBjbG91ZGZsYXJlDQpDRi1SQVk6IDgwMTc1
1366
- YWJiNmI1MDAyNTEtQ0RHDQoNCjc5YWYNCjwhRE9DVFlQRSBodG1sPjxodG1sIGNsYXNzPSJob21l
1367
- IGluZGV4IGZvcnVtLXBhZ2UgaC1mdWxsIGJnLWJlaWdlLWxpZ2h0Ij48aGVhZD48dGl0bGU+Qm9v
1368
- a2ZhY2U8L3RpdGxlPjxzY3JpcHQ+d2luZG93LlJBSUxTX0VOViA9ICdwcm9kdWN0aW9uJzs8L3Nj
1369
- cmlwdD48c2NyaXB0PnZhciBfcm9sbGJhckNvbmZpZyA9IHsKICBhY2Nlc3NUb2tlbjogIjFhYTIy
1370
- YTAxYmZmZTRjMDdiNzBhZGNlZGI2M2VkNzZkIiwKICBjYXB0dXJlVW5jYXVnaHQ6IHRydWUsCiAg
1371
- Y2FwdHVyZVVuaGFuZGxlZFJlamVjdGlvbnM6IHRydWUsCiAgaG9zdFNhZmVMaXN0OiBbJ3ljb21i
1372
- aW5hdG9yLmNvbScsICd3b3JrYXRhc3RhcnR1cC5jb20nXSwKICBwYXlsb2FkOiB7CiAgICAgIGNs
1373
- aWVudDogewogICAgICAgICAgamF2YXNjcmlwdDogewogICAgICAgICAgICAgIHNvdXJjZV9tYXBf
1374
- ZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICBjb2RlX3ZlcnNpb246ICIxODczZDU4NGMyMmIw
1375
- MjNkZDYwZDFjNjY1ZTIxYzcwN2VmMTllNWIwIHJ1YnkgMy4yLjIgKDIwMjMtMDMtMzAgcmV2aXNp
1376
- b24gZTUxMDE0ZjljMCkgK1lKSVQgW3g4Nl82NC1saW51eF0iLAogICAgICAgICAgICAgIGd1ZXNz
1377
- X3VuY2F1Z2h0X2ZyYW1lczogdHJ1ZQogICAgICAgICAgfQogICAgICB9LAogICAgICBlbnZpcm9u
1378
- bWVudDogJ2Jyb3dzZXItcHJvZHVjdGlvbicsCiAgICAgIHBlcnNvbjogewogICAgICAgIGlkOiAi
1379
- MTgyODUzIiwKICAgICAgICB1c2VybmFtZTogIm1hZGhhdmFubWFsb2xhbiIKICAgICAgfQogIH0s
1380
- CiAgdHJhbnNmb3JtOiBmdW5jdGlvbihwYXlsb2FkKSB7CiAgICB2YXIgdHJhY2UgPSBwYXlsb2Fk
1381
- LmJvZHkudHJhY2U7CiAgICB2YXIgbG9jUmVnZXggPSAvXihodHRwcz8pOlwvXC9bXlwvXStcLygu
1382
- KikvOwogICAgaWYgKHRyYWNlICYmIHRyYWNlLmZyYW1lcykgewogICAgICBmb3IgKHZhciBpID0g
1383
- MDsgaSA8IHRyYWNlLmZyYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBmaWxlbmFtZSA9
1384
- IHRyYWNlLmZyYW1lc1tpXS5maWxlbmFtZTsKICAgICAgICBpZiAoZmlsZW5hbWUpIHsKICAgICAg
1385
- ICAgIHZhciBtID0gZmlsZW5hbWUubWF0Y2gobG9jUmVnZXgpOwogICAgICAgICAgaWYgKG0pIHsK
1386
- ICAgICAgICAgICAgdHJhY2UuZnJhbWVzW2ldLmZpbGVuYW1lID0gbVsxXSArICc6Ly9keW5hbWlj
1387
- aG9zdC8nICsgbVsyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn07
1388
- CgovLyBSb2xsYmFyIFNuaXBwZXQKIWZ1bmN0aW9uKHIpe3ZhciBlPXt9O2Z1bmN0aW9uIG8obil7
1389
- aWYoZVtuXSlyZXR1cm4gZVtuXS5leHBvcnRzO3ZhciB0PWVbbl09e2k6bixsOiExLGV4cG9ydHM6
1390
- e319O3JldHVybiByW25dLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLG8pLHQubD0hMCx0LmV4
1391
- cG9ydHN9by5tPXIsby5jPWUsby5kPWZ1bmN0aW9uKHIsZSxuKXtvLm8ocixlKXx8T2JqZWN0LmRl
1392
- ZmluZVByb3BlcnR5KHIsZSx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxvLnI9ZnVuY3Rpb24ocil7
1393
- InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRl
1394
- ZmluZVByb3BlcnR5KHIsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVj
1395
- dC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sby50PWZ1bmN0aW9u
1396
- KHIsZSl7aWYoMSZlJiYocj1vKHIpKSw4JmUpcmV0dXJuIHI7aWYoNCZlJiYib2JqZWN0Ij09dHlw
1397
- ZW9mIHImJnImJnIuX19lc01vZHVsZSlyZXR1cm4gcjt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwp
1398
- O2lmKG8ucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6
1399
- ITAsdmFsdWU6cn0pLDImZSYmInN0cmluZyIhPXR5cGVvZiByKWZvcih2YXIgdCBpbiByKW8uZChu
1400
- LHQsZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV19LmJpbmQobnVsbCx0KSk7cmV0dXJuIG59LG8ubj1m
1401
- dW5jdGlvbihyKXt2YXIgZT1yJiZyLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZh
1402
- dWx0fTpmdW5jdGlvbigpe3JldHVybiByfTtyZXR1cm4gby5kKGUsImEiLGUpLGV9LG8ubz1mdW5j
1403
- dGlvbihyLGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixl
1404
- KX0sby5wPSIiLG8oby5zPTApfShbZnVuY3Rpb24ocixlLG8peyJ1c2Ugc3RyaWN0Ijt2YXIgbj1v
1405
- KDEpLHQ9byg1KTtfcm9sbGJhckNvbmZpZz1fcm9sbGJhckNvbmZpZ3x8e30sX3JvbGxiYXJDb25m
1406
- aWcucm9sbGJhckpzVXJsPV9yb2xsYmFyQ29uZmlnLnJvbGxiYXJKc1VybHx8Imh0dHBzOi8vY2Ru
1407
- LnJvbGxiYXIuY29tL3JvbGxiYXJqcy9yZWZzL3RhZ3MvdjIuMTkuMC9yb2xsYmFyLm1pbi5qcyIs
1408
- X3JvbGxiYXJDb25maWcuYXN5bmM9dm9pZCAwPT09X3JvbGxiYXJDb25maWcuYXN5bmN8fF9yb2xs
1409
- YmFyQ29uZmlnLmFzeW5jO3ZhciBhPW4uc2V0dXBTaGltKHdpbmRvdyxfcm9sbGJhckNvbmZpZyks
1410
- bD10KF9yb2xsYmFyQ29uZmlnKTt3aW5kb3cucm9sbGJhcj1uLlJvbGxiYXIsYS5sb2FkRnVsbCh3
1411
- aW5kb3csZG9jdW1lbnQsIV9yb2xsYmFyQ29uZmlnLmFzeW5jLF9yb2xsYmFyQ29uZmlnLGwpfSxm
1412
- dW5jdGlvbihyLGUsbyl7InVzZSBzdHJpY3QiO3ZhciBuPW8oMiksdD1vKDMpO2Z1bmN0aW9uIGEo
1413
- cil7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1j
1414
- YXRjaChyKXt0cnl7Y29uc29sZS5lcnJvcigiW1JvbGxiYXJdOiBJbnRlcm5hbCBlcnJvciIscil9
1415
- Y2F0Y2gocil7fX19fXZhciBsPTA7ZnVuY3Rpb24gaShyLGUpe3RoaXMub3B0aW9ucz1yLHRoaXMu
1416
- X3JvbGxiYXJPbGRPbkVycm9yPW51bGw7dmFyIG89bCsrO3RoaXMuc2hpbUlkPWZ1bmN0aW9uKCl7
1417
- cmV0dXJuIG99LCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuX3JvbGxiYXJTaGlt
1418
- cyYmKHdpbmRvdy5fcm9sbGJhclNoaW1zW29dPXtoYW5kbGVyOmUsbWVzc2FnZXM6W119KX12YXIg
1419
- cz1vKDQpLGQ9ZnVuY3Rpb24ocixlKXtyZXR1cm4gbmV3IGkocixlKX0sYz1mdW5jdGlvbihyKXty
1420
- ZXR1cm4gbmV3IHMoZCxyKX07ZnVuY3Rpb24gdShyKXtyZXR1cm4gYSgoZnVuY3Rpb24oKXt2YXIg
1421
- ZT10aGlzLG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLG49e3NoaW06
1422
- ZSxtZXRob2Q6cixhcmdzOm8sdHM6bmV3IERhdGV9O3dpbmRvdy5fcm9sbGJhclNoaW1zW3RoaXMu
1423
- c2hpbUlkKCldLm1lc3NhZ2VzLnB1c2gobil9KSl9aS5wcm90b3R5cGUubG9hZEZ1bGw9ZnVuY3Rp
1424
- b24ocixlLG8sbix0KXt2YXIgbD0hMSxpPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0Iikscz1lLmdl
1425
- dEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxkPXMucGFyZW50Tm9kZTtpLmNyb3NzT3Jp
1426
- Z2luPSIiLGkuc3JjPW4ucm9sbGJhckpzVXJsLG98fChpLmFzeW5jPSEwKSxpLm9ubG9hZD1pLm9u
1427
- cmVhZHlzdGF0ZWNoYW5nZT1hKChmdW5jdGlvbigpe2lmKCEobHx8dGhpcy5yZWFkeVN0YXRlJiYi
1428
- bG9hZGVkIiE9PXRoaXMucmVhZHlTdGF0ZSYmImNvbXBsZXRlIiE9PXRoaXMucmVhZHlTdGF0ZSkp
1429
- e2kub25sb2FkPWkub25yZWFkeXN0YXRlY2hhbmdlPW51bGw7dHJ5e2QucmVtb3ZlQ2hpbGQoaSl9
1430
- Y2F0Y2gocil7fWw9ITAsZnVuY3Rpb24oKXt2YXIgZTtpZih2b2lkIDA9PT1yLl9yb2xsYmFyRGlk
1431
- TG9hZCl7ZT1uZXcgRXJyb3IoInJvbGxiYXIuanMgZGlkIG5vdCBsb2FkIik7Zm9yKHZhciBvLG4s
1432
- YSxsLGk9MDtvPXIuX3JvbGxiYXJTaGltc1tpKytdOylmb3Iobz1vLm1lc3NhZ2VzfHxbXTtuPW8u
1433
- c2hpZnQoKTspZm9yKGE9bi5hcmdzfHxbXSxpPTA7aTxhLmxlbmd0aDsrK2kpaWYoImZ1bmN0aW9u
1434
- Ij09dHlwZW9mKGw9YVtpXSkpe2woZSk7YnJlYWt9fSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0KGUp
1435
- fSgpfX0pKSxkLmluc2VydEJlZm9yZShpLHMpfSxpLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIs
1436
- ZSxvKXt0cnl7dmFyIG47aWYobj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0
1437
- dXJuIGV8fHt9fSwiZnVuY3Rpb24iIT10eXBlb2YgcilyZXR1cm4gcjtpZihyLl9pc1dyYXApcmV0
1438
- dXJuIHI7aWYoIXIuX3JvbGxiYXJfd3JhcHBlZCYmKHIuX3JvbGxiYXJfd3JhcHBlZD1mdW5jdGlv
1439
- bigpe28mJiJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0cnl7
1440
- cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKG8pe3ZhciBlPW87dGhyb3cgZSYm
1441
- KCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bmV3IFN0cmluZyhlKSksZS5fcm9sbGJhckNvbnRleHQ9
1442
- bigpfHx7fSxlLl9yb2xsYmFyQ29udGV4dC5fd3JhcHBlZFNvdXJjZT1yLnRvU3RyaW5nKCksd2lu
1443
- ZG93Ll9yb2xsYmFyV3JhcHBlZEVycm9yPWUpLGV9fSxyLl9yb2xsYmFyX3dyYXBwZWQuX2lzV3Jh
1444
- cD0hMCxyLmhhc093blByb3BlcnR5KSlmb3IodmFyIHQgaW4gcilyLmhhc093blByb3BlcnR5KHQp
1445
- JiYoci5fcm9sbGJhcl93cmFwcGVkW3RdPXJbdF0pO3JldHVybiByLl9yb2xsYmFyX3dyYXBwZWR9
1446
- Y2F0Y2goZSl7cmV0dXJuIHJ9fTtmb3IodmFyIHA9ImxvZyxkZWJ1ZyxpbmZvLHdhcm4sd2Fybmlu
1447
- ZyxlcnJvcixjcml0aWNhbCxnbG9iYWwsY29uZmlndXJlLGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9u
1448
- LGhhbmRsZUFub255bW91c0Vycm9ycyxoYW5kbGVVbmhhbmRsZWRSZWplY3Rpb24sY2FwdHVyZUV2
1449
- ZW50LGNhcHR1cmVEb21Db250ZW50TG9hZGVkLGNhcHR1cmVMb2FkIi5zcGxpdCgiLCIpLGY9MDtm
1450
- PHAubGVuZ3RoOysrZilpLnByb3RvdHlwZVtwW2ZdXT11KHBbZl0pO3IuZXhwb3J0cz17c2V0dXBT
1451
- aGltOmZ1bmN0aW9uKHIsZSl7aWYocil7dmFyIG89ZS5nbG9iYWxBbGlhc3x8IlJvbGxiYXIiO2lm
1452
- KCJvYmplY3QiPT10eXBlb2YgcltvXSlyZXR1cm4gcltvXTtyLl9yb2xsYmFyU2hpbXM9e30sci5f
1453
- cm9sbGJhcldyYXBwZWRFcnJvcj1udWxsO3ZhciBsPW5ldyBjKGUpO3JldHVybiBhKChmdW5jdGlv
1454
- bigpe2UuY2FwdHVyZVVuY2F1Z2h0JiYobC5fcm9sbGJhck9sZE9uRXJyb3I9ci5vbmVycm9yLG4u
1455
- Y2FwdHVyZVVuY2F1Z2h0RXhjZXB0aW9ucyhyLGwsITApLGUud3JhcEdsb2JhbEV2ZW50SGFuZGxl
1456
- cnMmJnQocixsLCEwKSksZS5jYXB0dXJlVW5oYW5kbGVkUmVqZWN0aW9ucyYmbi5jYXB0dXJlVW5o
1457
- YW5kbGVkUmVqZWN0aW9ucyhyLGwsITApO3ZhciBhPWUuYXV0b0luc3RydW1lbnQ7cmV0dXJuITEh
1458
- PT1lLmVuYWJsZWQmJih2b2lkIDA9PT1hfHwhMD09PWF8fCJvYmplY3QiPT10eXBlb2YgYSYmYS5u
1459
- ZXR3b3JrKSYmci5hZGRFdmVudExpc3RlbmVyJiYoci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixs
1460
- LmNhcHR1cmVMb2FkLmJpbmQobCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRl
1461
- ZCIsbC5jYXB0dXJlRG9tQ29udGVudExvYWRlZC5iaW5kKGwpKSkscltvXT1sLGx9KSkoKX19LFJv
1462
- bGxiYXI6Y319LGZ1bmN0aW9uKHIsZSxvKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihyLGUsbyxu
1463
- KXtyLl9yb2xsYmFyV3JhcHBlZEVycm9yJiYobls0XXx8KG5bNF09ci5fcm9sbGJhcldyYXBwZWRF
1464
- cnJvciksbls1XXx8KG5bNV09ci5fcm9sbGJhcldyYXBwZWRFcnJvci5fcm9sbGJhckNvbnRleHQp
1465
- LHIuX3JvbGxiYXJXcmFwcGVkRXJyb3I9bnVsbCk7dmFyIHQ9ZS5oYW5kbGVVbmNhdWdodEV4Y2Vw
1466
- dGlvbi5hcHBseShlLG4pO28mJm8uYXBwbHkocixuKSwiYW5vbnltb3VzIj09PXQmJihlLmFub255
1467
- bW91c0Vycm9yc1BlbmRpbmcrPTEpfXIuZXhwb3J0cz17Y2FwdHVyZVVuY2F1Z2h0RXhjZXB0aW9u
1468
- czpmdW5jdGlvbihyLGUsbyl7aWYocil7dmFyIHQ7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX3Jv
1469
- bGxiYXJPbGRPbkVycm9yKXQ9ZS5fcm9sbGJhck9sZE9uRXJyb3I7ZWxzZSBpZihyLm9uZXJyb3Ip
1470
- e2Zvcih0PXIub25lcnJvcjt0Ll9yb2xsYmFyT2xkT25FcnJvcjspdD10Ll9yb2xsYmFyT2xkT25F
1471
- cnJvcjtlLl9yb2xsYmFyT2xkT25FcnJvcj10fWUuaGFuZGxlQW5vbnltb3VzRXJyb3JzKCk7dmFy
1472
- IGE9ZnVuY3Rpb24oKXt2YXIgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
1473
- MCk7bihyLGUsdCxvKX07byYmKGEuX3JvbGxiYXJPbGRPbkVycm9yPXQpLHIub25lcnJvcj1hfX0s
1474
- Y2FwdHVyZVVuaGFuZGxlZFJlamVjdGlvbnM6ZnVuY3Rpb24ocixlLG8pe2lmKHIpeyJmdW5jdGlv
1475
- biI9PXR5cGVvZiByLl9yb2xsYmFyVVJIJiZyLl9yb2xsYmFyVVJILmJlbG9uZ3NUb1NoaW0mJnIu
1476
- cmVtb3ZlRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIixyLl9yb2xsYmFyVVJIKTt2
1477
- YXIgbj1mdW5jdGlvbihyKXt2YXIgbyxuLHQ7dHJ5e289ci5yZWFzb259Y2F0Y2gocil7bz12b2lk
1478
- IDB9dHJ5e249ci5wcm9taXNlfWNhdGNoKHIpe249Ilt1bmhhbmRsZWRyZWplY3Rpb25dIGVycm9y
1479
- IGdldHRpbmcgYHByb21pc2VgIGZyb20gZXZlbnQifXRyeXt0PXIuZGV0YWlsLCFvJiZ0JiYobz10
1480
- LnJlYXNvbixuPXQucHJvbWlzZSl9Y2F0Y2gocil7fW98fChvPSJbdW5oYW5kbGVkcmVqZWN0aW9u
1481
- XSBlcnJvciBnZXR0aW5nIGByZWFzb25gIGZyb20gZXZlbnQiKSxlJiZlLmhhbmRsZVVuaGFuZGxl
1482
- ZFJlamVjdGlvbiYmZS5oYW5kbGVVbmhhbmRsZWRSZWplY3Rpb24obyxuKX07bi5iZWxvbmdzVG9T
1483
- aGltPW8sci5fcm9sbGJhclVSSD1uLHIuYWRkRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0
1484
- aW9uIixuKX19fX0sZnVuY3Rpb24ocixlLG8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHIsZSxv
1485
- KXtpZihlLmhhc093blByb3BlcnR5JiZlLmhhc093blByb3BlcnR5KCJhZGRFdmVudExpc3RlbmVy
1486
- Iikpe2Zvcih2YXIgbj1lLmFkZEV2ZW50TGlzdGVuZXI7bi5fcm9sbGJhck9sZEFkZCYmbi5iZWxv
1487
- bmdzVG9TaGltOyluPW4uX3JvbGxiYXJPbGRBZGQ7dmFyIHQ9ZnVuY3Rpb24oZSxvLHQpe24uY2Fs
1488
- bCh0aGlzLGUsci53cmFwKG8pLHQpfTt0Ll9yb2xsYmFyT2xkQWRkPW4sdC5iZWxvbmdzVG9TaGlt
1489
- PW8sZS5hZGRFdmVudExpc3RlbmVyPXQ7Zm9yKHZhciBhPWUucmVtb3ZlRXZlbnRMaXN0ZW5lcjth
1490
- Ll9yb2xsYmFyT2xkUmVtb3ZlJiZhLmJlbG9uZ3NUb1NoaW07KWE9YS5fcm9sbGJhck9sZFJlbW92
1491
- ZTt2YXIgbD1mdW5jdGlvbihyLGUsbyl7YS5jYWxsKHRoaXMscixlJiZlLl9yb2xsYmFyX3dyYXBw
1492
- ZWR8fGUsbyl9O2wuX3JvbGxiYXJPbGRSZW1vdmU9YSxsLmJlbG9uZ3NUb1NoaW09byxlLnJlbW92
1493
- ZUV2ZW50TGlzdGVuZXI9bH19ci5leHBvcnRzPWZ1bmN0aW9uKHIsZSxvKXtpZihyKXt2YXIgdCxh
1494
- LGw9IkV2ZW50VGFyZ2V0LFdpbmRvdyxOb2RlLEFwcGxpY2F0aW9uQ2FjaGUsQXVkaW9UcmFja0xp
1495
- c3QsQ2hhbm5lbE1lcmdlck5vZGUsQ3J5cHRvT3BlcmF0aW9uLEV2ZW50U291cmNlLEZpbGVSZWFk
1496
- ZXIsSFRNTFVua25vd25FbGVtZW50LElEQkRhdGFiYXNlLElEQlJlcXVlc3QsSURCVHJhbnNhY3Rp
1497
- b24sS2V5T3BlcmF0aW9uLE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxNb2RhbFdpbmRvdyxO
1498
- b3RpZmljYXRpb24sU1ZHRWxlbWVudEluc3RhbmNlLFNjcmVlbixUZXh0VHJhY2ssVGV4dFRyYWNr
1499
- Q3VlLFRleHRUcmFja0xpc3QsV2ViU29ja2V0LFdlYlNvY2tldFdvcmtlcixXb3JrZXIsWE1MSHR0
1500
- cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCIu
1501
- c3BsaXQoIiwiKTtmb3IodD0wO3Q8bC5sZW5ndGg7Kyt0KXJbYT1sW3RdXSYmclthXS5wcm90b3R5
1502
- cGUmJm4oZSxyW2FdLnByb3RvdHlwZSxvKX19fSxmdW5jdGlvbihyLGUsbyl7InVzZSBzdHJpY3Qi
1503
- O2Z1bmN0aW9uIG4ocixlKXt0aGlzLmltcGw9cihlLHRoaXMpLHRoaXMub3B0aW9ucz1lLGZ1bmN0
1504
- aW9uKHIpe2Zvcih2YXIgZT1mdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1BcnJh
1505
- eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7aWYodGhpcy5pbXBsW3JdKXJldHVy
1506
- biB0aGlzLmltcGxbcl0uYXBwbHkodGhpcy5pbXBsLGUpfX0sbz0ibG9nLGRlYnVnLGluZm8sd2Fy
1507
- bix3YXJuaW5nLGVycm9yLGNyaXRpY2FsLGdsb2JhbCxjb25maWd1cmUsaGFuZGxlVW5jYXVnaHRF
1508
- eGNlcHRpb24saGFuZGxlQW5vbnltb3VzRXJyb3JzLGhhbmRsZVVuaGFuZGxlZFJlamVjdGlvbixf
1509
- Y3JlYXRlSXRlbSx3cmFwLGxvYWRGdWxsLHNoaW1JZCxjYXB0dXJlRXZlbnQsY2FwdHVyZURvbUNv
1510
- bnRlbnRMb2FkZWQsY2FwdHVyZUxvYWQiLnNwbGl0KCIsIiksbj0wO248by5sZW5ndGg7bisrKXJb
1511
- b1tuXV09ZShvW25dKX0obi5wcm90b3R5cGUpfW4ucHJvdG90eXBlLl9zd2FwQW5kUHJvY2Vzc01l
1512
- c3NhZ2VzPWZ1bmN0aW9uKHIsZSl7dmFyIG8sbix0O2Zvcih0aGlzLmltcGw9cih0aGlzLm9wdGlv
1513
- bnMpO289ZS5zaGlmdCgpOyluPW8ubWV0aG9kLHQ9by5hcmdzLHRoaXNbbl0mJiJmdW5jdGlvbiI9
1514
- PXR5cGVvZiB0aGlzW25dJiYoImNhcHR1cmVEb21Db250ZW50TG9hZGVkIj09PW58fCJjYXB0dXJl
1515
- TG9hZCI9PT1uP3RoaXNbbl0uYXBwbHkodGhpcyxbdFswXSxvLnRzXSk6dGhpc1tuXS5hcHBseSh0
1516
- aGlzLHQpKTtyZXR1cm4gdGhpc30sci5leHBvcnRzPW59LGZ1bmN0aW9uKHIsZSxvKXsidXNlIHN0
1517
- cmljdCI7ci5leHBvcnRzPWZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbihlKXtpZighZSYmIXdp
1518
- bmRvdy5fcm9sbGJhckluaXRpYWxpemVkKXtmb3IodmFyIG8sbix0PShyPXJ8fHt9KS5nbG9iYWxB
1519
- bGlhc3x8IlJvbGxiYXIiLGE9d2luZG93LnJvbGxiYXIsbD1mdW5jdGlvbihyKXtyZXR1cm4gbmV3
1520
- IGEocil9LGk9MDtvPXdpbmRvdy5fcm9sbGJhclNoaW1zW2krK107KW58fChuPW8uaGFuZGxlciks
1521
- by5oYW5kbGVyLl9zd2FwQW5kUHJvY2Vzc01lc3NhZ2VzKGwsby5tZXNzYWdlcyk7d2luZG93W3Rd
1522
- PW4sd2luZG93Ll9yb2xsYmFySW5pdGlhbGl6ZWQ9ITB9fX19XSk7Ci8vIEVuZCBSb2xsYmFyIFNu
1523
- aXBwZXQ8L3NjcmlwdD48c2NyaXB0PndpbmRvdy5BbGdvbGlhT3B0cyA9IHsia2V5IjoiT0RjNE9U
1524
- RXhZakUzTWpNMk16a3pPREJoTm1FMU9XRmlZalJsWkRRNU1UTmxORE5qWXpRMFpHVTJNR0ZpTm1R
1525
- ek0yWTFOV1UwTVdZd01qUTVOakk1WW5SaFowWnBiSFJsY25NOUpUVkNKVFZDSlRJeWNIVmliR2xq
1526
- SlRJeUpUSkRKVEl5WW1GMFkyaGZkekl3TWpFbE1qSWxNa01sTWpKaWIyOXJabUZqWlY5amFHRnVi
1527
- bVZzWDJGc2JDVXlNaVV5UXlVeU1tSnZiMnRtWVdObFgyTm9ZVzV1Wld4ZllXNXViM1Z1WTJWdFpX
1528
- NTBjeVV5TWlVeVF5VXlNbUp2YjJ0bVlXTmxYMk5vWVc1dVpXeGZZMnhoYzNOcFptbGxaSE1sTWpJ
1529
- bE1rTWxNakppYjI5clptRmpaVjlqYUdGdWJtVnNYMlpsWVhSMWNtVmtKVEl5SlRKREpUSXlZbTl2
1530
- YTJaaFkyVmZZMmhoYm01bGJGOW5aVzVsY21Gc0pUSXlKVEpESlRJeVltOXZhMlpoWTJWZlkyaGhi
1531
- bTVsYkY5c1lYVnVZMmhmWW05dmEyWmhZMlVsTWpJbE1rTWxNakppYjI5clptRmpaVjlqYUdGdWJt
1532
- VnNYM0psWTNKMWFYUnBibWNsTWpJbE1rTWxNakppYjI5clptRmpaVjlqYUdGdWJtVnNYM2N5TURJ
1533
- eEpUSXlKVEpESlRJeVltOXZhMlpoWTJWZlkyaGhibTVsYkY5M01qQXlNVjh6SlRJeUpUSkRKVEl5
1534
- WVdOMGFYWmxYMlp2ZFc1a1pYSnpKVEl5SlRKREpUSXlaR1JoZVY5aVlYUmphRjl6TWpBeU15VXlN
1535
- aVV5UXlVeU1tRnNiRjltYjNWdVpHVnljeVV5TWlVeVF5VXlNbmRoWVhOZllXTmpaWE56SlRJeUpU
1536
- SkRKVEl5Wm5WdVpISmhhWE5wYm1jbE1qSWxNa01sTWpKa1pXRnNjeVV6UVdGMVpHbGxibU5sSlRO
1537
- QllXeHNYMlp2ZFc1a1pYSnpKVEl5SlRKREpUSXlaR1ZoYkhNbE0wRmhkV1JwWlc1alpTVXpRV0Zq
1538
- ZEdsMlpWOW1iM1Z1WkdWeWN5VXlNaVV5UXlVeU1tUmxZV3h6SlROQmIzZHVaV1JmWW5sZmRYTmxj
1539
- aVV6UVRFNE1qZzFNeVV5TWlVeVF5VXlNbVJsWVd4ekpUTkJiM2R1WldSZllubGZZMjl0Y0dGdWVT
1540
- VXpRVEl6TVRBMUpUSXlKVFZFSlRKREpUSXlMV2hwWkdWZmFtOWljMTl3Y205bWFXeGxYMlp5YjIx
1541
- ZlkyOXRjR0Z1ZVY4eU16RTFOU1V5TWlVMVJDWjFjMlZ5Vkc5clpXNDlNVW93Vlc1d04zRm1ibVZq
1542
- ZVRWVWVtTnNOV0ZhY25Gd2VGUTVZMVZHY1ROaVlsVk5NbmxKUXlVeVFrNHdKVE5FSm1GdVlXeDVk
1543
- R2xqYzFSaFozTTlKVFZDSlRJeVltOXZhMlpoWTJVbE1qSWxNa01sTWpKaGJIVnRibWtsTWpJbE1r
1544
- TWxNakpoWTNScGRtVWxNaklsTlVRPSIsImFwcCI6IjQ1QldaSjFTR0MiLCJ0YWdfZmlsdGVycyI6
1545
- IihwdWJsaWMsYmF0Y2hfdzIwMjEsYm9va2ZhY2VfY2hhbm5lbF9hbGwsYm9va2ZhY2VfY2hhbm5l
1546
- bF9hbm5vdW5jZW1lbnRzLGJvb2tmYWNlX2NoYW5uZWxfY2xhc3NpZmllZHMsYm9va2ZhY2VfY2hh
1547
- bm5lbF9mZWF0dXJlZCxib29rZmFjZV9jaGFubmVsX2dlbmVyYWwsYm9va2ZhY2VfY2hhbm5lbF9s
1548
- YXVuY2hfYm9va2ZhY2UsYm9va2ZhY2VfY2hhbm5lbF9yZWNydWl0aW5nLGJvb2tmYWNlX2NoYW5u
1549
- ZWxfdzIwMjEsYm9va2ZhY2VfY2hhbm5lbF93MjAyMV8zLGFjdGl2ZV9mb3VuZGVycyxkZGF5X2Jh
1550
- dGNoX3MyMDIzLGFsbF9mb3VuZGVycyx3YWFzX2FjY2VzcyxmdW5kcmFpc2luZyxkZWFsczphdWRp
1551
- ZW5jZTphbGxfZm91bmRlcnMsZGVhbHM6YXVkaWVuY2U6YWN0aXZlX2ZvdW5kZXJzLGRlYWxzOm93
1552
- bmVkX2J5X3VzZXI6MTgyODUzLGRlYWxzOm93bmVkX2J5X2NvbXBhbnk6MjMxMDUsLWhpZGVfam9i
1553
- c19wcm9maWxlX2Zyb21fY29tcGFueV8yMzE1NSkifTs8L3NjcmlwdD48bWV0YSBuYW1lPSJjc3Jm
1554
- LXBhcmFtIiBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIC8+CjxtZXRhIG5hbWU9ImNzcmYt
1555
- dG9rZW4iIGNvbnRlbnQ9InUtMnVDZmUyUFBYazkyWnVrZGtzNjJtSWpaMkJIc2xTNG1HcGhJUjFi
1556
- SEI5ek5kQmRGMEFrSnVzSW9RMU9rWW9heUtVYWtxM3BFLTZDTlBwRVpEMUd3IiAvPjxsaW5rIGhy
1557
- ZWY9Ii9hc3NldHMvZmF2aWNvbi1jOGE5MTRlZWViYTlmZTZmN2E4NjNiMzU2MDhiNTVhZWVkZDdj
1558
- MWZmNDA5Yzk3YjllY2I5NmI3YTZjMjc4ZDcwLmljbyIgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94
1559
- LWljb24iIC8+PGxpbmsgaHJlZj0iL2Fzc2V0cy9mYXZpY29uLWM4YTkxNGVlZWJhOWZlNmY3YTg2
1560
- M2IzNTYwOGI1NWFlZWRkN2MxZmY0MDljOTdiOWVjYjk2YjdhNmMyNzhkNzAuaWNvIiByZWw9InNo
1561
- b3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgLz48bGluayBocmVmPSIvbWFuaWZlc3Qu
1562
- anNvbiIgcmVsPSJtYW5pZmVzdCIgLz48bGluayBocmVmPSIvL2NkbmpzLmNsb3VkZmxhcmUuY29t
1563
- L2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIiBy
1564
- ZWw9InN0eWxlc2hlZXQiIC8+PGxpbmsgaHJlZj0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4
1565
- L2xpYnMvaW9uaWNvbnMvMy4wLjAvY3NzL2lvbmljb25zLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVl
1566
- dCIgLz48bGluayBocmVmPSJodHRwczovL2Jvb2tmYWNlLnljb21iaW5hdG9yLmNvbS9zZWFyY2gv
1567
- b3BlbnNlYXJjaD90b2tlbj1lYTc0MmZjNy0zYmMzLTRjNTktOGU3MS04MDk4MzIyN2E1N2YiIHJl
1568
- bD0ic2VhcmNoIiB0aXRsZT0iQm9va2ZhY2UiIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hk
1569
- ZXNjcmlwdGlvbit4bWwiIC8+PG1ldGEgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0
1570
- aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyIgbmFtZT0idmll
1571
- d3BvcnQiIC8+PG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
1572
- c2NyaXB0Ij53aW5kb3cuTlJFVU18fChOUkVVTT17fSk7TlJFVU0uaW5mbz17ImJlYWNvbiI6ImJh
1573
- bS5uci1kYXRhLm5ldCIsImVycm9yQmVhY29uIjoiYmFtLm5yLWRhdGEubmV0IiwibGljZW5zZUtl
1574
- eSI6ImY2MDRhNTI3YjAiLCJhcHBsaWNhdGlvbklEIjoiOTc5NjM0MTgiLCJ0cmFuc2FjdGlvbk5h
1575
- bWUiOiJjZzBOUWhGZVZWZ0FFeGRlVjF3SFRGOE5WVnhNIiwicXVldWVUaW1lIjowLCJhcHBsaWNh
1576
- dGlvblRpbWUiOjY5LCJhZ2VudCI6IiJ9PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
1577
- c2NyaXB0Ij4od2luZG93Lk5SRVVNfHwoTlJFVU09e30pKS5pbml0PXthamF4OntkZW55X2xpc3Q6
1578
- WyJiYW0ubnItZGF0YS5uZXQiXX19Oyh3aW5kb3cuTlJFVU18fChOUkVVTT17fSkpLmxvYWRlcl9j
1579
- b25maWc9e2xpY2Vuc2VLZXk6ImY2MDRhNTI3YjAiLGFwcGxpY2F0aW9uSUQ6Ijk3OTYzNDE4In07
1580
- Oy8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIG5yLWxvYWRlci1ydW0tMS4y
1581
- MzguMC5taW4uanMuTElDRU5TRS50eHQgKi8KKCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHQsbj17
1582
- NzYzOihlLHQsbik9PntuLmQodCx7UF86KCk9PmYsTXQ6KCk9PnAsQzU6KCk9PnMsREw6KCk9Pm0s
1583
- T1A6KCk9PmosbEY6KCk9PlQsWXU6KCk9PnksRGc6KCk9PmcsQ1g6KCk9PmMsR0U6KCk9PmIsc1U6
1584
- KCk9PkV9KTt2YXIgcj1uKDYzMiksaT1uKDU2Nyk7Y29uc3Qgbz17YmVhY29uOnIuY2UuYmVhY29u
1585
- LGVycm9yQmVhY29uOnIuY2UuZXJyb3JCZWFjb24sbGljZW5zZUtleTp2b2lkIDAsYXBwbGljYXRp
1586
- b25JRDp2b2lkIDAsc2E6dm9pZCAwLHF1ZXVlVGltZTp2b2lkIDAsYXBwbGljYXRpb25UaW1lOnZv
1587
- aWQgMCx0dEd1aWQ6dm9pZCAwLHVzZXI6dm9pZCAwLGFjY291bnQ6dm9pZCAwLHByb2R1Y3Q6dm9p
1588
- ZCAwLGV4dHJhOnZvaWQgMCxqc0F0dHJpYnV0ZXM6e30sdXNlckF0dHJpYnV0ZXM6dm9pZCAwLGF0
1589
- dHM6dm9pZCAwLHRyYW5zYWN0aW9uTmFtZTp2b2lkIDAsdE5hbWVQbGFpbjp2b2lkIDB9LGE9e307
1590
- ZnVuY3Rpb24gcyhlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkFsbCBpbmZvIG9iamVjdHMgcmVx
1591
- dWlyZSBhbiBhZ2VudCBpZGVudGlmaWVyISIpO2lmKCFhW2VdKXRocm93IG5ldyBFcnJvcigiSW5m
1592
- byBmb3IgIi5jb25jYXQoZSwiIHdhcyBuZXZlciBzZXQiKSk7cmV0dXJuIGFbZV19ZnVuY3Rpb24g
1593
- YyhlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQWxsIGluZm8gb2JqZWN0cyByZXF1aXJlIGFu
1594
- IGFnZW50IGlkZW50aWZpZXIhIik7YVtlXT0oMCxpLkQpKHQsbyksKDAsci5ReSkoZSxhW2VdLCJp
1595
- bmZvIil9dmFyIGQ9big1Nik7Y29uc3QgdT0oKT0+e2NvbnN0IGU9e2Jsb2NrU2VsZWN0b3I6Iltk
1596
- YXRhLW5yLWJsb2NrXSIsbWFza0lucHV0T3B0aW9uczp7cGFzc3dvcmQ6ITB9fTtyZXR1cm57YWxs
1597
- b3dfYmZjYWNoZTohMCxwcml2YWN5Ontjb29raWVzX2VuYWJsZWQ6ITB9LGFqYXg6e2RlbnlfbGlz
1598
- dDp2b2lkIDAsYmxvY2tfaW50ZXJuYWw6ITAsZW5hYmxlZDohMCxoYXJ2ZXN0VGltZVNlY29uZHM6
1599
- MTB9LGRpc3RyaWJ1dGVkX3RyYWNpbmc6e2VuYWJsZWQ6dm9pZCAwLGV4Y2x1ZGVfbmV3cmVsaWNf
1600
- aGVhZGVyOnZvaWQgMCxjb3JzX3VzZV9uZXdyZWxpY19oZWFkZXI6dm9pZCAwLGNvcnNfdXNlX3Ry
1601
- YWNlY29udGV4dF9oZWFkZXJzOnZvaWQgMCxhbGxvd2VkX29yaWdpbnM6dm9pZCAwfSxzZXNzaW9u
1602
- Ontkb21haW46dm9pZCAwLGV4cGlyZXNNczpkLm9ELGluYWN0aXZlTXM6ZC5IYn0sc3NsOnZvaWQg
1603
- MCxvYmZ1c2NhdGU6dm9pZCAwLGpzZXJyb3JzOntlbmFibGVkOiEwLGhhcnZlc3RUaW1lU2Vjb25k
1604
- czoxMH0sbWV0cmljczp7ZW5hYmxlZDohMH0scGFnZV9hY3Rpb246e2VuYWJsZWQ6ITAsaGFydmVz
1605
- dFRpbWVTZWNvbmRzOjMwfSxwYWdlX3ZpZXdfZXZlbnQ6e2VuYWJsZWQ6ITB9LHBhZ2Vfdmlld190
1606
- aW1pbmc6e2VuYWJsZWQ6ITAsaGFydmVzdFRpbWVTZWNvbmRzOjMwLGxvbmdfdGFzazohMX0sc2Vz
1607
- c2lvbl90cmFjZTp7ZW5hYmxlZDohMCxoYXJ2ZXN0VGltZVNlY29uZHM6MTB9LGhhcnZlc3Q6e3Rv
1608
- b01hbnlSZXF1ZXN0c0RlbGF5OjYwfSxzZXNzaW9uX3JlcGxheTp7ZW5hYmxlZDohMSxoYXJ2ZXN0
1609
- VGltZVNlY29uZHM6NjAsc2FtcGxlUmF0ZTouMSxlcnJvclNhbXBsZVJhdGU6LjEsbWFza1RleHRT
1610
- ZWxlY3RvcjoiKiIsbWFza0FsbElucHV0czohMCxnZXQgYmxvY2tDbGFzcygpe3JldHVybiJuci1i
1611
- bG9jayJ9LGdldCBpZ25vcmVDbGFzcygpe3JldHVybiJuci1pZ25vcmUifSxnZXQgbWFza1RleHRD
1612
- bGFzcygpe3JldHVybiJuci1tYXNrIn0sZ2V0IGJsb2NrU2VsZWN0b3IoKXtyZXR1cm4gZS5ibG9j
1613
- a1NlbGVjdG9yfSxzZXQgYmxvY2tTZWxlY3Rvcih0KXtlLmJsb2NrU2VsZWN0b3IrPSIsIi5jb25j
1614
- YXQodCl9LGdldCBtYXNrSW5wdXRPcHRpb25zKCl7cmV0dXJuIGUubWFza0lucHV0T3B0aW9uc30s
1615
- c2V0IG1hc2tJbnB1dE9wdGlvbnModCl7ZS5tYXNrSW5wdXRPcHRpb25zPXsuLi50LHBhc3N3b3Jk
1616
- OiEwfX19LHNwYTp7ZW5hYmxlZDohMCxoYXJ2ZXN0VGltZVNlY29uZHM6MTB9fX0sbD17fTtmdW5j
1617
- dGlvbiBmKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQWxsIGNvbmZpZ3VyYXRpb24gb2JqZWN0
1618
- cyByZXF1aXJlIGFuIGFnZW50IGlkZW50aWZpZXIhIik7aWYoIWxbZV0pdGhyb3cgbmV3IEVycm9y
1619
- KCJDb25maWd1cmF0aW9uIGZvciAiLmNvbmNhdChlLCIgd2FzIG5ldmVyIHNldCIpKTtyZXR1cm4g
1620
- bFtlXX1mdW5jdGlvbiBnKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJBbGwgY29uZmlndXJh
1621
- dGlvbiBvYmplY3RzIHJlcXVpcmUgYW4gYWdlbnQgaWRlbnRpZmllciEiKTtsW2VdPSgwLGkuRCko
1622
- dCx1KCkpLCgwLHIuUXkpKGUsbFtlXSwiY29uZmlnIil9ZnVuY3Rpb24gcChlLHQpe2lmKCFlKXRo
1623
- cm93IG5ldyBFcnJvcigiQWxsIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyByZXF1aXJlIGFuIGFnZW50
1624
- IGlkZW50aWZpZXIhIik7dmFyIG49ZihlKTtpZihuKXtmb3IodmFyIHI9dC5zcGxpdCgiLiIpLGk9
1625
- MDtpPHIubGVuZ3RoLTE7aSsrKWlmKCJvYmplY3QiIT10eXBlb2Yobj1uW3JbaV1dKSlyZXR1cm47
1626
- bj1uW3Jbci5sZW5ndGgtMV1dfXJldHVybiBufWNvbnN0IGg9e2FjY291bnRJRDp2b2lkIDAsdHJ1
1627
- c3RLZXk6dm9pZCAwLGFnZW50SUQ6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGFwcGxpY2F0aW9u
1628
- SUQ6dm9pZCAwLHhwaWQ6dm9pZCAwfSx2PXt9O2Z1bmN0aW9uIG0oZSl7aWYoIWUpdGhyb3cgbmV3
1629
- IEVycm9yKCJBbGwgbG9hZGVyLWNvbmZpZyBvYmplY3RzIHJlcXVpcmUgYW4gYWdlbnQgaWRlbnRp
1630
- ZmllciEiKTtpZighdltlXSl0aHJvdyBuZXcgRXJyb3IoIkxvYWRlckNvbmZpZyBmb3IgIi5jb25j
1631
- YXQoZSwiIHdhcyBuZXZlciBzZXQiKSk7cmV0dXJuIHZbZV19ZnVuY3Rpb24gYihlLHQpe2lmKCFl
1632
- KXRocm93IG5ldyBFcnJvcigiQWxsIGxvYWRlci1jb25maWcgb2JqZWN0cyByZXF1aXJlIGFuIGFn
1633
- ZW50IGlkZW50aWZpZXIhIik7dltlXT0oMCxpLkQpKHQsaCksKDAsci5ReSkoZSx2W2VdLCJsb2Fk
1634
- ZXJfY29uZmlnIil9Y29uc3QgeT0oMCxyLm1GKSgpLm87dmFyIHc9bigzODUpLEE9big4MTgpO2Nv
1635
- bnN0IHg9e2J1aWxkRW52OkEuUmUsYnl0ZXNTZW50Ont9LHF1ZXJ5Qnl0ZXNTZW50Ont9LGN1c3Rv
1636
- bVRyYW5zYWN0aW9uOnZvaWQgMCxkaXNhYmxlZDohMSxkaXN0TWV0aG9kOkEuZ0YsaXNvbGF0ZWRC
1637
- YWNrbG9nOiExLGxvYWRlclR5cGU6dm9pZCAwLG1heEJ5dGVzOjNlNCxvZmZzZXQ6TWF0aC5mbG9v
1638
- cih3Ll9BPy5wZXJmb3JtYW5jZT8udGltZU9yaWdpbnx8dy5fQT8ucGVyZm9ybWFuY2U/LnRpbWlu
1639
- Zz8ubmF2aWdhdGlvblN0YXJ0fHxEYXRlLm5vdygpKSxvbmVycm9yOnZvaWQgMCxvcmlnaW46IiIr
1640
- dy5fQS5sb2NhdGlvbixwdGlkOnZvaWQgMCxyZWxlYXNlSWRzOnt9LHNlc3Npb246dm9pZCAwLHho
1641
- cldyYXBwYWJsZToiZnVuY3Rpb24iPT10eXBlb2Ygdy5fQS5YTUxIdHRwUmVxdWVzdD8ucHJvdG90
1642
- eXBlPy5hZGRFdmVudExpc3RlbmVyLHZlcnNpb246QS5xNCxkZW55TGlzdDp2b2lkIDB9LEQ9e307
1643
- ZnVuY3Rpb24gaihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkFsbCBydW50aW1lIG9iamVjdHMg
1644
- cmVxdWlyZSBhbiBhZ2VudCBpZGVudGlmaWVyISIpO2lmKCFEW2VdKXRocm93IG5ldyBFcnJvcigi
1645
- UnVudGltZSBmb3IgIi5jb25jYXQoZSwiIHdhcyBuZXZlciBzZXQiKSk7cmV0dXJuIERbZV19ZnVu
1646
- Y3Rpb24gRShlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiQWxsIHJ1bnRpbWUgb2JqZWN0cyBy
1647
- ZXF1aXJlIGFuIGFnZW50IGlkZW50aWZpZXIhIik7RFtlXT0oMCxpLkQpKHQseCksKDAsci5ReSko
1648
- ZSxEW2VdLCJydW50aW1lIil9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dHJ5e2Nv
1649
- bnN0IHQ9cyhlKTtyZXR1cm4hIXQubGljZW5zZUtleSYmISF0LmVycm9yQmVhY29uJiYhIXQuYXBw
1650
- bGljYXRpb25JRH1jYXRjaChlKXtyZXR1cm4hMX19KGUpfX0sNTY3OihlLHQsbik9PntuLmQodCx7
1651
- RDooKT0+aX0pO3ZhciByPW4oNTApO2Z1bmN0aW9uIGkoZSx0KXt0cnl7aWYoIWV8fCJvYmplY3Qi
1652
- IT10eXBlb2YgZSlyZXR1cm4oMCxyLlopKCJTZXR0aW5nIGEgQ29uZmlndXJhYmxlIHJlcXVpcmVz
1653
- IGFuIG9iamVjdCBhcyBpbnB1dCIpO2lmKCF0fHwib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuKDAs
1654
- ci5aKSgiU2V0dGluZyBhIENvbmZpZ3VyYWJsZSByZXF1aXJlcyBhIG1vZGVsIHRvIHNldCBpdHMg
1655
- aW5pdGlhbCBwcm9wZXJ0aWVzIik7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90
1656
- b3R5cGVPZih0KSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSksbz0wPT09T2Jq
1657
- ZWN0LmtleXMobikubGVuZ3RoP2U6bjtmb3IobGV0IGEgaW4gbylpZih2b2lkIDAhPT1lW2FdKXRy
1658
- eXsib2JqZWN0Ij09dHlwZW9mIGVbYV0mJiJvYmplY3QiPT10eXBlb2YgdFthXT9uW2FdPWkoZVth
1659
- XSx0W2FdKTpuW2FdPWVbYV19Y2F0Y2goZSl7KDAsci5aKSgiQW4gZXJyb3Igb2NjdXJyZWQgd2hp
1660
- bGUgc2V0dGluZyBhIHByb3BlcnR5IG9mIGEgQ29uZmlndXJhYmxlIixlKX1yZXR1cm4gbn1jYXRj
1661
- aChlKXsoMCxyLlopKCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHNldHRpbmcgYSBDb25maWd1cmFi
1662
- bGUiLGUpfX19LDgxODooZSx0LG4pPT57bi5kKHQse1JlOigpPT5pLGdGOigpPT5vLHE0OigpPT5y
1663
- fSk7Y29uc3Qgcj0iMS4yMzguMCIsaT0iUFJPRCIsbz0iQ0ROIn0sMzg1OihlLHQsbik9PntuLmQo
1664
- dCx7SUY6KCk9PmMsTms6KCk9PnUsVHQ6KCk9PmEsX0E6KCk9Pm8saWw6KCk9PnIscEw6KCk9PnMs
1665
- djY6KCk9PmksdzE6KCk9PmR9KTtjb25zdCByPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYh
1666
- IXdpbmRvdy5kb2N1bWVudCxpPSJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUm
1667
- JigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxT
1668
- Y29wZSYmc2VsZi5uYXZpZ2F0b3IgaW5zdGFuY2VvZiBXb3JrZXJOYXZpZ2F0b3J8fCJ1bmRlZmlu
1669
- ZWQiIT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyBpbnN0YW5jZW9mIFdvcmtlckdsb2Jh
1670
- bFNjb3BlJiZnbG9iYWxUaGlzLm5hdmlnYXRvciBpbnN0YW5jZW9mIFdvcmtlck5hdmlnYXRvciks
1671
- bz1yP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYoInVuZGVm
1672
- aW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNl
1673
- bGZ8fCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyBpbnN0YW5jZW9m
1674
- IFdvcmtlckdsb2JhbFNjb3BlJiZnbG9iYWxUaGlzKSxhPShvPy5sb2NhdGlvbiwvaVBhZHxpUGhv
1675
- bmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkscz1hJiYidW5kZWZpbmVkIj09dHlw
1676
- ZW9mIFNoYXJlZFdvcmtlcixjPSgoKT0+e2NvbnN0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRj
1677
- aCgvRmlyZWZveFsvXHNdKFxkK1wuXGQrKS8pO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmxl
1678
- bmd0aD49Mj8rZVsxXTowfSkoKSxkPUJvb2xlYW4ociYmd2luZG93LmRvY3VtZW50LmRvY3VtZW50
1679
- TW9kZSksdT0hIW5hdmlnYXRvci5zZW5kQmVhY29ufSw3MTE6KGUsdCxuKT0+e24uZCh0LHt3Oigp
1680
- PT5vfSk7dmFyIHI9big1MCk7Y29uc3QgaT17YWdlbnRJZGVudGlmaWVyOiIiLGVlOnZvaWQgMH07
1681
- Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlKXt0cnl7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybigw
1682
- LHIuWikoInNoYXJlZCBjb250ZXh0IHJlcXVpcmVzIGFuIG9iamVjdCBhcyBpbnB1dCIpO3RoaXMu
1683
- c2hhcmVkQ29udGV4dD17fSxPYmplY3QuYXNzaWduKHRoaXMuc2hhcmVkQ29udGV4dCxpKSxPYmpl
1684
- Y3QuZW50cmllcyhlKS5mb3JFYWNoKChlPT57bGV0W3Qsbl09ZTtPYmplY3Qua2V5cyhpKS5pbmNs
1685
- dWRlcyh0KSYmKHRoaXMuc2hhcmVkQ29udGV4dFt0XT1uKX0pKX1jYXRjaChlKXsoMCxyLlopKCJB
1686
- biBlcnJvciBvY2N1cmVkIHdoaWxlIHNldHRpbmcgU2hhcmVkQ29udGV4dCIsZSl9fX19LDA6KGUs
1687
- dCxuKT0+e24uZCh0LHtMOigpPT51LFI6KCk9PmN9KTt2YXIgcj1uKDE0OCksaT1uKDI4NCksbz1u
1688
- KDMyMiksYT1uKDMyNSk7Y29uc3Qgcz17fTtmdW5jdGlvbiBjKGUsdCl7Y29uc3Qgbj17c3RhZ2Vk
1689
- OiExLHByaW9yaXR5OmEucFt0XXx8MH07ZChlKSxzW2VdLmdldCh0KXx8c1tlXS5zZXQodCxuKX1m
1690
- dW5jdGlvbiBkKGUpe2UmJihzW2VdfHwoc1tlXT1uZXcgTWFwKSl9ZnVuY3Rpb24gdSgpe2xldCBl
1691
- PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToi
1692
- Iix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx
1693
- XToiZmVhdHVyZSI7aWYoZChlKSwhZXx8IXNbZV0uZ2V0KHQpKXJldHVybiBhKHQpO3NbZV0uZ2V0
1694
- KHQpLnN0YWdlZD0hMDtjb25zdCBuPVsuLi5zW2VdXTtmdW5jdGlvbiBhKHQpe2NvbnN0IG49ZT9y
1695
- LmVlLmdldChlKTpyLmVlLGE9by5YLmhhbmRsZXJzO2lmKG4uYmFja2xvZyYmYSl7dmFyIHM9bi5i
1696
- YWNrbG9nW3RdLGM9YVt0XTtpZihjKXtmb3IodmFyIGQ9MDtzJiZkPHMubGVuZ3RoOysrZClsKHNb
1697
- ZF0sYyk7KDAsaS5EKShjLChmdW5jdGlvbihlLHQpeygwLGkuRCkodCwoZnVuY3Rpb24odCxuKXtu
1698
- WzBdLm9uKGUsblsxXSl9KSl9KSl9ZGVsZXRlIGFbdF0sbi5iYWNrbG9nW3RdPW51bGwsbi5lbWl0
1699
- KCJkcmFpbi0iK3QsW10pfX1uLmV2ZXJ5KChlPT57bGV0W3Qsbl09ZTtyZXR1cm4gbi5zdGFnZWR9
1700
- KSkmJihuLnNvcnQoKChlLHQpPT5lWzFdLnByaW9yaXR5LXRbMV0ucHJpb3JpdHkpKSxuLmZvckVh
1701
- Y2goKGU9PntsZXRbdF09ZTthKHQpfSkpKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49ZVsxXTsoMCxp
1702
- LkQpKHRbbl0sKGZ1bmN0aW9uKHQsbil7dmFyIHI9ZVswXTtpZihuWzBdPT09cil7dmFyIGk9blsx
1703
- XSxvPWVbM10sYT1lWzJdO2kuYXBwbHkobyxhKX19KSl9fSwxNDg6KGUsdCxuKT0+e24uZCh0LHtB
1704
- OigpPT5jLGVlOigpPT5kfSk7dmFyIHI9big2MzIpLGk9bigyMTApLG89big3NjMpO2NsYXNzIGF7
1705
- Y29uc3RydWN0b3IoZSl7dGhpcy5jb250ZXh0SWQ9ZX19dmFyIHM9bigxMTcpO2NvbnN0IGM9Im5y
1706
- QGNvbnRleHQ6Ii5jb25jYXQocy5hKSxkPWZ1bmN0aW9uIGUodCxuKXt2YXIgcj17fSxzPXt9LHU9
1707
- e30sZj0hMTt0cnl7Zj0xNj09PW4ubGVuZ3RoJiYoMCxvLk9QKShuKS5pc29sYXRlZEJhY2tsb2d9
1708
- Y2F0Y2goZSl7fXZhciBnPXtvbjpoLGFkZEV2ZW50TGlzdGVuZXI6aCxyZW1vdmVFdmVudExpc3Rl
1709
- bmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cltlXTtpZighbilyZXR1cm47Zm9yKHZhciBpPTA7aTxu
1710
- Lmxlbmd0aDtpKyspbltpXT09PXQmJm4uc3BsaWNlKGksMSl9LGVtaXQ6ZnVuY3Rpb24oZSxuLHIs
1711
- aSxvKXshMSE9PW8mJihvPSEwKTtpZihkLmFib3J0ZWQmJiFpKXJldHVybjt0JiZvJiZ0LmVtaXQo
1712
- ZSxuLHIpO2Zvcih2YXIgYT1wKHIpLGM9dihlKSx1PWMubGVuZ3RoLGw9MDtsPHU7bCsrKWNbbF0u
1713
- YXBwbHkoYSxuKTt2YXIgZj1iKClbc1tlXV07ZiYmZi5wdXNoKFtnLGUsbixhXSk7cmV0dXJuIGF9
1714
- LGdldDptLGxpc3RlbmVyczp2LGNvbnRleHQ6cCxidWZmZXI6ZnVuY3Rpb24oZSx0KXtjb25zdCBu
1715
- PWIoKTtpZih0PXR8fCJmZWF0dXJlIixnLmFib3J0ZWQpcmV0dXJuO09iamVjdC5lbnRyaWVzKGV8
1716
- fHt9KS5mb3JFYWNoKChlPT57bGV0W3IsaV09ZTtzW2ldPXQsdCBpbiBufHwoblt0XT1bXSl9KSl9
1717
- LGFib3J0OmwsYWJvcnRlZDohMSxpc0J1ZmZlcmluZzpmdW5jdGlvbihlKXtyZXR1cm4hIWIoKVtz
1718
- W2VdXX0sZGVidWdJZDpuLGJhY2tsb2c6Zj97fTp0JiYib2JqZWN0Ij09dHlwZW9mIHQuYmFja2xv
1719
- Zz90LmJhY2tsb2c6e319O3JldHVybiBnO2Z1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUgaW5zdGFu
1720
- Y2VvZiBhP2U6ZT8oMCxpLlgpKGUsYywoKCk9Pm5ldyBhKGMpKSk6bmV3IGEoYyl9ZnVuY3Rpb24g
1721
- aChlLHQpe3JbZV09dihlKS5jb25jYXQodCl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gcltlXXx8W119
1722
- ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdVt0XT11W3RdfHxlKGcsdCl9ZnVuY3Rpb24gYigpe3JldHVy
1723
- biBnLmJhY2tsb2d9fSh2b2lkIDAsImdsb2JhbEVFIiksdT0oMCxyLmZQKSgpO2Z1bmN0aW9uIGwo
1724
- KXtkLmFib3J0ZWQ9ITAsZC5iYWNrbG9nPXt9fXUuZWV8fCh1LmVlPWQpfSw1NDY6KGUsdCxuKT0+
1725
- e24uZCh0LHtFOigpPT5yLHA6KCk9Pml9KTt2YXIgcj1uKDE0OCkuZWUuZ2V0KCJoYW5kbGUiKTtm
1726
- dW5jdGlvbiBpKGUsdCxuLGksbyl7bz8oby5idWZmZXIoW2VdLGkpLG8uZW1pdChlLHQsbikpOihy
1727
- LmJ1ZmZlcihbZV0saSksci5lbWl0KGUsdCxuKSl9fSwzMjI6KGUsdCxuKT0+e24uZCh0LHtYOigp
1728
- PT5vfSk7dmFyIHI9big1NDYpO28ub249YTt2YXIgaT1vLmhhbmRsZXJzPXt9O2Z1bmN0aW9uIG8o
1729
- ZSx0LG4sbyl7YShvfHxyLkUsaSxlLHQsbil9ZnVuY3Rpb24gYShlLHQsbixpLG8pe298fChvPSJm
1730
- ZWF0dXJlIiksZXx8KGU9ci5FKTt2YXIgYT10W29dPXRbb118fHt9OyhhW25dPWFbbl18fFtdKS5w
1731
- dXNoKFtlLGldKX19LDIzOTooZSx0LG4pPT57bi5kKHQse2JQOigpPT5zLGl6OigpPT5jLG0kOigp
1732
- PT5hfSk7dmFyIHI9bigzODUpO2xldCBpPSExLG89ITE7dHJ5e2NvbnN0IGU9e2dldCBwYXNzaXZl
1733
- KCl7cmV0dXJuIGk9ITAsITF9LGdldCBzaWduYWwoKXtyZXR1cm4gbz0hMCwhMX19O3IuX0EuYWRk
1734
- RXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSxyLl9BLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRl
1735
- c3QiLG51bGwsZSl9Y2F0Y2goZSl7fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gaXx8bz97Y2FwdHVy
1736
- ZTohIWUscGFzc2l2ZTppLHNpZ25hbDp0fTohIWV9ZnVuY3Rpb24gcyhlLHQpe2xldCBuPWFyZ3Vt
1737
- ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0scj1hcmd1
1738
- bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
1739
- cihlLHQsYShuLHIpKX1mdW5jdGlvbiBjKGUsdCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2
1740
- b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxyPWFyZ3VtZW50cy5sZW5ndGg+Mz9h
1741
- cmd1bWVudHNbM106dm9pZCAwO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0LGEobixyKSl9
1742
- fSwxMTc6KGUsdCxuKT0+e24uZCh0LHthOigpPT5yfSk7Y29uc3Qgcj0oMCxuKDQwMikuUmwpKCl9
1743
- LDQwMjooZSx0LG4pPT57bi5kKHQse1JsOigpPT5hLGt5OigpPT5zfSk7dmFyIHI9bigzODUpO2Nv
1744
- bnN0IGk9Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCI7ZnVuY3Rpb24gbyhl
1745
- LHQpe3JldHVybiBlPzE1JmVbdF06MTYqTWF0aC5yYW5kb20oKXwwfWZ1bmN0aW9uIGEoKXtjb25z
1746
- dCBlPXIuX0E/LmNyeXB0b3x8ci5fQT8ubXNDcnlwdG87bGV0IHQsbj0wO3JldHVybiBlJiZlLmdl
1747
- dFJhbmRvbVZhbHVlcyYmKHQ9ZS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzEpKSks
1748
- aS5zcGxpdCgiIikubWFwKChlPT4ieCI9PT1lP28odCwrK24pLnRvU3RyaW5nKDE2KToieSI9PT1l
1749
- PygzJm8oKXw4KS50b1N0cmluZygxNik6ZSkpLmpvaW4oIiIpfWZ1bmN0aW9uIHMoZSl7Y29uc3Qg
1750
- dD1yLl9BPy5jcnlwdG98fHIuX0E/Lm1zQ3J5cHRvO2xldCBuLGk9MDt0JiZ0LmdldFJhbmRvbVZh
1751
- bHVlcyYmKG49dC5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzEpKSk7Y29uc3QgYT1b
1752
- XTtmb3IodmFyIHM9MDtzPGU7cysrKWEucHVzaChvKG4sKytpKS50b1N0cmluZygxNikpO3JldHVy
1753
- biBhLmpvaW4oIiIpfX0sNTY6KGUsdCxuKT0+e24uZCh0LHtCcTooKT0+cixIYjooKT0+byxvRDoo
1754
- KT0+aX0pO2NvbnN0IHI9Ik5SQkEiLGk9MTQ0ZTUsbz0xOGU1fSw4OTQ6KGUsdCxuKT0+e2Z1bmN0
1755
- aW9uIHIoKXtyZXR1cm4gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9bi5kKHQse3o6KCk9
1756
- PnJ9KX0sNTA6KGUsdCxuKT0+e2Z1bmN0aW9uIHIoZSx0KXsiZnVuY3Rpb24iPT10eXBlb2YgY29u
1757
- c29sZS53YXJuJiYoY29uc29sZS53YXJuKCJOZXcgUmVsaWM6ICIuY29uY2F0KGUpKSx0JiZjb25z
1758
- b2xlLndhcm4odCkpfW4uZCh0LHtaOigpPT5yfSl9LDU4NzooZSx0LG4pPT57bi5kKHQse046KCk9
1759
- PmMsVDooKT0+ZH0pO3ZhciByPW4oMTQ4KSxpPW4oNTQ2KSxvPW4oMCksYT1uKDMyNSk7Y29uc3Qg
1760
- cz17c3RuOlthLkQuc2Vzc2lvblRyYWNlXSxlcnI6W2EuRC5qc2Vycm9ycyxhLkQubWV0cmljc10s
1761
- aW5zOlthLkQucGFnZUFjdGlvbl0sc3BhOlthLkQuc3BhXSxzcjpbYS5ELnNlc3Npb25SZXBsYXks
1762
- YS5ELnNlc3Npb25UcmFjZV19O2Z1bmN0aW9uIGMoZSx0KXtjb25zdCBuPXIuZWUuZ2V0KHQpO2Um
1763
- JiJvYmplY3QiPT10eXBlb2YgZSYmKE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKGU9PntsZXRb
1764
- dCxyXT1lO3ZvaWQgMD09PWRbdF0mJihzW3RdP3NbdF0uZm9yRWFjaCgoZT0+e3I/KDAsaS5wKSgi
1765
- ZmVhdC0iK3QsW10sdm9pZCAwLGUsbik6KDAsaS5wKSgiYmxvY2stIit0LFtdLHZvaWQgMCxlLG4p
1766
- LCgwLGkucCkoInJ1bXJlc3AtIit0LFtCb29sZWFuKHIpXSx2b2lkIDAsZSxuKX0pKTpyJiYoMCxp
1767
- LnApKCJmZWF0LSIrdCxbXSx2b2lkIDAsdm9pZCAwLG4pLGRbdF09Qm9vbGVhbihyKSl9KSksT2Jq
1768
- ZWN0LmtleXMocykuZm9yRWFjaCgoZT0+e3ZvaWQgMD09PWRbZV0mJihzW2VdPy5mb3JFYWNoKCh0
1769
- PT4oMCxpLnApKCJydW1yZXNwLSIrZSxbITFdLHZvaWQgMCx0LG4pKSksZFtlXT0hMSl9KSksKDAs
1770
- by5MKSh0LGEuRC5wYWdlVmlld0V2ZW50KSl9Y29uc3QgZD17fX0sMjEwOihlLHQsbik9PntuLmQo
1771
- dCx7WDooKT0+aX0pO3ZhciByPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rp
1772
- b24gaShlLHQsbil7aWYoci5jYWxsKGUsdCkpcmV0dXJuIGVbdF07dmFyIGk9bigpO2lmKE9iamVj
1773
- dC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmtleXMpdHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJv
1774
- cGVydHkoZSx0LHt2YWx1ZTppLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KSxpfWNhdGNoKGUp
1775
- e31yZXR1cm4gZVt0XT1pLGl9fSwyODQ6KGUsdCxuKT0+e24uZCh0LHtEOigpPT5yfSk7Y29uc3Qg
1776
- cj0oZSx0KT0+T2JqZWN0LmVudHJpZXMoZXx8e30pLm1hcCgoZT0+e2xldFtuLHJdPWU7cmV0dXJu
1777
- IHQobixyKX0pKX0sMzUxOihlLHQsbik9PntuLmQodCx7UDooKT0+b30pO3ZhciByPW4oMTQ4KTtj
1778
- b25zdCBpPSgpPT57Y29uc3QgZT1uZXcgV2Vha1NldDtyZXR1cm4odCxuKT0+e2lmKCJvYmplY3Qi
1779
- PT10eXBlb2YgbiYmbnVsbCE9PW4pe2lmKGUuaGFzKG4pKXJldHVybjtlLmFkZChuKX1yZXR1cm4g
1780
- bn19O2Z1bmN0aW9uIG8oZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlLGkoKSl9Y2F0Y2go
1781
- ZSl7dHJ5e3IuZWUuZW1pdCgiaW50ZXJuYWwtZXJyb3IiLFtlXSl9Y2F0Y2goZSl7fX19fSw5NjA6
1782
- KGUsdCxuKT0+e24uZCh0LHtLOigpPT5hLGI6KCk9Pm99KTt2YXIgcj1uKDIzOSk7ZnVuY3Rpb24g
1783
- aSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnR8fCJjb21wbGV0ZSI9PT1kb2N1
1784
- bWVudC5yZWFkeVN0YXRlfWZ1bmN0aW9uIG8oZSx0KXtpZihpKCkpcmV0dXJuIGUoKTsoMCxyLmJQ
1785
- KSgibG9hZCIsZSx0KX1mdW5jdGlvbiBhKGUpe2lmKGkoKSlyZXR1cm4gZSgpOygwLHIuaXopKCJE
1786
- T01Db250ZW50TG9hZGVkIixlKX19LDYzMjooZSx0LG4pPT57bi5kKHQse0VaOigpPT5kLFF5Oigp
1787
- PT5jLGNlOigpPT5vLGZQOigpPT5hLGdHOigpPT51LG1GOigpPT5zfSk7dmFyIHI9big4OTQpLGk9
1788
- bigzODUpO2NvbnN0IG89e2JlYWNvbjoiYmFtLm5yLWRhdGEubmV0IixlcnJvckJlYWNvbjoiYmFt
1789
- Lm5yLWRhdGEubmV0In07ZnVuY3Rpb24gYSgpe3JldHVybiBpLl9BLk5SRVVNfHwoaS5fQS5OUkVV
1790
- TT17fSksdm9pZCAwPT09aS5fQS5uZXdyZWxpYyYmKGkuX0EubmV3cmVsaWM9aS5fQS5OUkVVTSks
1791
- aS5fQS5OUkVVTX1mdW5jdGlvbiBzKCl7bGV0IGU9YSgpO3JldHVybiBlLm98fChlLm89e1NUOmku
1792
- X0Euc2V0VGltZW91dCxTSTppLl9BLnNldEltbWVkaWF0ZSxDVDppLl9BLmNsZWFyVGltZW91dCxY
1793
- SFI6aS5fQS5YTUxIdHRwUmVxdWVzdCxSRVE6aS5fQS5SZXF1ZXN0LEVWOmkuX0EuRXZlbnQsUFI6
1794
- aS5fQS5Qcm9taXNlLE1POmkuX0EuTXV0YXRpb25PYnNlcnZlcixGRVRDSDppLl9BLmZldGNofSks
1795
- ZX1mdW5jdGlvbiBjKGUsdCxuKXtsZXQgaT1hKCk7Y29uc3Qgbz1pLmluaXRpYWxpemVkQWdlbnRz
1796
- fHx7fSxzPW9bZV18fHt9O3JldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGh8fChzLmluaXRpYWxp
1797
- emVkQXQ9e21zOigwLHIueikoKSxkYXRlOm5ldyBEYXRlfSksaS5pbml0aWFsaXplZEFnZW50cz17
1798
- Li4ubyxbZV06ey4uLnMsW25dOnR9fSxpfWZ1bmN0aW9uIGQoZSx0KXthKClbZV09dH1mdW5jdGlv
1799
- biB1KCl7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5pbmZvfHx7fTtlLmlu
1800
- Zm89e2JlYWNvbjpvLmJlYWNvbixlcnJvckJlYWNvbjpvLmVycm9yQmVhY29uLC4uLnR9fSgpLGZ1
1801
- bmN0aW9uKCl7bGV0IGU9YSgpO2NvbnN0IHQ9ZS5pbml0fHx7fTtlLmluaXQ9ey4uLnR9fSgpLHMo
1802
- KSxmdW5jdGlvbigpe2xldCBlPWEoKTtjb25zdCB0PWUubG9hZGVyX2NvbmZpZ3x8e307ZS5sb2Fk
1803
- ZXJfY29uZmlnPXsuLi50fX0oKSxhKCl9fSw5NTY6KGUsdCxuKT0+e24uZCh0LHtOOigpPT5pfSk7
1804
- dmFyIHI9bigyMzkpO2Z1bmN0aW9uIGkoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk
1805
- IDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1
1806
- bWVudHNbMl06dm9pZCAwLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7
1807
- cmV0dXJuIHZvaWQoMCxyLml6KSgidmlzaWJpbGl0eWNoYW5nZSIsKGZ1bmN0aW9uKCl7aWYodCly
1808
- ZXR1cm4gdm9pZCgiaGlkZGVuIj09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZlKCkpO2UoZG9j
1809
- dW1lbnQudmlzaWJpbGl0eVN0YXRlKX0pLG4saSl9fSw4MTooZSx0LG4pPT57bi5kKHQse2dGOigp
1810
- PT5vLG1ZOigpPT5pLHQ5OigpPT5yLHZ6OigpPT5zLHhTOigpPT5hfSk7Y29uc3Qgcj1uKDMyNSku
1811
- RC5tZXRyaWNzLGk9InNtIixvPSJjbSIsYT0ic3RvcmVTdXBwb3J0YWJpbGl0eU1ldHJpY3MiLHM9
1812
- InN0b3JlRXZlbnRNZXRyaWNzIn0sNjMzOihlLHQsbik9PntuLmQodCx7RHo6KCk9PmksT0o6KCk9
1813
- PmEscXc6KCk9Pm8sdDk6KCk9PnJ9KTtjb25zdCByPW4oMzI1KS5ELnBhZ2VWaWV3RXZlbnQsaT0i
1814
- Zmlyc3RieXRlIixvPSJkb21jb250ZW50IixhPSJ3aW5kb3dsb2FkIn0sMjUxOihlLHQsbik9Pntu
1815
- LmQodCx7dDooKT0+cn0pO2NvbnN0IHI9bigzMjUpLkQucGFnZVZpZXdUaW1pbmd9LDkzODooZSx0
1816
- LG4pPT57bi5kKHQse1c6KCk9Pm99KTt2YXIgcj1uKDc2MyksaT1uKDE0OCk7Y2xhc3Mgb3tjb25z
1817
- dHJ1Y3RvcihlLHQsbil7dGhpcy5hZ2VudElkZW50aWZpZXI9ZSx0aGlzLmFnZ3JlZ2F0b3I9dCx0
1818
- aGlzLmVlPWkuZWUuZ2V0KGUsKDAsci5PUCkodGhpcy5hZ2VudElkZW50aWZpZXIpLmlzb2xhdGVk
1819
- QmFja2xvZyksdGhpcy5mZWF0dXJlTmFtZT1uLHRoaXMuYmxvY2tlZD0hMX19fSwxNDQ6KGUsdCxu
1820
- KT0+e24uZCh0LHtqOigpPT52fSk7dmFyIHI9bigzMjUpLGk9big3NjMpLG89big1NDYpLGE9bigx
1821
- NDgpLHM9big4OTQpLGM9bigwKSxkPW4oOTYwKSx1PW4oMzg1KSxsPW4oNTApLGY9big4MSksZz1u
1822
- KDYzMik7ZnVuY3Rpb24gcCgpe2NvbnN0IGU9KDAsZy5nRykoKTtbInNldEVycm9ySGFuZGxlciIs
1823
- ImZpbmlzaGVkIiwiYWRkVG9UcmFjZSIsImlubGluZUhpdCIsImFkZFJlbGVhc2UiLCJhZGRQYWdl
1824
- QWN0aW9uIiwic2V0Q3VycmVudFJvdXRlTmFtZSIsInNldFBhZ2VWaWV3TmFtZSIsInNldEN1c3Rv
1825
- bUF0dHJpYnV0ZSIsImludGVyYWN0aW9uIiwibm90aWNlRXJyb3IiLCJzZXRVc2VySWQiLCJzZXRB
1826
- cHBsaWNhdGlvblZlcnNpb24iXS5mb3JFYWNoKCh0PT57ZVt0XT1mdW5jdGlvbigpe2Zvcih2YXIg
1827
- bj1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09YXJndW1l
1828
- bnRzW2ldO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPW5l
1829
- dyBBcnJheShuPjE/bi0xOjApLGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07bGV0IG89
1830
- W107cmV0dXJuIE9iamVjdC52YWx1ZXMoZS5pbml0aWFsaXplZEFnZW50cykuZm9yRWFjaCgoZT0+
1831
- e2UuZXhwb3NlZCYmZS5hcGlbdF0mJm8ucHVzaChlLmFwaVt0XSguLi5yKSl9KSksby5sZW5ndGg+
1832
- MT9vOm9bMF19KHQsLi4ucil9fSkpfXZhciBoPW4oNTg3KTtmdW5jdGlvbiB2KGUpe2xldCB0PWFy
1833
- Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx2
1834
- PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLG09YXJndW1lbnRzLmxlbmd0
1835
- aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAse2luaXQ6YixpbmZvOnksbG9hZGVyX2NvbmZpZzp3LHJ1
1836
- bnRpbWU6QT17bG9hZGVyVHlwZTp2fSxleHBvc2VkOng9ITB9PXQ7Y29uc3QgRD0oMCxnLmdHKSgp
1837
- O3l8fChiPUQuaW5pdCx5PUQuaW5mbyx3PUQubG9hZGVyX2NvbmZpZyksKDAsaS5EZykoZSxifHx7
1838
- fSksKDAsaS5HRSkoZSx3fHx7fSkseS5qc0F0dHJpYnV0ZXM/Pz17fSx1LnY2JiYoeS5qc0F0dHJp
1839
- YnV0ZXMuaXNXb3JrZXI9ITApLCgwLGkuQ1gpKGUseSk7Y29uc3Qgaj0oMCxpLlBfKShlKTtBLmRl
1840
- bnlMaXN0PVsuLi5qLmFqYXg/LmRlbnlfbGlzdHx8W10sLi4uai5hamF4Py5ibG9ja19pbnRlcm5h
1841
- bD9beS5iZWFjb24seS5lcnJvckJlYWNvbl06W11dLCgwLGkuc1UpKGUsQSkscCgpO2NvbnN0IEU9
1842
- ZnVuY3Rpb24oZSx0KXt0fHwoMCxjLlIpKGUsImFwaSIpO2NvbnN0IGc9e307dmFyIHA9YS5lZS5n
1843
- ZXQoZSksaD1wLmdldCgidHJhY2VyIiksdj0iYXBpLSIsbT12KyJpeG4tIjtmdW5jdGlvbiBiKHQs
1844
- bixyLG8pe2NvbnN0IGE9KDAsaS5DNSkoZSk7cmV0dXJuIG51bGw9PT1uP2RlbGV0ZSBhLmpzQXR0
1845
- cmlidXRlc1t0XTooMCxpLkNYKShlLHsuLi5hLGpzQXR0cmlidXRlczp7Li4uYS5qc0F0dHJpYnV0
1846
- ZXMsW3RdOm59fSksQSh2LHIsITAsb3x8bnVsbD09PW4/InNlc3Npb24iOnZvaWQgMCkodCxuKX1m
1847
- dW5jdGlvbiB5KCl7fVsic2V0RXJyb3JIYW5kbGVyIiwiZmluaXNoZWQiLCJhZGRUb1RyYWNlIiwi
1848
- aW5saW5lSGl0IiwiYWRkUmVsZWFzZSJdLmZvckVhY2goKGU9PmdbZV09QSh2LGUsITAsImFwaSIp
1849
- KSksZy5hZGRQYWdlQWN0aW9uPUEodiwiYWRkUGFnZUFjdGlvbiIsITAsci5ELnBhZ2VBY3Rpb24p
1850
- LGcuc2V0Q3VycmVudFJvdXRlTmFtZT1BKHYsInJvdXRlTmFtZSIsITAsci5ELnNwYSksZy5zZXRQ
1851
- YWdlVmlld05hbWU9ZnVuY3Rpb24odCxuKXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIi8i
1852
- IT09dC5jaGFyQXQoMCkmJih0PSIvIit0KSwoMCxpLk9QKShlKS5jdXN0b21UcmFuc2FjdGlvbj0o
1853
- bnx8Imh0dHA6Ly9jdXN0b20udHJhbnNhY3Rpb24iKSt0LEEodiwic2V0UGFnZVZpZXdOYW1lIiwh
1854
- MCkoKX0sZy5zZXRDdXN0b21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtsZXQgbj1hcmd1bWVudHMu
1855
- bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCJzdHJpbmci
1856
- PT10eXBlb2YgZSl7aWYoWyJzdHJpbmciLCJudW1iZXIiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fG51
1857
- bGw9PT10KXJldHVybiBiKGUsdCwic2V0Q3VzdG9tQXR0cmlidXRlIixuKTsoMCxsLlopKCJGYWls
1858
- ZWQgdG8gZXhlY3V0ZSBzZXRDdXN0b21BdHRyaWJ1dGUuXG5Ob24tbnVsbCB2YWx1ZSBtdXN0IGJl
1859
- IGEgc3RyaW5nIG9yIG51bWJlciB0eXBlLCBidXQgYSB0eXBlIG9mIDwiLmNvbmNhdCh0eXBlb2Yg
1860
- dCwiPiB3YXMgcHJvdmlkZWQuIikpfWVsc2UoMCxsLlopKCJGYWlsZWQgdG8gZXhlY3V0ZSBzZXRD
1861
- dXN0b21BdHRyaWJ1dGUuXG5OYW1lIG11c3QgYmUgYSBzdHJpbmcgdHlwZSwgYnV0IGEgdHlwZSBv
1862
- ZiA8Ii5jb25jYXQodHlwZW9mIGUsIj4gd2FzIHByb3ZpZGVkLiIpKX0sZy5zZXRVc2VySWQ9ZnVu
1863
- Y3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gYigiZW5kdXNl
1864
- ci5pZCIsZSwic2V0VXNlcklkIiwhMCk7KDAsbC5aKSgiRmFpbGVkIHRvIGV4ZWN1dGUgc2V0VXNl
1865
- cklkLlxuTm9uLW51bGwgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyB0eXBlLCBidXQgYSB0eXBlIG9m
1866
- IDwiLmNvbmNhdCh0eXBlb2YgZSwiPiB3YXMgcHJvdmlkZWQuIikpfSxnLnNldEFwcGxpY2F0aW9u
1867
- VmVyc2lvbj1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGV8fG51bGw9PT1lKXJldHVy
1868
- biBiKCJhcHBsaWNhdGlvbi52ZXJzaW9uIixlLCJzZXRBcHBsaWNhdGlvblZlcnNpb24iLCExKTso
1869
- MCxsLlopKCJGYWlsZWQgdG8gZXhlY3V0ZSBzZXRBcHBsaWNhdGlvblZlcnNpb24uIEV4cGVjdGVk
1870
- IDxTdHJpbmcgfCBudWxsPiwgYnV0IGdvdCA8Ii5jb25jYXQodHlwZW9mIGUsIj4uIikpfSxnLmlu
1871
- dGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB5KS5nZXQoKX07dmFyIHc9eS5wcm90b3R5
1872
- cGU9e2NyZWF0ZVRyYWNlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LGk9dGhpcyxhPSJmdW5jdGlv
1873
- biI9PXR5cGVvZiB0O3JldHVybigwLG8ucCkobSsidHJhY2VyIixbKDAscy56KSgpLGUsbl0saSxy
1874
- LkQuc3BhLHApLGZ1bmN0aW9uKCl7aWYoaC5lbWl0KChhPyIiOiJuby0iKSsiZm4tc3RhcnQiLFso
1875
- MCxzLnopKCksaSxhXSxuKSxhKXRyeXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0
1876
- Y2goZSl7dGhyb3cgaC5lbWl0KCJmbi1lcnIiLFthcmd1bWVudHMsdGhpcyxlXSxuKSxlfWZpbmFs
1877
- bHl7aC5lbWl0KCJmbi1lbmQiLFsoMCxzLnopKCldLG4pfX19fTtmdW5jdGlvbiBBKGUsdCxuLGkp
1878
- e3JldHVybiBmdW5jdGlvbigpe3JldHVybigwLG8ucCkoZi54UyxbIkFQSS8iK3QrIi9jYWxsZWQi
1879
- XSx2b2lkIDAsci5ELm1ldHJpY3MscCksaSYmKDAsby5wKShlK3QsWygwLHMueikoKSwuLi5hcmd1
1880
- bWVudHNdLG4/bnVsbDp0aGlzLGkscCksbj92b2lkIDA6dGhpc319ZnVuY3Rpb24geCgpe24uZSg3
1881
- NSkudGhlbihuLmJpbmQobiw0MzgpKS50aGVuKCh0PT57bGV0e3NldEFQSTpufT10O24oZSksKDAs
1882
- Yy5MKShlLCJhcGkiKX0pKS5jYXRjaCgoKCk9PigwLGwuWikoIkRvd25sb2FkaW5nIHJ1bnRpbWUg
1883
- QVBJcyBmYWlsZWQuLi4iKSkpfXJldHVyblsiYWN0aW9uVGV4dCIsInNldE5hbWUiLCJzZXRBdHRy
1884
- aWJ1dGUiLCJzYXZlIiwiaWdub3JlIiwib25FbmQiLCJnZXRDb250ZXh0IiwiZW5kIiwiZ2V0Il0u
1885
- Zm9yRWFjaCgoZT0+e3dbZV09QShtLGUsdm9pZCAwLHIuRC5zcGEpfSkpLGcubm90aWNlRXJyb3I9
1886
- ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGUmJihlPW5ldyBFcnJvcihlKSksKDAsby5w
1887
- KShmLnhTLFsiQVBJL25vdGljZUVycm9yL2NhbGxlZCJdLHZvaWQgMCxyLkQubWV0cmljcyxwKSwo
1888
- MCxvLnApKCJlcnIiLFtlLCgwLHMueikoKSwhMSx0XSx2b2lkIDAsci5ELmpzZXJyb3JzLHApfSx1
1889
- LmlsPygwLGQuYikoKCgpPT54KCkpLCEwKTp4KCksZ30oZSxtKTtyZXR1cm4oMCxnLlF5KShlLEUs
1890
- ImFwaSIpLCgwLGcuUXkpKGUseCwiZXhwb3NlZCIpLCgwLGcuRVopKCJhY3RpdmF0ZWRGZWF0dXJl
1891
- cyIsaC5UKSxFfX0sMzI1OihlLHQsbik9PntuLmQodCx7RDooKT0+cixwOigpPT5pfSk7Y29uc3Qg
1892
- cj17YWpheDoiYWpheCIsanNlcnJvcnM6ImpzZXJyb3JzIixtZXRyaWNzOiJtZXRyaWNzIixwYWdl
1893
- QWN0aW9uOiJwYWdlX2FjdGlvbiIscGFnZVZpZXdFdmVudDoicGFnZV92aWV3X2V2ZW50IixwYWdl
1894
- Vmlld1RpbWluZzoicGFnZV92aWV3X3RpbWluZyIsc2Vzc2lvblJlcGxheToic2Vzc2lvbl9yZXBs
1895
- YXkiLHNlc3Npb25UcmFjZToic2Vzc2lvbl90cmFjZSIsc3BhOiJzcGEifSxpPXtbci5wYWdlVmll
1896
- d0V2ZW50XToxLFtyLnBhZ2VWaWV3VGltaW5nXToyLFtyLm1ldHJpY3NdOjMsW3IuanNlcnJvcnNd
1897
- OjQsW3IuYWpheF06NSxbci5zZXNzaW9uVHJhY2VdOjYsW3IucGFnZUFjdGlvbl06Nyxbci5zcGFd
1898
- OjgsW3Iuc2Vzc2lvblJlcGxheV06OX19fSxyPXt9O2Z1bmN0aW9uIGkoZSl7dmFyIHQ9cltlXTtp
1899
- Zih2b2lkIDAhPT10KXJldHVybiB0LmV4cG9ydHM7dmFyIG89cltlXT17ZXhwb3J0czp7fX07cmV0
1900
- dXJuIG5bZV0obyxvLmV4cG9ydHMsaSksby5leHBvcnRzfWkubT1uLGkuZD0oZSx0KT0+e2Zvcih2
1901
- YXIgbiBpbiB0KWkubyh0LG4pJiYhaS5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4s
1902
- e2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0saS5mPXt9LGkuZT1lPT5Qcm9taXNlLmFsbChPYmpl
1903
- Y3Qua2V5cyhpLmYpLnJlZHVjZSgoKHQsbik9PihpLmZbbl0oZSx0KSx0KSksW10pKSxpLnU9ZT0+
1904
- Im5yLXJ1bS4zNzA5Y2I3NS0xLjIzOC4wLm1pbi5qcyIsaS5vPShlLHQpPT5PYmplY3QucHJvdG90
1905
- eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxlPXt9LHQ9Ik5SQkEtMS4yMzguMC5QUk9EOiIs
1906
- aS5sPShuLHIsbyxhKT0+e2lmKGVbbl0pZVtuXS5wdXNoKHIpO2Vsc2V7dmFyIHMsYztpZih2b2lk
1907
- IDAhPT1vKWZvcih2YXIgZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iiks
1908
- dT0wO3U8ZC5sZW5ndGg7dSsrKXt2YXIgbD1kW3VdO2lmKGwuZ2V0QXR0cmlidXRlKCJzcmMiKT09
1909
- bnx8bC5nZXRBdHRyaWJ1dGUoImRhdGEtd2VicGFjayIpPT10K28pe3M9bDticmVha319c3x8KGM9
1910
- ITAsKHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikpLmNoYXJzZXQ9InV0Zi04Iixz
1911
- LnRpbWVvdXQ9MTIwLGkubmMmJnMuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYykscy5zZXRBdHRy
1912
- aWJ1dGUoImRhdGEtd2VicGFjayIsdCtvKSxzLnNyYz1uKSxlW25dPVtyXTt2YXIgZj0odCxyDQo2
1913
- ZmQzDQopPT57cy5vbmVycm9yPXMub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KGcpO3ZhciBpPWVb
1914
- bl07aWYoZGVsZXRlIGVbbl0scy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
1915
- cyksaSYmaS5mb3JFYWNoKChlPT5lKHIpKSksdClyZXR1cm4gdChyKX0sZz1zZXRUaW1lb3V0KGYu
1916
- YmluZChudWxsLHZvaWQgMCx7dHlwZToidGltZW91dCIsdGFyZ2V0OnN9KSwxMmU0KTtzLm9uZXJy
1917
- b3I9Zi5iaW5kKG51bGwscy5vbmVycm9yKSxzLm9ubG9hZD1mLmJpbmQobnVsbCxzLm9ubG9hZCks
1918
- YyYmZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKX19LGkucj1lPT57InVuZGVmaW5lZCIhPXR5
1919
- cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
1920
- U3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
1921
- eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5wPSJodHRwczovL2pzLWFnZW50Lm5ld3Jl
1922
- bGljLmNvbS8iLCgoKT0+e3ZhciBlPXs1MDowLDgzMjowfTtpLmYuaj0odCxuKT0+e3ZhciByPWku
1923
- byhlLHQpP2VbdF06dm9pZCAwO2lmKDAhPT1yKWlmKHIpbi5wdXNoKHJbMl0pO2Vsc2V7dmFyIG89
1924
- bmV3IFByb21pc2UoKChuLGkpPT5yPWVbdF09W24saV0pKTtuLnB1c2goclsyXT1vKTt2YXIgYT1p
1925
- LnAraS51KHQpLHM9bmV3IEVycm9yO2kubChhLChuPT57aWYoaS5vKGUsdCkmJigwIT09KHI9ZVt0
1926
- XSkmJihlW3RdPXZvaWQgMCkscikpe3ZhciBvPW4mJigibG9hZCI9PT1uLnR5cGU/Im1pc3Npbmci
1927
- Om4udHlwZSksYT1uJiZuLnRhcmdldCYmbi50YXJnZXQuc3JjO3MubWVzc2FnZT0iTG9hZGluZyBj
1928
- aHVuayAiK3QrIiBmYWlsZWQuXG4oIitvKyI6ICIrYSsiKSIscy5uYW1lPSJDaHVua0xvYWRFcnJv
1929
- ciIscy50eXBlPW8scy5yZXF1ZXN0PWEsclsxXShzKX19KSwiY2h1bmstIit0LHQpfX07dmFyIHQ9
1930
- KHQsbik9Pnt2YXIgcixvLFthLHMsY109bixkPTA7aWYoYS5zb21lKCh0PT4wIT09ZVt0XSkpKXtm
1931
- b3IociBpbiBzKWkubyhzLHIpJiYoaS5tW3JdPXNbcl0pO2lmKGMpYyhpKX1mb3IodCYmdChuKTtk
1932
- PGEubGVuZ3RoO2QrKylvPWFbZF0saS5vKGUsbykmJmVbb10mJmVbb11bMF0oKSxlW29dPTB9LG49
1933
- c2VsZlsid2VicGFja0NodW5rOk5SQkEtMS4yMzguMC5QUk9EIl09c2VsZlsid2VicGFja0NodW5r
1934
- Ok5SQkEtMS4yMzguMC5QUk9EIl18fFtdO24uZm9yRWFjaCh0LmJpbmQobnVsbCwwKSksbi5wdXNo
1935
- PXQuYmluZChudWxsLG4ucHVzaC5iaW5kKG4pKX0pKCksKCgpPT57dmFyIGU9aSg1MCk7Y2xhc3Mg
1936
- dHthZGRQYWdlQWN0aW9uKHQsbil7KDAsZS5aKSgiQ2FsbCB0byBhZ2VudCBhcGkgYWRkUGFnZUFj
1937
- dGlvbiBmYWlsZWQuIFRoZSBzZXNzaW9uIHRyYWNlIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBp
1938
- bml0aWFsaXplZC4iKX1zZXRQYWdlVmlld05hbWUodCxuKXsoMCxlLlopKCJDYWxsIHRvIGFnZW50
1939
- IGFwaSBzZXRQYWdlVmlld05hbWUgZmFpbGVkLiBUaGUgcGFnZSB2aWV3IGZlYXR1cmUgaXMgbm90
1940
- IGN1cnJlbnRseSBpbml0aWFsaXplZC4iKX1zZXRDdXN0b21BdHRyaWJ1dGUodCxuLHIpeygwLGUu
1941
- WikoIkNhbGwgdG8gYWdlbnQgYXBpIHNldEN1c3RvbUF0dHJpYnV0ZSBmYWlsZWQuIFRoZSBqcyBl
1942
- cnJvcnMgZmVhdHVyZSBpcyBub3QgY3VycmVudGx5IGluaXRpYWxpemVkLiIpfW5vdGljZUVycm9y
1943
- KHQsbil7KDAsZS5aKSgiQ2FsbCB0byBhZ2VudCBhcGkgbm90aWNlRXJyb3IgZmFpbGVkLiBUaGUg
1944
- anMgZXJyb3JzIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBpbml0aWFsaXplZC4iKX1zZXRVc2Vy
1945
- SWQodCl7KDAsZS5aKSgiQ2FsbCB0byBhZ2VudCBhcGkgc2V0VXNlcklkIGZhaWxlZC4gVGhlIGpz
1946
- IGVycm9ycyBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW5pdGlhbGl6ZWQuIil9c2V0QXBwbGlj
1947
- YXRpb25WZXJzaW9uKHQpeygwLGUuWikoIkNhbGwgdG8gYWdlbnQgYXBpIHNldEFwcGxpY2F0aW9u
1948
- VmVyc2lvbiBmYWlsZWQuIFRoZSBhZ2VudCBpcyBub3QgY3VycmVudGx5IGluaXRpYWxpemVkLiIp
1949
- fXNldEVycm9ySGFuZGxlcih0KXsoMCxlLlopKCJDYWxsIHRvIGFnZW50IGFwaSBzZXRFcnJvckhh
1950
- bmRsZXIgZmFpbGVkLiBUaGUganMgZXJyb3JzIGZlYXR1cmUgaXMgbm90IGN1cnJlbnRseSBpbml0
1951
- aWFsaXplZC4iKX1maW5pc2hlZCh0KXsoMCxlLlopKCJDYWxsIHRvIGFnZW50IGFwaSBmaW5pc2hl
1952
- ZCBmYWlsZWQuIFRoZSBwYWdlIGFjdGlvbiBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW5pdGlh
1953
- bGl6ZWQuIil9YWRkUmVsZWFzZSh0LG4peygwLGUuWikoIkNhbGwgdG8gYWdlbnQgYXBpIGFkZFJl
1954
- bGVhc2UgZmFpbGVkLiBUaGUgYWdlbnQgaXMgbm90IGN1cnJlbnRseSBpbml0aWFsaXplZC4iKX19
1955
- dmFyIG49aSgzMjUpLHI9aSg3NjMpO2NvbnN0IG89T2JqZWN0LnZhbHVlcyhuLkQpO2Z1bmN0aW9u
1956
- IGEoZSl7Y29uc3QgdD17fTtyZXR1cm4gby5mb3JFYWNoKChuPT57dFtuXT1mdW5jdGlvbihlLHQp
1957
- e3JldHVybiExIT09KDAsci5NdCkodCwiIi5jb25jYXQoZSwiLmVuYWJsZWQiKSl9KG4sZSl9KSks
1958
- dH12YXIgcz1pKDE0NCk7dmFyIGM9aSg1NDYpLGQ9aSgzODUpLHU9aSgwKSxsPWkoOTM4KSxmPWko
1959
- OTYwKTtjbGFzcyBnIGV4dGVuZHMgbC5Xe2NvbnN0cnVjdG9yKGUsdCxuKXtsZXQgcj0hKGFyZ3Vt
1960
- ZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdO3N1cGVy
1961
- KGUsdCxuKSx0aGlzLmF1dG89cix0aGlzLmFib3J0SGFuZGxlcix0aGlzLmZlYXRBZ2dyZWdhdGUs
1962
- dGhpcy5vbkFnZ3JlZ2F0ZUltcG9ydGVkLHImJigwLHUuUikoZSxuKX1pbXBvcnRBZ2dyZWdhdG9y
1963
- KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l
1964
- bnRzWzBdOnt9O2lmKHRoaXMuZmVhdEFnZ3JlZ2F0ZXx8IXRoaXMuYXV0bylyZXR1cm47Y29uc3Qg
1965
- bj1kLmlsJiYhMD09PSgwLHIuTXQpKHRoaXMuYWdlbnRJZGVudGlmaWVyLCJwcml2YWN5LmNvb2tp
1966
- ZXNfZW5hYmxlZCIpO2xldCBvO3RoaXMub25BZ2dyZWdhdGVJbXBvcnRlZD1uZXcgUHJvbWlzZSgo
1967
- ZT0+e289ZX0pKTtjb25zdCBhPWFzeW5jKCk9PntsZXQgcjt0cnl7aWYobil7Y29uc3R7c2V0dXBB
1968
- Z2VudFNlc3Npb246ZX09YXdhaXQgaS5lKDc1KS50aGVuKGkuYmluZChpLDIyOCkpO3I9ZSh0aGlz
1969
- LmFnZW50SWRlbnRpZmllcil9fWNhdGNoKHQpeygwLGUuWikoIkEgcHJvYmxlbSBvY2N1cnJlZCB3
1970
- aGVuIHN0YXJ0aW5nIHVwIHNlc3Npb24gbWFuYWdlci4gVGhpcyBwYWdlIHdpbGwgbm90IHN0YXJ0
1971
- IG9yIGV4dGVuZCBhbnkgc2Vzc2lvbi4iLHQpfXRyeXtpZighdGhpcy5zaG91bGRJbXBvcnRBZ2co
1972
- dGhpcy5mZWF0dXJlTmFtZSxyKSlyZXR1cm4oMCx1LkwpKHRoaXMuYWdlbnRJZGVudGlmaWVyLHRo
1973
- aXMuZmVhdHVyZU5hbWUpLHZvaWQgbyghMSk7Y29uc3R7bGF6eUZlYXR1cmVMb2FkZXI6ZX09YXdh
1974
- aXQgaS5lKDc1KS50aGVuKGkuYmluZChpLDU4MikpLHtBZ2dyZWdhdGU6bn09YXdhaXQgZSh0aGlz
1975
- LmZlYXR1cmVOYW1lLCJhZ2dyZWdhdGUiKTt0aGlzLmZlYXRBZ2dyZWdhdGU9bmV3IG4odGhpcy5h
1976
- Z2VudElkZW50aWZpZXIsdGhpcy5hZ2dyZWdhdG9yLHQpLG8oITApfWNhdGNoKHQpeygwLGUuWiko
1977
- IkRvd25sb2FkaW5nIGFuZCBpbml0aWFsaXppbmcgIi5jb25jYXQodGhpcy5mZWF0dXJlTmFtZSwi
1978
- IGZhaWxlZC4uLiIpLHQpLHRoaXMuYWJvcnRIYW5kbGVyPy4oKSxvKCExKX19O2QuaWw/KDAsZi5i
1979
- KSgoKCk9PmEoKSksITApOmEoKX1zaG91bGRJbXBvcnRBZ2coZSx0KXtyZXR1cm4gZSE9PW4uRC5z
1980
- ZXNzaW9uUmVwbGF5fHwhIXIuWXUuTU8mJighMSE9PSgwLHIuTXQpKHRoaXMuYWdlbnRJZGVudGlm
1981
- aWVyLCJzZXNzaW9uX3RyYWNlLmVuYWJsZWQiKSYmKCEhdD8uaXNOZXd8fCEhdD8uc3RhdGUuc2Vz
1982
- c2lvblJlcGxheSkpfX12YXIgcD1pKDYzMyksaD1pKDg5NCk7Y2xhc3MgdiBleHRlbmRzIGd7c3Rh
1983
- dGljIGZlYXR1cmVOYW1lPXAudDk7Y29uc3RydWN0b3IoZSx0KXtsZXQgaT0hKGFyZ3VtZW50cy5s
1984
- ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2lmKHN1cGVyKGUs
1985
- dCxwLnQ5LGkpLCgidW5kZWZpbmVkIj09dHlwZW9mIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWlu
1986
- Z3x8ZC5UdCkmJiJ1bmRlZmluZWQiIT10eXBlb2YgUGVyZm9ybWFuY2VUaW1pbmcpe2NvbnN0IHQ9
1987
- KDAsci5PUCkoZSk7dFtwLkR6XT1NYXRoLm1heChEYXRlLm5vdygpLXQub2Zmc2V0LDApLCgwLGYu
1988
- SykoKCgpPT50W3AucXddPU1hdGgubWF4KCgwLGgueikoKS10W3AuRHpdLDApKSksKDAsZi5iKSgo
1989
- KCk9Pntjb25zdCBlPSgwLGgueikoKTt0W3AuT0pdPU1hdGgubWF4KGUtdFtwLkR6XSwwKSwoMCxj
1990
- LnApKCJ0aW1pbmciLFsibG9hZCIsZV0sdm9pZCAwLG4uRC5wYWdlVmlld1RpbWluZyx0aGlzLmVl
1991
- KX0pKX10aGlzLmltcG9ydEFnZ3JlZ2F0b3IoKX19dmFyIG09aSg3MTEpLGI9aSgyODQpO2NsYXNz
1992
- IHkgZXh0ZW5kcyBtLnd7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5hZ2dyZWdhdGVkRGF0
1993
- YT17fX1zdG9yZShlLHQsbixyLGkpe3ZhciBvPXRoaXMuZ2V0QnVja2V0KGUsdCxuLGkpO3JldHVy
1994
- biBvLm1ldHJpY3M9ZnVuY3Rpb24oZSx0KXt0fHwodD17Y291bnQ6MH0pO3JldHVybiB0LmNvdW50
1995
- Kz0xLCgwLGIuRCkoZSwoZnVuY3Rpb24oZSxuKXt0W2VdPXcobix0W2VdKX0pKSx0fShyLG8ubWV0
1996
- cmljcyksb31tZXJnZShlLHQsbixyLGkpe3ZhciBvPXRoaXMuZ2V0QnVja2V0KGUsdCxyLGkpO2lm
1997
- KG8ubWV0cmljcyl7dmFyIGE9by5tZXRyaWNzO2EuY291bnQrPW4uY291bnQsKDAsYi5EKShuLChm
1998
- dW5jdGlvbihlLHQpe2lmKCJjb3VudCIhPT1lKXt2YXIgcj1hW2VdLGk9bltlXTtpJiYhaS5jP2Fb
1999
- ZV09dyhpLnQscik6YVtlXT1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiBlO3QuY3x8KHQ9QSh0
2000
- LnQpKTtyZXR1cm4gdC5taW49TWF0aC5taW4oZS5taW4sdC5taW4pLHQubWF4PU1hdGgubWF4KGUu
2001
- bWF4LHQubWF4KSx0LnQrPWUudCx0LnNvcys9ZS5zb3MsdC5jKz1lLmMsdH0oaSxhW2VdKX19KSl9
2002
- ZWxzZSBvLm1ldHJpY3M9bn1zdG9yZU1ldHJpYyhlLHQsbixyKXt2YXIgaT10aGlzLmdldEJ1Y2tl
2003
- dChlLHQsbik7cmV0dXJuIGkuc3RhdHM9dyhyLGkuc3RhdHMpLGl9Z2V0QnVja2V0KGUsdCxuLHIp
2004
- e3RoaXMuYWdncmVnYXRlZERhdGFbZV18fCh0aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdPXt9KTt2YXIg
2005
- aT10aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdW3RdO3JldHVybiBpfHwoaT10aGlzLmFnZ3JlZ2F0ZWRE
2006
- YXRhW2VdW3RdPXtwYXJhbXM6bnx8e319LHImJihpLmN1c3RvbT1yKSksaX1nZXQoZSx0KXtyZXR1
2007
- cm4gdD90aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdJiZ0aGlzLmFnZ3JlZ2F0ZWREYXRhW2VdW3RdOnRo
2008
- aXMuYWdncmVnYXRlZERhdGFbZV19dGFrZShlKXtmb3IodmFyIHQ9e30sbj0iIixyPSExLGk9MDtp
2009
- PGUubGVuZ3RoO2krKyl0W249ZVtpXV09eCh0aGlzLmFnZ3JlZ2F0ZWREYXRhW25dKSx0W25dLmxl
2010
- bmd0aCYmKHI9ITApLGRlbGV0ZSB0aGlzLmFnZ3JlZ2F0ZWREYXRhW25dO3JldHVybiByP3Q6bnVs
2011
- bH19ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKGUpe2U/ZS5jKys6ZT17
2012
- YzoxfTtyZXR1cm4gZX0odCk6dD8odC5jfHwodD1BKHQudCkpLHQuYys9MSx0LnQrPWUsdC5zb3Mr
2013
- PWUqZSxlPnQubWF4JiYodC5tYXg9ZSksZTx0Lm1pbiYmKHQubWluPWUpLHQpOnt0OmV9fWZ1bmN0
2014
- aW9uIEEoZSl7cmV0dXJue3Q6ZSxtaW46ZSxtYXg6ZSxzb3M6ZSplLGM6MX19ZnVuY3Rpb24geChl
2015
- KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGU/W106KDAsYi5EKShlLEQpfWZ1bmN0aW9uIEQoZSx0
2016
- KXtyZXR1cm4gdH12YXIgaj1pKDYzMiksRT1pKDQwMiksVD1pKDM1MSk7dmFyIF89aSg5NTYpLGs9
2017
- aSgyMzkpLFA9aSgyNTEpO2NsYXNzIEMgZXh0ZW5kcyBne3N0YXRpYyBmZWF0dXJlTmFtZT1QLnQ7
2018
- Y29uc3RydWN0b3IoZSx0KXtsZXQgbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn
2019
- dW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3N1cGVyKGUsdCxQLnQsbiksZC5pbCYmKCgwLHIuT1Ap
2020
- KGUpLmluaXRIaWRkZW49Qm9vbGVhbigiaGlkZGVuIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0
2021
- ZSksKDAsXy5OKSgoKCk9PigwLGMucCkoImRvY0hpZGRlbiIsWygwLGgueikoKV0sdm9pZCAwLFAu
2022
- dCx0aGlzLmVlKSksITApLCgwLGsuYlApKCJwYWdlaGlkZSIsKCgpPT4oMCxjLnApKCJ3aW5QYWdl
2023
- aGlkZSIsWygwLGgueikoKV0sdm9pZCAwLFAudCx0aGlzLmVlKSkpLHRoaXMuaW1wb3J0QWdncmVn
2024
- YXRvcigpKX19dmFyIEk9aSg4MSk7Y2xhc3MgTiBleHRlbmRzIGd7c3RhdGljIGZlYXR1cmVOYW1l
2025
- PUkudDk7Y29uc3RydWN0b3IoZSx0KXtsZXQgbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw
2026
- IT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3N1cGVyKGUsdCxJLnQ5LG4pLHRoaXMuaW1w
2027
- b3J0QWdncmVnYXRvcigpfX1uZXcgY2xhc3MgZXh0ZW5kcyB0e2NvbnN0cnVjdG9yKHQpe2xldCBu
2028
- PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToo
2029
- MCxFLmt5KSgxNik7c3VwZXIoKSxkLl9BPyh0aGlzLmFnZW50SWRlbnRpZmllcj1uLHRoaXMuc2hh
2030
- cmVkQWdncmVnYXRvcj1uZXcgeSh7YWdlbnRJZGVudGlmaWVyOnRoaXMuYWdlbnRJZGVudGlmaWVy
2031
- fSksdGhpcy5mZWF0dXJlcz17fSx0aGlzLmRlc2lyZWRGZWF0dXJlcz1uZXcgU2V0KHQuZmVhdHVy
2032
- ZXN8fFtdKSx0aGlzLmRlc2lyZWRGZWF0dXJlcy5hZGQodiksT2JqZWN0LmFzc2lnbih0aGlzLCgw
2033
- LHMuaikodGhpcy5hZ2VudElkZW50aWZpZXIsdCx0LmxvYWRlclR5cGV8fCJhZ2VudCIpKSx0aGlz
2034
- LnN0YXJ0KCkpOigwLGUuWikoIkZhaWxlZCB0byBpbml0aWFsIHRoZSBhZ2VudC4gQ291bGQgbm90
2035
- IGRldGVybWluZSB0aGUgcnVudGltZSBlbnZpcm9ubWVudC4iKX1nZXQgY29uZmlnKCl7cmV0dXJu
2036
- e2luZm86KDAsci5DNSkodGhpcy5hZ2VudElkZW50aWZpZXIpLGluaXQ6KDAsci5QXykodGhpcy5h
2037
- Z2VudElkZW50aWZpZXIpLGxvYWRlcl9jb25maWc6KDAsci5ETCkodGhpcy5hZ2VudElkZW50aWZp
2038
- ZXIpLHJ1bnRpbWU6KDAsci5PUCkodGhpcy5hZ2VudElkZW50aWZpZXIpfX1zdGFydCgpe2NvbnN0
2039
- IHQ9ImZlYXR1cmVzIjt0cnl7Y29uc3Qgcj1hKHRoaXMuYWdlbnRJZGVudGlmaWVyKSxpPVsuLi50
2040
- aGlzLmRlc2lyZWRGZWF0dXJlc107aS5zb3J0KCgoZSx0KT0+bi5wW2UuZmVhdHVyZU5hbWVdLW4u
2041
- cFt0LmZlYXR1cmVOYW1lXSkpLGkuZm9yRWFjaCgodD0+e2lmKHJbdC5mZWF0dXJlTmFtZV18fHQu
2042
- ZmVhdHVyZU5hbWU9PT1uLkQucGFnZVZpZXdFdmVudCl7Y29uc3QgaT1mdW5jdGlvbihlKXtzd2l0
2043
- Y2goZSl7Y2FzZSBuLkQuYWpheDpyZXR1cm5bbi5ELmpzZXJyb3JzXTtjYXNlIG4uRC5zZXNzaW9u
2044
- VHJhY2U6cmV0dXJuW24uRC5hamF4LG4uRC5wYWdlVmlld0V2ZW50XTtjYXNlIG4uRC5zZXNzaW9u
2045
- UmVwbGF5OnJldHVybltuLkQuc2Vzc2lvblRyYWNlXTtjYXNlIG4uRC5wYWdlVmlld1RpbWluZzpy
2046
- ZXR1cm5bbi5ELnBhZ2VWaWV3RXZlbnRdO2RlZmF1bHQ6cmV0dXJuW119fSh0LmZlYXR1cmVOYW1l
2047
- KTtpLmV2ZXJ5KChlPT5yW2VdKSl8fCgwLGUuWikoIiIuY29uY2F0KHQuZmVhdHVyZU5hbWUsIiBp
2048
- cyBlbmFibGVkIGJ1dCBvbmUgb3IgbW9yZSBkZXBlbmRlbnQgZmVhdHVyZXMgaGFzIGJlZW4gZGlz
2049
- YWJsZWQgKCIpLmNvbmNhdCgoMCxULlApKGkpLCIpLiBUaGlzIG1heSBjYXVzZSB1bmludGVuZGVk
2050
- IGNvbnNlcXVlbmNlcyBvciBtaXNzaW5nIGRhdGEuLi4iKSksdGhpcy5mZWF0dXJlc1t0LmZlYXR1
2051
- cmVOYW1lXT1uZXcgdCh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzLnNoYXJlZEFnZ3JlZ2F0b3Ip
2052
- fX0pKSwoMCxqLlF5KSh0aGlzLmFnZW50SWRlbnRpZmllcix0aGlzLmZlYXR1cmVzLHQpfWNhdGNo
2053
- KG4peygwLGUuWikoIkZhaWxlZCB0byBpbml0aWFsaXplIGFsbCBlbmFibGVkIGluc3RydW1lbnQg
2054
- Y2xhc3NlcyAoYWdlbnQgYWJvcnRlZCkgLSIsbik7Zm9yKGNvbnN0IGUgaW4gdGhpcy5mZWF0dXJl
2055
- cyl0aGlzLmZlYXR1cmVzW2VdLmFib3J0SGFuZGxlcj8uKCk7Y29uc3Qgcj0oMCxqLmZQKSgpO3Jl
2056
- dHVybiBkZWxldGUgci5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/LmFw
2057
- aSxkZWxldGUgci5pbml0aWFsaXplZEFnZW50c1t0aGlzLmFnZW50SWRlbnRpZmllcl0/Llt0XSxk
2058
- ZWxldGUgdGhpcy5zaGFyZWRBZ2dyZWdhdG9yLHIuZWU/LmFib3J0KCksZGVsZXRlIHIuZWU/Lmdl
2059
- dCh0aGlzLmFnZW50SWRlbnRpZmllciksITF9fWFkZFRvVHJhY2UodCl7KDAsZS5aKSgiQ2FsbCB0
2060
- byBhZ2VudCBhcGkgYWRkVG9UcmFjZSBmYWlsZWQuIFRoZSBwYWdlIGFjdGlvbiBmZWF0dXJlIGlz
2061
- IG5vdCBjdXJyZW50bHkgaW5pdGlhbGl6ZWQuIil9c2V0Q3VycmVudFJvdXRlTmFtZSh0KXsoMCxl
2062
- LlopKCJDYWxsIHRvIGFnZW50IGFwaSBzZXRDdXJyZW50Um91dGVOYW1lIGZhaWxlZC4gVGhlIHNw
2063
- YSBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgaW5pdGlhbGl6ZWQuIil9aW50ZXJhY3Rpb24oKXso
2064
- MCxlLlopKCJDYWxsIHRvIGFnZW50IGFwaSBpbnRlcmFjdGlvbiBmYWlsZWQuIFRoZSBzcGEgZmVh
2065
- dHVyZSBpcyBub3QgY3VycmVudGx5IGluaXRpYWxpemVkLiIpfX0oe2ZlYXR1cmVzOlt2LEMsTl0s
2066
- bG9hZGVyVHlwZToibGl0ZSJ9KX0pKCl9KSgpOzwvc2NyaXB0PjxtZXRhIGNvbnRlbnQ9Im5vaW5k
2067
- ZXgiIG5hbWU9InJvYm90cyIgLz48c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMu
2068
- Y29tL21hcHMvYXBpL2pzP2tleT1BSXphU3lDMEJ1SjQzTmNibXVybzE3dlZ4V0pXck96ekFQWjBy
2069
- UUUmYW1wO2xpYnJhcmllcz1wbGFjZXMmYW1wO2xhbmd1YWdlPWVuIj48L3NjcmlwdD48bGluayBy
2070
- ZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9hc3NldHMvYXBwbGljYXRpb24t
2071
- Y2VlODVkZTY5NzkyNjQ2OTBiNmQxZWU0YjIzZmY0YmQ3OWJjNDllODlkOWU0YTI0YTFhYTg0MDcz
2072
- MDlmMjU3NS5jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVuIiBocmVm
2073
- PSIvcGFja3MvY3NzLzI3ODQtNjlkNDRiODUuY3NzIiAvPgo8bGluayByZWw9InN0eWxlc2hlZXQi
2074
- IG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9wYWNrcy9jc3MvNDEwNC03ZDVmMzIzMS5jc3MiIC8+Cjxs
2075
- aW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgaHJlZj0iL3BhY2tzL2Nzcy84NTY0
2076
- LTY2MDZhMDZjLmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVuIiBo
2077
- cmVmPSIvcGFja3MvY3NzLzMwMzQtYTVhMWE5M2IuY3NzIiAvPgo8bGluayByZWw9InN0eWxlc2hl
2078
- ZXQiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9wYWNrcy9jc3MvMTUyOS02NTNjYzQwNy5jc3MiIC8+
2079
- CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgaHJlZj0iL3BhY2tzL2Nzcy80
2080
- NDYyLTRmMDgxYTNkLmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVu
2081
- IiBocmVmPSIvcGFja3MvY3NzLzM1MzQtMDY3Yjc3ZDUuY3NzIiAvPgo8bGluayByZWw9InN0eWxl
2082
- c2hlZXQiIG1lZGlhPSJzY3JlZW4iIGhyZWY9Ii9wYWNrcy9jc3MvYXBwbGljYXRpb24tYmM4ZTY1
2083
- YjAuY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InNjcmVlbiIgaHJlZj0iL3Bh
2084
- Y2tzL2Nzcy8xNTI5LTY1M2NjNDA3LmNzcyIgLz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRp
2085
- YT0ic2NyZWVuIiBocmVmPSIvcGFja3MvY3NzL3RhaWx3aW5kLWM4NTczNDQ2LmNzcyIgLz48c2Ny
2086
- aXB0IHNyYz0iL3BhY2tzL2pzL3J1bnRpbWUtYzVkMmIyYjgzNTllZWI3NTMxMTEuanMiPjwvc2Ny
2087
- aXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzE3NjEtNjg5YTNiOWZkMWQ3ZjYxYTY2MDIuanMi
2088
- Pjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzY4NDktMmM3YzljNWM3ODIwOWNhODUw
2089
- NmIuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzg0NjEtN2MwNDJmYzdkMzBi
2090
- OThjNzgwYTEuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzk5NjUtZTgzZWU5
2091
- YWM2MDlhNjZjZjFiNDcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzUxOTYt
2092
- MGQyYWU5NjI0MzQ2OGFlZGFhMzMuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pz
2093
- LzQyNzUtOWYxNmQ3ZDIxZjg0NzgwM2QxZmYuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3Bh
2094
- Y2tzL2pzLzk5MDctYjVmYzE0NThkNWY2MTllNGFmOTcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNy
2095
- Yz0iL3BhY2tzL2pzLzc3OTItMGNlZmM4NmFkYThlMjZjODc3MTQuanMiPjwvc2NyaXB0Pgo8c2Ny
2096
- aXB0IHNyYz0iL3BhY2tzL2pzLzIxODctNmU4NzNkNmE4MGQ4MjJkZDg3ZTguanMiPjwvc2NyaXB0
2097
- Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzk1MDQtM2Y2YzBhMzljYmMyNTU5ZTIxYjcuanMiPjwv
2098
- c2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzMyNjEtZGEyZTgzMjg1MTgyODY5YWFjNzku
2099
- anMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzM1NDAtMGIxOGE2ZmM3NmU5Mjk3
2100
- ZmM3YTEuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzc0OTQtMTJkMDE1NGM4
2101
- MWI5MzMwMzZhMTYuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzUyNzYtNTYy
2102
- ZTk1M2FlOGYzNjZhZGRkZDcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzEz
2103
- NDktOGRkYThlNDdhYmNjOGU2NzEyYjkuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tz
2104
- L2pzLzEzODMtM2UyZTg5OGZhODAwYTdjMjFhMzAuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0i
2105
- L3BhY2tzL2pzLzk4NzMtYzZjODhjNDM5MGZlMDg5YWM1ZDQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0
2106
- IHNyYz0iL3BhY2tzL2pzLzI3ODQtODcwZjFjNzAxYjRkZTM5MjI5ODQuanMiPjwvc2NyaXB0Pgo8
2107
- c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzU2NDMtYTI2OTYyYTdmYWZlYzk0ODIwNWYuanMiPjwvc2Ny
2108
- aXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pzLzUyNS1jYzJmZTUxNWQ1OTZmNTg4MDU2Yi5qcyI+
2109
- PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIvcGFja3MvanMvNDgwNy03YWY5NzRjN2E2ZmU5MmRlOTUw
2110
- Mi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIvcGFja3MvanMvNDEwNC1iYTNiN2ZkOTM2MjI0
2111
- YmE5YTNlMS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIvcGFja3MvanMvMzE4LWQ0Y2M4ZjYx
2112
- OGU0MDc3NGQyZmZjLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy80MjY0LWEy
2113
- MjQ5OTRmNmZmNDNlNWExMjQ0LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy84
2114
- NTY0LTYxODQyMzFlNmZhOTg2ZDU5NGFlLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNr
2115
- cy9qcy8yMTAyLTkwZTUwZTg3ZDUxZWI2NTA0MDQ1LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9
2116
- Ii9wYWNrcy9qcy8zMTk0LTU1MjNjODQxMzI3NmIyMGM4NWFiLmpzIj48L3NjcmlwdD4KPHNjcmlw
2117
- dCBzcmM9Ii9wYWNrcy9qcy8xMDc1LWM4NmM0OWIwMDZkYjVhNzFmM2RiLmpzIj48L3NjcmlwdD4K
2118
- PHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy8xNzczLWEwZThhNzIxMGY1M2U0ZmQ2YzU2LmpzIj48L3Nj
2119
- cmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy83NTc1LTNiMzQ5OGY2NTlmNDE1ZmU4OGZjLmpz
2120
- Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy8zMDM0LTI5OGQ0MzFkYTY1NGZiNjhi
2121
- ZDMyLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy84OTUyLWVhMGY2Y2ZmYzU0
2122
- ZDZjM2ZmZTE2LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy80NDYyLTk3M2Zm
2123
- MDA5NWE3YzE0YjA2OTdhLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii9wYWNrcy9qcy8yOTgt
2124
- OTFmYzk2YjQ0ODA5ZDcwYTllMDcuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3BhY2tzL2pz
2125
- LzM1MzQtMDgyZTYzYmE4ZjBmYjZmM2YyNTQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iL3Bh
2126
- Y2tzL2pzL2FwcGxpY2F0aW9uLWI1MzU0ZjYxYWJjOWYxNDVhMjE4LmpzIj48L3NjcmlwdD48c2Ny
2127
- aXB0IHNyYz0iL2Fzc2V0cy9hcHBsaWNhdGlvbi0yY2Q0ZWQ0ODc3OTEzMTgxOWIxZGU3NTBjODEx
2128
- ZjJiMzE0ODJlYzFhMDg4ZTA0ZDUyNTlkYzAwNWQzNjU4MmNkLmpzIj48L3NjcmlwdD48bWV0YSBu
2129
- YW1lPSJjc3JmLXBhcmFtIiBjb250ZW50PSJhdXRoZW50aWNpdHlfdG9rZW4iIC8+CjxtZXRhIG5h
2130
- bWU9ImNzcmYtdG9rZW4iIGNvbnRlbnQ9IllSVHZwZXpsdE5NeWFyb1JHREFoZGctb1Y1MHZiRnZF
2131
- Y0RYczlTOHNnWnFuTlpidGJ3Nkl0azB4X3Z1ODAwdTFEUUpPYXVURk50a29YSmFZdXNrWThRIiAv
2132
- PjwvaGVhZD48Ym9keSBjbGFzcz0iaG9tZSBpbmRleCI+PGRpdiBpZD0iU2VhcmNoLXJlYWN0LWNv
2133
- bXBvbmVudC0zYzQxMTRhMy01OTUxLTRjNGYtOThmZi1kYmNlN2RiYmM1N2MiPjwvZGl2PgogICAg
2134
- ICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iIGNsYXNzPSJqcy1yZWFjdC1vbi1yYWls
2135
- cy1jb21wb25lbnQiIGRhdGEtY29tcG9uZW50LW5hbWU9IlNlYXJjaCIgZGF0YS1kb20taWQ9IlNl
2136
- YXJjaC1yZWFjdC1jb21wb25lbnQtM2M0MTE0YTMtNTk1MS00YzRmLTk4ZmYtZGJjZTdkYmJjNTdj
2137
- Ij57IndhYXMiOmZhbHNlLCJzaXRlTmF2Ijp7ImxlZnQiOlt7Im5hbWUiOiJDb21tdW5pdHkiLCJp
2138
- Y29uIjoiaW9uLW1kLXBlb3BsZSIsImJhZGdlX2NvbnRlbnQiOm51bGwsImVudHJpZXMiOlt7Im5h
2139
- bWUiOiJGb3J1bSIsImljb24iOiJpb24tbWQtY2hhdGJveGVzIiwicGF0aCI6Ii9jaGFubmVscy9h
2140
- bGwifSx7Im5hbWUiOiJDb21wYW55IERpcmVjdG9yeSIsImljb24iOiJpb24tbWQtYnJpZWZjYXNl
2141
- IiwicGF0aCI6Ii9kaXJlY3RvcnkifSx7Im5hbWUiOiJGb3VuZGVyIERpcmVjdG9yeSIsImljb24i
2142
- OiJpb24tbWQtY29udGFjdHMiLCJwYXRoIjoiL2RpcmVjdG9yeS9mb3VuZGVycyJ9LHsibmFtZSI6
2143
- IllDIE5ldHdvcmsgTmF2aWdhdG9yIiwiaWNvbiI6Imlvbi1tZC1jb21wYXNzIiwicGF0aCI6Ii9u
2144
- YXZpZ2F0b3IifSx7Im5hbWUiOiJCYXRjaCBXMjAyMSIsImljb24iOiJpb24taW9zLXBlb3BsZSIs
2145
- InBhdGgiOiIvYmF0Y2hlcy93MjAyMSJ9LHsibmFtZSI6Ikdyb3VwIDMiLCJpY29uIjoiaW9uLWlv
2146
- cy1yZXR1cm4tcmlnaHQiLCJwYXRoIjoiL2JhdGNoZXMvdzIwMjEjZ3JvdXAtMyJ9LHsibmFtZSI6
2147
- IkFsdW1uaSBEZW1vIERheSIsImljb24iOiJpb24tbWQtYm9uZmlyZSIsInBhdGgiOiIvZGlyZWN0
2148
- b3J5L2RlbW9fZGF5In0seyJuYW1lIjoiTGF1bmNoIFlDIiwiaWNvbiI6Imlvbi1pb3MtbWVnYXBo
2149
- b25lIiwicGF0aCI6Imh0dHBzOi8vd3d3Lnljb21iaW5hdG9yLmNvbS9sYXVuY2hlcyJ9LHsibmFt
2150
- ZSI6IllDIFRvcCBDb21wYW5pZXMgYnkgUmV2ZW51ZSIsImljb24iOiJpb24tbG9nby11c2QiLCJw
2151
- YXRoIjoiaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL3RvcGNvbXBhbmllcy9yZXZlbnVlIn0s
2152
- eyJuYW1lIjoiWUMgVG9wIENvbXBhbmllcyBieSBWYWx1YXRpb24iLCJpY29uIjoiaW9uLWlvcy10
2153
- cmVuZGluZy11cC1vdXRsaW5lIiwicGF0aCI6Imh0dHBzOi8vd3d3Lnljb21iaW5hdG9yLmNvbS90
2154
- b3Bjb21wYW5pZXMvdmFsdWF0aW9uIn0seyJuYW1lIjoiWUMgU3RvcmUiLCJpY29uIjoiaW9uLWlv
2155
- cy1zaGlydCIsInBhdGgiOiJodHRwczovL3Nob3AuZ2Vtbm90ZS5jb20veWMvc2hvcCJ9LHsibmFt
2156
- ZSI6IllDIFByaW50IFNob3AiLCJpY29uIjoiaW9uLWlvcy1lYXNlbCIsInBhdGgiOiJodHRwczov
2157
- L3d3dy5sZXZlbGZyYW1lcy5jb20vZGlyZWN0b3J5L3ktY29tYmluYXRvci1wcmludC1zaG9wIn0s
2158
- eyJuYW1lIjoiQWx1bW5pIEdyb3VwcyIsImljb24iOiJpb24taW9zLWNoYXRidWJibGVzLW91dGxp
2159
- bmUiLCJwYXRoIjoiL2tub3dsZWRnZS85bS1vbmxpbmUtYWx1bW5pLWdyb3VwcyJ9LHsibmFtZSI6
2160
- IlRoaXMgd2VlayBhdCBZQyIsImljb24iOiJpb24taW9zLWluZm9ybWF0aW9uLWNpcmNsZS1vdXRs
2161
- aW5lIiwicGF0aCI6Imh0dHBzOi8vdXM3LmNhbXBhaWduLWFyY2hpdmUuY29tL2hvbWUvP3U9NjUw
2162
- N2JmNGU0YzJkZjNmZGJhZTZlZjczOFx1MDAyNmlkPTU0NzcyNTA0OWIifV19LHsibmFtZSI6IlJl
2163
- c291cmNlcyIsImljb24iOiJpb24taW9zLWJvb2siLCJlbnRyaWVzIjpbeyJuYW1lIjoiVXNlciBN
2164
- YW51YWwiLCJpY29uIjoiaW9uLWlvcy1ib29rbWFya3Mtb3V0bGluZSIsInBhdGgiOiIva25vd2xl
2165
- ZGdlLzFULXljLXVzZXItbWFudWFsIn0seyJuYW1lIjoiQmF0Y2ggU2NoZWR1bGUiLCJpY29uIjoi
2166
- aW9uLW1kLWNhbGVuZGFyIiwicGF0aCI6Ii9zY2hlZHVsZSJ9LHsibmFtZSI6IkRlYWxzIiwiaWNv
2167
- biI6Imlvbi1tZC1jYXJkIiwicGF0aCI6Ii9kZWFscyJ9LHsibmFtZSI6IlByb2Zlc3Npb25hbCBT
2168
- ZXJ2aWNlcyBEaXJlY3RvcnkiLCJpY29uIjoiaW9uLW1kLXBlb3BsZSIsInBhdGgiOiIvcHJvZmVz
2169
- c2lvbmFsX3NlcnZpY2VzIn0seyJuYW1lIjoiRnVuZHJhaXNpbmcgVHJlbmRzIiwiaWNvbiI6Imlv
2170
- bi1pb3Mtc3RhdHMiLCJwYXRoIjoiL3RyZW5kcyJ9LHsibmFtZSI6IkludmVzdG9yIERhdGFiYXNl
2171
- IiwiaWNvbiI6Imlvbi1sb2dvLXVzZCIsInBhdGgiOiIvZGlyZWN0b3J5L2ludmVzdG9ycz95ZWFy
2172
- PSU1QjIwMTklMkMrMjAyMyU1RCJ9LHsibmFtZSI6IlN0YXJ0dXAgTGlicmFyeSIsImljb24iOiJp
2173
- b24taW9zLWJvb2stb3V0bGluZSIsInBhdGgiOiJodHRwczovL3ljb21iaW5hdG9yLmNvbS9saWJy
2174
- YXJ5In0seyJuYW1lIjoiU2VyaWVzIEEgTWFudWFsIiwiaWNvbiI6Imlvbi1pb3MtY29tcGFzcyIs
2175
- InBhdGgiOiIva25vd2xlZGdlL0ZJLXNlcmllcy1hLW1hbnVhbCJ9LHsibmFtZSI6IkJvb2tmYWNl
2176
- IENvbXBhbmlvbiIsImljb24iOiJpb24tbG9nby1jaHJvbWUiLCJwYXRoIjoiL2tub3dsZWRnZS9F
2177
- bS1ib29rZmFjZS1jb21wYW5pb24ifSx7Im5hbWUiOiJNeSBMaXN0cyIsImljb24iOiJpb24taW9z
2178
- LWxpc3QtYm94LW91dGxpbmUiLCJwYXRoIjoiL2xpc3RzIn1dfSx7Im5hbWUiOiJDb250YWN0IFlD
2179
- IiwiaWNvbiI6Imlvbi1sb2dvLWhhY2tlcm5ld3MiLCJlbnRyaWVzIjpbeyJuYW1lIjoiQm9vayBP
2180
- ZmZpY2UgSG91cnMiLCJpY29uIjoiaW9uLW1kLWJvb2ttYXJrcyIsInBhdGgiOiIvYm9va2VyIn0s
2181
- eyJuYW1lIjoiRmluYW5jaW5ncyBcdTAwMjYgVHJhbnNhY3Rpb25zIiwiaWNvbiI6Imlvbi1tZC1j
2182
- YXNoIiwicGF0aCI6Ii9rbm93bGVkZ2UvQnAtbm90aWZ5LXljLWZpbmFuY2luZ3MtdHJhbnNhY3Rp
2183
- b25zIn0seyJuYW1lIjoiUGVvcGxlIGF0IFlDIiwiaWNvbiI6Imlvbi1tZC1wZW9wbGUiLCJwYXRo
2184
- IjoiL3ljIn0seyJuYW1lIjoiUmVwb3J0IEJhZCBBY3RvcnMiLCJpY29uIjoiaW9uLW1kLXNhZCIs
2185
- InBhdGgiOiJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9mb3Jtcy9kL2UvMUZBSXBRTFNmMUJUXzI4
2186
- VkZLUVMtQVFtOVhLQTIzOC1vMldCVDkwVW0zUG5EMHhTZzVVQngtWFEvdmlld2Zvcm0ifSx7Im5h
2187
- bWUiOiJSZWNvbW1lbmQgU3RhcnR1cHMiLCJpY29uIjoiaW9uLW1kLXBlcnNvbi1hZGQiLCJwYXRo
2188
- IjoiaHR0cHM6Ly9hcHBseS55Y29tYmluYXRvci5jb20vcmVjb21tZW5kYXRpb25zIn0seyJuYW1l
2189
- IjoiRW1haWwgVXMiLCJpY29uIjoiaW9uLWlvcy1tYWlsIiwicGF0aCI6Im1haWx0bzpib29rZmFj
2190
- ZUB5Y29tYmluYXRvci5jb20ifV19LHsibmFtZSI6IlJlY3J1aXRpbmciLCJpY29uIjoiaW9uLW1k
2191
- LXBlcnNvbi1hZGQiLCJlbnRyaWVzIjpbeyJuYW1lIjoiRGFzaGJvYXJkIiwiaWNvbiI6Imlvbi1p
2192
- b3MtaG9tZSIsInBhdGgiOiIvd29ya2F0YXN0YXJ0dXAvZGFzaGJvYXJkIn0seyJuYW1lIjoiU291
2193
- cmNlIiwiaWNvbiI6Imlvbi1pb3MtY29udGFjdHMiLCJwYXRoIjoiL3dvcmthdGFzdGFydHVwL2Fw
2194
- cGxpY2FudHMifSx7Im5hbWUiOiJJbmJveCIsImljb24iOiJpb24taW9zLW1haWwiLCJwYXRoIjoi
2195
- L3dvcmthdGFzdGFydHVwL2luYm94Iiwid2Fhc191bnJlYWRfaW5ib3giOnRydWV9LHsibmFtZSI6
2196
- IkFwcGxpY2FudHMiLCJpY29uIjoiaW9uLWlvcy1oYW5kIiwicGF0aCI6Ii93b3JrYXRhc3RhcnR1
2197
- cC9hcHBsaWVkIiwid2Fhc191bnJlYWRfYXBwbGllZCI6dHJ1ZX0seyJuYW1lIjoiSm9icyIsImlj
2198
- b24iOiJpb24tbWQtZG9jdW1lbnQiLCJwYXRoIjoiL2NvbXBhbnkvMjMxMDUvam9icyIsImJhZGdl
2199
- X2NvbnRlbnQiOm51bGx9XSwid2Fhc191bnJlYWRfaW5ib3giOnRydWV9LHsibmFtZSI6IkNvbXBh
2200
- bnkiLCJpY29uIjoiaW9uLW1kLWJyaWVmY2FzZSIsImVudHJpZXMiOlt7Im5hbWUiOiJRdWVzdGJv
2201
- b2siLCJpY29uIjoiaW9uLW1kLWJyaWVmY2FzZSIsInBhdGgiOiIvY29tcGFueS8yMzEwNSJ9LHsi
2202
- bmFtZSI6IkludmVzdG1lbnRzIiwiaWNvbiI6Imlvbi1pb3MtcmV0dXJuLXJpZ2h0IiwicGF0aCI6
2203
- Ii9jb21wYW55LzIzMTA1L2ludmVzdG1lbnRzIn0seyJuYW1lIjoiRGVtbyBEYXkgTGVhZHMiLCJp
2204
- Y29uIjoiaW9uLWlvcy1yZXR1cm4tcmlnaHQiLCJwYXRoIjoiL2NvbXBhbnkvMjMxMDUvZGVtb19k
2205
- YXlfaW52ZXN0b3JzIn0seyJuYW1lIjoiUmF0ZSB5b3VyIGludmVzdG9ycyIsImljb24iOiJpb24t
2206
- aW9zLXJldHVybi1yaWdodCIsInBhdGgiOiIvaW52ZXN0b3JfZ3JhZGVzIn0seyJuYW1lIjoiSW52
2207
- ZXN0b3IgVXBkYXRlcyIsImljb24iOiJpb24taW9zLXJldHVybi1yaWdodCIsInBhdGgiOiIvY29t
2208
- cGFuaWVzLzIzMTU1L2NvbXBhbnlfdXBkYXRlcyJ9XX1dLCJyaWdodCI6W3sibmFtZSI6Ik1hZGhh
2209
- dmFuIiwiaWNvbiI6Imlvbi1tZC1jb250YWN0IiwidHlwZSI6InVzZXIiLCJlbnRyaWVzIjpbeyJu
2210
- YW1lIjoiTXkgUHJvZmlsZSIsImljb24iOiJpb24tbWQtY29udGFjdCIsInBhdGgiOiIvdXNlci8x
2211
- ODI4NTMifSx7Im5hbWUiOiJGb3J1bSBOb3RpZmljYXRpb25zIiwiaWNvbiI6Imlvbi1tZC1ub3Rp
2212
- ZmljYXRpb25zIiwicGF0aCI6Ii9mb3J1bS9ub3RpZmljYXRpb25zIn0seyJuYW1lIjoiRm9ydW0g
2213
- S2V5d29yZCBBbGVydHMiLCJpY29uIjoiaW9uLW1kLWhlYWRzZXQiLCJwYXRoIjoiL2ZvcnVtX2Fs
2214
- ZXJ0cyJ9LHsibmFtZSI6IkxvZyBPdXQiLCJpY29uIjoiaW9uLW1kLWxvZy1vdXQiLCJwYXRoIjoi
2215
- L3Nlc3Npb24vbG9nb3V0In1dfV19LCJkZWZhdWx0UXVlcnkiOm51bGwsIm9wZW5LZXkiOiJrIn08
2216
- L3NjcmlwdD4KICAgICAgCjxtZXRhIGNvbnRlbnQ9Im5vZm9sbG93IiBuYW1lPSJyb2JvdHMiIC8+
2217
- PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIiBpZD0ianMtcmVhY3Qtb24tcmFpbHMtY29u
2218
- dGV4dCI+eyJyYWlsc0VudiI6InByb2R1Y3Rpb24iLCJpbk1haWxlciI6ZmFsc2UsImkxOG5Mb2Nh
2219
- bGUiOiJlbiIsImkxOG5EZWZhdWx0TG9jYWxlIjoiZW4iLCJyb3JWZXJzaW9uIjoiMTMuMC4wIiwi
2220
- cm9yUHJvIjpmYWxzZSwiaHJlZiI6Imh0dHBzOi8vYm9va2ZhY2UueWNvbWJpbmF0b3IuY29tL2hv
2221
- bWUiLCJsb2NhdGlvbiI6Ii9ob21lIiwic2NoZW1lIjoiaHR0cHMiLCJob3N0IjoiYm9va2ZhY2Uu
2222
- eWNvbWJpbmF0b3IuY29tIiwicG9ydCI6bnVsbCwicGF0aG5hbWUiOiIvaG9tZSIsInNlYXJjaCI6
2223
- bnVsbCwiaHR0cEFjY2VwdExhbmd1YWdlIjpudWxsLCJhcHBseUJhdGNoTG9uZyI6IldpbnRlciAy
2224
- MDI0IiwiYXBwbHlCYXRjaFNob3J0IjoiVzIwMjQiLCJhcHBseURlYWRsaW5lU2hvcnQiOiJPY3Rv
2225
- YmVyIDEzIiwieWNkY1JldHJvTW9kZSI6ZmFsc2UsImN1cnJlbnRVc2VyIjp7ImlkIjoxODI4NTMs
2226
- ImFkbWluIjpmYWxzZSwid2Fhc19hZG1pbiI6ZmFsc2UsInljX3BhcnRuZXIiOmZhbHNlLCJjdXJy
2227
- ZW50X2NvbXBhbnkiOnsibmFtZSI6IlF1ZXN0Ym9vayJ9LCJjb21wYW55X2Zvcl9kZWFscyI6eyJu
2228
- YW1lIjoiUXVlc3Rib29rIn0sImZ1bGxfbmFtZSI6Ik1hZGhhdmFuIE1hbG9sYW4iLCJmaXJzdF9u
2229
- YW1lIjoiTWFkaGF2YW4iLCJobmlkIjoibWFkaGF2YW5tYWxvbGFuIn0sInNlcnZlclNpZGUiOmZh
2230
- bHNlfTwvc2NyaXB0Pgo8ZGl2IGlkPSJCb29rZmFjZUNzckFwcC1yZWFjdC1jb21wb25lbnQtMjlm
2231
- ZGRhYWItZTZkOS00YWQ5LTgzZDgtOGU1NTJmOWY0Y2U3Ij48L2Rpdj4KICAgICAgPHNjcmlwdCB0
2232
- eXBlPSJhcHBsaWNhdGlvbi9qc29uIiBjbGFzcz0ianMtcmVhY3Qtb24tcmFpbHMtY29tcG9uZW50
2233
- IiBkYXRhLWNvbXBvbmVudC1uYW1lPSJCb29rZmFjZUNzckFwcCIgZGF0YS1kb20taWQ9IkJvb2tm
2234
- YWNlQ3NyQXBwLXJlYWN0LWNvbXBvbmVudC0yOWZkZGFhYi1lNmQ5LTRhZDktODNkOC04ZTU1MmY5
2235
- ZjRjZTciPnsibmF2TWVudXMiOnsibGVmdCI6W3sibmFtZSI6IkNvbW11bml0eSIsImljb24iOiJp
2236
- b24tbWQtcGVvcGxlIiwiYmFkZ2VfY29udGVudCI6bnVsbCwiZW50cmllcyI6W3sibmFtZSI6IkZv
2237
- cnVtIiwiaWNvbiI6Imlvbi1tZC1jaGF0Ym94ZXMiLCJwYXRoIjoiL2NoYW5uZWxzL2FsbCJ9LHsi
2238
- bmFtZSI6IkNvbXBhbnkgRGlyZWN0b3J5IiwiaWNvbiI6Imlvbi1tZC1icmllZmNhc2UiLCJwYXRo
2239
- IjoiL2RpcmVjdG9yeSJ9LHsibmFtZSI6IkZvdW5kZXIgRGlyZWN0b3J5IiwiaWNvbiI6Imlvbi1t
2240
- ZC1jb250YWN0cyIsInBhdGgiOiIvZGlyZWN0b3J5L2ZvdW5kZXJzIn0seyJuYW1lIjoiWUMgTmV0
2241
- d29yayBOYXZpZ2F0b3IiLCJpY29uIjoiaW9uLW1kLWNvbXBhc3MiLCJwYXRoIjoiL25hdmlnYXRv
2242
- ciJ9LHsibmFtZSI6IkJhdGNoIFcyMDIxIiwiaWNvbiI6Imlvbi1pb3MtcGVvcGxlIiwicGF0aCI6
2243
- Ii9iYXRjaGVzL3cyMDIxIn0seyJuYW1lIjoiR3JvdXAgMyIsImljb24iOiJpb24taW9zLXJldHVy
2244
- bi1yaWdodCIsInBhdGgiOiIvYmF0Y2hlcy93MjAyMSNncm91cC0zIn0seyJuYW1lIjoiQWx1bW5p
2245
- IERlbW8gRGF5IiwiaWNvbiI6Imlvbi1tZC1ib25maXJlIiwicGF0aCI6Ii9kaXJlY3RvcnkvZGVt
2246
- b19kYXkifSx7Im5hbWUiOiJMYXVuY2ggWUMiLCJpY29uIjoiaW9uLWlvcy1tZWdhcGhvbmUiLCJw
2247
- YXRoIjoiaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL2xhdW5jaGVzIn0seyJuYW1lIjoiWUMg
2248
- VG9wIENvbXBhbmllcyBieSBSZXZlbnVlIiwiaWNvbiI6Imlvbi1sb2dvLXVzZCIsInBhdGgiOiJo
2249
- dHRwczovL3d3dy55Y29tYmluYXRvci5jb20vdG9wY29tcGFuaWVzL3JldmVudWUifSx7Im5hbWUi
2250
- OiJZQyBUb3AgQ29tcGFuaWVzIGJ5IFZhbHVhdGlvbiIsImljb24iOiJpb24taW9zLXRyZW5kaW5n
2251
- LXVwLW91dGxpbmUiLCJwYXRoIjoiaHR0cHM6Ly93d3cueWNvbWJpbmF0b3IuY29tL3RvcGNvbXBh
2252
- bmllcy92YWx1YXRpb24ifSx7Im5hbWUiOiJZQyBTdG9yZSIsImljb24iOiJpb24taW9zLXNoaXJ0
2253
- IiwicGF0aCI6Imh0dHBzOi8vc2hvcC5nZW1ub3RlLmNvbS95Yy9zaG9wIn0seyJuYW1lIjoiWUMg
2254
- UHJpbnQgU2hvcCIsImljb24iOiJpb24taW9zLWVhc2VsIiwicGF0aCI6Imh0dHBzOi8vd3d3Lmxl
2255
- dmVsZnJhbWVzLmNvbS9kaXJlY3RvcnkveS1jb21iaW5hdG9yLXByaW50LXNob3AifSx7Im5hbWUi
2256
- OiJBbHVtbmkgR3JvdXBzIiwiaWNvbiI6Imlvbi1pb3MtY2hhdGJ1YmJsZXMtb3V0bGluZSIsInBh
2257
- dGgiOiIva25vd2xlZGdlLzltLW9ubGluZS1hbHVtbmktZ3JvdXBzIn0seyJuYW1lIjoiVGhpcyB3
2258
- ZWVrIGF0IFlDIiwiaWNvbiI6Imlvbi1pb3MtaW5mb3JtYXRpb24tY2lyY2xlLW91dGxpbmUiLCJw
2259
- YXRoIjoiaHR0cHM6Ly91czcuY2FtcGFpZ24tYXJjaGl2ZS5jb20vaG9tZS8/dT02NTA3YmY0ZTRj
2260
- MmRmM2ZkYmFlNmVmNzM4XHUwMDI2aWQ9NTQ3NzI1MDQ5YiJ9XX0seyJuYW1lIjoiUmVzb3VyY2Vz
2261
- IiwiaWNvbiI6Imlvbi1pb3MtYm9vayIsImVudHJpZXMiOlt7Im5hbWUiOiJVc2VyIE1hbnVhbCIs
2262
- Imljb24iOiJpb24taW9zLWJvb2ttYXJrcy1vdXRsaW5lIiwicGF0aCI6Ii9rbm93bGVkZ2UvMVQt
2263
- eWMtdXNlci1tYW51YWwifSx7Im5hbWUiOiJCYXRjaCBTY2hlZHVsZSIsImljb24iOiJpb24tbWQt
2264
- Y2FsZW5kYXIiLCJwYXRoIjoiL3NjaGVkdWxlIn0seyJuYW1lIjoiRGVhbHMiLCJpY29uIjoiaW9u
2265
- LW1kLWNhcmQiLCJwYXRoIjoiL2RlYWxzIn0seyJuYW1lIjoiUHJvZmVzc2lvbmFsIFNlcnZpY2Vz
2266
- IERpcmVjdG9yeSIsImljb24iOiJpb24tbWQtcGVvcGxlIiwicGF0aCI6Ii9wcm9mZXNzaW9uYWxf
2267
- c2VydmljZXMifSx7Im5hbWUiOiJGdW5kcmFpc2luZyBUcmVuZHMiLCJpY29uIjoiaW9uLWlvcy1z
2268
- dGF0cyIsInBhdGgiOiIvdHJlbmRzIn0seyJuYW1lIjoiSW52ZXN0b3IgRGF0YWJhc2UiLCJpY29u
2269
- IjoiaW9uLWxvZ28tdXNkIiwicGF0aCI6Ii9kaXJlY3RvcnkvaW52ZXN0b3JzP3llYXI9JTVCMjAx
2270
- OSUyQysyMDIzJTVEIn0seyJuYW1lIjoiU3RhcnR1cCBMaWJyYXJ5IiwiaWNvbiI6Imlvbi1pb3Mt
2271
- Ym9vay1vdXRsaW5lIiwicGF0aCI6Imh0dHBzOi8veWNvbWJpbmF0b3IuY29tL2xpYnJhcnkifSx7
2272
- Im5hbWUiOiJTZXJpZXMgQSBNYW51YWwiLCJpY29uIjoiaW9uLWlvcy1jb21wYXNzIiwicGF0aCI6
2273
- Ii9rbm93bGVkZ2UvRkktc2VyaWVzLWEtbWFudWFsIn0seyJuYW1lIjoiQm9va2ZhY2UgQ29tcGFu
2274
- aW9uIiwiaWNvbiI6Imlvbi1sb2dvLWNocm9tZSIsInBhdGgiOiIva25vd2xlZGdlL0VtLWJvb2tm
2275
- YWNlLWNvbXBhbmlvbiJ9LHsibmFtZSI6Ik15IExpc3RzIiwiaWNvbiI6Imlvbi1pb3MtbGlzdC1i
2276
- b3gtb3V0bGluZSIsInBhdGgiOiIvbGlzdHMifV19LHsibmFtZSI6IkNvbnRhY3QgWUMiLCJpY29u
2277
- IjoiaW9uLWxvZ28taGFja2VybmV3cyIsImVudHJpZXMiOlt7Im5hbWUiOiJCb29rIE9mZmljZSBI
2278
- b3VycyIsImljb24iOiJpb24tbWQtYm9va21hcmtzIiwicGF0aCI6Ii9ib29rZXIifSx7Im5hbWUi
2279
- OiJGaW5hbmNpbmdzIFx1MDAyNiBUcmFuc2FjdGlvbnMiLCJpY29uIjoiaW9uLW1kLWNhc2giLCJw
2280
- YXRoIjoiL2tub3dsZWRnZS9CcC1ub3RpZnkteWMtZmluYW5jaW5ncy10cmFuc2FjdGlvbnMifSx7
2281
- Im5hbWUiOiJQZW9wbGUgYXQgWUMiLCJpY29uIjoiaW9uLW1kLXBlb3BsZSIsInBhdGgiOiIveWMi
2282
- fSx7Im5hbWUiOiJSZXBvcnQgQmFkIEFjdG9ycyIsImljb24iOiJpb24tbWQtc2FkIiwicGF0aCI6
2283
- Imh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2Zvcm1zL2QvZS8xRkFJcFFMU2YxQlRfMjhWRktRUy1B
2284
- UW05WEtBMjM4LW8yV0JUOTBVbTNQbkQweFNnNVVCeC1YUS92aWV3Zm9ybSJ9LHsibmFtZSI6IlJl
2285
- Y29tbWVuZCBTdGFydHVwcyIsImljb24iOiJpb24tbWQtcGVyc29uLWFkZCIsInBhdGgiOiJodHRw
2286
- czovL2FwcGx5Lnljb21iaW5hdG9yLmNvbS9yZWNvbW1lbmRhdGlvbnMifSx7Im5hbWUiOiJFbWFp
2287
- bCBVcyIsImljb24iOiJpb24taW9zLW1haWwiLCJwYXRoIjoibWFpbHRvOmJvb2tmYWNlQHljb21i
2288
- aW5hdG9yLmNvbSJ9XX0seyJuYW1lIjoiUmVjcnVpdGluZyIsImljb24iOiJpb24tbWQtcGVyc29u
2289
- LWFkZCIsImVudHJpZXMiOlt7Im5hbWUiOiJEYXNoYm9hcmQiLCJpY29uIjoiaW9uLWlvcy1ob21l
2290
- IiwicGF0aCI6Ii93b3JrYXRhc3RhcnR1cC9kYXNoYm9hcmQifSx7Im5hbWUiOiJTb3VyY2UiLCJp
2291
- Y29uIjoiaW9uLWlvcy1jb250YWN0cyIsInBhdGgiOiIvd29ya2F0YXN0YXJ0dXAvYXBwbGljYW50
2292
- cyJ9LHsibmFtZSI6IkluYm94IiwiaWNvbiI6Imlvbi1pb3MtbWFpbCIsInBhdGgiOiIvd29ya2F0
2293
- YXN0YXJ0dXAvaW5ib3giLCJ3YWFzX3VucmVhZF9pbmJveCI6dHJ1ZX0seyJuYW1lIjoiQXBwbGlj
2294
- YW50cyIsImljb24iOiJpb24taW9zLWhhbmQiLCJwYXRoIjoiL3dvcmthdGFzdGFydHVwL2FwcGxp
2295
- ZWQiLCJ3YWFzX3VucmVhZF9hcHBsaWVkIjp0cnVlfSx7Im5hbWUiOiJKb2JzIiwiaWNvbiI6Imlv
2296
- bi1tZC1kb2N1bWVudCIsInBhdGgiOiIvY29tcGFueS8yMzEwNS9qb2JzIiwiYmFkZ2VfY29udGVu
2297
- dCI6bnVsbH1dLCJ3YWFzX3VucmVhZF9pbmJveCI6dHJ1ZX0seyJuYW1lIjoiQ29tcGFueSIsImlj
2298
- b24iOiJpb24tbWQtYnJpZWZjYXNlIiwiZW50cmllcyI6W3sibmFtZSI6IlF1ZXN0Ym9vayIsImlj
2299
- b24iOiJpb24tbWQtYnJpZWZjYXNlIiwicGF0aCI6Ii9jb21wYW55LzIzMTA1In0seyJuYW1lIjoi
2300
- SW52ZXN0bWVudHMiLCJpY29uIjoiaW9uLWlvcy1yZXR1cm4tcmlnaHQiLCJwYXRoIjoiL2NvbXBh
2301
- bnkvMjMxMDUvaW52ZXN0bWVudHMifSx7Im5hbWUiOiJEZW1vIERheSBMZWFkcyIsImljb24iOiJp
2302
- b24taW9zLXJldHVybi1yaWdodCIsInBhdGgiOiIvY29tcGFueS8yMzEwNS9kZW1vX2RheV9pbnZl
2303
- c3RvcnMifSx7Im5hbWUiOiJSYXRlIHlvdXIgaW52ZXN0b3JzIiwiaWNvbiI6Imlvbi1pb3MtcmV0
2304
- dXJuLXJpZ2h0IiwicGF0aCI6Ii9pbnZlc3Rvcl9ncmFkZXMifSx7Im5hbWUiOiJJbnZlc3RvciBV
2305
- cGRhdGVzIiwiaWNvbiI6Imlvbi1pb3MtcmV0dXJuLXJpZ2h0IiwicGF0aCI6Ii9jb21wYW5pZXMv
2306
- MjMxNTUvY29tcGFueV91cGRhdGVzIn1dfV0sInJpZ2h0IjpbeyJuYW1lIjoiTWFkaGF2YW4iLCJp
2307
- Y29uIjoiaW9uLW1kLWNvbnRhY3QiLCJ0eXBlIjoidXNlciIsImVudHJpZXMiOlt7Im5hbWUiOiJN
2308
- eSBQcm9maWxlIiwiaWNvbiI6Imlvbi1tZC1jb250YWN0IiwicGF0aCI6Ii91c2VyLzE4Mjg1MyJ9
2309
- LHsibmFtZSI6IkZvcnVtIE5vdGlmaWNhdGlvbnMiLCJpY29uIjoiaW9uLW1kLW5vdGlmaWNhdGlv
2310
- bnMiLCJwYXRoIjoiL2ZvcnVtL25vdGlmaWNhdGlvbnMifSx7Im5hbWUiOiJGb3J1bSBLZXl3b3Jk
2311
- IEFsZXJ0cyIsImljb24iOiJpb24tbWQtaGVhZHNldCIsInBhdGgiOiIvZm9ydW1fYWxlcnRzIn0s
2312
- eyJuYW1lIjoiTG9nIE91dCIsImljb24iOiJpb24tbWQtbG9nLW91dCIsInBhdGgiOiIvc2Vzc2lv
2313
- bi9sb2dvdXQifV19XX0sImJyYW5kSW1hZ2VVcmwiOiJodHRwczovL2Jvb2tmYWNlLnljb21iaW5h
2314
- dG9yLmNvbS9hc3NldHMveWNvbWJpbmF0b3ItbG9nby0zN2NmMDMwZmJjMjU1ZmM3MWQxOWFhMjFi
2315
- ZDViMzIwNzZhYTIwNmU4ZmJkMDEyMWM5MjQ3ZGIyYWRjYmQ3ODUxLnBuZyIsImJyYW5kSHJlZiI6
2316
- Ii9ob21lIiwiY3VycmVudFVzZXIiOnsiYXZhdGFyVGh1bWJVcmwiOiJodHRwczovL2Jvb2tmYWNl
2317
- LWltYWdlcy5zMy5hbWF6b25hd3MuY29tL2F2YXRhcnMvYTVjMDVjMDg3Y2YwYjI1Y2YwZTA4NjU0
2318
- ZTJkOTUxMjhlMzc5YjdlYy5qcGcifSwiY3VycmVudFBhdGgiOiIvaG9tZSIsInNlYXJjaFZpc2li
2319
- bGUiOnRydWUsInN1Ym5hdiI6bnVsbCwiaW5XYWFzIjpmYWxzZSwid2Fhc0hyZWYiOiJodHRwczov
2320
- L2Jvb2tmYWNlLnljb21iaW5hdG9yLmNvbS93b3JrYXRhc3RhcnR1cC9kYXNoYm9hcmQiLCJoYXNC
2321
- b29rZmFjZSI6dHJ1ZSwibG9nZ2VkSW4iOnRydWUsInJlbGVhc2VOb3RlcyI6eyJub3RlcyI6W10s
2322
- InR5cGUiOiJib29rZmFjZSIsInNpbmNlIjpudWxsfSwiYm9yZGVyVHlwZSI6Ik5vbmUiLCJuZXdT
2323
- ZWFyY2hVc2VyIjpudWxsfTwvc2NyaXB0PgogICAgICAKPCEtLSBBbXBsaXR1ZGUgLS0+PHNjcmlw
2324
- dD4oZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFtcGxpdHVkZXx8e19xOltdLF9pcTp7fX07dmFyIHI9
2325
- dC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKQpyLnR5cGU9InRleHQvamF2YXNjcmlwdCI7CnIuaW50
2326
- ZWdyaXR5PSJzaGEzODQtNWZoekM4WHczbSt4NWNCYWc0QU1LUmRmOTAwdnczQW9hTHR5MnZZZmNL
2327
- SVgxaUVzWVJIWkY0UkxYSXN1Mm8rRiIKci5jcm9zc09yaWdpbj0iYW5vbnltb3VzIjtyLmFzeW5j
2328
- PXRydWU7CnIuc3JjPSJodHRwczovL2Nkbi5hbXBsaXR1ZGUuY29tL2xpYnMvYW1wbGl0dWRlLTgu
2329
- MjEuNC1taW4uZ3ouanMiOwpyLm9ubG9hZD1mdW5jdGlvbigpe2lmKCFlLmFtcGxpdHVkZS5ydW5R
2330
- dWV1ZWRGdW5jdGlvbnMpe2NvbnNvbGUubG9nKAoiW0FtcGxpdHVkZV0gRXJyb3I6IGNvdWxkIG5v
2331
- dCBsb2FkIFNESyIpfX07dmFyIHM9dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IgopWzBd
2332
- O3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixzKTtmdW5jdGlvbiBpKGUsdCl7ZS5wcm90b3R5
2333
- cGVbdF09ZnVuY3Rpb24oKXsKdGhpcy5fcS5wdXNoKFt0XS5jb25jYXQoQXJyYXkucHJvdG90eXBl
2334
- LnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSk7cmV0dXJuIHRoaXN9fQp2YXIgbz1mdW5jdGlvbigp
2335
- e3RoaXMuX3E9W107cmV0dXJuIHRoaXN9O3ZhciBhPVsiYWRkIiwiYXBwZW5kIiwiY2xlYXJBbGwi
2336
- LAoicHJlcGVuZCIsInNldCIsInNldE9uY2UiLCJ1bnNldCIsInByZUluc2VydCIsInBvc3RJbnNl
2337
- cnQiLCJyZW1vdmUiXTtmb3IoCnZhciBjPTA7YzxhLmxlbmd0aDtjKyspe2kobyxhW2NdKX1uLklk
2338
- ZW50aWZ5PW87dmFyIGw9ZnVuY3Rpb24oKXt0aGlzLl9xPVtdOwpyZXR1cm4gdGhpc307dmFyIHU9
2339
- WyJzZXRQcm9kdWN0SWQiLCJzZXRRdWFudGl0eSIsInNldFByaWNlIiwic2V0UmV2ZW51ZVR5cGUi
2340
- LAoic2V0RXZlbnRQcm9wZXJ0aWVzIl07Zm9yKHZhciBwPTA7cDx1Lmxlbmd0aDtwKyspe2kobCx1
2341
- W3BdKX1uLlJldmVudWU9bDt2YXIgZD1bCiJpbml0IiwibG9nRXZlbnQiLCJsb2dSZXZlbnVlIiwi
2342
- c2V0VXNlcklkIiwic2V0VXNlclByb3BlcnRpZXMiLCJzZXRPcHRPdXQiLAoic2V0VmVyc2lvbk5h
2343
- bWUiLCJzZXREb21haW4iLCJzZXREZXZpY2VJZCIsImVuYWJsZVRyYWNraW5nIiwKInNldEdsb2Jh
2344
- bFVzZXJQcm9wZXJ0aWVzIiwiaWRlbnRpZnkiLCJjbGVhclVzZXJQcm9wZXJ0aWVzIiwic2V0R3Jv
2345
- dXAiLAoibG9nUmV2ZW51ZVYyIiwicmVnZW5lcmF0ZURldmljZUlkIiwiZ3JvdXBJZGVudGlmeSIs
2346
- Im9uSW5pdCIsIm9uTmV3U2Vzc2lvblN0YXJ0IgosImxvZ0V2ZW50V2l0aFRpbWVzdGFtcCIsImxv
2347
- Z0V2ZW50V2l0aEdyb3VwcyIsInNldFNlc3Npb25JZCIsInJlc2V0U2Vzc2lvbklkIiwKImdldERl
2348
- dmljZUlkIiwiZ2V0VXNlcklkIiwic2V0TWluVGltZUJldHdlZW5TZXNzaW9uc01pbGxpcyIsCiJz
2349
- ZXRFdmVudFVwbG9hZFRocmVzaG9sZCIsInNldFVzZUR5bmFtaWNDb25maWciLCJzZXRTZXJ2ZXJa
2350
- b25lIiwic2V0U2VydmVyVXJsIiwKInNlbmRFdmVudHMiLCJzZXRMaWJyYXJ5Iiwic2V0VHJhbnNw
2351
- b3J0Il07ZnVuY3Rpb24gdih0KXtmdW5jdGlvbiBlKGUpe3RbZQpdPWZ1bmN0aW9uKCl7dC5fcS5w
2352
- dXNoKFtlXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSl9
2353
- fQpmb3IodmFyIG49MDtuPGQubGVuZ3RoO24rKyl7ZShkW25dKX19dihuKTtuLmdldEluc3RhbmNl
2354
- PWZ1bmN0aW9uKGUpe2U9KAohZXx8ZS5sZW5ndGg9PT0wPyIkZGVmYXVsdF9pbnN0YW5jZSI6ZSku
2355
- dG9Mb3dlckNhc2UoKTtpZigKIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChu
2356
- Ll9pcSxlKSl7bi5faXFbZV09e19xOltdfTt2KG4uX2lxW2VdKX0KcmV0dXJuIG4uX2lxW2VdfTtl
2357
- LmFtcGxpdHVkZT1ufSkod2luZG93LGRvY3VtZW50KTsKYW1wbGl0dWRlLmdldEluc3RhbmNlKCku
2358
- aW5pdCgiNzEyYzFhNGRiY2RiOWYzZmJhNmQ0YWE1MDI1MDExMmUiLCBudWxsLCB7aW5jbHVkZVJl
2359
- ZmVycmVyOiB0cnVlLCBpbmNsdWRlVXRtOiB0cnVlLCBpbmNsdWRlR2NsaWQ6IHRydWV9KTs8L3Nj
2360
- cmlwdD48c2NyaXB0PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oZSkg
2361
- ewogIHNldFRpbWVvdXQoKCkgPT4gewogICAgdmFyIHRyYWl0cyA9IHsKICAgICAgZmlyc3RfbmFt
2362
- ZTogJ01hZGhhdmFuJywKICAgICAgbGFzdF9uYW1lOiAnTWFsb2xhbicsCiAgICAgIGNyZWF0ZWRf
2363
- YXQ6ICcyMDE3LTAzLTA3IDA4OjIwOjI2IFVUQycsCiAgICAgIGVtYWlsOiAnbWFkaGF2YW5AY3Jl
2364
- YXRvcm9zLmNvJywKICAgICAgaG5pZDogJ21hZGhhdmFubWFsb2xhbicsCiAgICAgIGNvbXBhbnk6
2365
- ICdRdWVzdGJvb2snLAogICAgICBiYXRjaDogJ3cyMDIxJywKICAgICAgYmF0Y2hlczogJ3cyMDIx
2366
- JywKICAgICAgaXNfeWM6ICd0cnVlJywKICAgICAgaXNfY29yZTogJ3RydWUnLAogICAgICBpc19m
2367
- ZWxsb3dzaGlwOiAnZmFsc2UnLAogICAgICBpc19hY3RpdmVfZm91bmRlcjogJ3RydWUnLAogICAg
2368
- ICBpc19pbnZlc3RvcjogJ2ZhbHNlJywKICAgICAgaXNfbWVkaWE6ICdmYWxzZScsCiAgICAgIGlu
2369
- X2N1cnJlbnRfYmF0Y2g6ICdmYWxzZScsCiAgICB9OwogICAgd2luZG93LmFtcGxpdHVkZS5nZXRJ
2370
- bnN0YW5jZSgpLnNldFVzZXJJZCgnMTgyODUzJykKICAgIHdpbmRvdy5hbXBsaXR1ZGUuZ2V0SW5z
2371
- dGFuY2UoKS5zZXRVc2VyUHJvcGVydGllcyh0cmFpdHMpOwogICAgd2luZG93LmFtcGxpdHVkZS5n
2372
- ZXRJbnN0YW5jZSgpLmxvZ0V2ZW50KCdMb2FkZWQgYSBQYWdlJywgewogICAgICBwYXRoOiBsb2Nh
2373
- dGlvbi5wYXRobmFtZSwKICAgICAgcmVmZXJyZXI6IGRvY3VtZW50LnJlZmVycmVyLAogICAgICBz
2374
- ZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCwKICAgICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLAogICAg
2375
- ICB1cmw6IGxvY2F0aW9uLmhyZWYsCiAgICB9KTsKICB9LCAyNTAwKTsKfSk7PC9zY3JpcHQ+PCEt
2376
- LSBFbmQgQW1wbGl0dWRlIC0tPiAgPHNjcmlwdD4KICB3aW5kb3dbJ19mc19ob3N0J10gPSAnZnVs
2377
- bHN0b3J5LmNvbSc7CiAgd2luZG93WydfZnNfc2NyaXB0J10gPSAnZWRnZS5mdWxsc3RvcnkuY29t
2378
- L3MvZnMuanMnOwogIHdpbmRvd1snX2ZzX29yZyddID0gJ1lXS1c1JzsKICB3aW5kb3dbJ19mc19u
2379
- YW1lc3BhY2UnXSA9ICdGUyc7CiAgKGZ1bmN0aW9uKG0sbixlLHQsbCxvLGcseSl7CiAgICBpZiAo
2380
- ZSBpbiBtKSB7aWYobS5jb25zb2xlICYmIG0uY29uc29sZS5sb2cpIHsgbS5jb25zb2xlLmxvZygn
2381
- RnVsbFN0b3J5IG5hbWVzcGFjZSBjb25mbGljdC4gUGxlYXNlIHNldCB3aW5kb3dbIl9mc19uYW1l
2382
- c3BhY2UiXS4nKTt9IHJldHVybjt9CiAgICBnPW1bZV09ZnVuY3Rpb24oYSxiLHMpe2cucT9nLnEu
2383
- cHVzaChbYSxiLHNdKTpnLl9hcGkoYSxiLHMpO307Zy5xPVtdOwogICAgbz1uLmNyZWF0ZUVsZW1l
2384
- bnQodCk7by5hc3luYz0xO28uY3Jvc3NPcmlnaW49J2Fub255bW91cyc7by5zcmM9J2h0dHBzOi8v
2385
- JytfZnNfc2NyaXB0OwogICAgeT1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO3kucGFyZW50
2386
- Tm9kZS5pbnNlcnRCZWZvcmUobyx5KTsKICAgIGcuaWRlbnRpZnk9ZnVuY3Rpb24oaSx2LHMpe2co
2387
- bCx7dWlkOml9LHMpO2lmKHYpZyhsLHYscyl9O2cuc2V0VXNlclZhcnM9ZnVuY3Rpb24odixzKXtn
2388
- KGwsdixzKX07Zy5ldmVudD1mdW5jdGlvbihpLHYscyl7ZygnZXZlbnQnLHtuOmkscDp2fSxzKX07
2389
- CiAgICBnLmFub255bWl6ZT1mdW5jdGlvbigpe2cuaWRlbnRpZnkoISEwKX07CiAgICBnLnNodXRk
2390
- b3duPWZ1bmN0aW9uKCl7ZygicmVjIiwhMSl9O2cucmVzdGFydD1mdW5jdGlvbigpe2coInJlYyIs
2391
- ITApfTsKICAgIGcubG9nID0gZnVuY3Rpb24oYSxiKXtnKCJsb2ciLFthLGJdKX07CiAgICBnLmNv
2392
- bnNlbnQ9ZnVuY3Rpb24oYSl7ZygiY29uc2VudCIsIWFyZ3VtZW50cy5sZW5ndGh8fGEpfTsKICAg
2393
- IGcuaWRlbnRpZnlBY2NvdW50PWZ1bmN0aW9uKGksdil7bz0nYWNjb3VudCc7dj12fHx7fTt2LmFj
2394
- Y3RJZD1pO2cobyx2KX07CiAgICBnLmNsZWFyVXNlckNvb2tpZT1mdW5jdGlvbigpe307CiAgICBn
2395
- LnNldFZhcnM9ZnVuY3Rpb24obiwgcCl7Zygnc2V0VmFycycsW24scF0pO307CiAgICBnLl93PXt9
2396
- O3k9J1hNTEh0dHBSZXF1ZXN0JztnLl93W3ldPW1beV07eT0nZmV0Y2gnO2cuX3dbeV09bVt5XTsK
2397
- ICAgIGlmKG1beV0pbVt5XT1mdW5jdGlvbigpe3JldHVybiBnLl93W3ldLmFwcGx5KHRoaXMsYXJn
2398
- dW1lbnRzKX07CiAgICBnLl92PSIxLjMuMCI7CiAgfSkod2luZG93LGRvY3VtZW50LHdpbmRvd1sn
2399
- X2ZzX25hbWVzcGFjZSddLCdzY3JpcHQnLCd1c2VyJyk7CgogIC8vIFRoaXMgaXMgYW4gZXhhbXBs
2400
- ZSBzY3JpcHQgLSBkb24ndCBmb3JnZXQgdG8gY2hhbmdlIGl0IQogIEZTLmlkZW50aWZ5KDE4Mjg1
2401
- MywgewogICAgZGlzcGxheU5hbWU6ICdNYWRoYXZhbiBNYWxvbGFuJywKICAgIGVtYWlsOiAnbWFk
2402
- aGF2YW5AY3JlYXRvcm9zLmNvJywKICB9KTsKICA8L3NjcmlwdD4KPCEtLSBHb29nbGUgQW5hbHl0
2403
- aWNzIC0tPgo8c2NyaXB0PgooZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0
2404
- aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CihpW3JdLnE9aVtyXS5xfHxbXSku
2405
- cHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8p
2406
- LAptPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJl
2407
- bnROb2RlLmluc2VydEJlZm9yZShhLG0pCn0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnLy93
2408
- d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2EnKTsKCmdhKCdjcmVhdGUn
2409
- LCAnVUEtNjY0NTIyMTAtMScsICdhdXRvJywgeydsZWdhY3lDb29raWVEb21haW4nOiAnYm9va2Zh
2410
- Y2UueWNvbWJpbmF0b3IuY29tJ30pOwpnYSgnc2V0JywgJ3VzZXJJZCcsIDE4Mjg1Myk7IC8vIFNl
2411
- dCB0aGUgdXNlciBJRCB1c2luZyBzaWduZWQtaW4gdXNlcl9pZC4KZ2EoJ3NldCcsICdkaW1lbnNp
2412
- b24xJywgZmFsc2UpOwpnYSgnc2V0JywgJ2RpbWVuc2lvbjInLCAndzIwMjEnKTsKZ2EoJ3NldCcs
2413
- ICdkaW1lbnNpb24zJywgdHJ1ZSk7CmdhKCdzZXQnLCAnZGltZW5zaW9uNCcsIHRydWUpOwpnYSgn
2414
- c2VuZCcsICdwYWdldmlldycpOwoKPC9zY3JpcHQ+CjwhLS0gRW5kIEdvb2dsZSBBbmFseXRpY3Mg
2415
- LS0+CjwvYm9keT48L2h0bWw+DQowDQoNCg==`, 'base64');
2416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5odHRwLXByb3ZpZGVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RzL3Rlc3QuaHR0cC1wcm92aWRlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUFzRDtBQUN0RCxvREFBMkI7QUFDM0IsdUNBQXlDO0FBQ3pDLDZDQUF5QztBQUN6Qyw4REFBNkM7QUFDN0Msb0RBS2lDO0FBQ2pDLGlFQUFxRTtBQUVyRSxxQ0FBMEk7QUFDMUksMkJBQTJDO0FBRTNDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBTSxDQUFDLENBQUE7QUFFdkIsTUFBTSxHQUFHLEdBQUcscUJBQVksQ0FBQTtBQUV4QixRQUFRLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBRTFDLE1BQU0sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsMEJBQTBCLEVBQzFCLEdBQUcscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVyQixNQUFNLFVBQVUsR0FBMkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1FBQ3hELDJGQUEyRjtRQUMzRix1N0hBQXU3SDtRQUN2N0gsbVlBQW1ZO1FBQ25ZLDJHQUEyRztRQUMzRywyWkFBMlo7UUFDM1osMlpBQTJaO1FBQzNaLHVNQUF1TTtRQUN2TSwyQ0FBMkM7UUFDM0MsMkZBQTJGO1FBQzNGLDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0MsMkNBQTJDO1FBQzNDLHVDQUF1QztRQUN2QywyQ0FBMkM7UUFDM0MsdUNBQXVDO1FBQ3ZDLHViQUF1YjtRQUN2YixvM0hBQW8zSCxDQUFDO1NBQ3AzSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDWixHQUFHLENBQUM7UUFDSixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztLQUN6QyxDQUFDLENB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUNBb21DSyxFQUFFLFFBQVEsQ0FBQyxDQUFBIn0=