k-l-lambda Claude commited on
Commit
7be3ed0
·
1 Parent(s): 84c3e8c

Fix: remove scss api setting and add debug output for vite build

Browse files
Dockerfile CHANGED
@@ -3,7 +3,7 @@ FROM node:20-slim
3
  # Set noninteractive installation
4
  ENV DEBIAN_FRONTEND=noninteractive
5
 
6
- # Build timestamp to force cache invalidation: 2026-01-12T18:50
7
 
8
  # Install build dependencies
9
  RUN apt-get update && apt-get install -y \
@@ -31,8 +31,8 @@ RUN npm install --omit=dev && \
31
  # Skip jison parser build - pre-built tgnParser.cjs is already in public/lib/
32
  # RUN tsx tools/buildJisonParser.ts
33
 
34
- # Build frontend (generates dist folder) - skip vue-tsc type checking, use build:prod
35
- RUN cd app && npm run build:prod
36
 
37
  # Build backend with esbuild (handles ESM imports without .js extensions)
38
  RUN esbuild backend/src/server.ts --bundle --platform=node --target=node20 --format=esm --outfile=backend/dist/server.js --external:express --external:socket.io --external:cors --external:dotenv --external:uuid
 
3
  # Set noninteractive installation
4
  ENV DEBIAN_FRONTEND=noninteractive
5
 
6
+ # Build timestamp to force cache invalidation: 2026-01-12T18:55
7
 
8
  # Install build dependencies
9
  RUN apt-get update && apt-get install -y \
 
31
  # Skip jison parser build - pre-built tgnParser.cjs is already in public/lib/
32
  # RUN tsx tools/buildJisonParser.ts
33
 
34
+ # Build frontend (generates dist folder) - use npx for more control
35
+ RUN cd app && npx vite build --debug 2>&1 || (echo "Vite build failed" && ls -la node_modules/.bin/ && exit 1)
36
 
37
  # Build backend with esbuild (handles ESM imports without .js extensions)
38
  RUN esbuild backend/src/server.ts --bundle --platform=node --target=node20 --format=esm --outfile=backend/dist/server.js --external:express --external:socket.io --external:cors --external:dotenv --external:uuid
trigo-web/app/package-lock.json CHANGED
@@ -20,7 +20,7 @@
20
  "@types/d3": "^7.4.3",
21
  "@types/three": "^0.156.0",
22
  "@vitejs/plugin-vue": "^5.2.4",
23
- "sass-embedded": "^1.93.2",
24
  "typescript": "^5.2.2",
25
  "vite": "^5.4.21",
26
  "vue-tsc": "^2.2.12"
@@ -72,7 +72,9 @@
72
  "version": "2.10.0",
73
  "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.0.tgz",
74
  "integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==",
75
- "dev": true
 
 
76
  },
77
  "node_modules/@esbuild/aix-ppc64": {
78
  "version": "0.21.5",
@@ -1541,14 +1543,15 @@
1541
  "version": "0.2.0",
1542
  "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
1543
  "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
1544
- "dev": true
 
 
1545
  },
1546
  "node_modules/chokidar": {
1547
  "version": "4.0.3",
1548
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
1549
  "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
1550
  "dev": true,
1551
- "optional": true,
1552
  "dependencies": {
1553
  "readdirp": "^4.0.1"
1554
  },
@@ -1563,7 +1566,9 @@
1563
  "version": "0.5.2",
1564
  "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
1565
  "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
1566
- "dev": true
 
 
1567
  },
1568
  "node_modules/commander": {
1569
  "version": "7.2.0",
@@ -2103,6 +2108,8 @@
2103
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2104
  "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2105
  "dev": true,
 
 
2106
  "engines": {
2107
  "node": ">=8"
2108
  }
@@ -2329,7 +2336,6 @@
2329
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
2330
  "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
2331
  "dev": true,
2332
- "optional": true,
2333
  "engines": {
2334
  "node": ">= 14.18.0"
2335
  },
@@ -2394,6 +2400,8 @@
2394
  "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
2395
  "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
2396
  "dev": true,
 
 
2397
  "dependencies": {
2398
  "tslib": "^2.1.0"
2399
  }
@@ -2408,7 +2416,6 @@
2408
  "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz",
2409
  "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==",
2410
  "dev": true,
2411
- "optional": true,
2412
  "dependencies": {
2413
  "chokidar": "^4.0.0",
2414
  "immutable": "^5.0.2",
@@ -2429,6 +2436,8 @@
2429
  "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.93.2.tgz",
2430
  "integrity": "sha512-FvQdkn2dZ8DGiLgi0Uf4zsj7r/BsiLImNa5QJ10eZalY6NfZyjrmWGFcuCN5jNwlDlXFJnftauv+UtvBKLvepQ==",
2431
  "dev": true,
 
 
2432
  "dependencies": {
2433
  "@bufbuild/protobuf": "^2.5.0",
2434
  "buffer-builder": "^0.2.0",
@@ -2478,6 +2487,7 @@
2478
  ],
2479
  "dev": true,
2480
  "optional": true,
 
2481
  "dependencies": {
2482
  "sass": "1.93.2"
2483
  }
@@ -2494,6 +2504,7 @@
2494
  "os": [
2495
  "android"
2496
  ],
 
2497
  "engines": {
2498
  "node": ">=14.0.0"
2499
  }
@@ -2510,6 +2521,7 @@
2510
  "os": [
2511
  "android"
2512
  ],
 
2513
  "engines": {
2514
  "node": ">=14.0.0"
2515
  }
@@ -2526,6 +2538,7 @@
2526
  "os": [
2527
  "android"
2528
  ],
 
2529
  "engines": {
2530
  "node": ">=14.0.0"
2531
  }
@@ -2542,6 +2555,7 @@
2542
  "os": [
2543
  "android"
2544
  ],
 
2545
  "engines": {
2546
  "node": ">=14.0.0"
2547
  }
@@ -2558,6 +2572,7 @@
2558
  "os": [
2559
  "darwin"
2560
  ],
 
2561
  "engines": {
2562
  "node": ">=14.0.0"
2563
  }
@@ -2574,6 +2589,7 @@
2574
  "os": [
2575
  "darwin"
2576
  ],
 
2577
  "engines": {
2578
  "node": ">=14.0.0"
2579
  }
@@ -2590,6 +2606,7 @@
2590
  "os": [
2591
  "linux"
2592
  ],
 
2593
  "engines": {
2594
  "node": ">=14.0.0"
2595
  }
@@ -2606,6 +2623,7 @@
2606
  "os": [
2607
  "linux"
2608
  ],
 
2609
  "engines": {
2610
  "node": ">=14.0.0"
2611
  }
@@ -2622,6 +2640,7 @@
2622
  "os": [
2623
  "linux"
2624
  ],
 
2625
  "engines": {
2626
  "node": ">=14.0.0"
2627
  }
@@ -2638,6 +2657,7 @@
2638
  "os": [
2639
  "linux"
2640
  ],
 
2641
  "engines": {
2642
  "node": ">=14.0.0"
2643
  }
@@ -2654,6 +2674,7 @@
2654
  "os": [
2655
  "linux"
2656
  ],
 
2657
  "engines": {
2658
  "node": ">=14.0.0"
2659
  }
@@ -2670,6 +2691,7 @@
2670
  "os": [
2671
  "linux"
2672
  ],
 
2673
  "engines": {
2674
  "node": ">=14.0.0"
2675
  }
@@ -2686,6 +2708,7 @@
2686
  "os": [
2687
  "linux"
2688
  ],
 
2689
  "engines": {
2690
  "node": ">=14.0.0"
2691
  }
@@ -2702,6 +2725,7 @@
2702
  "os": [
2703
  "linux"
2704
  ],
 
2705
  "engines": {
2706
  "node": ">=14.0.0"
2707
  }
@@ -2718,6 +2742,7 @@
2718
  "!linux",
2719
  "!win32"
2720
  ],
 
2721
  "dependencies": {
2722
  "sass": "1.93.2"
2723
  }
@@ -2734,6 +2759,7 @@
2734
  "os": [
2735
  "win32"
2736
  ],
 
2737
  "engines": {
2738
  "node": ">=14.0.0"
2739
  }
@@ -2750,6 +2776,7 @@
2750
  "os": [
2751
  "win32"
2752
  ],
 
2753
  "engines": {
2754
  "node": ">=14.0.0"
2755
  }
@@ -2793,6 +2820,8 @@
2793
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2794
  "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2795
  "dev": true,
 
 
2796
  "dependencies": {
2797
  "has-flag": "^4.0.0"
2798
  },
@@ -2808,6 +2837,8 @@
2808
  "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz",
2809
  "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==",
2810
  "dev": true,
 
 
2811
  "dependencies": {
2812
  "sync-message-port": "^1.0.0"
2813
  },
@@ -2820,6 +2851,8 @@
2820
  "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz",
2821
  "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==",
2822
  "dev": true,
 
 
2823
  "engines": {
2824
  "node": ">=16.0.0"
2825
  }
@@ -2846,7 +2879,9 @@
2846
  "version": "2.8.1",
2847
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2848
  "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
2849
- "dev": true
 
 
2850
  },
2851
  "node_modules/typescript": {
2852
  "version": "5.9.3",
@@ -2873,7 +2908,9 @@
2873
  "version": "6.0.0",
2874
  "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
2875
  "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
2876
- "dev": true
 
 
2877
  },
2878
  "node_modules/vite": {
2879
  "version": "5.4.21",
 
20
  "@types/d3": "^7.4.3",
21
  "@types/three": "^0.156.0",
22
  "@vitejs/plugin-vue": "^5.2.4",
23
+ "sass": "^1.77.0",
24
  "typescript": "^5.2.2",
25
  "vite": "^5.4.21",
26
  "vue-tsc": "^2.2.12"
 
72
  "version": "2.10.0",
73
  "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.0.tgz",
74
  "integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==",
75
+ "dev": true,
76
+ "optional": true,
77
+ "peer": true
78
  },
79
  "node_modules/@esbuild/aix-ppc64": {
80
  "version": "0.21.5",
 
1543
  "version": "0.2.0",
1544
  "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
1545
  "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
1546
+ "dev": true,
1547
+ "optional": true,
1548
+ "peer": true
1549
  },
1550
  "node_modules/chokidar": {
1551
  "version": "4.0.3",
1552
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
1553
  "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
1554
  "dev": true,
 
1555
  "dependencies": {
1556
  "readdirp": "^4.0.1"
1557
  },
 
1566
  "version": "0.5.2",
1567
  "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
1568
  "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
1569
+ "dev": true,
1570
+ "optional": true,
1571
+ "peer": true
1572
  },
1573
  "node_modules/commander": {
1574
  "version": "7.2.0",
 
2108
  "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2109
  "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2110
  "dev": true,
2111
+ "optional": true,
2112
+ "peer": true,
2113
  "engines": {
2114
  "node": ">=8"
2115
  }
 
2336
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
2337
  "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
2338
  "dev": true,
 
2339
  "engines": {
2340
  "node": ">= 14.18.0"
2341
  },
 
2400
  "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
2401
  "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
2402
  "dev": true,
2403
+ "optional": true,
2404
+ "peer": true,
2405
  "dependencies": {
2406
  "tslib": "^2.1.0"
2407
  }
 
2416
  "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz",
2417
  "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==",
2418
  "dev": true,
 
2419
  "dependencies": {
2420
  "chokidar": "^4.0.0",
2421
  "immutable": "^5.0.2",
 
2436
  "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.93.2.tgz",
2437
  "integrity": "sha512-FvQdkn2dZ8DGiLgi0Uf4zsj7r/BsiLImNa5QJ10eZalY6NfZyjrmWGFcuCN5jNwlDlXFJnftauv+UtvBKLvepQ==",
2438
  "dev": true,
2439
+ "optional": true,
2440
+ "peer": true,
2441
  "dependencies": {
2442
  "@bufbuild/protobuf": "^2.5.0",
2443
  "buffer-builder": "^0.2.0",
 
2487
  ],
2488
  "dev": true,
2489
  "optional": true,
2490
+ "peer": true,
2491
  "dependencies": {
2492
  "sass": "1.93.2"
2493
  }
 
2504
  "os": [
2505
  "android"
2506
  ],
2507
+ "peer": true,
2508
  "engines": {
2509
  "node": ">=14.0.0"
2510
  }
 
2521
  "os": [
2522
  "android"
2523
  ],
2524
+ "peer": true,
2525
  "engines": {
2526
  "node": ">=14.0.0"
2527
  }
 
2538
  "os": [
2539
  "android"
2540
  ],
2541
+ "peer": true,
2542
  "engines": {
2543
  "node": ">=14.0.0"
2544
  }
 
2555
  "os": [
2556
  "android"
2557
  ],
2558
+ "peer": true,
2559
  "engines": {
2560
  "node": ">=14.0.0"
2561
  }
 
2572
  "os": [
2573
  "darwin"
2574
  ],
2575
+ "peer": true,
2576
  "engines": {
2577
  "node": ">=14.0.0"
2578
  }
 
2589
  "os": [
2590
  "darwin"
2591
  ],
2592
+ "peer": true,
2593
  "engines": {
2594
  "node": ">=14.0.0"
2595
  }
 
2606
  "os": [
2607
  "linux"
2608
  ],
2609
+ "peer": true,
2610
  "engines": {
2611
  "node": ">=14.0.0"
2612
  }
 
2623
  "os": [
2624
  "linux"
2625
  ],
2626
+ "peer": true,
2627
  "engines": {
2628
  "node": ">=14.0.0"
2629
  }
 
2640
  "os": [
2641
  "linux"
2642
  ],
2643
+ "peer": true,
2644
  "engines": {
2645
  "node": ">=14.0.0"
2646
  }
 
2657
  "os": [
2658
  "linux"
2659
  ],
2660
+ "peer": true,
2661
  "engines": {
2662
  "node": ">=14.0.0"
2663
  }
 
2674
  "os": [
2675
  "linux"
2676
  ],
2677
+ "peer": true,
2678
  "engines": {
2679
  "node": ">=14.0.0"
2680
  }
 
2691
  "os": [
2692
  "linux"
2693
  ],
2694
+ "peer": true,
2695
  "engines": {
2696
  "node": ">=14.0.0"
2697
  }
 
2708
  "os": [
2709
  "linux"
2710
  ],
2711
+ "peer": true,
2712
  "engines": {
2713
  "node": ">=14.0.0"
2714
  }
 
2725
  "os": [
2726
  "linux"
2727
  ],
2728
+ "peer": true,
2729
  "engines": {
2730
  "node": ">=14.0.0"
2731
  }
 
2742
  "!linux",
2743
  "!win32"
2744
  ],
2745
+ "peer": true,
2746
  "dependencies": {
2747
  "sass": "1.93.2"
2748
  }
 
2759
  "os": [
2760
  "win32"
2761
  ],
2762
+ "peer": true,
2763
  "engines": {
2764
  "node": ">=14.0.0"
2765
  }
 
2776
  "os": [
2777
  "win32"
2778
  ],
2779
+ "peer": true,
2780
  "engines": {
2781
  "node": ">=14.0.0"
2782
  }
 
2820
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2821
  "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2822
  "dev": true,
2823
+ "optional": true,
2824
+ "peer": true,
2825
  "dependencies": {
2826
  "has-flag": "^4.0.0"
2827
  },
 
2837
  "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz",
2838
  "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==",
2839
  "dev": true,
2840
+ "optional": true,
2841
+ "peer": true,
2842
  "dependencies": {
2843
  "sync-message-port": "^1.0.0"
2844
  },
 
2851
  "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz",
2852
  "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==",
2853
  "dev": true,
2854
+ "optional": true,
2855
+ "peer": true,
2856
  "engines": {
2857
  "node": ">=16.0.0"
2858
  }
 
2879
  "version": "2.8.1",
2880
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2881
  "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
2882
+ "dev": true,
2883
+ "optional": true,
2884
+ "peer": true
2885
  },
2886
  "node_modules/typescript": {
2887
  "version": "5.9.3",
 
2908
  "version": "6.0.0",
2909
  "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
2910
  "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
2911
+ "dev": true,
2912
+ "optional": true,
2913
+ "peer": true
2914
  },
2915
  "node_modules/vite": {
2916
  "version": "5.4.21",
trigo-web/app/vite.config.ts CHANGED
@@ -57,7 +57,7 @@ export default defineConfig(({ mode }) => {
57
  css: {
58
  preprocessorOptions: {
59
  scss: {
60
- api: "modern" // Use modern Sass API
61
  }
62
  }
63
  },
 
57
  css: {
58
  preprocessorOptions: {
59
  scss: {
60
+ // Let vite auto-detect the correct SCSS API
61
  }
62
  }
63
  },